From e5472d0f4e612693f94a98aba134f0b54e643e2f Mon Sep 17 00:00:00 2001 From: cte Date: Mon, 2 Jun 2025 18:27:04 -0700 Subject: [PATCH 1/9] Move evals --- packages/evals/README.md | 15 + packages/evals/drizzle.config.ts | 18 + packages/evals/drizzle/0000_elite_raza.sql | 40 ++ packages/evals/drizzle/0001_lush_reavers.sql | 1 + packages/evals/drizzle/0002_white_flatman.sql | 1 + packages/evals/drizzle/0003_sweet_chimera.sql | 1 + .../evals/drizzle/0004_absent_slapstick.sql | 10 + .../evals/drizzle/meta/0000_snapshot.json | 274 +++++++++ .../evals/drizzle/meta/0001_snapshot.json | 281 +++++++++ .../evals/drizzle/meta/0002_snapshot.json | 289 +++++++++ .../evals/drizzle/meta/0003_snapshot.json | 296 ++++++++++ .../evals/drizzle/meta/0004_snapshot.json | 367 ++++++++++++ packages/evals/drizzle/meta/_journal.json | 41 ++ packages/evals/eslint.config.mjs | 4 + packages/evals/package.json | 34 ++ packages/evals/scripts/copy-run.mts | 112 ++++ packages/evals/scripts/enable-wal.mts | 23 + packages/evals/scripts/setup.sh | 356 +++++++++++ packages/evals/src/cli/exercises.ts | 31 + packages/evals/src/cli/index.ts | 551 ++++++++++++++++++ packages/evals/src/cli/paths.ts | 7 + packages/evals/src/db/db.ts | 13 + packages/evals/src/db/index.ts | 6 + .../src/db/queries/__tests__/runs.test.ts | 87 +++ packages/evals/src/db/queries/errors.ts | 3 + packages/evals/src/db/queries/runs.ts | 127 ++++ packages/evals/src/db/queries/taskMetrics.ts | 45 ++ packages/evals/src/db/queries/tasks.ts | 61 ++ packages/evals/src/db/queries/toolErrors.ts | 22 + packages/evals/src/db/schema.ts | 141 +++++ packages/evals/src/ipc/client.ts | 127 ++++ packages/evals/src/ipc/index.ts | 2 + packages/evals/src/ipc/server.ts | 138 +++++ .../src/lib/__tests__/in-chunks-of.test.ts | 18 + packages/evals/src/lib/in-chunks-of.ts | 14 + packages/evals/src/lib/index.ts | 1 + packages/evals/src/types/defaults.ts | 66 +++ packages/evals/src/types/exercises.ts | 10 + packages/evals/src/types/index.ts | 3 + packages/evals/src/types/ipc.ts | 35 ++ packages/evals/tsconfig.json | 8 + packages/evals/vitest.config.ts | 7 + packages/evals/vitest.setup.ts | 20 + 43 files changed, 3706 insertions(+) create mode 100644 packages/evals/README.md create mode 100644 packages/evals/drizzle.config.ts create mode 100644 packages/evals/drizzle/0000_elite_raza.sql create mode 100644 packages/evals/drizzle/0001_lush_reavers.sql create mode 100644 packages/evals/drizzle/0002_white_flatman.sql create mode 100644 packages/evals/drizzle/0003_sweet_chimera.sql create mode 100644 packages/evals/drizzle/0004_absent_slapstick.sql create mode 100644 packages/evals/drizzle/meta/0000_snapshot.json create mode 100644 packages/evals/drizzle/meta/0001_snapshot.json create mode 100644 packages/evals/drizzle/meta/0002_snapshot.json create mode 100644 packages/evals/drizzle/meta/0003_snapshot.json create mode 100644 packages/evals/drizzle/meta/0004_snapshot.json create mode 100644 packages/evals/drizzle/meta/_journal.json create mode 100644 packages/evals/eslint.config.mjs create mode 100644 packages/evals/package.json create mode 100644 packages/evals/scripts/copy-run.mts create mode 100644 packages/evals/scripts/enable-wal.mts create mode 100755 packages/evals/scripts/setup.sh create mode 100644 packages/evals/src/cli/exercises.ts create mode 100644 packages/evals/src/cli/index.ts create mode 100644 packages/evals/src/cli/paths.ts create mode 100644 packages/evals/src/db/db.ts create mode 100644 packages/evals/src/db/index.ts create mode 100644 packages/evals/src/db/queries/__tests__/runs.test.ts create mode 100644 packages/evals/src/db/queries/errors.ts create mode 100644 packages/evals/src/db/queries/runs.ts create mode 100644 packages/evals/src/db/queries/taskMetrics.ts create mode 100644 packages/evals/src/db/queries/tasks.ts create mode 100644 packages/evals/src/db/queries/toolErrors.ts create mode 100644 packages/evals/src/db/schema.ts create mode 100644 packages/evals/src/ipc/client.ts create mode 100644 packages/evals/src/ipc/index.ts create mode 100644 packages/evals/src/ipc/server.ts create mode 100644 packages/evals/src/lib/__tests__/in-chunks-of.test.ts create mode 100644 packages/evals/src/lib/in-chunks-of.ts create mode 100644 packages/evals/src/lib/index.ts create mode 100644 packages/evals/src/types/defaults.ts create mode 100644 packages/evals/src/types/exercises.ts create mode 100644 packages/evals/src/types/index.ts create mode 100644 packages/evals/src/types/ipc.ts create mode 100644 packages/evals/tsconfig.json create mode 100644 packages/evals/vitest.config.ts create mode 100644 packages/evals/vitest.setup.ts diff --git a/packages/evals/README.md b/packages/evals/README.md new file mode 100644 index 0000000000..cd5edc3f23 --- /dev/null +++ b/packages/evals/README.md @@ -0,0 +1,15 @@ +## Running Migrations + +Update `src/schema.ts` as needed, and then run: + +```sh +pnpm db:generate +``` + +Inspect the sql in the migration file added to `drizzle/`. + +If it looks okay, then run: + +```sh +pnpm db:migrate +``` diff --git a/packages/evals/drizzle.config.ts b/packages/evals/drizzle.config.ts new file mode 100644 index 0000000000..b91f65a5ae --- /dev/null +++ b/packages/evals/drizzle.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from "drizzle-kit" + +if ((!process.env.TURSO_CONNECTION_URL || !process.env.TURSO_AUTH_TOKEN) && !process.env.BENCHMARKS_DB_PATH) { + throw new Error("TURSO_CONNECTION_URL and TURSO_AUTH_TOKEN or BENCHMARKS_DB_PATH must be set") +} + +const dialect = process.env.BENCHMARKS_DB_PATH ? "sqlite" : "turso" + +const dbCredentials = process.env.BENCHMARKS_DB_PATH + ? { url: process.env.BENCHMARKS_DB_PATH } + : { url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN! } + +export default defineConfig({ + out: "./drizzle", + schema: "./src/schema.ts", + dialect, + dbCredentials, +}) diff --git a/packages/evals/drizzle/0000_elite_raza.sql b/packages/evals/drizzle/0000_elite_raza.sql new file mode 100644 index 0000000000..4af2be3564 --- /dev/null +++ b/packages/evals/drizzle/0000_elite_raza.sql @@ -0,0 +1,40 @@ +CREATE TABLE `runs` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `taskMetricsId` integer, + `model` text NOT NULL, + `description` text, + `pid` integer, + `socketPath` text NOT NULL, + `passed` integer DEFAULT 0 NOT NULL, + `failed` integer DEFAULT 0 NOT NULL, + `createdAt` integer NOT NULL, + FOREIGN KEY (`taskMetricsId`) REFERENCES `taskMetrics`(`id`) ON UPDATE no action ON DELETE no action +); +--> statement-breakpoint +CREATE TABLE `taskMetrics` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `tokensIn` integer NOT NULL, + `tokensOut` integer NOT NULL, + `tokensContext` integer NOT NULL, + `cacheWrites` integer NOT NULL, + `cacheReads` integer NOT NULL, + `cost` real NOT NULL, + `duration` integer NOT NULL, + `createdAt` integer NOT NULL +); +--> statement-breakpoint +CREATE TABLE `tasks` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `runId` integer NOT NULL, + `taskMetricsId` integer, + `language` text NOT NULL, + `exercise` text NOT NULL, + `passed` integer, + `startedAt` integer, + `finishedAt` integer, + `createdAt` integer NOT NULL, + FOREIGN KEY (`runId`) REFERENCES `runs`(`id`) ON UPDATE no action ON DELETE no action, + FOREIGN KEY (`taskMetricsId`) REFERENCES `taskMetrics`(`id`) ON UPDATE no action ON DELETE no action +); +--> statement-breakpoint +CREATE UNIQUE INDEX `tasks_language_exercise_idx` ON `tasks` (`runId`,`language`,`exercise`); \ No newline at end of file diff --git a/packages/evals/drizzle/0001_lush_reavers.sql b/packages/evals/drizzle/0001_lush_reavers.sql new file mode 100644 index 0000000000..25eebac810 --- /dev/null +++ b/packages/evals/drizzle/0001_lush_reavers.sql @@ -0,0 +1 @@ +ALTER TABLE `runs` ADD `settings` blob; \ No newline at end of file diff --git a/packages/evals/drizzle/0002_white_flatman.sql b/packages/evals/drizzle/0002_white_flatman.sql new file mode 100644 index 0000000000..1914906ca2 --- /dev/null +++ b/packages/evals/drizzle/0002_white_flatman.sql @@ -0,0 +1 @@ +ALTER TABLE `runs` ADD `concurrency` integer DEFAULT 2 NOT NULL; \ No newline at end of file diff --git a/packages/evals/drizzle/0003_sweet_chimera.sql b/packages/evals/drizzle/0003_sweet_chimera.sql new file mode 100644 index 0000000000..7248ec01df --- /dev/null +++ b/packages/evals/drizzle/0003_sweet_chimera.sql @@ -0,0 +1 @@ +ALTER TABLE `taskMetrics` ADD `toolUsage` text; \ No newline at end of file diff --git a/packages/evals/drizzle/0004_absent_slapstick.sql b/packages/evals/drizzle/0004_absent_slapstick.sql new file mode 100644 index 0000000000..49700388d7 --- /dev/null +++ b/packages/evals/drizzle/0004_absent_slapstick.sql @@ -0,0 +1,10 @@ +CREATE TABLE `toolErrors` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `runId` integer, + `taskId` integer, + `toolName` text NOT NULL, + `error` text NOT NULL, + `createdAt` integer NOT NULL, + FOREIGN KEY (`runId`) REFERENCES `runs`(`id`) ON UPDATE no action ON DELETE no action, + FOREIGN KEY (`taskId`) REFERENCES `tasks`(`id`) ON UPDATE no action ON DELETE no action +); diff --git a/packages/evals/drizzle/meta/0000_snapshot.json b/packages/evals/drizzle/meta/0000_snapshot.json new file mode 100644 index 0000000000..1b8c44283a --- /dev/null +++ b/packages/evals/drizzle/meta/0000_snapshot.json @@ -0,0 +1,274 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "c0fa8491-b5c0-493d-aa32-ddf280259c30", + "prevId": "00000000-0000-0000-0000-000000000000", + "tables": { + "runs": { + "name": "runs", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "taskMetricsId": { + "name": "taskMetricsId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pid": { + "name": "pid", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "socketPath": { + "name": "socketPath", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "passed": { + "name": "passed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "failed": { + "name": "failed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "runs_taskMetricsId_taskMetrics_id_fk": { + "name": "runs_taskMetricsId_taskMetrics_id_fk", + "tableFrom": "runs", + "tableTo": "taskMetrics", + "columnsFrom": ["taskMetricsId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "taskMetrics": { + "name": "taskMetrics", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "tokensIn": { + "name": "tokensIn", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "tokensOut": { + "name": "tokensOut", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "tokensContext": { + "name": "tokensContext", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cacheWrites": { + "name": "cacheWrites", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cacheReads": { + "name": "cacheReads", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cost": { + "name": "cost", + "type": "real", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "duration": { + "name": "duration", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "tasks": { + "name": "tasks", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "runId": { + "name": "runId", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "taskMetricsId": { + "name": "taskMetricsId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "language": { + "name": "language", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "exercise": { + "name": "exercise", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "passed": { + "name": "passed", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "startedAt": { + "name": "startedAt", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "finishedAt": { + "name": "finishedAt", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "tasks_language_exercise_idx": { + "name": "tasks_language_exercise_idx", + "columns": ["runId", "language", "exercise"], + "isUnique": true + } + }, + "foreignKeys": { + "tasks_runId_runs_id_fk": { + "name": "tasks_runId_runs_id_fk", + "tableFrom": "tasks", + "tableTo": "runs", + "columnsFrom": ["runId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + }, + "tasks_taskMetricsId_taskMetrics_id_fk": { + "name": "tasks_taskMetricsId_taskMetrics_id_fk", + "tableFrom": "tasks", + "tableTo": "taskMetrics", + "columnsFrom": ["taskMetricsId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/packages/evals/drizzle/meta/0001_snapshot.json b/packages/evals/drizzle/meta/0001_snapshot.json new file mode 100644 index 0000000000..0c087603da --- /dev/null +++ b/packages/evals/drizzle/meta/0001_snapshot.json @@ -0,0 +1,281 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "8906647f-81d6-498a-897c-b1638c04c69a", + "prevId": "c0fa8491-b5c0-493d-aa32-ddf280259c30", + "tables": { + "runs": { + "name": "runs", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "taskMetricsId": { + "name": "taskMetricsId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "settings": { + "name": "settings", + "type": "blob", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pid": { + "name": "pid", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "socketPath": { + "name": "socketPath", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "passed": { + "name": "passed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "failed": { + "name": "failed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "runs_taskMetricsId_taskMetrics_id_fk": { + "name": "runs_taskMetricsId_taskMetrics_id_fk", + "tableFrom": "runs", + "tableTo": "taskMetrics", + "columnsFrom": ["taskMetricsId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "taskMetrics": { + "name": "taskMetrics", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "tokensIn": { + "name": "tokensIn", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "tokensOut": { + "name": "tokensOut", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "tokensContext": { + "name": "tokensContext", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cacheWrites": { + "name": "cacheWrites", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cacheReads": { + "name": "cacheReads", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cost": { + "name": "cost", + "type": "real", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "duration": { + "name": "duration", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "tasks": { + "name": "tasks", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "runId": { + "name": "runId", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "taskMetricsId": { + "name": "taskMetricsId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "language": { + "name": "language", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "exercise": { + "name": "exercise", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "passed": { + "name": "passed", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "startedAt": { + "name": "startedAt", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "finishedAt": { + "name": "finishedAt", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "tasks_language_exercise_idx": { + "name": "tasks_language_exercise_idx", + "columns": ["runId", "language", "exercise"], + "isUnique": true + } + }, + "foreignKeys": { + "tasks_runId_runs_id_fk": { + "name": "tasks_runId_runs_id_fk", + "tableFrom": "tasks", + "tableTo": "runs", + "columnsFrom": ["runId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + }, + "tasks_taskMetricsId_taskMetrics_id_fk": { + "name": "tasks_taskMetricsId_taskMetrics_id_fk", + "tableFrom": "tasks", + "tableTo": "taskMetrics", + "columnsFrom": ["taskMetricsId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/packages/evals/drizzle/meta/0002_snapshot.json b/packages/evals/drizzle/meta/0002_snapshot.json new file mode 100644 index 0000000000..3bf20c0827 --- /dev/null +++ b/packages/evals/drizzle/meta/0002_snapshot.json @@ -0,0 +1,289 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "f49d9b0b-fda9-467a-9adb-c941d6cbf7ce", + "prevId": "8906647f-81d6-498a-897c-b1638c04c69a", + "tables": { + "runs": { + "name": "runs", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "taskMetricsId": { + "name": "taskMetricsId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "settings": { + "name": "settings", + "type": "blob", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pid": { + "name": "pid", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "socketPath": { + "name": "socketPath", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "concurrency": { + "name": "concurrency", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 2 + }, + "passed": { + "name": "passed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "failed": { + "name": "failed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "runs_taskMetricsId_taskMetrics_id_fk": { + "name": "runs_taskMetricsId_taskMetrics_id_fk", + "tableFrom": "runs", + "tableTo": "taskMetrics", + "columnsFrom": ["taskMetricsId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "taskMetrics": { + "name": "taskMetrics", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "tokensIn": { + "name": "tokensIn", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "tokensOut": { + "name": "tokensOut", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "tokensContext": { + "name": "tokensContext", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cacheWrites": { + "name": "cacheWrites", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cacheReads": { + "name": "cacheReads", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cost": { + "name": "cost", + "type": "real", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "duration": { + "name": "duration", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "tasks": { + "name": "tasks", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "runId": { + "name": "runId", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "taskMetricsId": { + "name": "taskMetricsId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "language": { + "name": "language", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "exercise": { + "name": "exercise", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "passed": { + "name": "passed", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "startedAt": { + "name": "startedAt", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "finishedAt": { + "name": "finishedAt", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "tasks_language_exercise_idx": { + "name": "tasks_language_exercise_idx", + "columns": ["runId", "language", "exercise"], + "isUnique": true + } + }, + "foreignKeys": { + "tasks_runId_runs_id_fk": { + "name": "tasks_runId_runs_id_fk", + "tableFrom": "tasks", + "tableTo": "runs", + "columnsFrom": ["runId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + }, + "tasks_taskMetricsId_taskMetrics_id_fk": { + "name": "tasks_taskMetricsId_taskMetrics_id_fk", + "tableFrom": "tasks", + "tableTo": "taskMetrics", + "columnsFrom": ["taskMetricsId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/packages/evals/drizzle/meta/0003_snapshot.json b/packages/evals/drizzle/meta/0003_snapshot.json new file mode 100644 index 0000000000..0b7fa5b94d --- /dev/null +++ b/packages/evals/drizzle/meta/0003_snapshot.json @@ -0,0 +1,296 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "61d48d20-f662-445d-9962-cf9cb165cbe7", + "prevId": "f49d9b0b-fda9-467a-9adb-c941d6cbf7ce", + "tables": { + "runs": { + "name": "runs", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "taskMetricsId": { + "name": "taskMetricsId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "settings": { + "name": "settings", + "type": "blob", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pid": { + "name": "pid", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "socketPath": { + "name": "socketPath", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "concurrency": { + "name": "concurrency", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 2 + }, + "passed": { + "name": "passed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "failed": { + "name": "failed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "runs_taskMetricsId_taskMetrics_id_fk": { + "name": "runs_taskMetricsId_taskMetrics_id_fk", + "tableFrom": "runs", + "tableTo": "taskMetrics", + "columnsFrom": ["taskMetricsId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "taskMetrics": { + "name": "taskMetrics", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "tokensIn": { + "name": "tokensIn", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "tokensOut": { + "name": "tokensOut", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "tokensContext": { + "name": "tokensContext", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cacheWrites": { + "name": "cacheWrites", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cacheReads": { + "name": "cacheReads", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cost": { + "name": "cost", + "type": "real", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "duration": { + "name": "duration", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "toolUsage": { + "name": "toolUsage", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "tasks": { + "name": "tasks", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "runId": { + "name": "runId", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "taskMetricsId": { + "name": "taskMetricsId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "language": { + "name": "language", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "exercise": { + "name": "exercise", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "passed": { + "name": "passed", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "startedAt": { + "name": "startedAt", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "finishedAt": { + "name": "finishedAt", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "tasks_language_exercise_idx": { + "name": "tasks_language_exercise_idx", + "columns": ["runId", "language", "exercise"], + "isUnique": true + } + }, + "foreignKeys": { + "tasks_runId_runs_id_fk": { + "name": "tasks_runId_runs_id_fk", + "tableFrom": "tasks", + "tableTo": "runs", + "columnsFrom": ["runId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + }, + "tasks_taskMetricsId_taskMetrics_id_fk": { + "name": "tasks_taskMetricsId_taskMetrics_id_fk", + "tableFrom": "tasks", + "tableTo": "taskMetrics", + "columnsFrom": ["taskMetricsId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/packages/evals/drizzle/meta/0004_snapshot.json b/packages/evals/drizzle/meta/0004_snapshot.json new file mode 100644 index 0000000000..6987eba2e4 --- /dev/null +++ b/packages/evals/drizzle/meta/0004_snapshot.json @@ -0,0 +1,367 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "ae766c54-aff4-4ce6-b492-24813790c279", + "prevId": "61d48d20-f662-445d-9962-cf9cb165cbe7", + "tables": { + "runs": { + "name": "runs", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "taskMetricsId": { + "name": "taskMetricsId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "settings": { + "name": "settings", + "type": "blob", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pid": { + "name": "pid", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "socketPath": { + "name": "socketPath", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "concurrency": { + "name": "concurrency", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 2 + }, + "passed": { + "name": "passed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "failed": { + "name": "failed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "runs_taskMetricsId_taskMetrics_id_fk": { + "name": "runs_taskMetricsId_taskMetrics_id_fk", + "tableFrom": "runs", + "tableTo": "taskMetrics", + "columnsFrom": ["taskMetricsId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "taskMetrics": { + "name": "taskMetrics", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "tokensIn": { + "name": "tokensIn", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "tokensOut": { + "name": "tokensOut", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "tokensContext": { + "name": "tokensContext", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cacheWrites": { + "name": "cacheWrites", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cacheReads": { + "name": "cacheReads", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cost": { + "name": "cost", + "type": "real", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "duration": { + "name": "duration", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "toolUsage": { + "name": "toolUsage", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "tasks": { + "name": "tasks", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "runId": { + "name": "runId", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "taskMetricsId": { + "name": "taskMetricsId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "language": { + "name": "language", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "exercise": { + "name": "exercise", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "passed": { + "name": "passed", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "startedAt": { + "name": "startedAt", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "finishedAt": { + "name": "finishedAt", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "tasks_language_exercise_idx": { + "name": "tasks_language_exercise_idx", + "columns": ["runId", "language", "exercise"], + "isUnique": true + } + }, + "foreignKeys": { + "tasks_runId_runs_id_fk": { + "name": "tasks_runId_runs_id_fk", + "tableFrom": "tasks", + "tableTo": "runs", + "columnsFrom": ["runId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + }, + "tasks_taskMetricsId_taskMetrics_id_fk": { + "name": "tasks_taskMetricsId_taskMetrics_id_fk", + "tableFrom": "tasks", + "tableTo": "taskMetrics", + "columnsFrom": ["taskMetricsId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "toolErrors": { + "name": "toolErrors", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "runId": { + "name": "runId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "taskId": { + "name": "taskId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "toolName": { + "name": "toolName", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "error": { + "name": "error", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "toolErrors_runId_runs_id_fk": { + "name": "toolErrors_runId_runs_id_fk", + "tableFrom": "toolErrors", + "tableTo": "runs", + "columnsFrom": ["runId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + }, + "toolErrors_taskId_tasks_id_fk": { + "name": "toolErrors_taskId_tasks_id_fk", + "tableFrom": "toolErrors", + "tableTo": "tasks", + "columnsFrom": ["taskId"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/packages/evals/drizzle/meta/_journal.json b/packages/evals/drizzle/meta/_journal.json new file mode 100644 index 0000000000..fba0e94f14 --- /dev/null +++ b/packages/evals/drizzle/meta/_journal.json @@ -0,0 +1,41 @@ +{ + "version": "7", + "dialect": "sqlite", + "entries": [ + { + "idx": 0, + "version": "6", + "when": 1742599919625, + "tag": "0000_elite_raza", + "breakpoints": true + }, + { + "idx": 1, + "version": "6", + "when": 1743089501047, + "tag": "0001_lush_reavers", + "breakpoints": true + }, + { + "idx": 2, + "version": "6", + "when": 1743698195142, + "tag": "0002_white_flatman", + "breakpoints": true + }, + { + "idx": 3, + "version": "6", + "when": 1744950664129, + "tag": "0003_sweet_chimera", + "breakpoints": true + }, + { + "idx": 4, + "version": "6", + "when": 1745256393286, + "tag": "0004_absent_slapstick", + "breakpoints": true + } + ] +} diff --git a/packages/evals/eslint.config.mjs b/packages/evals/eslint.config.mjs new file mode 100644 index 0000000000..694bf73664 --- /dev/null +++ b/packages/evals/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from "@roo-code/config-eslint/base" + +/** @type {import("eslint").Linter.Config} */ +export default [...config] diff --git a/packages/evals/package.json b/packages/evals/package.json new file mode 100644 index 0000000000..e267ef24b4 --- /dev/null +++ b/packages/evals/package.json @@ -0,0 +1,34 @@ +{ + "name": "@roo-code/evals", + "description": "Roo Code evals.", + "version": "0.0.0", + "type": "module", + "exports": "./src/index.ts", + "scripts": { + "lint": "eslint src --ext=ts --max-warnings=0", + "check-types": "tsc --noEmit", + "test": "vitest run", + "clean": "rimraf dist .turbo" + }, + "dependencies": { + "@roo-code/types": "workspace:^", + "drizzle-orm": "^0.44.1", + "drizzle-zod": "^0.8.2", + "execa": "^9.5.2", + "gluegun": "^5.2.0", + "node-ipc": "^12.0.0", + "p-map": "^7.0.3", + "p-wait-for": "^5.0.2", + "ps-tree": "^1.2.0", + "zod": "^3.24.2" + }, + "devDependencies": { + "@roo-code/config-eslint": "workspace:^", + "@roo-code/config-typescript": "workspace:^", + "@types/node": "^22.15.20", + "@types/node-ipc": "^9.2.3", + "@types/ps-tree": "^1.1.6", + "drizzle-kit": "^0.31.1", + "vitest": "^3.1.3" + } +} diff --git a/packages/evals/scripts/copy-run.mts b/packages/evals/scripts/copy-run.mts new file mode 100644 index 0000000000..6212a8c883 --- /dev/null +++ b/packages/evals/scripts/copy-run.mts @@ -0,0 +1,112 @@ +import { drizzle } from "drizzle-orm/libsql" +import { eq } from "drizzle-orm" +import pMap from "p-map" + +import { db as sourceDb } from "../src/db/db.js" +import { schema } from "../src/db/schema.js" + +const copyRun = async (runId: number) => { + const destDb = drizzle({ + schema, + connection: { url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN! }, + }) + + const run = await sourceDb.query.runs.findFirst({ + where: eq(schema.runs.id, runId), + with: { taskMetrics: true }, + }) + + if (!run) { + throw new Error(`Run with ID ${runId} not found in source database`) + } + + if (!run.taskMetrics) { + throw new Error("Run is not completed") + } + + console.log(`Copying run ${run.id}`) + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { id: _, ...runTaskMetricsValues } = run.taskMetrics + const [newRunTaskMetrics] = await destDb.insert(schema.taskMetrics).values(runTaskMetricsValues).returning() + + if (!newRunTaskMetrics) { + throw new Error("Failed to insert run taskMetrics") + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { id: __, ...runValues } = run + + const [newRun] = await destDb + .insert(schema.runs) + .values({ ...runValues, taskMetricsId: newRunTaskMetrics.id }) + .returning() + + if (!newRun) { + throw new Error("Failed to insert run") + } + + const tasks = await sourceDb.query.tasks.findMany({ + where: eq(schema.tasks.runId, run.id), + with: { taskMetrics: true }, + }) + + console.log(`Copying ${tasks.length} tasks`) + + await pMap( + tasks, + async (task) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { id: _, ...newTaskMetricsValues } = task.taskMetrics || { + duration: 0, + tokensIn: 0, + tokensOut: 0, + tokensContext: 0, + cacheWrites: 0, + cacheReads: 0, + cost: 0, + createdAt: new Date(), + } + + const [newTaskMetrics] = await destDb.insert(schema.taskMetrics).values(newTaskMetricsValues).returning() + + if (!newTaskMetrics) { + throw new Error(`Failed to insert taskMetrics for task ${task.id}`) + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { id: __, ...newTaskValues } = task + + const [newTask] = await destDb + .insert(schema.tasks) + .values({ ...newTaskValues, runId: newRun.id, taskMetricsId: newTaskMetrics.id }) + .returning() + + if (!newTask) { + throw new Error(`Failed to insert task ${task.id}`) + } + }, + { concurrency: 25 }, + ) + + console.log(`\nSuccessfully copied run ${runId} with ${tasks.length} tasks`) +} + +const main = async () => { + const runId = parseInt(process.argv[2], 10) + + if (isNaN(runId)) { + console.error("Run ID must be a number") + process.exit(1) + } + + try { + await copyRun(runId) + process.exit(0) + } catch (error) { + console.error(error) + process.exit(1) + } +} + +main() diff --git a/packages/evals/scripts/enable-wal.mts b/packages/evals/scripts/enable-wal.mts new file mode 100644 index 0000000000..567be64ab3 --- /dev/null +++ b/packages/evals/scripts/enable-wal.mts @@ -0,0 +1,23 @@ +import { db } from "../src/db/db.js" + +const main = async () => { + // Enable WAL mode for better performance and concurrency. + // https://til.simonwillison.net/sqlite/enabling-wal-mode + try { + const { rows } = await db.$client.execute("PRAGMA journal_mode = WAL;") + const row = rows[0] + + if (row) { + console.log(`SQLite journal mode set to: ${row[0]}`) + process.exit(0) + } else { + console.error("Failed to enable WAL mode: no rows returned") + process.exit(1) + } + } catch (error) { + console.error(error) + process.exit(1) + } +} + +main() diff --git a/packages/evals/scripts/setup.sh b/packages/evals/scripts/setup.sh new file mode 100755 index 0000000000..e451d94636 --- /dev/null +++ b/packages/evals/scripts/setup.sh @@ -0,0 +1,356 @@ +#!/bin/bash + +menu() { + echo -e "\nšŸ“‹ Which eval types would you like to support?\n" + + for i in ${!options[@]}; do + printf " %d) %-6s [%s]" $((i + 1)) "${options[i]}" "${choices[i]:- }" + + if [[ $i == 0 ]]; then + printf " (required)" + fi + + printf "\n" + done + + echo -e " q) quit\n" +} + +has_asdf_plugin() { + local plugin="$1" + case "$plugin" in + nodejs|python|golang|rust) echo "true" ;; + *) echo "false" ;; + esac +} + +build_extension() { + echo "šŸ”Ø Building the Roo Code extension..." + cd .. + mkdir -p bin + pnpm build -- --out ../bin/roo-code-$(git rev-parse --short HEAD).vsix || exit 1 + code --install-extension bin/roo-code-$(git rev-parse --short HEAD).vsix || exit 1 + cd evals +} + +if [[ "$(uname -s)" != "Darwin" ]]; then + echo "āš ļø Only macOS is currently supported." + exit 1 +fi + +options=("nodejs" "python" "golang" "rust" "java") +binaries=("node" "python" "go" "rustc" "javac") + +for i in "${!options[@]}"; do + choices[i]="*" +done + +prompt="Type 1-5 to select, 'q' to quit, āŽ to continue: " + +while menu && read -rp "$prompt" num && [[ "$num" ]]; do + [[ "$num" == "q" ]] && exit 0 + + [[ "$num" != *[![:digit:]]* ]] && + ((num > 1 && num <= ${#options[@]})) || + { + continue + } + + ((num--)) + [[ "${choices[num]}" ]] && choices[num]="" || choices[num]="*" +done + +empty=true + +for i in ${!options[@]}; do + [[ "${choices[i]}" ]] && { + empty=false + break + } +done + +[[ "$empty" == true ]] && exit 0 + +printf "\n" + +if ! command -v brew &>/dev/null; then + if [[ -f "/opt/homebrew/bin/brew" ]]; then + echo "āš ļø Homebrew is installed but not in your PATH" + exit 1 + fi + + read -p "šŸŗ Homebrew (https://brew.sh) is required. Install it? (Y/n): " install_brew + + if [[ "$install_brew" =~ ^[Yy]|^$ ]]; then + echo "šŸŗ Installing Homebrew..." + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" || exit 1 + # Can be undone with: + # /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)" && sudo rm -rvf /opt/homebrew + + if [[ "$SHELL" == "/bin/zsh" ]] && ! grep -q 'eval "$(/opt/homebrew/bin/brew shellenv)"' ~/.zprofile; then + echo '[[ -s "/opt/homebrew/bin/brew" ]] && eval "$(/opt/homebrew/bin/brew shellenv)"' >>~/.zprofile + elif [[ "$SHELL" == "/bin/bash" ]] && ! grep -q 'eval "$(/opt/homebrew/bin/brew shellenv)"' ~/.bash_profile; then + echo '[[ -s "/opt/homebrew/bin/brew" ]] && eval "$(/opt/homebrew/bin/brew shellenv)"' >>~/.bash_profile + fi + + if [[ "$SHELL" == "/bin/zsh" ]]; then + eval "$(/opt/homebrew/bin/brew shellenv)" + elif [[ "$SHELL" == "/bin/bash" ]]; then + eval "$(/opt/homebrew/bin/brew shellenv)" + fi + + BREW_VERSION=$(brew --version) + echo "āœ… Homebrew is installed ($BREW_VERSION)" + else + exit 1 + fi +else + BREW_VERSION=$(brew --version) + echo "āœ… Homebrew is installed ($BREW_VERSION)" +fi + +ASDF_PATH="$(brew --prefix asdf)/libexec/asdf.sh" + +if ! command -v asdf &>/dev/null; then + if [[ -f "$ASDF_PATH" ]]; then + echo "āš ļø asdf is installed but not in your PATH" + exit 1 + fi + + read -p "šŸ› ļø asdf (https://asdf-vm.com) is required. Install it? (Y/n): " install_asdf + + if [[ "$install_asdf" =~ ^[Yy]|^$ ]]; then + echo "šŸ› ļø Installing asdf..." + brew install asdf || exit 1 + # Can be undone with: + # brew uninstall asdf + # rm -rvf ~/.asdf + + . "$ASDF_PATH" + + if [[ "$SHELL" == "/bin/zsh" ]] && ! grep -q 'source "$(brew --prefix asdf)/libexec/asdf.sh"' ~/.zshrc; then + echo '[[ -s "/opt/homebrew/bin/brew" ]] && [[ -s "$(brew --prefix asdf)/libexec/asdf.sh" ]] && source "$(brew --prefix asdf)/libexec/asdf.sh"' >>~/.zprofile + elif [[ "$SHELL" == "/bin/bash" ]] && ! grep -q 'source "$(brew --prefix asdf)/libexec/asdf.sh"' ~/.bash_profile; then + echo '[[ -s "/opt/homebrew/bin/brew" ]] && [[ -s "$(brew --prefix asdf)/libexec/asdf.sh" ]] && source "$(brew --prefix asdf)/libexec/asdf.sh"' >>~/.bash_profile + fi + + ASDF_VERSION=$(asdf --version) + echo "āœ… asdf is installed ($ASDF_VERSION)" + else + exit 1 + fi +else + ASDF_VERSION=$(asdf --version) + echo "āœ… asdf is installed ($ASDF_VERSION)" + . "$ASDF_PATH" +fi + +if ! command -v gh &>/dev/null; then + read -p "šŸ‘Øā€šŸ’» GitHub cli is needed to submit evals results. Install it? (Y/n): " install_gh + + if [[ "$install_gh" =~ ^[Yy]|^$ ]]; then + brew install gh || exit 1 + GH_VERSION=$(gh --version | head -n 1) + echo "āœ… gh is installed ($GH_VERSION)" + gh auth status || gh auth login -w -p https + fi +else + GH_VERSION=$(gh --version | head -n 1) + echo "āœ… gh is installed ($GH_VERSION)" +fi + +for i in "${!options[@]}"; do + [[ "${choices[i]}" ]] || continue + + plugin="${options[$i]}" + binary="${binaries[$i]}" + + if [[ "$(has_asdf_plugin "$plugin")" == "true" ]]; then + if ! asdf plugin list | grep -q "^${plugin}$" && ! command -v "${binary}" &>/dev/null; then + echo "šŸ“¦ Installing ${plugin} asdf plugin..." + asdf plugin add "${plugin}" || exit 1 + echo "āœ… asdf ${plugin} plugin installed successfully" + fi + fi + + case "${plugin}" in + "nodejs") + if ! command -v node &>/dev/null; then + asdf install nodejs 20.19.2 || exit 1 + asdf set nodejs 20.19.2 || exit 1 + NODE_VERSION=$(node --version) + echo "āœ… Node.js is installed ($NODE_VERSION)" + else + NODE_VERSION=$(node --version) + echo "āœ… Node.js is installed ($NODE_VERSION)" + fi + + if [[ $(node --version) != "v20.19.2" ]]; then + NODE_VERSION=$(node --version) + echo "🚨 You have the wrong version of node installed ($NODE_VERSION)." + echo "šŸ’” If you are using nvm then run 'nvm install' to install the version specified by the repo's .nvmrc." + exit 1 + fi + ;; + + "python") + if ! command -v python &>/dev/null; then + asdf install python 3.13.2 || exit 1 + asdf set python 3.13.2 || exit 1 + PYTHON_VERSION=$(python --version) + echo "āœ… Python is installed ($PYTHON_VERSION)" + else + PYTHON_VERSION=$(python --version) + echo "āœ… Python is installed ($PYTHON_VERSION)" + fi + + if ! command -v uv &>/dev/null; then + brew install uv || exit 1 + UV_VERSION=$(uv --version) + echo "āœ… uv is installed ($UV_VERSION)" + else + UV_VERSION=$(uv --version) + echo "āœ… uv is installed ($UV_VERSION)" + fi + ;; + + "golang") + if ! command -v go &>/dev/null; then + asdf install golang 1.24.2 || exit 1 + asdf set golang 1.24.2 || exit 1 + GO_VERSION=$(go version) + echo "āœ… Go is installed ($GO_VERSION)" + else + GO_VERSION=$(go version) + echo "āœ… Go is installed ($GO_VERSION)" + fi + ;; + + "rust") + if ! command -v rustc &>/dev/null; then + asdf install rust 1.85.1 || exit 1 + asdf set rust 1.85.1 || exit 1 + RUST_VERSION=$(rustc --version) + echo "āœ… Rust is installed ($RUST_VERSION)" + else + RUST_VERSION=$(rustc --version) + echo "āœ… Rust is installed ($RUST_VERSION)" + fi + ;; + + "java") + if ! command -v javac &>/dev/null || ! javac --version &>/dev/null; then + echo "ā˜• Installing Java..." + brew install openjdk@17 || exit 1 + + export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH" + + if [[ "$SHELL" == "/bin/zsh" ]] && ! grep -q 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' ~/.zprofile; then + echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zprofile + elif [[ "$SHELL" == "/bin/bash" ]] && ! grep -q 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' ~/.bash_profile; then + echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.bash_profile + fi + + JAVA_VERSION=$(javac --version | head -n 1) + echo "āœ… Java is installed ($JAVA_VERSION)" + else + JAVA_VERSION=$(javac --version | head -n 1) + echo "āœ… Java is installed ($JAVA_VERSION)" + fi + ;; + esac +done + +if ! command -v pnpm &>/dev/null; then + brew install pnpm || exit 1 + PNPM_VERSION=$(pnpm --version) + echo "āœ… pnpm is installed ($PNPM_VERSION)" +else + PNPM_VERSION=$(pnpm --version) + echo "āœ… pnpm is installed ($PNPM_VERSION)" +fi + +pnpm install --silent || exit 1 + +if ! command -v code &>/dev/null; then + echo "āš ļø Visual Studio Code cli is not installed" + exit 1 +else + VSCODE_VERSION=$(code --version | head -n 1) + echo "āœ… Visual Studio Code is installed ($VSCODE_VERSION)" +fi + +# To reset VSCode: +# rm -rvf ~/.vscode && rm -rvf ~/Library/Application\ Support/Code + +echo -n "šŸ”Œ Installing Visual Studio Code extensions... " +code --install-extension golang.go &>/dev/null || exit 1 +code --install-extension dbaeumer.vscode-eslint&>/dev/null || exit 1 +code --install-extension redhat.java &>/dev/null || exit 1 +code --install-extension ms-python.python&>/dev/null || exit 1 +code --install-extension rust-lang.rust-analyzer &>/dev/null || exit 1 + +if ! code --list-extensions 2>/dev/null | grep -q "RooVeterinaryInc.roo-cline"; then + code --install-extension RooVeterinaryInc.roo-cline &>/dev/null || exit 1 +fi + +echo "āœ… Done" + +if [[ ! -d "../../evals" ]]; then + echo -n "šŸ”— Cloning evals repository... " + + if gh auth status &>/dev/null; then + gh repo clone cte/evals ../../evals || exit 1 + else + git clone https://github.com/cte/evals.git ../../evals || exit 1 + fi + + echo "āœ… Done" +else + echo -n "šŸ”„ Updating evals repository... " + + (cd ../../evals && \ + git checkout -f &>/dev/null && \ + git clean -f -d &>/dev/null && \ + git checkout main &>/dev/null && \ + git pull &>/dev/null) || { echo "āŒ Failed to update evals repository."; exit 1; } + + echo "āœ… Done" +fi + +if [[ ! -s .env ]]; then + cp .env.sample .env || exit 1 +fi + +echo -n "šŸ—„ļø Syncing Roo Code evals database... " +pnpm --filter @evals/db db:push &>/dev/null || exit 1 +pnpm --filter @evals/db db:enable-wal &>/dev/null || exit 1 +echo "āœ… Done" + +if ! grep -q "OPENROUTER_API_KEY" .env; then + read -p "šŸ” Enter your OpenRouter API key (sk-or-v1-...): " openrouter_api_key + echo "šŸ”‘ Validating..." + curl --silent --fail https://openrouter.ai/api/v1/key -H "Authorization: Bearer $openrouter_api_key" &>/dev/null || exit 1 + echo "OPENROUTER_API_KEY=$openrouter_api_key" >> .env || exit 1 +fi + +current_version=$(code --list-extensions --show-versions 2>/dev/null | grep roo) +read -p "šŸ’» Do you want to build a new version of the Roo Code extension? [currently $current_version] (y/N): " build_extension + +if [[ "$build_extension" =~ ^[Yy]$ ]]; then + build_extension +fi + +echo -e "\nšŸš€ You're ready to rock and roll! \n" + +if ! nc -z localhost 3000; then + read -p "🌐 Would you like to start the evals web app? (Y/n): " start_evals + + if [[ "$start_evals" =~ ^[Yy]|^$ ]]; then + pnpm web + else + echo "šŸ’” You can start it anytime with 'pnpm web'." + fi +else + echo "šŸ‘Ÿ The evals web app is running at http://localhost:3000" +fi diff --git a/packages/evals/src/cli/exercises.ts b/packages/evals/src/cli/exercises.ts new file mode 100644 index 0000000000..68190ad79a --- /dev/null +++ b/packages/evals/src/cli/exercises.ts @@ -0,0 +1,31 @@ +import * as path from "path" +import * as fs from "fs" + +import { filesystem } from "gluegun" + +import { type ExerciseLanguage, exerciseLanguages } from "../types/index.js" + +import { exercisesPath } from "./paths.js" + +let exercisesByLanguage: Record | null = null + +export const getExercises = () => { + if (exercisesByLanguage !== null) { + return exercisesByLanguage + } + + const getLanguageExercises = (language: ExerciseLanguage) => + fs.existsSync(path.resolve(exercisesPath, language)) + ? filesystem + .subdirectories(path.resolve(exercisesPath, language)) + .map((exercise) => path.basename(exercise)) + .filter((exercise) => !exercise.startsWith(".")) + : [] + + exercisesByLanguage = exerciseLanguages.reduce( + (collect, language) => ({ ...collect, [language]: getLanguageExercises(language) }), + {} as Record, + ) + + return exercisesByLanguage +} diff --git a/packages/evals/src/cli/index.ts b/packages/evals/src/cli/index.ts new file mode 100644 index 0000000000..a42c8a1cae --- /dev/null +++ b/packages/evals/src/cli/index.ts @@ -0,0 +1,551 @@ +import * as fs from "fs" +import * as path from "path" +import * as os from "os" + +import pMap from "p-map" +import pWaitFor from "p-wait-for" +import { execa, parseCommandString } from "execa" +import { build, filesystem, GluegunPrompt, GluegunToolbox } from "gluegun" +import psTree from "ps-tree" + +import { RooCodeEventName, IpcOrigin, IpcMessageType, TaskCommandName } from "@roo-code/types" +import { + type Run, + type Task, + findRun, + createRun, + finishRun, + createTask, + getTasks, + updateTask, + createTaskMetrics, + updateTaskMetrics, + createToolError, +} from "../db/index.js" + +import { type ExerciseLanguage, EvalEventName, exerciseLanguages, rooCodeDefaults } from "../types/index.js" + +import { IpcServer, IpcClient } from "../ipc/index.js" + +import { __dirname, extensionDevelopmentPath, exercisesPath } from "./paths.js" +import { getExercises } from "./exercises.js" + +type TaskResult = { success: boolean } +type TaskPromise = Promise + +const TASK_START_DELAY = 10 * 1_000 +const TASK_TIMEOUT = 5 * 60 * 1_000 +const UNIT_TEST_TIMEOUT = 2 * 60 * 1_000 + +const testCommands: Record = { + go: { commands: ["go test"] }, // timeout 15s bash -c "cd '$dir' && go test > /dev/null 2>&1" + java: { commands: ["./gradlew test"] }, // timeout --foreground 15s bash -c "cd '$dir' && ./gradlew test > /dev/null 2>&1" + javascript: { commands: ["pnpm install", "pnpm test"] }, // timeout 15s bash -c "cd '$dir' && pnpm install >/dev/null 2>&1 && pnpm test >/dev/null 2>&1" + python: { commands: ["uv run python3 -m pytest -o markers=task *_test.py"] }, // timeout 15s bash -c "cd '$dir' && uv run python3 -m pytest -o markers=task *_test.py" + rust: { commands: ["cargo test"] }, // timeout 15s bash -c "cd '$dir' && cargo test > /dev/null 2>&1" +} + +const run = async (toolbox: GluegunToolbox) => { + const { config, prompt } = toolbox + + let { language, exercise } = config + + if (![undefined, ...exerciseLanguages, "all"].includes(language)) { + throw new Error(`Language is invalid: ${language}`) + } + + if (!["undefined", "string"].includes(typeof exercise)) { + throw new Error(`Exercise is invalid: ${exercise}`) + } + + const id = config.runId ? Number(config.runId) : undefined + let run: Run + + if (id) { + run = await findRun(id) + } else { + run = await createRun({ + model: rooCodeDefaults.openRouterModelId!, + pid: process.pid, + socketPath: path.resolve(os.tmpdir(), `roo-code-evals-${crypto.randomUUID().slice(0, 8)}.sock`), + }) + + if (language === "all") { + for (const language of exerciseLanguages) { + const exercises = getExercises()[language as ExerciseLanguage] + + await pMap(exercises, (exercise) => createTask({ runId: run.id, language, exercise }), { + concurrency: run.concurrency, + }) + } + } else if (exercise === "all") { + const exercises = getExercises()[language as ExerciseLanguage] + await pMap(exercises, (exercise) => createTask({ runId: run.id, language, exercise }), { + concurrency: run.concurrency, + }) + } else { + language = language || (await askLanguage(prompt)) + exercise = exercise || (await askExercise(prompt, language)) + await createTask({ runId: run.id, language, exercise }) + } + } + + const tasks = await getTasks(run.id) + + if (!tasks[0]) { + throw new Error("No tasks found.") + } + + await execa({ cwd: exercisesPath })`git config user.name "Roo Code"` + await execa({ cwd: exercisesPath })`git config user.email "support@roocode.com"` + await execa({ cwd: exercisesPath })`git checkout -f` + await execa({ cwd: exercisesPath })`git clean -fd` + await execa({ cwd: exercisesPath })`git checkout -b runs/${run.id}-${crypto.randomUUID().slice(0, 8)} main` + + fs.writeFileSync( + path.resolve(exercisesPath, "settings.json"), + JSON.stringify({ ...rooCodeDefaults, ...run.settings }, null, 2), + ) + + const server = new IpcServer(run.socketPath, () => {}) + server.listen() + + const runningPromises: TaskPromise[] = [] + + const processTask = async (task: Task, delay = 0) => { + if (task.finishedAt === null) { + await new Promise((resolve) => setTimeout(resolve, delay)) + await runExercise({ run, task, server }) + } + + if (task.passed === null) { + const passed = await runUnitTest({ task }) + await updateTask(task.id, { passed }) + + server.broadcast({ + type: IpcMessageType.TaskEvent, + origin: IpcOrigin.Server, + data: { eventName: passed ? EvalEventName.Pass : EvalEventName.Fail, taskId: task.id }, + }) + + return { success: passed } + } else { + return { success: task.passed } + } + } + + const processTaskResult = async (task: Task, promise: TaskPromise) => { + const index = runningPromises.indexOf(promise) + + if (index > -1) { + runningPromises.splice(index, 1) + } + } + + let delay = TASK_START_DELAY + + for (const task of tasks) { + const promise = processTask(task, delay) + delay = delay + TASK_START_DELAY + runningPromises.push(promise) + promise.then(() => processTaskResult(task, promise)) + + if (runningPromises.length >= run.concurrency) { + delay = 0 + await Promise.race(runningPromises) + } + } + + await Promise.all(runningPromises) + + const result = await finishRun(run.id) + console.log(`${Date.now()} [cli#run]`, result) + + await execa({ cwd: exercisesPath })`git add .` + await execa({ cwd: exercisesPath })`git commit -m ${`Run #${run.id}`} --no-verify` +} + +const runExercise = async ({ run, task, server }: { run: Run; task: Task; server: IpcServer }): TaskPromise => { + const { language, exercise } = task + const prompt = fs.readFileSync(path.resolve(exercisesPath, `prompts/${language}.md`), "utf-8") + const dirname = path.dirname(run.socketPath) + const workspacePath = path.resolve(exercisesPath, language, exercise) + const taskSocketPath = path.resolve(dirname, `${dirname}/task-${task.id}.sock`) + + // Inject foot gun system prompt if present + if (process.env.FOOTGUN_SYSTEM_PROMPT) { + const rooDir = path.join(workspacePath, ".roo") + if (!fs.existsSync(rooDir)) { + fs.mkdirSync(rooDir, { recursive: true }) + } + fs.writeFileSync(path.join(rooDir, "system-prompt-code"), process.env.FOOTGUN_SYSTEM_PROMPT) + } + + // If debugging: + // Use --wait --log trace or --verbose. + // Don't await execa and store result as subprocess. + // subprocess.stdout.pipe(process.stdout) + + console.log(`${Date.now()} [cli#runExercise] Opening new VS Code window at ${workspacePath}`) + + const controller = new AbortController() + const cancelSignal = controller.signal + + // If debugging: + // Use --wait --log trace or --verbose. + let codeCommand = `code --disable-workspace-trust` + const isDocker = fs.existsSync("/.dockerenv") + + if (isDocker) { + if (run.concurrency > 1) { + throw new Error("Cannot run multiple tasks in parallel in Docker. Please set concurrency to 1.") + } + codeCommand = `xvfb-run --auto-servernum --server-num=1 ${codeCommand} --wait --log trace --disable-gpu --password-store="basic"` + } + + const subprocess = execa({ + env: { + ROO_CODE_IPC_SOCKET_PATH: taskSocketPath, + }, + shell: "/bin/bash", + cancelSignal, + })`${codeCommand} -n ${workspacePath}` + + // If debugging: + // subprocess.stdout.pipe(process.stdout) + + // Give VSCode some time to spawn before connecting to its unix socket. + await new Promise((resolve) => setTimeout(resolve, 3_000)) + console.log(`${Date.now()} [cli#runExercise] Connecting to ${taskSocketPath}`) + const client = new IpcClient(taskSocketPath) + + try { + await pWaitFor(() => client.isReady, { interval: 250, timeout: 5_000 }) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (error) { + console.log(`${Date.now()} [cli#runExercise | ${language} / ${exercise}] unable to connect`) + client.disconnect() + return { success: false } + } + + let taskStartedAt = Date.now() + let taskFinishedAt: number | undefined + let taskMetricsId: number | undefined + let rooTaskId: string | undefined + let isClientDisconnected = false + + const ignoreEvents: Record<"broadcast" | "log", (RooCodeEventName | EvalEventName)[]> = { + broadcast: [RooCodeEventName.Message], + log: [RooCodeEventName.Message, RooCodeEventName.TaskTokenUsageUpdated, RooCodeEventName.TaskAskResponded], + } + + client.on(IpcMessageType.TaskEvent, async (taskEvent) => { + const { eventName, payload } = taskEvent + + if (!ignoreEvents.broadcast.includes(eventName)) { + server.broadcast({ + type: IpcMessageType.TaskEvent, + origin: IpcOrigin.Server, + relayClientId: client.clientId!, + data: { ...taskEvent, taskId: task.id }, + }) + } + + if (!ignoreEvents.log.includes(eventName)) { + console.log( + `${Date.now()} [cli#runExercise | ${language} / ${exercise}] taskEvent -> ${eventName}`, + payload, + ) + } + + if (eventName === RooCodeEventName.TaskStarted) { + taskStartedAt = Date.now() + + const taskMetrics = await createTaskMetrics({ + cost: 0, + tokensIn: 0, + tokensOut: 0, + tokensContext: 0, + duration: 0, + cacheWrites: 0, + cacheReads: 0, + }) + + await updateTask(task.id, { taskMetricsId: taskMetrics.id, startedAt: new Date() }) + + taskStartedAt = Date.now() + taskMetricsId = taskMetrics.id + rooTaskId = payload[0] + } + + if (eventName === RooCodeEventName.TaskToolFailed) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [_taskId, toolName, error] = payload + await createToolError({ taskId: task.id, toolName, error }) + } + + if ( + (eventName === RooCodeEventName.TaskTokenUsageUpdated || eventName === RooCodeEventName.TaskCompleted) && + taskMetricsId + ) { + const duration = Date.now() - taskStartedAt + + const { totalCost, totalTokensIn, totalTokensOut, contextTokens, totalCacheWrites, totalCacheReads } = + payload[1] + + await updateTaskMetrics(taskMetricsId, { + cost: totalCost, + tokensIn: totalTokensIn, + tokensOut: totalTokensOut, + tokensContext: contextTokens, + duration, + cacheWrites: totalCacheWrites ?? 0, + cacheReads: totalCacheReads ?? 0, + }) + } + + if (eventName === RooCodeEventName.TaskCompleted && taskMetricsId) { + const toolUsage = payload[2] + await updateTaskMetrics(taskMetricsId, { toolUsage }) + } + + if (eventName === RooCodeEventName.TaskAborted || eventName === RooCodeEventName.TaskCompleted) { + taskFinishedAt = Date.now() + await updateTask(task.id, { finishedAt: new Date() }) + } + }) + + client.on(IpcMessageType.Disconnect, async () => { + console.log(`${Date.now()} [cli#runExercise | ${language} / ${exercise}] disconnect`) + isClientDisconnected = true + }) + + console.log(`${Date.now()} [cli#runExercise | ${language} / ${exercise}] starting task`) + + if (client.isReady) { + client.sendMessage({ + type: IpcMessageType.TaskCommand, + origin: IpcOrigin.Client, + clientId: client.clientId!, + data: { + commandName: TaskCommandName.StartNewTask, + data: { + configuration: { + ...rooCodeDefaults, + openRouterApiKey: process.env.OPENROUTER_API_KEY!, + ...run.settings, + }, + text: prompt, + newTab: true, + }, + }, + }) + } else { + console.log(`[cli#runExercise | ${language} / ${exercise}] unable to connect`) + client.disconnect() + taskFinishedAt = Date.now() + isClientDisconnected = true + } + + try { + await pWaitFor(() => !!taskFinishedAt || isClientDisconnected, { interval: 1_000, timeout: TASK_TIMEOUT }) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (error) { + console.log(`${Date.now()} [cli#runExercise | ${language} / ${exercise}] time limit reached`) + + // Cancel the task. + if (rooTaskId && !isClientDisconnected) { + client.sendMessage({ + type: IpcMessageType.TaskCommand, + origin: IpcOrigin.Client, + clientId: client.clientId!, + data: { commandName: TaskCommandName.CancelTask, data: rooTaskId }, + }) + + // Allow some time for the task to cancel. + await new Promise((resolve) => setTimeout(resolve, 5_000)) + } + + await updateTask(task.id, { finishedAt: new Date() }) + } + + if (!isClientDisconnected) { + if (rooTaskId) { + client.sendMessage({ + type: IpcMessageType.TaskCommand, + origin: IpcOrigin.Client, + clientId: client.clientId!, + data: { commandName: TaskCommandName.CloseTask, data: rooTaskId }, + }) + + // Allow some time for the window to close. + await new Promise((resolve) => setTimeout(resolve, 2_000)) + } + + client.disconnect() + } + + controller.abort() + await subprocess + + return { success: !!taskFinishedAt } +} + +const runUnitTest = async ({ task }: { task: Task }) => { + const cmd = testCommands[task.language] + const exercisePath = path.resolve(exercisesPath, task.language, task.exercise) + const cwd = cmd.cwd ? path.resolve(exercisePath, cmd.cwd) : exercisePath + const commands = cmd.commands.map((cs) => parseCommandString(cs)) + + let passed = true + + for (const command of commands) { + try { + console.log( + `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] running "${command.join(" ")}"`, + ) + + const subprocess = execa({ cwd, shell: true, reject: false })`${command}` + + const timeout = setTimeout(async () => { + const descendants = await new Promise((resolve, reject) => { + psTree(subprocess.pid!, (err, children) => { + if (err) { + reject(err) + } + + resolve(children.map((p) => parseInt(p.PID))) + }) + }) + + console.log( + `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] "${command.join(" ")}": unit tests timed out, killing ${subprocess.pid} + ${JSON.stringify(descendants)}`, + ) + + if (descendants.length > 0) { + for (const descendant of descendants) { + try { + console.log( + `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] killing ${descendant}`, + ) + + await execa`kill -9 ${descendant}` + } catch (error) { + console.error( + `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] Error killing descendant processes:`, + error, + ) + } + } + } + + console.log( + `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] killing ${subprocess.pid}`, + ) + + try { + await execa`kill -9 ${subprocess.pid!}` + } catch (error) { + console.error( + `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] Error killing process:`, + error, + ) + } + }, UNIT_TEST_TIMEOUT) + + const result = await subprocess + + console.log( + `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] "${command.join(" ")}" result -> ${JSON.stringify(result)}`, + ) + + clearTimeout(timeout) + + if (result.failed) { + passed = false + break + } + } catch (error) { + console.log(`${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}]`, error) + passed = false + break + } + } + + return passed +} + +const askLanguage = async (prompt: GluegunPrompt) => { + const { language } = await prompt.ask<{ language: ExerciseLanguage }>({ + type: "select", + name: "language", + message: "Which language?", + choices: [...exerciseLanguages], + }) + + return language +} + +const askExercise = async (prompt: GluegunPrompt, language: ExerciseLanguage) => { + const exercises = filesystem.subdirectories(path.join(exercisesPath, language)) + + if (exercises.length === 0) { + throw new Error(`No exercises found for ${language}`) + } + + const { exercise } = await prompt.ask<{ exercise: string }>({ + type: "select", + name: "exercise", + message: "Which exercise?", + choices: exercises.map((exercise) => path.basename(exercise)).filter((exercise) => !exercise.startsWith(".")), + }) + + return exercise +} + +const main = async () => { + const cli = build() + .brand("cli") + .src(__dirname) + .help() + .version() + .command({ + name: "run", + description: "Run an eval", + run: ({ config, parameters }) => { + config.language = parameters.first + config.exercise = parameters.second + + if (parameters.options["runId"]) { + config.runId = parameters.options["runId"] + } + }, + }) + .defaultCommand() + .create() + + const toolbox = await cli.run(process.argv) + const { command } = toolbox + + switch (command?.name) { + case "run": + await run(toolbox) + break + } + + process.exit(0) +} + +if (!fs.existsSync(extensionDevelopmentPath)) { + console.error(`"extensionDevelopmentPath" does not exist.`) + process.exit(1) +} + +if (!fs.existsSync(exercisesPath)) { + console.error( + `Exercises do not exist at ${exercisesPath}. Please run "git clone https://github.com/RooCodeInc/Roo-Code-Evals.git evals".`, + ) + process.exit(1) +} + +main() diff --git a/packages/evals/src/cli/paths.ts b/packages/evals/src/cli/paths.ts new file mode 100644 index 0000000000..10bf4e3d7a --- /dev/null +++ b/packages/evals/src/cli/paths.ts @@ -0,0 +1,7 @@ +import * as path from "path" +import { fileURLToPath } from "url" + +export const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +export const extensionDevelopmentPath = path.resolve(__dirname, "..", "..", "..", "..") +export const exercisesPath = path.resolve(extensionDevelopmentPath, "..", "evals") diff --git a/packages/evals/src/db/db.ts b/packages/evals/src/db/db.ts new file mode 100644 index 0000000000..8ddf06355c --- /dev/null +++ b/packages/evals/src/db/db.ts @@ -0,0 +1,13 @@ +import { drizzle } from "drizzle-orm/libsql" + +import { schema } from "./schema.js" + +if ((!process.env.TURSO_CONNECTION_URL || !process.env.TURSO_AUTH_TOKEN) && !process.env.BENCHMARKS_DB_PATH) { + throw new Error("TURSO_CONNECTION_URL and TURSO_AUTH_TOKEN or BENCHMARKS_DB_PATH must be set") +} + +const connection = process.env.BENCHMARKS_DB_PATH + ? { url: process.env.BENCHMARKS_DB_PATH, concurrency: 50 } + : { url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN! } + +export const db = drizzle({ schema, connection }) diff --git a/packages/evals/src/db/index.ts b/packages/evals/src/db/index.ts new file mode 100644 index 0000000000..02f08bd154 --- /dev/null +++ b/packages/evals/src/db/index.ts @@ -0,0 +1,6 @@ +export * from "./schema.js" + +export * from "./queries/runs.js" +export * from "./queries/tasks.js" +export * from "./queries/taskMetrics.js" +export * from "./queries/toolErrors.js" diff --git a/packages/evals/src/db/queries/__tests__/runs.test.ts b/packages/evals/src/db/queries/__tests__/runs.test.ts new file mode 100644 index 0000000000..9032871176 --- /dev/null +++ b/packages/evals/src/db/queries/__tests__/runs.test.ts @@ -0,0 +1,87 @@ +import { createRun, finishRun } from "../runs.js" +import { createTask } from "../tasks.js" +import { createTaskMetrics } from "../taskMetrics.js" + +describe("finishRun", () => { + it("aggregates task metrics, including tool usage", async () => { + const run = await createRun({ model: "gpt-4.1-mini", socketPath: "/tmp/roo.sock" }) + + await createTask({ + runId: run.id, + taskMetricsId: ( + await createTaskMetrics({ + duration: 45_000, + tokensIn: 100_000, + tokensOut: 2_000, + tokensContext: 102_000, + cacheWrites: 0, + cacheReads: 0, + cost: 0.05, + toolUsage: { + read_file: { + attempts: 3, + failures: 0, + }, + apply_diff: { + attempts: 3, + failures: 1, + }, + }, + }) + ).id, + language: "go", + exercise: "go/say", + passed: true, + startedAt: new Date(), + finishedAt: new Date(), + }) + + await createTask({ + runId: run.id, + taskMetricsId: ( + await createTaskMetrics({ + duration: 30_000, + tokensIn: 75_000, + tokensOut: 1_000, + tokensContext: 76_000, + cacheWrites: 0, + cacheReads: 0, + cost: 0.04, + toolUsage: { + read_file: { + attempts: 3, + failures: 0, + }, + apply_diff: { + attempts: 2, + failures: 0, + }, + }, + }) + ).id, + language: "go", + exercise: "go/octal", + passed: true, + startedAt: new Date(), + finishedAt: new Date(), + }) + + const { taskMetrics } = await finishRun(run.id) + + expect(taskMetrics).toEqual({ + id: expect.any(Number), + tokensIn: 175000, + tokensOut: 3000, + tokensContext: 178000, + cacheWrites: 0, + cacheReads: 0, + cost: 0.09, + duration: 75000, + toolUsage: { + read_file: { attempts: 6, failures: 0 }, + apply_diff: { attempts: 5, failures: 1 }, + }, + createdAt: expect.any(Date), + }) + }) +}) diff --git a/packages/evals/src/db/queries/errors.ts b/packages/evals/src/db/queries/errors.ts new file mode 100644 index 0000000000..38ff8e2790 --- /dev/null +++ b/packages/evals/src/db/queries/errors.ts @@ -0,0 +1,3 @@ +export class RecordNotFoundError extends Error {} + +export class RecordNotCreatedError extends Error {} diff --git a/packages/evals/src/db/queries/runs.ts b/packages/evals/src/db/queries/runs.ts new file mode 100644 index 0000000000..40970bc7a3 --- /dev/null +++ b/packages/evals/src/db/queries/runs.ts @@ -0,0 +1,127 @@ +import { desc, eq, inArray, sql, sum } from "drizzle-orm" + +import type { ToolUsage } from "@roo-code/types" + +import { RecordNotFoundError, RecordNotCreatedError } from "./errors.js" +import type { InsertRun, UpdateRun } from "../schema.js" +import { insertRunSchema, schema } from "../schema.js" +import { db } from "../db.js" +import { createTaskMetrics } from "./taskMetrics.js" +import { getTasks } from "./tasks.js" + +export const findRun = async (id: number) => { + const run = await db.query.runs.findFirst({ where: eq(schema.runs.id, id) }) + + if (!run) { + throw new RecordNotFoundError() + } + + return run +} + +export const createRun = async (args: InsertRun) => { + const records = await db + .insert(schema.runs) + .values({ + ...insertRunSchema.parse(args), + createdAt: new Date(), + }) + .returning() + + const record = records[0] + + if (!record) { + throw new RecordNotCreatedError() + } + + return record +} + +export const updateRun = async (id: number, values: UpdateRun) => { + const records = await db.update(schema.runs).set(values).where(eq(schema.runs.id, id)).returning() + const record = records[0] + + if (!record) { + throw new RecordNotFoundError() + } + + return record +} + +export const getRuns = async () => + db.query.runs.findMany({ orderBy: desc(schema.runs.id), with: { taskMetrics: true } }) + +export const finishRun = async (runId: number) => { + const [values] = await db + .select({ + tokensIn: sum(schema.taskMetrics.tokensIn).mapWith(Number), + tokensOut: sum(schema.taskMetrics.tokensOut).mapWith(Number), + tokensContext: sum(schema.taskMetrics.tokensContext).mapWith(Number), + cacheWrites: sum(schema.taskMetrics.cacheWrites).mapWith(Number), + cacheReads: sum(schema.taskMetrics.cacheReads).mapWith(Number), + cost: sum(schema.taskMetrics.cost).mapWith(Number), + duration: sum(schema.taskMetrics.duration).mapWith(Number), + passed: sql`sum(${schema.tasks.passed} = 1)`, + failed: sql`sum(${schema.tasks.passed} = 0)`, + }) + .from(schema.taskMetrics) + .innerJoin(schema.tasks, eq(schema.taskMetrics.id, schema.tasks.taskMetricsId)) + .innerJoin(schema.runs, eq(schema.tasks.runId, schema.runs.id)) + .where(eq(schema.runs.id, runId)) + + if (!values) { + throw new RecordNotFoundError() + } + + const tasks = await getTasks(runId) + + const toolUsage = tasks.reduce((acc, task) => { + Object.entries(task.taskMetrics?.toolUsage || {}).forEach(([key, { attempts, failures }]) => { + const tool = key as keyof ToolUsage + acc[tool] ??= { attempts: 0, failures: 0 } + acc[tool].attempts += attempts + acc[tool].failures += failures + }) + + return acc + }, {} as ToolUsage) + + const { passed, failed, ...rest } = values + const taskMetrics = await createTaskMetrics({ ...rest, toolUsage }) + await updateRun(runId, { taskMetricsId: taskMetrics.id, passed, failed }) + + const run = await findRun(runId) + + if (!run) { + throw new RecordNotFoundError() + } + + return { ...run, taskMetrics } +} + +export const deleteRun = async (runId: number) => { + const run = await db.query.runs.findFirst({ + where: eq(schema.runs.id, runId), + columns: { taskMetricsId: true }, + }) + + if (!run) { + throw new RecordNotFoundError() + } + + const tasks = await db.query.tasks.findMany({ + where: eq(schema.tasks.runId, runId), + columns: { id: true, taskMetricsId: true }, + }) + + await db.delete(schema.tasks).where(eq(schema.tasks.runId, runId)) + await db.delete(schema.runs).where(eq(schema.runs.id, runId)) + + const taskMetricsIds = tasks + .map(({ taskMetricsId }) => taskMetricsId) + .filter((id): id is number => id !== null && id !== undefined) + + taskMetricsIds.push(run.taskMetricsId ?? -1) + + await db.delete(schema.taskMetrics).where(inArray(schema.taskMetrics.id, taskMetricsIds)) +} diff --git a/packages/evals/src/db/queries/taskMetrics.ts b/packages/evals/src/db/queries/taskMetrics.ts new file mode 100644 index 0000000000..d0400453ce --- /dev/null +++ b/packages/evals/src/db/queries/taskMetrics.ts @@ -0,0 +1,45 @@ +import { eq } from "drizzle-orm" + +import { RecordNotFoundError, RecordNotCreatedError } from "./errors.js" +import type { InsertTaskMetrics, UpdateTaskMetrics } from "../schema.js" +import { insertTaskMetricsSchema, taskMetrics } from "../schema.js" +import { db } from "../db.js" + +export const findTaskMetrics = async (id: number) => { + const run = await db.query.taskMetrics.findFirst({ where: eq(taskMetrics.id, id) }) + + if (!run) { + throw new RecordNotFoundError() + } + + return run +} + +export const createTaskMetrics = async (args: InsertTaskMetrics) => { + const records = await db + .insert(taskMetrics) + .values({ + ...insertTaskMetricsSchema.parse(args), + createdAt: new Date(), + }) + .returning() + + const record = records[0] + + if (!record) { + throw new RecordNotCreatedError() + } + + return record +} + +export const updateTaskMetrics = async (id: number, values: UpdateTaskMetrics) => { + const records = await db.update(taskMetrics).set(values).where(eq(taskMetrics.id, id)).returning() + const record = records[0] + + if (!record) { + throw new RecordNotFoundError() + } + + return record +} diff --git a/packages/evals/src/db/queries/tasks.ts b/packages/evals/src/db/queries/tasks.ts new file mode 100644 index 0000000000..b7db441f3b --- /dev/null +++ b/packages/evals/src/db/queries/tasks.ts @@ -0,0 +1,61 @@ +import { and, eq } from "drizzle-orm" + +import type { ExerciseLanguage } from "../../types/index.js" + +import { RecordNotFoundError, RecordNotCreatedError } from "./errors.js" +import type { InsertTask, UpdateTask } from "../schema.js" +import { insertTaskSchema, tasks } from "../schema.js" +import { db } from "../db.js" + +export const findTask = async (id: number) => { + const run = await db.query.tasks.findFirst({ where: eq(tasks.id, id) }) + + if (!run) { + throw new RecordNotFoundError() + } + + return run +} + +export const createTask = async (args: InsertTask) => { + const records = await db + .insert(tasks) + .values({ + ...insertTaskSchema.parse(args), + createdAt: new Date(), + }) + .returning() + + const record = records[0] + + if (!record) { + throw new RecordNotCreatedError() + } + + return record +} + +export const updateTask = async (id: number, values: UpdateTask) => { + const records = await db.update(tasks).set(values).where(eq(tasks.id, id)).returning() + const record = records[0] + + if (!record) { + throw new RecordNotFoundError() + } + + return record +} + +type GetTask = { + runId: number + language: ExerciseLanguage + exercise: string +} + +export const getTask = async ({ runId, language, exercise }: GetTask) => + db.query.tasks.findFirst({ + where: and(eq(tasks.runId, runId), eq(tasks.language, language), eq(tasks.exercise, exercise)), + }) + +export const getTasks = async (runId: number) => + db.query.tasks.findMany({ where: eq(tasks.runId, runId), with: { taskMetrics: true } }) diff --git a/packages/evals/src/db/queries/toolErrors.ts b/packages/evals/src/db/queries/toolErrors.ts new file mode 100644 index 0000000000..b2b2163a24 --- /dev/null +++ b/packages/evals/src/db/queries/toolErrors.ts @@ -0,0 +1,22 @@ +import { RecordNotCreatedError } from "./errors.js" +import type { InsertToolError } from "../schema.js" +import { insertToolErrorSchema, toolErrors } from "../schema.js" +import { db } from "../db.js" + +export const createToolError = async (args: InsertToolError) => { + const records = await db + .insert(toolErrors) + .values({ + ...insertToolErrorSchema.parse(args), + createdAt: new Date(), + }) + .returning() + + const record = records[0] + + if (!record) { + throw new RecordNotCreatedError() + } + + return record +} diff --git a/packages/evals/src/db/schema.ts b/packages/evals/src/db/schema.ts new file mode 100644 index 0000000000..6e84bce68c --- /dev/null +++ b/packages/evals/src/db/schema.ts @@ -0,0 +1,141 @@ +import { sqliteTable, text, real, integer, blob, uniqueIndex } from "drizzle-orm/sqlite-core" +import { relations } from "drizzle-orm" +import { createInsertSchema } from "drizzle-zod" + +import { + type RooCodeSettings, + type ToolUsage, + rooCodeSettingsSchema, + toolNames, + toolUsageSchema, +} from "@roo-code/types" + +import { exerciseLanguages } from "../types/index.js" + +/** + * runs + */ + +export const runs = sqliteTable("runs", { + id: integer({ mode: "number" }).primaryKey({ autoIncrement: true }), + taskMetricsId: integer({ mode: "number" }).references(() => taskMetrics.id), + model: text().notNull(), + description: text(), + settings: blob({ mode: "json" }).$type(), + pid: integer({ mode: "number" }), + socketPath: text().notNull(), + concurrency: integer({ mode: "number" }).default(2).notNull(), + passed: integer({ mode: "number" }).default(0).notNull(), + failed: integer({ mode: "number" }).default(0).notNull(), + createdAt: integer({ mode: "timestamp" }).notNull(), +}) + +export const runsRelations = relations(runs, ({ one }) => ({ + taskMetrics: one(taskMetrics, { fields: [runs.taskMetricsId], references: [taskMetrics.id] }), +})) + +export type Run = typeof runs.$inferSelect + +export const insertRunSchema = createInsertSchema(runs).omit({ id: true, createdAt: true }).extend({ + settings: rooCodeSettingsSchema.optional(), +}) + +export type InsertRun = Omit + +export type UpdateRun = Partial> + +/** + * tasks + */ + +export const tasks = sqliteTable( + "tasks", + { + id: integer({ mode: "number" }).primaryKey({ autoIncrement: true }), + runId: integer({ mode: "number" }) + .references(() => runs.id) + .notNull(), + taskMetricsId: integer({ mode: "number" }).references(() => taskMetrics.id), + language: text({ enum: exerciseLanguages }).notNull(), + exercise: text().notNull(), + passed: integer({ mode: "boolean" }), + startedAt: integer({ mode: "timestamp" }), + finishedAt: integer({ mode: "timestamp" }), + createdAt: integer({ mode: "timestamp" }).notNull(), + }, + (table) => [uniqueIndex("tasks_language_exercise_idx").on(table.runId, table.language, table.exercise)], +) + +export const tasksRelations = relations(tasks, ({ one }) => ({ + run: one(runs, { fields: [tasks.runId], references: [runs.id] }), + taskMetrics: one(taskMetrics, { fields: [tasks.taskMetricsId], references: [taskMetrics.id] }), +})) + +export type Task = typeof tasks.$inferSelect + +export const insertTaskSchema = createInsertSchema(tasks).omit({ id: true, createdAt: true }) + +export type InsertTask = Omit + +export type UpdateTask = Partial> + +/** + * taskMetrics + */ + +export const taskMetrics = sqliteTable("taskMetrics", { + id: integer({ mode: "number" }).primaryKey({ autoIncrement: true }), + tokensIn: integer({ mode: "number" }).notNull(), + tokensOut: integer({ mode: "number" }).notNull(), + tokensContext: integer({ mode: "number" }).notNull(), + cacheWrites: integer({ mode: "number" }).notNull(), + cacheReads: integer({ mode: "number" }).notNull(), + cost: real().notNull(), + duration: integer({ mode: "number" }).notNull(), + toolUsage: text({ mode: "json" }).$type(), + createdAt: integer({ mode: "timestamp" }).notNull(), +}) + +export type TaskMetrics = typeof taskMetrics.$inferSelect + +export const insertTaskMetricsSchema = createInsertSchema(taskMetrics) + .omit({ id: true, createdAt: true }) + .extend({ toolUsage: toolUsageSchema.optional() }) + +export type InsertTaskMetrics = Omit + +export type UpdateTaskMetrics = Partial> + +/** + * toolErrors + */ + +export const toolErrors = sqliteTable("toolErrors", { + id: integer({ mode: "number" }).primaryKey({ autoIncrement: true }), + runId: integer({ mode: "number" }).references(() => runs.id), + taskId: integer({ mode: "number" }).references(() => tasks.id), + toolName: text({ enum: toolNames }).notNull(), + error: text().notNull(), + createdAt: integer({ mode: "timestamp" }).notNull(), +}) + +export const toolErrorsRelations = relations(toolErrors, ({ one }) => ({ + run: one(runs, { fields: [toolErrors.runId], references: [runs.id] }), + task: one(tasks, { fields: [toolErrors.taskId], references: [tasks.id] }), +})) + +export type ToolError = typeof toolErrors.$inferSelect + +export const insertToolErrorSchema = createInsertSchema(toolErrors) + .omit({ id: true, createdAt: true }) + .extend({ toolUsage: toolUsageSchema.optional() }) + +export type InsertToolError = Omit + +export type UpdateToolError = Partial> + +/** + * schema + */ + +export const schema = { runs, runsRelations, tasks, tasksRelations, taskMetrics } diff --git a/packages/evals/src/ipc/client.ts b/packages/evals/src/ipc/client.ts new file mode 100644 index 0000000000..426ab94cf8 --- /dev/null +++ b/packages/evals/src/ipc/client.ts @@ -0,0 +1,127 @@ +import EventEmitter from "node:events" +import * as crypto from "node:crypto" + +import ipc from "node-ipc" + +import { + type IpcMessage, + type Ack, + type TaskCommand, + type TaskEvent, + IpcOrigin, + IpcMessageType, + ipcMessageSchema, +} from "@roo-code/types" + +export type IpcClientEvents = { + [IpcMessageType.Connect]: [] + [IpcMessageType.Disconnect]: [] + [IpcMessageType.Ack]: [data: Ack] + [IpcMessageType.TaskCommand]: [data: TaskCommand] + [IpcMessageType.TaskEvent]: [data: TaskEvent] +} + +export class IpcClient extends EventEmitter { + private readonly _socketPath: string + private readonly _id: string + private readonly _log: (...args: unknown[]) => void + private _isConnected = false + private _clientId?: string + + constructor(socketPath: string, log = console.log) { + super() + + this._socketPath = socketPath + this._id = `roo-code-evals-${crypto.randomBytes(6).toString("hex")}` + this._log = log + + ipc.config.silent = true + + ipc.connectTo(this._id, this.socketPath, () => { + ipc.of[this._id]?.on("connect", () => this.onConnect()) + ipc.of[this._id]?.on("disconnect", () => this.onDisconnect()) + ipc.of[this._id]?.on("message", (data) => this.onMessage(data)) + }) + } + + private onConnect() { + if (this._isConnected) { + return + } + + this.log("[client#onConnect]") + this._isConnected = true + this.emit(IpcMessageType.Connect) + } + + private onDisconnect() { + if (!this._isConnected) { + return + } + + this.log("[client#onDisconnect]") + this._isConnected = false + this.emit(IpcMessageType.Disconnect) + } + + private onMessage(data: unknown) { + if (typeof data !== "object") { + this._log("[client#onMessage] invalid data", data) + return + } + + const result = ipcMessageSchema.safeParse(data) + + if (!result.success) { + this.log("[client#onMessage] invalid payload", result.error, data) + return + } + + const payload = result.data + + if (payload.origin === IpcOrigin.Server) { + switch (payload.type) { + case IpcMessageType.Ack: + this._clientId = payload.data.clientId + this.emit(IpcMessageType.Ack, payload.data) + break + case IpcMessageType.TaskEvent: + this.emit(IpcMessageType.TaskEvent, payload.data) + break + } + } + } + + private log(...args: unknown[]) { + this._log(...args) + } + + public sendMessage(message: IpcMessage) { + ipc.of[this._id]?.emit("message", message) + } + + public disconnect() { + try { + ipc.disconnect(this._id) + // @TODO: Should we set _disconnect here? + } catch (error) { + this.log("[client#disconnect] error disconnecting", error) + } + } + + public get socketPath() { + return this._socketPath + } + + public get clientId() { + return this._clientId + } + + public get isConnected() { + return this._isConnected + } + + public get isReady() { + return this._isConnected && this._clientId !== undefined + } +} diff --git a/packages/evals/src/ipc/index.ts b/packages/evals/src/ipc/index.ts new file mode 100644 index 0000000000..03cf66634b --- /dev/null +++ b/packages/evals/src/ipc/index.ts @@ -0,0 +1,2 @@ +export * from "./client.js" +export * from "./server.js" diff --git a/packages/evals/src/ipc/server.ts b/packages/evals/src/ipc/server.ts new file mode 100644 index 0000000000..e32f16329d --- /dev/null +++ b/packages/evals/src/ipc/server.ts @@ -0,0 +1,138 @@ +import EventEmitter from "node:events" +import { Socket } from "node:net" +import * as crypto from "node:crypto" + +import ipc from "node-ipc" + +import { + IpcOrigin, + IpcMessageType, + type IpcMessage, + type TaskCommand, + type TaskEvent, + ipcMessageSchema, +} from "@roo-code/types" + +type IpcServerEvents = { + [IpcMessageType.Connect]: [clientId: string] + [IpcMessageType.Disconnect]: [clientId: string] + [IpcMessageType.TaskCommand]: [clientId: string, data: TaskCommand] + [IpcMessageType.TaskEvent]: [relayClientId: string | undefined, data: TaskEvent] +} + +export class IpcServer extends EventEmitter { + private readonly _socketPath: string + private readonly _log: (...args: unknown[]) => void + private readonly _clients: Map + + private _isListening = false + + constructor(socketPath: string, log = console.log) { + super() + + this._socketPath = socketPath + this._log = log + this._clients = new Map() + } + + public listen() { + this._isListening = true + + ipc.config.silent = true + + ipc.serve(this.socketPath, () => { + ipc.server.on("connect", (socket) => this.onConnect(socket)) + ipc.server.on("socket.disconnected", (socket) => this.onDisconnect(socket)) + ipc.server.on("message", (data) => this.onMessage(data)) + }) + + ipc.server.start() + } + + private onConnect(socket: Socket) { + const clientId = crypto.randomBytes(6).toString("hex") + this._clients.set(clientId, socket) + this.log(`[server#onConnect] clientId = ${clientId}, # clients = ${this._clients.size}`) + + this.send(socket, { + type: IpcMessageType.Ack, + origin: IpcOrigin.Server, + data: { clientId, pid: process.pid, ppid: process.ppid }, + }) + + this.emit(IpcMessageType.Connect, clientId) + } + + private onDisconnect(destroyedSocket: Socket) { + let disconnectedClientId: string | undefined + + for (const [clientId, socket] of this._clients.entries()) { + if (socket === destroyedSocket) { + disconnectedClientId = clientId + this._clients.delete(clientId) + break + } + } + + this.log(`[server#socket.disconnected] clientId = ${disconnectedClientId}, # clients = ${this._clients.size}`) + + if (disconnectedClientId) { + this.emit(IpcMessageType.Disconnect, disconnectedClientId) + } + } + + private onMessage(data: unknown) { + if (typeof data !== "object") { + this.log("[server#onMessage] invalid data", data) + return + } + + const result = ipcMessageSchema.safeParse(data) + + if (!result.success) { + this.log("[server#onMessage] invalid payload", result.error, data) + return + } + + const payload = result.data + + if (payload.origin === IpcOrigin.Client) { + switch (payload.type) { + case IpcMessageType.TaskCommand: + this.emit(IpcMessageType.TaskCommand, payload.clientId, payload.data) + break + } + } + } + + private log(...args: unknown[]) { + this._log(...args) + } + + public broadcast(message: IpcMessage) { + this.log("[server#broadcast] message =", message) + ipc.server.broadcast("message", message) + } + + public send(client: string | Socket, message: IpcMessage) { + this.log("[server#send] message =", message) + + if (typeof client === "string") { + const socket = this._clients.get(client) + + if (socket) { + ipc.server.emit(socket, "message", message) + } + } else { + ipc.server.emit(client, "message", message) + } + } + + public get socketPath() { + return this._socketPath + } + + public get isListening() { + return this._isListening + } +} diff --git a/packages/evals/src/lib/__tests__/in-chunks-of.test.ts b/packages/evals/src/lib/__tests__/in-chunks-of.test.ts new file mode 100644 index 0000000000..3dd0151569 --- /dev/null +++ b/packages/evals/src/lib/__tests__/in-chunks-of.test.ts @@ -0,0 +1,18 @@ +// npx vitest run src/__tests__/in-chunks-of.test.ts + +import { inChunksOf } from "../in-chunks-of.js" + +describe("inChunksOf", () => { + it("should return an array of arrays", () => { + const result = inChunksOf([1, 2, 3, 4, 5]) + expect(result).toEqual([[1, 2], [3, 4], [5]]) + }) + + it("should return an array of arrays with a custom chunk size", () => { + const result = inChunksOf([1, 2, 3, 4, 5], 3) + expect(result).toEqual([ + [1, 2, 3], + [4, 5], + ]) + }) +}) diff --git a/packages/evals/src/lib/in-chunks-of.ts b/packages/evals/src/lib/in-chunks-of.ts new file mode 100644 index 0000000000..8245c97a8a --- /dev/null +++ b/packages/evals/src/lib/in-chunks-of.ts @@ -0,0 +1,14 @@ +export function inChunksOf(ary: T[], perChunk = 2) { + const result = ary.reduce((collect, item, index) => { + const chunkIndex = Math.floor(index / perChunk) + + if (!collect[chunkIndex]) { + collect[chunkIndex] = [] + } + + collect[chunkIndex].push(item) + return collect + }, [] as T[][]) + + return result +} diff --git a/packages/evals/src/lib/index.ts b/packages/evals/src/lib/index.ts new file mode 100644 index 0000000000..8c2aa62d40 --- /dev/null +++ b/packages/evals/src/lib/index.ts @@ -0,0 +1 @@ +export * from "./in-chunks-of.js" diff --git a/packages/evals/src/types/defaults.ts b/packages/evals/src/types/defaults.ts new file mode 100644 index 0000000000..b77460d36a --- /dev/null +++ b/packages/evals/src/types/defaults.ts @@ -0,0 +1,66 @@ +import { RooCodeSettings } from "@roo-code/types" + +export const rooCodeDefaults: RooCodeSettings = { + apiProvider: "openrouter", + openRouterUseMiddleOutTransform: false, + + lastShownAnnouncementId: "may-21-2025-3-18", + + pinnedApiConfigs: {}, + + autoApprovalEnabled: true, + alwaysAllowReadOnly: true, + alwaysAllowReadOnlyOutsideWorkspace: false, + alwaysAllowWrite: true, + alwaysAllowWriteOutsideWorkspace: false, + writeDelayMs: 1000, + alwaysAllowBrowser: true, + alwaysApproveResubmit: true, + requestDelaySeconds: 10, + alwaysAllowMcp: true, + alwaysAllowModeSwitch: true, + alwaysAllowSubtasks: true, + alwaysAllowExecute: true, + allowedCommands: ["*"], + + browserToolEnabled: false, + browserViewportSize: "900x600", + screenshotQuality: 75, + remoteBrowserEnabled: false, + + ttsEnabled: false, + ttsSpeed: 1, + soundEnabled: false, + soundVolume: 0.5, + + terminalOutputLineLimit: 500, + terminalShellIntegrationTimeout: 30000, + terminalCommandDelay: 0, + terminalPowershellCounter: false, + terminalZshOhMy: true, + terminalZshClearEolMark: true, + terminalZshP10k: false, + terminalZdotdir: true, + terminalCompressProgressBar: true, + terminalShellIntegrationDisabled: false, + + diffEnabled: true, + fuzzyMatchThreshold: 1, + + enableCheckpoints: false, + + rateLimitSeconds: 0, + maxOpenTabsContext: 20, + maxWorkspaceFiles: 200, + showRooIgnoredFiles: true, + maxReadFileLine: -1, // -1 to enable full file reading. + + language: "en", + telemetrySetting: "enabled", + + mcpEnabled: false, + + mode: "code", + + customModes: [], +} diff --git a/packages/evals/src/types/exercises.ts b/packages/evals/src/types/exercises.ts new file mode 100644 index 0000000000..dce12cf491 --- /dev/null +++ b/packages/evals/src/types/exercises.ts @@ -0,0 +1,10 @@ +/** + * ExerciseLanguage + */ + +export const exerciseLanguages = ["go", "java", "javascript", "python", "rust"] as const + +export type ExerciseLanguage = (typeof exerciseLanguages)[number] + +export const isExerciseLanguage = (value: string): value is ExerciseLanguage => + exerciseLanguages.includes(value as ExerciseLanguage) diff --git a/packages/evals/src/types/index.ts b/packages/evals/src/types/index.ts new file mode 100644 index 0000000000..49ce3d0ab3 --- /dev/null +++ b/packages/evals/src/types/index.ts @@ -0,0 +1,3 @@ +export * from "./exercises.js" +export * from "./ipc.js" +export * from "./defaults.js" diff --git a/packages/evals/src/types/ipc.ts b/packages/evals/src/types/ipc.ts new file mode 100644 index 0000000000..b302994321 --- /dev/null +++ b/packages/evals/src/types/ipc.ts @@ -0,0 +1,35 @@ + +// import { IpcMessageType, taskEventSchema } from "@roo-code/types" + +/** + * TaskEvent + */ + +export enum EvalEventName { + Pass = "pass", + Fail = "fail", +} + +// export const taskEventSchema = z.discriminatedUnion("eventName", [ +// ...taskEventSchema.shape, +// z.object({ +// eventName: z.literal(EvalEventName.Pass), +// payload: z.undefined(), +// taskId: z.number(), +// }), +// z.object({ +// eventName: z.literal(EvalEventName.Fail), +// payload: z.undefined(), +// taskId: z.number(), +// }), +// ]) + +/** + * IpcMessage + */ + +// export enum IpcMessageType { +// ..., +// TaskEvent = "TaskEvent", +// EvalEvent = "EvalEvent", +// } diff --git a/packages/evals/tsconfig.json b/packages/evals/tsconfig.json new file mode 100644 index 0000000000..0f9961fdbd --- /dev/null +++ b/packages/evals/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@roo-code/config-typescript/base.json", + "compilerOptions": { + "types": ["vitest/globals"] + }, + "include": ["src"], + "exclude": ["node_modules"] +} diff --git a/packages/evals/vitest.config.ts b/packages/evals/vitest.config.ts new file mode 100644 index 0000000000..e8586252d2 --- /dev/null +++ b/packages/evals/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "vitest/config" + +export default defineConfig({ + test: { + globalSetup: ["./vitest.setup.ts"], + }, +}) diff --git a/packages/evals/vitest.setup.ts b/packages/evals/vitest.setup.ts new file mode 100644 index 0000000000..c296ef6cf1 --- /dev/null +++ b/packages/evals/vitest.setup.ts @@ -0,0 +1,20 @@ +import fs from "node:fs/promises" +import path from "node:path" + +import { execa } from "execa" + +const TEST_DB_PATH = path.join(process.cwd(), "test.db") + +export default async function () { + const exists = await fs.stat(TEST_DB_PATH).catch(() => false) + + if (exists) { + await fs.unlink(TEST_DB_PATH) + } + + await execa({ + env: { BENCHMARKS_DB_PATH: `file:${TEST_DB_PATH}` }, + })`pnpm db:push` + + process.env.BENCHMARKS_DB_PATH = `file:${TEST_DB_PATH}` +} From b979278e24041a1500da0638fdee033e8350265c Mon Sep 17 00:00:00 2001 From: cte Date: Mon, 2 Jun 2025 18:27:11 -0700 Subject: [PATCH 2/9] Move evals --- apps/web-evals/.gitignore | 1 + .../web => apps/web-evals}/components.json | 0 .../web => apps/web-evals}/eslint.config.mjs | 0 apps/web-evals/next-env.d.ts | 5 + .../web => apps/web-evals}/next.config.ts | 0 .../apps/web => apps/web-evals}/package.json | 9 +- .../web => apps/web-evals}/postcss.config.mjs | 0 .../web => apps/web-evals}/public/.gitkeep | 0 .../src/app/api/runs/[id]/stream/route.ts | 0 .../web-evals}/src/app/api/runs/route.ts | 0 .../web-evals}/src/app/api/tasks/route.ts | 0 .../web-evals}/src/app/favicon.ico | Bin .../web-evals}/src/app/globals.css | 0 .../web => apps/web-evals}/src/app/home.tsx | 0 .../web => apps/web-evals}/src/app/layout.tsx | 0 .../web => apps/web-evals}/src/app/page.tsx | 0 .../src/app/runs/[id]/connection-status.tsx | 0 .../web-evals}/src/app/runs/[id]/page.tsx | 0 .../web-evals}/src/app/runs/[id]/run.tsx | 0 .../src/app/runs/[id]/task-status.tsx | 0 .../web-evals}/src/app/runs/new/new-run.tsx | 0 .../web-evals}/src/app/runs/new/page.tsx | 0 .../src/app/runs/new/settings-diff.tsx | 0 .../src/components/layout/header.tsx | 0 .../web-evals}/src/components/layout/logo.tsx | 0 .../src/components/providers/index.ts | 0 .../providers/react-query-provider.tsx | 0 .../components/providers/theme-provider.tsx | 0 .../src/components/ui/alert-dialog.tsx | 0 .../web-evals}/src/components/ui/badge.tsx | 0 .../web-evals}/src/components/ui/button.tsx | 0 .../web-evals}/src/components/ui/command.tsx | 0 .../web-evals}/src/components/ui/dialog.tsx | 0 .../web-evals}/src/components/ui/drawer.tsx | 0 .../src/components/ui/dropdown-menu.tsx | 0 .../web-evals}/src/components/ui/form.tsx | 0 .../web-evals}/src/components/ui/index.ts | 0 .../web-evals}/src/components/ui/input.tsx | 0 .../web-evals}/src/components/ui/label.tsx | 0 .../src/components/ui/multi-select.tsx | 0 .../web-evals}/src/components/ui/popover.tsx | 0 .../src/components/ui/scroll-area.tsx | 0 .../web-evals}/src/components/ui/select.tsx | 0 .../src/components/ui/separator.tsx | 0 .../web-evals}/src/components/ui/slider.tsx | 0 .../web-evals}/src/components/ui/sonner.tsx | 0 .../web-evals}/src/components/ui/table.tsx | 0 .../web-evals}/src/components/ui/tabs.tsx | 0 .../web-evals}/src/components/ui/textarea.tsx | 0 .../web-evals}/src/components/ui/tooltip.tsx | 0 .../web-evals}/src/hooks/use-event-source.ts | 0 .../web-evals}/src/hooks/use-exercises.ts | 0 .../src/hooks/use-open-router-models.ts | 0 .../web-evals}/src/hooks/use-process-tree.ts | 0 .../web-evals}/src/hooks/use-run-status.ts | 0 .../web-evals}/src/lib/formatters.ts | 0 .../web => apps/web-evals}/src/lib/schemas.ts | 0 .../web-evals}/src/lib/server/exercises.ts | 0 .../web-evals}/src/lib/server/processes.ts | 0 .../web-evals}/src/lib/server/runs.ts | 0 .../web-evals}/src/lib/server/sse-stream.ts | 0 .../web-evals}/src/lib/server/tasks.ts | 0 .../web => apps/web-evals}/src/lib/utils.ts | 0 .../apps/web => apps/web-evals}/tsconfig.json | 2 +- apps/web-evals/tsconfig.tsbuildinfo | 1 + apps/web-roo-code/.gitkeep | 0 evals/.tool-versions | 4 - evals/apps/cli/eslint.config.mjs | 4 - evals/apps/cli/package.json | 27 - evals/apps/cli/src/exercises.ts | 31 - evals/apps/cli/src/index.ts | 557 ---- evals/apps/cli/src/paths.ts | 7 - evals/apps/cli/tsconfig.json | 5 - evals/packages/db/.gitignore | 1 - evals/packages/db/README.md | 15 - evals/packages/db/drizzle.config.ts | 18 - evals/packages/db/drizzle/0000_elite_raza.sql | 40 - .../packages/db/drizzle/0001_lush_reavers.sql | 1 - .../db/drizzle/0002_white_flatman.sql | 1 - .../db/drizzle/0003_sweet_chimera.sql | 1 - .../db/drizzle/0004_absent_slapstick.sql | 10 - .../db/drizzle/meta/0000_snapshot.json | 274 -- .../db/drizzle/meta/0001_snapshot.json | 281 -- .../db/drizzle/meta/0002_snapshot.json | 289 -- .../db/drizzle/meta/0003_snapshot.json | 296 -- .../db/drizzle/meta/0004_snapshot.json | 367 --- evals/packages/db/drizzle/meta/_journal.json | 41 - evals/packages/db/eslint.config.mjs | 4 - evals/packages/db/package.json | 37 - evals/packages/db/scripts/copy-run.mts | 112 - evals/packages/db/scripts/enable-wal.mts | 23 - evals/packages/db/src/db.ts | 13 - evals/packages/db/src/index.ts | 6 - .../db/src/queries/__tests__/runs.test.ts | 87 - evals/packages/db/src/queries/errors.ts | 3 - evals/packages/db/src/queries/runs.ts | 127 - evals/packages/db/src/queries/taskMetrics.ts | 45 - evals/packages/db/src/queries/tasks.ts | 61 - evals/packages/db/src/queries/toolErrors.ts | 22 - evals/packages/db/src/schema.ts | 140 - evals/packages/db/tsconfig.json | 8 - evals/packages/db/vitest.config.ts | 7 - evals/packages/db/vitest.setup.ts | 20 - evals/packages/ipc/eslint.config.mjs | 4 - evals/packages/ipc/package.json | 21 - evals/packages/ipc/src/client.ts | 119 - evals/packages/ipc/src/index.ts | 2 - evals/packages/ipc/src/server.ts | 131 - evals/packages/ipc/tsconfig.json | 5 - evals/packages/lib/eslint.config.mjs | 4 - evals/packages/lib/package.json | 17 - .../lib/src/__tests__/in-chunks-of.test.ts | 18 - evals/packages/lib/src/in-chunks-of.ts | 14 - evals/packages/lib/src/index.ts | 1 - evals/packages/lib/tsconfig.json | 8 - evals/packages/types/eslint.config.mjs | 4 - evals/packages/types/package.json | 18 - evals/packages/types/src/exercises.ts | 10 - evals/packages/types/src/index.ts | 4 - evals/packages/types/src/ipc.ts | 171 -- evals/packages/types/src/roo-code-defaults.ts | 66 - evals/packages/types/src/roo-code.ts | 1148 -------- evals/packages/types/src/utils.ts | 7 - evals/packages/types/tsconfig.json | 5 - evals/scripts/setup.sh | 356 --- pnpm-lock.yaml | 2469 ++++++++++++++++- 126 files changed, 2432 insertions(+), 5173 deletions(-) create mode 100644 apps/web-evals/.gitignore rename {evals/apps/web => apps/web-evals}/components.json (100%) rename {evals/apps/web => apps/web-evals}/eslint.config.mjs (100%) create mode 100644 apps/web-evals/next-env.d.ts rename {evals/apps/web => apps/web-evals}/next.config.ts (100%) rename {evals/apps/web => apps/web-evals}/package.json (88%) rename {evals/apps/web => apps/web-evals}/postcss.config.mjs (100%) rename {evals/apps/web => apps/web-evals}/public/.gitkeep (100%) rename {evals/apps/web => apps/web-evals}/src/app/api/runs/[id]/stream/route.ts (100%) rename {evals/apps/web => apps/web-evals}/src/app/api/runs/route.ts (100%) rename {evals/apps/web => apps/web-evals}/src/app/api/tasks/route.ts (100%) rename {evals/apps/web => apps/web-evals}/src/app/favicon.ico (100%) rename {evals/apps/web => apps/web-evals}/src/app/globals.css (100%) rename {evals/apps/web => apps/web-evals}/src/app/home.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/app/layout.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/app/page.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/app/runs/[id]/connection-status.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/app/runs/[id]/page.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/app/runs/[id]/run.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/app/runs/[id]/task-status.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/app/runs/new/new-run.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/app/runs/new/page.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/app/runs/new/settings-diff.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/layout/header.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/layout/logo.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/providers/index.ts (100%) rename {evals/apps/web => apps/web-evals}/src/components/providers/react-query-provider.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/providers/theme-provider.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/alert-dialog.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/badge.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/button.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/command.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/dialog.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/drawer.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/dropdown-menu.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/form.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/index.ts (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/input.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/label.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/multi-select.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/popover.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/scroll-area.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/select.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/separator.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/slider.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/sonner.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/table.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/tabs.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/textarea.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/components/ui/tooltip.tsx (100%) rename {evals/apps/web => apps/web-evals}/src/hooks/use-event-source.ts (100%) rename {evals/apps/web => apps/web-evals}/src/hooks/use-exercises.ts (100%) rename {evals/apps/web => apps/web-evals}/src/hooks/use-open-router-models.ts (100%) rename {evals/apps/web => apps/web-evals}/src/hooks/use-process-tree.ts (100%) rename {evals/apps/web => apps/web-evals}/src/hooks/use-run-status.ts (100%) rename {evals/apps/web => apps/web-evals}/src/lib/formatters.ts (100%) rename {evals/apps/web => apps/web-evals}/src/lib/schemas.ts (100%) rename {evals/apps/web => apps/web-evals}/src/lib/server/exercises.ts (100%) rename {evals/apps/web => apps/web-evals}/src/lib/server/processes.ts (100%) rename {evals/apps/web => apps/web-evals}/src/lib/server/runs.ts (100%) rename {evals/apps/web => apps/web-evals}/src/lib/server/sse-stream.ts (100%) rename {evals/apps/web => apps/web-evals}/src/lib/server/tasks.ts (100%) rename {evals/apps/web => apps/web-evals}/src/lib/utils.ts (100%) rename {evals/apps/web => apps/web-evals}/tsconfig.json (78%) create mode 100644 apps/web-evals/tsconfig.tsbuildinfo create mode 100644 apps/web-roo-code/.gitkeep delete mode 100644 evals/.tool-versions delete mode 100644 evals/apps/cli/eslint.config.mjs delete mode 100644 evals/apps/cli/package.json delete mode 100644 evals/apps/cli/src/exercises.ts delete mode 100644 evals/apps/cli/src/index.ts delete mode 100644 evals/apps/cli/src/paths.ts delete mode 100644 evals/apps/cli/tsconfig.json delete mode 100644 evals/packages/db/.gitignore delete mode 100644 evals/packages/db/README.md delete mode 100644 evals/packages/db/drizzle.config.ts delete mode 100644 evals/packages/db/drizzle/0000_elite_raza.sql delete mode 100644 evals/packages/db/drizzle/0001_lush_reavers.sql delete mode 100644 evals/packages/db/drizzle/0002_white_flatman.sql delete mode 100644 evals/packages/db/drizzle/0003_sweet_chimera.sql delete mode 100644 evals/packages/db/drizzle/0004_absent_slapstick.sql delete mode 100644 evals/packages/db/drizzle/meta/0000_snapshot.json delete mode 100644 evals/packages/db/drizzle/meta/0001_snapshot.json delete mode 100644 evals/packages/db/drizzle/meta/0002_snapshot.json delete mode 100644 evals/packages/db/drizzle/meta/0003_snapshot.json delete mode 100644 evals/packages/db/drizzle/meta/0004_snapshot.json delete mode 100644 evals/packages/db/drizzle/meta/_journal.json delete mode 100644 evals/packages/db/eslint.config.mjs delete mode 100644 evals/packages/db/package.json delete mode 100644 evals/packages/db/scripts/copy-run.mts delete mode 100644 evals/packages/db/scripts/enable-wal.mts delete mode 100644 evals/packages/db/src/db.ts delete mode 100644 evals/packages/db/src/index.ts delete mode 100644 evals/packages/db/src/queries/__tests__/runs.test.ts delete mode 100644 evals/packages/db/src/queries/errors.ts delete mode 100644 evals/packages/db/src/queries/runs.ts delete mode 100644 evals/packages/db/src/queries/taskMetrics.ts delete mode 100644 evals/packages/db/src/queries/tasks.ts delete mode 100644 evals/packages/db/src/queries/toolErrors.ts delete mode 100644 evals/packages/db/src/schema.ts delete mode 100644 evals/packages/db/tsconfig.json delete mode 100644 evals/packages/db/vitest.config.ts delete mode 100644 evals/packages/db/vitest.setup.ts delete mode 100644 evals/packages/ipc/eslint.config.mjs delete mode 100644 evals/packages/ipc/package.json delete mode 100644 evals/packages/ipc/src/client.ts delete mode 100644 evals/packages/ipc/src/index.ts delete mode 100644 evals/packages/ipc/src/server.ts delete mode 100644 evals/packages/ipc/tsconfig.json delete mode 100644 evals/packages/lib/eslint.config.mjs delete mode 100644 evals/packages/lib/package.json delete mode 100644 evals/packages/lib/src/__tests__/in-chunks-of.test.ts delete mode 100644 evals/packages/lib/src/in-chunks-of.ts delete mode 100644 evals/packages/lib/src/index.ts delete mode 100644 evals/packages/lib/tsconfig.json delete mode 100644 evals/packages/types/eslint.config.mjs delete mode 100644 evals/packages/types/package.json delete mode 100644 evals/packages/types/src/exercises.ts delete mode 100644 evals/packages/types/src/index.ts delete mode 100644 evals/packages/types/src/ipc.ts delete mode 100644 evals/packages/types/src/roo-code-defaults.ts delete mode 100644 evals/packages/types/src/roo-code.ts delete mode 100644 evals/packages/types/src/utils.ts delete mode 100644 evals/packages/types/tsconfig.json delete mode 100755 evals/scripts/setup.sh diff --git a/apps/web-evals/.gitignore b/apps/web-evals/.gitignore new file mode 100644 index 0000000000..a680367ef5 --- /dev/null +++ b/apps/web-evals/.gitignore @@ -0,0 +1 @@ +.next diff --git a/evals/apps/web/components.json b/apps/web-evals/components.json similarity index 100% rename from evals/apps/web/components.json rename to apps/web-evals/components.json diff --git a/evals/apps/web/eslint.config.mjs b/apps/web-evals/eslint.config.mjs similarity index 100% rename from evals/apps/web/eslint.config.mjs rename to apps/web-evals/eslint.config.mjs diff --git a/apps/web-evals/next-env.d.ts b/apps/web-evals/next-env.d.ts new file mode 100644 index 0000000000..1b3be0840f --- /dev/null +++ b/apps/web-evals/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/evals/apps/web/next.config.ts b/apps/web-evals/next.config.ts similarity index 100% rename from evals/apps/web/next.config.ts rename to apps/web-evals/next.config.ts diff --git a/evals/apps/web/package.json b/apps/web-evals/package.json similarity index 88% rename from evals/apps/web/package.json rename to apps/web-evals/package.json index b48396ac9e..26e430ba00 100644 --- a/evals/apps/web/package.json +++ b/apps/web-evals/package.json @@ -10,9 +10,8 @@ "start": "next start" }, "dependencies": { - "@evals/db": "workspace:^", - "@evals/ipc": "workspace:^", - "@evals/types": "workspace:^", + "@roo-code/evals": "workspace:^", + "@roo-code/types": "workspace:^", "@hookform/resolvers": "^4.1.3", "@radix-ui/react-alert-dialog": "^1.1.7", "@radix-ui/react-dialog": "^1.1.6", @@ -47,8 +46,8 @@ "zod": "^3.24.2" }, "devDependencies": { - "@evals/eslint-config": "workspace:^", - "@evals/typescript-config": "workspace:^", + "@roo-code/config-eslint": "workspace:^", + "@roo-code/config-typescript": "workspace:^", "@tailwindcss/postcss": "^4", "@types/ps-tree": "^1.1.6", "@types/react": "^19", diff --git a/evals/apps/web/postcss.config.mjs b/apps/web-evals/postcss.config.mjs similarity index 100% rename from evals/apps/web/postcss.config.mjs rename to apps/web-evals/postcss.config.mjs diff --git a/evals/apps/web/public/.gitkeep b/apps/web-evals/public/.gitkeep similarity index 100% rename from evals/apps/web/public/.gitkeep rename to apps/web-evals/public/.gitkeep diff --git a/evals/apps/web/src/app/api/runs/[id]/stream/route.ts b/apps/web-evals/src/app/api/runs/[id]/stream/route.ts similarity index 100% rename from evals/apps/web/src/app/api/runs/[id]/stream/route.ts rename to apps/web-evals/src/app/api/runs/[id]/stream/route.ts diff --git a/evals/apps/web/src/app/api/runs/route.ts b/apps/web-evals/src/app/api/runs/route.ts similarity index 100% rename from evals/apps/web/src/app/api/runs/route.ts rename to apps/web-evals/src/app/api/runs/route.ts diff --git a/evals/apps/web/src/app/api/tasks/route.ts b/apps/web-evals/src/app/api/tasks/route.ts similarity index 100% rename from evals/apps/web/src/app/api/tasks/route.ts rename to apps/web-evals/src/app/api/tasks/route.ts diff --git a/evals/apps/web/src/app/favicon.ico b/apps/web-evals/src/app/favicon.ico similarity index 100% rename from evals/apps/web/src/app/favicon.ico rename to apps/web-evals/src/app/favicon.ico diff --git a/evals/apps/web/src/app/globals.css b/apps/web-evals/src/app/globals.css similarity index 100% rename from evals/apps/web/src/app/globals.css rename to apps/web-evals/src/app/globals.css diff --git a/evals/apps/web/src/app/home.tsx b/apps/web-evals/src/app/home.tsx similarity index 100% rename from evals/apps/web/src/app/home.tsx rename to apps/web-evals/src/app/home.tsx diff --git a/evals/apps/web/src/app/layout.tsx b/apps/web-evals/src/app/layout.tsx similarity index 100% rename from evals/apps/web/src/app/layout.tsx rename to apps/web-evals/src/app/layout.tsx diff --git a/evals/apps/web/src/app/page.tsx b/apps/web-evals/src/app/page.tsx similarity index 100% rename from evals/apps/web/src/app/page.tsx rename to apps/web-evals/src/app/page.tsx diff --git a/evals/apps/web/src/app/runs/[id]/connection-status.tsx b/apps/web-evals/src/app/runs/[id]/connection-status.tsx similarity index 100% rename from evals/apps/web/src/app/runs/[id]/connection-status.tsx rename to apps/web-evals/src/app/runs/[id]/connection-status.tsx diff --git a/evals/apps/web/src/app/runs/[id]/page.tsx b/apps/web-evals/src/app/runs/[id]/page.tsx similarity index 100% rename from evals/apps/web/src/app/runs/[id]/page.tsx rename to apps/web-evals/src/app/runs/[id]/page.tsx diff --git a/evals/apps/web/src/app/runs/[id]/run.tsx b/apps/web-evals/src/app/runs/[id]/run.tsx similarity index 100% rename from evals/apps/web/src/app/runs/[id]/run.tsx rename to apps/web-evals/src/app/runs/[id]/run.tsx diff --git a/evals/apps/web/src/app/runs/[id]/task-status.tsx b/apps/web-evals/src/app/runs/[id]/task-status.tsx similarity index 100% rename from evals/apps/web/src/app/runs/[id]/task-status.tsx rename to apps/web-evals/src/app/runs/[id]/task-status.tsx diff --git a/evals/apps/web/src/app/runs/new/new-run.tsx b/apps/web-evals/src/app/runs/new/new-run.tsx similarity index 100% rename from evals/apps/web/src/app/runs/new/new-run.tsx rename to apps/web-evals/src/app/runs/new/new-run.tsx diff --git a/evals/apps/web/src/app/runs/new/page.tsx b/apps/web-evals/src/app/runs/new/page.tsx similarity index 100% rename from evals/apps/web/src/app/runs/new/page.tsx rename to apps/web-evals/src/app/runs/new/page.tsx diff --git a/evals/apps/web/src/app/runs/new/settings-diff.tsx b/apps/web-evals/src/app/runs/new/settings-diff.tsx similarity index 100% rename from evals/apps/web/src/app/runs/new/settings-diff.tsx rename to apps/web-evals/src/app/runs/new/settings-diff.tsx diff --git a/evals/apps/web/src/components/layout/header.tsx b/apps/web-evals/src/components/layout/header.tsx similarity index 100% rename from evals/apps/web/src/components/layout/header.tsx rename to apps/web-evals/src/components/layout/header.tsx diff --git a/evals/apps/web/src/components/layout/logo.tsx b/apps/web-evals/src/components/layout/logo.tsx similarity index 100% rename from evals/apps/web/src/components/layout/logo.tsx rename to apps/web-evals/src/components/layout/logo.tsx diff --git a/evals/apps/web/src/components/providers/index.ts b/apps/web-evals/src/components/providers/index.ts similarity index 100% rename from evals/apps/web/src/components/providers/index.ts rename to apps/web-evals/src/components/providers/index.ts diff --git a/evals/apps/web/src/components/providers/react-query-provider.tsx b/apps/web-evals/src/components/providers/react-query-provider.tsx similarity index 100% rename from evals/apps/web/src/components/providers/react-query-provider.tsx rename to apps/web-evals/src/components/providers/react-query-provider.tsx diff --git a/evals/apps/web/src/components/providers/theme-provider.tsx b/apps/web-evals/src/components/providers/theme-provider.tsx similarity index 100% rename from evals/apps/web/src/components/providers/theme-provider.tsx rename to apps/web-evals/src/components/providers/theme-provider.tsx diff --git a/evals/apps/web/src/components/ui/alert-dialog.tsx b/apps/web-evals/src/components/ui/alert-dialog.tsx similarity index 100% rename from evals/apps/web/src/components/ui/alert-dialog.tsx rename to apps/web-evals/src/components/ui/alert-dialog.tsx diff --git a/evals/apps/web/src/components/ui/badge.tsx b/apps/web-evals/src/components/ui/badge.tsx similarity index 100% rename from evals/apps/web/src/components/ui/badge.tsx rename to apps/web-evals/src/components/ui/badge.tsx diff --git a/evals/apps/web/src/components/ui/button.tsx b/apps/web-evals/src/components/ui/button.tsx similarity index 100% rename from evals/apps/web/src/components/ui/button.tsx rename to apps/web-evals/src/components/ui/button.tsx diff --git a/evals/apps/web/src/components/ui/command.tsx b/apps/web-evals/src/components/ui/command.tsx similarity index 100% rename from evals/apps/web/src/components/ui/command.tsx rename to apps/web-evals/src/components/ui/command.tsx diff --git a/evals/apps/web/src/components/ui/dialog.tsx b/apps/web-evals/src/components/ui/dialog.tsx similarity index 100% rename from evals/apps/web/src/components/ui/dialog.tsx rename to apps/web-evals/src/components/ui/dialog.tsx diff --git a/evals/apps/web/src/components/ui/drawer.tsx b/apps/web-evals/src/components/ui/drawer.tsx similarity index 100% rename from evals/apps/web/src/components/ui/drawer.tsx rename to apps/web-evals/src/components/ui/drawer.tsx diff --git a/evals/apps/web/src/components/ui/dropdown-menu.tsx b/apps/web-evals/src/components/ui/dropdown-menu.tsx similarity index 100% rename from evals/apps/web/src/components/ui/dropdown-menu.tsx rename to apps/web-evals/src/components/ui/dropdown-menu.tsx diff --git a/evals/apps/web/src/components/ui/form.tsx b/apps/web-evals/src/components/ui/form.tsx similarity index 100% rename from evals/apps/web/src/components/ui/form.tsx rename to apps/web-evals/src/components/ui/form.tsx diff --git a/evals/apps/web/src/components/ui/index.ts b/apps/web-evals/src/components/ui/index.ts similarity index 100% rename from evals/apps/web/src/components/ui/index.ts rename to apps/web-evals/src/components/ui/index.ts diff --git a/evals/apps/web/src/components/ui/input.tsx b/apps/web-evals/src/components/ui/input.tsx similarity index 100% rename from evals/apps/web/src/components/ui/input.tsx rename to apps/web-evals/src/components/ui/input.tsx diff --git a/evals/apps/web/src/components/ui/label.tsx b/apps/web-evals/src/components/ui/label.tsx similarity index 100% rename from evals/apps/web/src/components/ui/label.tsx rename to apps/web-evals/src/components/ui/label.tsx diff --git a/evals/apps/web/src/components/ui/multi-select.tsx b/apps/web-evals/src/components/ui/multi-select.tsx similarity index 100% rename from evals/apps/web/src/components/ui/multi-select.tsx rename to apps/web-evals/src/components/ui/multi-select.tsx diff --git a/evals/apps/web/src/components/ui/popover.tsx b/apps/web-evals/src/components/ui/popover.tsx similarity index 100% rename from evals/apps/web/src/components/ui/popover.tsx rename to apps/web-evals/src/components/ui/popover.tsx diff --git a/evals/apps/web/src/components/ui/scroll-area.tsx b/apps/web-evals/src/components/ui/scroll-area.tsx similarity index 100% rename from evals/apps/web/src/components/ui/scroll-area.tsx rename to apps/web-evals/src/components/ui/scroll-area.tsx diff --git a/evals/apps/web/src/components/ui/select.tsx b/apps/web-evals/src/components/ui/select.tsx similarity index 100% rename from evals/apps/web/src/components/ui/select.tsx rename to apps/web-evals/src/components/ui/select.tsx diff --git a/evals/apps/web/src/components/ui/separator.tsx b/apps/web-evals/src/components/ui/separator.tsx similarity index 100% rename from evals/apps/web/src/components/ui/separator.tsx rename to apps/web-evals/src/components/ui/separator.tsx diff --git a/evals/apps/web/src/components/ui/slider.tsx b/apps/web-evals/src/components/ui/slider.tsx similarity index 100% rename from evals/apps/web/src/components/ui/slider.tsx rename to apps/web-evals/src/components/ui/slider.tsx diff --git a/evals/apps/web/src/components/ui/sonner.tsx b/apps/web-evals/src/components/ui/sonner.tsx similarity index 100% rename from evals/apps/web/src/components/ui/sonner.tsx rename to apps/web-evals/src/components/ui/sonner.tsx diff --git a/evals/apps/web/src/components/ui/table.tsx b/apps/web-evals/src/components/ui/table.tsx similarity index 100% rename from evals/apps/web/src/components/ui/table.tsx rename to apps/web-evals/src/components/ui/table.tsx diff --git a/evals/apps/web/src/components/ui/tabs.tsx b/apps/web-evals/src/components/ui/tabs.tsx similarity index 100% rename from evals/apps/web/src/components/ui/tabs.tsx rename to apps/web-evals/src/components/ui/tabs.tsx diff --git a/evals/apps/web/src/components/ui/textarea.tsx b/apps/web-evals/src/components/ui/textarea.tsx similarity index 100% rename from evals/apps/web/src/components/ui/textarea.tsx rename to apps/web-evals/src/components/ui/textarea.tsx diff --git a/evals/apps/web/src/components/ui/tooltip.tsx b/apps/web-evals/src/components/ui/tooltip.tsx similarity index 100% rename from evals/apps/web/src/components/ui/tooltip.tsx rename to apps/web-evals/src/components/ui/tooltip.tsx diff --git a/evals/apps/web/src/hooks/use-event-source.ts b/apps/web-evals/src/hooks/use-event-source.ts similarity index 100% rename from evals/apps/web/src/hooks/use-event-source.ts rename to apps/web-evals/src/hooks/use-event-source.ts diff --git a/evals/apps/web/src/hooks/use-exercises.ts b/apps/web-evals/src/hooks/use-exercises.ts similarity index 100% rename from evals/apps/web/src/hooks/use-exercises.ts rename to apps/web-evals/src/hooks/use-exercises.ts diff --git a/evals/apps/web/src/hooks/use-open-router-models.ts b/apps/web-evals/src/hooks/use-open-router-models.ts similarity index 100% rename from evals/apps/web/src/hooks/use-open-router-models.ts rename to apps/web-evals/src/hooks/use-open-router-models.ts diff --git a/evals/apps/web/src/hooks/use-process-tree.ts b/apps/web-evals/src/hooks/use-process-tree.ts similarity index 100% rename from evals/apps/web/src/hooks/use-process-tree.ts rename to apps/web-evals/src/hooks/use-process-tree.ts diff --git a/evals/apps/web/src/hooks/use-run-status.ts b/apps/web-evals/src/hooks/use-run-status.ts similarity index 100% rename from evals/apps/web/src/hooks/use-run-status.ts rename to apps/web-evals/src/hooks/use-run-status.ts diff --git a/evals/apps/web/src/lib/formatters.ts b/apps/web-evals/src/lib/formatters.ts similarity index 100% rename from evals/apps/web/src/lib/formatters.ts rename to apps/web-evals/src/lib/formatters.ts diff --git a/evals/apps/web/src/lib/schemas.ts b/apps/web-evals/src/lib/schemas.ts similarity index 100% rename from evals/apps/web/src/lib/schemas.ts rename to apps/web-evals/src/lib/schemas.ts diff --git a/evals/apps/web/src/lib/server/exercises.ts b/apps/web-evals/src/lib/server/exercises.ts similarity index 100% rename from evals/apps/web/src/lib/server/exercises.ts rename to apps/web-evals/src/lib/server/exercises.ts diff --git a/evals/apps/web/src/lib/server/processes.ts b/apps/web-evals/src/lib/server/processes.ts similarity index 100% rename from evals/apps/web/src/lib/server/processes.ts rename to apps/web-evals/src/lib/server/processes.ts diff --git a/evals/apps/web/src/lib/server/runs.ts b/apps/web-evals/src/lib/server/runs.ts similarity index 100% rename from evals/apps/web/src/lib/server/runs.ts rename to apps/web-evals/src/lib/server/runs.ts diff --git a/evals/apps/web/src/lib/server/sse-stream.ts b/apps/web-evals/src/lib/server/sse-stream.ts similarity index 100% rename from evals/apps/web/src/lib/server/sse-stream.ts rename to apps/web-evals/src/lib/server/sse-stream.ts diff --git a/evals/apps/web/src/lib/server/tasks.ts b/apps/web-evals/src/lib/server/tasks.ts similarity index 100% rename from evals/apps/web/src/lib/server/tasks.ts rename to apps/web-evals/src/lib/server/tasks.ts diff --git a/evals/apps/web/src/lib/utils.ts b/apps/web-evals/src/lib/utils.ts similarity index 100% rename from evals/apps/web/src/lib/utils.ts rename to apps/web-evals/src/lib/utils.ts diff --git a/evals/apps/web/tsconfig.json b/apps/web-evals/tsconfig.json similarity index 78% rename from evals/apps/web/tsconfig.json rename to apps/web-evals/tsconfig.json index cf5d781d38..31c94ac77c 100644 --- a/evals/apps/web/tsconfig.json +++ b/apps/web-evals/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@evals/typescript-config/nextjs.json", + "extends": "@roo-code/config-typescript/nextjs.json", "compilerOptions": { "plugins": [{ "name": "next" }], "paths": { "@/*": ["./src/*"] } diff --git a/apps/web-evals/tsconfig.tsbuildinfo b/apps/web-evals/tsconfig.tsbuildinfo new file mode 100644 index 0000000000..ab2ab240be --- /dev/null +++ b/apps/web-evals/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./next-env.d.ts","./next.config.ts","./src/app/api/runs/route.ts","./src/app/api/runs/[id]/stream/route.ts","./src/app/api/tasks/route.ts","./src/components/providers/index.ts","./src/components/ui/index.ts","./src/hooks/use-event-source.ts","./src/hooks/use-exercises.ts","./src/hooks/use-open-router-models.ts","./src/hooks/use-process-tree.ts","./src/hooks/use-run-status.ts","./src/lib/formatters.ts","./src/lib/schemas.ts","./src/lib/utils.ts","./src/lib/server/exercises.ts","./src/lib/server/processes.ts","./src/lib/server/runs.ts","./src/lib/server/sse-stream.ts","./src/lib/server/tasks.ts","./src/app/home.tsx","./src/app/layout.tsx","./src/app/page.tsx","./src/app/runs/[id]/connection-status.tsx","./src/app/runs/[id]/page.tsx","./src/app/runs/[id]/run.tsx","./src/app/runs/[id]/task-status.tsx","./src/app/runs/new/new-run.tsx","./src/app/runs/new/page.tsx","./src/app/runs/new/settings-diff.tsx","./src/components/layout/header.tsx","./src/components/layout/logo.tsx","./src/components/providers/react-query-provider.tsx","./src/components/providers/theme-provider.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/badge.tsx","./src/components/ui/button.tsx","./src/components/ui/command.tsx","./src/components/ui/dialog.tsx","./src/components/ui/drawer.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/form.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/multi-select.tsx","./src/components/ui/popover.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/slider.tsx","./src/components/ui/sonner.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/tooltip.tsx"],"version":"5.8.3"} \ No newline at end of file diff --git a/apps/web-roo-code/.gitkeep b/apps/web-roo-code/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/evals/.tool-versions b/evals/.tool-versions deleted file mode 100644 index 59f68ed949..0000000000 --- a/evals/.tool-versions +++ /dev/null @@ -1,4 +0,0 @@ -python 3.13.2 -golang 1.24.2 -rust 1.85.1 -nodejs 20.19.2 diff --git a/evals/apps/cli/eslint.config.mjs b/evals/apps/cli/eslint.config.mjs deleted file mode 100644 index 01fea8d98b..0000000000 --- a/evals/apps/cli/eslint.config.mjs +++ /dev/null @@ -1,4 +0,0 @@ -import { config } from "@evals/eslint-config/base" - -/** @type {import("eslint").Linter.Config} */ -export default [...config] diff --git a/evals/apps/cli/package.json b/evals/apps/cli/package.json deleted file mode 100644 index bcd88d5c8b..0000000000 --- a/evals/apps/cli/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "@evals/cli", - "private": true, - "type": "module", - "scripts": { - "lint": "eslint src/**/*.ts --max-warnings=0", - "check-types": "tsc --noEmit", - "format": "prettier --write src", - "dev": "dotenvx run -f ../../.env -- tsx src/index.ts" - }, - "dependencies": { - "@evals/db": "workspace:^", - "@evals/ipc": "workspace:^", - "@evals/lib": "workspace:^", - "@evals/types": "workspace:^", - "execa": "^9.5.2", - "gluegun": "^5.1.2", - "p-map": "^7.0.3", - "p-wait-for": "^5.0.2", - "ps-tree": "^1.2.0" - }, - "devDependencies": { - "@evals/eslint-config": "workspace:^", - "@evals/typescript-config": "workspace:^", - "@types/ps-tree": "^1.1.6" - } -} diff --git a/evals/apps/cli/src/exercises.ts b/evals/apps/cli/src/exercises.ts deleted file mode 100644 index 03c3ca28e9..0000000000 --- a/evals/apps/cli/src/exercises.ts +++ /dev/null @@ -1,31 +0,0 @@ -import * as path from "path" -import * as fs from "fs" - -import { filesystem } from "gluegun" - -import { type ExerciseLanguage, exerciseLanguages } from "@evals/types" - -import { exercisesPath } from "./paths.js" - -let exercisesByLanguage: Record | null = null - -export const getExercises = () => { - if (exercisesByLanguage !== null) { - return exercisesByLanguage - } - - const getLanguageExercises = (language: ExerciseLanguage) => - fs.existsSync(path.resolve(exercisesPath, language)) - ? filesystem - .subdirectories(path.resolve(exercisesPath, language)) - .map((exercise) => path.basename(exercise)) - .filter((exercise) => !exercise.startsWith(".")) - : [] - - exercisesByLanguage = exerciseLanguages.reduce( - (collect, language) => ({ ...collect, [language]: getLanguageExercises(language) }), - {} as Record, - ) - - return exercisesByLanguage -} diff --git a/evals/apps/cli/src/index.ts b/evals/apps/cli/src/index.ts deleted file mode 100644 index 88ab824b09..0000000000 --- a/evals/apps/cli/src/index.ts +++ /dev/null @@ -1,557 +0,0 @@ -import * as fs from "fs" -import * as path from "path" -import * as os from "os" - -import pMap from "p-map" -import pWaitFor from "p-wait-for" -import { execa, parseCommandString } from "execa" -import { build, filesystem, GluegunPrompt, GluegunToolbox } from "gluegun" -import psTree from "ps-tree" - -import { - type ExerciseLanguage, - exerciseLanguages, - RooCodeEventName, - IpcOrigin, - IpcMessageType, - TaskCommandName, - rooCodeDefaults, - EvalEventName, -} from "@evals/types" -import { - type Run, - findRun, - createRun, - finishRun, - type Task, - createTask, - getTasks, - updateTask, - createTaskMetrics, - updateTaskMetrics, - createToolError, -} from "@evals/db" -import { IpcServer, IpcClient } from "@evals/ipc" - -import { __dirname, extensionDevelopmentPath, exercisesPath } from "./paths.js" -import { getExercises } from "./exercises.js" - -type TaskResult = { success: boolean } -type TaskPromise = Promise - -const TASK_START_DELAY = 10 * 1_000 -const TASK_TIMEOUT = 5 * 60 * 1_000 -const UNIT_TEST_TIMEOUT = 2 * 60 * 1_000 - -const testCommands: Record = { - go: { commands: ["go test"] }, // timeout 15s bash -c "cd '$dir' && go test > /dev/null 2>&1" - java: { commands: ["./gradlew test"] }, // timeout --foreground 15s bash -c "cd '$dir' && ./gradlew test > /dev/null 2>&1" - javascript: { commands: ["pnpm install", "pnpm test"] }, // timeout 15s bash -c "cd '$dir' && pnpm install >/dev/null 2>&1 && pnpm test >/dev/null 2>&1" - python: { commands: ["uv run python3 -m pytest -o markers=task *_test.py"] }, // timeout 15s bash -c "cd '$dir' && uv run python3 -m pytest -o markers=task *_test.py" - rust: { commands: ["cargo test"] }, // timeout 15s bash -c "cd '$dir' && cargo test > /dev/null 2>&1" -} - -const run = async (toolbox: GluegunToolbox) => { - const { config, prompt } = toolbox - - let { language, exercise } = config - - if (![undefined, ...exerciseLanguages, "all"].includes(language)) { - throw new Error(`Language is invalid: ${language}`) - } - - if (!["undefined", "string"].includes(typeof exercise)) { - throw new Error(`Exercise is invalid: ${exercise}`) - } - - const id = config.runId ? Number(config.runId) : undefined - let run: Run - - if (id) { - run = await findRun(id) - } else { - run = await createRun({ - model: rooCodeDefaults.openRouterModelId!, - pid: process.pid, - socketPath: path.resolve(os.tmpdir(), `roo-code-evals-${crypto.randomUUID().slice(0, 8)}.sock`), - }) - - if (language === "all") { - for (const language of exerciseLanguages) { - const exercises = getExercises()[language as ExerciseLanguage] - - await pMap(exercises, (exercise) => createTask({ runId: run.id, language, exercise }), { - concurrency: run.concurrency, - }) - } - } else if (exercise === "all") { - const exercises = getExercises()[language as ExerciseLanguage] - await pMap(exercises, (exercise) => createTask({ runId: run.id, language, exercise }), { - concurrency: run.concurrency, - }) - } else { - language = language || (await askLanguage(prompt)) - exercise = exercise || (await askExercise(prompt, language)) - await createTask({ runId: run.id, language, exercise }) - } - } - - const tasks = await getTasks(run.id) - - if (!tasks[0]) { - throw new Error("No tasks found.") - } - - await execa({ cwd: exercisesPath })`git config user.name "Roo Code"` - await execa({ cwd: exercisesPath })`git config user.email "support@roocode.com"` - await execa({ cwd: exercisesPath })`git checkout -f` - await execa({ cwd: exercisesPath })`git clean -fd` - await execa({ cwd: exercisesPath })`git checkout -b runs/${run.id}-${crypto.randomUUID().slice(0, 8)} main` - - fs.writeFileSync( - path.resolve(exercisesPath, "settings.json"), - JSON.stringify({ ...rooCodeDefaults, ...run.settings }, null, 2), - ) - - const server = new IpcServer(run.socketPath, () => {}) - server.listen() - - const runningPromises: TaskPromise[] = [] - - const processTask = async (task: Task, delay = 0) => { - if (task.finishedAt === null) { - await new Promise((resolve) => setTimeout(resolve, delay)) - await runExercise({ run, task, server }) - } - - if (task.passed === null) { - const passed = await runUnitTest({ task }) - await updateTask(task.id, { passed }) - - server.broadcast({ - type: IpcMessageType.TaskEvent, - origin: IpcOrigin.Server, - data: { eventName: passed ? EvalEventName.Pass : EvalEventName.Fail, taskId: task.id }, - }) - - return { success: passed } - } else { - return { success: task.passed } - } - } - - const processTaskResult = async (task: Task, promise: TaskPromise) => { - const index = runningPromises.indexOf(promise) - - if (index > -1) { - runningPromises.splice(index, 1) - } - } - - let delay = TASK_START_DELAY - - for (const task of tasks) { - const promise = processTask(task, delay) - delay = delay + TASK_START_DELAY - runningPromises.push(promise) - promise.then(() => processTaskResult(task, promise)) - - if (runningPromises.length >= run.concurrency) { - delay = 0 - await Promise.race(runningPromises) - } - } - - await Promise.all(runningPromises) - - const result = await finishRun(run.id) - console.log(`${Date.now()} [cli#run]`, result) - - await execa({ cwd: exercisesPath })`git add .` - await execa({ cwd: exercisesPath })`git commit -m ${`Run #${run.id}`} --no-verify` -} - -const runExercise = async ({ run, task, server }: { run: Run; task: Task; server: IpcServer }): TaskPromise => { - const { language, exercise } = task - const prompt = fs.readFileSync(path.resolve(exercisesPath, `prompts/${language}.md`), "utf-8") - const dirname = path.dirname(run.socketPath) - const workspacePath = path.resolve(exercisesPath, language, exercise) - const taskSocketPath = path.resolve(dirname, `${dirname}/task-${task.id}.sock`) - - // Inject foot gun system prompt if present - if (process.env.FOOTGUN_SYSTEM_PROMPT) { - const rooDir = path.join(workspacePath, ".roo") - if (!fs.existsSync(rooDir)) { - fs.mkdirSync(rooDir, { recursive: true }) - } - fs.writeFileSync(path.join(rooDir, "system-prompt-code"), process.env.FOOTGUN_SYSTEM_PROMPT) - } - - // If debugging: - // Use --wait --log trace or --verbose. - // Don't await execa and store result as subprocess. - // subprocess.stdout.pipe(process.stdout) - - console.log(`${Date.now()} [cli#runExercise] Opening new VS Code window at ${workspacePath}`) - - const controller = new AbortController() - const cancelSignal = controller.signal - - // If debugging: - // Use --wait --log trace or --verbose. - let codeCommand = `code --disable-workspace-trust` - const isDocker = fs.existsSync("/.dockerenv") - - if (isDocker) { - if (run.concurrency > 1) { - throw new Error("Cannot run multiple tasks in parallel in Docker. Please set concurrency to 1.") - } - codeCommand = `xvfb-run --auto-servernum --server-num=1 ${codeCommand} --wait --log trace --disable-gpu --password-store="basic"` - } - - const subprocess = execa({ - env: { - ROO_CODE_IPC_SOCKET_PATH: taskSocketPath, - }, - shell: "/bin/bash", - cancelSignal, - })`${codeCommand} -n ${workspacePath}` - - // If debugging: - // subprocess.stdout.pipe(process.stdout) - - // Give VSCode some time to spawn before connecting to its unix socket. - await new Promise((resolve) => setTimeout(resolve, 3_000)) - console.log(`${Date.now()} [cli#runExercise] Connecting to ${taskSocketPath}`) - const client = new IpcClient(taskSocketPath) - - try { - await pWaitFor(() => client.isReady, { interval: 250, timeout: 5_000 }) - // eslint-disable-next-line @typescript-eslint/no-unused-vars - } catch (error) { - console.log(`${Date.now()} [cli#runExercise | ${language} / ${exercise}] unable to connect`) - client.disconnect() - return { success: false } - } - - let taskStartedAt = Date.now() - let taskFinishedAt: number | undefined - let taskMetricsId: number | undefined - let rooTaskId: string | undefined - let isClientDisconnected = false - - const ignoreEvents: Record<"broadcast" | "log", (RooCodeEventName | EvalEventName)[]> = { - broadcast: [RooCodeEventName.Message], - log: [RooCodeEventName.Message, RooCodeEventName.TaskTokenUsageUpdated, RooCodeEventName.TaskAskResponded], - } - - client.on(IpcMessageType.TaskEvent, async (taskEvent) => { - const { eventName, payload } = taskEvent - - if (!ignoreEvents.broadcast.includes(eventName)) { - server.broadcast({ - type: IpcMessageType.TaskEvent, - origin: IpcOrigin.Server, - relayClientId: client.clientId!, - data: { ...taskEvent, taskId: task.id }, - }) - } - - if (!ignoreEvents.log.includes(eventName)) { - console.log( - `${Date.now()} [cli#runExercise | ${language} / ${exercise}] taskEvent -> ${eventName}`, - payload, - ) - } - - if (eventName === RooCodeEventName.TaskStarted) { - taskStartedAt = Date.now() - - const taskMetrics = await createTaskMetrics({ - cost: 0, - tokensIn: 0, - tokensOut: 0, - tokensContext: 0, - duration: 0, - cacheWrites: 0, - cacheReads: 0, - }) - - await updateTask(task.id, { taskMetricsId: taskMetrics.id, startedAt: new Date() }) - - taskStartedAt = Date.now() - taskMetricsId = taskMetrics.id - rooTaskId = payload[0] - } - - if (eventName === RooCodeEventName.TaskToolFailed) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const [_taskId, toolName, error] = payload - await createToolError({ taskId: task.id, toolName, error }) - } - - if ( - (eventName === RooCodeEventName.TaskTokenUsageUpdated || eventName === RooCodeEventName.TaskCompleted) && - taskMetricsId - ) { - const duration = Date.now() - taskStartedAt - - const { totalCost, totalTokensIn, totalTokensOut, contextTokens, totalCacheWrites, totalCacheReads } = - payload[1] - - await updateTaskMetrics(taskMetricsId, { - cost: totalCost, - tokensIn: totalTokensIn, - tokensOut: totalTokensOut, - tokensContext: contextTokens, - duration, - cacheWrites: totalCacheWrites ?? 0, - cacheReads: totalCacheReads ?? 0, - }) - } - - if (eventName === RooCodeEventName.TaskCompleted && taskMetricsId) { - const toolUsage = payload[2] - await updateTaskMetrics(taskMetricsId, { toolUsage }) - } - - if (eventName === RooCodeEventName.TaskAborted || eventName === RooCodeEventName.TaskCompleted) { - taskFinishedAt = Date.now() - await updateTask(task.id, { finishedAt: new Date() }) - } - }) - - client.on(IpcMessageType.Disconnect, async () => { - console.log(`${Date.now()} [cli#runExercise | ${language} / ${exercise}] disconnect`) - isClientDisconnected = true - }) - - console.log(`${Date.now()} [cli#runExercise | ${language} / ${exercise}] starting task`) - - if (client.isReady) { - client.sendMessage({ - type: IpcMessageType.TaskCommand, - origin: IpcOrigin.Client, - clientId: client.clientId!, - data: { - commandName: TaskCommandName.StartNewTask, - data: { - configuration: { - ...rooCodeDefaults, - openRouterApiKey: process.env.OPENROUTER_API_KEY!, - ...run.settings, - }, - text: prompt, - newTab: true, - }, - }, - }) - } else { - console.log(`[cli#runExercise | ${language} / ${exercise}] unable to connect`) - client.disconnect() - taskFinishedAt = Date.now() - isClientDisconnected = true - } - - try { - await pWaitFor(() => !!taskFinishedAt || isClientDisconnected, { interval: 1_000, timeout: TASK_TIMEOUT }) - // eslint-disable-next-line @typescript-eslint/no-unused-vars - } catch (error) { - console.log(`${Date.now()} [cli#runExercise | ${language} / ${exercise}] time limit reached`) - - // Cancel the task. - if (rooTaskId && !isClientDisconnected) { - client.sendMessage({ - type: IpcMessageType.TaskCommand, - origin: IpcOrigin.Client, - clientId: client.clientId!, - data: { commandName: TaskCommandName.CancelTask, data: rooTaskId }, - }) - - // Allow some time for the task to cancel. - await new Promise((resolve) => setTimeout(resolve, 5_000)) - } - - await updateTask(task.id, { finishedAt: new Date() }) - } - - if (!isClientDisconnected) { - if (rooTaskId) { - client.sendMessage({ - type: IpcMessageType.TaskCommand, - origin: IpcOrigin.Client, - clientId: client.clientId!, - data: { commandName: TaskCommandName.CloseTask, data: rooTaskId }, - }) - - // Allow some time for the window to close. - await new Promise((resolve) => setTimeout(resolve, 2_000)) - } - - client.disconnect() - } - - controller.abort() - await subprocess - - return { success: !!taskFinishedAt } -} - -const runUnitTest = async ({ task }: { task: Task }) => { - const cmd = testCommands[task.language] - const exercisePath = path.resolve(exercisesPath, task.language, task.exercise) - const cwd = cmd.cwd ? path.resolve(exercisePath, cmd.cwd) : exercisePath - const commands = cmd.commands.map((cs) => parseCommandString(cs)) - - let passed = true - - for (const command of commands) { - try { - console.log( - `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] running "${command.join(" ")}"`, - ) - - const subprocess = execa({ cwd, shell: true, reject: false })`${command}` - - const timeout = setTimeout(async () => { - const descendants = await new Promise((resolve, reject) => { - psTree(subprocess.pid!, (err, children) => { - if (err) { - reject(err) - } - - resolve(children.map((p) => parseInt(p.PID))) - }) - }) - - console.log( - `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] "${command.join(" ")}": unit tests timed out, killing ${subprocess.pid} + ${JSON.stringify(descendants)}`, - ) - - if (descendants.length > 0) { - for (const descendant of descendants) { - try { - console.log( - `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] killing ${descendant}`, - ) - - await execa`kill -9 ${descendant}` - } catch (error) { - console.error( - `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] Error killing descendant processes:`, - error, - ) - } - } - } - - console.log( - `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] killing ${subprocess.pid}`, - ) - - try { - await execa`kill -9 ${subprocess.pid!}` - } catch (error) { - console.error( - `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] Error killing process:`, - error, - ) - } - }, UNIT_TEST_TIMEOUT) - - const result = await subprocess - - console.log( - `${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}] "${command.join(" ")}" result -> ${JSON.stringify(result)}`, - ) - - clearTimeout(timeout) - - if (result.failed) { - passed = false - break - } - } catch (error) { - console.log(`${Date.now()} [cli#runUnitTest | ${task.language} / ${task.exercise}]`, error) - passed = false - break - } - } - - return passed -} - -const askLanguage = async (prompt: GluegunPrompt) => { - const { language } = await prompt.ask<{ language: ExerciseLanguage }>({ - type: "select", - name: "language", - message: "Which language?", - choices: [...exerciseLanguages], - }) - - return language -} - -const askExercise = async (prompt: GluegunPrompt, language: ExerciseLanguage) => { - const exercises = filesystem.subdirectories(path.join(exercisesPath, language)) - - if (exercises.length === 0) { - throw new Error(`No exercises found for ${language}`) - } - - const { exercise } = await prompt.ask<{ exercise: string }>({ - type: "select", - name: "exercise", - message: "Which exercise?", - choices: exercises.map((exercise) => path.basename(exercise)).filter((exercise) => !exercise.startsWith(".")), - }) - - return exercise -} - -const main = async () => { - const cli = build() - .brand("cli") - .src(__dirname) - .help() - .version() - .command({ - name: "run", - description: "Run an eval", - run: ({ config, parameters }) => { - config.language = parameters.first - config.exercise = parameters.second - - if (parameters.options["runId"]) { - config.runId = parameters.options["runId"] - } - }, - }) - .defaultCommand() - .create() - - const toolbox = await cli.run(process.argv) - const { command } = toolbox - - switch (command?.name) { - case "run": - await run(toolbox) - break - } - - process.exit(0) -} - -if (!fs.existsSync(extensionDevelopmentPath)) { - console.error(`"extensionDevelopmentPath" does not exist.`) - process.exit(1) -} - -if (!fs.existsSync(exercisesPath)) { - console.error( - `Exercises do not exist at ${exercisesPath}. Please run "git clone https://github.com/RooCodeInc/Roo-Code-Evals.git evals".`, - ) - process.exit(1) -} - -main() diff --git a/evals/apps/cli/src/paths.ts b/evals/apps/cli/src/paths.ts deleted file mode 100644 index 10bf4e3d7a..0000000000 --- a/evals/apps/cli/src/paths.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as path from "path" -import { fileURLToPath } from "url" - -export const __dirname = path.dirname(fileURLToPath(import.meta.url)) - -export const extensionDevelopmentPath = path.resolve(__dirname, "..", "..", "..", "..") -export const exercisesPath = path.resolve(extensionDevelopmentPath, "..", "evals") diff --git a/evals/apps/cli/tsconfig.json b/evals/apps/cli/tsconfig.json deleted file mode 100644 index 48fa99573e..0000000000 --- a/evals/apps/cli/tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "@evals/typescript-config/base.json", - "include": ["src"], - "exclude": ["node_modules"] -} diff --git a/evals/packages/db/.gitignore b/evals/packages/db/.gitignore deleted file mode 100644 index c370cb644f..0000000000 --- a/evals/packages/db/.gitignore +++ /dev/null @@ -1 +0,0 @@ -test.db diff --git a/evals/packages/db/README.md b/evals/packages/db/README.md deleted file mode 100644 index cd5edc3f23..0000000000 --- a/evals/packages/db/README.md +++ /dev/null @@ -1,15 +0,0 @@ -## Running Migrations - -Update `src/schema.ts` as needed, and then run: - -```sh -pnpm db:generate -``` - -Inspect the sql in the migration file added to `drizzle/`. - -If it looks okay, then run: - -```sh -pnpm db:migrate -``` diff --git a/evals/packages/db/drizzle.config.ts b/evals/packages/db/drizzle.config.ts deleted file mode 100644 index b91f65a5ae..0000000000 --- a/evals/packages/db/drizzle.config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { defineConfig } from "drizzle-kit" - -if ((!process.env.TURSO_CONNECTION_URL || !process.env.TURSO_AUTH_TOKEN) && !process.env.BENCHMARKS_DB_PATH) { - throw new Error("TURSO_CONNECTION_URL and TURSO_AUTH_TOKEN or BENCHMARKS_DB_PATH must be set") -} - -const dialect = process.env.BENCHMARKS_DB_PATH ? "sqlite" : "turso" - -const dbCredentials = process.env.BENCHMARKS_DB_PATH - ? { url: process.env.BENCHMARKS_DB_PATH } - : { url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN! } - -export default defineConfig({ - out: "./drizzle", - schema: "./src/schema.ts", - dialect, - dbCredentials, -}) diff --git a/evals/packages/db/drizzle/0000_elite_raza.sql b/evals/packages/db/drizzle/0000_elite_raza.sql deleted file mode 100644 index 4af2be3564..0000000000 --- a/evals/packages/db/drizzle/0000_elite_raza.sql +++ /dev/null @@ -1,40 +0,0 @@ -CREATE TABLE `runs` ( - `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - `taskMetricsId` integer, - `model` text NOT NULL, - `description` text, - `pid` integer, - `socketPath` text NOT NULL, - `passed` integer DEFAULT 0 NOT NULL, - `failed` integer DEFAULT 0 NOT NULL, - `createdAt` integer NOT NULL, - FOREIGN KEY (`taskMetricsId`) REFERENCES `taskMetrics`(`id`) ON UPDATE no action ON DELETE no action -); ---> statement-breakpoint -CREATE TABLE `taskMetrics` ( - `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - `tokensIn` integer NOT NULL, - `tokensOut` integer NOT NULL, - `tokensContext` integer NOT NULL, - `cacheWrites` integer NOT NULL, - `cacheReads` integer NOT NULL, - `cost` real NOT NULL, - `duration` integer NOT NULL, - `createdAt` integer NOT NULL -); ---> statement-breakpoint -CREATE TABLE `tasks` ( - `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - `runId` integer NOT NULL, - `taskMetricsId` integer, - `language` text NOT NULL, - `exercise` text NOT NULL, - `passed` integer, - `startedAt` integer, - `finishedAt` integer, - `createdAt` integer NOT NULL, - FOREIGN KEY (`runId`) REFERENCES `runs`(`id`) ON UPDATE no action ON DELETE no action, - FOREIGN KEY (`taskMetricsId`) REFERENCES `taskMetrics`(`id`) ON UPDATE no action ON DELETE no action -); ---> statement-breakpoint -CREATE UNIQUE INDEX `tasks_language_exercise_idx` ON `tasks` (`runId`,`language`,`exercise`); \ No newline at end of file diff --git a/evals/packages/db/drizzle/0001_lush_reavers.sql b/evals/packages/db/drizzle/0001_lush_reavers.sql deleted file mode 100644 index 25eebac810..0000000000 --- a/evals/packages/db/drizzle/0001_lush_reavers.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `runs` ADD `settings` blob; \ No newline at end of file diff --git a/evals/packages/db/drizzle/0002_white_flatman.sql b/evals/packages/db/drizzle/0002_white_flatman.sql deleted file mode 100644 index 1914906ca2..0000000000 --- a/evals/packages/db/drizzle/0002_white_flatman.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `runs` ADD `concurrency` integer DEFAULT 2 NOT NULL; \ No newline at end of file diff --git a/evals/packages/db/drizzle/0003_sweet_chimera.sql b/evals/packages/db/drizzle/0003_sweet_chimera.sql deleted file mode 100644 index 7248ec01df..0000000000 --- a/evals/packages/db/drizzle/0003_sweet_chimera.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `taskMetrics` ADD `toolUsage` text; \ No newline at end of file diff --git a/evals/packages/db/drizzle/0004_absent_slapstick.sql b/evals/packages/db/drizzle/0004_absent_slapstick.sql deleted file mode 100644 index 49700388d7..0000000000 --- a/evals/packages/db/drizzle/0004_absent_slapstick.sql +++ /dev/null @@ -1,10 +0,0 @@ -CREATE TABLE `toolErrors` ( - `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - `runId` integer, - `taskId` integer, - `toolName` text NOT NULL, - `error` text NOT NULL, - `createdAt` integer NOT NULL, - FOREIGN KEY (`runId`) REFERENCES `runs`(`id`) ON UPDATE no action ON DELETE no action, - FOREIGN KEY (`taskId`) REFERENCES `tasks`(`id`) ON UPDATE no action ON DELETE no action -); diff --git a/evals/packages/db/drizzle/meta/0000_snapshot.json b/evals/packages/db/drizzle/meta/0000_snapshot.json deleted file mode 100644 index 1b8c44283a..0000000000 --- a/evals/packages/db/drizzle/meta/0000_snapshot.json +++ /dev/null @@ -1,274 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "c0fa8491-b5c0-493d-aa32-ddf280259c30", - "prevId": "00000000-0000-0000-0000-000000000000", - "tables": { - "runs": { - "name": "runs", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "pid": { - "name": "pid", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "socketPath": { - "name": "socketPath", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "failed": { - "name": "failed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "runs_taskMetricsId_taskMetrics_id_fk": { - "name": "runs_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "runs", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "taskMetrics": { - "name": "taskMetrics", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "tokensIn": { - "name": "tokensIn", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensOut": { - "name": "tokensOut", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensContext": { - "name": "tokensContext", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheWrites": { - "name": "cacheWrites", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheReads": { - "name": "cacheReads", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cost": { - "name": "cost", - "type": "real", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "tasks": { - "name": "tasks", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "runId": { - "name": "runId", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "language": { - "name": "language", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exercise": { - "name": "exercise", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "startedAt": { - "name": "startedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "finishedAt": { - "name": "finishedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "tasks_language_exercise_idx": { - "name": "tasks_language_exercise_idx", - "columns": ["runId", "language", "exercise"], - "isUnique": true - } - }, - "foreignKeys": { - "tasks_runId_runs_id_fk": { - "name": "tasks_runId_runs_id_fk", - "tableFrom": "tasks", - "tableTo": "runs", - "columnsFrom": ["runId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "tasks_taskMetricsId_taskMetrics_id_fk": { - "name": "tasks_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "tasks", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} diff --git a/evals/packages/db/drizzle/meta/0001_snapshot.json b/evals/packages/db/drizzle/meta/0001_snapshot.json deleted file mode 100644 index 0c087603da..0000000000 --- a/evals/packages/db/drizzle/meta/0001_snapshot.json +++ /dev/null @@ -1,281 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "8906647f-81d6-498a-897c-b1638c04c69a", - "prevId": "c0fa8491-b5c0-493d-aa32-ddf280259c30", - "tables": { - "runs": { - "name": "runs", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "settings": { - "name": "settings", - "type": "blob", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "pid": { - "name": "pid", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "socketPath": { - "name": "socketPath", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "failed": { - "name": "failed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "runs_taskMetricsId_taskMetrics_id_fk": { - "name": "runs_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "runs", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "taskMetrics": { - "name": "taskMetrics", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "tokensIn": { - "name": "tokensIn", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensOut": { - "name": "tokensOut", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensContext": { - "name": "tokensContext", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheWrites": { - "name": "cacheWrites", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheReads": { - "name": "cacheReads", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cost": { - "name": "cost", - "type": "real", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "tasks": { - "name": "tasks", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "runId": { - "name": "runId", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "language": { - "name": "language", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exercise": { - "name": "exercise", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "startedAt": { - "name": "startedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "finishedAt": { - "name": "finishedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "tasks_language_exercise_idx": { - "name": "tasks_language_exercise_idx", - "columns": ["runId", "language", "exercise"], - "isUnique": true - } - }, - "foreignKeys": { - "tasks_runId_runs_id_fk": { - "name": "tasks_runId_runs_id_fk", - "tableFrom": "tasks", - "tableTo": "runs", - "columnsFrom": ["runId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "tasks_taskMetricsId_taskMetrics_id_fk": { - "name": "tasks_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "tasks", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} diff --git a/evals/packages/db/drizzle/meta/0002_snapshot.json b/evals/packages/db/drizzle/meta/0002_snapshot.json deleted file mode 100644 index 3bf20c0827..0000000000 --- a/evals/packages/db/drizzle/meta/0002_snapshot.json +++ /dev/null @@ -1,289 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "f49d9b0b-fda9-467a-9adb-c941d6cbf7ce", - "prevId": "8906647f-81d6-498a-897c-b1638c04c69a", - "tables": { - "runs": { - "name": "runs", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "settings": { - "name": "settings", - "type": "blob", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "pid": { - "name": "pid", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "socketPath": { - "name": "socketPath", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "concurrency": { - "name": "concurrency", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 2 - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "failed": { - "name": "failed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "runs_taskMetricsId_taskMetrics_id_fk": { - "name": "runs_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "runs", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "taskMetrics": { - "name": "taskMetrics", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "tokensIn": { - "name": "tokensIn", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensOut": { - "name": "tokensOut", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensContext": { - "name": "tokensContext", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheWrites": { - "name": "cacheWrites", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheReads": { - "name": "cacheReads", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cost": { - "name": "cost", - "type": "real", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "tasks": { - "name": "tasks", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "runId": { - "name": "runId", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "language": { - "name": "language", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exercise": { - "name": "exercise", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "startedAt": { - "name": "startedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "finishedAt": { - "name": "finishedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "tasks_language_exercise_idx": { - "name": "tasks_language_exercise_idx", - "columns": ["runId", "language", "exercise"], - "isUnique": true - } - }, - "foreignKeys": { - "tasks_runId_runs_id_fk": { - "name": "tasks_runId_runs_id_fk", - "tableFrom": "tasks", - "tableTo": "runs", - "columnsFrom": ["runId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "tasks_taskMetricsId_taskMetrics_id_fk": { - "name": "tasks_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "tasks", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} diff --git a/evals/packages/db/drizzle/meta/0003_snapshot.json b/evals/packages/db/drizzle/meta/0003_snapshot.json deleted file mode 100644 index 0b7fa5b94d..0000000000 --- a/evals/packages/db/drizzle/meta/0003_snapshot.json +++ /dev/null @@ -1,296 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "61d48d20-f662-445d-9962-cf9cb165cbe7", - "prevId": "f49d9b0b-fda9-467a-9adb-c941d6cbf7ce", - "tables": { - "runs": { - "name": "runs", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "settings": { - "name": "settings", - "type": "blob", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "pid": { - "name": "pid", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "socketPath": { - "name": "socketPath", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "concurrency": { - "name": "concurrency", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 2 - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "failed": { - "name": "failed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "runs_taskMetricsId_taskMetrics_id_fk": { - "name": "runs_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "runs", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "taskMetrics": { - "name": "taskMetrics", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "tokensIn": { - "name": "tokensIn", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensOut": { - "name": "tokensOut", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensContext": { - "name": "tokensContext", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheWrites": { - "name": "cacheWrites", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheReads": { - "name": "cacheReads", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cost": { - "name": "cost", - "type": "real", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "toolUsage": { - "name": "toolUsage", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "tasks": { - "name": "tasks", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "runId": { - "name": "runId", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "language": { - "name": "language", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exercise": { - "name": "exercise", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "startedAt": { - "name": "startedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "finishedAt": { - "name": "finishedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "tasks_language_exercise_idx": { - "name": "tasks_language_exercise_idx", - "columns": ["runId", "language", "exercise"], - "isUnique": true - } - }, - "foreignKeys": { - "tasks_runId_runs_id_fk": { - "name": "tasks_runId_runs_id_fk", - "tableFrom": "tasks", - "tableTo": "runs", - "columnsFrom": ["runId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "tasks_taskMetricsId_taskMetrics_id_fk": { - "name": "tasks_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "tasks", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} diff --git a/evals/packages/db/drizzle/meta/0004_snapshot.json b/evals/packages/db/drizzle/meta/0004_snapshot.json deleted file mode 100644 index 6987eba2e4..0000000000 --- a/evals/packages/db/drizzle/meta/0004_snapshot.json +++ /dev/null @@ -1,367 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "ae766c54-aff4-4ce6-b492-24813790c279", - "prevId": "61d48d20-f662-445d-9962-cf9cb165cbe7", - "tables": { - "runs": { - "name": "runs", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "settings": { - "name": "settings", - "type": "blob", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "pid": { - "name": "pid", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "socketPath": { - "name": "socketPath", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "concurrency": { - "name": "concurrency", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 2 - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "failed": { - "name": "failed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "runs_taskMetricsId_taskMetrics_id_fk": { - "name": "runs_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "runs", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "taskMetrics": { - "name": "taskMetrics", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "tokensIn": { - "name": "tokensIn", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensOut": { - "name": "tokensOut", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensContext": { - "name": "tokensContext", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheWrites": { - "name": "cacheWrites", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheReads": { - "name": "cacheReads", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cost": { - "name": "cost", - "type": "real", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "toolUsage": { - "name": "toolUsage", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "tasks": { - "name": "tasks", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "runId": { - "name": "runId", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "language": { - "name": "language", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exercise": { - "name": "exercise", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "startedAt": { - "name": "startedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "finishedAt": { - "name": "finishedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "tasks_language_exercise_idx": { - "name": "tasks_language_exercise_idx", - "columns": ["runId", "language", "exercise"], - "isUnique": true - } - }, - "foreignKeys": { - "tasks_runId_runs_id_fk": { - "name": "tasks_runId_runs_id_fk", - "tableFrom": "tasks", - "tableTo": "runs", - "columnsFrom": ["runId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "tasks_taskMetricsId_taskMetrics_id_fk": { - "name": "tasks_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "tasks", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "toolErrors": { - "name": "toolErrors", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "runId": { - "name": "runId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "taskId": { - "name": "taskId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "toolName": { - "name": "toolName", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "error": { - "name": "error", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "toolErrors_runId_runs_id_fk": { - "name": "toolErrors_runId_runs_id_fk", - "tableFrom": "toolErrors", - "tableTo": "runs", - "columnsFrom": ["runId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "toolErrors_taskId_tasks_id_fk": { - "name": "toolErrors_taskId_tasks_id_fk", - "tableFrom": "toolErrors", - "tableTo": "tasks", - "columnsFrom": ["taskId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} diff --git a/evals/packages/db/drizzle/meta/_journal.json b/evals/packages/db/drizzle/meta/_journal.json deleted file mode 100644 index fba0e94f14..0000000000 --- a/evals/packages/db/drizzle/meta/_journal.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "version": "7", - "dialect": "sqlite", - "entries": [ - { - "idx": 0, - "version": "6", - "when": 1742599919625, - "tag": "0000_elite_raza", - "breakpoints": true - }, - { - "idx": 1, - "version": "6", - "when": 1743089501047, - "tag": "0001_lush_reavers", - "breakpoints": true - }, - { - "idx": 2, - "version": "6", - "when": 1743698195142, - "tag": "0002_white_flatman", - "breakpoints": true - }, - { - "idx": 3, - "version": "6", - "when": 1744950664129, - "tag": "0003_sweet_chimera", - "breakpoints": true - }, - { - "idx": 4, - "version": "6", - "when": 1745256393286, - "tag": "0004_absent_slapstick", - "breakpoints": true - } - ] -} diff --git a/evals/packages/db/eslint.config.mjs b/evals/packages/db/eslint.config.mjs deleted file mode 100644 index 01fea8d98b..0000000000 --- a/evals/packages/db/eslint.config.mjs +++ /dev/null @@ -1,4 +0,0 @@ -import { config } from "@evals/eslint-config/base" - -/** @type {import("eslint").Linter.Config} */ -export default [...config] diff --git a/evals/packages/db/package.json b/evals/packages/db/package.json deleted file mode 100644 index bbf3c1cfc7..0000000000 --- a/evals/packages/db/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@evals/db", - "private": true, - "type": "module", - "exports": "./src/index.ts", - "scripts": { - "lint": "eslint src/**/*.ts --max-warnings=0", - "check-types": "tsc --noEmit", - "test": "vitest --globals --run", - "format": "prettier --write src", - "drizzle-kit": "dotenvx run -f ../../.env -- tsx node_modules/drizzle-kit/bin.cjs", - "db:generate": "pnpm drizzle-kit generate", - "db:migrate": "pnpm drizzle-kit migrate", - "db:push": "pnpm drizzle-kit push", - "db:pull": "pnpm drizzle-kit pull", - "db:check": "pnpm drizzle-kit check", - "db:up": "pnpm drizzle-kit up", - "db:studio": "pnpm drizzle-kit studio", - "db:enable-wal": "dotenvx run -f ../../.env -- tsx scripts/enable-wal.mts", - "db:copy-run": "dotenvx run -f ../../.env -- tsx scripts/copy-run.mts" - }, - "dependencies": { - "@evals/types": "workspace:^", - "@libsql/client": "^0.15.0", - "drizzle-orm": "^0.43.0", - "drizzle-zod": "^0.7.0", - "p-map": "^7.0.3", - "zod": "^3.24.2" - }, - "devDependencies": { - "@evals/eslint-config": "workspace:^", - "@evals/typescript-config": "workspace:^", - "drizzle-kit": "^0.31.0", - "execa": "^9.5.2", - "vitest": "^3.0.9" - } -} diff --git a/evals/packages/db/scripts/copy-run.mts b/evals/packages/db/scripts/copy-run.mts deleted file mode 100644 index fa82907181..0000000000 --- a/evals/packages/db/scripts/copy-run.mts +++ /dev/null @@ -1,112 +0,0 @@ -import { drizzle } from "drizzle-orm/libsql" -import { eq } from "drizzle-orm" -import pMap from "p-map" - -import { db as sourceDb } from "../src/db.js" -import { schema } from "../src/schema.js" - -const copyRun = async (runId: number) => { - const destDb = drizzle({ - schema, - connection: { url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN! }, - }) - - const run = await sourceDb.query.runs.findFirst({ - where: eq(schema.runs.id, runId), - with: { taskMetrics: true }, - }) - - if (!run) { - throw new Error(`Run with ID ${runId} not found in source database`) - } - - if (!run.taskMetrics) { - throw new Error("Run is not completed") - } - - console.log(`Copying run ${run.id}`) - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { id: _, ...runTaskMetricsValues } = run.taskMetrics - const [newRunTaskMetrics] = await destDb.insert(schema.taskMetrics).values(runTaskMetricsValues).returning() - - if (!newRunTaskMetrics) { - throw new Error("Failed to insert run taskMetrics") - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { id: __, ...runValues } = run - - const [newRun] = await destDb - .insert(schema.runs) - .values({ ...runValues, taskMetricsId: newRunTaskMetrics.id }) - .returning() - - if (!newRun) { - throw new Error("Failed to insert run") - } - - const tasks = await sourceDb.query.tasks.findMany({ - where: eq(schema.tasks.runId, run.id), - with: { taskMetrics: true }, - }) - - console.log(`Copying ${tasks.length} tasks`) - - await pMap( - tasks, - async (task) => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { id: _, ...newTaskMetricsValues } = task.taskMetrics || { - duration: 0, - tokensIn: 0, - tokensOut: 0, - tokensContext: 0, - cacheWrites: 0, - cacheReads: 0, - cost: 0, - createdAt: new Date(), - } - - const [newTaskMetrics] = await destDb.insert(schema.taskMetrics).values(newTaskMetricsValues).returning() - - if (!newTaskMetrics) { - throw new Error(`Failed to insert taskMetrics for task ${task.id}`) - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { id: __, ...newTaskValues } = task - - const [newTask] = await destDb - .insert(schema.tasks) - .values({ ...newTaskValues, runId: newRun.id, taskMetricsId: newTaskMetrics.id }) - .returning() - - if (!newTask) { - throw new Error(`Failed to insert task ${task.id}`) - } - }, - { concurrency: 25 }, - ) - - console.log(`\nSuccessfully copied run ${runId} with ${tasks.length} tasks`) -} - -const main = async () => { - const runId = parseInt(process.argv[2], 10) - - if (isNaN(runId)) { - console.error("Run ID must be a number") - process.exit(1) - } - - try { - await copyRun(runId) - process.exit(0) - } catch (error) { - console.error(error) - process.exit(1) - } -} - -main() diff --git a/evals/packages/db/scripts/enable-wal.mts b/evals/packages/db/scripts/enable-wal.mts deleted file mode 100644 index a443c0d99e..0000000000 --- a/evals/packages/db/scripts/enable-wal.mts +++ /dev/null @@ -1,23 +0,0 @@ -import { db } from "../src/db.js" - -const main = async () => { - // Enable WAL mode for better performance and concurrency. - // https://til.simonwillison.net/sqlite/enabling-wal-mode - try { - const { rows } = await db.$client.execute("PRAGMA journal_mode = WAL;") - const row = rows[0] - - if (row) { - console.log(`SQLite journal mode set to: ${row[0]}`) - process.exit(0) - } else { - console.error("Failed to enable WAL mode: no rows returned") - process.exit(1) - } - } catch (error) { - console.error(error) - process.exit(1) - } -} - -main() diff --git a/evals/packages/db/src/db.ts b/evals/packages/db/src/db.ts deleted file mode 100644 index 8ddf06355c..0000000000 --- a/evals/packages/db/src/db.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { drizzle } from "drizzle-orm/libsql" - -import { schema } from "./schema.js" - -if ((!process.env.TURSO_CONNECTION_URL || !process.env.TURSO_AUTH_TOKEN) && !process.env.BENCHMARKS_DB_PATH) { - throw new Error("TURSO_CONNECTION_URL and TURSO_AUTH_TOKEN or BENCHMARKS_DB_PATH must be set") -} - -const connection = process.env.BENCHMARKS_DB_PATH - ? { url: process.env.BENCHMARKS_DB_PATH, concurrency: 50 } - : { url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN! } - -export const db = drizzle({ schema, connection }) diff --git a/evals/packages/db/src/index.ts b/evals/packages/db/src/index.ts deleted file mode 100644 index 02f08bd154..0000000000 --- a/evals/packages/db/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from "./schema.js" - -export * from "./queries/runs.js" -export * from "./queries/tasks.js" -export * from "./queries/taskMetrics.js" -export * from "./queries/toolErrors.js" diff --git a/evals/packages/db/src/queries/__tests__/runs.test.ts b/evals/packages/db/src/queries/__tests__/runs.test.ts deleted file mode 100644 index 9032871176..0000000000 --- a/evals/packages/db/src/queries/__tests__/runs.test.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { createRun, finishRun } from "../runs.js" -import { createTask } from "../tasks.js" -import { createTaskMetrics } from "../taskMetrics.js" - -describe("finishRun", () => { - it("aggregates task metrics, including tool usage", async () => { - const run = await createRun({ model: "gpt-4.1-mini", socketPath: "/tmp/roo.sock" }) - - await createTask({ - runId: run.id, - taskMetricsId: ( - await createTaskMetrics({ - duration: 45_000, - tokensIn: 100_000, - tokensOut: 2_000, - tokensContext: 102_000, - cacheWrites: 0, - cacheReads: 0, - cost: 0.05, - toolUsage: { - read_file: { - attempts: 3, - failures: 0, - }, - apply_diff: { - attempts: 3, - failures: 1, - }, - }, - }) - ).id, - language: "go", - exercise: "go/say", - passed: true, - startedAt: new Date(), - finishedAt: new Date(), - }) - - await createTask({ - runId: run.id, - taskMetricsId: ( - await createTaskMetrics({ - duration: 30_000, - tokensIn: 75_000, - tokensOut: 1_000, - tokensContext: 76_000, - cacheWrites: 0, - cacheReads: 0, - cost: 0.04, - toolUsage: { - read_file: { - attempts: 3, - failures: 0, - }, - apply_diff: { - attempts: 2, - failures: 0, - }, - }, - }) - ).id, - language: "go", - exercise: "go/octal", - passed: true, - startedAt: new Date(), - finishedAt: new Date(), - }) - - const { taskMetrics } = await finishRun(run.id) - - expect(taskMetrics).toEqual({ - id: expect.any(Number), - tokensIn: 175000, - tokensOut: 3000, - tokensContext: 178000, - cacheWrites: 0, - cacheReads: 0, - cost: 0.09, - duration: 75000, - toolUsage: { - read_file: { attempts: 6, failures: 0 }, - apply_diff: { attempts: 5, failures: 1 }, - }, - createdAt: expect.any(Date), - }) - }) -}) diff --git a/evals/packages/db/src/queries/errors.ts b/evals/packages/db/src/queries/errors.ts deleted file mode 100644 index 38ff8e2790..0000000000 --- a/evals/packages/db/src/queries/errors.ts +++ /dev/null @@ -1,3 +0,0 @@ -export class RecordNotFoundError extends Error {} - -export class RecordNotCreatedError extends Error {} diff --git a/evals/packages/db/src/queries/runs.ts b/evals/packages/db/src/queries/runs.ts deleted file mode 100644 index 85f080f871..0000000000 --- a/evals/packages/db/src/queries/runs.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { desc, eq, inArray, sql, sum } from "drizzle-orm" - -import { ToolUsage } from "@evals/types" - -import { RecordNotFoundError, RecordNotCreatedError } from "./errors.js" -import type { InsertRun, UpdateRun } from "../schema.js" -import { insertRunSchema, schema } from "../schema.js" -import { db } from "../db.js" -import { createTaskMetrics } from "./taskMetrics.js" -import { getTasks } from "./tasks.js" - -export const findRun = async (id: number) => { - const run = await db.query.runs.findFirst({ where: eq(schema.runs.id, id) }) - - if (!run) { - throw new RecordNotFoundError() - } - - return run -} - -export const createRun = async (args: InsertRun) => { - const records = await db - .insert(schema.runs) - .values({ - ...insertRunSchema.parse(args), - createdAt: new Date(), - }) - .returning() - - const record = records[0] - - if (!record) { - throw new RecordNotCreatedError() - } - - return record -} - -export const updateRun = async (id: number, values: UpdateRun) => { - const records = await db.update(schema.runs).set(values).where(eq(schema.runs.id, id)).returning() - const record = records[0] - - if (!record) { - throw new RecordNotFoundError() - } - - return record -} - -export const getRuns = async () => - db.query.runs.findMany({ orderBy: desc(schema.runs.id), with: { taskMetrics: true } }) - -export const finishRun = async (runId: number) => { - const [values] = await db - .select({ - tokensIn: sum(schema.taskMetrics.tokensIn).mapWith(Number), - tokensOut: sum(schema.taskMetrics.tokensOut).mapWith(Number), - tokensContext: sum(schema.taskMetrics.tokensContext).mapWith(Number), - cacheWrites: sum(schema.taskMetrics.cacheWrites).mapWith(Number), - cacheReads: sum(schema.taskMetrics.cacheReads).mapWith(Number), - cost: sum(schema.taskMetrics.cost).mapWith(Number), - duration: sum(schema.taskMetrics.duration).mapWith(Number), - passed: sql`sum(${schema.tasks.passed} = 1)`, - failed: sql`sum(${schema.tasks.passed} = 0)`, - }) - .from(schema.taskMetrics) - .innerJoin(schema.tasks, eq(schema.taskMetrics.id, schema.tasks.taskMetricsId)) - .innerJoin(schema.runs, eq(schema.tasks.runId, schema.runs.id)) - .where(eq(schema.runs.id, runId)) - - if (!values) { - throw new RecordNotFoundError() - } - - const tasks = await getTasks(runId) - - const toolUsage = tasks.reduce((acc, task) => { - Object.entries(task.taskMetrics?.toolUsage || {}).forEach(([key, { attempts, failures }]) => { - const tool = key as keyof ToolUsage - acc[tool] ??= { attempts: 0, failures: 0 } - acc[tool].attempts += attempts - acc[tool].failures += failures - }) - - return acc - }, {} as ToolUsage) - - const { passed, failed, ...rest } = values - const taskMetrics = await createTaskMetrics({ ...rest, toolUsage }) - await updateRun(runId, { taskMetricsId: taskMetrics.id, passed, failed }) - - const run = await findRun(runId) - - if (!run) { - throw new RecordNotFoundError() - } - - return { ...run, taskMetrics } -} - -export const deleteRun = async (runId: number) => { - const run = await db.query.runs.findFirst({ - where: eq(schema.runs.id, runId), - columns: { taskMetricsId: true }, - }) - - if (!run) { - throw new RecordNotFoundError() - } - - const tasks = await db.query.tasks.findMany({ - where: eq(schema.tasks.runId, runId), - columns: { id: true, taskMetricsId: true }, - }) - - await db.delete(schema.tasks).where(eq(schema.tasks.runId, runId)) - await db.delete(schema.runs).where(eq(schema.runs.id, runId)) - - const taskMetricsIds = tasks - .map(({ taskMetricsId }) => taskMetricsId) - .filter((id): id is number => id !== null && id !== undefined) - - taskMetricsIds.push(run.taskMetricsId ?? -1) - - await db.delete(schema.taskMetrics).where(inArray(schema.taskMetrics.id, taskMetricsIds)) -} diff --git a/evals/packages/db/src/queries/taskMetrics.ts b/evals/packages/db/src/queries/taskMetrics.ts deleted file mode 100644 index d0400453ce..0000000000 --- a/evals/packages/db/src/queries/taskMetrics.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { eq } from "drizzle-orm" - -import { RecordNotFoundError, RecordNotCreatedError } from "./errors.js" -import type { InsertTaskMetrics, UpdateTaskMetrics } from "../schema.js" -import { insertTaskMetricsSchema, taskMetrics } from "../schema.js" -import { db } from "../db.js" - -export const findTaskMetrics = async (id: number) => { - const run = await db.query.taskMetrics.findFirst({ where: eq(taskMetrics.id, id) }) - - if (!run) { - throw new RecordNotFoundError() - } - - return run -} - -export const createTaskMetrics = async (args: InsertTaskMetrics) => { - const records = await db - .insert(taskMetrics) - .values({ - ...insertTaskMetricsSchema.parse(args), - createdAt: new Date(), - }) - .returning() - - const record = records[0] - - if (!record) { - throw new RecordNotCreatedError() - } - - return record -} - -export const updateTaskMetrics = async (id: number, values: UpdateTaskMetrics) => { - const records = await db.update(taskMetrics).set(values).where(eq(taskMetrics.id, id)).returning() - const record = records[0] - - if (!record) { - throw new RecordNotFoundError() - } - - return record -} diff --git a/evals/packages/db/src/queries/tasks.ts b/evals/packages/db/src/queries/tasks.ts deleted file mode 100644 index c8cca874db..0000000000 --- a/evals/packages/db/src/queries/tasks.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { and, eq } from "drizzle-orm" - -import type { ExerciseLanguage } from "@evals/types" - -import { RecordNotFoundError, RecordNotCreatedError } from "./errors.js" -import type { InsertTask, UpdateTask } from "../schema.js" -import { insertTaskSchema, tasks } from "../schema.js" -import { db } from "../db.js" - -export const findTask = async (id: number) => { - const run = await db.query.tasks.findFirst({ where: eq(tasks.id, id) }) - - if (!run) { - throw new RecordNotFoundError() - } - - return run -} - -export const createTask = async (args: InsertTask) => { - const records = await db - .insert(tasks) - .values({ - ...insertTaskSchema.parse(args), - createdAt: new Date(), - }) - .returning() - - const record = records[0] - - if (!record) { - throw new RecordNotCreatedError() - } - - return record -} - -export const updateTask = async (id: number, values: UpdateTask) => { - const records = await db.update(tasks).set(values).where(eq(tasks.id, id)).returning() - const record = records[0] - - if (!record) { - throw new RecordNotFoundError() - } - - return record -} - -type GetTask = { - runId: number - language: ExerciseLanguage - exercise: string -} - -export const getTask = async ({ runId, language, exercise }: GetTask) => - db.query.tasks.findFirst({ - where: and(eq(tasks.runId, runId), eq(tasks.language, language), eq(tasks.exercise, exercise)), - }) - -export const getTasks = async (runId: number) => - db.query.tasks.findMany({ where: eq(tasks.runId, runId), with: { taskMetrics: true } }) diff --git a/evals/packages/db/src/queries/toolErrors.ts b/evals/packages/db/src/queries/toolErrors.ts deleted file mode 100644 index b2b2163a24..0000000000 --- a/evals/packages/db/src/queries/toolErrors.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { RecordNotCreatedError } from "./errors.js" -import type { InsertToolError } from "../schema.js" -import { insertToolErrorSchema, toolErrors } from "../schema.js" -import { db } from "../db.js" - -export const createToolError = async (args: InsertToolError) => { - const records = await db - .insert(toolErrors) - .values({ - ...insertToolErrorSchema.parse(args), - createdAt: new Date(), - }) - .returning() - - const record = records[0] - - if (!record) { - throw new RecordNotCreatedError() - } - - return record -} diff --git a/evals/packages/db/src/schema.ts b/evals/packages/db/src/schema.ts deleted file mode 100644 index 4473296895..0000000000 --- a/evals/packages/db/src/schema.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { sqliteTable, text, real, integer, blob, uniqueIndex } from "drizzle-orm/sqlite-core" -import { relations } from "drizzle-orm" -import { createInsertSchema } from "drizzle-zod" - -import { - RooCodeSettings, - ToolUsage, - exerciseLanguages, - rooCodeSettingsSchema, - toolNames, - toolUsageSchema, -} from "@evals/types" - -/** - * runs - */ - -export const runs = sqliteTable("runs", { - id: integer({ mode: "number" }).primaryKey({ autoIncrement: true }), - taskMetricsId: integer({ mode: "number" }).references(() => taskMetrics.id), - model: text().notNull(), - description: text(), - settings: blob({ mode: "json" }).$type(), - pid: integer({ mode: "number" }), - socketPath: text().notNull(), - concurrency: integer({ mode: "number" }).default(2).notNull(), - passed: integer({ mode: "number" }).default(0).notNull(), - failed: integer({ mode: "number" }).default(0).notNull(), - createdAt: integer({ mode: "timestamp" }).notNull(), -}) - -export const runsRelations = relations(runs, ({ one }) => ({ - taskMetrics: one(taskMetrics, { fields: [runs.taskMetricsId], references: [taskMetrics.id] }), -})) - -export type Run = typeof runs.$inferSelect - -export const insertRunSchema = createInsertSchema(runs).omit({ id: true, createdAt: true }).extend({ - settings: rooCodeSettingsSchema.optional(), -}) - -export type InsertRun = Omit - -export type UpdateRun = Partial> - -/** - * tasks - */ - -export const tasks = sqliteTable( - "tasks", - { - id: integer({ mode: "number" }).primaryKey({ autoIncrement: true }), - runId: integer({ mode: "number" }) - .references(() => runs.id) - .notNull(), - taskMetricsId: integer({ mode: "number" }).references(() => taskMetrics.id), - language: text({ enum: exerciseLanguages }).notNull(), - exercise: text().notNull(), - passed: integer({ mode: "boolean" }), - startedAt: integer({ mode: "timestamp" }), - finishedAt: integer({ mode: "timestamp" }), - createdAt: integer({ mode: "timestamp" }).notNull(), - }, - (table) => [uniqueIndex("tasks_language_exercise_idx").on(table.runId, table.language, table.exercise)], -) - -export const tasksRelations = relations(tasks, ({ one }) => ({ - run: one(runs, { fields: [tasks.runId], references: [runs.id] }), - taskMetrics: one(taskMetrics, { fields: [tasks.taskMetricsId], references: [taskMetrics.id] }), -})) - -export type Task = typeof tasks.$inferSelect - -export const insertTaskSchema = createInsertSchema(tasks).omit({ id: true, createdAt: true }) - -export type InsertTask = Omit - -export type UpdateTask = Partial> - -/** - * taskMetrics - */ - -export const taskMetrics = sqliteTable("taskMetrics", { - id: integer({ mode: "number" }).primaryKey({ autoIncrement: true }), - tokensIn: integer({ mode: "number" }).notNull(), - tokensOut: integer({ mode: "number" }).notNull(), - tokensContext: integer({ mode: "number" }).notNull(), - cacheWrites: integer({ mode: "number" }).notNull(), - cacheReads: integer({ mode: "number" }).notNull(), - cost: real().notNull(), - duration: integer({ mode: "number" }).notNull(), - toolUsage: text({ mode: "json" }).$type(), - createdAt: integer({ mode: "timestamp" }).notNull(), -}) - -export type TaskMetrics = typeof taskMetrics.$inferSelect - -export const insertTaskMetricsSchema = createInsertSchema(taskMetrics) - .omit({ id: true, createdAt: true }) - .extend({ toolUsage: toolUsageSchema.optional() }) - -export type InsertTaskMetrics = Omit - -export type UpdateTaskMetrics = Partial> - -/** - * toolErrors - */ - -export const toolErrors = sqliteTable("toolErrors", { - id: integer({ mode: "number" }).primaryKey({ autoIncrement: true }), - runId: integer({ mode: "number" }).references(() => runs.id), - taskId: integer({ mode: "number" }).references(() => tasks.id), - toolName: text({ enum: toolNames }).notNull(), - error: text().notNull(), - createdAt: integer({ mode: "timestamp" }).notNull(), -}) - -export const toolErrorsRelations = relations(toolErrors, ({ one }) => ({ - run: one(runs, { fields: [toolErrors.runId], references: [runs.id] }), - task: one(tasks, { fields: [toolErrors.taskId], references: [tasks.id] }), -})) - -export type ToolError = typeof toolErrors.$inferSelect - -export const insertToolErrorSchema = createInsertSchema(toolErrors) - .omit({ id: true, createdAt: true }) - .extend({ toolUsage: toolUsageSchema.optional() }) - -export type InsertToolError = Omit - -export type UpdateToolError = Partial> - -/** - * schema - */ - -export const schema = { runs, runsRelations, tasks, tasksRelations, taskMetrics } diff --git a/evals/packages/db/tsconfig.json b/evals/packages/db/tsconfig.json deleted file mode 100644 index e23679a84c..0000000000 --- a/evals/packages/db/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@evals/typescript-config/base.json", - "compilerOptions": { - "types": ["vitest/globals"] - }, - "include": ["src"], - "exclude": ["node_modules"] -} diff --git a/evals/packages/db/vitest.config.ts b/evals/packages/db/vitest.config.ts deleted file mode 100644 index e8586252d2..0000000000 --- a/evals/packages/db/vitest.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { defineConfig } from "vitest/config" - -export default defineConfig({ - test: { - globalSetup: ["./vitest.setup.ts"], - }, -}) diff --git a/evals/packages/db/vitest.setup.ts b/evals/packages/db/vitest.setup.ts deleted file mode 100644 index c296ef6cf1..0000000000 --- a/evals/packages/db/vitest.setup.ts +++ /dev/null @@ -1,20 +0,0 @@ -import fs from "node:fs/promises" -import path from "node:path" - -import { execa } from "execa" - -const TEST_DB_PATH = path.join(process.cwd(), "test.db") - -export default async function () { - const exists = await fs.stat(TEST_DB_PATH).catch(() => false) - - if (exists) { - await fs.unlink(TEST_DB_PATH) - } - - await execa({ - env: { BENCHMARKS_DB_PATH: `file:${TEST_DB_PATH}` }, - })`pnpm db:push` - - process.env.BENCHMARKS_DB_PATH = `file:${TEST_DB_PATH}` -} diff --git a/evals/packages/ipc/eslint.config.mjs b/evals/packages/ipc/eslint.config.mjs deleted file mode 100644 index 01fea8d98b..0000000000 --- a/evals/packages/ipc/eslint.config.mjs +++ /dev/null @@ -1,4 +0,0 @@ -import { config } from "@evals/eslint-config/base" - -/** @type {import("eslint").Linter.Config} */ -export default [...config] diff --git a/evals/packages/ipc/package.json b/evals/packages/ipc/package.json deleted file mode 100644 index d833142cc8..0000000000 --- a/evals/packages/ipc/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "@evals/ipc", - "private": true, - "type": "module", - "exports": "./src/index.ts", - "scripts": { - "lint": "eslint src/**/*.ts --max-warnings=0", - "check-types": "tsc --noEmit", - "format": "prettier --write src" - }, - "dependencies": { - "@evals/types": "workspace:^", - "node-ipc": "^12.0.0", - "zod": "^3.24.2" - }, - "devDependencies": { - "@evals/eslint-config": "workspace:^", - "@evals/typescript-config": "workspace:^", - "@types/node-ipc": "^9.2.3" - } -} diff --git a/evals/packages/ipc/src/client.ts b/evals/packages/ipc/src/client.ts deleted file mode 100644 index 91e6b06cd0..0000000000 --- a/evals/packages/ipc/src/client.ts +++ /dev/null @@ -1,119 +0,0 @@ -import EventEmitter from "node:events" -import * as crypto from "node:crypto" - -import ipc from "node-ipc" - -import { IpcOrigin, IpcMessageType, IpcMessage, ipcMessageSchema, Ack, TaskCommand, TaskEvent } from "@evals/types" - -export type IpcClientEvents = { - [IpcMessageType.Connect]: [] - [IpcMessageType.Disconnect]: [] - [IpcMessageType.Ack]: [data: Ack] - [IpcMessageType.TaskCommand]: [data: TaskCommand] - [IpcMessageType.TaskEvent]: [data: TaskEvent] -} - -export class IpcClient extends EventEmitter { - private readonly _socketPath: string - private readonly _id: string - private readonly _log: (...args: unknown[]) => void - private _isConnected = false - private _clientId?: string - - constructor(socketPath: string, log = console.log) { - super() - - this._socketPath = socketPath - this._id = `roo-code-evals-${crypto.randomBytes(6).toString("hex")}` - this._log = log - - ipc.config.silent = true - - ipc.connectTo(this._id, this.socketPath, () => { - ipc.of[this._id]?.on("connect", () => this.onConnect()) - ipc.of[this._id]?.on("disconnect", () => this.onDisconnect()) - ipc.of[this._id]?.on("message", (data) => this.onMessage(data)) - }) - } - - private onConnect() { - if (this._isConnected) { - return - } - - this.log("[client#onConnect]") - this._isConnected = true - this.emit(IpcMessageType.Connect) - } - - private onDisconnect() { - if (!this._isConnected) { - return - } - - this.log("[client#onDisconnect]") - this._isConnected = false - this.emit(IpcMessageType.Disconnect) - } - - private onMessage(data: unknown) { - if (typeof data !== "object") { - this._log("[client#onMessage] invalid data", data) - return - } - - const result = ipcMessageSchema.safeParse(data) - - if (!result.success) { - this.log("[client#onMessage] invalid payload", result.error, data) - return - } - - const payload = result.data - - if (payload.origin === IpcOrigin.Server) { - switch (payload.type) { - case IpcMessageType.Ack: - this._clientId = payload.data.clientId - this.emit(IpcMessageType.Ack, payload.data) - break - case IpcMessageType.TaskEvent: - this.emit(IpcMessageType.TaskEvent, payload.data) - break - } - } - } - - private log(...args: unknown[]) { - this._log(...args) - } - - public sendMessage(message: IpcMessage) { - ipc.of[this._id]?.emit("message", message) - } - - public disconnect() { - try { - ipc.disconnect(this._id) - // @TODO: Should we set _disconnect here? - } catch (error) { - this.log("[client#disconnect] error disconnecting", error) - } - } - - public get socketPath() { - return this._socketPath - } - - public get clientId() { - return this._clientId - } - - public get isConnected() { - return this._isConnected - } - - public get isReady() { - return this._isConnected && this._clientId !== undefined - } -} diff --git a/evals/packages/ipc/src/index.ts b/evals/packages/ipc/src/index.ts deleted file mode 100644 index 03cf66634b..0000000000 --- a/evals/packages/ipc/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./client.js" -export * from "./server.js" diff --git a/evals/packages/ipc/src/server.ts b/evals/packages/ipc/src/server.ts deleted file mode 100644 index cbd9cf930d..0000000000 --- a/evals/packages/ipc/src/server.ts +++ /dev/null @@ -1,131 +0,0 @@ -import EventEmitter from "node:events" -import { Socket } from "node:net" -import * as crypto from "node:crypto" - -import ipc from "node-ipc" - -import { IpcOrigin, IpcMessageType, IpcMessage, ipcMessageSchema, TaskCommand, TaskEvent } from "@evals/types" - -type IpcServerEvents = { - [IpcMessageType.Connect]: [clientId: string] - [IpcMessageType.Disconnect]: [clientId: string] - [IpcMessageType.TaskCommand]: [clientId: string, data: TaskCommand] - [IpcMessageType.TaskEvent]: [relayClientId: string | undefined, data: TaskEvent] -} - -export class IpcServer extends EventEmitter { - private readonly _socketPath: string - private readonly _log: (...args: unknown[]) => void - private readonly _clients: Map - - private _isListening = false - - constructor(socketPath: string, log = console.log) { - super() - - this._socketPath = socketPath - this._log = log - this._clients = new Map() - } - - public listen() { - this._isListening = true - - ipc.config.silent = true - - ipc.serve(this.socketPath, () => { - ipc.server.on("connect", (socket) => this.onConnect(socket)) - ipc.server.on("socket.disconnected", (socket) => this.onDisconnect(socket)) - ipc.server.on("message", (data) => this.onMessage(data)) - }) - - ipc.server.start() - } - - private onConnect(socket: Socket) { - const clientId = crypto.randomBytes(6).toString("hex") - this._clients.set(clientId, socket) - this.log(`[server#onConnect] clientId = ${clientId}, # clients = ${this._clients.size}`) - - this.send(socket, { - type: IpcMessageType.Ack, - origin: IpcOrigin.Server, - data: { clientId, pid: process.pid, ppid: process.ppid }, - }) - - this.emit(IpcMessageType.Connect, clientId) - } - - private onDisconnect(destroyedSocket: Socket) { - let disconnectedClientId: string | undefined - - for (const [clientId, socket] of this._clients.entries()) { - if (socket === destroyedSocket) { - disconnectedClientId = clientId - this._clients.delete(clientId) - break - } - } - - this.log(`[server#socket.disconnected] clientId = ${disconnectedClientId}, # clients = ${this._clients.size}`) - - if (disconnectedClientId) { - this.emit(IpcMessageType.Disconnect, disconnectedClientId) - } - } - - private onMessage(data: unknown) { - if (typeof data !== "object") { - this.log("[server#onMessage] invalid data", data) - return - } - - const result = ipcMessageSchema.safeParse(data) - - if (!result.success) { - this.log("[server#onMessage] invalid payload", result.error, data) - return - } - - const payload = result.data - - if (payload.origin === IpcOrigin.Client) { - switch (payload.type) { - case IpcMessageType.TaskCommand: - this.emit(IpcMessageType.TaskCommand, payload.clientId, payload.data) - break - } - } - } - - private log(...args: unknown[]) { - this._log(...args) - } - - public broadcast(message: IpcMessage) { - this.log("[server#broadcast] message =", message) - ipc.server.broadcast("message", message) - } - - public send(client: string | Socket, message: IpcMessage) { - this.log("[server#send] message =", message) - - if (typeof client === "string") { - const socket = this._clients.get(client) - - if (socket) { - ipc.server.emit(socket, "message", message) - } - } else { - ipc.server.emit(client, "message", message) - } - } - - public get socketPath() { - return this._socketPath - } - - public get isListening() { - return this._isListening - } -} diff --git a/evals/packages/ipc/tsconfig.json b/evals/packages/ipc/tsconfig.json deleted file mode 100644 index 48fa99573e..0000000000 --- a/evals/packages/ipc/tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "@evals/typescript-config/base.json", - "include": ["src"], - "exclude": ["node_modules"] -} diff --git a/evals/packages/lib/eslint.config.mjs b/evals/packages/lib/eslint.config.mjs deleted file mode 100644 index 01fea8d98b..0000000000 --- a/evals/packages/lib/eslint.config.mjs +++ /dev/null @@ -1,4 +0,0 @@ -import { config } from "@evals/eslint-config/base" - -/** @type {import("eslint").Linter.Config} */ -export default [...config] diff --git a/evals/packages/lib/package.json b/evals/packages/lib/package.json deleted file mode 100644 index ac6ad9e51b..0000000000 --- a/evals/packages/lib/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@evals/lib", - "private": true, - "type": "module", - "exports": "./src/index.ts", - "scripts": { - "lint": "eslint src/**/*.ts --max-warnings=0", - "check-types": "tsc --noEmit", - "test": "vitest --globals --run", - "format": "prettier --write src" - }, - "devDependencies": { - "@evals/eslint-config": "workspace:^", - "@evals/typescript-config": "workspace:^", - "vitest": "^3.0.9" - } -} diff --git a/evals/packages/lib/src/__tests__/in-chunks-of.test.ts b/evals/packages/lib/src/__tests__/in-chunks-of.test.ts deleted file mode 100644 index 3dd0151569..0000000000 --- a/evals/packages/lib/src/__tests__/in-chunks-of.test.ts +++ /dev/null @@ -1,18 +0,0 @@ -// npx vitest run src/__tests__/in-chunks-of.test.ts - -import { inChunksOf } from "../in-chunks-of.js" - -describe("inChunksOf", () => { - it("should return an array of arrays", () => { - const result = inChunksOf([1, 2, 3, 4, 5]) - expect(result).toEqual([[1, 2], [3, 4], [5]]) - }) - - it("should return an array of arrays with a custom chunk size", () => { - const result = inChunksOf([1, 2, 3, 4, 5], 3) - expect(result).toEqual([ - [1, 2, 3], - [4, 5], - ]) - }) -}) diff --git a/evals/packages/lib/src/in-chunks-of.ts b/evals/packages/lib/src/in-chunks-of.ts deleted file mode 100644 index 8245c97a8a..0000000000 --- a/evals/packages/lib/src/in-chunks-of.ts +++ /dev/null @@ -1,14 +0,0 @@ -export function inChunksOf(ary: T[], perChunk = 2) { - const result = ary.reduce((collect, item, index) => { - const chunkIndex = Math.floor(index / perChunk) - - if (!collect[chunkIndex]) { - collect[chunkIndex] = [] - } - - collect[chunkIndex].push(item) - return collect - }, [] as T[][]) - - return result -} diff --git a/evals/packages/lib/src/index.ts b/evals/packages/lib/src/index.ts deleted file mode 100644 index 8c2aa62d40..0000000000 --- a/evals/packages/lib/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./in-chunks-of.js" diff --git a/evals/packages/lib/tsconfig.json b/evals/packages/lib/tsconfig.json deleted file mode 100644 index e23679a84c..0000000000 --- a/evals/packages/lib/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@evals/typescript-config/base.json", - "compilerOptions": { - "types": ["vitest/globals"] - }, - "include": ["src"], - "exclude": ["node_modules"] -} diff --git a/evals/packages/types/eslint.config.mjs b/evals/packages/types/eslint.config.mjs deleted file mode 100644 index 01fea8d98b..0000000000 --- a/evals/packages/types/eslint.config.mjs +++ /dev/null @@ -1,4 +0,0 @@ -import { config } from "@evals/eslint-config/base" - -/** @type {import("eslint").Linter.Config} */ -export default [...config] diff --git a/evals/packages/types/package.json b/evals/packages/types/package.json deleted file mode 100644 index 7e6f58afe4..0000000000 --- a/evals/packages/types/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "@evals/types", - "private": true, - "type": "module", - "exports": "./src/index.ts", - "scripts": { - "lint": "eslint src/**/*.ts --max-warnings=0", - "check-types": "tsc --noEmit", - "format": "prettier --write src" - }, - "dependencies": { - "zod": "^3.24.2" - }, - "devDependencies": { - "@evals/eslint-config": "workspace:^", - "@evals/typescript-config": "workspace:^" - } -} diff --git a/evals/packages/types/src/exercises.ts b/evals/packages/types/src/exercises.ts deleted file mode 100644 index dce12cf491..0000000000 --- a/evals/packages/types/src/exercises.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * ExerciseLanguage - */ - -export const exerciseLanguages = ["go", "java", "javascript", "python", "rust"] as const - -export type ExerciseLanguage = (typeof exerciseLanguages)[number] - -export const isExerciseLanguage = (value: string): value is ExerciseLanguage => - exerciseLanguages.includes(value as ExerciseLanguage) diff --git a/evals/packages/types/src/index.ts b/evals/packages/types/src/index.ts deleted file mode 100644 index 07235f4e99..0000000000 --- a/evals/packages/types/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./exercises.js" -export * from "./ipc.js" -export * from "./roo-code.js" -export * from "./roo-code-defaults.js" diff --git a/evals/packages/types/src/ipc.ts b/evals/packages/types/src/ipc.ts deleted file mode 100644 index 1a6556e043..0000000000 --- a/evals/packages/types/src/ipc.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { z } from "zod" - -import { RooCodeEventName, rooCodeEventsSchema, rooCodeSettingsSchema } from "./roo-code.js" - -/** - * Ack - */ - -export const ackSchema = z.object({ - clientId: z.string(), - pid: z.number(), - ppid: z.number(), -}) - -export type Ack = z.infer - -/** - * TaskCommand - */ - -export enum TaskCommandName { - StartNewTask = "StartNewTask", - CancelTask = "CancelTask", - CloseTask = "CloseTask", -} - -export const taskCommandSchema = z.discriminatedUnion("commandName", [ - z.object({ - commandName: z.literal(TaskCommandName.StartNewTask), - data: z.object({ - configuration: rooCodeSettingsSchema, - text: z.string(), - images: z.array(z.string()).optional(), - newTab: z.boolean().optional(), - }), - }), - z.object({ - commandName: z.literal(TaskCommandName.CancelTask), - data: z.string(), - }), - z.object({ - commandName: z.literal(TaskCommandName.CloseTask), - data: z.string(), - }), -]) - -export type TaskCommand = z.infer - -/** - * TaskEvent - */ - -export enum EvalEventName { - Pass = "pass", - Fail = "fail", -} - -export const taskEventSchema = z.discriminatedUnion("eventName", [ - z.object({ - eventName: z.literal(RooCodeEventName.Message), - payload: rooCodeEventsSchema.shape[RooCodeEventName.Message], - taskId: z.number().optional(), - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskCreated), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskCreated], - taskId: z.number().optional(), - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskStarted), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskStarted], - taskId: z.number().optional(), - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskModeSwitched), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskModeSwitched], - taskId: z.number().optional(), - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskPaused), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskPaused], - taskId: z.number().optional(), - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskUnpaused), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskUnpaused], - taskId: z.number().optional(), - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskAskResponded), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskAskResponded], - taskId: z.number().optional(), - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskAborted), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskAborted], - taskId: z.number().optional(), - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskSpawned), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskSpawned], - taskId: z.number().optional(), - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskCompleted), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskCompleted], - taskId: z.number().optional(), - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskTokenUsageUpdated), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskTokenUsageUpdated], - taskId: z.number().optional(), - }), - z.object({ - eventName: z.literal(RooCodeEventName.TaskToolFailed), - payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskToolFailed], - taskId: z.number().optional(), - }), - z.object({ - eventName: z.literal(EvalEventName.Pass), - payload: z.undefined(), - taskId: z.number(), - }), - z.object({ - eventName: z.literal(EvalEventName.Fail), - payload: z.undefined(), - taskId: z.number(), - }), -]) - -export type TaskEvent = z.infer - -/** - * IpcMessage - */ - -export enum IpcMessageType { - Connect = "Connect", - Disconnect = "Disconnect", - Ack = "Ack", - TaskCommand = "TaskCommand", - TaskEvent = "TaskEvent", - EvalEvent = "EvalEvent", -} - -export enum IpcOrigin { - Client = "client", - Server = "server", -} - -export const ipcMessageSchema = z.discriminatedUnion("type", [ - z.object({ - type: z.literal(IpcMessageType.Ack), - origin: z.literal(IpcOrigin.Server), - data: ackSchema, - }), - z.object({ - type: z.literal(IpcMessageType.TaskCommand), - origin: z.literal(IpcOrigin.Client), - clientId: z.string(), - data: taskCommandSchema, - }), - z.object({ - type: z.literal(IpcMessageType.TaskEvent), - origin: z.literal(IpcOrigin.Server), - relayClientId: z.string().optional(), - data: taskEventSchema, - }), -]) - -export type IpcMessage = z.infer diff --git a/evals/packages/types/src/roo-code-defaults.ts b/evals/packages/types/src/roo-code-defaults.ts deleted file mode 100644 index a06e642fd5..0000000000 --- a/evals/packages/types/src/roo-code-defaults.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { RooCodeSettings } from "./roo-code.js" - -export const rooCodeDefaults: RooCodeSettings = { - apiProvider: "openrouter", - openRouterUseMiddleOutTransform: false, - - lastShownAnnouncementId: "may-21-2025-3-18", - - pinnedApiConfigs: {}, - - autoApprovalEnabled: true, - alwaysAllowReadOnly: true, - alwaysAllowReadOnlyOutsideWorkspace: false, - alwaysAllowWrite: true, - alwaysAllowWriteOutsideWorkspace: false, - writeDelayMs: 1000, - alwaysAllowBrowser: true, - alwaysApproveResubmit: true, - requestDelaySeconds: 10, - alwaysAllowMcp: true, - alwaysAllowModeSwitch: true, - alwaysAllowSubtasks: true, - alwaysAllowExecute: true, - allowedCommands: ["*"], - - browserToolEnabled: false, - browserViewportSize: "900x600", - screenshotQuality: 75, - remoteBrowserEnabled: false, - - ttsEnabled: false, - ttsSpeed: 1, - soundEnabled: false, - soundVolume: 0.5, - - terminalOutputLineLimit: 500, - terminalShellIntegrationTimeout: 30000, - terminalCommandDelay: 0, - terminalPowershellCounter: false, - terminalZshOhMy: true, - terminalZshClearEolMark: true, - terminalZshP10k: false, - terminalZdotdir: true, - terminalCompressProgressBar: true, - terminalShellIntegrationDisabled: false, - - diffEnabled: true, - fuzzyMatchThreshold: 1, - - enableCheckpoints: false, - - rateLimitSeconds: 0, - maxOpenTabsContext: 20, - maxWorkspaceFiles: 200, - showRooIgnoredFiles: true, - maxReadFileLine: -1, // -1 to enable full file reading. - - language: "en", - telemetrySetting: "enabled", - - mcpEnabled: false, - - mode: "code", - - customModes: [], -} diff --git a/evals/packages/types/src/roo-code.ts b/evals/packages/types/src/roo-code.ts deleted file mode 100644 index 0363c888b6..0000000000 --- a/evals/packages/types/src/roo-code.ts +++ /dev/null @@ -1,1148 +0,0 @@ -import { z } from "zod" - -import { Equals, Keys, AssertEqual } from "./utils.js" - -/** - * ProviderName - */ - -export const providerNames = [ - "anthropic", - "glama", - "openrouter", - "bedrock", - "vertex", - "openai", - "ollama", - "vscode-lm", - "lmstudio", - "gemini", - "openai-native", - "mistral", - "deepseek", - "unbound", - "requesty", - "human-relay", - "fake-ai", - "xai", -] as const - -export const providerNamesSchema = z.enum(providerNames) - -export type ProviderName = z.infer - -/** - * ToolGroup - */ - -export const toolGroups = ["read", "edit", "browser", "command", "mcp", "modes"] as const - -export const toolGroupsSchema = z.enum(toolGroups) - -export type ToolGroup = z.infer - -/** - * Language - */ - -export const languages = [ - "ca", - "de", - "en", - "es", - "fr", - "hi", - "it", - "ja", - "ko", - "nl", - "pl", - "pt-BR", - "ru", - "tr", - "vi", - "zh-CN", - "zh-TW", -] as const - -export const languagesSchema = z.enum(languages) - -export type Language = z.infer - -export const isLanguage = (value: string): value is Language => languages.includes(value as Language) - -/** - * TelemetrySetting - */ - -export const telemetrySettings = ["unset", "enabled", "disabled"] as const - -export const telemetrySettingsSchema = z.enum(telemetrySettings) - -export type TelemetrySetting = z.infer - -/** - * ReasoningEffort - */ - -export const reasoningEfforts = ["low", "medium", "high"] as const - -export const reasoningEffortsSchema = z.enum(reasoningEfforts) - -export type ReasoningEffort = z.infer - -/** - * ModelInfo - */ - -export const modelInfoSchema = z.object({ - maxTokens: z.number().nullish(), - maxThinkingTokens: z.number().nullish(), - contextWindow: z.number(), - supportsImages: z.boolean().optional(), - supportsComputerUse: z.boolean().optional(), - supportsPromptCache: z.boolean(), - inputPrice: z.number().optional(), - outputPrice: z.number().optional(), - cacheWritesPrice: z.number().optional(), - cacheReadsPrice: z.number().optional(), - description: z.string().optional(), - reasoningEffort: reasoningEffortsSchema.optional(), - thinking: z.boolean().optional(), - minTokensPerCachePoint: z.number().optional(), - maxCachePoints: z.number().optional(), - cachableFields: z.array(z.string()).optional(), - tiers: z - .array( - z.object({ - contextWindow: z.number(), - inputPrice: z.number().optional(), - outputPrice: z.number().optional(), - cacheWritesPrice: z.number().optional(), - cacheReadsPrice: z.number().optional(), - }), - ) - .optional(), -}) - -export type ModelInfo = z.infer - -/** - * HistoryItem - */ - -export const historyItemSchema = z.object({ - id: z.string(), - number: z.number(), - ts: z.number(), - task: z.string(), - tokensIn: z.number(), - tokensOut: z.number(), - cacheWrites: z.number().optional(), - cacheReads: z.number().optional(), - totalCost: z.number(), - size: z.number().optional(), - workspace: z.string().optional(), -}) - -export type HistoryItem = z.infer - -/** - * GroupOptions - */ - -export const groupOptionsSchema = z.object({ - fileRegex: z - .string() - .optional() - .refine( - (pattern) => { - if (!pattern) { - return true // Optional, so empty is valid. - } - - try { - new RegExp(pattern) - return true - } catch { - return false - } - }, - { message: "Invalid regular expression pattern" }, - ), - description: z.string().optional(), -}) - -export type GroupOptions = z.infer - -/** - * GroupEntry - */ - -export const groupEntrySchema = z.union([toolGroupsSchema, z.tuple([toolGroupsSchema, groupOptionsSchema])]) - -export type GroupEntry = z.infer - -/** - * ModeConfig - */ - -const groupEntryArraySchema = z.array(groupEntrySchema).refine( - (groups) => { - const seen = new Set() - - return groups.every((group) => { - // For tuples, check the group name (first element). - const groupName = Array.isArray(group) ? group[0] : group - - if (seen.has(groupName)) { - return false - } - - seen.add(groupName) - return true - }) - }, - { message: "Duplicate groups are not allowed" }, -) - -export const modeConfigSchema = z.object({ - slug: z.string().regex(/^[a-zA-Z0-9-]+$/, "Slug must contain only letters numbers and dashes"), - name: z.string().min(1, "Name is required"), - roleDefinition: z.string().min(1, "Role definition is required"), - customInstructions: z.string().optional(), - groups: groupEntryArraySchema, - source: z.enum(["global", "project"]).optional(), -}) - -export type ModeConfig = z.infer - -/** - * CustomModesSettings - */ - -export const customModesSettingsSchema = z.object({ - customModes: z.array(modeConfigSchema).refine( - (modes) => { - const slugs = new Set() - - return modes.every((mode) => { - if (slugs.has(mode.slug)) { - return false - } - - slugs.add(mode.slug) - return true - }) - }, - { - message: "Duplicate mode slugs are not allowed", - }, - ), -}) - -export type CustomModesSettings = z.infer - -/** - * PromptComponent - */ - -export const promptComponentSchema = z.object({ - roleDefinition: z.string().optional(), - customInstructions: z.string().optional(), -}) - -export type PromptComponent = z.infer - -/** - * CustomModePrompts - */ - -export const customModePromptsSchema = z.record(z.string(), promptComponentSchema.optional()) - -export type CustomModePrompts = z.infer - -/** - * CustomSupportPrompts - */ - -export const customSupportPromptsSchema = z.record(z.string(), z.string().optional()) - -export type CustomSupportPrompts = z.infer - -/** - * CommandExecutionStatus - */ - -export const commandExecutionStatusSchema = z.discriminatedUnion("status", [ - z.object({ - executionId: z.string(), - status: z.literal("running"), - pid: z.number().optional(), - }), - z.object({ - executionId: z.string(), - status: z.literal("exited"), - exitCode: z.number().optional(), - }), - z.object({ - executionId: z.string(), - status: z.literal("fallback"), - }), -]) - -export type CommandExecutionStatus = z.infer - -/** - * ExperimentId - */ - -export const experimentIds = ["powerSteering"] as const - -export const experimentIdsSchema = z.enum(experimentIds) - -export type ExperimentId = z.infer - -/** - * Experiments - */ - -const experimentsSchema = z.object({ - powerSteering: z.boolean(), -}) - -export type Experiments = z.infer - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -type _AssertExperiments = AssertEqual>> - -/** - * ProviderSettingsEntry - */ - -export const providerSettingsEntrySchema = z.object({ - id: z.string(), - name: z.string(), - apiProvider: providerNamesSchema.optional(), -}) - -export type ProviderSettingsEntry = z.infer - -/** - * ProviderSettings - */ - -const genericProviderSettingsSchema = z.object({ - includeMaxTokens: z.boolean().optional(), - diffEnabled: z.boolean().optional(), - fuzzyMatchThreshold: z.number().optional(), - modelTemperature: z.number().nullish(), - rateLimitSeconds: z.number().optional(), - - // Model reasoning. - enableReasoningEffort: z.boolean().optional(), - reasoningEffort: reasoningEffortsSchema.optional(), - modelMaxTokens: z.number().optional(), - modelMaxThinkingTokens: z.number().optional(), -}) - -const anthropicSchema = z.object({ - apiModelId: z.string().optional(), - apiKey: z.string().optional(), - anthropicBaseUrl: z.string().optional(), - anthropicUseAuthToken: z.boolean().optional(), -}) - -const glamaSchema = z.object({ - glamaModelId: z.string().optional(), - glamaApiKey: z.string().optional(), -}) - -const openRouterSchema = z.object({ - openRouterApiKey: z.string().optional(), - openRouterModelId: z.string().optional(), - openRouterBaseUrl: z.string().optional(), - openRouterSpecificProvider: z.string().optional(), - openRouterUseMiddleOutTransform: z.boolean().optional(), -}) - -const bedrockSchema = z.object({ - awsAccessKey: z.string().optional(), - awsSecretKey: z.string().optional(), - awsSessionToken: z.string().optional(), - awsRegion: z.string().optional(), - awsUseCrossRegionInference: z.boolean().optional(), - awsUsePromptCache: z.boolean().optional(), - awsProfile: z.string().optional(), - awsUseProfile: z.boolean().optional(), - awsCustomArn: z.string().optional(), -}) - -const vertexSchema = z.object({ - vertexKeyFile: z.string().optional(), - vertexJsonCredentials: z.string().optional(), - vertexProjectId: z.string().optional(), - vertexRegion: z.string().optional(), -}) - -const openAiSchema = z.object({ - openAiBaseUrl: z.string().optional(), - openAiApiKey: z.string().optional(), - openAiLegacyFormat: z.boolean().optional(), - openAiR1FormatEnabled: z.boolean().optional(), - openAiModelId: z.string().optional(), - openAiCustomModelInfo: modelInfoSchema.nullish(), - openAiUseAzure: z.boolean().optional(), - azureApiVersion: z.string().optional(), - openAiStreamingEnabled: z.boolean().optional(), - enableReasoningEffort: z.boolean().optional(), - openAiHostHeader: z.string().optional(), // Keep temporarily for backward compatibility during migration. - openAiHeaders: z.record(z.string(), z.string()).optional(), -}) - -const ollamaSchema = z.object({ - ollamaModelId: z.string().optional(), - ollamaBaseUrl: z.string().optional(), -}) - -const vsCodeLmSchema = z.object({ - vsCodeLmModelSelector: z - .object({ - vendor: z.string().optional(), - family: z.string().optional(), - version: z.string().optional(), - id: z.string().optional(), - }) - .optional(), -}) - -const lmStudioSchema = z.object({ - lmStudioModelId: z.string().optional(), - lmStudioBaseUrl: z.string().optional(), - lmStudioDraftModelId: z.string().optional(), - lmStudioSpeculativeDecodingEnabled: z.boolean().optional(), -}) - -const geminiSchema = z.object({ - geminiApiKey: z.string().optional(), - googleGeminiBaseUrl: z.string().optional(), -}) - -const openAiNativeSchema = z.object({ - openAiNativeApiKey: z.string().optional(), - openAiNativeBaseUrl: z.string().optional(), -}) - -const mistralSchema = z.object({ - mistralApiKey: z.string().optional(), - mistralCodestralUrl: z.string().optional(), -}) - -const deepSeekSchema = z.object({ - deepSeekBaseUrl: z.string().optional(), - deepSeekApiKey: z.string().optional(), -}) - -const unboundSchema = z.object({ - unboundApiKey: z.string().optional(), - unboundModelId: z.string().optional(), -}) - -const requestySchema = z.object({ - requestyApiKey: z.string().optional(), - requestyModelId: z.string().optional(), -}) - -const humanRelaySchema = z.object({}) - -const fakeAiSchema = z.object({ - fakeAi: z.unknown().optional(), -}) - -const xaiSchema = z.object({ - xaiApiKey: z.string().optional(), -}) - -const groqSchema = z.object({ - groqApiKey: z.string().optional(), -}) - -const chutesSchema = z.object({ - chutesApiKey: z.string().optional(), -}) - -const litellmSchema = z.object({ - litellmBaseUrl: z.string().optional(), - litellmApiKey: z.string().optional(), - litellmModelId: z.string().optional(), -}) - -const defaultSchema = z.object({ - apiProvider: z.undefined(), -}) - -export const providerSettingsSchemaDiscriminated = z - .discriminatedUnion("apiProvider", [ - anthropicSchema.merge( - z.object({ - apiProvider: z.literal("anthropic"), - }), - ), - glamaSchema.merge( - z.object({ - apiProvider: z.literal("glama"), - }), - ), - openRouterSchema.merge( - z.object({ - apiProvider: z.literal("openrouter"), - }), - ), - bedrockSchema.merge( - z.object({ - apiProvider: z.literal("bedrock"), - }), - ), - vertexSchema.merge( - z.object({ - apiProvider: z.literal("vertex"), - }), - ), - openAiSchema.merge( - z.object({ - apiProvider: z.literal("openai"), - }), - ), - ollamaSchema.merge( - z.object({ - apiProvider: z.literal("ollama"), - }), - ), - vsCodeLmSchema.merge( - z.object({ - apiProvider: z.literal("vscode-lm"), - }), - ), - lmStudioSchema.merge( - z.object({ - apiProvider: z.literal("lmstudio"), - }), - ), - geminiSchema.merge( - z.object({ - apiProvider: z.literal("gemini"), - }), - ), - openAiNativeSchema.merge( - z.object({ - apiProvider: z.literal("openai-native"), - }), - ), - mistralSchema.merge( - z.object({ - apiProvider: z.literal("mistral"), - }), - ), - deepSeekSchema.merge( - z.object({ - apiProvider: z.literal("deepseek"), - }), - ), - unboundSchema.merge( - z.object({ - apiProvider: z.literal("unbound"), - }), - ), - requestySchema.merge( - z.object({ - apiProvider: z.literal("requesty"), - }), - ), - humanRelaySchema.merge( - z.object({ - apiProvider: z.literal("human-relay"), - }), - ), - fakeAiSchema.merge( - z.object({ - apiProvider: z.literal("fake-ai"), - }), - ), - xaiSchema.merge( - z.object({ - apiProvider: z.literal("xai"), - }), - ), - groqSchema.merge( - z.object({ - apiProvider: z.literal("groq"), - }), - ), - chutesSchema.merge( - z.object({ - apiProvider: z.literal("chutes"), - }), - ), - litellmSchema.merge( - z.object({ - apiProvider: z.literal("litellm"), - }), - ), - defaultSchema, - ]) - .and(genericProviderSettingsSchema) - -export const providerSettingsSchema = z.object({ - apiProvider: providerNamesSchema.optional(), - ...anthropicSchema.shape, - ...glamaSchema.shape, - ...openRouterSchema.shape, - ...bedrockSchema.shape, - ...vertexSchema.shape, - ...openAiSchema.shape, - ...ollamaSchema.shape, - ...vsCodeLmSchema.shape, - ...lmStudioSchema.shape, - ...geminiSchema.shape, - ...openAiNativeSchema.shape, - ...mistralSchema.shape, - ...deepSeekSchema.shape, - ...unboundSchema.shape, - ...requestySchema.shape, - ...humanRelaySchema.shape, - ...fakeAiSchema.shape, - ...xaiSchema.shape, - ...groqSchema.shape, - ...chutesSchema.shape, - ...litellmSchema.shape, - ...genericProviderSettingsSchema.shape, -}) - -export type ProviderSettings = z.infer - -type ProviderSettingsRecord = Record, undefined> - -const providerSettingsRecord: ProviderSettingsRecord = { - apiProvider: undefined, - // Anthropic - apiModelId: undefined, - apiKey: undefined, - anthropicBaseUrl: undefined, - anthropicUseAuthToken: undefined, - // Glama - glamaModelId: undefined, - glamaApiKey: undefined, - // OpenRouter - openRouterApiKey: undefined, - openRouterModelId: undefined, - openRouterBaseUrl: undefined, - openRouterSpecificProvider: undefined, - openRouterUseMiddleOutTransform: undefined, - // Amazon Bedrock - awsAccessKey: undefined, - awsSecretKey: undefined, - awsSessionToken: undefined, - awsRegion: undefined, - awsUseCrossRegionInference: undefined, - awsUsePromptCache: undefined, - awsProfile: undefined, - awsUseProfile: undefined, - awsCustomArn: undefined, - // Google Vertex - vertexKeyFile: undefined, - vertexJsonCredentials: undefined, - vertexProjectId: undefined, - vertexRegion: undefined, - // OpenAI - openAiBaseUrl: undefined, - openAiApiKey: undefined, - openAiLegacyFormat: undefined, - openAiR1FormatEnabled: undefined, - openAiModelId: undefined, - openAiCustomModelInfo: undefined, - openAiUseAzure: undefined, - azureApiVersion: undefined, - openAiStreamingEnabled: undefined, - enableReasoningEffort: undefined, - openAiHostHeader: undefined, // Keep temporarily for backward compatibility during migration - openAiHeaders: undefined, - // Ollama - ollamaModelId: undefined, - ollamaBaseUrl: undefined, - // VS Code LM - vsCodeLmModelSelector: undefined, - lmStudioModelId: undefined, - lmStudioBaseUrl: undefined, - lmStudioDraftModelId: undefined, - lmStudioSpeculativeDecodingEnabled: undefined, - // Gemini - geminiApiKey: undefined, - googleGeminiBaseUrl: undefined, - // OpenAI Native - openAiNativeApiKey: undefined, - openAiNativeBaseUrl: undefined, - // Mistral - mistralApiKey: undefined, - mistralCodestralUrl: undefined, - // DeepSeek - deepSeekBaseUrl: undefined, - deepSeekApiKey: undefined, - // Unbound - unboundApiKey: undefined, - unboundModelId: undefined, - // Requesty - requestyApiKey: undefined, - requestyModelId: undefined, - // Claude 3.7 Sonnet Thinking - modelMaxTokens: undefined, - modelMaxThinkingTokens: undefined, - // Generic - includeMaxTokens: undefined, - reasoningEffort: undefined, - diffEnabled: undefined, - fuzzyMatchThreshold: undefined, - modelTemperature: undefined, - rateLimitSeconds: undefined, - // Fake AI - fakeAi: undefined, - // X.AI (Grok) - xaiApiKey: undefined, - // Groq - groqApiKey: undefined, - // Chutes AI - chutesApiKey: undefined, - // LiteLLM - litellmBaseUrl: undefined, - litellmApiKey: undefined, - litellmModelId: undefined, -} - -export const PROVIDER_SETTINGS_KEYS = Object.keys(providerSettingsRecord) as Keys[] - -/** - * GlobalSettings - */ - -export const globalSettingsSchema = z.object({ - currentApiConfigName: z.string().optional(), - listApiConfigMeta: z.array(providerSettingsEntrySchema).optional(), - pinnedApiConfigs: z.record(z.string(), z.boolean()).optional(), - - lastShownAnnouncementId: z.string().optional(), - customInstructions: z.string().optional(), - taskHistory: z.array(historyItemSchema).optional(), - - autoApprovalEnabled: z.boolean().optional(), - alwaysAllowReadOnly: z.boolean().optional(), - alwaysAllowReadOnlyOutsideWorkspace: z.boolean().optional(), - alwaysAllowWrite: z.boolean().optional(), - alwaysAllowWriteOutsideWorkspace: z.boolean().optional(), - writeDelayMs: z.number().optional(), - alwaysAllowBrowser: z.boolean().optional(), - alwaysApproveResubmit: z.boolean().optional(), - requestDelaySeconds: z.number().optional(), - alwaysAllowMcp: z.boolean().optional(), - alwaysAllowModeSwitch: z.boolean().optional(), - alwaysAllowSubtasks: z.boolean().optional(), - alwaysAllowExecute: z.boolean().optional(), - allowedCommands: z.array(z.string()).optional(), - - browserToolEnabled: z.boolean().optional(), - browserViewportSize: z.string().optional(), - screenshotQuality: z.number().optional(), - remoteBrowserEnabled: z.boolean().optional(), - remoteBrowserHost: z.string().optional(), - cachedChromeHostUrl: z.string().optional(), - - enableCheckpoints: z.boolean().optional(), - - ttsEnabled: z.boolean().optional(), - ttsSpeed: z.number().optional(), - soundEnabled: z.boolean().optional(), - soundVolume: z.number().optional(), - - maxOpenTabsContext: z.number().optional(), - maxWorkspaceFiles: z.number().optional(), - showRooIgnoredFiles: z.boolean().optional(), - maxReadFileLine: z.number().optional(), - - terminalOutputLineLimit: z.number().optional(), - terminalShellIntegrationTimeout: z.number().optional(), - terminalShellIntegrationDisabled: z.boolean().optional(), - terminalCommandDelay: z.number().optional(), - terminalPowershellCounter: z.boolean().optional(), - terminalZshClearEolMark: z.boolean().optional(), - terminalZshOhMy: z.boolean().optional(), - terminalZshP10k: z.boolean().optional(), - terminalZdotdir: z.boolean().optional(), - terminalCompressProgressBar: z.boolean().optional(), - - rateLimitSeconds: z.number().optional(), - diffEnabled: z.boolean().optional(), - fuzzyMatchThreshold: z.number().optional(), - experiments: experimentsSchema.optional(), - - language: languagesSchema.optional(), - - telemetrySetting: telemetrySettingsSchema.optional(), - - mcpEnabled: z.boolean().optional(), - enableMcpServerCreation: z.boolean().optional(), - - mode: z.string().optional(), - modeApiConfigs: z.record(z.string(), z.string()).optional(), - customModes: z.array(modeConfigSchema).optional(), - customModePrompts: customModePromptsSchema.optional(), - customSupportPrompts: customSupportPromptsSchema.optional(), - enhancementApiConfigId: z.string().optional(), - historyPreviewCollapsed: z.boolean().optional(), -}) - -export type GlobalSettings = z.infer - -type GlobalSettingsRecord = Record, undefined> - -const globalSettingsRecord: GlobalSettingsRecord = { - currentApiConfigName: undefined, - listApiConfigMeta: undefined, - pinnedApiConfigs: undefined, - - lastShownAnnouncementId: undefined, - customInstructions: undefined, - taskHistory: undefined, - - autoApprovalEnabled: undefined, - alwaysAllowReadOnly: undefined, - alwaysAllowReadOnlyOutsideWorkspace: undefined, - alwaysAllowWrite: undefined, - alwaysAllowWriteOutsideWorkspace: undefined, - writeDelayMs: undefined, - alwaysAllowBrowser: undefined, - alwaysApproveResubmit: undefined, - requestDelaySeconds: undefined, - alwaysAllowMcp: undefined, - alwaysAllowModeSwitch: undefined, - alwaysAllowSubtasks: undefined, - alwaysAllowExecute: undefined, - allowedCommands: undefined, - - browserToolEnabled: undefined, - browserViewportSize: undefined, - screenshotQuality: undefined, - remoteBrowserEnabled: undefined, - remoteBrowserHost: undefined, - - enableCheckpoints: undefined, - - ttsEnabled: undefined, - ttsSpeed: undefined, - soundEnabled: undefined, - soundVolume: undefined, - - maxOpenTabsContext: undefined, - maxWorkspaceFiles: undefined, - showRooIgnoredFiles: undefined, - maxReadFileLine: undefined, - - terminalOutputLineLimit: undefined, - terminalShellIntegrationTimeout: undefined, - terminalShellIntegrationDisabled: undefined, - terminalCommandDelay: undefined, - terminalPowershellCounter: undefined, - terminalZshClearEolMark: undefined, - terminalZshOhMy: undefined, - terminalZshP10k: undefined, - terminalZdotdir: undefined, - terminalCompressProgressBar: undefined, - - rateLimitSeconds: undefined, - diffEnabled: undefined, - fuzzyMatchThreshold: undefined, - experiments: undefined, - - language: undefined, - - telemetrySetting: undefined, - - mcpEnabled: undefined, - enableMcpServerCreation: undefined, - - mode: undefined, - modeApiConfigs: undefined, - customModes: undefined, - customModePrompts: undefined, - customSupportPrompts: undefined, - enhancementApiConfigId: undefined, - cachedChromeHostUrl: undefined, - historyPreviewCollapsed: undefined, -} - -export const GLOBAL_SETTINGS_KEYS = Object.keys(globalSettingsRecord) as Keys[] - -/** - * RooCodeSettings - */ - -export const rooCodeSettingsSchema = providerSettingsSchema.merge(globalSettingsSchema) - -export type RooCodeSettings = GlobalSettings & ProviderSettings - -export const ROO_CODE_SETTINGS_KEYS = [...GLOBAL_SETTINGS_KEYS, ...PROVIDER_SETTINGS_KEYS] as Keys[] - -/** - * SecretState - */ - -export type SecretState = Pick< - ProviderSettings, - | "apiKey" - | "glamaApiKey" - | "openRouterApiKey" - | "awsAccessKey" - | "awsSecretKey" - | "awsSessionToken" - | "openAiApiKey" - | "geminiApiKey" - | "openAiNativeApiKey" - | "deepSeekApiKey" - | "mistralApiKey" - | "unboundApiKey" - | "requestyApiKey" - | "xaiApiKey" -> - -type SecretStateRecord = Record, undefined> - -const secretStateRecord: SecretStateRecord = { - apiKey: undefined, - glamaApiKey: undefined, - openRouterApiKey: undefined, - awsAccessKey: undefined, - awsSecretKey: undefined, - awsSessionToken: undefined, - openAiApiKey: undefined, - geminiApiKey: undefined, - openAiNativeApiKey: undefined, - deepSeekApiKey: undefined, - mistralApiKey: undefined, - unboundApiKey: undefined, - requestyApiKey: undefined, - xaiApiKey: undefined, -} - -export const SECRET_STATE_KEYS = Object.keys(secretStateRecord) as Keys[] - -export const isSecretStateKey = (key: string): key is Keys => - SECRET_STATE_KEYS.includes(key as Keys) - -/** - * GlobalState - */ - -export type GlobalState = Omit> - -export const GLOBAL_STATE_KEYS = [...GLOBAL_SETTINGS_KEYS, ...PROVIDER_SETTINGS_KEYS].filter( - (key: Keys) => !SECRET_STATE_KEYS.includes(key as Keys), -) as Keys[] - -export const isGlobalStateKey = (key: string): key is Keys => - GLOBAL_STATE_KEYS.includes(key as Keys) - -/** - * ClineAsk - */ - -export const clineAsks = [ - "followup", - "command", - "command_output", - "completion_result", - "tool", - "api_req_failed", - "resume_task", - "resume_completed_task", - "mistake_limit_reached", - "auto_approval_max_req_reached", - "browser_action_launch", - "use_mcp_server", -] as const - -export const clineAskSchema = z.enum(clineAsks) - -export type ClineAsk = z.infer - -// ClineSay - -export const clineSays = [ - "error", - "api_req_started", - "api_req_finished", - "api_req_retried", - "api_req_retry_delayed", - "api_req_deleted", - "text", - "reasoning", - "completion_result", - "user_feedback", - "user_feedback_diff", - "command_output", - "shell_integration_warning", - "browser_action", - "browser_action_result", - "mcp_server_request_started", - "mcp_server_response", - "subtask_result", - "checkpoint_saved", - "rooignore_error", - "diff_error", - "condense_context", -] as const - -export const clineSaySchema = z.enum(clineSays) - -export type ClineSay = z.infer - -/** - * ToolProgressStatus - */ - -export const toolProgressStatusSchema = z.object({ - id: z.string().optional(), - icon: z.string().optional(), - text: z.string().optional(), -}) - -export type ToolProgressStatus = z.infer - -/** - * ContextCondense - */ - -export const contextCondenseSchema = z.object({ - cost: z.number(), - prevContextTokens: z.number(), - newContextTokens: z.number(), -}) - -export type ContextCondense = z.infer - -/** - * ClineMessage - */ - -export const clineMessageSchema = z.object({ - ts: z.number(), - type: z.union([z.literal("ask"), z.literal("say")]), - ask: clineAskSchema.optional(), - say: clineSaySchema.optional(), - text: z.string().optional(), - images: z.array(z.string()).optional(), - partial: z.boolean().optional(), - reasoning: z.string().optional(), - conversationHistoryIndex: z.number().optional(), - checkpoint: z.record(z.string(), z.unknown()).optional(), - progressStatus: toolProgressStatusSchema.optional(), - contextCondense: contextCondenseSchema.optional(), -}) - -export type ClineMessage = z.infer - -/** - * TokenUsage - */ - -export const tokenUsageSchema = z.object({ - totalTokensIn: z.number(), - totalTokensOut: z.number(), - totalCacheWrites: z.number().optional(), - totalCacheReads: z.number().optional(), - totalCost: z.number(), - contextTokens: z.number(), -}) - -export type TokenUsage = z.infer - -/** - * ToolName - */ - -export const toolNames = [ - "execute_command", - "read_file", - "write_to_file", - "apply_diff", - "insert_content", - "search_and_replace", - "search_files", - "list_files", - "list_code_definition_names", - "browser_action", - "use_mcp_tool", - "access_mcp_resource", - "ask_followup_question", - "attempt_completion", - "switch_mode", - "new_task", - "fetch_instructions", -] as const - -export const toolNamesSchema = z.enum(toolNames) - -export type ToolName = z.infer - -/** - * ToolUsage - */ - -export const toolUsageSchema = z.record( - toolNamesSchema, - z.object({ - attempts: z.number(), - failures: z.number(), - }), -) - -export type ToolUsage = z.infer - -/** - * RooCodeEvent - */ - -export enum RooCodeEventName { - Connect = "connect", - Message = "message", - TaskCreated = "taskCreated", - TaskStarted = "taskStarted", - TaskModeSwitched = "taskModeSwitched", - TaskPaused = "taskPaused", - TaskUnpaused = "taskUnpaused", - TaskAskResponded = "taskAskResponded", - TaskAborted = "taskAborted", - TaskSpawned = "taskSpawned", - TaskCompleted = "taskCompleted", - TaskTokenUsageUpdated = "taskTokenUsageUpdated", - TaskToolFailed = "taskToolFailed", -} - -export const rooCodeEventsSchema = z.object({ - [RooCodeEventName.Message]: z.tuple([ - z.object({ - taskId: z.string(), - action: z.union([z.literal("created"), z.literal("updated")]), - message: clineMessageSchema, - }), - ]), - [RooCodeEventName.TaskCreated]: z.tuple([z.string()]), - [RooCodeEventName.TaskStarted]: z.tuple([z.string()]), - [RooCodeEventName.TaskModeSwitched]: z.tuple([z.string(), z.string()]), - [RooCodeEventName.TaskPaused]: z.tuple([z.string()]), - [RooCodeEventName.TaskUnpaused]: z.tuple([z.string()]), - [RooCodeEventName.TaskAskResponded]: z.tuple([z.string()]), - [RooCodeEventName.TaskAborted]: z.tuple([z.string()]), - [RooCodeEventName.TaskSpawned]: z.tuple([z.string(), z.string()]), - [RooCodeEventName.TaskCompleted]: z.tuple([z.string(), tokenUsageSchema, toolUsageSchema]), - [RooCodeEventName.TaskTokenUsageUpdated]: z.tuple([z.string(), tokenUsageSchema]), - [RooCodeEventName.TaskToolFailed]: z.tuple([z.string(), toolNamesSchema, z.string()]), -}) - -export type RooCodeEvents = z.infer diff --git a/evals/packages/types/src/utils.ts b/evals/packages/types/src/utils.ts deleted file mode 100644 index e7d93b77ac..0000000000 --- a/evals/packages/types/src/utils.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type Keys = keyof T - -export type Values = T[keyof T] - -export type Equals = (() => T extends X ? 1 : 2) extends () => T extends Y ? 1 : 2 ? true : false - -export type AssertEqual = T diff --git a/evals/packages/types/tsconfig.json b/evals/packages/types/tsconfig.json deleted file mode 100644 index 48fa99573e..0000000000 --- a/evals/packages/types/tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "@evals/typescript-config/base.json", - "include": ["src"], - "exclude": ["node_modules"] -} diff --git a/evals/scripts/setup.sh b/evals/scripts/setup.sh deleted file mode 100755 index e451d94636..0000000000 --- a/evals/scripts/setup.sh +++ /dev/null @@ -1,356 +0,0 @@ -#!/bin/bash - -menu() { - echo -e "\nšŸ“‹ Which eval types would you like to support?\n" - - for i in ${!options[@]}; do - printf " %d) %-6s [%s]" $((i + 1)) "${options[i]}" "${choices[i]:- }" - - if [[ $i == 0 ]]; then - printf " (required)" - fi - - printf "\n" - done - - echo -e " q) quit\n" -} - -has_asdf_plugin() { - local plugin="$1" - case "$plugin" in - nodejs|python|golang|rust) echo "true" ;; - *) echo "false" ;; - esac -} - -build_extension() { - echo "šŸ”Ø Building the Roo Code extension..." - cd .. - mkdir -p bin - pnpm build -- --out ../bin/roo-code-$(git rev-parse --short HEAD).vsix || exit 1 - code --install-extension bin/roo-code-$(git rev-parse --short HEAD).vsix || exit 1 - cd evals -} - -if [[ "$(uname -s)" != "Darwin" ]]; then - echo "āš ļø Only macOS is currently supported." - exit 1 -fi - -options=("nodejs" "python" "golang" "rust" "java") -binaries=("node" "python" "go" "rustc" "javac") - -for i in "${!options[@]}"; do - choices[i]="*" -done - -prompt="Type 1-5 to select, 'q' to quit, āŽ to continue: " - -while menu && read -rp "$prompt" num && [[ "$num" ]]; do - [[ "$num" == "q" ]] && exit 0 - - [[ "$num" != *[![:digit:]]* ]] && - ((num > 1 && num <= ${#options[@]})) || - { - continue - } - - ((num--)) - [[ "${choices[num]}" ]] && choices[num]="" || choices[num]="*" -done - -empty=true - -for i in ${!options[@]}; do - [[ "${choices[i]}" ]] && { - empty=false - break - } -done - -[[ "$empty" == true ]] && exit 0 - -printf "\n" - -if ! command -v brew &>/dev/null; then - if [[ -f "/opt/homebrew/bin/brew" ]]; then - echo "āš ļø Homebrew is installed but not in your PATH" - exit 1 - fi - - read -p "šŸŗ Homebrew (https://brew.sh) is required. Install it? (Y/n): " install_brew - - if [[ "$install_brew" =~ ^[Yy]|^$ ]]; then - echo "šŸŗ Installing Homebrew..." - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" || exit 1 - # Can be undone with: - # /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)" && sudo rm -rvf /opt/homebrew - - if [[ "$SHELL" == "/bin/zsh" ]] && ! grep -q 'eval "$(/opt/homebrew/bin/brew shellenv)"' ~/.zprofile; then - echo '[[ -s "/opt/homebrew/bin/brew" ]] && eval "$(/opt/homebrew/bin/brew shellenv)"' >>~/.zprofile - elif [[ "$SHELL" == "/bin/bash" ]] && ! grep -q 'eval "$(/opt/homebrew/bin/brew shellenv)"' ~/.bash_profile; then - echo '[[ -s "/opt/homebrew/bin/brew" ]] && eval "$(/opt/homebrew/bin/brew shellenv)"' >>~/.bash_profile - fi - - if [[ "$SHELL" == "/bin/zsh" ]]; then - eval "$(/opt/homebrew/bin/brew shellenv)" - elif [[ "$SHELL" == "/bin/bash" ]]; then - eval "$(/opt/homebrew/bin/brew shellenv)" - fi - - BREW_VERSION=$(brew --version) - echo "āœ… Homebrew is installed ($BREW_VERSION)" - else - exit 1 - fi -else - BREW_VERSION=$(brew --version) - echo "āœ… Homebrew is installed ($BREW_VERSION)" -fi - -ASDF_PATH="$(brew --prefix asdf)/libexec/asdf.sh" - -if ! command -v asdf &>/dev/null; then - if [[ -f "$ASDF_PATH" ]]; then - echo "āš ļø asdf is installed but not in your PATH" - exit 1 - fi - - read -p "šŸ› ļø asdf (https://asdf-vm.com) is required. Install it? (Y/n): " install_asdf - - if [[ "$install_asdf" =~ ^[Yy]|^$ ]]; then - echo "šŸ› ļø Installing asdf..." - brew install asdf || exit 1 - # Can be undone with: - # brew uninstall asdf - # rm -rvf ~/.asdf - - . "$ASDF_PATH" - - if [[ "$SHELL" == "/bin/zsh" ]] && ! grep -q 'source "$(brew --prefix asdf)/libexec/asdf.sh"' ~/.zshrc; then - echo '[[ -s "/opt/homebrew/bin/brew" ]] && [[ -s "$(brew --prefix asdf)/libexec/asdf.sh" ]] && source "$(brew --prefix asdf)/libexec/asdf.sh"' >>~/.zprofile - elif [[ "$SHELL" == "/bin/bash" ]] && ! grep -q 'source "$(brew --prefix asdf)/libexec/asdf.sh"' ~/.bash_profile; then - echo '[[ -s "/opt/homebrew/bin/brew" ]] && [[ -s "$(brew --prefix asdf)/libexec/asdf.sh" ]] && source "$(brew --prefix asdf)/libexec/asdf.sh"' >>~/.bash_profile - fi - - ASDF_VERSION=$(asdf --version) - echo "āœ… asdf is installed ($ASDF_VERSION)" - else - exit 1 - fi -else - ASDF_VERSION=$(asdf --version) - echo "āœ… asdf is installed ($ASDF_VERSION)" - . "$ASDF_PATH" -fi - -if ! command -v gh &>/dev/null; then - read -p "šŸ‘Øā€šŸ’» GitHub cli is needed to submit evals results. Install it? (Y/n): " install_gh - - if [[ "$install_gh" =~ ^[Yy]|^$ ]]; then - brew install gh || exit 1 - GH_VERSION=$(gh --version | head -n 1) - echo "āœ… gh is installed ($GH_VERSION)" - gh auth status || gh auth login -w -p https - fi -else - GH_VERSION=$(gh --version | head -n 1) - echo "āœ… gh is installed ($GH_VERSION)" -fi - -for i in "${!options[@]}"; do - [[ "${choices[i]}" ]] || continue - - plugin="${options[$i]}" - binary="${binaries[$i]}" - - if [[ "$(has_asdf_plugin "$plugin")" == "true" ]]; then - if ! asdf plugin list | grep -q "^${plugin}$" && ! command -v "${binary}" &>/dev/null; then - echo "šŸ“¦ Installing ${plugin} asdf plugin..." - asdf plugin add "${plugin}" || exit 1 - echo "āœ… asdf ${plugin} plugin installed successfully" - fi - fi - - case "${plugin}" in - "nodejs") - if ! command -v node &>/dev/null; then - asdf install nodejs 20.19.2 || exit 1 - asdf set nodejs 20.19.2 || exit 1 - NODE_VERSION=$(node --version) - echo "āœ… Node.js is installed ($NODE_VERSION)" - else - NODE_VERSION=$(node --version) - echo "āœ… Node.js is installed ($NODE_VERSION)" - fi - - if [[ $(node --version) != "v20.19.2" ]]; then - NODE_VERSION=$(node --version) - echo "🚨 You have the wrong version of node installed ($NODE_VERSION)." - echo "šŸ’” If you are using nvm then run 'nvm install' to install the version specified by the repo's .nvmrc." - exit 1 - fi - ;; - - "python") - if ! command -v python &>/dev/null; then - asdf install python 3.13.2 || exit 1 - asdf set python 3.13.2 || exit 1 - PYTHON_VERSION=$(python --version) - echo "āœ… Python is installed ($PYTHON_VERSION)" - else - PYTHON_VERSION=$(python --version) - echo "āœ… Python is installed ($PYTHON_VERSION)" - fi - - if ! command -v uv &>/dev/null; then - brew install uv || exit 1 - UV_VERSION=$(uv --version) - echo "āœ… uv is installed ($UV_VERSION)" - else - UV_VERSION=$(uv --version) - echo "āœ… uv is installed ($UV_VERSION)" - fi - ;; - - "golang") - if ! command -v go &>/dev/null; then - asdf install golang 1.24.2 || exit 1 - asdf set golang 1.24.2 || exit 1 - GO_VERSION=$(go version) - echo "āœ… Go is installed ($GO_VERSION)" - else - GO_VERSION=$(go version) - echo "āœ… Go is installed ($GO_VERSION)" - fi - ;; - - "rust") - if ! command -v rustc &>/dev/null; then - asdf install rust 1.85.1 || exit 1 - asdf set rust 1.85.1 || exit 1 - RUST_VERSION=$(rustc --version) - echo "āœ… Rust is installed ($RUST_VERSION)" - else - RUST_VERSION=$(rustc --version) - echo "āœ… Rust is installed ($RUST_VERSION)" - fi - ;; - - "java") - if ! command -v javac &>/dev/null || ! javac --version &>/dev/null; then - echo "ā˜• Installing Java..." - brew install openjdk@17 || exit 1 - - export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH" - - if [[ "$SHELL" == "/bin/zsh" ]] && ! grep -q 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' ~/.zprofile; then - echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zprofile - elif [[ "$SHELL" == "/bin/bash" ]] && ! grep -q 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' ~/.bash_profile; then - echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.bash_profile - fi - - JAVA_VERSION=$(javac --version | head -n 1) - echo "āœ… Java is installed ($JAVA_VERSION)" - else - JAVA_VERSION=$(javac --version | head -n 1) - echo "āœ… Java is installed ($JAVA_VERSION)" - fi - ;; - esac -done - -if ! command -v pnpm &>/dev/null; then - brew install pnpm || exit 1 - PNPM_VERSION=$(pnpm --version) - echo "āœ… pnpm is installed ($PNPM_VERSION)" -else - PNPM_VERSION=$(pnpm --version) - echo "āœ… pnpm is installed ($PNPM_VERSION)" -fi - -pnpm install --silent || exit 1 - -if ! command -v code &>/dev/null; then - echo "āš ļø Visual Studio Code cli is not installed" - exit 1 -else - VSCODE_VERSION=$(code --version | head -n 1) - echo "āœ… Visual Studio Code is installed ($VSCODE_VERSION)" -fi - -# To reset VSCode: -# rm -rvf ~/.vscode && rm -rvf ~/Library/Application\ Support/Code - -echo -n "šŸ”Œ Installing Visual Studio Code extensions... " -code --install-extension golang.go &>/dev/null || exit 1 -code --install-extension dbaeumer.vscode-eslint&>/dev/null || exit 1 -code --install-extension redhat.java &>/dev/null || exit 1 -code --install-extension ms-python.python&>/dev/null || exit 1 -code --install-extension rust-lang.rust-analyzer &>/dev/null || exit 1 - -if ! code --list-extensions 2>/dev/null | grep -q "RooVeterinaryInc.roo-cline"; then - code --install-extension RooVeterinaryInc.roo-cline &>/dev/null || exit 1 -fi - -echo "āœ… Done" - -if [[ ! -d "../../evals" ]]; then - echo -n "šŸ”— Cloning evals repository... " - - if gh auth status &>/dev/null; then - gh repo clone cte/evals ../../evals || exit 1 - else - git clone https://github.com/cte/evals.git ../../evals || exit 1 - fi - - echo "āœ… Done" -else - echo -n "šŸ”„ Updating evals repository... " - - (cd ../../evals && \ - git checkout -f &>/dev/null && \ - git clean -f -d &>/dev/null && \ - git checkout main &>/dev/null && \ - git pull &>/dev/null) || { echo "āŒ Failed to update evals repository."; exit 1; } - - echo "āœ… Done" -fi - -if [[ ! -s .env ]]; then - cp .env.sample .env || exit 1 -fi - -echo -n "šŸ—„ļø Syncing Roo Code evals database... " -pnpm --filter @evals/db db:push &>/dev/null || exit 1 -pnpm --filter @evals/db db:enable-wal &>/dev/null || exit 1 -echo "āœ… Done" - -if ! grep -q "OPENROUTER_API_KEY" .env; then - read -p "šŸ” Enter your OpenRouter API key (sk-or-v1-...): " openrouter_api_key - echo "šŸ”‘ Validating..." - curl --silent --fail https://openrouter.ai/api/v1/key -H "Authorization: Bearer $openrouter_api_key" &>/dev/null || exit 1 - echo "OPENROUTER_API_KEY=$openrouter_api_key" >> .env || exit 1 -fi - -current_version=$(code --list-extensions --show-versions 2>/dev/null | grep roo) -read -p "šŸ’» Do you want to build a new version of the Roo Code extension? [currently $current_version] (y/N): " build_extension - -if [[ "$build_extension" =~ ^[Yy]$ ]]; then - build_extension -fi - -echo -e "\nšŸš€ You're ready to rock and roll! \n" - -if ! nc -z localhost 3000; then - read -p "🌐 Would you like to start the evals web app? (Y/n): " start_evals - - if [[ "$start_evals" =~ ^[Yy]|^$ ]]; then - pnpm web - else - echo "šŸ’” You can start it anytime with 'pnpm web'." - fi -else - echo "šŸ‘Ÿ The evals web app is running at http://localhost:3000" -fi diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 09ebf6ae25..3cf2c70e81 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,6 +99,133 @@ importers: specifier: workspace:^ version: link:../../packages/build + apps/web-evals: + dependencies: + '@hookform/resolvers': + specifier: ^4.1.3 + version: 4.1.3(react-hook-form@7.57.0(react@19.1.0)) + '@radix-ui/react-alert-dialog': + specifier: ^1.1.7 + version: 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dialog': + specifier: ^1.1.6 + version: 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dropdown-menu': + specifier: ^2.1.7 + version: 2.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-label': + specifier: ^2.1.2 + version: 2.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popover': + specifier: ^1.1.6 + version: 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-scroll-area': + specifier: ^1.2.3 + version: 1.2.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-select': + specifier: ^2.1.6 + version: 2.2.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-separator': + specifier: ^1.1.2 + version: 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slider': + specifier: ^1.2.4 + version: 1.3.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': + specifier: ^1.1.2 + version: 1.2.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-tabs': + specifier: ^1.1.3 + version: 1.1.12(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-tooltip': + specifier: ^1.1.8 + version: 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@roo-code/evals': + specifier: workspace:^ + version: link:../../packages/evals + '@roo-code/types': + specifier: workspace:^ + version: link:../../packages/types + '@tanstack/react-query': + specifier: ^5.69.0 + version: 5.76.1(react@19.1.0) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + cmdk: + specifier: ^1.1.0 + version: 1.1.1(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + fuzzysort: + specifier: ^3.1.0 + version: 3.1.0 + lucide-react: + specifier: ^0.511.0 + version: 0.511.0(react@19.1.0) + next: + specifier: 15.3.3 + version: 15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + p-map: + specifier: ^7.0.3 + version: 7.0.3 + ps-tree: + specifier: ^1.2.0 + version: 1.2.0 + react: + specifier: ^19.0.0 + version: 19.1.0 + react-dom: + specifier: ^19.0.0 + version: 19.1.0(react@19.1.0) + react-hook-form: + specifier: ^7.54.2 + version: 7.57.0(react@19.1.0) + react-use: + specifier: ^17.6.0 + version: 17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + sonner: + specifier: ^2.0.2 + version: 2.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + tailwind-merge: + specifier: ^3.0.2 + version: 3.3.0 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@4.1.6) + vaul: + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + zod: + specifier: ^3.24.2 + version: 3.24.4 + devDependencies: + '@roo-code/config-eslint': + specifier: workspace:^ + version: link:../../packages/config-eslint + '@roo-code/config-typescript': + specifier: workspace:^ + version: link:../../packages/config-typescript + '@tailwindcss/postcss': + specifier: ^4 + version: 4.1.8 + '@types/ps-tree': + specifier: ^1.1.6 + version: 1.1.6 + '@types/react': + specifier: ^19 + version: 19.1.6 + '@types/react-dom': + specifier: ^19 + version: 19.1.5(@types/react@19.1.6) + tailwindcss: + specifier: ^4 + version: 4.1.6 + packages/build: dependencies: zod: @@ -116,7 +243,7 @@ importers: version: 22.15.20 vitest: specifier: ^3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) packages/cloud: dependencies: @@ -147,7 +274,7 @@ importers: version: 1.100.0 vitest: specifier: ^3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) packages/config-eslint: devDependencies: @@ -184,6 +311,61 @@ importers: packages/config-typescript: {} + packages/evals: + dependencies: + '@roo-code/types': + specifier: workspace:^ + version: link:../types + drizzle-orm: + specifier: ^0.44.1 + version: 0.44.1 + drizzle-zod: + specifier: ^0.8.2 + version: 0.8.2(drizzle-orm@0.44.1)(zod@3.24.4) + execa: + specifier: ^9.5.2 + version: 9.5.3 + gluegun: + specifier: ^5.2.0 + version: 5.2.0 + node-ipc: + specifier: ^12.0.0 + version: 12.0.0 + p-map: + specifier: ^7.0.3 + version: 7.0.3 + p-wait-for: + specifier: ^5.0.2 + version: 5.0.2 + ps-tree: + specifier: ^1.2.0 + version: 1.2.0 + zod: + specifier: ^3.24.2 + version: 3.24.4 + devDependencies: + '@roo-code/config-eslint': + specifier: workspace:^ + version: link:../config-eslint + '@roo-code/config-typescript': + specifier: workspace:^ + version: link:../config-typescript + '@types/node': + specifier: ^22.15.20 + version: 22.15.20 + '@types/node-ipc': + specifier: ^9.2.3 + version: 9.2.3 + '@types/ps-tree': + specifier: ^1.1.6 + version: 1.1.6 + drizzle-kit: + specifier: ^0.31.1 + version: 0.31.1 + vitest: + specifier: ^3.1.3 + version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) + packages/telemetry: dependencies: '@roo-code/types': @@ -210,7 +392,7 @@ importers: version: 1.100.0 vitest: specifier: ^3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) packages/types: dependencies: @@ -232,7 +414,7 @@ importers: version: 8.5.0(jiti@2.4.2)(postcss@8.5.3)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.8.0) vitest: specifier: ^3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) src: dependencies: @@ -542,7 +724,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@20.17.50)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + version: 3.1.3(@types/debug@4.1.12)(@types/node@20.17.50)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) zod-to-ts: specifier: ^1.2.0 version: 1.2.0(typescript@5.8.3)(zod@3.24.4) @@ -596,7 +778,7 @@ importers: version: link:../packages/types '@tailwindcss/vite': specifier: ^4.0.0 - version: 4.1.6(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0)) + version: 4.1.6(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0)) '@tanstack/react-query': specifier: ^5.68.0 version: 5.76.1(react@18.3.1) @@ -744,7 +926,7 @@ importers: version: 8.6.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3) '@storybook/react-vite': specifier: ^8.5.6 - version: 8.6.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.40.2)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0)) + version: 8.6.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.40.2)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -777,7 +959,7 @@ importers: version: 1.57.5 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.4.1(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0)) + version: 4.4.1(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0)) identity-obj-proxy: specifier: ^3.0.0 version: 3.0.0 @@ -804,13 +986,17 @@ importers: version: 5.8.3 vite: specifier: 6.3.5 - version: 6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + version: 6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) packages: '@adobe/css-tools@4.4.2': resolution: {integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==} + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -1276,12 +1462,18 @@ packages: resolution: {integrity: sha512-j1QImCqf/XJmhIjC1OPpgiZV9g370HG9MNT9s/CDwCKsoYzNCPEKK+GfsidahJx7yIlBbm+4dPLlGec+bKn7oA==} hasBin: true + '@drizzle-team/brocli@0.10.2': + resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} + '@ecies/ciphers@0.2.3': resolution: {integrity: sha512-tapn6XhOueMwht3E2UzY0ZZjYokdaw9XtL9kEyjhQ/Fb9vL9xTFbOaI+fV0AWvTpYu4BNloC6getKW6NtSg4mA==} engines: {bun: '>=1', deno: '>=2', node: '>=16'} peerDependencies: '@noble/ciphers': ^1.0.0 + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emotion/is-prop-valid@1.2.2': resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} @@ -1291,6 +1483,14 @@ packages: '@emotion/unitless@0.8.1': resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + '@esbuild-kit/core-utils@3.3.2': + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + deprecated: 'Merged into tsx: https://tsx.is' + + '@esbuild-kit/esm-loader@2.6.5': + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + deprecated: 'Merged into tsx: https://tsx.is' + '@esbuild/aix-ppc64@0.25.4': resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} engines: {node: '>=18'} @@ -1303,6 +1503,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.25.4': resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} engines: {node: '>=18'} @@ -1315,6 +1521,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.25.4': resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} engines: {node: '>=18'} @@ -1327,6 +1539,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.25.4': resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} engines: {node: '>=18'} @@ -1339,6 +1557,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.25.4': resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} engines: {node: '>=18'} @@ -1351,6 +1575,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.25.4': resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} engines: {node: '>=18'} @@ -1363,6 +1593,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.25.4': resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} engines: {node: '>=18'} @@ -1375,6 +1611,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.25.4': resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} engines: {node: '>=18'} @@ -1387,6 +1629,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.25.4': resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} engines: {node: '>=18'} @@ -1399,6 +1647,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.25.4': resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} engines: {node: '>=18'} @@ -1411,6 +1665,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.25.4': resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} engines: {node: '>=18'} @@ -1423,6 +1683,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.25.4': resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} engines: {node: '>=18'} @@ -1435,6 +1701,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.25.4': resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} engines: {node: '>=18'} @@ -1447,6 +1719,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.25.4': resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} engines: {node: '>=18'} @@ -1459,6 +1737,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.25.4': resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} engines: {node: '>=18'} @@ -1471,6 +1755,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.25.4': resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} engines: {node: '>=18'} @@ -1483,6 +1773,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.25.4': resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} engines: {node: '>=18'} @@ -1507,6 +1803,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.25.4': resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} engines: {node: '>=18'} @@ -1531,6 +1833,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.25.4': resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} engines: {node: '>=18'} @@ -1543,6 +1851,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.25.4': resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} engines: {node: '>=18'} @@ -1555,6 +1869,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.25.4': resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} engines: {node: '>=18'} @@ -1567,6 +1887,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.25.4': resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} engines: {node: '>=18'} @@ -1579,6 +1905,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.25.4': resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} engines: {node: '>=18'} @@ -1652,6 +1984,11 @@ packages: resolution: {integrity: sha512-eaEncWt875H7046T04mOpxpHJUM+jLIljEf+5QctRyOeChylE/nhpwm1bZWTRWoOu/t46R9r+PmgsJFhTpE7tQ==} engines: {node: '>=18.0.0'} + '@hookform/resolvers@4.1.3': + resolution: {integrity: sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==} + peerDependencies: + react-hook-form: ^7.0.0 + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -1678,6 +2015,122 @@ packages: '@iconify/utils@2.3.0': resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} + '@img/sharp-darwin-arm64@0.34.2': + resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.2': + resolution: {integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.1.0': + resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.1.0': + resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.1.0': + resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.1.0': + resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.1.0': + resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.1.0': + resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.1.0': + resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.2': + resolution: {integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.2': + resolution: {integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.34.2': + resolution: {integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.2': + resolution: {integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.2': + resolution: {integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.2': + resolution: {integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.2': + resolution: {integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.2': + resolution: {integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.2': + resolution: {integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.2': + resolution: {integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1842,9 +2295,60 @@ packages: resolution: {integrity: sha512-qFlpmObPqeUs4u3oFYv/OM/xyX+pNa5TRAjqjvMhbGYlyMhzSrE5UfncL2rUcEeVfD9Gebgff73hPwqcOwJQNA==} engines: {node: '>=18'} + '@next/env@15.3.3': + resolution: {integrity: sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==} + '@next/eslint-plugin-next@15.3.2': resolution: {integrity: sha512-ijVRTXBgnHT33aWnDtmlG+LJD+5vhc9AKTJPquGG5NKXjpKNjc62woIhFtrAcWdBobt8kqjCoaJ0q6sDQoX7aQ==} + '@next/swc-darwin-arm64@15.3.3': + resolution: {integrity: sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@15.3.3': + resolution: {integrity: sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@15.3.3': + resolution: {integrity: sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@15.3.3': + resolution: {integrity: sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@15.3.3': + resolution: {integrity: sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@15.3.3': + resolution: {integrity: sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@15.3.3': + resolution: {integrity: sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@15.3.3': + resolution: {integrity: sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@noble/ciphers@1.3.0': resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} engines: {node: ^14.21.3 || >=16} @@ -1973,6 +2477,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-compose-refs@1.1.2': resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: @@ -2075,6 +2592,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-label@2.1.7': + resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-menu@2.1.14': resolution: {integrity: sha512-0zSiBAIFq9GSKoSH5PdEaQeRB3RnEGxC+H2P0egtnKoKKLNBH8VBHyVO6/jskhjAezhOIplyRUj7U2lds9A+Yg==} peerDependencies: @@ -2153,6 +2683,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-progress@1.1.6': resolution: {integrity: sha512-QzN9a36nKk2eZKMf9EBCia35x3TT+SOgZuzQBVIHyRrmYYi73VYBRK3zKwdJ6az/F5IZ6QlacGJBg7zfB85liA==} peerDependencies: @@ -2166,6 +2709,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-roving-focus@1.1.10': + resolution: {integrity: sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-roving-focus@1.1.9': resolution: {integrity: sha512-ZzrIFnMYHHCNqSNCsuN6l7wlewBEq0O0BCSBkabJMFXVO51LRUTq71gLP1UxFvmrXElqmPjA5VX7IqC9VpazAQ==} peerDependencies: @@ -2179,6 +2735,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-scroll-area@1.2.9': + resolution: {integrity: sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-select@2.2.4': resolution: {integrity: sha512-/OOm58Gil4Ev5zT8LyVzqfBcij4dTHYdeyuF5lMHZ2bIp0Lk9oETocYiJ5QC0dHekEQnK6L/FNJCceeb4AkZ6Q==} peerDependencies: @@ -2227,6 +2796,28 @@ packages: '@types/react': optional: true + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-tabs@1.1.12': + resolution: {integrity: sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-tooltip@1.2.6': resolution: {integrity: sha512-zYb+9dc9tkoN2JjBDIIPLQtk3gGyz8FMKoqYTb8EMVQ5a5hBcdHPECrsZVI4NpPAUOixhkoqg7Hj5ry5USowfA==} peerDependencies: @@ -2786,6 +3377,9 @@ packages: resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} engines: {node: '>=18.0.0'} + '@standard-schema/utils@0.3.0': + resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + '@storybook/addon-actions@8.6.12': resolution: {integrity: sha512-B5kfiRvi35oJ0NIo53CGH66H471A3XTzrfaa6SxXEJsgxxSeKScG5YeXcCvLiZfvANRQ7QDsmzPUgg0o3hdMXw==} peerDependencies: @@ -2937,65 +3531,140 @@ packages: peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@tailwindcss/node@4.1.6': resolution: {integrity: sha512-ed6zQbgmKsjsVvodAS1q1Ld2BolEuxJOSyyNc+vhkjdmfNUDCmQnlXBfQkHrlzNmslxHsQU/bFmzcEbv4xXsLg==} + '@tailwindcss/node@4.1.8': + resolution: {integrity: sha512-OWwBsbC9BFAJelmnNcrKuf+bka2ZxCE2A4Ft53Tkg4uoiE67r/PMEYwCsourC26E+kmxfwE0hVzMdxqeW+xu7Q==} + '@tailwindcss/oxide-android-arm64@4.1.6': resolution: {integrity: sha512-VHwwPiwXtdIvOvqT/0/FLH/pizTVu78FOnI9jQo64kSAikFSZT7K4pjyzoDpSMaveJTGyAKvDjuhxJxKfmvjiQ==} engines: {node: '>= 10'} cpu: [arm64] os: [android] + '@tailwindcss/oxide-android-arm64@4.1.8': + resolution: {integrity: sha512-Fbz7qni62uKYceWYvUjRqhGfZKwhZDQhlrJKGtnZfuNtHFqa8wmr+Wn74CTWERiW2hn3mN5gTpOoxWKk0jRxjg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + '@tailwindcss/oxide-darwin-arm64@4.1.6': resolution: {integrity: sha512-weINOCcqv1HVBIGptNrk7c6lWgSFFiQMcCpKM4tnVi5x8OY2v1FrV76jwLukfT6pL1hyajc06tyVmZFYXoxvhQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] + '@tailwindcss/oxide-darwin-arm64@4.1.8': + resolution: {integrity: sha512-RdRvedGsT0vwVVDztvyXhKpsU2ark/BjgG0huo4+2BluxdXo8NDgzl77qh0T1nUxmM11eXwR8jA39ibvSTbi7A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + '@tailwindcss/oxide-darwin-x64@4.1.6': resolution: {integrity: sha512-3FzekhHG0ww1zQjQ1lPoq0wPrAIVXAbUkWdWM8u5BnYFZgb9ja5ejBqyTgjpo5mfy0hFOoMnMuVDI+7CXhXZaQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] + '@tailwindcss/oxide-darwin-x64@4.1.8': + resolution: {integrity: sha512-t6PgxjEMLp5Ovf7uMb2OFmb3kqzVTPPakWpBIFzppk4JE4ix0yEtbtSjPbU8+PZETpaYMtXvss2Sdkx8Vs4XRw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + '@tailwindcss/oxide-freebsd-x64@4.1.6': resolution: {integrity: sha512-4m5F5lpkBZhVQJq53oe5XgJ+aFYWdrgkMwViHjRsES3KEu2m1udR21B1I77RUqie0ZYNscFzY1v9aDssMBZ/1w==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] + '@tailwindcss/oxide-freebsd-x64@4.1.8': + resolution: {integrity: sha512-g8C8eGEyhHTqwPStSwZNSrOlyx0bhK/V/+zX0Y+n7DoRUzyS8eMbVshVOLJTDDC+Qn9IJnilYbIKzpB9n4aBsg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.6': resolution: {integrity: sha512-qU0rHnA9P/ZoaDKouU1oGPxPWzDKtIfX7eOGi5jOWJKdxieUJdVV+CxWZOpDWlYTd4N3sFQvcnVLJWJ1cLP5TA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.8': + resolution: {integrity: sha512-Jmzr3FA4S2tHhaC6yCjac3rGf7hG9R6Gf2z9i9JFcuyy0u79HfQsh/thifbYTF2ic82KJovKKkIB6Z9TdNhCXQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + '@tailwindcss/oxide-linux-arm64-gnu@4.1.6': resolution: {integrity: sha512-jXy3TSTrbfgyd3UxPQeXC3wm8DAgmigzar99Km9Sf6L2OFfn/k+u3VqmpgHQw5QNfCpPe43em6Q7V76Wx7ogIQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@tailwindcss/oxide-linux-arm64-gnu@4.1.8': + resolution: {integrity: sha512-qq7jXtO1+UEtCmCeBBIRDrPFIVI4ilEQ97qgBGdwXAARrUqSn/L9fUrkb1XP/mvVtoVeR2bt/0L77xx53bPZ/Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@tailwindcss/oxide-linux-arm64-musl@4.1.6': resolution: {integrity: sha512-8kjivE5xW0qAQ9HX9reVFmZj3t+VmljDLVRJpVBEoTR+3bKMnvC7iLcoSGNIUJGOZy1mLVq7x/gerVg0T+IsYw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@tailwindcss/oxide-linux-arm64-musl@4.1.8': + resolution: {integrity: sha512-O6b8QesPbJCRshsNApsOIpzKt3ztG35gfX9tEf4arD7mwNinsoCKxkj8TgEE0YRjmjtO3r9FlJnT/ENd9EVefQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@tailwindcss/oxide-linux-x64-gnu@4.1.6': resolution: {integrity: sha512-A4spQhwnWVpjWDLXnOW9PSinO2PTKJQNRmL/aIl2U/O+RARls8doDfs6R41+DAXK0ccacvRyDpR46aVQJJCoCg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@tailwindcss/oxide-linux-x64-gnu@4.1.8': + resolution: {integrity: sha512-32iEXX/pXwikshNOGnERAFwFSfiltmijMIAbUhnNyjFr3tmWmMJWQKU2vNcFX0DACSXJ3ZWcSkzNbaKTdngH6g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@tailwindcss/oxide-linux-x64-musl@4.1.6': resolution: {integrity: sha512-YRee+6ZqdzgiQAHVSLfl3RYmqeeaWVCk796MhXhLQu2kJu2COHBkqlqsqKYx3p8Hmk5pGCQd2jTAoMWWFeyG2A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.6': - resolution: {integrity: sha512-qAp4ooTYrBQ5pk5jgg54/U1rCJ/9FLYOkkQ/nTE+bVMseMfB6O7J8zb19YTpWuu4UdfRf5zzOrNKfl6T64MNrQ==} + '@tailwindcss/oxide-linux-x64-musl@4.1.8': + resolution: {integrity: sha512-s+VSSD+TfZeMEsCaFaHTaY5YNj3Dri8rST09gMvYQKwPphacRG7wbuQ5ZJMIJXN/puxPcg/nU+ucvWguPpvBDg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.6': + resolution: {integrity: sha512-qAp4ooTYrBQ5pk5jgg54/U1rCJ/9FLYOkkQ/nTE+bVMseMfB6O7J8zb19YTpWuu4UdfRf5zzOrNKfl6T64MNrQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-wasm32-wasi@4.1.8': + resolution: {integrity: sha512-CXBPVFkpDjM67sS1psWohZ6g/2/cd+cq56vPxK4JeawelxwK4YECgl9Y9TjkE2qfF+9/s1tHHJqrC4SS6cVvSg==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -3012,16 +3681,35 @@ packages: cpu: [arm64] os: [win32] + '@tailwindcss/oxide-win32-arm64-msvc@4.1.8': + resolution: {integrity: sha512-7GmYk1n28teDHUjPlIx4Z6Z4hHEgvP5ZW2QS9ygnDAdI/myh3HTHjDqtSqgu1BpRoI4OiLx+fThAyA1JePoENA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + '@tailwindcss/oxide-win32-x64-msvc@4.1.6': resolution: {integrity: sha512-5k9xF33xkfKpo9wCvYcegQ21VwIBU1/qEbYlVukfEIyQbEA47uK8AAwS7NVjNE3vHzcmxMYwd0l6L4pPjjm1rQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] + '@tailwindcss/oxide-win32-x64-msvc@4.1.8': + resolution: {integrity: sha512-fou+U20j+Jl0EHwK92spoWISON2OBnCazIc038Xj2TdweYV33ZRkS9nwqiUi2d/Wba5xg5UoHfvynnb/UB49cQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@tailwindcss/oxide@4.1.6': resolution: {integrity: sha512-0bpEBQiGx+227fW4G0fLQ8vuvyy5rsB1YIYNapTq3aRsJ9taF3f5cCaovDjN5pUGKKzcpMrZst/mhNaKAPOHOA==} engines: {node: '>= 10'} + '@tailwindcss/oxide@4.1.8': + resolution: {integrity: sha512-d7qvv9PsM5N3VNKhwVUhpK6r4h9wtLkJ6lz9ZY9aeZgrUWk1Z8VPyqyDT9MZlem7GTGseRQHkeB1j3tC7W1P+A==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.8': + resolution: {integrity: sha512-vB/vlf7rIky+w94aWMw34bWW1ka6g6C3xIOdICKX2GC0VcLtL6fhlLiafF0DVIwa9V6EHz8kbWMkS2s2QvvNlw==} + '@tailwindcss/vite@4.1.6': resolution: {integrity: sha512-zjtqjDeY1w3g2beYQtrMAf51n5G7o+UwmyOjtsDMP7t6XyoRMOidcoKP32ps7AkNOHIXEOK0bhIC05dj8oJp4w==} peerDependencies: @@ -3296,9 +3984,17 @@ packages: peerDependencies: '@types/react': ^18.0.0 + '@types/react-dom@19.1.5': + resolution: {integrity: sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==} + peerDependencies: + '@types/react': ^19.0.0 + '@types/react@18.3.21': resolution: {integrity: sha512-gXLBtmlcRJeT09/sI4PxVwyrku6SaNUj/6cMubjE6T6XdY1fDmBL7r0nX0jbSZPU/Xr0KuwLLZh6aOYY5d91Xw==} + '@types/react@19.1.6': + resolution: {integrity: sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==} + '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} @@ -3576,6 +4272,10 @@ packages: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} + ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -3607,6 +4307,12 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + apisauce@2.1.6: + resolution: {integrity: sha512-MdxR391op/FucS2YQRfB/NMRyCnHEPDd4h17LRIuVYi0BpGmMhpxc0shbOpfs5ahABuBEffNCGal5EcsydbBWg==} + + app-module-path@2.2.0: + resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} + aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} @@ -3688,6 +4394,9 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + axios@0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + axios@1.9.0: resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} @@ -3853,6 +4562,10 @@ packages: peerDependencies: esbuild: '>=0.18' + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -3999,6 +4712,10 @@ packages: class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -4007,10 +4724,17 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-table3@0.6.0: + resolution: {integrity: sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==} + engines: {node: 10.* || >= 12.*} + cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -4022,6 +4746,10 @@ packages: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} @@ -4060,13 +4788,24 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -4163,6 +4902,10 @@ packages: cose-base@2.2.0: resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + cosmiconfig@7.0.1: + resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} + engines: {node: '>=10'} + cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -4175,6 +4918,10 @@ packages: cross-fetch@4.0.0: resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -4468,6 +5215,9 @@ packages: resolution: {integrity: sha512-sPpMZcVhRQ0nEMDtuMJ+RtCxt7iHPAMBU+I4tAlo5dU1sjRpNax0crj6nR3qKpvVnckaQ9U38enXcwW9nZJeCw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -4593,6 +5343,108 @@ packages: resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} + drizzle-kit@0.31.1: + resolution: {integrity: sha512-PUjYKWtzOzPtdtQlTHQG3qfv4Y0XT8+Eas6UbxCmxTj7qgMf+39dDujf1BP1I+qqZtw9uzwTh8jYtkMuCq+B0Q==} + hasBin: true + + drizzle-orm@0.44.1: + resolution: {integrity: sha512-prIWOlwJbiYInvcJxE+IMiJCtMiFVrSUJCwx6AXSJvGOdLu35qZ46QncTZDgloiLNCG0XxTC8agQElSmsl++TA==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=4' + '@electric-sql/pglite': '>=0.2.0' + '@libsql/client': '>=0.10.0' + '@libsql/client-wasm': '>=0.10.0' + '@neondatabase/serverless': '>=0.10.0' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1.13' + '@prisma/client': '*' + '@tidbcloud/serverless': '*' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/sql.js': '*' + '@upstash/redis': '>=1.34.7' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=14.0.0' + gel: '>=2' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + prisma: '*' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@libsql/client-wasm': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@prisma/client': + optional: true + '@tidbcloud/serverless': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/sql.js': + optional: true + '@upstash/redis': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + gel: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + prisma: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + + drizzle-zod@0.8.2: + resolution: {integrity: sha512-9Do/16OjFFNrQDZgvMtxtDDwKWbFOxUAIwNPKX98SfxrP8H18vhN1BvNXbhelLcdgCE7GEaXDJqBjMExSkhpkA==} + peerDependencies: + drizzle-orm: '>=0.36.0' + zod: ^3.25.1 + duck@0.1.12: resolution: {integrity: sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==} @@ -4628,6 +5480,11 @@ packages: engines: {node: '>=0.10.0'} hasBin: true + ejs@3.1.8: + resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} + engines: {node: '>=0.10.0'} + hasBin: true + electron-to-chromium@1.5.152: resolution: {integrity: sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==} @@ -4658,6 +5515,10 @@ packages: resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} + enquirer@2.3.6: + resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + engines: {node: '>=8.6'} + enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -4720,6 +5581,11 @@ packages: peerDependencies: esbuild: '>=0.12 <1' + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.25.4: resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} engines: {node: '>=18'} @@ -5092,6 +5958,9 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} + fs-jetpack@4.3.1: + resolution: {integrity: sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ==} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -5110,6 +5979,9 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + fuzzysort@3.1.0: + resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==} + fzf@0.5.2: resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==} @@ -5234,6 +6106,10 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + gluegun@5.2.0: + resolution: {integrity: sha512-jSUM5xUy2ztYFQANne17OUm/oAd7qSX7EBksS9bQDt9UvLPqcEkeWUebmaposb8Tx7eTTD8uJVWGRe6PYSsYkg==} + hasBin: true + google-auth-library@9.15.1: resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} engines: {node: '>=14'} @@ -5510,6 +6386,9 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} @@ -5609,6 +6488,10 @@ packages: engines: {node: '>=14.16'} hasBin: true + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} @@ -6108,64 +6991,128 @@ packages: cpu: [arm64] os: [darwin] + lightningcss-darwin-arm64@1.30.1: + resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + lightningcss-darwin-x64@1.29.2: resolution: {integrity: sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] + lightningcss-darwin-x64@1.30.1: + resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + lightningcss-freebsd-x64@1.29.2: resolution: {integrity: sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] + lightningcss-freebsd-x64@1.30.1: + resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + lightningcss-linux-arm-gnueabihf@1.29.2: resolution: {integrity: sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] + lightningcss-linux-arm-gnueabihf@1.30.1: + resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + lightningcss-linux-arm64-gnu@1.29.2: resolution: {integrity: sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + lightningcss-linux-arm64-gnu@1.30.1: + resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + lightningcss-linux-arm64-musl@1.29.2: resolution: {integrity: sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + lightningcss-linux-arm64-musl@1.30.1: + resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + lightningcss-linux-x64-gnu@1.29.2: resolution: {integrity: sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + lightningcss-linux-x64-gnu@1.30.1: + resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + lightningcss-linux-x64-musl@1.29.2: resolution: {integrity: sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + lightningcss-linux-x64-musl@1.30.1: + resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + lightningcss-win32-arm64-msvc@1.29.2: resolution: {integrity: sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] + lightningcss-win32-arm64-msvc@1.30.1: + resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + lightningcss-win32-x64-msvc@1.29.2: resolution: {integrity: sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] + lightningcss-win32-x64-msvc@1.30.1: + resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + lightningcss@1.29.2: resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==} engines: {node: '>= 12.0.0'} + lightningcss@1.30.1: + resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} + engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -6204,6 +7151,9 @@ packages: lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -6225,6 +7175,15 @@ packages: lodash.isstring@4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.lowercase@4.3.0: + resolution: {integrity: sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA==} + + lodash.lowerfirst@4.3.1: + resolution: {integrity: sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w==} + lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} @@ -6234,15 +7193,49 @@ packages: lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.pad@4.5.1: + resolution: {integrity: sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==} + + lodash.padend@4.6.1: + resolution: {integrity: sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==} + + lodash.padstart@4.6.1: + resolution: {integrity: sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==} + + lodash.repeat@4.1.0: + resolution: {integrity: sha512-eWsgQW89IewS95ZOcr15HHCX6FVDxq3f2PNUIng3fyzsPev9imFQxIYdFZ6crl8L56UR6ZlGDLcEb3RZsCSSqw==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash.trim@4.5.1: + resolution: {integrity: sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg==} + + lodash.trimend@4.5.1: + resolution: {integrity: sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA==} + + lodash.trimstart@4.5.1: + resolution: {integrity: sha512-b/+D6La8tU76L/61/aN0jULWHkT0EeJCmVstPBn/K9MtD2qBW83AsBNrr63dKuWYwVMO7ucv13QNO/Ek/2RKaQ==} + + lodash.uppercase@4.3.0: + resolution: {integrity: sha512-+Nbnxkj7s8K5U8z6KnEYPGUOGp3woZbB7Ecs7v3LkkjLQSm2kP9SKIILitN1ktn2mB/tmM9oSlku06I+/lH7QA==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@3.0.0: + resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} + engines: {node: '>=8'} + log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -6663,6 +7656,33 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@15.3.3: + resolution: {integrity: sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + nock@14.0.4: resolution: {integrity: sha512-86fh+gIKH8H02+y0/HKAOZZXn6OwgzXvl6JYwfjvKkoKxUWz54wIIDU/+w24xzMvk/R8pNVXOrvTubyl+Ml6cg==} engines: {node: '>=18.20.0 <20 || >=20.12.1'} @@ -6830,6 +7850,10 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@4.0.2: + resolution: {integrity: sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig==} + engines: {node: '>=8'} + ora@8.2.0: resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} @@ -6885,6 +7909,10 @@ packages: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + p-timeout@6.1.4: resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} engines: {node: '>=14.16'} @@ -7048,6 +8076,10 @@ packages: pkg-types@2.1.0: resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + points-on-curve@0.2.0: resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} @@ -7083,6 +8115,10 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.4.49: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} @@ -7254,6 +8290,17 @@ packages: peerDependencies: react: ^18.3.1 + react-dom@19.1.0: + resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + peerDependencies: + react: ^19.1.0 + + react-hook-form@7.57.0: + resolution: {integrity: sha512-RbEks3+cbvTP84l/VXGUZ+JMrKOS8ykQCRYdm5aYsxnDquL0vspsyNhGRO7pcH6hsZqWlPOjLye7rJqdtdAmlg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + react-i18next@15.5.1: resolution: {integrity: sha512-C8RZ7N7H0L+flitiX6ASjq9p5puVJU1Z8VyL3OgM/QOMRf40BMZX+5TkpxzZVcTmOLPX5zlti4InEX5pFyiVeA==} peerDependencies: @@ -7353,6 +8400,10 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + react@19.1.0: + resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + engines: {node: '>=0.10.0'} + read-package-json-fast@4.0.0: resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==} engines: {node: ^18.17.0 || >=20.5.0} @@ -7477,6 +8528,10 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -7488,6 +8543,11 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + rimraf@6.0.1: resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} engines: {node: 20 || >=22} @@ -7559,6 +8619,9 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + screenfull@5.2.0: resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} engines: {node: '>=0.10.0'} @@ -7574,6 +8637,11 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + semver@7.3.5: + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + engines: {node: '>=10'} + hasBin: true + semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} @@ -7623,6 +8691,10 @@ packages: shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + sharp@0.34.2: + resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -7673,6 +8745,9 @@ packages: simple-git@3.27.0: resolution: {integrity: sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==} + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -7704,6 +8779,12 @@ packages: resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + sonner@2.0.5: + resolution: {integrity: sha512-YwbHQO6cSso3HBXlbCkgrgzDNIhws14r4MO87Ofy+cV2X7ES4pOoAK3+veSmVTvqNx1BWUxlhPmZzP00Crk2aQ==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + sound-play@1.1.0: resolution: {integrity: sha512-Bd/L0AoCwITFeOnpNLMsfPXrV5GG5NhrC/T6odveahYbhPZkdTnrFXRia9FCC5WBWdUTw1d+yvLBvi4wnD1xOA==} @@ -7714,6 +8795,9 @@ packages: source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.5.6: resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} engines: {node: '>=0.10.0'} @@ -7793,6 +8877,10 @@ packages: stream-combiner@0.0.4: resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + streamx@2.22.0: resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} @@ -7854,6 +8942,10 @@ packages: stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -7933,6 +9025,19 @@ packages: react: '>= 16.8.0' react-dom: '>= 16.8.0' + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + stylis@4.3.2: resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} @@ -7973,6 +9078,9 @@ packages: tailwind-merge@2.6.0: resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + tailwind-merge@3.3.0: + resolution: {integrity: sha512-fyW/pEfcQSiigd5SNn0nApUOxx0zB/dm6UDU/rEwc2c3sX2smWUNbapHv+QRqLGVp9GWX3THIa7MUGPo+YkDzQ==} + tailwindcss-animate@1.0.7: resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: @@ -7981,6 +9089,9 @@ packages: tailwindcss@4.1.6: resolution: {integrity: sha512-j0cGLTreM6u4OWzBeLBpycK0WIh8w7kSwcUsQZoGLHZ7xDTdM69lN64AgoIEEwFi0tnhs4wSykUa5YWxAzgFYg==} + tailwindcss@4.1.8: + resolution: {integrity: sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og==} + tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -8502,6 +9613,12 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vaul@1.1.2: + resolution: {integrity: sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc + vfile-message@2.0.4: resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} @@ -8630,6 +9747,9 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-namespaces@1.1.4: resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} @@ -8893,6 +10013,8 @@ snapshots: '@adobe/css-tools@4.4.2': {} + '@alloc/quick-lru@5.2.0': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.8 @@ -9874,10 +10996,17 @@ snapshots: picomatch: 4.0.2 which: 4.0.0 + '@drizzle-team/brocli@0.10.2': {} + '@ecies/ciphers@0.2.3(@noble/ciphers@1.3.0)': dependencies: '@noble/ciphers': 1.3.0 + '@emnapi/runtime@1.4.3': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/is-prop-valid@1.2.2': dependencies: '@emotion/memoize': 0.8.1 @@ -9886,102 +11015,160 @@ snapshots: '@emotion/unitless@0.8.1': {} + '@esbuild-kit/core-utils@3.3.2': + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + + '@esbuild-kit/esm-loader@2.6.5': + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.10.0 + '@esbuild/aix-ppc64@0.25.4': optional: true '@esbuild/aix-ppc64@0.25.5': optional: true + '@esbuild/android-arm64@0.18.20': + optional: true + '@esbuild/android-arm64@0.25.4': optional: true '@esbuild/android-arm64@0.25.5': optional: true + '@esbuild/android-arm@0.18.20': + optional: true + '@esbuild/android-arm@0.25.4': optional: true '@esbuild/android-arm@0.25.5': optional: true + '@esbuild/android-x64@0.18.20': + optional: true + '@esbuild/android-x64@0.25.4': optional: true '@esbuild/android-x64@0.25.5': optional: true + '@esbuild/darwin-arm64@0.18.20': + optional: true + '@esbuild/darwin-arm64@0.25.4': optional: true '@esbuild/darwin-arm64@0.25.5': optional: true + '@esbuild/darwin-x64@0.18.20': + optional: true + '@esbuild/darwin-x64@0.25.4': optional: true '@esbuild/darwin-x64@0.25.5': optional: true + '@esbuild/freebsd-arm64@0.18.20': + optional: true + '@esbuild/freebsd-arm64@0.25.4': optional: true '@esbuild/freebsd-arm64@0.25.5': optional: true + '@esbuild/freebsd-x64@0.18.20': + optional: true + '@esbuild/freebsd-x64@0.25.4': optional: true '@esbuild/freebsd-x64@0.25.5': optional: true + '@esbuild/linux-arm64@0.18.20': + optional: true + '@esbuild/linux-arm64@0.25.4': optional: true '@esbuild/linux-arm64@0.25.5': optional: true + '@esbuild/linux-arm@0.18.20': + optional: true + '@esbuild/linux-arm@0.25.4': optional: true '@esbuild/linux-arm@0.25.5': optional: true + '@esbuild/linux-ia32@0.18.20': + optional: true + '@esbuild/linux-ia32@0.25.4': optional: true '@esbuild/linux-ia32@0.25.5': optional: true + '@esbuild/linux-loong64@0.18.20': + optional: true + '@esbuild/linux-loong64@0.25.4': optional: true '@esbuild/linux-loong64@0.25.5': optional: true + '@esbuild/linux-mips64el@0.18.20': + optional: true + '@esbuild/linux-mips64el@0.25.4': optional: true '@esbuild/linux-mips64el@0.25.5': optional: true + '@esbuild/linux-ppc64@0.18.20': + optional: true + '@esbuild/linux-ppc64@0.25.4': optional: true '@esbuild/linux-ppc64@0.25.5': optional: true + '@esbuild/linux-riscv64@0.18.20': + optional: true + '@esbuild/linux-riscv64@0.25.4': optional: true '@esbuild/linux-riscv64@0.25.5': optional: true + '@esbuild/linux-s390x@0.18.20': + optional: true + '@esbuild/linux-s390x@0.25.4': optional: true '@esbuild/linux-s390x@0.25.5': optional: true + '@esbuild/linux-x64@0.18.20': + optional: true + '@esbuild/linux-x64@0.25.4': optional: true @@ -9994,6 +11181,9 @@ snapshots: '@esbuild/netbsd-arm64@0.25.5': optional: true + '@esbuild/netbsd-x64@0.18.20': + optional: true + '@esbuild/netbsd-x64@0.25.4': optional: true @@ -10006,30 +11196,45 @@ snapshots: '@esbuild/openbsd-arm64@0.25.5': optional: true + '@esbuild/openbsd-x64@0.18.20': + optional: true + '@esbuild/openbsd-x64@0.25.4': optional: true '@esbuild/openbsd-x64@0.25.5': optional: true + '@esbuild/sunos-x64@0.18.20': + optional: true + '@esbuild/sunos-x64@0.25.4': optional: true '@esbuild/sunos-x64@0.25.5': optional: true + '@esbuild/win32-arm64@0.18.20': + optional: true + '@esbuild/win32-arm64@0.25.4': optional: true '@esbuild/win32-arm64@0.25.5': optional: true + '@esbuild/win32-ia32@0.18.20': + optional: true + '@esbuild/win32-ia32@0.25.4': optional: true '@esbuild/win32-ia32@0.25.5': optional: true + '@esbuild/win32-x64@0.18.20': + optional: true + '@esbuild/win32-x64@0.25.4': optional: true @@ -10097,6 +11302,12 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@floating-ui/react-dom@2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/dom': 1.7.0 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + '@floating-ui/utils@0.2.9': {} '@google/genai@0.13.0': @@ -10111,6 +11322,11 @@ snapshots: - supports-color - utf-8-validate + '@hookform/resolvers@4.1.3(react-hook-form@7.57.0(react@19.1.0))': + dependencies: + '@standard-schema/utils': 0.3.0 + react-hook-form: 7.57.0(react@19.1.0) + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -10139,6 +11355,87 @@ snapshots: transitivePeerDependencies: - supports-color + '@img/sharp-darwin-arm64@0.34.2': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.1.0 + optional: true + + '@img/sharp-darwin-x64@0.34.2': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.1.0 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.1.0': + optional: true + + '@img/sharp-libvips-darwin-x64@1.1.0': + optional: true + + '@img/sharp-libvips-linux-arm64@1.1.0': + optional: true + + '@img/sharp-libvips-linux-arm@1.1.0': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.1.0': + optional: true + + '@img/sharp-libvips-linux-s390x@1.1.0': + optional: true + + '@img/sharp-libvips-linux-x64@1.1.0': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + optional: true + + '@img/sharp-linux-arm64@0.34.2': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.1.0 + optional: true + + '@img/sharp-linux-arm@0.34.2': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.1.0 + optional: true + + '@img/sharp-linux-s390x@0.34.2': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.1.0 + optional: true + + '@img/sharp-linux-x64@0.34.2': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.1.0 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.2': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.2': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + optional: true + + '@img/sharp-wasm32@0.34.2': + dependencies: + '@emnapi/runtime': 1.4.3 + optional: true + + '@img/sharp-win32-arm64@0.34.2': + optional: true + + '@img/sharp-win32-ia32@0.34.2': + optional: true + + '@img/sharp-win32-x64@0.34.2': + optional: true + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -10324,12 +11621,12 @@ snapshots: '@types/yargs': 17.0.33 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.8.3)(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.8.3)(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0))': dependencies: glob: 10.4.5 magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.8.3) - vite: 6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) optionalDependencies: typescript: 5.8.3 @@ -10439,10 +11736,36 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 + '@next/env@15.3.3': {} + '@next/eslint-plugin-next@15.3.2': dependencies: fast-glob: 3.3.1 + '@next/swc-darwin-arm64@15.3.3': + optional: true + + '@next/swc-darwin-x64@15.3.3': + optional: true + + '@next/swc-linux-arm64-gnu@15.3.3': + optional: true + + '@next/swc-linux-arm64-musl@15.3.3': + optional: true + + '@next/swc-linux-x64-gnu@15.3.3': + optional: true + + '@next/swc-linux-x64-musl@15.3.3': + optional: true + + '@next/swc-win32-arm64-msvc@15.3.3': + optional: true + + '@next/swc-win32-x64-msvc@15.3.3': + optional: true + '@noble/ciphers@1.3.0': {} '@noble/curves@1.9.1': @@ -10529,6 +11852,20 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-alert-dialog@1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-arrow@1.1.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -10538,6 +11875,15 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-arrow@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-checkbox@1.3.1(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -10582,18 +11928,54 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-collection@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + '@radix-ui/react-context@1.1.2(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-context@1.1.2(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + '@radix-ui/react-dialog@1.1.13(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -10616,12 +11998,40 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-dialog@1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + aria-hidden: 1.2.4 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.6)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-direction@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-direction@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + '@radix-ui/react-dismissable-layer@1.1.9(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -10635,6 +12045,19 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-dismissable-layer@1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-dropdown-menu@2.1.14(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -10650,12 +12073,33 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-dropdown-menu@2.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-menu': 2.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-focus-guards@1.1.2(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + '@radix-ui/react-focus-scope@1.1.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.21)(react@18.3.1) @@ -10667,6 +12111,17 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-focus-scope@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-icons@1.3.2(react@18.3.1)': dependencies: react: 18.3.1 @@ -10678,6 +12133,22 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-id@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-menu@2.1.14(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -10704,6 +12175,32 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-menu@2.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + aria-hidden: 1.2.4 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.6)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-popover@1.1.13(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -10727,6 +12224,29 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-popover@1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + aria-hidden: 1.2.4 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.6)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-popper@1.2.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -10745,6 +12265,24 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-popper@1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-arrow': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-portal@1.1.8(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -10755,6 +12293,16 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-portal@1.1.8(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-presence@1.1.4(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.21)(react@18.3.1) @@ -10765,6 +12313,16 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-primitive@2.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.2.2(@types/react@18.3.21)(react@18.3.1) @@ -10774,6 +12332,24 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-primitive@2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-progress@1.1.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-context': 1.1.2(@types/react@18.3.21)(react@18.3.1) @@ -10784,6 +12360,23 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-roving-focus@1.1.9(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -10801,6 +12394,40 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-roving-focus@1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + + '@radix-ui/react-scroll-area@1.2.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-select@2.2.4(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.1 @@ -10830,6 +12457,35 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-select@2.2.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + aria-hidden: 1.2.4 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.6)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-separator@1.1.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -10839,6 +12495,15 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-separator@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-slider@1.3.4(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.1 @@ -10858,6 +12523,25 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-slider@1.3.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-slot@1.2.2(@types/react@18.3.21)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.21)(react@18.3.1) @@ -10865,6 +12549,36 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-slot@1.2.2(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-slot@1.2.3(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + + '@radix-ui/react-tabs@1.1.12(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-tooltip@1.2.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -10885,12 +12599,38 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-tooltip@1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.21)(react@18.3.1)': dependencies: '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.21)(react@18.3.1) @@ -10899,6 +12639,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.21)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.21)(react@18.3.1) @@ -10906,6 +12654,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.21)(react@18.3.1) @@ -10913,18 +12668,37 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + '@radix-ui/react-use-previous@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + '@radix-ui/react-use-rect@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.1 @@ -10932,6 +12706,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + '@radix-ui/react-use-size@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.21)(react@18.3.1) @@ -10939,6 +12720,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.6)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.6 + '@radix-ui/react-visually-hidden@1.2.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -10948,6 +12736,15 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) + '@radix-ui/react-visually-hidden@1.2.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@radix-ui/rect@1.1.1': {} '@rollup/pluginutils@5.1.4(rollup@4.40.2)': @@ -11548,6 +13345,8 @@ snapshots: '@smithy/util-buffer-from': 4.0.0 tslib: 2.8.1 + '@standard-schema/utils@0.3.0': {} + '@storybook/addon-actions@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 @@ -11635,13 +13434,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0))': + '@storybook/builder-vite@8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@storybook/csf-plugin': 8.6.12(storybook@8.6.12(prettier@3.5.3)) browser-assert: 1.2.1 storybook: 8.6.12(prettier@3.5.3) ts-dedent: 2.2.0 - vite: 6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) '@storybook/components@8.6.12(storybook@8.6.12(prettier@3.5.3))': dependencies: @@ -11698,11 +13497,11 @@ snapshots: react-dom: 18.3.1(react@18.3.1) storybook: 8.6.12(prettier@3.5.3) - '@storybook/react-vite@8.6.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.40.2)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0))': + '@storybook/react-vite@8.6.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.40.2)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.8.3)(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.8.3)(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0)) '@rollup/pluginutils': 5.1.4(rollup@4.40.2) - '@storybook/builder-vite': 8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0)) + '@storybook/builder-vite': 8.6.12(storybook@8.6.12(prettier@3.5.3))(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0)) '@storybook/react': 8.6.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.12(prettier@3.5.3))(typescript@5.8.3) find-up: 5.0.0 magic-string: 0.30.17 @@ -11712,7 +13511,7 @@ snapshots: resolve: 1.22.10 storybook: 8.6.12(prettier@3.5.3) tsconfig-paths: 4.2.0 - vite: 6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - rollup - supports-color @@ -11736,6 +13535,12 @@ snapshots: dependencies: storybook: 8.6.12(prettier@3.5.3) + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + '@tailwindcss/node@4.1.6': dependencies: '@ampproject/remapping': 2.3.0 @@ -11746,42 +13551,88 @@ snapshots: source-map-js: 1.2.1 tailwindcss: 4.1.6 + '@tailwindcss/node@4.1.8': + dependencies: + '@ampproject/remapping': 2.3.0 + enhanced-resolve: 5.18.1 + jiti: 2.4.2 + lightningcss: 1.30.1 + magic-string: 0.30.17 + source-map-js: 1.2.1 + tailwindcss: 4.1.8 + '@tailwindcss/oxide-android-arm64@4.1.6': optional: true + '@tailwindcss/oxide-android-arm64@4.1.8': + optional: true + '@tailwindcss/oxide-darwin-arm64@4.1.6': optional: true + '@tailwindcss/oxide-darwin-arm64@4.1.8': + optional: true + '@tailwindcss/oxide-darwin-x64@4.1.6': optional: true + '@tailwindcss/oxide-darwin-x64@4.1.8': + optional: true + '@tailwindcss/oxide-freebsd-x64@4.1.6': optional: true + '@tailwindcss/oxide-freebsd-x64@4.1.8': + optional: true + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.6': optional: true + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.8': + optional: true + '@tailwindcss/oxide-linux-arm64-gnu@4.1.6': optional: true + '@tailwindcss/oxide-linux-arm64-gnu@4.1.8': + optional: true + '@tailwindcss/oxide-linux-arm64-musl@4.1.6': optional: true + '@tailwindcss/oxide-linux-arm64-musl@4.1.8': + optional: true + '@tailwindcss/oxide-linux-x64-gnu@4.1.6': optional: true + '@tailwindcss/oxide-linux-x64-gnu@4.1.8': + optional: true + '@tailwindcss/oxide-linux-x64-musl@4.1.6': optional: true + '@tailwindcss/oxide-linux-x64-musl@4.1.8': + optional: true + '@tailwindcss/oxide-wasm32-wasi@4.1.6': optional: true + '@tailwindcss/oxide-wasm32-wasi@4.1.8': + optional: true + '@tailwindcss/oxide-win32-arm64-msvc@4.1.6': optional: true + '@tailwindcss/oxide-win32-arm64-msvc@4.1.8': + optional: true + '@tailwindcss/oxide-win32-x64-msvc@4.1.6': optional: true + '@tailwindcss/oxide-win32-x64-msvc@4.1.8': + optional: true + '@tailwindcss/oxide@4.1.6': dependencies: detect-libc: 2.0.4 @@ -11800,12 +13651,38 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.6 '@tailwindcss/oxide-win32-x64-msvc': 4.1.6 - '@tailwindcss/vite@4.1.6(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0))': + '@tailwindcss/oxide@4.1.8': + dependencies: + detect-libc: 2.0.4 + tar: 7.4.3 + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.8 + '@tailwindcss/oxide-darwin-arm64': 4.1.8 + '@tailwindcss/oxide-darwin-x64': 4.1.8 + '@tailwindcss/oxide-freebsd-x64': 4.1.8 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.8 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.8 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.8 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.8 + '@tailwindcss/oxide-linux-x64-musl': 4.1.8 + '@tailwindcss/oxide-wasm32-wasi': 4.1.8 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.8 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.8 + + '@tailwindcss/postcss@4.1.8': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.8 + '@tailwindcss/oxide': 4.1.8 + postcss: 8.5.3 + tailwindcss: 4.1.8 + + '@tailwindcss/vite@4.1.6(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@tailwindcss/node': 4.1.6 '@tailwindcss/oxide': 4.1.6 tailwindcss: 4.1.6 - vite: 6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) '@tanstack/query-core@5.76.0': {} @@ -11814,6 +13691,11 @@ snapshots: '@tanstack/query-core': 5.76.0 react: 18.3.1 + '@tanstack/react-query@5.76.1(react@19.1.0)': + dependencies: + '@tanstack/query-core': 5.76.0 + react: 19.1.0 + '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.27.1 @@ -12105,8 +13987,7 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/parse-json@4.0.2': - optional: true + '@types/parse-json@4.0.2': {} '@types/prop-types@15.7.14': {} @@ -12116,11 +13997,19 @@ snapshots: dependencies: '@types/react': 18.3.21 + '@types/react-dom@19.1.5(@types/react@19.1.6)': + dependencies: + '@types/react': 19.1.6 + '@types/react@18.3.21': dependencies: '@types/prop-types': 15.7.14 csstype: 3.1.3 + '@types/react@19.1.6': + dependencies: + csstype: 3.1.3 + '@types/resolve@1.20.6': {} '@types/shell-quote@1.7.5': {} @@ -12252,14 +14141,14 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0))': + '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@babel/core': 7.27.1 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.1) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.1) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - supports-color @@ -12270,21 +14159,21 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0))': + '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.1.3 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) - '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0))': + '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.1.3 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) '@vitest/pretty-format@3.1.3': dependencies: @@ -12472,6 +14361,8 @@ snapshots: dependencies: environment: 1.1.0 + ansi-regex@4.1.1: {} + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -12495,6 +14386,14 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + apisauce@2.1.6: + dependencies: + axios: 0.21.4 + transitivePeerDependencies: + - debug + + app-module-path@2.2.0: {} + aproba@2.0.0: {} argparse@1.0.10: @@ -12594,6 +14493,12 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 + axios@0.21.4: + dependencies: + follow-redirects: 1.15.9 + transitivePeerDependencies: + - debug + axios@1.9.0: dependencies: follow-redirects: 1.15.9 @@ -12797,6 +14702,10 @@ snapshots: esbuild: 0.25.5 load-tsconfig: 0.2.5 + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + bytes@3.1.2: {} c8@9.1.0: @@ -12964,17 +14873,30 @@ snapshots: dependencies: clsx: 2.1.1 + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 cli-spinners@2.9.2: {} + cli-table3@0.6.0: + dependencies: + object-assign: 4.1.1 + string-width: 4.2.3 + optionalDependencies: + colors: 1.4.0 + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 string-width: 7.2.0 + client-only@0.0.1: {} + cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -12993,6 +14915,8 @@ snapshots: kind-of: 6.0.3 shallow-clone: 3.0.1 + clone@1.0.4: {} + clone@2.1.2: {} clsx@2.1.1: {} @@ -13009,6 +14933,18 @@ snapshots: - '@types/react' - '@types/react-dom' + cmdk@1.1.1(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + co@4.6.0: {} cockatiel@3.2.1: {} @@ -13027,10 +14963,24 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + optional: true + color-support@1.1.3: {} + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + optional: true + colorette@2.0.20: {} + colors@1.4.0: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -13106,6 +15056,14 @@ snapshots: dependencies: layout-base: 2.0.1 + cosmiconfig@7.0.1: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 @@ -13151,6 +15109,12 @@ snapshots: transitivePeerDependencies: - encoding + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -13457,6 +15421,10 @@ snapshots: default-shell@2.2.0: {} + defaults@1.0.4: + dependencies: + clone: 1.0.4 + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -13561,6 +15529,22 @@ snapshots: dotenv@16.5.0: {} + drizzle-kit@0.31.1: + dependencies: + '@drizzle-team/brocli': 0.10.2 + '@esbuild-kit/esm-loader': 2.6.5 + esbuild: 0.25.5 + esbuild-register: 3.6.0(esbuild@0.25.5) + transitivePeerDependencies: + - supports-color + + drizzle-orm@0.44.1: {} + + drizzle-zod@0.8.2(drizzle-orm@0.44.1)(zod@3.24.4): + dependencies: + drizzle-orm: 0.44.1 + zod: 3.24.4 + duck@0.1.12: dependencies: underscore: 1.13.7 @@ -13596,6 +15580,10 @@ snapshots: dependencies: jake: 10.9.2 + ejs@3.1.8: + dependencies: + jake: 10.9.2 + electron-to-chromium@1.5.152: {} emittery@0.13.1: {} @@ -13622,6 +15610,10 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 + enquirer@2.3.6: + dependencies: + ansi-colors: 4.1.3 + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -13748,6 +15740,31 @@ snapshots: transitivePeerDependencies: - supports-color + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + esbuild@0.25.4: optionalDependencies: '@esbuild/aix-ppc64': 0.25.4 @@ -14248,6 +16265,11 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 + fs-jetpack@4.3.1: + dependencies: + minimatch: 3.1.2 + rimraf: 2.7.1 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -14266,6 +16288,8 @@ snapshots: functions-have-names@1.2.3: {} + fuzzysort@3.1.0: {} + fzf@0.5.2: {} gauge@5.0.2: @@ -14420,6 +16444,41 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + gluegun@5.2.0: + dependencies: + apisauce: 2.1.6 + app-module-path: 2.2.0 + cli-table3: 0.6.0 + colors: 1.4.0 + cosmiconfig: 7.0.1 + cross-spawn: 7.0.3 + ejs: 3.1.8 + enquirer: 2.3.6 + execa: 5.1.1 + fs-jetpack: 4.3.1 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.lowercase: 4.3.0 + lodash.lowerfirst: 4.3.1 + lodash.pad: 4.5.1 + lodash.padend: 4.6.1 + lodash.padstart: 4.6.1 + lodash.repeat: 4.1.0 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.trim: 4.5.1 + lodash.trimend: 4.5.1 + lodash.trimstart: 4.5.1 + lodash.uppercase: 4.3.0 + lodash.upperfirst: 4.3.1 + ora: 4.0.2 + pluralize: 8.0.0 + semver: 7.3.5 + which: 2.0.2 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - debug + google-auth-library@9.15.1: dependencies: base64-js: 1.5.1 @@ -14729,6 +16788,9 @@ snapshots: is-arrayish@0.2.1: {} + is-arrayish@0.3.2: + optional: true + is-async-function@2.1.1: dependencies: async-function: 1.0.0 @@ -14816,6 +16878,8 @@ snapshots: dependencies: is-docker: 3.0.0 + is-interactive@1.0.0: {} + is-interactive@2.0.0: {} is-map@2.0.3: {} @@ -15624,33 +17688,63 @@ snapshots: lightningcss-darwin-arm64@1.29.2: optional: true + lightningcss-darwin-arm64@1.30.1: + optional: true + lightningcss-darwin-x64@1.29.2: optional: true + lightningcss-darwin-x64@1.30.1: + optional: true + lightningcss-freebsd-x64@1.29.2: optional: true + lightningcss-freebsd-x64@1.30.1: + optional: true + lightningcss-linux-arm-gnueabihf@1.29.2: optional: true + lightningcss-linux-arm-gnueabihf@1.30.1: + optional: true + lightningcss-linux-arm64-gnu@1.29.2: optional: true + lightningcss-linux-arm64-gnu@1.30.1: + optional: true + lightningcss-linux-arm64-musl@1.29.2: optional: true + lightningcss-linux-arm64-musl@1.30.1: + optional: true + lightningcss-linux-x64-gnu@1.29.2: optional: true + lightningcss-linux-x64-gnu@1.30.1: + optional: true + lightningcss-linux-x64-musl@1.29.2: optional: true + lightningcss-linux-x64-musl@1.30.1: + optional: true + lightningcss-win32-arm64-msvc@1.29.2: optional: true + lightningcss-win32-arm64-msvc@1.30.1: + optional: true + lightningcss-win32-x64-msvc@1.29.2: optional: true + lightningcss-win32-x64-msvc@1.30.1: + optional: true + lightningcss@1.29.2: dependencies: detect-libc: 2.0.4 @@ -15666,6 +17760,21 @@ snapshots: lightningcss-win32-arm64-msvc: 1.29.2 lightningcss-win32-x64-msvc: 1.29.2 + lightningcss@1.30.1: + dependencies: + detect-libc: 2.0.4 + optionalDependencies: + lightningcss-darwin-arm64: 1.30.1 + lightningcss-darwin-x64: 1.30.1 + lightningcss-freebsd-x64: 1.30.1 + lightningcss-linux-arm-gnueabihf: 1.30.1 + lightningcss-linux-arm64-gnu: 1.30.1 + lightningcss-linux-arm64-musl: 1.30.1 + lightningcss-linux-x64-gnu: 1.30.1 + lightningcss-linux-x64-musl: 1.30.1 + lightningcss-win32-arm64-msvc: 1.30.1 + lightningcss-win32-x64-msvc: 1.30.1 + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -15716,6 +17825,8 @@ snapshots: lodash-es@4.17.21: {} + lodash.camelcase@4.3.0: {} + lodash.debounce@4.0.8: {} lodash.includes@4.3.0: {} @@ -15730,18 +17841,48 @@ snapshots: lodash.isstring@4.0.1: {} + lodash.kebabcase@4.1.1: {} + + lodash.lowercase@4.3.0: {} + + lodash.lowerfirst@4.3.1: {} + lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} lodash.once@4.1.1: {} + lodash.pad@4.5.1: {} + + lodash.padend@4.6.1: {} + + lodash.padstart@4.6.1: {} + + lodash.repeat@4.1.0: {} + + lodash.snakecase@4.1.1: {} + lodash.sortby@4.7.0: {} lodash.startcase@4.4.0: {} + lodash.trim@4.5.1: {} + + lodash.trimend@4.5.1: {} + + lodash.trimstart@4.5.1: {} + + lodash.uppercase@4.3.0: {} + + lodash.upperfirst@4.3.1: {} + lodash@4.17.21: {} + log-symbols@3.0.0: + dependencies: + chalk: 2.4.2 + log-symbols@4.1.0: dependencies: chalk: 4.1.2 @@ -15798,6 +17939,10 @@ snapshots: dependencies: react: 18.3.1 + lucide-react@0.511.0(react@19.1.0): + dependencies: + react: 19.1.0 + lz-string@1.5.0: {} macos-release@3.3.0: {} @@ -16399,6 +18544,19 @@ snapshots: stacktrace-js: 2.0.2 stylis: 4.3.6 + nano-css@5.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + css-tree: 1.1.3 + csstype: 3.1.3 + fastest-stable-stringify: 2.0.2 + inline-style-prefixer: 7.0.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + rtl-css-js: 1.16.1 + stacktrace-js: 2.0.2 + stylis: 4.3.6 + nanoid@3.3.11: {} napi-build-utils@2.0.0: @@ -16410,6 +18568,36 @@ snapshots: netmask@2.0.2: {} + next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + next@15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@next/env': 15.3.3 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 + busboy: 1.6.0 + caniuse-lite: 1.0.30001718 + postcss: 8.4.31 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + styled-jsx: 5.1.6(react@19.1.0) + optionalDependencies: + '@next/swc-darwin-arm64': 15.3.3 + '@next/swc-darwin-x64': 15.3.3 + '@next/swc-linux-arm64-gnu': 15.3.3 + '@next/swc-linux-arm64-musl': 15.3.3 + '@next/swc-linux-x64-gnu': 15.3.3 + '@next/swc-linux-x64-musl': 15.3.3 + '@next/swc-win32-arm64-msvc': 15.3.3 + '@next/swc-win32-x64-msvc': 15.3.3 + sharp: 0.34.2 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + nock@14.0.4: dependencies: '@mswjs/interceptors': 0.38.6 @@ -16597,6 +18785,16 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@4.0.2: + dependencies: + chalk: 2.4.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + log-symbols: 3.0.0 + strip-ansi: 5.2.0 + wcwidth: 1.0.1 + ora@8.2.0: dependencies: chalk: 5.4.1 @@ -16666,6 +18864,8 @@ snapshots: p-map@2.1.0: {} + p-map@7.0.3: {} + p-timeout@6.1.4: {} p-try@2.2.0: {} @@ -16828,6 +19028,8 @@ snapshots: exsolve: 1.0.5 pathe: 2.0.3 + pluralize@8.0.0: {} + points-on-curve@0.2.0: {} points-on-path@0.2.1: @@ -16852,6 +19054,12 @@ snapshots: postcss-value-parser@4.2.0: {} + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.4.49: dependencies: nanoid: 3.3.11 @@ -17065,6 +19273,15 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-dom@19.1.0(react@19.1.0): + dependencies: + react: 19.1.0 + scheduler: 0.26.0 + + react-hook-form@7.57.0(react@19.1.0): + dependencies: + react: 19.1.0 + react-i18next@15.5.1(i18next@24.2.3(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3): dependencies: '@babel/runtime': 7.27.1 @@ -17119,6 +19336,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 + react-remove-scroll-bar@2.3.8(@types/react@19.1.6)(react@19.1.0): + dependencies: + react: 19.1.0 + react-style-singleton: 2.2.3(@types/react@19.1.6)(react@19.1.0) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.6 + react-remove-scroll@2.6.3(@types/react@18.3.21)(react@18.3.1): dependencies: react: 18.3.1 @@ -17130,6 +19355,17 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 + react-remove-scroll@2.6.3(@types/react@19.1.6)(react@19.1.0): + dependencies: + react: 19.1.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.6)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.6)(react@19.1.0) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.1.6)(react@19.1.0) + use-sidecar: 1.1.3(@types/react@19.1.6)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.6 + react-style-singleton@2.2.3(@types/react@18.3.21)(react@18.3.1): dependencies: get-nonce: 1.0.1 @@ -17138,6 +19374,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 + react-style-singleton@2.2.3(@types/react@19.1.6)(react@19.1.0): + dependencies: + get-nonce: 1.0.1 + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.6 + react-textarea-autosize@8.5.9(@types/react@18.3.21)(react@18.3.1): dependencies: '@babel/runtime': 7.27.1 @@ -17152,6 +19396,11 @@ snapshots: react: 18.3.1 tslib: 2.8.1 + react-universal-interface@0.6.2(react@19.1.0)(tslib@2.8.1): + dependencies: + react: 19.1.0 + tslib: 2.8.1 + react-use@17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@types/js-cookie': 2.2.7 @@ -17171,6 +19420,25 @@ snapshots: ts-easing: 0.2.0 tslib: 2.8.1 + react-use@17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@types/js-cookie': 2.2.7 + '@xobotyi/scrollbar-width': 1.9.5 + copy-to-clipboard: 3.3.3 + fast-deep-equal: 3.1.3 + fast-shallow-equal: 1.0.0 + js-cookie: 2.2.1 + nano-css: 5.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-universal-interface: 0.6.2(react@19.1.0)(tslib@2.8.1) + resize-observer-polyfill: 1.5.1 + screenfull: 5.2.0 + set-harmonic-interval: 1.0.1 + throttle-debounce: 3.0.1 + ts-easing: 0.2.0 + tslib: 2.8.1 + react-virtuoso@4.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 @@ -17180,6 +19448,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + react@19.1.0: {} + read-package-json-fast@4.0.0: dependencies: json-parse-even-better-errors: 4.0.0 @@ -17360,6 +19630,11 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -17369,6 +19644,10 @@ snapshots: rfdc@1.4.1: {} + rimraf@2.7.1: + dependencies: + glob: 7.2.3 + rimraf@6.0.1: dependencies: glob: 11.0.2 @@ -17474,6 +19753,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + scheduler@0.26.0: {} + screenfull@5.2.0: {} seed-random@2.2.0: {} @@ -17482,6 +19763,10 @@ snapshots: semver@6.3.1: {} + semver@7.3.5: + dependencies: + lru-cache: 6.0.0 + semver@7.7.2: {} send@1.2.0: @@ -17551,6 +19836,35 @@ snapshots: shallowequal@1.1.0: {} + sharp@0.34.2: + dependencies: + color: 4.2.3 + detect-libc: 2.0.4 + semver: 7.7.2 + optionalDependencies: + '@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 + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -17622,6 +19936,11 @@ snapshots: transitivePeerDependencies: - supports-color + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + optional: true + sisteransi@1.0.5: {} slash@3.0.0: {} @@ -17653,6 +19972,11 @@ snapshots: ip-address: 9.0.5 smart-buffer: 4.2.0 + sonner@2.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + sound-play@1.1.0: {} source-map-js@1.2.1: {} @@ -17662,6 +19986,11 @@ snapshots: buffer-from: 1.1.2 source-map: 0.6.1 + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map@0.5.6: {} source-map@0.6.1: {} @@ -17747,6 +20076,8 @@ snapshots: dependencies: duplexer: 0.1.2 + streamsearch@1.1.0: {} + streamx@2.22.0: dependencies: fast-fifo: 1.3.2 @@ -17843,6 +20174,10 @@ snapshots: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + strip-ansi@5.2.0: + dependencies: + ansi-regex: 4.1.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -17910,6 +20245,11 @@ snapshots: stylis: 4.3.2 tslib: 2.6.2 + styled-jsx@5.1.6(react@19.1.0): + dependencies: + client-only: 0.0.1 + react: 19.1.0 + stylis@4.3.2: {} stylis@4.3.6: {} @@ -17946,12 +20286,16 @@ snapshots: tailwind-merge@2.6.0: {} + tailwind-merge@3.3.0: {} + tailwindcss-animate@1.0.7(tailwindcss@4.1.6): dependencies: tailwindcss: 4.1.6 tailwindcss@4.1.6: {} + tailwindcss@4.1.8: {} + tapable@2.2.1: {} tar-fs@2.1.2: @@ -18451,6 +20795,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 + use-callback-ref@1.3.3(@types/react@19.1.6)(react@19.1.0): + dependencies: + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.6 + use-composed-ref@1.4.0(@types/react@18.3.21)(react@18.3.1): dependencies: react: 18.3.1 @@ -18478,6 +20829,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 + use-sidecar@1.1.3(@types/react@19.1.6)(react@19.1.0): + dependencies: + detect-node-es: 1.1.0 + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.6 + use-sound@5.0.0(react@18.3.1): dependencies: howler: 2.2.4 @@ -18509,6 +20868,15 @@ snapshots: vary@1.1.2: {} + vaul@1.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + vfile-message@2.0.4: dependencies: '@types/unist': 2.0.11 @@ -18531,13 +20899,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.1.3(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0): + vite-node@3.1.3(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0): dependencies: cac: 6.7.14 debug: 4.4.1(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -18552,13 +20920,13 @@ snapshots: - tsx - yaml - vite-node@3.1.3(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0): + vite-node@3.1.3(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0): dependencies: cac: 6.7.14 debug: 4.4.1(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -18573,7 +20941,7 @@ snapshots: - tsx - yaml - vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0): + vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0): dependencies: esbuild: 0.25.5 fdir: 6.4.4(picomatch@4.0.2) @@ -18585,11 +20953,11 @@ snapshots: '@types/node': 18.19.100 fsevents: 2.3.3 jiti: 2.4.2 - lightningcss: 1.29.2 + lightningcss: 1.30.1 tsx: 4.19.4 yaml: 2.8.0 - vite@6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0): + vite@6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0): dependencies: esbuild: 0.25.5 fdir: 6.4.4(picomatch@4.0.2) @@ -18601,11 +20969,11 @@ snapshots: '@types/node': 20.17.50 fsevents: 2.3.3 jiti: 2.4.2 - lightningcss: 1.29.2 + lightningcss: 1.30.1 tsx: 4.19.4 yaml: 2.8.0 - vite@6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0): + vite@6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0): dependencies: esbuild: 0.25.5 fdir: 6.4.4(picomatch@4.0.2) @@ -18617,14 +20985,14 @@ snapshots: '@types/node': 22.15.20 fsevents: 2.3.3 jiti: 2.4.2 - lightningcss: 1.29.2 + lightningcss: 1.30.1 tsx: 4.19.4 yaml: 2.8.0 - vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.17.50)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0): + vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.17.50)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0): dependencies: '@vitest/expect': 3.1.3 - '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0)) + '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0)) '@vitest/pretty-format': 3.1.3 '@vitest/runner': 3.1.3 '@vitest/snapshot': 3.1.3 @@ -18641,8 +21009,8 @@ snapshots: tinyglobby: 0.2.13 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) - vite-node: 3.1.3(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) + vite-node: 3.1.3(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -18662,10 +21030,10 @@ snapshots: - tsx - yaml - vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0): + vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0): dependencies: '@vitest/expect': 3.1.3 - '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0)) + '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0)) '@vitest/pretty-format': 3.1.3 '@vitest/runner': 3.1.3 '@vitest/snapshot': 3.1.3 @@ -18682,8 +21050,8 @@ snapshots: tinyglobby: 0.2.13 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) - vite-node: 3.1.3(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) + vite-node: 3.1.3(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -18739,6 +21107,10 @@ snapshots: dependencies: makeerror: 1.0.12 + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + web-namespaces@1.1.4: {} web-streams-polyfill@4.0.0-beta.3: {} @@ -18907,8 +21279,7 @@ snapshots: yallist@5.0.0: {} - yaml@1.10.2: - optional: true + yaml@1.10.2: {} yaml@2.7.1: {} From 3a88ac7a9d48738cb76100180a5ee44d54fc7384 Mon Sep 17 00:00:00 2001 From: cte Date: Mon, 2 Jun 2025 23:00:33 -0700 Subject: [PATCH 3/9] More progress --- apps/web-docs/.gitkeep | 0 apps/web-docs/README.md | 1 + apps/web-evals/eslint.config.mjs | 2 +- apps/web-evals/package.json | 11 +- .../src/app/api/runs/[id]/stream/route.ts | 6 +- apps/web-evals/src/app/api/runs/route.ts | 2 +- apps/web-evals/src/app/api/tasks/route.ts | 2 +- apps/web-evals/src/app/home.tsx | 2 +- apps/web-evals/src/app/page.tsx | 2 +- apps/web-evals/src/app/runs/[id]/page.tsx | 2 +- apps/web-evals/src/app/runs/[id]/run.tsx | 2 +- .../src/app/runs/[id]/task-status.tsx | 2 +- apps/web-evals/src/app/runs/new/new-run.tsx | 3 +- .../src/app/runs/new/settings-diff.tsx | 4 +- .../src/components/ui/scroll-area.tsx | 2 +- .../src/hooks/use-open-router-models.ts | 19 +- apps/web-evals/src/hooks/use-run-status.ts | 8 +- apps/web-evals/src/lib/schemas.ts | 2 +- apps/web-evals/src/lib/server/exercises.ts | 2 +- apps/web-evals/src/lib/server/runs.ts | 22 +- apps/web-evals/src/lib/server/tasks.ts | 4 +- apps/web-roo-code/README.md | 1 + evals/.env.sample | 1 - evals/.gitignore | 42 - evals/.npmrc | 2 - evals/README.md | 21 - evals/config/eslint/base.js | 32 - evals/config/eslint/next.js | 50 - evals/config/eslint/package.json | 21 - evals/config/typescript/base.json | 19 - evals/config/typescript/cjs.json | 14 - evals/config/typescript/nextjs.json | 12 - evals/config/typescript/package.json | 7 - evals/package.json | 33 - evals/pnpm-lock.yaml | 8013 ----------------- evals/pnpm-workspace.yaml | 4 - evals/turbo.json | 32 - {evals => packages/evals}/Dockerfile | 2 +- packages/evals/README.md | 22 + packages/evals/drizzle.config.ts | 2 +- packages/evals/package.json | 14 +- packages/evals/scripts/setup.sh | 4 +- packages/evals/src/cli/index.ts | 17 +- packages/evals/src/db/queries/runs.ts | 4 +- packages/evals/src/db/queries/taskMetrics.ts | 4 +- packages/evals/src/db/queries/tasks.ts | 6 +- packages/evals/src/db/queries/toolErrors.ts | 4 +- packages/evals/src/db/schema.ts | 27 +- .../evals/src/{cli => exercises}/exercises.ts | 9 +- packages/evals/src/exercises/index.ts | 2 + .../evals/src/{cli => exercises}/paths.ts | 0 packages/evals/src/index.ts | 3 + packages/evals/src/ipc/index.ts | 2 - packages/evals/src/ipc/server.ts | 138 - .../{types/defaults.ts => settings/index.ts} | 0 packages/evals/src/types/exercises.ts | 10 - packages/evals/src/types/index.ts | 3 - packages/evals/src/types/ipc.ts | 35 - packages/evals/test.db | Bin 0 -> 28672 bytes packages/evals/vitest.config.ts | 2 + packages/ipc/eslint.config.mjs | 4 + packages/ipc/package.json | 23 + packages/ipc/src/index.ts | 2 + .../ipc/client.ts => ipc/src/ipc-client.ts} | 18 +- .../ipc/src}/ipc-server.ts | 4 - packages/ipc/tsconfig.json | 8 + packages/types/src/api.ts | 25 +- packages/types/src/ipc.ts | 51 + pnpm-lock.yaml | 1023 +-- src/extension/api.ts | 3 +- src/package.json | 1 + 71 files changed, 581 insertions(+), 9295 deletions(-) create mode 100644 apps/web-docs/.gitkeep create mode 100644 apps/web-docs/README.md create mode 100644 apps/web-roo-code/README.md delete mode 100644 evals/.env.sample delete mode 100644 evals/.gitignore delete mode 100644 evals/.npmrc delete mode 100644 evals/README.md delete mode 100644 evals/config/eslint/base.js delete mode 100644 evals/config/eslint/next.js delete mode 100644 evals/config/eslint/package.json delete mode 100644 evals/config/typescript/base.json delete mode 100644 evals/config/typescript/cjs.json delete mode 100644 evals/config/typescript/nextjs.json delete mode 100644 evals/config/typescript/package.json delete mode 100644 evals/package.json delete mode 100644 evals/pnpm-lock.yaml delete mode 100644 evals/pnpm-workspace.yaml delete mode 100644 evals/turbo.json rename {evals => packages/evals}/Dockerfile (98%) rename packages/evals/src/{cli => exercises}/exercises.ts (74%) create mode 100644 packages/evals/src/exercises/index.ts rename packages/evals/src/{cli => exercises}/paths.ts (100%) create mode 100644 packages/evals/src/index.ts delete mode 100644 packages/evals/src/ipc/index.ts delete mode 100644 packages/evals/src/ipc/server.ts rename packages/evals/src/{types/defaults.ts => settings/index.ts} (100%) delete mode 100644 packages/evals/src/types/exercises.ts delete mode 100644 packages/evals/src/types/index.ts delete mode 100644 packages/evals/src/types/ipc.ts create mode 100644 packages/evals/test.db create mode 100644 packages/ipc/eslint.config.mjs create mode 100644 packages/ipc/package.json create mode 100644 packages/ipc/src/index.ts rename packages/{evals/src/ipc/client.ts => ipc/src/ipc-client.ts} (86%) rename {src/extension => packages/ipc/src}/ipc-server.ts (99%) create mode 100644 packages/ipc/tsconfig.json diff --git a/apps/web-docs/.gitkeep b/apps/web-docs/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/web-docs/README.md b/apps/web-docs/README.md new file mode 100644 index 0000000000..1333ed77b7 --- /dev/null +++ b/apps/web-docs/README.md @@ -0,0 +1 @@ +TODO diff --git a/apps/web-evals/eslint.config.mjs b/apps/web-evals/eslint.config.mjs index 835f477287..024d6157d4 100644 --- a/apps/web-evals/eslint.config.mjs +++ b/apps/web-evals/eslint.config.mjs @@ -1,4 +1,4 @@ -import { nextJsConfig } from "@evals/eslint-config/next-js" +import { nextJsConfig } from "@roo-code/config-eslint/next-js" /** @type {import("eslint").Linter.Config} */ export default [ diff --git a/apps/web-evals/package.json b/apps/web-evals/package.json index 26e430ba00..3a45162e83 100644 --- a/apps/web-evals/package.json +++ b/apps/web-evals/package.json @@ -1,5 +1,5 @@ { - "name": "@evals/web", + "name": "@roo-code/web-evals", "private": true, "scripts": { "lint": "next lint", @@ -11,6 +11,7 @@ }, "dependencies": { "@roo-code/evals": "workspace:^", + "@roo-code/ipc": "workspace:^", "@roo-code/types": "workspace:^", "@hookform/resolvers": "^4.1.3", "@radix-ui/react-alert-dialog": "^1.1.7", @@ -35,8 +36,8 @@ "next-themes": "^0.4.6", "p-map": "^7.0.3", "ps-tree": "^1.2.0", - "react": "^19.0.0", - "react-dom": "^19.0.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-hook-form": "^7.54.2", "react-use": "^17.6.0", "sonner": "^2.0.2", @@ -50,8 +51,8 @@ "@roo-code/config-typescript": "workspace:^", "@tailwindcss/postcss": "^4", "@types/ps-tree": "^1.1.6", - "@types/react": "^19", - "@types/react-dom": "^19", + "@types/react": "^18.3.18", + "@types/react-dom": "^18.3.5", "tailwindcss": "^4" } } diff --git a/apps/web-evals/src/app/api/runs/[id]/stream/route.ts b/apps/web-evals/src/app/api/runs/[id]/stream/route.ts index faf111047c..5b1de60710 100644 --- a/apps/web-evals/src/app/api/runs/[id]/stream/route.ts +++ b/apps/web-evals/src/app/api/runs/[id]/stream/route.ts @@ -1,8 +1,8 @@ import type { NextRequest } from "next/server" -import { findRun } from "@evals/db" -import { IpcMessageType } from "@evals/types" -import { IpcClient } from "@evals/ipc" +import { findRun } from "@roo-code/evals" +import { IpcClient } from "@roo-code/ipc" +import { IpcMessageType } from "@roo-code/types" import { SSEStream } from "@/lib/server/sse-stream" diff --git a/apps/web-evals/src/app/api/runs/route.ts b/apps/web-evals/src/app/api/runs/route.ts index 68e4c844fd..b21bb3b655 100644 --- a/apps/web-evals/src/app/api/runs/route.ts +++ b/apps/web-evals/src/app/api/runs/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from "next/server" -import { createRun } from "@evals/db" +import { createRun } from "@roo-code/evals" export async function POST(request: Request) { try { diff --git a/apps/web-evals/src/app/api/tasks/route.ts b/apps/web-evals/src/app/api/tasks/route.ts index 3613dd2718..843c078b9b 100644 --- a/apps/web-evals/src/app/api/tasks/route.ts +++ b/apps/web-evals/src/app/api/tasks/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from "next/server" -import { createTask } from "@evals/db" +import { createTask } from "@roo-code/evals" export async function POST(request: Request) { try { diff --git a/apps/web-evals/src/app/home.tsx b/apps/web-evals/src/app/home.tsx index 90f9d02b3e..7468347081 100644 --- a/apps/web-evals/src/app/home.tsx +++ b/apps/web-evals/src/app/home.tsx @@ -5,7 +5,7 @@ import { useRouter } from "next/navigation" import Link from "next/link" import { Ellipsis, Rocket } from "lucide-react" -import type { Run, TaskMetrics } from "@evals/db" +import type { Run, TaskMetrics } from "@roo-code/evals" import { deleteRun } from "@/lib/server/runs" import { formatCurrency, formatDuration, formatTokens, formatToolUsageSuccessRate } from "@/lib/formatters" diff --git a/apps/web-evals/src/app/page.tsx b/apps/web-evals/src/app/page.tsx index 8988bde11f..7ad5f8fa63 100644 --- a/apps/web-evals/src/app/page.tsx +++ b/apps/web-evals/src/app/page.tsx @@ -1,4 +1,4 @@ -import { getRuns } from "@evals/db" +import { getRuns } from "@roo-code/evals" import { Home } from "./home" diff --git a/apps/web-evals/src/app/runs/[id]/page.tsx b/apps/web-evals/src/app/runs/[id]/page.tsx index 4b0a2edd8b..aae3fc70f9 100644 --- a/apps/web-evals/src/app/runs/[id]/page.tsx +++ b/apps/web-evals/src/app/runs/[id]/page.tsx @@ -1,4 +1,4 @@ -import { findRun } from "@evals/db" +import { findRun } from "@roo-code/evals" import { Run } from "./run" diff --git a/apps/web-evals/src/app/runs/[id]/run.tsx b/apps/web-evals/src/app/runs/[id]/run.tsx index 9d5e74f98b..aa82354bf0 100644 --- a/apps/web-evals/src/app/runs/[id]/run.tsx +++ b/apps/web-evals/src/app/runs/[id]/run.tsx @@ -3,7 +3,7 @@ import { useMemo } from "react" import { LoaderCircle } from "lucide-react" -import * as db from "@evals/db" +import * as db from "@roo-code/evals" import { formatCurrency, formatDuration, formatTokens } from "@/lib/formatters" import { useRunStatus } from "@/hooks/use-run-status" diff --git a/apps/web-evals/src/app/runs/[id]/task-status.tsx b/apps/web-evals/src/app/runs/[id]/task-status.tsx index 2e0b28b419..bae785131a 100644 --- a/apps/web-evals/src/app/runs/[id]/task-status.tsx +++ b/apps/web-evals/src/app/runs/[id]/task-status.tsx @@ -1,6 +1,6 @@ import { CircleCheck, CircleDashed, CircleSlash, LoaderCircle } from "lucide-react" -import { type Task } from "@evals/db" +import type { Task } from "@roo-code/evals" type TaskStatusProps = { task: Task diff --git a/apps/web-evals/src/app/runs/new/new-run.tsx b/apps/web-evals/src/app/runs/new/new-run.tsx index 47fe8a89c4..0de4491e2b 100644 --- a/apps/web-evals/src/app/runs/new/new-run.tsx +++ b/apps/web-evals/src/app/runs/new/new-run.tsx @@ -9,7 +9,8 @@ import fuzzysort from "fuzzysort" import { toast } from "sonner" import { X, Rocket, Check, ChevronsUpDown, SlidersHorizontal, Book, CircleCheck } from "lucide-react" -import { globalSettingsSchema, providerSettingsSchema, rooCodeDefaults } from "@evals/types" +import { globalSettingsSchema, providerSettingsSchema } from "@roo-code/types" +import { rooCodeDefaults } from "@roo-code/evals" import { createRun } from "@/lib/server/runs" import { diff --git a/apps/web-evals/src/app/runs/new/settings-diff.tsx b/apps/web-evals/src/app/runs/new/settings-diff.tsx index fb074530f6..2eed62804d 100644 --- a/apps/web-evals/src/app/runs/new/settings-diff.tsx +++ b/apps/web-evals/src/app/runs/new/settings-diff.tsx @@ -1,9 +1,11 @@ import { Fragment, HTMLAttributes } from "react" -import { RooCodeSettings, ROO_CODE_SETTINGS_KEYS } from "@evals/types" +import { type Keys, type RooCodeSettings, GLOBAL_SETTINGS_KEYS, PROVIDER_SETTINGS_KEYS } from "@roo-code/types" import { cn } from "@/lib/utils" +export const ROO_CODE_SETTINGS_KEYS = [...GLOBAL_SETTINGS_KEYS, ...PROVIDER_SETTINGS_KEYS] as Keys[] + type SettingsDiffProps = HTMLAttributes & { defaultSettings: RooCodeSettings customSettings: RooCodeSettings diff --git a/apps/web-evals/src/components/ui/scroll-area.tsx b/apps/web-evals/src/components/ui/scroll-area.tsx index da5bd1c32e..5738fa71d3 100644 --- a/apps/web-evals/src/components/ui/scroll-area.tsx +++ b/apps/web-evals/src/components/ui/scroll-area.tsx @@ -6,7 +6,7 @@ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area" import { cn } from "@/lib/utils" type ScrollAreaProps = React.ComponentProps & { - viewportRef?: React.RefObject + viewportRef?: React.RefObject } function ScrollArea({ className, children, viewportRef, ...props }: ScrollAreaProps) { diff --git a/apps/web-evals/src/hooks/use-open-router-models.ts b/apps/web-evals/src/hooks/use-open-router-models.ts index fe4e2638a3..5e5e069796 100644 --- a/apps/web-evals/src/hooks/use-open-router-models.ts +++ b/apps/web-evals/src/hooks/use-open-router-models.ts @@ -1,15 +1,7 @@ import { z } from "zod" import { useQuery } from "@tanstack/react-query" -import { type ModelInfo } from "@evals/types" - -const supportsPromptCache = ["anthropic/claude-3.7-sonnet", "anthropic/claude-3.5-sonnet", "anthropic/claude-3-5-haiku"] - -const supportsComputerUse = ["anthropic/claude-3.7-sonnet", "anthropic/claude-3.5-sonnet"] - -const supportsThinking = ["anthropic/claude-3.7-sonnet:thinking"] - -const parsePrice = (price?: string) => (price ? parseFloat(price) * 1_000_000 : undefined) +import type { ModelInfo } from "@roo-code/types" export const openRouterModelSchema = z.object({ id: z.string(), @@ -55,15 +47,8 @@ export const getOpenRouterModels = async (): Promise => { .map((rawModel) => ({ ...rawModel, modelInfo: { - maxTokens: rawModel.top_provider?.max_completion_tokens ?? undefined, contextWindow: rawModel.context_length, - supportsImages: rawModel.architecture?.modality?.includes("image"), - supportsPromptCache: supportsPromptCache.some((model) => rawModel.id.startsWith(model)), - supportsComputerUse: supportsComputerUse.some((model) => rawModel.id.startsWith(model)), - inputPrice: parsePrice(rawModel.pricing?.prompt), - outputPrice: parsePrice(rawModel.pricing?.completion), - description: rawModel.description, - thinking: supportsThinking.some((model) => rawModel.id.startsWith(model)), + supportsPromptCache: false, }, })) } diff --git a/apps/web-evals/src/hooks/use-run-status.ts b/apps/web-evals/src/hooks/use-run-status.ts index a8e755eac2..69ca1e3632 100644 --- a/apps/web-evals/src/hooks/use-run-status.ts +++ b/apps/web-evals/src/hooks/use-run-status.ts @@ -1,8 +1,8 @@ import { useState, useCallback, useRef } from "react" import { useQuery, keepPreviousData } from "@tanstack/react-query" -import { TokenUsage, taskEventSchema, RooCodeEventName, EvalEventName } from "@evals/types" -import { Run } from "@evals/db" +import { type TokenUsage, RooCodeEventName, taskEventSchema } from "@roo-code/types" +import type { Run } from "@roo-code/evals" import { getTasks } from "@/lib/server/tasks" import { useEventSource } from "@/hooks/use-event-source" @@ -58,8 +58,8 @@ export const useRunStatus = (run: Run) => { setUsageUpdatedAt(Date.now()) break } - case EvalEventName.Pass: - case EvalEventName.Fail: + case RooCodeEventName.EvalPass: + case RooCodeEventName.EvalFail: setTasksUpdatedAt(Date.now()) break } diff --git a/apps/web-evals/src/lib/schemas.ts b/apps/web-evals/src/lib/schemas.ts index 1769ad147b..485bb19fcd 100644 --- a/apps/web-evals/src/lib/schemas.ts +++ b/apps/web-evals/src/lib/schemas.ts @@ -1,6 +1,6 @@ import { z } from "zod" -import { rooCodeSettingsSchema } from "@evals/types" +import { rooCodeSettingsSchema } from "@roo-code/types" /** * CreateRun diff --git a/apps/web-evals/src/lib/server/exercises.ts b/apps/web-evals/src/lib/server/exercises.ts index 54c66f1a00..1f0f2ff192 100644 --- a/apps/web-evals/src/lib/server/exercises.ts +++ b/apps/web-evals/src/lib/server/exercises.ts @@ -4,7 +4,7 @@ import * as fs from "fs/promises" import * as path from "path" import { fileURLToPath } from "url" -import { ExerciseLanguage, exerciseLanguages } from "@evals/types" +import { type ExerciseLanguage, exerciseLanguages } from "@roo-code/evals" const __dirname = path.dirname(fileURLToPath(import.meta.url)) diff --git a/apps/web-evals/src/lib/server/runs.ts b/apps/web-evals/src/lib/server/runs.ts index 5423857b8b..dff0482d6d 100644 --- a/apps/web-evals/src/lib/server/runs.ts +++ b/apps/web-evals/src/lib/server/runs.ts @@ -8,14 +8,20 @@ import fs from "fs" import { revalidatePath } from "next/cache" import pMap from "p-map" -import { ExerciseLanguage, exerciseLanguages } from "@evals/types" -import * as db from "@evals/db" +import { + type ExerciseLanguage, + exerciseLanguages, + createRun as _createRun, + updateRun as _updateRun, + deleteRun as _deleteRun, + createTask, +} from "@roo-code/evals" import { CreateRun } from "@/lib/schemas" import { getExercisesForLanguage } from "./exercises" export async function createRun({ suite, exercises = [], systemPrompt, ...values }: CreateRun) { - const run = await db.createRun({ + const run = await _createRun({ ...values, socketPath: path.join(os.tmpdir(), `roo-code-evals-${crypto.randomUUID()}.sock`), }) @@ -28,13 +34,13 @@ export async function createRun({ suite, exercises = [], systemPrompt, ...values throw new Error("Invalid exercise path: " + path) } - await db.createTask({ ...values, runId: run.id, language: language as ExerciseLanguage, exercise }) + await createTask({ ...values, runId: run.id, language: language as ExerciseLanguage, exercise }) } } else { for (const language of exerciseLanguages) { const exercises = await getExercisesForLanguage(language) - await pMap(exercises, (exercise) => db.createTask({ ...values, runId: run.id, language, exercise }), { + await pMap(exercises, (exercise) => createTask({ ...values, runId: run.id, language, exercise }), { concurrency: 10, }) } @@ -51,7 +57,7 @@ export async function createRun({ suite, exercises = [], systemPrompt, ...values const childProcess = spawn( "pnpm", - ["--filter", "@evals/cli", "dev", "run", "all", "--runId", run.id.toString()], + ["--filter", "@roo-code/evals", "dev", "run", "all", "--runId", run.id.toString()], { detached: true, stdio: ["ignore", logFile, logFile], @@ -60,7 +66,7 @@ export async function createRun({ suite, exercises = [], systemPrompt, ...values ) childProcess.unref() - await db.updateRun(run.id, { pid: childProcess.pid }) + await _updateRun(run.id, { pid: childProcess.pid }) } catch (error) { console.error(error) } @@ -69,6 +75,6 @@ export async function createRun({ suite, exercises = [], systemPrompt, ...values } export async function deleteRun(runId: number) { - await db.deleteRun(runId) + await _deleteRun(runId) revalidatePath("/runs") } diff --git a/apps/web-evals/src/lib/server/tasks.ts b/apps/web-evals/src/lib/server/tasks.ts index 3c931fe094..18b428b0ca 100644 --- a/apps/web-evals/src/lib/server/tasks.ts +++ b/apps/web-evals/src/lib/server/tasks.ts @@ -2,10 +2,10 @@ import { revalidatePath } from "next/cache" -import * as db from "@evals/db" +import { getTasks as _getTasks } from "@roo-code/evals" export async function getTasks(runId: number) { - const tasks = await db.getTasks(runId) + const tasks = await _getTasks(runId) revalidatePath(`/runs/${runId}`) return tasks } diff --git a/apps/web-roo-code/README.md b/apps/web-roo-code/README.md new file mode 100644 index 0000000000..1333ed77b7 --- /dev/null +++ b/apps/web-roo-code/README.md @@ -0,0 +1 @@ +TODO diff --git a/evals/.env.sample b/evals/.env.sample deleted file mode 100644 index 9130089f56..0000000000 --- a/evals/.env.sample +++ /dev/null @@ -1 +0,0 @@ -BENCHMARKS_DB_PATH=file:/tmp/evals.db diff --git a/evals/.gitignore b/evals/.gitignore deleted file mode 100644 index c517160168..0000000000 --- a/evals/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# Dependencies -node_modules -.pnp -.pnp.js - -# Local env files -.env -.env.* -!.env.sample - -# Testing -coverage - -# Turbo -.turbo - -# Vercel -.vercel - -# Next.js -next-env.d.ts - -# Build Outputs -.next/ -out/ -build -dist -*.tsbuildinfo - -# Debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Misc -.DS_Store -*.pem - -# Evals -evals diff --git a/evals/.npmrc b/evals/.npmrc deleted file mode 100644 index 30816ae7c7..0000000000 --- a/evals/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -# https://github.com/vercel/next.js/issues/68805 -public-hoist-pattern[]=*libsql* diff --git a/evals/README.md b/evals/README.md deleted file mode 100644 index b55a75dcff..0000000000 --- a/evals/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Run Roo Code Evals - -## Get Started - -NOTE: This is MacOS only for now! - -Clone the Roo Code repo: - -```sh -git clone https://github.com/RooCodeInc/Roo-Code.git -cd Roo-Code -``` - -Run the setup script: - -```sh -cd evals -./scripts/setup.sh -``` - -Navigate to [localhost:3000](http://localhost:3000/) in your browser. diff --git a/evals/config/eslint/base.js b/evals/config/eslint/base.js deleted file mode 100644 index 283c2e7e51..0000000000 --- a/evals/config/eslint/base.js +++ /dev/null @@ -1,32 +0,0 @@ -import js from "@eslint/js" -import eslintConfigPrettier from "eslint-config-prettier" -import turboPlugin from "eslint-plugin-turbo" -import tseslint from "typescript-eslint" -import onlyWarn from "eslint-plugin-only-warn" - -/** - * A shared ESLint configuration for the repository. - * - * @type {import("eslint").Linter.Config[]} - * */ -export const config = [ - js.configs.recommended, - eslintConfigPrettier, - ...tseslint.configs.recommended, - { - plugins: { - turbo: turboPlugin, - }, - rules: { - "turbo/no-undeclared-env-vars": "warn", - }, - }, - { - plugins: { - onlyWarn, - }, - }, - { - ignores: ["dist/**"], - }, -] diff --git a/evals/config/eslint/next.js b/evals/config/eslint/next.js deleted file mode 100644 index 9406b01f21..0000000000 --- a/evals/config/eslint/next.js +++ /dev/null @@ -1,50 +0,0 @@ -import js from "@eslint/js" -import eslintConfigPrettier from "eslint-config-prettier" -import tseslint from "typescript-eslint" -import pluginReactHooks from "eslint-plugin-react-hooks" -import pluginReact from "eslint-plugin-react" -import globals from "globals" -import pluginNext from "@next/eslint-plugin-next" - -import { config as baseConfig } from "./base.js" - -/** - * A custom ESLint configuration for libraries that use Next.js. - * - * @type {import("eslint").Linter.Config[]} - * */ -export const nextJsConfig = [ - ...baseConfig, - js.configs.recommended, - eslintConfigPrettier, - ...tseslint.configs.recommended, - { - ...pluginReact.configs.flat.recommended, - languageOptions: { - ...pluginReact.configs.flat.recommended.languageOptions, - globals: { - ...globals.serviceworker, - }, - }, - }, - { - plugins: { - "@next/next": pluginNext, - }, - rules: { - ...pluginNext.configs.recommended.rules, - ...pluginNext.configs["core-web-vitals"].rules, - }, - }, - { - plugins: { - "react-hooks": pluginReactHooks, - }, - settings: { react: { version: "detect" } }, - rules: { - ...pluginReactHooks.configs.recommended.rules, - // React scope no longer necessary with new JSX transform. - "react/react-in-jsx-scope": "off", - }, - }, -] diff --git a/evals/config/eslint/package.json b/evals/config/eslint/package.json deleted file mode 100644 index b706de1d95..0000000000 --- a/evals/config/eslint/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "@evals/eslint-config", - "private": true, - "type": "module", - "exports": { - "./base": "./base.js", - "./next-js": "./next.js" - }, - "devDependencies": { - "@eslint/js": "^9.22.0", - "@next/eslint-plugin-next": "^15.2.1", - "eslint": "^9.22.0", - "eslint-config-prettier": "^10.1.1", - "eslint-plugin-only-warn": "^1.1.0", - "eslint-plugin-react": "^7.37.4", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-turbo": "^2.4.4", - "globals": "^16.0.0", - "typescript-eslint": "^8.26.0" - } -} diff --git a/evals/config/typescript/base.json b/evals/config/typescript/base.json deleted file mode 100644 index 0756a8cdef..0000000000 --- a/evals/config/typescript/base.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "declaration": true, - "declarationMap": true, - "esModuleInterop": true, - "incremental": false, - "isolatedModules": true, - "lib": ["es2022", "DOM", "DOM.Iterable"], - "module": "NodeNext", - "moduleDetection": "force", - "moduleResolution": "NodeNext", - "noUncheckedIndexedAccess": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "ES2022" - } -} diff --git a/evals/config/typescript/cjs.json b/evals/config/typescript/cjs.json deleted file mode 100644 index 8895492be7..0000000000 --- a/evals/config/typescript/cjs.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "module": "CommonJS", - "moduleResolution": "Node", - "esModuleInterop": true, - "target": "ES2022", - "lib": ["ES2022", "ESNext.Disposable", "DOM"], - "sourceMap": true, - "strict": true, - "skipLibCheck": true, - "useUnknownInCatchVariables": false - } -} diff --git a/evals/config/typescript/nextjs.json b/evals/config/typescript/nextjs.json deleted file mode 100644 index fe3784d2f1..0000000000 --- a/evals/config/typescript/nextjs.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./base.json", - "compilerOptions": { - "plugins": [{ "name": "next" }], - "module": "ESNext", - "moduleResolution": "bundler", - "allowJs": true, - "jsx": "preserve", - "noEmit": true - } -} diff --git a/evals/config/typescript/package.json b/evals/config/typescript/package.json deleted file mode 100644 index 2ca8626496..0000000000 --- a/evals/config/typescript/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "@evals/typescript-config", - "private": true, - "publishConfig": { - "access": "public" - } -} diff --git a/evals/package.json b/evals/package.json deleted file mode 100644 index e243431a45..0000000000 --- a/evals/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "@evals/monorepo", - "private": true, - "packageManager": "pnpm@10.8.1", - "scripts": { - "lint": "turbo lint --log-order grouped --output-logs new-only", - "check-types": "turbo check-types --log-order grouped --output-logs new-only", - "test": "turbo test --log-order grouped --output-logs new-only", - "format": "turbo format --log-order grouped --output-logs new-only", - "build": "turbo build --log-order grouped --output-logs new-only", - "web": "turbo dev --filter @evals/web", - "cli": "turbo dev --filter @evals/cli -- run", - "drizzle:studio": "pnpm --filter @evals/db db:studio", - "docker:build": "docker build -f Dockerfile -t roo-code-eval --progress=plain ..", - "docker:run": "touch /tmp/evals.db && docker run -d -it -p 3000:3000 -v /tmp/evals.db:/tmp/evals.db roo-code-eval", - "docker:start": "pnpm docker:build && pnpm docker:run", - "docker:shell": "docker exec -it $(docker ps --filter \"ancestor=roo-code-eval\" -q) /bin/bash", - "docker:stop": "docker stop $(docker ps --filter \"ancestor=roo-code-eval\" -q)", - "docker:rm": "docker rm $(docker ps -a --filter \"ancestor=roo-code-eval\" -q)", - "docker:clean": "pnpm docker:stop && pnpm docker:rm" - }, - "devDependencies": { - "@dotenvx/dotenvx": "^1.41.0", - "@eslint/js": "^9.25.1", - "eslint": "^9.25.1", - "globals": "^16.0.0", - "prettier": "^3.5.3", - "tsx": "^4.19.4", - "turbo": "^2.5.2", - "typescript": "5.8.3", - "typescript-eslint": "^8.31.1" - } -} diff --git a/evals/pnpm-lock.yaml b/evals/pnpm-lock.yaml deleted file mode 100644 index ac331eb308..0000000000 --- a/evals/pnpm-lock.yaml +++ /dev/null @@ -1,8013 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - devDependencies: - '@dotenvx/dotenvx': - specifier: ^1.41.0 - version: 1.44.1 - '@eslint/js': - specifier: ^9.25.1 - version: 9.26.0 - eslint: - specifier: ^9.25.1 - version: 9.26.0(jiti@2.4.2) - globals: - specifier: ^16.0.0 - version: 16.2.0 - prettier: - specifier: ^3.5.3 - version: 3.5.3 - tsx: - specifier: ^4.19.4 - version: 4.19.4 - turbo: - specifier: ^2.5.2 - version: 2.5.4 - typescript: - specifier: 5.8.3 - version: 5.8.3 - typescript-eslint: - specifier: ^8.31.1 - version: 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - - apps/cli: - dependencies: - '@evals/db': - specifier: workspace:^ - version: link:../../packages/db - '@evals/ipc': - specifier: workspace:^ - version: link:../../packages/ipc - '@evals/lib': - specifier: workspace:^ - version: link:../../packages/lib - '@evals/types': - specifier: workspace:^ - version: link:../../packages/types - execa: - specifier: ^9.5.2 - version: 9.5.3 - gluegun: - specifier: ^5.1.2 - version: 5.2.0 - p-map: - specifier: ^7.0.3 - version: 7.0.3 - p-wait-for: - specifier: ^5.0.2 - version: 5.0.2 - ps-tree: - specifier: ^1.2.0 - version: 1.2.0 - devDependencies: - '@evals/eslint-config': - specifier: workspace:^ - version: link:../../config/eslint - '@evals/typescript-config': - specifier: workspace:^ - version: link:../../config/typescript - '@types/ps-tree': - specifier: ^1.1.6 - version: 1.1.6 - - apps/web: - dependencies: - '@evals/db': - specifier: workspace:^ - version: link:../../packages/db - '@evals/ipc': - specifier: workspace:^ - version: link:../../packages/ipc - '@evals/types': - specifier: workspace:^ - version: link:../../packages/types - '@hookform/resolvers': - specifier: ^4.1.3 - version: 4.1.3(react-hook-form@7.56.3(react@19.1.0)) - '@radix-ui/react-alert-dialog': - specifier: ^1.1.7 - version: 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dialog': - specifier: ^1.1.6 - version: 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-dropdown-menu': - specifier: ^2.1.7 - version: 2.1.14(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-label': - specifier: ^2.1.2 - version: 2.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-popover': - specifier: ^1.1.6 - version: 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-scroll-area': - specifier: ^1.2.3 - version: 1.2.8(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-select': - specifier: ^2.1.6 - version: 2.2.4(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-separator': - specifier: ^1.1.2 - version: 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slider': - specifier: ^1.2.4 - version: 1.3.4(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': - specifier: ^1.1.2 - version: 1.2.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-tabs': - specifier: ^1.1.3 - version: 1.1.11(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-tooltip': - specifier: ^1.1.8 - version: 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/react-query': - specifier: ^5.69.0 - version: 5.76.1(react@19.1.0) - class-variance-authority: - specifier: ^0.7.1 - version: 0.7.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 - cmdk: - specifier: ^1.1.0 - version: 1.1.1(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - fuzzysort: - specifier: ^3.1.0 - version: 3.1.0 - lucide-react: - specifier: ^0.511.0 - version: 0.511.0(react@19.1.0) - next: - specifier: 15.3.3 - version: 15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - next-themes: - specifier: ^0.4.6 - version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - p-map: - specifier: ^7.0.3 - version: 7.0.3 - ps-tree: - specifier: ^1.2.0 - version: 1.2.0 - react: - specifier: ^19.0.0 - version: 19.1.0 - react-dom: - specifier: ^19.0.0 - version: 19.1.0(react@19.1.0) - react-hook-form: - specifier: ^7.54.2 - version: 7.56.3(react@19.1.0) - react-use: - specifier: ^17.6.0 - version: 17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - sonner: - specifier: ^2.0.2 - version: 2.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - tailwind-merge: - specifier: ^3.0.2 - version: 3.3.0 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@4.1.6) - vaul: - specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - zod: - specifier: ^3.24.2 - version: 3.24.4 - devDependencies: - '@evals/eslint-config': - specifier: workspace:^ - version: link:../../config/eslint - '@evals/typescript-config': - specifier: workspace:^ - version: link:../../config/typescript - '@tailwindcss/postcss': - specifier: ^4 - version: 4.1.6 - '@types/ps-tree': - specifier: ^1.1.6 - version: 1.1.6 - '@types/react': - specifier: ^19 - version: 19.1.4 - '@types/react-dom': - specifier: ^19 - version: 19.1.5(@types/react@19.1.4) - tailwindcss: - specifier: ^4 - version: 4.1.6 - - config/eslint: - devDependencies: - '@eslint/js': - specifier: ^9.22.0 - version: 9.26.0 - '@next/eslint-plugin-next': - specifier: ^15.2.1 - version: 15.3.2 - eslint: - specifier: ^9.22.0 - version: 9.26.0(jiti@2.4.2) - eslint-config-prettier: - specifier: ^10.1.1 - version: 10.1.5(eslint@9.26.0(jiti@2.4.2)) - eslint-plugin-only-warn: - specifier: ^1.1.0 - version: 1.1.0 - eslint-plugin-react: - specifier: ^7.37.4 - version: 7.37.5(eslint@9.26.0(jiti@2.4.2)) - eslint-plugin-react-hooks: - specifier: ^5.2.0 - version: 5.2.0(eslint@9.26.0(jiti@2.4.2)) - eslint-plugin-turbo: - specifier: ^2.4.4 - version: 2.5.3(eslint@9.26.0(jiti@2.4.2))(turbo@2.5.4) - globals: - specifier: ^16.0.0 - version: 16.1.0 - typescript-eslint: - specifier: ^8.26.0 - version: 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - - config/typescript: {} - - packages/db: - dependencies: - '@evals/types': - specifier: workspace:^ - version: link:../types - '@libsql/client': - specifier: ^0.15.0 - version: 0.15.6 - drizzle-orm: - specifier: ^0.43.0 - version: 0.43.1(@libsql/client@0.15.6) - drizzle-zod: - specifier: ^0.7.0 - version: 0.7.1(drizzle-orm@0.43.1(@libsql/client@0.15.6))(zod@3.24.4) - p-map: - specifier: ^7.0.3 - version: 7.0.3 - zod: - specifier: ^3.24.2 - version: 3.24.4 - devDependencies: - '@evals/eslint-config': - specifier: workspace:^ - version: link:../../config/eslint - '@evals/typescript-config': - specifier: workspace:^ - version: link:../../config/typescript - drizzle-kit: - specifier: ^0.31.0 - version: 0.31.1 - execa: - specifier: ^9.5.2 - version: 9.5.3 - vitest: - specifier: ^3.0.9 - version: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4) - - packages/ipc: - dependencies: - '@evals/types': - specifier: workspace:^ - version: link:../types - node-ipc: - specifier: ^12.0.0 - version: 12.0.0 - zod: - specifier: ^3.24.2 - version: 3.24.4 - devDependencies: - '@evals/eslint-config': - specifier: workspace:^ - version: link:../../config/eslint - '@evals/typescript-config': - specifier: workspace:^ - version: link:../../config/typescript - '@types/node-ipc': - specifier: ^9.2.3 - version: 9.2.3 - - packages/lib: - devDependencies: - '@evals/eslint-config': - specifier: workspace:^ - version: link:../../config/eslint - '@evals/typescript-config': - specifier: workspace:^ - version: link:../../config/typescript - vitest: - specifier: ^3.0.9 - version: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4) - - packages/types: - dependencies: - zod: - specifier: ^3.24.2 - version: 3.24.4 - devDependencies: - '@evals/eslint-config': - specifier: workspace:^ - version: link:../../config/eslint - '@evals/typescript-config': - specifier: workspace:^ - version: link:../../config/typescript - -packages: - - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - - '@babel/runtime@7.27.1': - resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} - engines: {node: '>=6.9.0'} - - '@dotenvx/dotenvx@1.44.1': - resolution: {integrity: sha512-j1QImCqf/XJmhIjC1OPpgiZV9g370HG9MNT9s/CDwCKsoYzNCPEKK+GfsidahJx7yIlBbm+4dPLlGec+bKn7oA==} - hasBin: true - - '@drizzle-team/brocli@0.10.2': - resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - - '@ecies/ciphers@0.2.3': - resolution: {integrity: sha512-tapn6XhOueMwht3E2UzY0ZZjYokdaw9XtL9kEyjhQ/Fb9vL9xTFbOaI+fV0AWvTpYu4BNloC6getKW6NtSg4mA==} - engines: {bun: '>=1', deno: '>=2', node: '>=16'} - peerDependencies: - '@noble/ciphers': ^1.0.0 - - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} - - '@esbuild-kit/core-utils@3.3.2': - resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} - deprecated: 'Merged into tsx: https://tsx.is' - - '@esbuild-kit/esm-loader@2.6.5': - resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} - deprecated: 'Merged into tsx: https://tsx.is' - - '@esbuild/aix-ppc64@0.25.4': - resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.18.20': - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.25.4': - resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.18.20': - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.25.4': - resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.18.20': - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.25.4': - resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.18.20': - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.25.4': - resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.18.20': - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.4': - resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.18.20': - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.25.4': - resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.18.20': - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.4': - resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.18.20': - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.25.4': - resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.18.20': - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.25.4': - resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.18.20': - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.25.4': - resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.18.20': - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.25.4': - resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.18.20': - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.25.4': - resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.18.20': - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.25.4': - resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.18.20': - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.4': - resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.18.20': - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.25.4': - resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.18.20': - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.25.4': - resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.4': - resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.18.20': - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.4': - resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.4': - resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.18.20': - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.4': - resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.18.20': - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.25.4': - resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.18.20': - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.25.4': - resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.18.20': - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.25.4': - resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.18.20': - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.25.4': - resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.20.0': - resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.2.2': - resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.13.0': - resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.26.0': - resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.2.8': - resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@floating-ui/core@1.7.0': - resolution: {integrity: sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==} - - '@floating-ui/dom@1.7.0': - resolution: {integrity: sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==} - - '@floating-ui/react-dom@2.1.2': - resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/utils@0.2.9': - resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - - '@hookform/resolvers@4.1.3': - resolution: {integrity: sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==} - peerDependencies: - react-hook-form: ^7.0.0 - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - - '@img/sharp-darwin-arm64@0.34.2': - resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-x64@0.34.2': - resolution: {integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.1.0': - resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.1.0': - resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-linux-arm64@1.1.0': - resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} - cpu: [arm64] - os: [linux] - - '@img/sharp-libvips-linux-arm@1.1.0': - resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} - cpu: [arm] - os: [linux] - - '@img/sharp-libvips-linux-ppc64@1.1.0': - resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} - cpu: [ppc64] - os: [linux] - - '@img/sharp-libvips-linux-s390x@1.1.0': - resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} - cpu: [s390x] - os: [linux] - - '@img/sharp-libvips-linux-x64@1.1.0': - resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} - cpu: [x64] - os: [linux] - - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': - resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} - cpu: [arm64] - os: [linux] - - '@img/sharp-libvips-linuxmusl-x64@1.1.0': - resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} - cpu: [x64] - os: [linux] - - '@img/sharp-linux-arm64@0.34.2': - resolution: {integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - - '@img/sharp-linux-arm@0.34.2': - resolution: {integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - - '@img/sharp-linux-s390x@0.34.2': - resolution: {integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - - '@img/sharp-linux-x64@0.34.2': - resolution: {integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - - '@img/sharp-linuxmusl-arm64@0.34.2': - resolution: {integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - - '@img/sharp-linuxmusl-x64@0.34.2': - resolution: {integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - - '@img/sharp-wasm32@0.34.2': - resolution: {integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-win32-arm64@0.34.2': - resolution: {integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [win32] - - '@img/sharp-win32-ia32@0.34.2': - resolution: {integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-x64@0.34.2': - resolution: {integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@libsql/client@0.15.6': - resolution: {integrity: sha512-oBZPKs8lhm3ndiqEI1yAi3mYjLieOHKlRQYCiJ8itMydJUSXoHlCbB/k9FlZPYb50tbeJ/A5H92hX/D/BlTjEA==} - - '@libsql/core@0.15.6': - resolution: {integrity: sha512-eqxxwB5Wsd4xxqt+RAVIAP05IobrBe6LFH4nSgGAE5dWauTlpMByVsYchYjvVdDSHk3EnByKJlSQuNr0RQiFxA==} - - '@libsql/darwin-arm64@0.5.10': - resolution: {integrity: sha512-6l3jdGdbEkd6yrkrZEDePOJOe4RT83FT43kCjjOp3yD7xKVq6tnAHcGqEna9YBy8EyR/4NeaiODx2+kwKjqnYQ==} - cpu: [arm64] - os: [darwin] - - '@libsql/darwin-x64@0.5.10': - resolution: {integrity: sha512-v9wBv2QzKXdgPmUU5a6Vt+Hue7FQygorjYKA0MtC9mkA2FHxpEwD3GXAMnrVmhovN5Jykdq6V4/MvX+fVZPafw==} - cpu: [x64] - os: [darwin] - - '@libsql/hrana-client@0.7.0': - resolution: {integrity: sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==} - - '@libsql/isomorphic-fetch@0.3.1': - resolution: {integrity: sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==} - engines: {node: '>=18.0.0'} - - '@libsql/isomorphic-ws@0.1.5': - resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} - - '@libsql/linux-arm-gnueabihf@0.5.10': - resolution: {integrity: sha512-gpMYoTZRg6xs1XKIMMkPRvIbbPqMMMN3RE280EUp5StPDFjMGHXIHUIoSxcOCChoVy2p4oVnCzlIBnWUtbaSaw==} - cpu: [arm] - os: [linux] - - '@libsql/linux-arm-musleabihf@0.5.10': - resolution: {integrity: sha512-bFaVoDjA+aqkGCtFuwoYZwSSBfFbk3YcgRE5Mijojd+c6xxiB0tc1zbQ8r7e6Cuf72URZA0YQlP6puW/AngGew==} - cpu: [arm] - os: [linux] - - '@libsql/linux-arm64-gnu@0.5.10': - resolution: {integrity: sha512-MOkIhb9Uje7dUySK2Qozb+Wm376/0NkhhD8/O9XNq3zQGXCv21z2TUDynXJVjA7Yjo6mfIF/u9YLUmJYmNvIgg==} - cpu: [arm64] - os: [linux] - - '@libsql/linux-arm64-musl@0.5.10': - resolution: {integrity: sha512-alnkTFERZy4n+6AniYUPZFtTSHu1CJo/HFcv3ZzAsRWagd7/3/MsPtfCvCmhOHjMuKS9qvPgbge16ynE8sx+4Q==} - cpu: [arm64] - os: [linux] - - '@libsql/linux-x64-gnu@0.5.10': - resolution: {integrity: sha512-sS1+59EzUtIunJMIN0kW98+xlOeizR6b+MbznNNkYwxxitBFVUdnKPVY72F66fYVD4xjzrk9JWCGvcNr+1xM4g==} - cpu: [x64] - os: [linux] - - '@libsql/linux-x64-musl@0.5.10': - resolution: {integrity: sha512-Ujv2KyHPSnTKQyl7I0m8MsWNvo4pIQ3ZruXJYYLQWVe8WkvErmucV55GIcSExd+06Uzh3qq/A/SH8s47xpCpFw==} - cpu: [x64] - os: [linux] - - '@libsql/win32-x64-msvc@0.5.10': - resolution: {integrity: sha512-wZMMsw1mq/lhX6qtG7q/eDKmGOT/Kyb4fgpq1d6yz2MkZUGTSXKse05eYIzkW5nS/BTeeb0S6RkTgaFVOXdmNw==} - cpu: [x64] - os: [win32] - - '@modelcontextprotocol/sdk@1.11.2': - resolution: {integrity: sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==} - engines: {node: '>=18'} - - '@neon-rs/load@0.0.4': - resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} - - '@next/env@15.3.3': - resolution: {integrity: sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==} - - '@next/eslint-plugin-next@15.3.2': - resolution: {integrity: sha512-ijVRTXBgnHT33aWnDtmlG+LJD+5vhc9AKTJPquGG5NKXjpKNjc62woIhFtrAcWdBobt8kqjCoaJ0q6sDQoX7aQ==} - - '@next/swc-darwin-arm64@15.3.3': - resolution: {integrity: sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@next/swc-darwin-x64@15.3.3': - resolution: {integrity: sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@next/swc-linux-arm64-gnu@15.3.3': - resolution: {integrity: sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@next/swc-linux-arm64-musl@15.3.3': - resolution: {integrity: sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@next/swc-linux-x64-gnu@15.3.3': - resolution: {integrity: sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@next/swc-linux-x64-musl@15.3.3': - resolution: {integrity: sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@next/swc-win32-arm64-msvc@15.3.3': - resolution: {integrity: sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@next/swc-win32-x64-msvc@15.3.3': - resolution: {integrity: sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@noble/ciphers@1.3.0': - resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} - engines: {node: ^14.21.3 || >=16} - - '@noble/curves@1.9.1': - resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} - engines: {node: ^14.21.3 || >=16} - - '@noble/hashes@1.8.0': - resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} - engines: {node: ^14.21.3 || >=16} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@radix-ui/number@1.1.1': - resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} - - '@radix-ui/primitive@1.1.2': - resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} - - '@radix-ui/react-alert-dialog@1.1.13': - resolution: {integrity: sha512-/uPs78OwxGxslYOG5TKeUsv9fZC0vo376cXSADdKirTmsLJU2au6L3n34c3p6W26rFDDDze/hwy4fYeNd0qdGA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-arrow@1.1.6': - resolution: {integrity: sha512-2JMfHJf/eVnwq+2dewT3C0acmCWD3XiVA1Da+jTDqo342UlU13WvXtqHhG+yJw5JeQmu4ue2eMy6gcEArLBlcw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-collection@1.1.6': - resolution: {integrity: sha512-PbhRFK4lIEw9ADonj48tiYWzkllz81TM7KVYyyMMw2cwHO7D5h4XKEblL8NlaRisTK3QTe6tBEhDccFUryxHBQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-context@1.1.2': - resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-dialog@1.1.13': - resolution: {integrity: sha512-ARFmqUyhIVS3+riWzwGTe7JLjqwqgnODBUZdqpWar/z1WFs9z76fuOs/2BOWCR+YboRn4/WN9aoaGVwqNRr8VA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-direction@1.1.1': - resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-dismissable-layer@1.1.9': - resolution: {integrity: sha512-way197PiTvNp+WBP7svMJasHl+vibhWGQDb6Mgf5mhEWJkgb85z7Lfl9TUdkqpWsf8GRNmoopx9ZxCyDzmgRMQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-dropdown-menu@2.1.14': - resolution: {integrity: sha512-lzuyNjoWOoaMFE/VC5FnAAYM16JmQA8ZmucOXtlhm2kKR5TSU95YLAueQ4JYuRmUJmBvSqXaVFGIfuukybwZJQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-focus-guards@1.1.2': - resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-focus-scope@1.1.6': - resolution: {integrity: sha512-r9zpYNUQY+2jWHWZGyddQLL9YHkM/XvSFHVcWs7bdVuxMAnCwTAuy6Pf47Z4nw7dYcUou1vg/VgjjrrH03VeBw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-id@1.1.1': - resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-label@2.1.6': - resolution: {integrity: sha512-S/hv1mTlgcPX2gCTJrWuTjSXf7ER3Zf7zWGtOprxhIIY93Qin3n5VgNA0Ez9AgrK/lEtlYgzLd4f5x6AVar4Yw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-menu@2.1.14': - resolution: {integrity: sha512-0zSiBAIFq9GSKoSH5PdEaQeRB3RnEGxC+H2P0egtnKoKKLNBH8VBHyVO6/jskhjAezhOIplyRUj7U2lds9A+Yg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popover@1.1.13': - resolution: {integrity: sha512-84uqQV3omKDR076izYgcha6gdpN8m3z6w/AeJ83MSBJYVG/AbOHdLjAgsPZkeC/kt+k64moXFCnio8BbqXszlw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popper@1.2.6': - resolution: {integrity: sha512-7iqXaOWIjDBfIG7aq8CUEeCSsQMLFdn7VEE8TaFz704DtEzpPHR7w/uuzRflvKgltqSAImgcmxQ7fFX3X7wasg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-portal@1.1.8': - resolution: {integrity: sha512-hQsTUIn7p7fxCPvao/q6wpbxmCwgLrlz+nOrJgC+RwfZqWY/WN+UMqkXzrtKbPrF82P43eCTl3ekeKuyAQbFeg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-presence@1.1.4': - resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-primitive@2.1.2': - resolution: {integrity: sha512-uHa+l/lKfxuDD2zjN/0peM/RhhSmRjr5YWdk/37EnSv1nJ88uvG85DPexSm8HdFQROd2VdERJ6ynXbkCFi+APw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-roving-focus@1.1.9': - resolution: {integrity: sha512-ZzrIFnMYHHCNqSNCsuN6l7wlewBEq0O0BCSBkabJMFXVO51LRUTq71gLP1UxFvmrXElqmPjA5VX7IqC9VpazAQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-scroll-area@1.2.8': - resolution: {integrity: sha512-K5h1RkYA6M0Sn61BV5LQs686zqBsSC0sGzL4/Gw4mNnjzrQcGSc6YXfC6CRFNaGydSdv5+M8cb0eNsOGo0OXtQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-select@2.2.4': - resolution: {integrity: sha512-/OOm58Gil4Ev5zT8LyVzqfBcij4dTHYdeyuF5lMHZ2bIp0Lk9oETocYiJ5QC0dHekEQnK6L/FNJCceeb4AkZ6Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-separator@1.1.6': - resolution: {integrity: sha512-Izof3lPpbCfTM7WDta+LRkz31jem890VjEvpVRoWQNKpDUMMVffuyq854XPGP1KYGWWmjmYvHvPFeocWhFCy1w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-slider@1.3.4': - resolution: {integrity: sha512-Cp6hEmQtRJFci285vkdIJ+HCDLTRDk+25VhFwa1fcubywjMUE3PynBgtN5RLudOgSCYMlT4jizCXdmV+8J7Y2w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-slot@1.2.2': - resolution: {integrity: sha512-y7TBO4xN4Y94FvcWIOIh18fM4R1A8S4q1jhoz4PNzOoHsFcN8pogcFmZrTYAm4F9VRUrWP/Mw7xSKybIeRI+CQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-tabs@1.1.11': - resolution: {integrity: sha512-4FiKSVoXqPP/KfzlB7lwwqoFV6EPwkrrqGp9cUYXjwDYHhvpnqq79P+EPHKcdoTE7Rl8w/+6s9rTlsfXHES9GA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-tooltip@1.2.6': - resolution: {integrity: sha512-zYb+9dc9tkoN2JjBDIIPLQtk3gGyz8FMKoqYTb8EMVQ5a5hBcdHPECrsZVI4NpPAUOixhkoqg7Hj5ry5USowfA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-use-callback-ref@1.1.1': - resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-controllable-state@1.2.2': - resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-effect-event@0.0.2': - resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-escape-keydown@1.1.1': - resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-layout-effect@1.1.1': - resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-previous@1.1.1': - resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-rect@1.1.1': - resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-size@1.1.1': - resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-visually-hidden@1.2.2': - resolution: {integrity: sha512-ORCmRUbNiZIv6uV5mhFrhsIKw4UX/N3syZtyqvry61tbGm4JlgQuSn0hk5TwCARsCjkcnuRkSdCE3xfb+ADHew==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/rect@1.1.1': - resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - - '@rollup/rollup-android-arm-eabi@4.40.2': - resolution: {integrity: sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.40.2': - resolution: {integrity: sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.40.2': - resolution: {integrity: sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.40.2': - resolution: {integrity: sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.40.2': - resolution: {integrity: sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.40.2': - resolution: {integrity: sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.40.2': - resolution: {integrity: sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.40.2': - resolution: {integrity: sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.40.2': - resolution: {integrity: sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.40.2': - resolution: {integrity: sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loongarch64-gnu@4.40.2': - resolution: {integrity: sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.40.2': - resolution: {integrity: sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.40.2': - resolution: {integrity: sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.40.2': - resolution: {integrity: sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.40.2': - resolution: {integrity: sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.40.2': - resolution: {integrity: sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.40.2': - resolution: {integrity: sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.40.2': - resolution: {integrity: sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.40.2': - resolution: {integrity: sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.40.2': - resolution: {integrity: sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==} - cpu: [x64] - os: [win32] - - '@sec-ant/readable-stream@0.4.1': - resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - - '@sindresorhus/merge-streams@4.0.0': - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} - engines: {node: '>=18'} - - '@standard-schema/utils@0.3.0': - resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - - '@tailwindcss/node@4.1.6': - resolution: {integrity: sha512-ed6zQbgmKsjsVvodAS1q1Ld2BolEuxJOSyyNc+vhkjdmfNUDCmQnlXBfQkHrlzNmslxHsQU/bFmzcEbv4xXsLg==} - - '@tailwindcss/oxide-android-arm64@4.1.6': - resolution: {integrity: sha512-VHwwPiwXtdIvOvqT/0/FLH/pizTVu78FOnI9jQo64kSAikFSZT7K4pjyzoDpSMaveJTGyAKvDjuhxJxKfmvjiQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@tailwindcss/oxide-darwin-arm64@4.1.6': - resolution: {integrity: sha512-weINOCcqv1HVBIGptNrk7c6lWgSFFiQMcCpKM4tnVi5x8OY2v1FrV76jwLukfT6pL1hyajc06tyVmZFYXoxvhQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.1.6': - resolution: {integrity: sha512-3FzekhHG0ww1zQjQ1lPoq0wPrAIVXAbUkWdWM8u5BnYFZgb9ja5ejBqyTgjpo5mfy0hFOoMnMuVDI+7CXhXZaQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-freebsd-x64@4.1.6': - resolution: {integrity: sha512-4m5F5lpkBZhVQJq53oe5XgJ+aFYWdrgkMwViHjRsES3KEu2m1udR21B1I77RUqie0ZYNscFzY1v9aDssMBZ/1w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.6': - resolution: {integrity: sha512-qU0rHnA9P/ZoaDKouU1oGPxPWzDKtIfX7eOGi5jOWJKdxieUJdVV+CxWZOpDWlYTd4N3sFQvcnVLJWJ1cLP5TA==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.6': - resolution: {integrity: sha512-jXy3TSTrbfgyd3UxPQeXC3wm8DAgmigzar99Km9Sf6L2OFfn/k+u3VqmpgHQw5QNfCpPe43em6Q7V76Wx7ogIQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-musl@4.1.6': - resolution: {integrity: sha512-8kjivE5xW0qAQ9HX9reVFmZj3t+VmljDLVRJpVBEoTR+3bKMnvC7iLcoSGNIUJGOZy1mLVq7x/gerVg0T+IsYw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-gnu@4.1.6': - resolution: {integrity: sha512-A4spQhwnWVpjWDLXnOW9PSinO2PTKJQNRmL/aIl2U/O+RARls8doDfs6R41+DAXK0ccacvRyDpR46aVQJJCoCg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-musl@4.1.6': - resolution: {integrity: sha512-YRee+6ZqdzgiQAHVSLfl3RYmqeeaWVCk796MhXhLQu2kJu2COHBkqlqsqKYx3p8Hmk5pGCQd2jTAoMWWFeyG2A==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-wasm32-wasi@4.1.6': - resolution: {integrity: sha512-qAp4ooTYrBQ5pk5jgg54/U1rCJ/9FLYOkkQ/nTE+bVMseMfB6O7J8zb19YTpWuu4UdfRf5zzOrNKfl6T64MNrQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.6': - resolution: {integrity: sha512-nqpDWk0Xr8ELO/nfRUDjk1pc9wDJ3ObeDdNMHLaymc4PJBWj11gdPCWZFKSK2AVKjJQC7J2EfmSmf47GN7OuLg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.1.6': - resolution: {integrity: sha512-5k9xF33xkfKpo9wCvYcegQ21VwIBU1/qEbYlVukfEIyQbEA47uK8AAwS7NVjNE3vHzcmxMYwd0l6L4pPjjm1rQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide@4.1.6': - resolution: {integrity: sha512-0bpEBQiGx+227fW4G0fLQ8vuvyy5rsB1YIYNapTq3aRsJ9taF3f5cCaovDjN5pUGKKzcpMrZst/mhNaKAPOHOA==} - engines: {node: '>= 10'} - - '@tailwindcss/postcss@4.1.6': - resolution: {integrity: sha512-ELq+gDMBuRXPJlpE3PEen+1MhnHAQQrh2zF0dI1NXOlEWfr2qWf2CQdr5jl9yANv8RErQaQ2l6nIFO9OSCVq/g==} - - '@tanstack/query-core@5.76.0': - resolution: {integrity: sha512-FN375hb8ctzfNAlex5gHI6+WDXTNpe0nbxp/d2YJtnP+IBM6OUm7zcaoCW6T63BawGOYZBbKC0iPvr41TteNVg==} - - '@tanstack/react-query@5.76.1': - resolution: {integrity: sha512-YxdLZVGN4QkT5YT1HKZQWiIlcgauIXEIsMOTSjvyD5wLYK8YVvKZUPAysMqossFJJfDpJW3pFn7WNZuPOqq+fw==} - peerDependencies: - react: ^18 || ^19 - - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - - '@types/js-cookie@2.2.7': - resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/node-ipc@9.2.3': - resolution: {integrity: sha512-/MvSiF71fYf3+zwqkh/zkVkZj1hl1Uobre9EMFy08mqfJNAmpR0vmPgOUdEIDVgifxHj6G1vYMPLSBLLxoDACQ==} - - '@types/node@22.15.18': - resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} - - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - - '@types/ps-tree@1.1.6': - resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} - - '@types/react-dom@19.1.5': - resolution: {integrity: sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==} - peerDependencies: - '@types/react': ^19.0.0 - - '@types/react@19.1.4': - resolution: {integrity: sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==} - - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - - '@typescript-eslint/eslint-plugin@8.32.1': - resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/parser@8.32.1': - resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/scope-manager@8.32.1': - resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/type-utils@8.32.1': - resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/types@8.32.1': - resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.32.1': - resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.32.1': - resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/visitor-keys@8.32.1': - resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@vitest/expect@3.1.3': - resolution: {integrity: sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==} - - '@vitest/mocker@3.1.3': - resolution: {integrity: sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==} - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - - '@vitest/pretty-format@3.1.3': - resolution: {integrity: sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==} - - '@vitest/runner@3.1.3': - resolution: {integrity: sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==} - - '@vitest/snapshot@3.1.3': - resolution: {integrity: sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==} - - '@vitest/spy@3.1.3': - resolution: {integrity: sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==} - - '@vitest/utils@3.1.3': - resolution: {integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==} - - '@xobotyi/scrollbar-width@1.9.5': - resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} - - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - - ansi-regex@4.1.1: - resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} - engines: {node: '>=6'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - apisauce@2.1.6: - resolution: {integrity: sha512-MdxR391op/FucS2YQRfB/NMRyCnHEPDd4h17LRIuVYi0BpGmMhpxc0shbOpfs5ahABuBEffNCGal5EcsydbBWg==} - - app-module-path@2.2.0: - resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - aria-hidden@1.2.4: - resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} - engines: {node: '>=10'} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - axios@0.21.4: - resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - body-parser@2.2.0: - resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} - engines: {node: '>=18'} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - caniuse-lite@1.0.30001718: - resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} - - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - - class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - cli-table3@0.6.0: - resolution: {integrity: sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==} - engines: {node: 10.* || >= 12.*} - - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - - cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - cmdk@1.1.1: - resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - react-dom: ^18 || ^19 || ^19.0.0-rc - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - - colors@1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} - - commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - - copyfiles@2.4.1: - resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} - hasBin: true - - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - - cosmiconfig@7.0.1: - resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} - engines: {node: '>=10'} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - css-in-js-utils@3.1.0: - resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} - - css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - - detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} - engines: {node: '>=8'} - - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} - engines: {node: '>=8'} - - detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} - - dotenv@16.5.0: - resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} - engines: {node: '>=12'} - - drizzle-kit@0.31.1: - resolution: {integrity: sha512-PUjYKWtzOzPtdtQlTHQG3qfv4Y0XT8+Eas6UbxCmxTj7qgMf+39dDujf1BP1I+qqZtw9uzwTh8jYtkMuCq+B0Q==} - hasBin: true - - drizzle-orm@0.43.1: - resolution: {integrity: sha512-dUcDaZtE/zN4RV/xqGrVSMpnEczxd5cIaoDeor7Zst9wOe/HzC/7eAaulywWGYXdDEc9oBPMjayVEDg0ziTLJA==} - peerDependencies: - '@aws-sdk/client-rds-data': '>=3' - '@cloudflare/workers-types': '>=4' - '@electric-sql/pglite': '>=0.2.0' - '@libsql/client': '>=0.10.0' - '@libsql/client-wasm': '>=0.10.0' - '@neondatabase/serverless': '>=0.10.0' - '@op-engineering/op-sqlite': '>=2' - '@opentelemetry/api': ^1.4.1 - '@planetscale/database': '>=1.13' - '@prisma/client': '*' - '@tidbcloud/serverless': '*' - '@types/better-sqlite3': '*' - '@types/pg': '*' - '@types/sql.js': '*' - '@vercel/postgres': '>=0.8.0' - '@xata.io/client': '*' - better-sqlite3: '>=7' - bun-types: '*' - expo-sqlite: '>=14.0.0' - gel: '>=2' - knex: '*' - kysely: '*' - mysql2: '>=2' - pg: '>=8' - postgres: '>=3' - prisma: '*' - sql.js: '>=1' - sqlite3: '>=5' - peerDependenciesMeta: - '@aws-sdk/client-rds-data': - optional: true - '@cloudflare/workers-types': - optional: true - '@electric-sql/pglite': - optional: true - '@libsql/client': - optional: true - '@libsql/client-wasm': - optional: true - '@neondatabase/serverless': - optional: true - '@op-engineering/op-sqlite': - optional: true - '@opentelemetry/api': - optional: true - '@planetscale/database': - optional: true - '@prisma/client': - optional: true - '@tidbcloud/serverless': - optional: true - '@types/better-sqlite3': - optional: true - '@types/pg': - optional: true - '@types/sql.js': - optional: true - '@vercel/postgres': - optional: true - '@xata.io/client': - optional: true - better-sqlite3: - optional: true - bun-types: - optional: true - expo-sqlite: - optional: true - gel: - optional: true - knex: - optional: true - kysely: - optional: true - mysql2: - optional: true - pg: - optional: true - postgres: - optional: true - prisma: - optional: true - sql.js: - optional: true - sqlite3: - optional: true - - drizzle-zod@0.7.1: - resolution: {integrity: sha512-nZzALOdz44/AL2U005UlmMqaQ1qe5JfanvLujiTHiiT8+vZJTBFhj3pY4Vk+L6UWyKFfNmLhk602Hn4kCTynKQ==} - peerDependencies: - drizzle-orm: '>=0.36.0' - zod: '>=3.0.0' - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - - easy-stack@1.0.1: - resolution: {integrity: sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==} - engines: {node: '>=6.0.0'} - - eciesjs@0.4.15: - resolution: {integrity: sha512-r6kEJXDKecVOCj2nLMuXK/FCPeurW33+3JRpfXVbjLja3XUYFfD9I/JBreH6sUyzcm3G/YQboBjMla6poKeSdA==} - engines: {bun: '>=1', deno: '>=2', node: '>=16'} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - ejs@3.1.8: - resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} - engines: {node: '>=0.10.0'} - hasBin: true - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} - engines: {node: '>=10.13.0'} - - enquirer@2.3.6: - resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} - engines: {node: '>=8.6'} - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - - es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - esbuild-register@3.6.0: - resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} - peerDependencies: - esbuild: '>=0.12 <1' - - esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - - esbuild@0.25.4: - resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-prettier@10.1.5: - resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-plugin-only-warn@1.1.0: - resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} - engines: {node: '>=6'} - - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-plugin-turbo@2.5.3: - resolution: {integrity: sha512-DlXZd+LgpDlxH/6IsiAXLhy82x0jeJDm0XBEqP6Le08uy0HBQkjCUt7SmXNp8esAtX9RYe6oDClbNbmI1jtK5g==} - peerDependencies: - eslint: '>6.6.0' - turbo: '>2.0.0' - - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.26.0: - resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - event-pubsub@5.0.3: - resolution: {integrity: sha512-2QiHxshejKgJrYMzSI9MEHrvhmzxBL+eLyiM5IiyjDBySkgwS2+tdtnO3gbx8pEisu/yOFCIhfCb63gCEu0yBQ==} - engines: {node: '>=13.0.0'} - - event-stream@3.3.4: - resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} - - eventsource-parser@3.0.1: - resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} - engines: {node: '>=18.0.0'} - - eventsource@3.0.7: - resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} - engines: {node: '>=18.0.0'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - execa@9.5.3: - resolution: {integrity: sha512-QFNnTvU3UjgWFy8Ef9iDHvIdcgZ344ebkwYx4/KLbR+CKQA4xBaHzv+iRpp86QfMHP8faFQLh8iOc57215y4Rg==} - engines: {node: ^18.19.0 || >=20.5.0} - - expect-type@1.2.1: - resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} - engines: {node: '>=12.0.0'} - - express-rate-limit@7.5.0: - resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} - engines: {node: '>= 16'} - peerDependencies: - express: ^4.11 || 5 || ^5.0.0-beta.1 - - express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} - engines: {node: '>= 18'} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fast-shallow-equal@1.0.0: - resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} - - fastest-stable-stringify@2.0.2: - resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} - - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - - fdir@6.4.5: - resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - - figures@6.1.0: - resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} - engines: {node: '>=18'} - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - - from@0.1.7: - resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} - - fs-jetpack@4.3.1: - resolution: {integrity: sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ==} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - fuzzysort@3.1.0: - resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-stream@9.0.1: - resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} - engines: {node: '>=18'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@16.1.0: - resolution: {integrity: sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==} - engines: {node: '>=18'} - - globals@16.2.0: - resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==} - engines: {node: '>=18'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gluegun@5.2.0: - resolution: {integrity: sha512-jSUM5xUy2ztYFQANne17OUm/oAd7qSX7EBksS9bQDt9UvLPqcEkeWUebmaposb8Tx7eTTD8uJVWGRe6PYSsYkg==} - hasBin: true - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - human-signals@8.0.1: - resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} - engines: {node: '>=18.18.0'} - - hyphenate-style-name@1.1.0: - resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.4: - resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} - engines: {node: '>= 4'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - inline-style-prefixer@7.0.1: - resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-stream@4.0.1: - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} - engines: {node: '>=18'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-unicode-supported@2.1.0: - resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} - engines: {node: '>=18'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - - jake@10.9.2: - resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} - engines: {node: '>=10'} - hasBin: true - - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} - hasBin: true - - js-base64@3.7.7: - resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} - - js-cookie@2.2.1: - resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} - - js-message@1.0.7: - resolution: {integrity: sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==} - engines: {node: '>=0.6.0'} - - js-queue@2.0.2: - resolution: {integrity: sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==} - engines: {node: '>=1.0.0'} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - libsql@0.5.10: - resolution: {integrity: sha512-lQu5RLqDLFuo6H5SuR3CnEstGVph77Jd8lm3fdW64p6tUjOC0X8Z9PlfAdZYxWyirYLH9uwcEZUrABsNKYwOiQ==} - cpu: [x64, arm64, wasm32, arm] - os: [darwin, linux, win32] - - lightningcss-darwin-arm64@1.29.2: - resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.29.2: - resolution: {integrity: sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.29.2: - resolution: {integrity: sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.29.2: - resolution: {integrity: sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.29.2: - resolution: {integrity: sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-arm64-musl@1.29.2: - resolution: {integrity: sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-x64-gnu@1.29.2: - resolution: {integrity: sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-linux-x64-musl@1.29.2: - resolution: {integrity: sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-win32-arm64-msvc@1.29.2: - resolution: {integrity: sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.29.2: - resolution: {integrity: sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.29.2: - resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==} - engines: {node: '>= 12.0.0'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - - lodash.lowercase@4.3.0: - resolution: {integrity: sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA==} - - lodash.lowerfirst@4.3.1: - resolution: {integrity: sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash.pad@4.5.1: - resolution: {integrity: sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==} - - lodash.padend@4.6.1: - resolution: {integrity: sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==} - - lodash.padstart@4.6.1: - resolution: {integrity: sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==} - - lodash.repeat@4.1.0: - resolution: {integrity: sha512-eWsgQW89IewS95ZOcr15HHCX6FVDxq3f2PNUIng3fyzsPev9imFQxIYdFZ6crl8L56UR6ZlGDLcEb3RZsCSSqw==} - - lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - - lodash.trim@4.5.1: - resolution: {integrity: sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg==} - - lodash.trimend@4.5.1: - resolution: {integrity: sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA==} - - lodash.trimstart@4.5.1: - resolution: {integrity: sha512-b/+D6La8tU76L/61/aN0jULWHkT0EeJCmVstPBn/K9MtD2qBW83AsBNrr63dKuWYwVMO7ucv13QNO/Ek/2RKaQ==} - - lodash.uppercase@4.3.0: - resolution: {integrity: sha512-+Nbnxkj7s8K5U8z6KnEYPGUOGp3woZbB7Ecs7v3LkkjLQSm2kP9SKIILitN1ktn2mB/tmM9oSlku06I+/lH7QA==} - - lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - - log-symbols@3.0.0: - resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} - engines: {node: '>=8'} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - lucide-react@0.511.0: - resolution: {integrity: sha512-VK5a2ydJ7xm8GvBeKLS9mu1pVK6ucef9780JVUjw6bAjJL/QXnd4Y0p7SPeOUMC27YhzNCZvm5d/QX0Tp3rc0w==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - - map-stream@0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} - - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@3.0.2: - resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} - engines: {node: '>= 18'} - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - nano-css@5.6.2: - resolution: {integrity: sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==} - peerDependencies: - react: '*' - react-dom: '*' - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - - next-themes@0.4.6: - resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} - peerDependencies: - react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - - next@15.3.3: - resolution: {integrity: sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - babel-plugin-react-compiler: - optional: true - sass: - optional: true - - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - deprecated: Use your platform's native DOMException instead - - node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - node-ipc@12.0.0: - resolution: {integrity: sha512-QHJ2gAJiqA3cM7cQiRjLsfCOBRB0TwQ6axYD4FSllQWipEbP6i7Se1dP8EzPKk5J1nCe27W69eqPmCoKyQ61Vg==} - engines: {node: '>=14'} - - noms@0.0.0: - resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - npm-run-path@6.0.0: - resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} - engines: {node: '>=18'} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object-treeify@1.1.33: - resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} - engines: {node: '>= 10'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - ora@4.0.2: - resolution: {integrity: sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig==} - engines: {node: '>=8'} - - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} - engines: {node: '>=18'} - - p-timeout@6.1.4: - resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} - engines: {node: '>=14.16'} - - p-wait-for@5.0.2: - resolution: {integrity: sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==} - engines: {node: '>=12'} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse-ms@4.0.0: - resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} - engines: {node: '>=18'} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} - - pause-stream@0.0.11: - resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - - pkce-challenge@5.0.0: - resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} - engines: {node: '>=16.20.0'} - - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} - engines: {node: ^10 || ^12 || >=14} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} - engines: {node: '>=14'} - hasBin: true - - pretty-ms@9.2.0: - resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} - engines: {node: '>=18'} - - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - - promise-limit@2.7.0: - resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - ps-tree@1.2.0: - resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} - engines: {node: '>= 0.10'} - hasBin: true - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} - - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} - peerDependencies: - react: ^19.1.0 - - react-hook-form@7.56.3: - resolution: {integrity: sha512-IK18V6GVbab4TAo1/cz3kqajxbDPGofdF0w7VHdCo0Nt8PrPlOZcuuDq9YYIV1BtjcX78x0XsldbQRQnQXWXmw==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-remove-scroll-bar@2.3.8: - resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - react-remove-scroll@2.6.3: - resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react-style-singleton@2.2.3: - resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react-universal-interface@0.6.2: - resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} - peerDependencies: - react: '*' - tslib: '*' - - react-use@17.6.0: - resolution: {integrity: sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g==} - peerDependencies: - react: '*' - react-dom: '*' - - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} - engines: {node: '>=0.10.0'} - - readable-stream@1.0.34: - resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} - - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resize-observer-polyfill@1.5.1: - resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rollup@4.40.2: - resolution: {integrity: sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} - - rtl-css-js@1.16.1: - resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} - - screenfull@5.2.0: - resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} - engines: {node: '>=0.10.0'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.3.5: - resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} - engines: {node: '>=10'} - hasBin: true - - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} - engines: {node: '>= 18'} - - serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} - engines: {node: '>= 18'} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-harmonic-interval@1.0.1: - resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} - engines: {node: '>=6.9'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - sharp@0.34.2: - resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - - sonner@2.0.3: - resolution: {integrity: sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.5.6: - resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} - engines: {node: '>=0.10.0'} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - split@0.3.3: - resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} - - stack-generator@2.0.10: - resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} - - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - - stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - - stacktrace-gps@3.1.2: - resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} - - stacktrace-js@2.0.2: - resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} - - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - std-env@3.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} - - stream-combiner@0.0.4: - resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} - - streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - string_decoder@0.10.31: - resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} - - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - - strip-ansi@5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-final-newline@4.0.0: - resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} - engines: {node: '>=18'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - strong-type@0.1.6: - resolution: {integrity: sha512-eJe5caH6Pi5oMMeQtIoBPpvNu/s4jiyb63u5tkHNnQXomK+puyQ5i+Z5iTLBr/xUz/pIcps0NSfzzFI34+gAXg==} - engines: {node: '>=12.0.0'} - - strong-type@1.1.0: - resolution: {integrity: sha512-X5Z6riticuH5GnhUyzijfDi1SoXas8ODDyN7K8lJeQK+Jfi4dKdoJGL4CXTskY/ATBcN+rz5lROGn1tAUkOX7g==} - engines: {node: '>=12.21.0'} - - styled-jsx@5.1.6: - resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - - stylis@4.3.6: - resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - tailwind-merge@3.3.0: - resolution: {integrity: sha512-fyW/pEfcQSiigd5SNn0nApUOxx0zB/dm6UDU/rEwc2c3sX2smWUNbapHv+QRqLGVp9GWX3THIa7MUGPo+YkDzQ==} - - tailwindcss-animate@1.0.7: - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' - - tailwindcss@4.1.6: - resolution: {integrity: sha512-j0cGLTreM6u4OWzBeLBpycK0WIh8w7kSwcUsQZoGLHZ7xDTdM69lN64AgoIEEwFi0tnhs4wSykUa5YWxAzgFYg==} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} - engines: {node: '>=18'} - - throttle-debounce@3.0.1: - resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} - engines: {node: '>=10'} - - through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} - engines: {node: '>=12.0.0'} - - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} - engines: {node: '>=14.0.0'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-easing@0.2.0: - resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tsx@4.19.4: - resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} - engines: {node: '>=18.0.0'} - hasBin: true - - turbo-darwin-64@2.5.4: - resolution: {integrity: sha512-ah6YnH2dErojhFooxEzmvsoZQTMImaruZhFPfMKPBq8sb+hALRdvBNLqfc8NWlZq576FkfRZ/MSi4SHvVFT9PQ==} - cpu: [x64] - os: [darwin] - - turbo-darwin-arm64@2.5.4: - resolution: {integrity: sha512-2+Nx6LAyuXw2MdXb7pxqle3MYignLvS7OwtsP9SgtSBaMlnNlxl9BovzqdYAgkUW3AsYiQMJ/wBRb7d+xemM5A==} - cpu: [arm64] - os: [darwin] - - turbo-linux-64@2.5.4: - resolution: {integrity: sha512-5May2kjWbc8w4XxswGAl74GZ5eM4Gr6IiroqdLhXeXyfvWEdm2mFYCSWOzz0/z5cAgqyGidF1jt1qzUR8hTmOA==} - cpu: [x64] - os: [linux] - - turbo-linux-arm64@2.5.4: - resolution: {integrity: sha512-/2yqFaS3TbfxV3P5yG2JUI79P7OUQKOUvAnx4MV9Bdz6jqHsHwc9WZPpO4QseQm+NvmgY6ICORnoVPODxGUiJg==} - cpu: [arm64] - os: [linux] - - turbo-windows-64@2.5.4: - resolution: {integrity: sha512-EQUO4SmaCDhO6zYohxIjJpOKRN3wlfU7jMAj3CgcyTPvQR/UFLEKAYHqJOnJtymbQmiiM/ihX6c6W6Uq0yC7mA==} - cpu: [x64] - os: [win32] - - turbo-windows-arm64@2.5.4: - resolution: {integrity: sha512-oQ8RrK1VS8lrxkLriotFq+PiF7iiGgkZtfLKF4DDKsmdbPo0O9R2mQxm7jHLuXraRCuIQDWMIw6dpcr7Iykf4A==} - cpu: [arm64] - os: [win32] - - turbo@2.5.4: - resolution: {integrity: sha512-kc8ZibdRcuWUG1pbYSBFWqmIjynlD8Lp7IB6U3vIzvOv9VG+6Sp8bzyeBWE3Oi8XV5KsQrznyRTBPvrf99E4mA==} - hasBin: true - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typescript-eslint@8.32.1: - resolution: {integrity: sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} - engines: {node: '>=14.17'} - hasBin: true - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - use-callback-ref@1.3.3: - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - use-sidecar@1.1.3: - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - vaul@1.1.2: - resolution: {integrity: sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc - - vite-node@3.1.3: - resolution: {integrity: sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - - vite@6.3.5: - resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - 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 - - vitest@3.1.3: - resolution: {integrity: sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.1.3 - '@vitest/ui': 3.1.3 - 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 - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - ws@8.18.2: - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - yoctocolors@2.1.1: - resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} - engines: {node: '>=18'} - - zod-to-json-schema@3.24.5: - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} - peerDependencies: - zod: ^3.24.1 - - zod@3.24.4: - resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} - -snapshots: - - '@alloc/quick-lru@5.2.0': {} - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/helper-validator-identifier@7.27.1': {} - - '@babel/runtime@7.27.1': {} - - '@dotenvx/dotenvx@1.44.1': - dependencies: - commander: 11.1.0 - dotenv: 16.5.0 - eciesjs: 0.4.15 - execa: 5.1.1 - fdir: 6.4.5(picomatch@4.0.2) - ignore: 5.3.2 - object-treeify: 1.1.33 - picomatch: 4.0.2 - which: 4.0.0 - - '@drizzle-team/brocli@0.10.2': {} - - '@ecies/ciphers@0.2.3(@noble/ciphers@1.3.0)': - dependencies: - '@noble/ciphers': 1.3.0 - - '@emnapi/runtime@1.4.3': - dependencies: - tslib: 2.8.1 - optional: true - - '@esbuild-kit/core-utils@3.3.2': - dependencies: - esbuild: 0.18.20 - source-map-support: 0.5.21 - - '@esbuild-kit/esm-loader@2.6.5': - dependencies: - '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.10.0 - - '@esbuild/aix-ppc64@0.25.4': - optional: true - - '@esbuild/android-arm64@0.18.20': - optional: true - - '@esbuild/android-arm64@0.25.4': - optional: true - - '@esbuild/android-arm@0.18.20': - optional: true - - '@esbuild/android-arm@0.25.4': - optional: true - - '@esbuild/android-x64@0.18.20': - optional: true - - '@esbuild/android-x64@0.25.4': - optional: true - - '@esbuild/darwin-arm64@0.18.20': - optional: true - - '@esbuild/darwin-arm64@0.25.4': - optional: true - - '@esbuild/darwin-x64@0.18.20': - optional: true - - '@esbuild/darwin-x64@0.25.4': - optional: true - - '@esbuild/freebsd-arm64@0.18.20': - optional: true - - '@esbuild/freebsd-arm64@0.25.4': - optional: true - - '@esbuild/freebsd-x64@0.18.20': - optional: true - - '@esbuild/freebsd-x64@0.25.4': - optional: true - - '@esbuild/linux-arm64@0.18.20': - optional: true - - '@esbuild/linux-arm64@0.25.4': - optional: true - - '@esbuild/linux-arm@0.18.20': - optional: true - - '@esbuild/linux-arm@0.25.4': - optional: true - - '@esbuild/linux-ia32@0.18.20': - optional: true - - '@esbuild/linux-ia32@0.25.4': - optional: true - - '@esbuild/linux-loong64@0.18.20': - optional: true - - '@esbuild/linux-loong64@0.25.4': - optional: true - - '@esbuild/linux-mips64el@0.18.20': - optional: true - - '@esbuild/linux-mips64el@0.25.4': - optional: true - - '@esbuild/linux-ppc64@0.18.20': - optional: true - - '@esbuild/linux-ppc64@0.25.4': - optional: true - - '@esbuild/linux-riscv64@0.18.20': - optional: true - - '@esbuild/linux-riscv64@0.25.4': - optional: true - - '@esbuild/linux-s390x@0.18.20': - optional: true - - '@esbuild/linux-s390x@0.25.4': - optional: true - - '@esbuild/linux-x64@0.18.20': - optional: true - - '@esbuild/linux-x64@0.25.4': - optional: true - - '@esbuild/netbsd-arm64@0.25.4': - optional: true - - '@esbuild/netbsd-x64@0.18.20': - optional: true - - '@esbuild/netbsd-x64@0.25.4': - optional: true - - '@esbuild/openbsd-arm64@0.25.4': - optional: true - - '@esbuild/openbsd-x64@0.18.20': - optional: true - - '@esbuild/openbsd-x64@0.25.4': - optional: true - - '@esbuild/sunos-x64@0.18.20': - optional: true - - '@esbuild/sunos-x64@0.25.4': - optional: true - - '@esbuild/win32-arm64@0.18.20': - optional: true - - '@esbuild/win32-arm64@0.25.4': - optional: true - - '@esbuild/win32-ia32@0.18.20': - optional: true - - '@esbuild/win32-ia32@0.25.4': - optional: true - - '@esbuild/win32-x64@0.18.20': - optional: true - - '@esbuild/win32-x64@0.25.4': - optional: true - - '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0(jiti@2.4.2))': - dependencies: - eslint: 9.26.0(jiti@2.4.2) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/config-array@0.20.0': - dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.1 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.2.2': {} - - '@eslint/core@0.13.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.1': - dependencies: - ajv: 6.12.6 - debug: 4.4.1 - espree: 10.3.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.26.0': {} - - '@eslint/object-schema@2.1.6': {} - - '@eslint/plugin-kit@0.2.8': - dependencies: - '@eslint/core': 0.13.0 - levn: 0.4.1 - - '@floating-ui/core@1.7.0': - dependencies: - '@floating-ui/utils': 0.2.9 - - '@floating-ui/dom@1.7.0': - dependencies: - '@floating-ui/core': 1.7.0 - '@floating-ui/utils': 0.2.9 - - '@floating-ui/react-dom@2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@floating-ui/dom': 1.7.0 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - - '@floating-ui/utils@0.2.9': {} - - '@hookform/resolvers@4.1.3(react-hook-form@7.56.3(react@19.1.0))': - dependencies: - '@standard-schema/utils': 0.3.0 - react-hook-form: 7.56.3(react@19.1.0) - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.6': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.3': {} - - '@img/sharp-darwin-arm64@0.34.2': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.1.0 - optional: true - - '@img/sharp-darwin-x64@0.34.2': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.1.0 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.1.0': - optional: true - - '@img/sharp-libvips-darwin-x64@1.1.0': - optional: true - - '@img/sharp-libvips-linux-arm64@1.1.0': - optional: true - - '@img/sharp-libvips-linux-arm@1.1.0': - optional: true - - '@img/sharp-libvips-linux-ppc64@1.1.0': - optional: true - - '@img/sharp-libvips-linux-s390x@1.1.0': - optional: true - - '@img/sharp-libvips-linux-x64@1.1.0': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.1.0': - optional: true - - '@img/sharp-linux-arm64@0.34.2': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.1.0 - optional: true - - '@img/sharp-linux-arm@0.34.2': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.1.0 - optional: true - - '@img/sharp-linux-s390x@0.34.2': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.1.0 - optional: true - - '@img/sharp-linux-x64@0.34.2': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.1.0 - optional: true - - '@img/sharp-linuxmusl-arm64@0.34.2': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 - optional: true - - '@img/sharp-linuxmusl-x64@0.34.2': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.1.0 - optional: true - - '@img/sharp-wasm32@0.34.2': - dependencies: - '@emnapi/runtime': 1.4.3 - optional: true - - '@img/sharp-win32-arm64@0.34.2': - optional: true - - '@img/sharp-win32-ia32@0.34.2': - optional: true - - '@img/sharp-win32-x64@0.34.2': - optional: true - - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@libsql/client@0.15.6': - dependencies: - '@libsql/core': 0.15.6 - '@libsql/hrana-client': 0.7.0 - js-base64: 3.7.7 - libsql: 0.5.10 - promise-limit: 2.7.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@libsql/core@0.15.6': - dependencies: - js-base64: 3.7.7 - - '@libsql/darwin-arm64@0.5.10': - optional: true - - '@libsql/darwin-x64@0.5.10': - optional: true - - '@libsql/hrana-client@0.7.0': - dependencies: - '@libsql/isomorphic-fetch': 0.3.1 - '@libsql/isomorphic-ws': 0.1.5 - js-base64: 3.7.7 - node-fetch: 3.3.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@libsql/isomorphic-fetch@0.3.1': {} - - '@libsql/isomorphic-ws@0.1.5': - dependencies: - '@types/ws': 8.18.1 - ws: 8.18.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@libsql/linux-arm-gnueabihf@0.5.10': - optional: true - - '@libsql/linux-arm-musleabihf@0.5.10': - optional: true - - '@libsql/linux-arm64-gnu@0.5.10': - optional: true - - '@libsql/linux-arm64-musl@0.5.10': - optional: true - - '@libsql/linux-x64-gnu@0.5.10': - optional: true - - '@libsql/linux-x64-musl@0.5.10': - optional: true - - '@libsql/win32-x64-msvc@0.5.10': - optional: true - - '@modelcontextprotocol/sdk@1.11.2': - dependencies: - content-type: 1.0.5 - cors: 2.8.5 - cross-spawn: 7.0.6 - eventsource: 3.0.7 - express: 5.1.0 - express-rate-limit: 7.5.0(express@5.1.0) - pkce-challenge: 5.0.0 - raw-body: 3.0.0 - zod: 3.24.4 - zod-to-json-schema: 3.24.5(zod@3.24.4) - transitivePeerDependencies: - - supports-color - - '@neon-rs/load@0.0.4': {} - - '@next/env@15.3.3': {} - - '@next/eslint-plugin-next@15.3.2': - dependencies: - fast-glob: 3.3.1 - - '@next/swc-darwin-arm64@15.3.3': - optional: true - - '@next/swc-darwin-x64@15.3.3': - optional: true - - '@next/swc-linux-arm64-gnu@15.3.3': - optional: true - - '@next/swc-linux-arm64-musl@15.3.3': - optional: true - - '@next/swc-linux-x64-gnu@15.3.3': - optional: true - - '@next/swc-linux-x64-musl@15.3.3': - optional: true - - '@next/swc-win32-arm64-msvc@15.3.3': - optional: true - - '@next/swc-win32-x64-msvc@15.3.3': - optional: true - - '@noble/ciphers@1.3.0': {} - - '@noble/curves@1.9.1': - dependencies: - '@noble/hashes': 1.8.0 - - '@noble/hashes@1.8.0': {} - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 - - '@radix-ui/number@1.1.1': {} - - '@radix-ui/primitive@1.1.2': {} - - '@radix-ui/react-alert-dialog@1.1.13(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-arrow@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-collection@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.4)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-context@1.1.2(@types/react@19.1.4)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-dialog@1.1.13(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.4)(react@19.1.0) - aria-hidden: 1.2.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.4)(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-direction@1.1.1(@types/react@19.1.4)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-dismissable-layer@1.1.9(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-dropdown-menu@2.1.14(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-menu': 2.1.14(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.4)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-focus-scope@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-id@1.1.1(@types/react@19.1.4)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-label@2.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-menu@2.1.14(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.4)(react@19.1.0) - aria-hidden: 1.2.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.4)(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-popover@1.1.13(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.4)(react@19.1.0) - aria-hidden: 1.2.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.4)(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-popper@1.2.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/rect': 1.1.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-portal@1.1.8(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-primitive@2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-roving-focus@1.1.9(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-scroll-area@1.2.8(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-select@2.2.4(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - aria-hidden: 1.2.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.4)(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-separator@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-slider@1.3.4(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-slot@1.2.2(@types/react@19.1.4)(react@19.1.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-tabs@1.1.11(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-tooltip@1.2.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.4)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.4)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.4)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.4)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.4)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.4)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.4)(react@19.1.0)': - dependencies: - '@radix-ui/rect': 1.1.1 - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.4)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.4 - - '@radix-ui/react-visually-hidden@1.2.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - '@types/react-dom': 19.1.5(@types/react@19.1.4) - - '@radix-ui/rect@1.1.1': {} - - '@rollup/rollup-android-arm-eabi@4.40.2': - optional: true - - '@rollup/rollup-android-arm64@4.40.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.40.2': - optional: true - - '@rollup/rollup-darwin-x64@4.40.2': - optional: true - - '@rollup/rollup-freebsd-arm64@4.40.2': - optional: true - - '@rollup/rollup-freebsd-x64@4.40.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.40.2': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.40.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.40.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.40.2': - optional: true - - '@rollup/rollup-linux-loongarch64-gnu@4.40.2': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.40.2': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.40.2': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.40.2': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.40.2': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.40.2': - optional: true - - '@rollup/rollup-linux-x64-musl@4.40.2': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.40.2': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.40.2': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.40.2': - optional: true - - '@sec-ant/readable-stream@0.4.1': {} - - '@sindresorhus/merge-streams@4.0.0': {} - - '@standard-schema/utils@0.3.0': {} - - '@swc/counter@0.1.3': {} - - '@swc/helpers@0.5.15': - dependencies: - tslib: 2.8.1 - - '@tailwindcss/node@4.1.6': - dependencies: - '@ampproject/remapping': 2.3.0 - enhanced-resolve: 5.18.1 - jiti: 2.4.2 - lightningcss: 1.29.2 - magic-string: 0.30.17 - source-map-js: 1.2.1 - tailwindcss: 4.1.6 - - '@tailwindcss/oxide-android-arm64@4.1.6': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.1.6': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.1.6': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.1.6': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.6': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.6': - optional: true - - '@tailwindcss/oxide-linux-arm64-musl@4.1.6': - optional: true - - '@tailwindcss/oxide-linux-x64-gnu@4.1.6': - optional: true - - '@tailwindcss/oxide-linux-x64-musl@4.1.6': - optional: true - - '@tailwindcss/oxide-wasm32-wasi@4.1.6': - optional: true - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.6': - optional: true - - '@tailwindcss/oxide-win32-x64-msvc@4.1.6': - optional: true - - '@tailwindcss/oxide@4.1.6': - dependencies: - detect-libc: 2.0.4 - tar: 7.4.3 - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.6 - '@tailwindcss/oxide-darwin-arm64': 4.1.6 - '@tailwindcss/oxide-darwin-x64': 4.1.6 - '@tailwindcss/oxide-freebsd-x64': 4.1.6 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.6 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.6 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.6 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.6 - '@tailwindcss/oxide-linux-x64-musl': 4.1.6 - '@tailwindcss/oxide-wasm32-wasi': 4.1.6 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.6 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.6 - - '@tailwindcss/postcss@4.1.6': - dependencies: - '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.6 - '@tailwindcss/oxide': 4.1.6 - postcss: 8.5.3 - tailwindcss: 4.1.6 - - '@tanstack/query-core@5.76.0': {} - - '@tanstack/react-query@5.76.1(react@19.1.0)': - dependencies: - '@tanstack/query-core': 5.76.0 - react: 19.1.0 - - '@types/estree@1.0.7': {} - - '@types/js-cookie@2.2.7': {} - - '@types/json-schema@7.0.15': {} - - '@types/node-ipc@9.2.3': - dependencies: - '@types/node': 22.15.18 - - '@types/node@22.15.18': - dependencies: - undici-types: 6.21.0 - - '@types/parse-json@4.0.2': {} - - '@types/ps-tree@1.1.6': {} - - '@types/react-dom@19.1.5(@types/react@19.1.4)': - dependencies: - '@types/react': 19.1.4 - - '@types/react@19.1.4': - dependencies: - csstype: 3.1.3 - - '@types/ws@8.18.1': - dependencies: - '@types/node': 22.15.18 - - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.26.0(jiti@2.4.2) - graphemer: 1.4.0 - ignore: 7.0.4 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1 - eslint: 9.26.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.32.1': - dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 - - '@typescript-eslint/type-utils@8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.1 - eslint: 9.26.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.32.1': {} - - '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': - dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.32.1': - dependencies: - '@typescript-eslint/types': 8.32.1 - eslint-visitor-keys: 4.2.0 - - '@vitest/expect@3.1.3': - dependencies: - '@vitest/spy': 3.1.3 - '@vitest/utils': 3.1.3 - chai: 5.2.0 - tinyrainbow: 2.0.0 - - '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4))': - dependencies: - '@vitest/spy': 3.1.3 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4) - - '@vitest/pretty-format@3.1.3': - dependencies: - tinyrainbow: 2.0.0 - - '@vitest/runner@3.1.3': - dependencies: - '@vitest/utils': 3.1.3 - pathe: 2.0.3 - - '@vitest/snapshot@3.1.3': - dependencies: - '@vitest/pretty-format': 3.1.3 - magic-string: 0.30.17 - pathe: 2.0.3 - - '@vitest/spy@3.1.3': - dependencies: - tinyspy: 3.0.2 - - '@vitest/utils@3.1.3': - dependencies: - '@vitest/pretty-format': 3.1.3 - loupe: 3.1.3 - tinyrainbow: 2.0.0 - - '@xobotyi/scrollbar-width@1.9.5': {} - - accepts@2.0.0: - dependencies: - mime-types: 3.0.1 - negotiator: 1.0.0 - - acorn-jsx@5.3.2(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - - acorn@8.14.1: {} - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-colors@4.1.3: {} - - ansi-regex@4.1.1: {} - - ansi-regex@5.0.1: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - apisauce@2.1.6: - dependencies: - axios: 0.21.4 - transitivePeerDependencies: - - debug - - app-module-path@2.2.0: {} - - argparse@2.0.1: {} - - aria-hidden@1.2.4: - dependencies: - tslib: 2.8.1 - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-includes@3.1.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - assertion-error@2.0.1: {} - - async-function@1.0.0: {} - - async@3.2.6: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - axios@0.21.4: - dependencies: - follow-redirects: 1.15.9 - transitivePeerDependencies: - - debug - - balanced-match@1.0.2: {} - - body-parser@2.2.0: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 4.4.1 - http-errors: 2.0.0 - iconv-lite: 0.6.3 - on-finished: 2.4.1 - qs: 6.14.0 - raw-body: 3.0.0 - type-is: 2.0.1 - transitivePeerDependencies: - - supports-color - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - buffer-from@1.1.2: {} - - busboy@1.6.0: - dependencies: - streamsearch: 1.1.0 - - bytes@3.1.2: {} - - cac@6.7.14: {} - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - caniuse-lite@1.0.30001718: {} - - chai@5.2.0: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.3 - pathval: 2.0.0 - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - check-error@2.1.1: {} - - chownr@3.0.0: {} - - class-variance-authority@0.7.1: - dependencies: - clsx: 2.1.1 - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - - cli-table3@0.6.0: - dependencies: - object-assign: 4.1.1 - string-width: 4.2.3 - optionalDependencies: - colors: 1.4.0 - - client-only@0.0.1: {} - - cliui@7.0.4: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clone@1.0.4: {} - - clsx@2.1.1: {} - - cmdk@1.1.1(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.4)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - optional: true - - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - optional: true - - colors@1.4.0: {} - - commander@11.1.0: {} - - concat-map@0.0.1: {} - - content-disposition@1.0.0: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - - cookie-signature@1.2.2: {} - - cookie@0.7.2: {} - - copy-to-clipboard@3.3.3: - dependencies: - toggle-selection: 1.0.6 - - copyfiles@2.4.1: - dependencies: - glob: 7.2.3 - minimatch: 3.1.2 - mkdirp: 1.0.4 - noms: 0.0.0 - through2: 2.0.5 - untildify: 4.0.0 - yargs: 16.2.0 - - core-util-is@1.0.3: {} - - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - cosmiconfig@7.0.1: - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - css-in-js-utils@3.1.0: - dependencies: - hyphenate-style-name: 1.1.0 - - css-tree@1.1.3: - dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 - - csstype@3.1.3: {} - - data-uri-to-buffer@4.0.1: {} - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug@4.4.1: - dependencies: - ms: 2.1.3 - - deep-eql@5.0.2: {} - - deep-is@0.1.4: {} - - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - depd@2.0.0: {} - - detect-libc@2.0.2: {} - - detect-libc@2.0.4: {} - - detect-node-es@1.1.0: {} - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - dotenv@16.0.3: {} - - dotenv@16.5.0: {} - - drizzle-kit@0.31.1: - dependencies: - '@drizzle-team/brocli': 0.10.2 - '@esbuild-kit/esm-loader': 2.6.5 - esbuild: 0.25.4 - esbuild-register: 3.6.0(esbuild@0.25.4) - transitivePeerDependencies: - - supports-color - - drizzle-orm@0.43.1(@libsql/client@0.15.6): - optionalDependencies: - '@libsql/client': 0.15.6 - - drizzle-zod@0.7.1(drizzle-orm@0.43.1(@libsql/client@0.15.6))(zod@3.24.4): - dependencies: - drizzle-orm: 0.43.1(@libsql/client@0.15.6) - zod: 3.24.4 - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - duplexer@0.1.2: {} - - easy-stack@1.0.1: {} - - eciesjs@0.4.15: - dependencies: - '@ecies/ciphers': 0.2.3(@noble/ciphers@1.3.0) - '@noble/ciphers': 1.3.0 - '@noble/curves': 1.9.1 - '@noble/hashes': 1.8.0 - - ee-first@1.1.1: {} - - ejs@3.1.8: - dependencies: - jake: 10.9.2 - - emoji-regex@8.0.0: {} - - encodeurl@2.0.0: {} - - enhanced-resolve@5.18.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - enquirer@2.3.6: - dependencies: - ansi-colors: 4.1.3 - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - error-stack-parser@2.1.4: - dependencies: - stackframe: 1.3.4 - - es-abstract@1.23.9: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-regex: 1.2.1 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-iterator-helpers@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 - - es-module-lexer@1.7.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - esbuild-register@3.6.0(esbuild@0.25.4): - dependencies: - debug: 4.4.1 - esbuild: 0.25.4 - transitivePeerDependencies: - - supports-color - - esbuild@0.18.20: - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - - esbuild@0.25.4: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.4 - '@esbuild/android-arm': 0.25.4 - '@esbuild/android-arm64': 0.25.4 - '@esbuild/android-x64': 0.25.4 - '@esbuild/darwin-arm64': 0.25.4 - '@esbuild/darwin-x64': 0.25.4 - '@esbuild/freebsd-arm64': 0.25.4 - '@esbuild/freebsd-x64': 0.25.4 - '@esbuild/linux-arm': 0.25.4 - '@esbuild/linux-arm64': 0.25.4 - '@esbuild/linux-ia32': 0.25.4 - '@esbuild/linux-loong64': 0.25.4 - '@esbuild/linux-mips64el': 0.25.4 - '@esbuild/linux-ppc64': 0.25.4 - '@esbuild/linux-riscv64': 0.25.4 - '@esbuild/linux-s390x': 0.25.4 - '@esbuild/linux-x64': 0.25.4 - '@esbuild/netbsd-arm64': 0.25.4 - '@esbuild/netbsd-x64': 0.25.4 - '@esbuild/openbsd-arm64': 0.25.4 - '@esbuild/openbsd-x64': 0.25.4 - '@esbuild/sunos-x64': 0.25.4 - '@esbuild/win32-arm64': 0.25.4 - '@esbuild/win32-ia32': 0.25.4 - '@esbuild/win32-x64': 0.25.4 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@10.1.5(eslint@9.26.0(jiti@2.4.2)): - dependencies: - eslint: 9.26.0(jiti@2.4.2) - - eslint-plugin-only-warn@1.1.0: {} - - eslint-plugin-react-hooks@5.2.0(eslint@9.26.0(jiti@2.4.2)): - dependencies: - eslint: 9.26.0(jiti@2.4.2) - - eslint-plugin-react@7.37.5(eslint@9.26.0(jiti@2.4.2)): - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 - eslint: 9.26.0(jiti@2.4.2) - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - - eslint-plugin-turbo@2.5.3(eslint@9.26.0(jiti@2.4.2))(turbo@2.5.4): - dependencies: - dotenv: 16.0.3 - eslint: 9.26.0(jiti@2.4.2) - turbo: 2.5.4 - - eslint-scope@8.3.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.0: {} - - eslint@9.26.0(jiti@2.4.2): - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.2 - '@eslint/core': 0.13.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.26.0 - '@eslint/plugin-kit': 0.2.8 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@modelcontextprotocol/sdk': 1.11.2 - '@types/estree': 1.0.7 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.1 - escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - zod: 3.24.4 - optionalDependencies: - jiti: 2.4.2 - transitivePeerDependencies: - - supports-color - - espree@10.3.0: - dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.7 - - esutils@2.0.3: {} - - etag@1.8.1: {} - - event-pubsub@5.0.3: - dependencies: - copyfiles: 2.4.1 - strong-type: 0.1.6 - - event-stream@3.3.4: - dependencies: - duplexer: 0.1.2 - from: 0.1.7 - map-stream: 0.1.0 - pause-stream: 0.0.11 - split: 0.3.3 - stream-combiner: 0.0.4 - through: 2.3.8 - - eventsource-parser@3.0.1: {} - - eventsource@3.0.7: - dependencies: - eventsource-parser: 3.0.1 - - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - execa@9.5.3: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - cross-spawn: 7.0.6 - figures: 6.1.0 - get-stream: 9.0.1 - human-signals: 8.0.1 - is-plain-obj: 4.1.0 - is-stream: 4.0.1 - npm-run-path: 6.0.0 - pretty-ms: 9.2.0 - signal-exit: 4.1.0 - strip-final-newline: 4.0.0 - yoctocolors: 2.1.1 - - expect-type@1.2.1: {} - - express-rate-limit@7.5.0(express@5.1.0): - dependencies: - express: 5.1.0 - - express@5.1.0: - dependencies: - accepts: 2.0.0 - body-parser: 2.2.0 - content-disposition: 1.0.0 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.1 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 2.1.0 - fresh: 2.0.0 - http-errors: 2.0.0 - merge-descriptors: 2.0.0 - mime-types: 3.0.1 - on-finished: 2.4.1 - once: 1.4.0 - parseurl: 1.3.3 - proxy-addr: 2.0.7 - qs: 6.14.0 - range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.0 - serve-static: 2.2.0 - statuses: 2.0.1 - type-is: 2.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.1: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fast-shallow-equal@1.0.0: {} - - fastest-stable-stringify@2.0.2: {} - - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - - fdir@6.4.5(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - - fetch-blob@3.2.0: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - - figures@6.1.0: - dependencies: - is-unicode-supported: 2.1.0 - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - finalhandler@2.1.0: - dependencies: - debug: 4.4.1 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - - flatted@3.3.3: {} - - follow-redirects@1.15.9: {} - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - - formdata-polyfill@4.0.10: - dependencies: - fetch-blob: 3.2.0 - - forwarded@0.2.0: {} - - fresh@2.0.0: {} - - from@0.1.7: {} - - fs-jetpack@4.3.1: - dependencies: - minimatch: 3.1.2 - rimraf: 2.7.1 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - - fuzzysort@3.1.0: {} - - get-caller-file@2.0.5: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-nonce@1.0.1: {} - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@6.0.1: {} - - get-stream@9.0.1: - dependencies: - '@sec-ant/readable-stream': 0.4.1 - is-stream: 4.0.1 - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-tsconfig@4.10.0: - dependencies: - resolve-pkg-maps: 1.0.0 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@14.0.0: {} - - globals@16.1.0: {} - - globals@16.2.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - gluegun@5.2.0: - dependencies: - apisauce: 2.1.6 - app-module-path: 2.2.0 - cli-table3: 0.6.0 - colors: 1.4.0 - cosmiconfig: 7.0.1 - cross-spawn: 7.0.3 - ejs: 3.1.8 - enquirer: 2.3.6 - execa: 5.1.1 - fs-jetpack: 4.3.1 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.lowercase: 4.3.0 - lodash.lowerfirst: 4.3.1 - lodash.pad: 4.5.1 - lodash.padend: 4.6.1 - lodash.padstart: 4.6.1 - lodash.repeat: 4.1.0 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.trim: 4.5.1 - lodash.trimend: 4.5.1 - lodash.trimstart: 4.5.1 - lodash.uppercase: 4.3.0 - lodash.upperfirst: 4.3.1 - ora: 4.0.2 - pluralize: 8.0.0 - semver: 7.3.5 - which: 2.0.2 - yargs-parser: 21.1.1 - transitivePeerDependencies: - - debug - - gopd@1.2.0: {} - - graceful-fs@4.2.11: {} - - graphemer@1.4.0: {} - - has-bigints@1.1.0: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - - human-signals@2.1.0: {} - - human-signals@8.0.1: {} - - hyphenate-style-name@1.1.0: {} - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - ignore@5.3.2: {} - - ignore@7.0.4: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - inline-style-prefixer@7.0.1: - dependencies: - css-in-js-utils: 3.1.0 - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - ipaddr.js@1.9.1: {} - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.2.1: {} - - is-arrayish@0.3.2: - optional: true - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-extglob@2.1.1: {} - - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-fullwidth-code-point@3.0.0: {} - - is-generator-function@1.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-interactive@1.0.0: {} - - is-map@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-plain-obj@4.1.0: {} - - is-promise@4.0.0: {} - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-stream@2.0.1: {} - - is-stream@4.0.1: {} - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - - is-unicode-supported@2.1.0: {} - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - isarray@0.0.1: {} - - isarray@1.0.0: {} - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - isexe@3.1.1: {} - - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - - jake@10.9.2: - dependencies: - async: 3.2.6 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - - jiti@2.4.2: {} - - js-base64@3.7.7: {} - - js-cookie@2.2.1: {} - - js-message@1.0.7: {} - - js-queue@2.0.2: - dependencies: - easy-stack: 1.0.1 - - js-tokens@4.0.0: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - json-buffer@3.0.1: {} - - json-parse-even-better-errors@2.3.1: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - libsql@0.5.10: - dependencies: - '@neon-rs/load': 0.0.4 - detect-libc: 2.0.2 - optionalDependencies: - '@libsql/darwin-arm64': 0.5.10 - '@libsql/darwin-x64': 0.5.10 - '@libsql/linux-arm-gnueabihf': 0.5.10 - '@libsql/linux-arm-musleabihf': 0.5.10 - '@libsql/linux-arm64-gnu': 0.5.10 - '@libsql/linux-arm64-musl': 0.5.10 - '@libsql/linux-x64-gnu': 0.5.10 - '@libsql/linux-x64-musl': 0.5.10 - '@libsql/win32-x64-msvc': 0.5.10 - - lightningcss-darwin-arm64@1.29.2: - optional: true - - lightningcss-darwin-x64@1.29.2: - optional: true - - lightningcss-freebsd-x64@1.29.2: - optional: true - - lightningcss-linux-arm-gnueabihf@1.29.2: - optional: true - - lightningcss-linux-arm64-gnu@1.29.2: - optional: true - - lightningcss-linux-arm64-musl@1.29.2: - optional: true - - lightningcss-linux-x64-gnu@1.29.2: - optional: true - - lightningcss-linux-x64-musl@1.29.2: - optional: true - - lightningcss-win32-arm64-msvc@1.29.2: - optional: true - - lightningcss-win32-x64-msvc@1.29.2: - optional: true - - lightningcss@1.29.2: - dependencies: - detect-libc: 2.0.4 - optionalDependencies: - lightningcss-darwin-arm64: 1.29.2 - lightningcss-darwin-x64: 1.29.2 - lightningcss-freebsd-x64: 1.29.2 - lightningcss-linux-arm-gnueabihf: 1.29.2 - lightningcss-linux-arm64-gnu: 1.29.2 - lightningcss-linux-arm64-musl: 1.29.2 - lightningcss-linux-x64-gnu: 1.29.2 - lightningcss-linux-x64-musl: 1.29.2 - lightningcss-win32-arm64-msvc: 1.29.2 - lightningcss-win32-x64-msvc: 1.29.2 - - lines-and-columns@1.2.4: {} - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.camelcase@4.3.0: {} - - lodash.kebabcase@4.1.1: {} - - lodash.lowercase@4.3.0: {} - - lodash.lowerfirst@4.3.1: {} - - lodash.merge@4.6.2: {} - - lodash.pad@4.5.1: {} - - lodash.padend@4.6.1: {} - - lodash.padstart@4.6.1: {} - - lodash.repeat@4.1.0: {} - - lodash.snakecase@4.1.1: {} - - lodash.startcase@4.4.0: {} - - lodash.trim@4.5.1: {} - - lodash.trimend@4.5.1: {} - - lodash.trimstart@4.5.1: {} - - lodash.uppercase@4.3.0: {} - - lodash.upperfirst@4.3.1: {} - - log-symbols@3.0.0: - dependencies: - chalk: 2.4.2 - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - loupe@3.1.3: {} - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - lucide-react@0.511.0(react@19.1.0): - dependencies: - react: 19.1.0 - - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - - map-stream@0.1.0: {} - - math-intrinsics@1.1.0: {} - - mdn-data@2.0.14: {} - - media-typer@1.1.0: {} - - merge-descriptors@2.0.0: {} - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.54.0: {} - - mime-types@3.0.1: - dependencies: - mime-db: 1.54.0 - - mimic-fn@2.1.0: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.1 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 - - minipass@7.1.2: {} - - minizlib@3.0.2: - dependencies: - minipass: 7.1.2 - - mkdirp@1.0.4: {} - - mkdirp@3.0.1: {} - - ms@2.1.3: {} - - nano-css@5.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - css-tree: 1.1.3 - csstype: 3.1.3 - fastest-stable-stringify: 2.0.2 - inline-style-prefixer: 7.0.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - rtl-css-js: 1.16.1 - stacktrace-js: 2.0.2 - stylis: 4.3.6 - - nanoid@3.3.11: {} - - natural-compare@1.4.0: {} - - negotiator@1.0.0: {} - - next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - - next@15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - '@next/env': 15.3.3 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.15 - busboy: 1.6.0 - caniuse-lite: 1.0.30001718 - postcss: 8.4.31 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(react@19.1.0) - optionalDependencies: - '@next/swc-darwin-arm64': 15.3.3 - '@next/swc-darwin-x64': 15.3.3 - '@next/swc-linux-arm64-gnu': 15.3.3 - '@next/swc-linux-arm64-musl': 15.3.3 - '@next/swc-linux-x64-gnu': 15.3.3 - '@next/swc-linux-x64-musl': 15.3.3 - '@next/swc-win32-arm64-msvc': 15.3.3 - '@next/swc-win32-x64-msvc': 15.3.3 - sharp: 0.34.2 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - - node-domexception@1.0.0: {} - - node-fetch@3.3.2: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - - node-ipc@12.0.0: - dependencies: - event-pubsub: 5.0.3 - js-message: 1.0.7 - js-queue: 2.0.2 - strong-type: 1.1.0 - - noms@0.0.0: - dependencies: - inherits: 2.0.4 - readable-stream: 1.0.34 - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - - npm-run-path@6.0.0: - dependencies: - path-key: 4.0.0 - unicorn-magic: 0.3.0 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object-treeify@1.1.33: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - ora@4.0.2: - dependencies: - chalk: 2.4.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - log-symbols: 3.0.0 - strip-ansi: 5.2.0 - wcwidth: 1.0.1 - - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - p-map@7.0.3: {} - - p-timeout@6.1.4: {} - - p-wait-for@5.0.2: - dependencies: - p-timeout: 6.1.4 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse-ms@4.0.0: {} - - parseurl@1.3.3: {} - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-key@4.0.0: {} - - path-parse@1.0.7: {} - - path-to-regexp@8.2.0: {} - - path-type@4.0.0: {} - - pathe@2.0.3: {} - - pathval@2.0.0: {} - - pause-stream@0.0.11: - dependencies: - through: 2.3.8 - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.2: {} - - pkce-challenge@5.0.0: {} - - pluralize@8.0.0: {} - - possible-typed-array-names@1.1.0: {} - - postcss@8.4.31: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postcss@8.5.3: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - prelude-ls@1.2.1: {} - - prettier@3.5.3: {} - - pretty-ms@9.2.0: - dependencies: - parse-ms: 4.0.0 - - process-nextick-args@2.0.1: {} - - promise-limit@2.7.0: {} - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - ps-tree@1.2.0: - dependencies: - event-stream: 3.3.4 - - punycode@2.3.1: {} - - qs@6.14.0: - dependencies: - side-channel: 1.1.0 - - queue-microtask@1.2.3: {} - - range-parser@1.2.1: {} - - raw-body@3.0.0: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.6.3 - unpipe: 1.0.0 - - react-dom@19.1.0(react@19.1.0): - dependencies: - react: 19.1.0 - scheduler: 0.26.0 - - react-hook-form@7.56.3(react@19.1.0): - dependencies: - react: 19.1.0 - - react-is@16.13.1: {} - - react-remove-scroll-bar@2.3.8(@types/react@19.1.4)(react@19.1.0): - dependencies: - react: 19.1.0 - react-style-singleton: 2.2.3(@types/react@19.1.4)(react@19.1.0) - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.1.4 - - react-remove-scroll@2.6.3(@types/react@19.1.4)(react@19.1.0): - dependencies: - react: 19.1.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.4)(react@19.1.0) - react-style-singleton: 2.2.3(@types/react@19.1.4)(react@19.1.0) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.4)(react@19.1.0) - use-sidecar: 1.1.3(@types/react@19.1.4)(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.4 - - react-style-singleton@2.2.3(@types/react@19.1.4)(react@19.1.0): - dependencies: - get-nonce: 1.0.1 - react: 19.1.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.1.4 - - react-universal-interface@0.6.2(react@19.1.0)(tslib@2.8.1): - dependencies: - react: 19.1.0 - tslib: 2.8.1 - - react-use@17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - '@types/js-cookie': 2.2.7 - '@xobotyi/scrollbar-width': 1.9.5 - copy-to-clipboard: 3.3.3 - fast-deep-equal: 3.1.3 - fast-shallow-equal: 1.0.0 - js-cookie: 2.2.1 - nano-css: 5.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-universal-interface: 0.6.2(react@19.1.0)(tslib@2.8.1) - resize-observer-polyfill: 1.5.1 - screenfull: 5.2.0 - set-harmonic-interval: 1.0.1 - throttle-debounce: 3.0.1 - ts-easing: 0.2.0 - tslib: 2.8.1 - - react@19.1.0: {} - - readable-stream@1.0.34: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - require-directory@2.1.1: {} - - resize-observer-polyfill@1.5.1: {} - - resolve-from@4.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - reusify@1.1.0: {} - - rimraf@2.7.1: - dependencies: - glob: 7.2.3 - - rollup@4.40.2: - dependencies: - '@types/estree': 1.0.7 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.40.2 - '@rollup/rollup-android-arm64': 4.40.2 - '@rollup/rollup-darwin-arm64': 4.40.2 - '@rollup/rollup-darwin-x64': 4.40.2 - '@rollup/rollup-freebsd-arm64': 4.40.2 - '@rollup/rollup-freebsd-x64': 4.40.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.40.2 - '@rollup/rollup-linux-arm-musleabihf': 4.40.2 - '@rollup/rollup-linux-arm64-gnu': 4.40.2 - '@rollup/rollup-linux-arm64-musl': 4.40.2 - '@rollup/rollup-linux-loongarch64-gnu': 4.40.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.40.2 - '@rollup/rollup-linux-riscv64-gnu': 4.40.2 - '@rollup/rollup-linux-riscv64-musl': 4.40.2 - '@rollup/rollup-linux-s390x-gnu': 4.40.2 - '@rollup/rollup-linux-x64-gnu': 4.40.2 - '@rollup/rollup-linux-x64-musl': 4.40.2 - '@rollup/rollup-win32-arm64-msvc': 4.40.2 - '@rollup/rollup-win32-ia32-msvc': 4.40.2 - '@rollup/rollup-win32-x64-msvc': 4.40.2 - fsevents: 2.3.3 - - router@2.2.0: - dependencies: - debug: 4.4.1 - depd: 2.0.0 - is-promise: 4.0.0 - parseurl: 1.3.3 - path-to-regexp: 8.2.0 - transitivePeerDependencies: - - supports-color - - rtl-css-js@1.16.1: - dependencies: - '@babel/runtime': 7.27.1 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-buffer@5.1.2: {} - - safe-buffer@5.2.1: {} - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - safer-buffer@2.1.2: {} - - scheduler@0.26.0: {} - - screenfull@5.2.0: {} - - semver@6.3.1: {} - - semver@7.3.5: - dependencies: - lru-cache: 6.0.0 - - semver@7.7.2: {} - - send@1.2.0: - dependencies: - debug: 4.4.1 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 2.0.0 - http-errors: 2.0.0 - mime-types: 3.0.1 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - serve-static@2.2.0: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 1.2.0 - transitivePeerDependencies: - - supports-color - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-harmonic-interval@1.0.1: {} - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - - setprototypeof@1.2.0: {} - - sharp@0.34.2: - dependencies: - color: 4.2.3 - detect-libc: 2.0.4 - semver: 7.7.2 - optionalDependencies: - '@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 - optional: true - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - siginfo@2.0.0: {} - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 - optional: true - - sonner@2.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - - source-map-js@1.2.1: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.5.6: {} - - source-map@0.6.1: {} - - split@0.3.3: - dependencies: - through: 2.3.8 - - stack-generator@2.0.10: - dependencies: - stackframe: 1.3.4 - - stackback@0.0.2: {} - - stackframe@1.3.4: {} - - stacktrace-gps@3.1.2: - dependencies: - source-map: 0.5.6 - stackframe: 1.3.4 - - stacktrace-js@2.0.2: - dependencies: - error-stack-parser: 2.1.4 - stack-generator: 2.0.10 - stacktrace-gps: 3.1.2 - - statuses@2.0.1: {} - - std-env@3.9.0: {} - - stream-combiner@0.0.4: - dependencies: - duplexer: 0.1.2 - - streamsearch@1.1.0: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.9 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string_decoder@0.10.31: {} - - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - - strip-ansi@5.2.0: - dependencies: - ansi-regex: 4.1.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-final-newline@2.0.0: {} - - strip-final-newline@4.0.0: {} - - strip-json-comments@3.1.1: {} - - strong-type@0.1.6: {} - - strong-type@1.1.0: {} - - styled-jsx@5.1.6(react@19.1.0): - dependencies: - client-only: 0.0.1 - react: 19.1.0 - - stylis@4.3.6: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - tailwind-merge@3.3.0: {} - - tailwindcss-animate@1.0.7(tailwindcss@4.1.6): - dependencies: - tailwindcss: 4.1.6 - - tailwindcss@4.1.6: {} - - tapable@2.2.1: {} - - tar@7.4.3: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.0.2 - mkdirp: 3.0.1 - yallist: 5.0.0 - - throttle-debounce@3.0.1: {} - - through2@2.0.5: - dependencies: - readable-stream: 2.3.8 - xtend: 4.0.2 - - through@2.3.8: {} - - tinybench@2.9.0: {} - - tinyexec@0.3.2: {} - - tinyglobby@0.2.13: - dependencies: - fdir: 6.4.5(picomatch@4.0.2) - picomatch: 4.0.2 - - tinypool@1.0.2: {} - - tinyrainbow@2.0.0: {} - - tinyspy@3.0.2: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toggle-selection@1.0.6: {} - - toidentifier@1.0.1: {} - - ts-api-utils@2.1.0(typescript@5.8.3): - dependencies: - typescript: 5.8.3 - - ts-easing@0.2.0: {} - - tslib@2.8.1: {} - - tsx@4.19.4: - dependencies: - esbuild: 0.25.4 - get-tsconfig: 4.10.0 - optionalDependencies: - fsevents: 2.3.3 - - turbo-darwin-64@2.5.4: - optional: true - - turbo-darwin-arm64@2.5.4: - optional: true - - turbo-linux-64@2.5.4: - optional: true - - turbo-linux-arm64@2.5.4: - optional: true - - turbo-windows-64@2.5.4: - optional: true - - turbo-windows-arm64@2.5.4: - optional: true - - turbo@2.5.4: - optionalDependencies: - turbo-darwin-64: 2.5.4 - turbo-darwin-arm64: 2.5.4 - turbo-linux-64: 2.5.4 - turbo-linux-arm64: 2.5.4 - turbo-windows-64: 2.5.4 - turbo-windows-arm64: 2.5.4 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-is@2.0.1: - dependencies: - content-type: 1.0.5 - media-typer: 1.1.0 - mime-types: 3.0.1 - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typescript-eslint@8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - typescript@5.8.3: {} - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - undici-types@6.21.0: {} - - unicorn-magic@0.3.0: {} - - unpipe@1.0.0: {} - - untildify@4.0.0: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - use-callback-ref@1.3.3(@types/react@19.1.4)(react@19.1.0): - dependencies: - react: 19.1.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.1.4 - - use-sidecar@1.1.3(@types/react@19.1.4)(react@19.1.0): - dependencies: - detect-node-es: 1.1.0 - react: 19.1.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.1.4 - - util-deprecate@1.0.2: {} - - vary@1.1.2: {} - - vaul@1.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - vite-node@3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4): - dependencies: - cac: 6.7.14 - debug: 4.4.1 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4): - dependencies: - esbuild: 0.25.4 - fdir: 6.4.5(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.3 - rollup: 4.40.2 - tinyglobby: 0.2.13 - optionalDependencies: - '@types/node': 22.15.18 - fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.29.2 - tsx: 4.19.4 - - vitest@3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4): - dependencies: - '@vitest/expect': 3.1.3 - '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)) - '@vitest/pretty-format': 3.1.3 - '@vitest/runner': 3.1.3 - '@vitest/snapshot': 3.1.3 - '@vitest/spy': 3.1.3 - '@vitest/utils': 3.1.3 - chai: 5.2.0 - debug: 4.4.1 - expect-type: 1.2.1 - magic-string: 0.30.17 - pathe: 2.0.3 - std-env: 3.9.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.13 - tinypool: 1.0.2 - tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4) - vite-node: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 22.15.18 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - - web-streams-polyfill@3.3.3: {} - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.19: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - which@4.0.0: - dependencies: - isexe: 3.1.1 - - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - - word-wrap@1.2.5: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrappy@1.0.2: {} - - ws@8.18.2: {} - - xtend@4.0.2: {} - - y18n@5.0.8: {} - - yallist@4.0.0: {} - - yallist@5.0.0: {} - - yaml@1.10.2: {} - - yargs-parser@20.2.9: {} - - yargs-parser@21.1.1: {} - - yargs@16.2.0: - dependencies: - cliui: 7.0.4 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - - yocto-queue@0.1.0: {} - - yoctocolors@2.1.1: {} - - zod-to-json-schema@3.24.5(zod@3.24.4): - dependencies: - zod: 3.24.4 - - zod@3.24.4: {} diff --git a/evals/pnpm-workspace.yaml b/evals/pnpm-workspace.yaml deleted file mode 100644 index ed88915ef7..0000000000 --- a/evals/pnpm-workspace.yaml +++ /dev/null @@ -1,4 +0,0 @@ -packages: - - "config/*" - - "apps/*" - - "packages/*" diff --git a/evals/turbo.json b/evals/turbo.json deleted file mode 100644 index b13bb75372..0000000000 --- a/evals/turbo.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "https://turbo.build/schema.json", - "globalDependencies": ["**/.env.*local"], - "globalEnv": [ - "NODE_ENV", - "NEXT_RUNTIME", - "TASK_ID", - "OPENROUTER_API_KEY", - "OPENROUTER_MODEL_ID", - "PROMPT_PATH", - "WORKSPACE_PATH", - "BENCHMARKS_DB_PATH", - "TURSO_CONNECTION_URL", - "TURSO_AUTH_TOKEN", - "FOOTGUN_SYSTEM_PROMPT" - ], - "tasks": { - "lint": {}, - "check-types": {}, - "test": {}, - "format": {}, - "dev": { - "dependsOn": [], - "cache": false, - "persistent": true - }, - "build": { - "dependsOn": ["^build"], - "outputs": [".next/**", "!.next/cache/**", "dist/**"] - } - } -} diff --git a/evals/Dockerfile b/packages/evals/Dockerfile similarity index 98% rename from evals/Dockerfile rename to packages/evals/Dockerfile index 6c4219d762..e906fc7a34 100644 --- a/evals/Dockerfile +++ b/packages/evals/Dockerfile @@ -72,7 +72,7 @@ RUN echo 'source $HOME/.cargo/env' >> $HOME/.bashrc COPY --chown=vscode:vscode ./evals/.env ./ # Push database schema - RUN pnpm --filter @evals/db db:push + RUN pnpm --filter @roo-code/evals db:push EXPOSE 3000 CMD ["pnpm", "web"] diff --git a/packages/evals/README.md b/packages/evals/README.md index cd5edc3f23..207e549b36 100644 --- a/packages/evals/README.md +++ b/packages/evals/README.md @@ -1,3 +1,25 @@ +# Run Roo Code Evals + +## Get Started + +NOTE: This is MacOS only for now! + +Clone the Roo Code repo: + +```sh +git clone https://github.com/RooCodeInc/Roo-Code.git +cd Roo-Code +``` + +Run the setup script: + +```sh +cd evals +./scripts/setup.sh +``` + +Navigate to [localhost:3000](http://localhost:3000/) in your browser. + ## Running Migrations Update `src/schema.ts` as needed, and then run: diff --git a/packages/evals/drizzle.config.ts b/packages/evals/drizzle.config.ts index b91f65a5ae..f53094bbcb 100644 --- a/packages/evals/drizzle.config.ts +++ b/packages/evals/drizzle.config.ts @@ -12,7 +12,7 @@ const dbCredentials = process.env.BENCHMARKS_DB_PATH export default defineConfig({ out: "./drizzle", - schema: "./src/schema.ts", + schema: "./src/db/schema.ts", dialect, dbCredentials, }) diff --git a/packages/evals/package.json b/packages/evals/package.json index e267ef24b4..a867a80b48 100644 --- a/packages/evals/package.json +++ b/packages/evals/package.json @@ -8,12 +8,21 @@ "lint": "eslint src --ext=ts --max-warnings=0", "check-types": "tsc --noEmit", "test": "vitest run", - "clean": "rimraf dist .turbo" + "clean": "rimraf dist .turbo", + "drizzle-kit": "dotenvx run -f .env -- tsx node_modules/drizzle-kit/bin.cjs", + "db:generate": "pnpm drizzle-kit generate", + "db:migrate": "pnpm drizzle-kit migrate", + "db:push": "pnpm drizzle-kit push", + "db:pull": "pnpm drizzle-kit pull", + "db:check": "pnpm drizzle-kit check", + "db:up": "pnpm drizzle-kit up", + "db:studio": "pnpm drizzle-kit studio" }, "dependencies": { + "@libsql/client": "^0.15.8", + "@roo-code/ipc": "workspace:^", "@roo-code/types": "workspace:^", "drizzle-orm": "^0.44.1", - "drizzle-zod": "^0.8.2", "execa": "^9.5.2", "gluegun": "^5.2.0", "node-ipc": "^12.0.0", @@ -29,6 +38,7 @@ "@types/node-ipc": "^9.2.3", "@types/ps-tree": "^1.1.6", "drizzle-kit": "^0.31.1", + "tsx": "^4.19.3", "vitest": "^3.1.3" } } diff --git a/packages/evals/scripts/setup.sh b/packages/evals/scripts/setup.sh index e451d94636..115e180126 100755 --- a/packages/evals/scripts/setup.sh +++ b/packages/evals/scripts/setup.sh @@ -323,8 +323,8 @@ if [[ ! -s .env ]]; then fi echo -n "šŸ—„ļø Syncing Roo Code evals database... " -pnpm --filter @evals/db db:push &>/dev/null || exit 1 -pnpm --filter @evals/db db:enable-wal &>/dev/null || exit 1 +pnpm --filter @roo-code/evals db:push &>/dev/null || exit 1 +pnpm --filter @roo-code/evals db:enable-wal &>/dev/null || exit 1 echo "āœ… Done" if ! grep -q "OPENROUTER_API_KEY" .env; then diff --git a/packages/evals/src/cli/index.ts b/packages/evals/src/cli/index.ts index a42c8a1cae..b3bfb796ae 100644 --- a/packages/evals/src/cli/index.ts +++ b/packages/evals/src/cli/index.ts @@ -9,6 +9,8 @@ import { build, filesystem, GluegunPrompt, GluegunToolbox } from "gluegun" import psTree from "ps-tree" import { RooCodeEventName, IpcOrigin, IpcMessageType, TaskCommandName } from "@roo-code/types" +import { IpcServer, IpcClient } from "@roo-code/ipc" + import { type Run, type Task, @@ -22,13 +24,9 @@ import { updateTaskMetrics, createToolError, } from "../db/index.js" - -import { type ExerciseLanguage, EvalEventName, exerciseLanguages, rooCodeDefaults } from "../types/index.js" - -import { IpcServer, IpcClient } from "../ipc/index.js" - -import { __dirname, extensionDevelopmentPath, exercisesPath } from "./paths.js" -import { getExercises } from "./exercises.js" +import { rooCodeDefaults } from "../settings/index.js" +import { __dirname, extensionDevelopmentPath, exercisesPath } from "../exercises/index.js" +import { type ExerciseLanguage, exerciseLanguages, getExercises } from "../exercises/exercises.js" type TaskResult = { success: boolean } type TaskPromise = Promise @@ -125,7 +123,7 @@ const run = async (toolbox: GluegunToolbox) => { server.broadcast({ type: IpcMessageType.TaskEvent, origin: IpcOrigin.Server, - data: { eventName: passed ? EvalEventName.Pass : EvalEventName.Fail, taskId: task.id }, + data: { eventName: passed ? RooCodeEventName.EvalPass : RooCodeEventName.EvalFail, taskId: task.id }, }) return { success: passed } @@ -234,7 +232,7 @@ const runExercise = async ({ run, task, server }: { run: Run; task: Task; server let rooTaskId: string | undefined let isClientDisconnected = false - const ignoreEvents: Record<"broadcast" | "log", (RooCodeEventName | EvalEventName)[]> = { + const ignoreEvents: Record<"broadcast" | "log", RooCodeEventName[]> = { broadcast: [RooCodeEventName.Message], log: [RooCodeEventName.Message, RooCodeEventName.TaskTokenUsageUpdated, RooCodeEventName.TaskAskResponded], } @@ -279,7 +277,6 @@ const runExercise = async ({ run, task, server }: { run: Run; task: Task; server } if (eventName === RooCodeEventName.TaskToolFailed) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars const [_taskId, toolName, error] = payload await createToolError({ taskId: task.id, toolName, error }) } diff --git a/packages/evals/src/db/queries/runs.ts b/packages/evals/src/db/queries/runs.ts index 40970bc7a3..90e17fff6b 100644 --- a/packages/evals/src/db/queries/runs.ts +++ b/packages/evals/src/db/queries/runs.ts @@ -4,7 +4,7 @@ import type { ToolUsage } from "@roo-code/types" import { RecordNotFoundError, RecordNotCreatedError } from "./errors.js" import type { InsertRun, UpdateRun } from "../schema.js" -import { insertRunSchema, schema } from "../schema.js" +import { schema } from "../schema.js" import { db } from "../db.js" import { createTaskMetrics } from "./taskMetrics.js" import { getTasks } from "./tasks.js" @@ -23,7 +23,7 @@ export const createRun = async (args: InsertRun) => { const records = await db .insert(schema.runs) .values({ - ...insertRunSchema.parse(args), + ...args, createdAt: new Date(), }) .returning() diff --git a/packages/evals/src/db/queries/taskMetrics.ts b/packages/evals/src/db/queries/taskMetrics.ts index d0400453ce..cec90218f2 100644 --- a/packages/evals/src/db/queries/taskMetrics.ts +++ b/packages/evals/src/db/queries/taskMetrics.ts @@ -2,7 +2,7 @@ import { eq } from "drizzle-orm" import { RecordNotFoundError, RecordNotCreatedError } from "./errors.js" import type { InsertTaskMetrics, UpdateTaskMetrics } from "../schema.js" -import { insertTaskMetricsSchema, taskMetrics } from "../schema.js" +import { taskMetrics } from "../schema.js" import { db } from "../db.js" export const findTaskMetrics = async (id: number) => { @@ -19,7 +19,7 @@ export const createTaskMetrics = async (args: InsertTaskMetrics) => { const records = await db .insert(taskMetrics) .values({ - ...insertTaskMetricsSchema.parse(args), + ...args, createdAt: new Date(), }) .returning() diff --git a/packages/evals/src/db/queries/tasks.ts b/packages/evals/src/db/queries/tasks.ts index b7db441f3b..5de646f178 100644 --- a/packages/evals/src/db/queries/tasks.ts +++ b/packages/evals/src/db/queries/tasks.ts @@ -1,10 +1,10 @@ import { and, eq } from "drizzle-orm" -import type { ExerciseLanguage } from "../../types/index.js" +import type { ExerciseLanguage } from "../../exercises/index.js" import { RecordNotFoundError, RecordNotCreatedError } from "./errors.js" import type { InsertTask, UpdateTask } from "../schema.js" -import { insertTaskSchema, tasks } from "../schema.js" +import { tasks } from "../schema.js" import { db } from "../db.js" export const findTask = async (id: number) => { @@ -21,7 +21,7 @@ export const createTask = async (args: InsertTask) => { const records = await db .insert(tasks) .values({ - ...insertTaskSchema.parse(args), + ...args, createdAt: new Date(), }) .returning() diff --git a/packages/evals/src/db/queries/toolErrors.ts b/packages/evals/src/db/queries/toolErrors.ts index b2b2163a24..b07f9f53a6 100644 --- a/packages/evals/src/db/queries/toolErrors.ts +++ b/packages/evals/src/db/queries/toolErrors.ts @@ -1,13 +1,13 @@ import { RecordNotCreatedError } from "./errors.js" import type { InsertToolError } from "../schema.js" -import { insertToolErrorSchema, toolErrors } from "../schema.js" +import { toolErrors } from "../schema.js" import { db } from "../db.js" export const createToolError = async (args: InsertToolError) => { const records = await db .insert(toolErrors) .values({ - ...insertToolErrorSchema.parse(args), + ...args, createdAt: new Date(), }) .returning() diff --git a/packages/evals/src/db/schema.ts b/packages/evals/src/db/schema.ts index 6e84bce68c..8205fc166a 100644 --- a/packages/evals/src/db/schema.ts +++ b/packages/evals/src/db/schema.ts @@ -1,16 +1,9 @@ import { sqliteTable, text, real, integer, blob, uniqueIndex } from "drizzle-orm/sqlite-core" import { relations } from "drizzle-orm" -import { createInsertSchema } from "drizzle-zod" -import { - type RooCodeSettings, - type ToolUsage, - rooCodeSettingsSchema, - toolNames, - toolUsageSchema, -} from "@roo-code/types" +import { type RooCodeSettings, type ToolUsage, toolNames } from "@roo-code/types" -import { exerciseLanguages } from "../types/index.js" +import { type ExerciseLanguage, exerciseLanguages } from "../exercises/index.js" /** * runs @@ -36,10 +29,6 @@ export const runsRelations = relations(runs, ({ one }) => ({ export type Run = typeof runs.$inferSelect -export const insertRunSchema = createInsertSchema(runs).omit({ id: true, createdAt: true }).extend({ - settings: rooCodeSettingsSchema.optional(), -}) - export type InsertRun = Omit export type UpdateRun = Partial> @@ -56,7 +45,7 @@ export const tasks = sqliteTable( .references(() => runs.id) .notNull(), taskMetricsId: integer({ mode: "number" }).references(() => taskMetrics.id), - language: text({ enum: exerciseLanguages }).notNull(), + language: text({ enum: exerciseLanguages }).notNull().$type(), exercise: text().notNull(), passed: integer({ mode: "boolean" }), startedAt: integer({ mode: "timestamp" }), @@ -73,8 +62,6 @@ export const tasksRelations = relations(tasks, ({ one }) => ({ export type Task = typeof tasks.$inferSelect -export const insertTaskSchema = createInsertSchema(tasks).omit({ id: true, createdAt: true }) - export type InsertTask = Omit export type UpdateTask = Partial> @@ -98,10 +85,6 @@ export const taskMetrics = sqliteTable("taskMetrics", { export type TaskMetrics = typeof taskMetrics.$inferSelect -export const insertTaskMetricsSchema = createInsertSchema(taskMetrics) - .omit({ id: true, createdAt: true }) - .extend({ toolUsage: toolUsageSchema.optional() }) - export type InsertTaskMetrics = Omit export type UpdateTaskMetrics = Partial> @@ -126,10 +109,6 @@ export const toolErrorsRelations = relations(toolErrors, ({ one }) => ({ export type ToolError = typeof toolErrors.$inferSelect -export const insertToolErrorSchema = createInsertSchema(toolErrors) - .omit({ id: true, createdAt: true }) - .extend({ toolUsage: toolUsageSchema.optional() }) - export type InsertToolError = Omit export type UpdateToolError = Partial> diff --git a/packages/evals/src/cli/exercises.ts b/packages/evals/src/exercises/exercises.ts similarity index 74% rename from packages/evals/src/cli/exercises.ts rename to packages/evals/src/exercises/exercises.ts index 68190ad79a..03084da58c 100644 --- a/packages/evals/src/cli/exercises.ts +++ b/packages/evals/src/exercises/exercises.ts @@ -3,10 +3,15 @@ import * as fs from "fs" import { filesystem } from "gluegun" -import { type ExerciseLanguage, exerciseLanguages } from "../types/index.js" - import { exercisesPath } from "./paths.js" +export const exerciseLanguages = ["go", "java", "javascript", "python", "rust"] as const + +export type ExerciseLanguage = (typeof exerciseLanguages)[number] + +export const isExerciseLanguage = (value: string): value is ExerciseLanguage => + exerciseLanguages.includes(value as ExerciseLanguage) + let exercisesByLanguage: Record | null = null export const getExercises = () => { diff --git a/packages/evals/src/exercises/index.ts b/packages/evals/src/exercises/index.ts new file mode 100644 index 0000000000..d92d82ce0a --- /dev/null +++ b/packages/evals/src/exercises/index.ts @@ -0,0 +1,2 @@ +export * from "./exercises.js" +export * from "./paths.js" diff --git a/packages/evals/src/cli/paths.ts b/packages/evals/src/exercises/paths.ts similarity index 100% rename from packages/evals/src/cli/paths.ts rename to packages/evals/src/exercises/paths.ts diff --git a/packages/evals/src/index.ts b/packages/evals/src/index.ts new file mode 100644 index 0000000000..3abb4d03c1 --- /dev/null +++ b/packages/evals/src/index.ts @@ -0,0 +1,3 @@ +export * from "./db/index.js" +export * from "./settings/index.js" +export * from "./exercises/index.js" diff --git a/packages/evals/src/ipc/index.ts b/packages/evals/src/ipc/index.ts deleted file mode 100644 index 03cf66634b..0000000000 --- a/packages/evals/src/ipc/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./client.js" -export * from "./server.js" diff --git a/packages/evals/src/ipc/server.ts b/packages/evals/src/ipc/server.ts deleted file mode 100644 index e32f16329d..0000000000 --- a/packages/evals/src/ipc/server.ts +++ /dev/null @@ -1,138 +0,0 @@ -import EventEmitter from "node:events" -import { Socket } from "node:net" -import * as crypto from "node:crypto" - -import ipc from "node-ipc" - -import { - IpcOrigin, - IpcMessageType, - type IpcMessage, - type TaskCommand, - type TaskEvent, - ipcMessageSchema, -} from "@roo-code/types" - -type IpcServerEvents = { - [IpcMessageType.Connect]: [clientId: string] - [IpcMessageType.Disconnect]: [clientId: string] - [IpcMessageType.TaskCommand]: [clientId: string, data: TaskCommand] - [IpcMessageType.TaskEvent]: [relayClientId: string | undefined, data: TaskEvent] -} - -export class IpcServer extends EventEmitter { - private readonly _socketPath: string - private readonly _log: (...args: unknown[]) => void - private readonly _clients: Map - - private _isListening = false - - constructor(socketPath: string, log = console.log) { - super() - - this._socketPath = socketPath - this._log = log - this._clients = new Map() - } - - public listen() { - this._isListening = true - - ipc.config.silent = true - - ipc.serve(this.socketPath, () => { - ipc.server.on("connect", (socket) => this.onConnect(socket)) - ipc.server.on("socket.disconnected", (socket) => this.onDisconnect(socket)) - ipc.server.on("message", (data) => this.onMessage(data)) - }) - - ipc.server.start() - } - - private onConnect(socket: Socket) { - const clientId = crypto.randomBytes(6).toString("hex") - this._clients.set(clientId, socket) - this.log(`[server#onConnect] clientId = ${clientId}, # clients = ${this._clients.size}`) - - this.send(socket, { - type: IpcMessageType.Ack, - origin: IpcOrigin.Server, - data: { clientId, pid: process.pid, ppid: process.ppid }, - }) - - this.emit(IpcMessageType.Connect, clientId) - } - - private onDisconnect(destroyedSocket: Socket) { - let disconnectedClientId: string | undefined - - for (const [clientId, socket] of this._clients.entries()) { - if (socket === destroyedSocket) { - disconnectedClientId = clientId - this._clients.delete(clientId) - break - } - } - - this.log(`[server#socket.disconnected] clientId = ${disconnectedClientId}, # clients = ${this._clients.size}`) - - if (disconnectedClientId) { - this.emit(IpcMessageType.Disconnect, disconnectedClientId) - } - } - - private onMessage(data: unknown) { - if (typeof data !== "object") { - this.log("[server#onMessage] invalid data", data) - return - } - - const result = ipcMessageSchema.safeParse(data) - - if (!result.success) { - this.log("[server#onMessage] invalid payload", result.error, data) - return - } - - const payload = result.data - - if (payload.origin === IpcOrigin.Client) { - switch (payload.type) { - case IpcMessageType.TaskCommand: - this.emit(IpcMessageType.TaskCommand, payload.clientId, payload.data) - break - } - } - } - - private log(...args: unknown[]) { - this._log(...args) - } - - public broadcast(message: IpcMessage) { - this.log("[server#broadcast] message =", message) - ipc.server.broadcast("message", message) - } - - public send(client: string | Socket, message: IpcMessage) { - this.log("[server#send] message =", message) - - if (typeof client === "string") { - const socket = this._clients.get(client) - - if (socket) { - ipc.server.emit(socket, "message", message) - } - } else { - ipc.server.emit(client, "message", message) - } - } - - public get socketPath() { - return this._socketPath - } - - public get isListening() { - return this._isListening - } -} diff --git a/packages/evals/src/types/defaults.ts b/packages/evals/src/settings/index.ts similarity index 100% rename from packages/evals/src/types/defaults.ts rename to packages/evals/src/settings/index.ts diff --git a/packages/evals/src/types/exercises.ts b/packages/evals/src/types/exercises.ts deleted file mode 100644 index dce12cf491..0000000000 --- a/packages/evals/src/types/exercises.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * ExerciseLanguage - */ - -export const exerciseLanguages = ["go", "java", "javascript", "python", "rust"] as const - -export type ExerciseLanguage = (typeof exerciseLanguages)[number] - -export const isExerciseLanguage = (value: string): value is ExerciseLanguage => - exerciseLanguages.includes(value as ExerciseLanguage) diff --git a/packages/evals/src/types/index.ts b/packages/evals/src/types/index.ts deleted file mode 100644 index 49ce3d0ab3..0000000000 --- a/packages/evals/src/types/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./exercises.js" -export * from "./ipc.js" -export * from "./defaults.js" diff --git a/packages/evals/src/types/ipc.ts b/packages/evals/src/types/ipc.ts deleted file mode 100644 index b302994321..0000000000 --- a/packages/evals/src/types/ipc.ts +++ /dev/null @@ -1,35 +0,0 @@ - -// import { IpcMessageType, taskEventSchema } from "@roo-code/types" - -/** - * TaskEvent - */ - -export enum EvalEventName { - Pass = "pass", - Fail = "fail", -} - -// export const taskEventSchema = z.discriminatedUnion("eventName", [ -// ...taskEventSchema.shape, -// z.object({ -// eventName: z.literal(EvalEventName.Pass), -// payload: z.undefined(), -// taskId: z.number(), -// }), -// z.object({ -// eventName: z.literal(EvalEventName.Fail), -// payload: z.undefined(), -// taskId: z.number(), -// }), -// ]) - -/** - * IpcMessage - */ - -// export enum IpcMessageType { -// ..., -// TaskEvent = "TaskEvent", -// EvalEvent = "EvalEvent", -// } diff --git a/packages/evals/test.db b/packages/evals/test.db new file mode 100644 index 0000000000000000000000000000000000000000..3bb6a25cfa3d77f5b693a2b04142a530c9da5d30 GIT binary patch literal 28672 zcmeI4Pi)&%9LN3aw5dZow}L9{P~@f{8ZGOe4LEFq5?XhPNYgHB1U<#B^O9Ok?96sh zyQ+s$jcFIS0^)!K7lZ`Iap8`{4u}Jskk%UqPF&!~d->DESpsxSsDWF?{v1Fe(rtysD~#APlo3%#KzYU?-v01^Xl&=lxEHg_*bR zj}q zuYDF?%xcMXOl&*Hg`qK ztgD$-cI49O1e@X3>{NRa@9_<9ySs~dk})b&SADwU2j)}mV2^&&rG`%nNx$t-huP)T ztd_c#srxqF^dYWhwPh`wM?%oPmbN~kta<=JyNA=cpeSrAX|?c%pRVZMa#Cltw2)o?$eTLZ6*(A zTyyM%86AngeM<^Qr>4m5tH-f!s_KYB=;64x>^)-ieP^56Udrydd0ExrqpP*vd%HQj z=&(Ap(?`TK%q{wc%f2Xiy-m~wveYQ_8+SaWn$?(cATu9Fuz zeu#nDjoSC9k?XrTD^7uydu+b~^-R~QHn8!KaV{S9eakK}`kQ5EllN3vDQ^AWQkQVd zZR)QX{#Fm2rem8m*JYq~k0-Huy`0RY*VRjbkag|;W2w1-RMD`?9W|nl)JZBq$Nphe z?D6eb{@t7?-wW&?8VG;@2!H?xfB*=900@8p2!H?xfWVm{kRZbXd5*dJJRw6NsZ{kZ zzA!U?vBK^~&ia+=tm`;49=jVNid(O|=Zq*n36gSOP<~VHE5DqXMZ!@K009sH0T2KI z5C8!X009sH0TB4#5>P~GigdgvATbh(%sV`GHY&@K6s?bYVwgzdGJltYKmV7`eIzJ% zl_%K;8VG;@2!H?xfB*=900@8p2!H?x{Obg2(y$U}OKeKu%C|I{zV~_3I zizV-T9R7~HTV43<1KvIqzWnB&n+^EaTrB_oFDhRP$^-TT4Fo^{1V8`;KmY_l00ck) z1V8`;K;ZNdm=q&|OvWbUP$(ppoRTx^n7&cwH!)hrGlYrAW9PX@UBWYVTVwn)!d4|J zM}l&s{CfHp2#-Jj1V8`;KmY_l00ck)1V8`;KmY{(7J< { private readonly _socketPath: string diff --git a/src/extension/ipc-server.ts b/packages/ipc/src/ipc-server.ts similarity index 99% rename from src/extension/ipc-server.ts rename to packages/ipc/src/ipc-server.ts index 3903846243..4a15192f80 100644 --- a/src/extension/ipc-server.ts +++ b/packages/ipc/src/ipc-server.ts @@ -13,10 +13,6 @@ import { ipcMessageSchema, } from "@roo-code/types" -/** - * IpcServer - */ - export class IpcServer extends EventEmitter implements RooCodeIpcServer { private readonly _socketPath: string private readonly _log: (...args: unknown[]) => void diff --git a/packages/ipc/tsconfig.json b/packages/ipc/tsconfig.json new file mode 100644 index 0000000000..0f9961fdbd --- /dev/null +++ b/packages/ipc/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@roo-code/config-typescript/base.json", + "compilerOptions": { + "types": ["vitest/globals"] + }, + "include": ["src"], + "exclude": ["node_modules"] +} diff --git a/packages/types/src/api.ts b/packages/types/src/api.ts index c098111e6c..b8d28dc429 100644 --- a/packages/types/src/api.ts +++ b/packages/types/src/api.ts @@ -1,19 +1,11 @@ import type { EventEmitter } from "events" import type { Socket } from "net" -import type { - RooCodeSettings, - ProviderSettingsEntry, - ProviderSettings, - ClineMessage, - TokenUsage, - ToolUsage, - ToolName, - TaskCommand, - TaskEvent, - IpcMessage, -} from "./index.js" -import { IpcMessageType } from "./index.js" +import type { RooCodeSettings } from "./global-settings.js" +import type { ProviderSettingsEntry, ProviderSettings } from "./provider-settings.js" +import type { ClineMessage, TokenUsage } from "./message.js" +import type { ToolUsage, ToolName } from "./tool.js" +import type { IpcMessage, IpcServerEvents } from "./ipc.js" // TODO: Make sure this matches `RooCodeEvents` from `@roo-code/types`. export interface RooCodeAPIEvents { @@ -158,13 +150,6 @@ export interface RooCodeAPI extends EventEmitter { setActiveProfile(name: string): Promise } -export type IpcServerEvents = { - [IpcMessageType.Connect]: [clientId: string] - [IpcMessageType.Disconnect]: [clientId: string] - [IpcMessageType.TaskCommand]: [clientId: string, data: TaskCommand] - [IpcMessageType.TaskEvent]: [relayClientId: string | undefined, data: TaskEvent] -} - export interface RooCodeIpcServer extends EventEmitter { listen(): void broadcast(message: IpcMessage): void diff --git a/packages/types/src/ipc.ts b/packages/types/src/ipc.ts index aa35e194a9..db3fa2ab29 100644 --- a/packages/types/src/ipc.ts +++ b/packages/types/src/ipc.ts @@ -21,6 +21,8 @@ export enum RooCodeEventName { TaskCompleted = "taskCompleted", TaskTokenUsageUpdated = "taskTokenUsageUpdated", TaskToolFailed = "taskToolFailed", + EvalPass = "evalPass", + EvalFail = "evalFail", } export const rooCodeEventsSchema = z.object({ @@ -98,46 +100,72 @@ export const taskEventSchema = z.discriminatedUnion("eventName", [ z.object({ eventName: z.literal(RooCodeEventName.Message), payload: rooCodeEventsSchema.shape[RooCodeEventName.Message], + taskId: z.number().optional(), }), z.object({ eventName: z.literal(RooCodeEventName.TaskCreated), payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskCreated], + taskId: z.number().optional(), }), z.object({ eventName: z.literal(RooCodeEventName.TaskStarted), payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskStarted], + taskId: z.number().optional(), }), z.object({ eventName: z.literal(RooCodeEventName.TaskModeSwitched), payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskModeSwitched], + taskId: z.number().optional(), }), z.object({ eventName: z.literal(RooCodeEventName.TaskPaused), payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskPaused], + taskId: z.number().optional(), }), z.object({ eventName: z.literal(RooCodeEventName.TaskUnpaused), payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskUnpaused], + taskId: z.number().optional(), }), z.object({ eventName: z.literal(RooCodeEventName.TaskAskResponded), payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskAskResponded], + taskId: z.number().optional(), }), z.object({ eventName: z.literal(RooCodeEventName.TaskAborted), payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskAborted], + taskId: z.number().optional(), }), z.object({ eventName: z.literal(RooCodeEventName.TaskSpawned), payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskSpawned], + taskId: z.number().optional(), }), z.object({ eventName: z.literal(RooCodeEventName.TaskCompleted), payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskCompleted], + taskId: z.number().optional(), }), z.object({ eventName: z.literal(RooCodeEventName.TaskTokenUsageUpdated), payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskTokenUsageUpdated], + taskId: z.number().optional(), + }), + z.object({ + eventName: z.literal(RooCodeEventName.TaskToolFailed), + payload: rooCodeEventsSchema.shape[RooCodeEventName.TaskToolFailed], + taskId: z.number().optional(), + }), + z.object({ + eventName: z.literal(RooCodeEventName.EvalPass), + payload: z.undefined(), + taskId: z.number(), + }), + z.object({ + eventName: z.literal(RooCodeEventName.EvalFail), + payload: z.undefined(), + taskId: z.number(), }), ]) @@ -181,3 +209,26 @@ export const ipcMessageSchema = z.discriminatedUnion("type", [ ]) export type IpcMessage = z.infer + +/** + * Client + */ + +export type IpcClientEvents = { + [IpcMessageType.Connect]: [] + [IpcMessageType.Disconnect]: [] + [IpcMessageType.Ack]: [data: Ack] + [IpcMessageType.TaskCommand]: [data: TaskCommand] + [IpcMessageType.TaskEvent]: [data: TaskEvent] +} + +/** + * Server + */ + +export type IpcServerEvents = { + [IpcMessageType.Connect]: [clientId: string] + [IpcMessageType.Disconnect]: [clientId: string] + [IpcMessageType.TaskCommand]: [clientId: string, data: TaskCommand] + [IpcMessageType.TaskEvent]: [relayClientId: string | undefined, data: TaskEvent] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3cf2c70e81..9ce0eb6722 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -103,52 +103,55 @@ importers: dependencies: '@hookform/resolvers': specifier: ^4.1.3 - version: 4.1.3(react-hook-form@7.57.0(react@19.1.0)) + version: 4.1.3(react-hook-form@7.57.0(react@18.3.1)) '@radix-ui/react-alert-dialog': specifier: ^1.1.7 - version: 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.13(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dialog': specifier: ^1.1.6 - version: 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.13(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.1.7 - version: 2.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.1.14(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-label': specifier: ^2.1.2 - version: 2.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.1.7(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-popover': specifier: ^1.1.6 - version: 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.13(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-scroll-area': specifier: ^1.2.3 - version: 1.2.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.9(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-select': specifier: ^2.1.6 - version: 2.2.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.2.4(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.1.2 - version: 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slider': specifier: ^1.2.4 - version: 1.3.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.3.4(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.1.2 - version: 1.2.2(@types/react@19.1.6)(react@19.1.0) + version: 1.2.2(@types/react@18.3.21)(react@18.3.1) '@radix-ui/react-tabs': specifier: ^1.1.3 - version: 1.1.12(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.12(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': specifier: ^1.1.8 - version: 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@roo-code/evals': specifier: workspace:^ version: link:../../packages/evals + '@roo-code/ipc': + specifier: workspace:^ + version: link:../../packages/ipc '@roo-code/types': specifier: workspace:^ version: link:../../packages/types '@tanstack/react-query': specifier: ^5.69.0 - version: 5.76.1(react@19.1.0) + version: 5.76.1(react@18.3.1) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -157,19 +160,19 @@ importers: version: 2.1.1 cmdk: specifier: ^1.1.0 - version: 1.1.1(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.1(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fuzzysort: specifier: ^3.1.0 version: 3.1.0 lucide-react: specifier: ^0.511.0 - version: 0.511.0(react@19.1.0) + version: 0.511.0(react@18.3.1) next: specifier: 15.3.3 - version: 15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 15.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.4.6 - version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) p-map: specifier: ^7.0.3 version: 7.0.3 @@ -177,20 +180,20 @@ importers: specifier: ^1.2.0 version: 1.2.0 react: - specifier: ^19.0.0 - version: 19.1.0 + specifier: ^18.3.1 + version: 18.3.1 react-dom: - specifier: ^19.0.0 - version: 19.1.0(react@19.1.0) + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) react-hook-form: specifier: ^7.54.2 - version: 7.57.0(react@19.1.0) + version: 7.57.0(react@18.3.1) react-use: specifier: ^17.6.0 - version: 17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) sonner: specifier: ^2.0.2 - version: 2.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: specifier: ^3.0.2 version: 3.3.0 @@ -199,7 +202,7 @@ importers: version: 1.0.7(tailwindcss@4.1.6) vaul: specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) zod: specifier: ^3.24.2 version: 3.24.4 @@ -217,11 +220,11 @@ importers: specifier: ^1.1.6 version: 1.1.6 '@types/react': - specifier: ^19 - version: 19.1.6 + specifier: ^18.3.18 + version: 18.3.21 '@types/react-dom': - specifier: ^19 - version: 19.1.5(@types/react@19.1.6) + specifier: ^18.3.5 + version: 18.3.7(@types/react@18.3.21) tailwindcss: specifier: ^4 version: 4.1.6 @@ -313,15 +316,18 @@ importers: packages/evals: dependencies: + '@libsql/client': + specifier: ^0.15.8 + version: 0.15.8 + '@roo-code/ipc': + specifier: workspace:^ + version: link:../ipc '@roo-code/types': specifier: workspace:^ version: link:../types drizzle-orm: specifier: ^0.44.1 - version: 0.44.1 - drizzle-zod: - specifier: ^0.8.2 - version: 0.8.2(drizzle-orm@0.44.1)(zod@3.24.4) + version: 0.44.1(@libsql/client@0.15.8) execa: specifier: ^9.5.2 version: 9.5.3 @@ -362,6 +368,34 @@ importers: drizzle-kit: specifier: ^0.31.1 version: 0.31.1 + tsx: + specifier: ^4.19.3 + version: 4.19.4 + vitest: + specifier: ^3.1.3 + version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) + + packages/ipc: + dependencies: + '@roo-code/types': + specifier: workspace:^ + version: link:../types + node-ipc: + specifier: ^12.0.0 + version: 12.0.0 + devDependencies: + '@roo-code/config-eslint': + specifier: workspace:^ + version: link:../config-eslint + '@roo-code/config-typescript': + specifier: workspace:^ + version: link:../config-typescript + '@types/node': + specifier: ^22.15.20 + version: 22.15.20 + '@types/node-ipc': + specifier: ^9.2.3 + version: 9.2.3 vitest: specifier: ^3.1.3 version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) @@ -448,6 +482,9 @@ importers: '@roo-code/cloud': specifier: workspace:^ version: link:../packages/cloud + '@roo-code/ipc': + specifier: workspace:^ + version: link:../packages/ipc '@roo-code/telemetry': specifier: workspace:^ version: link:../packages/telemetry @@ -2246,6 +2283,67 @@ packages: '@kwsites/promise-deferred@1.1.1': resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + '@libsql/client@0.15.8': + resolution: {integrity: sha512-TskygwF+ToZeWhPPT0WennyGrP3tmkKraaKopT2YwUjqD6DWDRm6SG5iy0VqnaO+HC9FNBCDX0oQPODU3gqqPQ==} + + '@libsql/core@0.15.8': + resolution: {integrity: sha512-oX2fQqDbZkaBUvFMGvJq1Jh+mVzJrgNbEwK6Wzvp91z3uMe9iaIIXgO8yxB72RpUf7BqzjiKHjEiRXytfTdbUw==} + + '@libsql/darwin-arm64@0.5.12': + resolution: {integrity: sha512-RDA87qaCWPE+uJWY91A0Is8KU9x43xDWMH8VNlj330CLFT9rC6jDypqadg0mzu1FEL2leG6BRdX6EcfM6NM3pw==} + cpu: [arm64] + os: [darwin] + + '@libsql/darwin-x64@0.5.12': + resolution: {integrity: sha512-6Ufip8uxQkLOFCsGd07miDt1w+Rx5VIJdDI6mSRBlVaEXWuWx1R8D7gfeCS0k73vDd+oh39pYF/R8nVFkwiOcg==} + cpu: [x64] + os: [darwin] + + '@libsql/hrana-client@0.7.0': + resolution: {integrity: sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==} + + '@libsql/isomorphic-fetch@0.3.1': + resolution: {integrity: sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==} + engines: {node: '>=18.0.0'} + + '@libsql/isomorphic-ws@0.1.5': + resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} + + '@libsql/linux-arm-gnueabihf@0.5.12': + resolution: {integrity: sha512-I+4K++7byiOjYJNRGcrCBlIXjP6MwUta2GxPGZMoH2kAv6AintO4dvritu6vDe9LyRPXTjRJl30k+ThXR0RWxQ==} + cpu: [arm] + os: [linux] + + '@libsql/linux-arm-musleabihf@0.5.12': + resolution: {integrity: sha512-87C3A5ozNEdOnI5VZq9lHpPJ3Ncl3p+qB5roDluVKflx9kKH1hEc8MpwkvU3qeIWppvgHowXlO9CfS572V10OA==} + cpu: [arm] + os: [linux] + + '@libsql/linux-arm64-gnu@0.5.12': + resolution: {integrity: sha512-0jpcuD7nHGD4XVTbId44SaY/JcqURKpxkXUcW4FsQ1qmkG5PsUy5l2Ob29P8HwGRBhDBomFWA4PvwJGrP/2pMA==} + cpu: [arm64] + os: [linux] + + '@libsql/linux-arm64-musl@0.5.12': + resolution: {integrity: sha512-ic5bHp9OTCNgmvqojqkxWfuPm4Y8CKfpUe/AqmXrstzqlE9EKg1qD9KZIjso2g4pX15KPWJGPSd29OXxHkzsog==} + cpu: [arm64] + os: [linux] + + '@libsql/linux-x64-gnu@0.5.12': + resolution: {integrity: sha512-9zDtahCw2q0WJ54c/0vq142JtzI16OB8/U0bVCrpxF9DmLFyKBrAtEvoYdvKtFmvcvNn7YA5LEytr2g2q+xl1g==} + cpu: [x64] + os: [linux] + + '@libsql/linux-x64-musl@0.5.12': + resolution: {integrity: sha512-+fisSpE+2yK1N88shPtB7bEB8d+fF3CQmy1KnbJ4Oned8cw5uBfU46A1ICG+49RFaKxmoIQimHVAxfGV9NFQ3w==} + cpu: [x64] + os: [linux] + + '@libsql/win32-x64-msvc@0.5.12': + resolution: {integrity: sha512-upNJCcgMgpAFXlL//rRVwlPgMT8uG1LoilHgCEpAp+GEjgBjoDgGW6iOkktuJC8paZh5kt9dCPh3r3jF3HWQjg==} + cpu: [x64] + os: [win32] + '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} @@ -2295,6 +2393,9 @@ packages: resolution: {integrity: sha512-qFlpmObPqeUs4u3oFYv/OM/xyX+pNa5TRAjqjvMhbGYlyMhzSrE5UfncL2rUcEeVfD9Gebgff73hPwqcOwJQNA==} engines: {node: '>=18'} + '@neon-rs/load@0.0.4': + resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} + '@next/env@15.3.3': resolution: {integrity: sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==} @@ -3984,17 +4085,9 @@ packages: peerDependencies: '@types/react': ^18.0.0 - '@types/react-dom@19.1.5': - resolution: {integrity: sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==} - peerDependencies: - '@types/react': ^19.0.0 - '@types/react@18.3.21': resolution: {integrity: sha512-gXLBtmlcRJeT09/sI4PxVwyrku6SaNUj/6cMubjE6T6XdY1fDmBL7r0nX0jbSZPU/Xr0KuwLLZh6aOYY5d91Xw==} - '@types/react@19.1.6': - resolution: {integrity: sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==} - '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} @@ -4040,6 +4133,9 @@ packages: '@types/vscode@1.100.0': resolution: {integrity: sha512-4uNyvzHoraXEeCamR3+fzcBlh7Afs4Ifjs4epINyUX/jvdk0uzLnwiDY35UKDKnkCHP5Nu3dljl2H8lR6s+rQw==} + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -5119,6 +5215,10 @@ packages: dagre-d3-es@7.0.11: resolution: {integrity: sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + data-uri-to-buffer@6.0.2: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} @@ -5261,6 +5361,10 @@ packages: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} + detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + detect-libc@2.0.4: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} @@ -5439,12 +5543,6 @@ packages: sqlite3: optional: true - drizzle-zod@0.8.2: - resolution: {integrity: sha512-9Do/16OjFFNrQDZgvMtxtDDwKWbFOxUAIwNPKX98SfxrP8H18vhN1BvNXbhelLcdgCE7GEaXDJqBjMExSkhpkA==} - peerDependencies: - drizzle-orm: '>=0.36.0' - zod: ^3.25.1 - duck@0.1.12: resolution: {integrity: sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==} @@ -5859,6 +5957,10 @@ packages: picomatch: optional: true + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + fflate@0.4.8: resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} @@ -5936,6 +6038,10 @@ packages: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -6830,6 +6936,9 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + js-cookie@2.2.1: resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} @@ -6982,6 +7091,10 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + libsql@0.5.12: + resolution: {integrity: sha512-TikiQZ1j4TwFEqVdJdTM9ZTti28is/ytGEvn0S2MocOj69UKQetWACe/qd8KAD5VeNnQSVd6Nlm2AJx0DFW9Ag==} + os: [darwin, linux, win32] + lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} @@ -7715,6 +7828,10 @@ packages: encoding: optional: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -8191,6 +8308,9 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + promise-limit@2.7.0: + resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -8290,11 +8410,6 @@ packages: peerDependencies: react: ^18.3.1 - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} - peerDependencies: - react: ^19.1.0 - react-hook-form@7.57.0: resolution: {integrity: sha512-RbEks3+cbvTP84l/VXGUZ+JMrKOS8ykQCRYdm5aYsxnDquL0vspsyNhGRO7pcH6hsZqWlPOjLye7rJqdtdAmlg==} engines: {node: '>=18.0.0'} @@ -8400,10 +8515,6 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} - engines: {node: '>=0.10.0'} - read-package-json-fast@4.0.0: resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==} engines: {node: ^18.17.0 || >=20.5.0} @@ -8619,9 +8730,6 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} - screenfull@5.2.0: resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} engines: {node: '>=0.10.0'} @@ -9753,6 +9861,10 @@ packages: web-namespaces@1.1.4: resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + web-streams-polyfill@4.0.0-beta.3: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} @@ -11302,12 +11414,6 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/react-dom@2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@floating-ui/dom': 1.7.0 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - '@floating-ui/utils@0.2.9': {} '@google/genai@0.13.0': @@ -11322,10 +11428,10 @@ snapshots: - supports-color - utf-8-validate - '@hookform/resolvers@4.1.3(react-hook-form@7.57.0(react@19.1.0))': + '@hookform/resolvers@4.1.3(react-hook-form@7.57.0(react@18.3.1))': dependencies: '@standard-schema/utils': 0.3.0 - react-hook-form: 7.57.0(react@19.1.0) + react-hook-form: 7.57.0(react@18.3.1) '@humanfs/core@0.19.1': {} @@ -11655,6 +11761,68 @@ snapshots: '@kwsites/promise-deferred@1.1.1': {} + '@libsql/client@0.15.8': + dependencies: + '@libsql/core': 0.15.8 + '@libsql/hrana-client': 0.7.0 + js-base64: 3.7.7 + libsql: 0.5.12 + promise-limit: 2.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@libsql/core@0.15.8': + dependencies: + js-base64: 3.7.7 + + '@libsql/darwin-arm64@0.5.12': + optional: true + + '@libsql/darwin-x64@0.5.12': + optional: true + + '@libsql/hrana-client@0.7.0': + dependencies: + '@libsql/isomorphic-fetch': 0.3.1 + '@libsql/isomorphic-ws': 0.1.5 + js-base64: 3.7.7 + node-fetch: 3.3.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@libsql/isomorphic-fetch@0.3.1': {} + + '@libsql/isomorphic-ws@0.1.5': + dependencies: + '@types/ws': 8.18.1 + ws: 8.18.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@libsql/linux-arm-gnueabihf@0.5.12': + optional: true + + '@libsql/linux-arm-musleabihf@0.5.12': + optional: true + + '@libsql/linux-arm64-gnu@0.5.12': + optional: true + + '@libsql/linux-arm64-musl@0.5.12': + optional: true + + '@libsql/linux-x64-gnu@0.5.12': + optional: true + + '@libsql/linux-x64-musl@0.5.12': + optional: true + + '@libsql/win32-x64-msvc@0.5.12': + optional: true + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.27.1 @@ -11736,6 +11904,8 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 + '@neon-rs/load@0.0.4': {} + '@next/env@15.3.3': {} '@next/eslint-plugin-next@15.3.2': @@ -11852,20 +12022,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-alert-dialog@1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-arrow@1.1.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -11875,15 +12031,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-arrow@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-checkbox@1.3.1(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -11928,29 +12075,17 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-collection@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.21)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@types/react': 18.3.21 + '@types/react-dom': 18.3.7(@types/react@18.3.21) '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.21)(react@18.3.1)': dependencies: @@ -11958,24 +12093,12 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.6)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - '@radix-ui/react-context@1.1.2(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-context@1.1.2(@types/react@19.1.6)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - '@radix-ui/react-dialog@1.1.13(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -11998,40 +12121,12 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-dialog@1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) - aria-hidden: 1.2.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.6)(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-direction@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-direction@1.1.1(@types/react@19.1.6)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - '@radix-ui/react-dismissable-layer@1.1.9(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -12045,19 +12140,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-dismissable-layer@1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-dropdown-menu@2.1.14(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -12073,33 +12155,12 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-dropdown-menu@2.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-menu': 2.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-focus-guards@1.1.2(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.6)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - '@radix-ui/react-focus-scope@1.1.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.21)(react@18.3.1) @@ -12111,17 +12172,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-focus-scope@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-icons@1.3.2(react@18.3.1)': dependencies: react: 18.3.1 @@ -12133,21 +12183,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-id@1.1.1(@types/react@19.1.6)(react@19.1.0)': + '@radix-ui/react-label@2.1.7(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - - '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@types/react': 18.3.21 + '@types/react-dom': 18.3.7(@types/react@18.3.21) '@radix-ui/react-menu@2.1.14(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -12175,32 +12218,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-menu@2.1.14(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) - aria-hidden: 1.2.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.6)(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-popover@1.1.13(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -12224,29 +12241,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-popover@1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) - aria-hidden: 1.2.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.6)(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-popper@1.2.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12265,24 +12259,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-popper@1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/rect': 1.1.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-portal@1.1.8(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12293,16 +12269,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-portal@1.1.8(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-presence@1.1.4(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.21)(react@18.3.1) @@ -12313,16 +12279,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-primitive@2.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.2.2(@types/react@18.3.21)(react@18.3.1) @@ -12332,23 +12288,14 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-primitive@2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.21)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@types/react': 18.3.21 + '@types/react-dom': 18.3.7(@types/react@18.3.21) '@radix-ui/react-progress@1.1.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -12360,22 +12307,22 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.21)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@types/react': 18.3.21 + '@types/react-dom': 18.3.7(@types/react@18.3.21) '@radix-ui/react-roving-focus@1.1.9(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -12394,39 +12341,22 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-roving-focus@1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - - '@radix-ui/react-scroll-area@1.2.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-scroll-area@1.2.9(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.21)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@types/react': 18.3.21 + '@types/react-dom': 18.3.7(@types/react@18.3.21) '@radix-ui/react-select@2.2.4(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -12457,35 +12387,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-select@2.2.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - aria-hidden: 1.2.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.6.3(@types/react@19.1.6)(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-separator@1.1.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12495,15 +12396,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-separator@1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-slider@1.3.4(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.1 @@ -12523,25 +12415,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-slider@1.3.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-slot@1.2.2(@types/react@18.3.21)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.21)(react@18.3.1) @@ -12549,35 +12422,28 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-slot@1.2.2(@types/react@19.1.6)(react@19.1.0)': + '@radix-ui/react-slot@1.2.3(@types/react@18.3.21)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - - '@radix-ui/react-slot@1.2.3(@types/react@19.1.6)(react@19.1.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.21)(react@18.3.1) + react: 18.3.1 optionalDependencies: - '@types/react': 19.1.6 + '@types/react': 18.3.21 - '@radix-ui/react-tabs@1.1.12(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tabs@1.1.12(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.21)(react@18.3.1) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.21)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) + '@types/react': 18.3.21 + '@types/react-dom': 18.3.7(@types/react@18.3.21) '@radix-ui/react-tooltip@1.2.6(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -12599,38 +12465,12 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-tooltip@1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-popper': 1.2.6(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.8(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.6)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.21)(react@18.3.1)': dependencies: '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.21)(react@18.3.1) @@ -12639,14 +12479,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.6)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.21)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.21)(react@18.3.1) @@ -12654,13 +12486,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.6)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.21)(react@18.3.1) @@ -12668,37 +12493,18 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.6)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.6)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - '@radix-ui/react-use-previous@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.6)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - '@radix-ui/react-use-rect@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.1 @@ -12706,13 +12512,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.6)(react@19.1.0)': - dependencies: - '@radix-ui/rect': 1.1.1 - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - '@radix-ui/react-use-size@1.1.1(@types/react@18.3.21)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.21)(react@18.3.1) @@ -12720,13 +12519,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.6)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.6)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.6 - '@radix-ui/react-visually-hidden@1.2.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12736,15 +12528,6 @@ snapshots: '@types/react': 18.3.21 '@types/react-dom': 18.3.7(@types/react@18.3.21) - '@radix-ui/react-visually-hidden@1.2.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - '@types/react-dom': 19.1.5(@types/react@19.1.6) - '@radix-ui/rect@1.1.1': {} '@rollup/pluginutils@5.1.4(rollup@4.40.2)': @@ -13691,11 +13474,6 @@ snapshots: '@tanstack/query-core': 5.76.0 react: 18.3.1 - '@tanstack/react-query@5.76.1(react@19.1.0)': - dependencies: - '@tanstack/query-core': 5.76.0 - react: 19.1.0 - '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.27.1 @@ -13997,19 +13775,11 @@ snapshots: dependencies: '@types/react': 18.3.21 - '@types/react-dom@19.1.5(@types/react@19.1.6)': - dependencies: - '@types/react': 19.1.6 - '@types/react@18.3.21': dependencies: '@types/prop-types': 15.7.14 csstype: 3.1.3 - '@types/react@19.1.6': - dependencies: - csstype: 3.1.3 - '@types/resolve@1.20.6': {} '@types/shell-quote@1.7.5': {} @@ -14043,6 +13813,10 @@ snapshots: '@types/vscode@1.100.0': {} + '@types/ws@8.18.1': + dependencies: + '@types/node': 22.15.20 + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.33': @@ -14933,18 +14707,6 @@ snapshots: - '@types/react' - '@types/react-dom' - cmdk@1.1.1(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.6)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - co@4.6.0: {} cockatiel@3.2.1: {} @@ -15344,6 +15106,8 @@ snapshots: d3: 7.9.0 lodash-es: 4.17.21 + data-uri-to-buffer@4.0.1: {} + data-uri-to-buffer@6.0.2: {} data-urls@3.0.2: @@ -15461,6 +15225,8 @@ snapshots: detect-indent@6.1.0: {} + detect-libc@2.0.2: {} + detect-libc@2.0.4: {} detect-newline@3.1.0: {} @@ -15538,12 +15304,9 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.44.1: {} - - drizzle-zod@0.8.2(drizzle-orm@0.44.1)(zod@3.24.4): - dependencies: - drizzle-orm: 0.44.1 - zod: 3.24.4 + drizzle-orm@0.44.1(@libsql/client@0.15.8): + optionalDependencies: + '@libsql/client': 0.15.8 duck@0.1.12: dependencies: @@ -16161,6 +15924,11 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + fflate@0.4.8: {} figures@6.1.0: @@ -16244,6 +16012,10 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 4.0.0-beta.3 + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + forwarded@0.2.0: {} fresh@2.0.0: {} @@ -17487,6 +17259,8 @@ snapshots: joycon@3.1.1: {} + js-base64@3.7.7: {} + js-cookie@2.2.1: {} js-message@1.0.7: {} @@ -17681,6 +17455,21 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + libsql@0.5.12: + dependencies: + '@neon-rs/load': 0.0.4 + detect-libc: 2.0.2 + optionalDependencies: + '@libsql/darwin-arm64': 0.5.12 + '@libsql/darwin-x64': 0.5.12 + '@libsql/linux-arm-gnueabihf': 0.5.12 + '@libsql/linux-arm-musleabihf': 0.5.12 + '@libsql/linux-arm64-gnu': 0.5.12 + '@libsql/linux-arm64-musl': 0.5.12 + '@libsql/linux-x64-gnu': 0.5.12 + '@libsql/linux-x64-musl': 0.5.12 + '@libsql/win32-x64-msvc': 0.5.12 + lie@3.3.0: dependencies: immediate: 3.0.6 @@ -17939,10 +17728,6 @@ snapshots: dependencies: react: 18.3.1 - lucide-react@0.511.0(react@19.1.0): - dependencies: - react: 19.1.0 - lz-string@1.5.0: {} macos-release@3.3.0: {} @@ -18544,19 +18329,6 @@ snapshots: stacktrace-js: 2.0.2 stylis: 4.3.6 - nano-css@5.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - css-tree: 1.1.3 - csstype: 3.1.3 - fastest-stable-stringify: 2.0.2 - inline-style-prefixer: 7.0.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - rtl-css-js: 1.16.1 - stacktrace-js: 2.0.2 - stylis: 4.3.6 - nanoid@3.3.11: {} napi-build-utils@2.0.0: @@ -18568,12 +18340,12 @@ snapshots: netmask@2.0.2: {} - next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next-themes@0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - next@15.3.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@15.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 15.3.3 '@swc/counter': 0.1.3 @@ -18581,9 +18353,9 @@ snapshots: busboy: 1.6.0 caniuse-lite: 1.0.30001718 postcss: 8.4.31 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(react@19.1.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.6(react@18.3.1) optionalDependencies: '@next/swc-darwin-arm64': 15.3.3 '@next/swc-darwin-x64': 15.3.3 @@ -18624,6 +18396,12 @@ snapshots: dependencies: whatwg-url: 5.0.0 + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + node-int64@0.4.0: {} node-ipc@12.0.0: @@ -19133,6 +18911,8 @@ snapshots: progress@2.0.3: {} + promise-limit@2.7.0: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -19273,14 +19053,9 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-dom@19.1.0(react@19.1.0): + react-hook-form@7.57.0(react@18.3.1): dependencies: - react: 19.1.0 - scheduler: 0.26.0 - - react-hook-form@7.57.0(react@19.1.0): - dependencies: - react: 19.1.0 + react: 18.3.1 react-i18next@15.5.1(i18next@24.2.3(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3): dependencies: @@ -19336,14 +19111,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - react-remove-scroll-bar@2.3.8(@types/react@19.1.6)(react@19.1.0): - dependencies: - react: 19.1.0 - react-style-singleton: 2.2.3(@types/react@19.1.6)(react@19.1.0) - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.1.6 - react-remove-scroll@2.6.3(@types/react@18.3.21)(react@18.3.1): dependencies: react: 18.3.1 @@ -19355,17 +19122,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - react-remove-scroll@2.6.3(@types/react@19.1.6)(react@19.1.0): - dependencies: - react: 19.1.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.6)(react@19.1.0) - react-style-singleton: 2.2.3(@types/react@19.1.6)(react@19.1.0) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.6)(react@19.1.0) - use-sidecar: 1.1.3(@types/react@19.1.6)(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.6 - react-style-singleton@2.2.3(@types/react@18.3.21)(react@18.3.1): dependencies: get-nonce: 1.0.1 @@ -19374,14 +19130,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - react-style-singleton@2.2.3(@types/react@19.1.6)(react@19.1.0): - dependencies: - get-nonce: 1.0.1 - react: 19.1.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.1.6 - react-textarea-autosize@8.5.9(@types/react@18.3.21)(react@18.3.1): dependencies: '@babel/runtime': 7.27.1 @@ -19396,11 +19144,6 @@ snapshots: react: 18.3.1 tslib: 2.8.1 - react-universal-interface@0.6.2(react@19.1.0)(tslib@2.8.1): - dependencies: - react: 19.1.0 - tslib: 2.8.1 - react-use@17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@types/js-cookie': 2.2.7 @@ -19420,25 +19163,6 @@ snapshots: ts-easing: 0.2.0 tslib: 2.8.1 - react-use@17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - '@types/js-cookie': 2.2.7 - '@xobotyi/scrollbar-width': 1.9.5 - copy-to-clipboard: 3.3.3 - fast-deep-equal: 3.1.3 - fast-shallow-equal: 1.0.0 - js-cookie: 2.2.1 - nano-css: 5.6.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-universal-interface: 0.6.2(react@19.1.0)(tslib@2.8.1) - resize-observer-polyfill: 1.5.1 - screenfull: 5.2.0 - set-harmonic-interval: 1.0.1 - throttle-debounce: 3.0.1 - ts-easing: 0.2.0 - tslib: 2.8.1 - react-virtuoso@4.12.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 @@ -19448,8 +19172,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - react@19.1.0: {} - read-package-json-fast@4.0.0: dependencies: json-parse-even-better-errors: 4.0.0 @@ -19753,8 +19475,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - scheduler@0.26.0: {} - screenfull@5.2.0: {} seed-random@2.2.0: {} @@ -19972,10 +19692,10 @@ snapshots: ip-address: 9.0.5 smart-buffer: 4.2.0 - sonner@2.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + sonner@2.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) sound-play@1.1.0: {} @@ -20245,10 +19965,10 @@ snapshots: stylis: 4.3.2 tslib: 2.6.2 - styled-jsx@5.1.6(react@19.1.0): + styled-jsx@5.1.6(react@18.3.1): dependencies: client-only: 0.0.1 - react: 19.1.0 + react: 18.3.1 stylis@4.3.2: {} @@ -20795,13 +20515,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - use-callback-ref@1.3.3(@types/react@19.1.6)(react@19.1.0): - dependencies: - react: 19.1.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.1.6 - use-composed-ref@1.4.0(@types/react@18.3.21)(react@18.3.1): dependencies: react: 18.3.1 @@ -20829,14 +20542,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.21 - use-sidecar@1.1.3(@types/react@19.1.6)(react@19.1.0): - dependencies: - detect-node-es: 1.1.0 - react: 19.1.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.1.6 - use-sound@5.0.0(react@18.3.1): dependencies: howler: 2.2.4 @@ -20868,11 +20573,11 @@ snapshots: vary@1.1.2: {} - vaul@1.1.2(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + vaul@1.1.2(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@radix-ui/react-dialog': 1.1.13(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-dialog': 1.1.13(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -21113,6 +20818,8 @@ snapshots: web-namespaces@1.1.4: {} + web-streams-polyfill@3.3.3: {} + web-streams-polyfill@4.0.0-beta.3: {} web-tree-sitter@0.22.6: {} diff --git a/src/extension/api.ts b/src/extension/api.ts index f9b8e7a69a..e4cab41d29 100644 --- a/src/extension/api.ts +++ b/src/extension/api.ts @@ -16,14 +16,13 @@ import { TaskCommandName, TaskEvent, } from "@roo-code/types" +import { IpcServer } from "@roo-code/ipc" import { Package } from "../shared/package" import { getWorkspacePath } from "../utils/path" import { ClineProvider } from "../core/webview/ClineProvider" import { openClineInNewTab } from "../activate/registerCommands" -import { IpcServer } from "./ipc-server" - export class API extends EventEmitter implements RooCodeAPI { private readonly outputChannel: vscode.OutputChannel private readonly sidebarProvider: ClineProvider diff --git a/src/package.json b/src/package.json index 731922f426..2e866a3efd 100644 --- a/src/package.json +++ b/src/package.json @@ -362,6 +362,7 @@ "@mistralai/mistralai": "^1.3.6", "@modelcontextprotocol/sdk": "^1.9.0", "@roo-code/cloud": "workspace:^", + "@roo-code/ipc": "workspace:^", "@roo-code/telemetry": "workspace:^", "@roo-code/types": "workspace:^", "@qdrant/js-client-rest": "^1.14.0", From 537aff4eff8653c1bd707df18133c67da811834e Mon Sep 17 00:00:00 2001 From: cte Date: Mon, 2 Jun 2025 23:05:19 -0700 Subject: [PATCH 4/9] Appease knip --- knip.json | 2 +- packages/evals/drizzle.config.ts | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/knip.json b/knip.json index aefa19ad9c..8fa9d9e9ff 100644 --- a/knip.json +++ b/knip.json @@ -11,7 +11,7 @@ "**/stories/**", "bin/**", "apps/vscode-e2e/**", - "evals/**", + "packages/evals/**", "src/extension/**", "src/activate/**", "src/workers/**", diff --git a/packages/evals/drizzle.config.ts b/packages/evals/drizzle.config.ts index f53094bbcb..0ebce84cbd 100644 --- a/packages/evals/drizzle.config.ts +++ b/packages/evals/drizzle.config.ts @@ -1,9 +1,5 @@ import { defineConfig } from "drizzle-kit" -if ((!process.env.TURSO_CONNECTION_URL || !process.env.TURSO_AUTH_TOKEN) && !process.env.BENCHMARKS_DB_PATH) { - throw new Error("TURSO_CONNECTION_URL and TURSO_AUTH_TOKEN or BENCHMARKS_DB_PATH must be set") -} - const dialect = process.env.BENCHMARKS_DB_PATH ? "sqlite" : "turso" const dbCredentials = process.env.BENCHMARKS_DB_PATH From 34bdf3139609e101025b3bcbe1c9f90b53368137 Mon Sep 17 00:00:00 2001 From: cte Date: Mon, 2 Jun 2025 23:06:36 -0700 Subject: [PATCH 5/9] Fix tsc errors --- packages/evals/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/evals/tsconfig.json b/packages/evals/tsconfig.json index 0f9961fdbd..071ecda247 100644 --- a/packages/evals/tsconfig.json +++ b/packages/evals/tsconfig.json @@ -3,6 +3,6 @@ "compilerOptions": { "types": ["vitest/globals"] }, - "include": ["src"], + "include": ["src", "drizzle.config.ts"], "exclude": ["node_modules"] } From ea367baafc5bb293854e33bb777d898369bdd16e Mon Sep 17 00:00:00 2001 From: cte Date: Tue, 3 Jun 2025 00:01:16 -0700 Subject: [PATCH 6/9] Switch to postgres --- apps/web-evals/.gitignore | 1 + apps/web-evals/package.json | 4 +- .../src/hooks/use-open-router-models.ts | 34 +- apps/web-evals/tsconfig.tsbuildinfo | 1 - .../scripts/postgres/create-databases.sh | 11 + packages/evals/.env.development | 1 + packages/evals/.env.test | 1 + packages/evals/.gitignore | 7 + packages/evals/docker-compose.yml | 13 + packages/evals/drizzle.config.ts | 14 +- packages/evals/drizzle/0000_elite_raza.sql | 40 -- packages/evals/drizzle/0001_lush_reavers.sql | 1 - packages/evals/drizzle/0002_white_flatman.sql | 1 - packages/evals/drizzle/0003_sweet_chimera.sql | 1 - .../evals/drizzle/0004_absent_slapstick.sql | 10 - .../evals/drizzle/meta/0000_snapshot.json | 274 -------- .../evals/drizzle/meta/0001_snapshot.json | 281 -------- .../evals/drizzle/meta/0002_snapshot.json | 289 --------- .../evals/drizzle/meta/0003_snapshot.json | 296 --------- .../evals/drizzle/meta/0004_snapshot.json | 367 ----------- packages/evals/drizzle/meta/_journal.json | 41 -- packages/evals/package.json | 17 +- packages/evals/src/db/db.ts | 29 +- .../db/migrations/0000_old_gorilla_man.sql | 54 ++ .../src/db/migrations/meta/0000_snapshot.json | 410 ++++++++++++ .../src/db/migrations/meta/_journal.json | 13 + packages/evals/src/db/queries/runs.ts | 6 +- packages/evals/src/db/queries/taskMetrics.ts | 2 +- packages/evals/src/db/queries/tasks.ts | 2 +- packages/evals/src/db/queries/toolErrors.ts | 2 +- packages/evals/src/db/schema.ts | 72 +-- packages/evals/test.db | Bin 28672 -> 0 bytes packages/evals/tsconfig.json | 2 +- packages/evals/vitest-global-setup.ts | 40 ++ packages/evals/vitest.config.ts | 2 +- packages/evals/vitest.setup.ts | 20 - pnpm-lock.yaml | 607 ++++++++++++------ 37 files changed, 1047 insertions(+), 1919 deletions(-) delete mode 100644 apps/web-evals/tsconfig.tsbuildinfo create mode 100755 packages/evals/.docker/scripts/postgres/create-databases.sh create mode 100644 packages/evals/.env.development create mode 100644 packages/evals/.env.test create mode 100644 packages/evals/.gitignore create mode 100644 packages/evals/docker-compose.yml delete mode 100644 packages/evals/drizzle/0000_elite_raza.sql delete mode 100644 packages/evals/drizzle/0001_lush_reavers.sql delete mode 100644 packages/evals/drizzle/0002_white_flatman.sql delete mode 100644 packages/evals/drizzle/0003_sweet_chimera.sql delete mode 100644 packages/evals/drizzle/0004_absent_slapstick.sql delete mode 100644 packages/evals/drizzle/meta/0000_snapshot.json delete mode 100644 packages/evals/drizzle/meta/0001_snapshot.json delete mode 100644 packages/evals/drizzle/meta/0002_snapshot.json delete mode 100644 packages/evals/drizzle/meta/0003_snapshot.json delete mode 100644 packages/evals/drizzle/meta/0004_snapshot.json delete mode 100644 packages/evals/drizzle/meta/_journal.json create mode 100644 packages/evals/src/db/migrations/0000_old_gorilla_man.sql create mode 100644 packages/evals/src/db/migrations/meta/0000_snapshot.json create mode 100644 packages/evals/src/db/migrations/meta/_journal.json delete mode 100644 packages/evals/test.db create mode 100644 packages/evals/vitest-global-setup.ts delete mode 100644 packages/evals/vitest.setup.ts diff --git a/apps/web-evals/.gitignore b/apps/web-evals/.gitignore index a680367ef5..917e44d27f 100644 --- a/apps/web-evals/.gitignore +++ b/apps/web-evals/.gitignore @@ -1 +1,2 @@ .next +tsconfig.tsbuildinfo diff --git a/apps/web-evals/package.json b/apps/web-evals/package.json index 3a45162e83..b32d43190f 100644 --- a/apps/web-evals/package.json +++ b/apps/web-evals/package.json @@ -4,7 +4,7 @@ "scripts": { "lint": "next lint", "check-types": "tsc -b", - "dev": "dotenvx run -f ../../.env -- next dev --turbopack", + "dev": "next dev --turbopack", "format": "prettier --write src", "build": "next build", "start": "next start" @@ -32,7 +32,7 @@ "cmdk": "^1.1.0", "fuzzysort": "^3.1.0", "lucide-react": "^0.511.0", - "next": "15.3.3", + "next": "^15.2.5", "next-themes": "^0.4.6", "p-map": "^7.0.3", "ps-tree": "^1.2.0", diff --git a/apps/web-evals/src/hooks/use-open-router-models.ts b/apps/web-evals/src/hooks/use-open-router-models.ts index 5e5e069796..27800f90f2 100644 --- a/apps/web-evals/src/hooks/use-open-router-models.ts +++ b/apps/web-evals/src/hooks/use-open-router-models.ts @@ -1,37 +1,17 @@ import { z } from "zod" import { useQuery } from "@tanstack/react-query" -import type { ModelInfo } from "@roo-code/types" - export const openRouterModelSchema = z.object({ id: z.string(), name: z.string(), - description: z.string(), - created: z.number(), - context_length: z.number(), - pricing: z.object({ - prompt: z.string().optional(), - completion: z.string().optional(), - }), - top_provider: z - .object({ - max_completion_tokens: z.number().nullish(), - }) - .optional(), - architecture: z - .object({ - modality: z.string(), - }) - .optional(), }) -export type OpenRouterModel = z.infer & { modelInfo: ModelInfo } +export type OpenRouterModel = z.infer export const getOpenRouterModels = async (): Promise => { const response = await fetch("https://openrouter.ai/api/v1/models") if (!response.ok) { - console.error("Failed to fetch OpenRouter models") return [] } @@ -42,19 +22,11 @@ export const getOpenRouterModels = async (): Promise => { return [] } - return result.data.data - .sort((a, b) => a.name.localeCompare(b.name)) - .map((rawModel) => ({ - ...rawModel, - modelInfo: { - contextWindow: rawModel.context_length, - supportsPromptCache: false, - }, - })) + return result.data.data.sort((a, b) => a.name.localeCompare(b.name)) } export const useOpenRouterModels = () => - useQuery({ + useQuery({ queryKey: ["getOpenRouterModels"], queryFn: getOpenRouterModels, }) diff --git a/apps/web-evals/tsconfig.tsbuildinfo b/apps/web-evals/tsconfig.tsbuildinfo deleted file mode 100644 index ab2ab240be..0000000000 --- a/apps/web-evals/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"root":["./next-env.d.ts","./next.config.ts","./src/app/api/runs/route.ts","./src/app/api/runs/[id]/stream/route.ts","./src/app/api/tasks/route.ts","./src/components/providers/index.ts","./src/components/ui/index.ts","./src/hooks/use-event-source.ts","./src/hooks/use-exercises.ts","./src/hooks/use-open-router-models.ts","./src/hooks/use-process-tree.ts","./src/hooks/use-run-status.ts","./src/lib/formatters.ts","./src/lib/schemas.ts","./src/lib/utils.ts","./src/lib/server/exercises.ts","./src/lib/server/processes.ts","./src/lib/server/runs.ts","./src/lib/server/sse-stream.ts","./src/lib/server/tasks.ts","./src/app/home.tsx","./src/app/layout.tsx","./src/app/page.tsx","./src/app/runs/[id]/connection-status.tsx","./src/app/runs/[id]/page.tsx","./src/app/runs/[id]/run.tsx","./src/app/runs/[id]/task-status.tsx","./src/app/runs/new/new-run.tsx","./src/app/runs/new/page.tsx","./src/app/runs/new/settings-diff.tsx","./src/components/layout/header.tsx","./src/components/layout/logo.tsx","./src/components/providers/react-query-provider.tsx","./src/components/providers/theme-provider.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/badge.tsx","./src/components/ui/button.tsx","./src/components/ui/command.tsx","./src/components/ui/dialog.tsx","./src/components/ui/drawer.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/form.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/multi-select.tsx","./src/components/ui/popover.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/slider.tsx","./src/components/ui/sonner.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/tooltip.tsx"],"version":"5.8.3"} \ No newline at end of file diff --git a/packages/evals/.docker/scripts/postgres/create-databases.sh b/packages/evals/.docker/scripts/postgres/create-databases.sh new file mode 100755 index 0000000000..347f026f8a --- /dev/null +++ b/packages/evals/.docker/scripts/postgres/create-databases.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +set -e +set -u + +if [ -n "$POSTGRES_DATABASES" ]; then + for db in $(echo $POSTGRES_DATABASES | tr ',' ' '); do + echo "Creating $db..." + psql -U postgres -v ON_ERROR_STOP=1 -c "CREATE DATABASE $db;" + done +fi diff --git a/packages/evals/.env.development b/packages/evals/.env.development new file mode 100644 index 0000000000..7970806bec --- /dev/null +++ b/packages/evals/.env.development @@ -0,0 +1 @@ +DATABASE_URL=postgres://postgres:password@localhost:5432/evals_development diff --git a/packages/evals/.env.test b/packages/evals/.env.test new file mode 100644 index 0000000000..2ad09c3734 --- /dev/null +++ b/packages/evals/.env.test @@ -0,0 +1 @@ +DATABASE_URL=postgres://postgres:password@localhost:5432/evals_test diff --git a/packages/evals/.gitignore b/packages/evals/.gitignore new file mode 100644 index 0000000000..a8d28bb918 --- /dev/null +++ b/packages/evals/.gitignore @@ -0,0 +1,7 @@ +# .env +!.env.development +!.env.test + +# docker +.docker/* +!.docker/scripts diff --git a/packages/evals/docker-compose.yml b/packages/evals/docker-compose.yml new file mode 100644 index 0000000000..e84d1df986 --- /dev/null +++ b/packages/evals/docker-compose.yml @@ -0,0 +1,13 @@ +services: + postgres: + container_name: postgres-evals + image: postgres:15.4 + ports: + - 5432:5432 + volumes: + - ./.docker/postgres:/var/lib/postgresql/data + - ./.docker/scripts/postgres:/docker-entrypoint-initdb.d + environment: + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=password + - POSTGRES_DATABASES=evals_development,evals_test diff --git a/packages/evals/drizzle.config.ts b/packages/evals/drizzle.config.ts index 0ebce84cbd..87f4c58080 100644 --- a/packages/evals/drizzle.config.ts +++ b/packages/evals/drizzle.config.ts @@ -1,14 +1,10 @@ import { defineConfig } from "drizzle-kit" -const dialect = process.env.BENCHMARKS_DB_PATH ? "sqlite" : "turso" - -const dbCredentials = process.env.BENCHMARKS_DB_PATH - ? { url: process.env.BENCHMARKS_DB_PATH } - : { url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN! } - export default defineConfig({ - out: "./drizzle", + out: "./src/db/migrations", schema: "./src/db/schema.ts", - dialect, - dbCredentials, + dialect: "postgresql", + dbCredentials: { url: process.env.DATABASE_URL! }, + verbose: true, + strict: true, }) diff --git a/packages/evals/drizzle/0000_elite_raza.sql b/packages/evals/drizzle/0000_elite_raza.sql deleted file mode 100644 index 4af2be3564..0000000000 --- a/packages/evals/drizzle/0000_elite_raza.sql +++ /dev/null @@ -1,40 +0,0 @@ -CREATE TABLE `runs` ( - `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - `taskMetricsId` integer, - `model` text NOT NULL, - `description` text, - `pid` integer, - `socketPath` text NOT NULL, - `passed` integer DEFAULT 0 NOT NULL, - `failed` integer DEFAULT 0 NOT NULL, - `createdAt` integer NOT NULL, - FOREIGN KEY (`taskMetricsId`) REFERENCES `taskMetrics`(`id`) ON UPDATE no action ON DELETE no action -); ---> statement-breakpoint -CREATE TABLE `taskMetrics` ( - `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - `tokensIn` integer NOT NULL, - `tokensOut` integer NOT NULL, - `tokensContext` integer NOT NULL, - `cacheWrites` integer NOT NULL, - `cacheReads` integer NOT NULL, - `cost` real NOT NULL, - `duration` integer NOT NULL, - `createdAt` integer NOT NULL -); ---> statement-breakpoint -CREATE TABLE `tasks` ( - `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - `runId` integer NOT NULL, - `taskMetricsId` integer, - `language` text NOT NULL, - `exercise` text NOT NULL, - `passed` integer, - `startedAt` integer, - `finishedAt` integer, - `createdAt` integer NOT NULL, - FOREIGN KEY (`runId`) REFERENCES `runs`(`id`) ON UPDATE no action ON DELETE no action, - FOREIGN KEY (`taskMetricsId`) REFERENCES `taskMetrics`(`id`) ON UPDATE no action ON DELETE no action -); ---> statement-breakpoint -CREATE UNIQUE INDEX `tasks_language_exercise_idx` ON `tasks` (`runId`,`language`,`exercise`); \ No newline at end of file diff --git a/packages/evals/drizzle/0001_lush_reavers.sql b/packages/evals/drizzle/0001_lush_reavers.sql deleted file mode 100644 index 25eebac810..0000000000 --- a/packages/evals/drizzle/0001_lush_reavers.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `runs` ADD `settings` blob; \ No newline at end of file diff --git a/packages/evals/drizzle/0002_white_flatman.sql b/packages/evals/drizzle/0002_white_flatman.sql deleted file mode 100644 index 1914906ca2..0000000000 --- a/packages/evals/drizzle/0002_white_flatman.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `runs` ADD `concurrency` integer DEFAULT 2 NOT NULL; \ No newline at end of file diff --git a/packages/evals/drizzle/0003_sweet_chimera.sql b/packages/evals/drizzle/0003_sweet_chimera.sql deleted file mode 100644 index 7248ec01df..0000000000 --- a/packages/evals/drizzle/0003_sweet_chimera.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `taskMetrics` ADD `toolUsage` text; \ No newline at end of file diff --git a/packages/evals/drizzle/0004_absent_slapstick.sql b/packages/evals/drizzle/0004_absent_slapstick.sql deleted file mode 100644 index 49700388d7..0000000000 --- a/packages/evals/drizzle/0004_absent_slapstick.sql +++ /dev/null @@ -1,10 +0,0 @@ -CREATE TABLE `toolErrors` ( - `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - `runId` integer, - `taskId` integer, - `toolName` text NOT NULL, - `error` text NOT NULL, - `createdAt` integer NOT NULL, - FOREIGN KEY (`runId`) REFERENCES `runs`(`id`) ON UPDATE no action ON DELETE no action, - FOREIGN KEY (`taskId`) REFERENCES `tasks`(`id`) ON UPDATE no action ON DELETE no action -); diff --git a/packages/evals/drizzle/meta/0000_snapshot.json b/packages/evals/drizzle/meta/0000_snapshot.json deleted file mode 100644 index 1b8c44283a..0000000000 --- a/packages/evals/drizzle/meta/0000_snapshot.json +++ /dev/null @@ -1,274 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "c0fa8491-b5c0-493d-aa32-ddf280259c30", - "prevId": "00000000-0000-0000-0000-000000000000", - "tables": { - "runs": { - "name": "runs", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "pid": { - "name": "pid", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "socketPath": { - "name": "socketPath", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "failed": { - "name": "failed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "runs_taskMetricsId_taskMetrics_id_fk": { - "name": "runs_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "runs", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "taskMetrics": { - "name": "taskMetrics", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "tokensIn": { - "name": "tokensIn", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensOut": { - "name": "tokensOut", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensContext": { - "name": "tokensContext", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheWrites": { - "name": "cacheWrites", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheReads": { - "name": "cacheReads", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cost": { - "name": "cost", - "type": "real", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "tasks": { - "name": "tasks", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "runId": { - "name": "runId", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "language": { - "name": "language", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exercise": { - "name": "exercise", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "startedAt": { - "name": "startedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "finishedAt": { - "name": "finishedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "tasks_language_exercise_idx": { - "name": "tasks_language_exercise_idx", - "columns": ["runId", "language", "exercise"], - "isUnique": true - } - }, - "foreignKeys": { - "tasks_runId_runs_id_fk": { - "name": "tasks_runId_runs_id_fk", - "tableFrom": "tasks", - "tableTo": "runs", - "columnsFrom": ["runId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "tasks_taskMetricsId_taskMetrics_id_fk": { - "name": "tasks_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "tasks", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} diff --git a/packages/evals/drizzle/meta/0001_snapshot.json b/packages/evals/drizzle/meta/0001_snapshot.json deleted file mode 100644 index 0c087603da..0000000000 --- a/packages/evals/drizzle/meta/0001_snapshot.json +++ /dev/null @@ -1,281 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "8906647f-81d6-498a-897c-b1638c04c69a", - "prevId": "c0fa8491-b5c0-493d-aa32-ddf280259c30", - "tables": { - "runs": { - "name": "runs", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "settings": { - "name": "settings", - "type": "blob", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "pid": { - "name": "pid", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "socketPath": { - "name": "socketPath", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "failed": { - "name": "failed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "runs_taskMetricsId_taskMetrics_id_fk": { - "name": "runs_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "runs", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "taskMetrics": { - "name": "taskMetrics", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "tokensIn": { - "name": "tokensIn", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensOut": { - "name": "tokensOut", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensContext": { - "name": "tokensContext", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheWrites": { - "name": "cacheWrites", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheReads": { - "name": "cacheReads", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cost": { - "name": "cost", - "type": "real", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "tasks": { - "name": "tasks", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "runId": { - "name": "runId", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "language": { - "name": "language", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exercise": { - "name": "exercise", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "startedAt": { - "name": "startedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "finishedAt": { - "name": "finishedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "tasks_language_exercise_idx": { - "name": "tasks_language_exercise_idx", - "columns": ["runId", "language", "exercise"], - "isUnique": true - } - }, - "foreignKeys": { - "tasks_runId_runs_id_fk": { - "name": "tasks_runId_runs_id_fk", - "tableFrom": "tasks", - "tableTo": "runs", - "columnsFrom": ["runId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "tasks_taskMetricsId_taskMetrics_id_fk": { - "name": "tasks_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "tasks", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} diff --git a/packages/evals/drizzle/meta/0002_snapshot.json b/packages/evals/drizzle/meta/0002_snapshot.json deleted file mode 100644 index 3bf20c0827..0000000000 --- a/packages/evals/drizzle/meta/0002_snapshot.json +++ /dev/null @@ -1,289 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "f49d9b0b-fda9-467a-9adb-c941d6cbf7ce", - "prevId": "8906647f-81d6-498a-897c-b1638c04c69a", - "tables": { - "runs": { - "name": "runs", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "settings": { - "name": "settings", - "type": "blob", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "pid": { - "name": "pid", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "socketPath": { - "name": "socketPath", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "concurrency": { - "name": "concurrency", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 2 - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "failed": { - "name": "failed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "runs_taskMetricsId_taskMetrics_id_fk": { - "name": "runs_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "runs", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "taskMetrics": { - "name": "taskMetrics", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "tokensIn": { - "name": "tokensIn", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensOut": { - "name": "tokensOut", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensContext": { - "name": "tokensContext", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheWrites": { - "name": "cacheWrites", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheReads": { - "name": "cacheReads", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cost": { - "name": "cost", - "type": "real", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "tasks": { - "name": "tasks", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "runId": { - "name": "runId", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "language": { - "name": "language", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exercise": { - "name": "exercise", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "startedAt": { - "name": "startedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "finishedAt": { - "name": "finishedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "tasks_language_exercise_idx": { - "name": "tasks_language_exercise_idx", - "columns": ["runId", "language", "exercise"], - "isUnique": true - } - }, - "foreignKeys": { - "tasks_runId_runs_id_fk": { - "name": "tasks_runId_runs_id_fk", - "tableFrom": "tasks", - "tableTo": "runs", - "columnsFrom": ["runId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "tasks_taskMetricsId_taskMetrics_id_fk": { - "name": "tasks_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "tasks", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} diff --git a/packages/evals/drizzle/meta/0003_snapshot.json b/packages/evals/drizzle/meta/0003_snapshot.json deleted file mode 100644 index 0b7fa5b94d..0000000000 --- a/packages/evals/drizzle/meta/0003_snapshot.json +++ /dev/null @@ -1,296 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "61d48d20-f662-445d-9962-cf9cb165cbe7", - "prevId": "f49d9b0b-fda9-467a-9adb-c941d6cbf7ce", - "tables": { - "runs": { - "name": "runs", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "settings": { - "name": "settings", - "type": "blob", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "pid": { - "name": "pid", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "socketPath": { - "name": "socketPath", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "concurrency": { - "name": "concurrency", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 2 - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "failed": { - "name": "failed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "runs_taskMetricsId_taskMetrics_id_fk": { - "name": "runs_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "runs", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "taskMetrics": { - "name": "taskMetrics", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "tokensIn": { - "name": "tokensIn", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensOut": { - "name": "tokensOut", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensContext": { - "name": "tokensContext", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheWrites": { - "name": "cacheWrites", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheReads": { - "name": "cacheReads", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cost": { - "name": "cost", - "type": "real", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "toolUsage": { - "name": "toolUsage", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "tasks": { - "name": "tasks", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "runId": { - "name": "runId", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "language": { - "name": "language", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exercise": { - "name": "exercise", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "startedAt": { - "name": "startedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "finishedAt": { - "name": "finishedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "tasks_language_exercise_idx": { - "name": "tasks_language_exercise_idx", - "columns": ["runId", "language", "exercise"], - "isUnique": true - } - }, - "foreignKeys": { - "tasks_runId_runs_id_fk": { - "name": "tasks_runId_runs_id_fk", - "tableFrom": "tasks", - "tableTo": "runs", - "columnsFrom": ["runId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "tasks_taskMetricsId_taskMetrics_id_fk": { - "name": "tasks_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "tasks", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} diff --git a/packages/evals/drizzle/meta/0004_snapshot.json b/packages/evals/drizzle/meta/0004_snapshot.json deleted file mode 100644 index 6987eba2e4..0000000000 --- a/packages/evals/drizzle/meta/0004_snapshot.json +++ /dev/null @@ -1,367 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "ae766c54-aff4-4ce6-b492-24813790c279", - "prevId": "61d48d20-f662-445d-9962-cf9cb165cbe7", - "tables": { - "runs": { - "name": "runs", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "settings": { - "name": "settings", - "type": "blob", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "pid": { - "name": "pid", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "socketPath": { - "name": "socketPath", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "concurrency": { - "name": "concurrency", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 2 - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "failed": { - "name": "failed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "runs_taskMetricsId_taskMetrics_id_fk": { - "name": "runs_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "runs", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "taskMetrics": { - "name": "taskMetrics", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "tokensIn": { - "name": "tokensIn", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensOut": { - "name": "tokensOut", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "tokensContext": { - "name": "tokensContext", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheWrites": { - "name": "cacheWrites", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cacheReads": { - "name": "cacheReads", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "cost": { - "name": "cost", - "type": "real", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "toolUsage": { - "name": "toolUsage", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "tasks": { - "name": "tasks", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "runId": { - "name": "runId", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "taskMetricsId": { - "name": "taskMetricsId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "language": { - "name": "language", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exercise": { - "name": "exercise", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "passed": { - "name": "passed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "startedAt": { - "name": "startedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "finishedAt": { - "name": "finishedAt", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "tasks_language_exercise_idx": { - "name": "tasks_language_exercise_idx", - "columns": ["runId", "language", "exercise"], - "isUnique": true - } - }, - "foreignKeys": { - "tasks_runId_runs_id_fk": { - "name": "tasks_runId_runs_id_fk", - "tableFrom": "tasks", - "tableTo": "runs", - "columnsFrom": ["runId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "tasks_taskMetricsId_taskMetrics_id_fk": { - "name": "tasks_taskMetricsId_taskMetrics_id_fk", - "tableFrom": "tasks", - "tableTo": "taskMetrics", - "columnsFrom": ["taskMetricsId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "toolErrors": { - "name": "toolErrors", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "runId": { - "name": "runId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "taskId": { - "name": "taskId", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "toolName": { - "name": "toolName", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "error": { - "name": "error", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "createdAt": { - "name": "createdAt", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "toolErrors_runId_runs_id_fk": { - "name": "toolErrors_runId_runs_id_fk", - "tableFrom": "toolErrors", - "tableTo": "runs", - "columnsFrom": ["runId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "toolErrors_taskId_tasks_id_fk": { - "name": "toolErrors_taskId_tasks_id_fk", - "tableFrom": "toolErrors", - "tableTo": "tasks", - "columnsFrom": ["taskId"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} diff --git a/packages/evals/drizzle/meta/_journal.json b/packages/evals/drizzle/meta/_journal.json deleted file mode 100644 index fba0e94f14..0000000000 --- a/packages/evals/drizzle/meta/_journal.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "version": "7", - "dialect": "sqlite", - "entries": [ - { - "idx": 0, - "version": "6", - "when": 1742599919625, - "tag": "0000_elite_raza", - "breakpoints": true - }, - { - "idx": 1, - "version": "6", - "when": 1743089501047, - "tag": "0001_lush_reavers", - "breakpoints": true - }, - { - "idx": 2, - "version": "6", - "when": 1743698195142, - "tag": "0002_white_flatman", - "breakpoints": true - }, - { - "idx": 3, - "version": "6", - "when": 1744950664129, - "tag": "0003_sweet_chimera", - "breakpoints": true - }, - { - "idx": 4, - "version": "6", - "when": 1745256393286, - "tag": "0004_absent_slapstick", - "breakpoints": true - } - ] -} diff --git a/packages/evals/package.json b/packages/evals/package.json index a867a80b48..2abb8c094a 100644 --- a/packages/evals/package.json +++ b/packages/evals/package.json @@ -7,27 +7,30 @@ "scripts": { "lint": "eslint src --ext=ts --max-warnings=0", "check-types": "tsc --noEmit", - "test": "vitest run", + "test": "dotenvx run -f .env.test -- vitest run", "clean": "rimraf dist .turbo", - "drizzle-kit": "dotenvx run -f .env -- tsx node_modules/drizzle-kit/bin.cjs", + "drizzle-kit": "dotenvx run -f .env.development -- tsx node_modules/drizzle-kit/bin.cjs", + "drizzle-kit:test": "dotenvx run -f .env.test -- tsx node_modules/drizzle-kit/bin.cjs", + "db:start": "docker compose up -d", + "db:stop": "docker compose down", "db:generate": "pnpm drizzle-kit generate", "db:migrate": "pnpm drizzle-kit migrate", "db:push": "pnpm drizzle-kit push", - "db:pull": "pnpm drizzle-kit pull", "db:check": "pnpm drizzle-kit check", - "db:up": "pnpm drizzle-kit up", - "db:studio": "pnpm drizzle-kit studio" + "db:test:push": "pnpm drizzle-kit:test push", + "db:test:check": "pnpm drizzle-kit:test check" }, "dependencies": { - "@libsql/client": "^0.15.8", "@roo-code/ipc": "workspace:^", "@roo-code/types": "workspace:^", + "better-sqlite3": "^11.10.0", "drizzle-orm": "^0.44.1", "execa": "^9.5.2", "gluegun": "^5.2.0", "node-ipc": "^12.0.0", "p-map": "^7.0.3", "p-wait-for": "^5.0.2", + "postgres": "^3.4.7", "ps-tree": "^1.2.0", "zod": "^3.24.2" }, @@ -39,6 +42,6 @@ "@types/ps-tree": "^1.1.6", "drizzle-kit": "^0.31.1", "tsx": "^4.19.3", - "vitest": "^3.1.3" + "vitest": "^3.2.0" } } diff --git a/packages/evals/src/db/db.ts b/packages/evals/src/db/db.ts index 8ddf06355c..2db84b21b4 100644 --- a/packages/evals/src/db/db.ts +++ b/packages/evals/src/db/db.ts @@ -1,13 +1,26 @@ -import { drizzle } from "drizzle-orm/libsql" +import { drizzle } from "drizzle-orm/postgres-js" +import postgres from "postgres" -import { schema } from "./schema.js" +import * as schema from "./schema.js" -if ((!process.env.TURSO_CONNECTION_URL || !process.env.TURSO_AUTH_TOKEN) && !process.env.BENCHMARKS_DB_PATH) { - throw new Error("TURSO_CONNECTION_URL and TURSO_AUTH_TOKEN or BENCHMARKS_DB_PATH must be set") +const pgClient = postgres(process.env.DATABASE_URL!, { prepare: false }) + +const client = drizzle({ client: pgClient, schema }) + +let testDb: typeof client | undefined = undefined + +if (process.env.NODE_ENV === "test") { + if (!process.env.DATABASE_URL!.includes("test") || !process.env.DATABASE_URL!.includes("localhost")) { + throw new Error("DATABASE_URL is not a test database") + } + + testDb = client +} + +const disconnect = async () => { + await pgClient.end() } -const connection = process.env.BENCHMARKS_DB_PATH - ? { url: process.env.BENCHMARKS_DB_PATH, concurrency: 50 } - : { url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN! } +type DatabaseOrTransaction = typeof client | Parameters[0]>[0] -export const db = drizzle({ schema, connection }) +export { client, testDb, disconnect, type DatabaseOrTransaction } diff --git a/packages/evals/src/db/migrations/0000_old_gorilla_man.sql b/packages/evals/src/db/migrations/0000_old_gorilla_man.sql new file mode 100644 index 0000000000..50b932f7ef --- /dev/null +++ b/packages/evals/src/db/migrations/0000_old_gorilla_man.sql @@ -0,0 +1,54 @@ +CREATE TABLE "runs" ( + "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "runs_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), + "task_metrics_id" integer, + "model" text NOT NULL, + "description" text, + "settings" jsonb, + "pid" integer, + "socket_path" text NOT NULL, + "concurrency" integer DEFAULT 2 NOT NULL, + "passed" integer DEFAULT 0 NOT NULL, + "failed" integer DEFAULT 0 NOT NULL, + "created_at" timestamp NOT NULL +); +--> statement-breakpoint +CREATE TABLE "taskMetrics" ( + "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "taskMetrics_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), + "tokens_in" integer NOT NULL, + "tokens_out" integer NOT NULL, + "tokens_context" integer NOT NULL, + "cache_writes" integer NOT NULL, + "cache_reads" integer NOT NULL, + "cost" real NOT NULL, + "duration" integer NOT NULL, + "tool_usage" jsonb, + "created_at" timestamp NOT NULL +); +--> statement-breakpoint +CREATE TABLE "tasks" ( + "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "tasks_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), + "run_id" integer NOT NULL, + "task_metrics_id" integer, + "language" text NOT NULL, + "exercise" text NOT NULL, + "passed" boolean, + "started_at" timestamp, + "finished_at" timestamp, + "created_at" timestamp NOT NULL +); +--> statement-breakpoint +CREATE TABLE "toolErrors" ( + "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "toolErrors_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), + "run_id" integer, + "task_id" integer, + "tool_name" text NOT NULL, + "error" text NOT NULL, + "created_at" timestamp NOT NULL +); +--> statement-breakpoint +ALTER TABLE "runs" ADD CONSTRAINT "runs_task_metrics_id_taskMetrics_id_fk" FOREIGN KEY ("task_metrics_id") REFERENCES "public"."taskMetrics"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "tasks" ADD CONSTRAINT "tasks_run_id_runs_id_fk" FOREIGN KEY ("run_id") REFERENCES "public"."runs"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "tasks" ADD CONSTRAINT "tasks_task_metrics_id_taskMetrics_id_fk" FOREIGN KEY ("task_metrics_id") REFERENCES "public"."taskMetrics"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "toolErrors" ADD CONSTRAINT "toolErrors_run_id_runs_id_fk" FOREIGN KEY ("run_id") REFERENCES "public"."runs"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "toolErrors" ADD CONSTRAINT "toolErrors_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint +CREATE UNIQUE INDEX "tasks_language_exercise_idx" ON "tasks" USING btree ("run_id","language","exercise"); \ No newline at end of file diff --git a/packages/evals/src/db/migrations/meta/0000_snapshot.json b/packages/evals/src/db/migrations/meta/0000_snapshot.json new file mode 100644 index 0000000000..cdacd985d4 --- /dev/null +++ b/packages/evals/src/db/migrations/meta/0000_snapshot.json @@ -0,0 +1,410 @@ +{ + "id": "caee25bc-e9ae-4d17-8448-11b879c8b66d", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.runs": { + "name": "runs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "identity": { + "type": "always", + "name": "runs_id_seq", + "schema": "public", + "increment": "1", + "startWith": "1", + "minValue": "1", + "maxValue": "2147483647", + "cache": "1", + "cycle": false + } + }, + "task_metrics_id": { + "name": "task_metrics_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "settings": { + "name": "settings", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "pid": { + "name": "pid", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "socket_path": { + "name": "socket_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "concurrency": { + "name": "concurrency", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 2 + }, + "passed": { + "name": "passed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "failed": { + "name": "failed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "runs_task_metrics_id_taskMetrics_id_fk": { + "name": "runs_task_metrics_id_taskMetrics_id_fk", + "tableFrom": "runs", + "tableTo": "taskMetrics", + "columnsFrom": ["task_metrics_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.taskMetrics": { + "name": "taskMetrics", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "identity": { + "type": "always", + "name": "taskMetrics_id_seq", + "schema": "public", + "increment": "1", + "startWith": "1", + "minValue": "1", + "maxValue": "2147483647", + "cache": "1", + "cycle": false + } + }, + "tokens_in": { + "name": "tokens_in", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "tokens_out": { + "name": "tokens_out", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "tokens_context": { + "name": "tokens_context", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "cache_writes": { + "name": "cache_writes", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "cache_reads": { + "name": "cache_reads", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "cost": { + "name": "cost", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "duration": { + "name": "duration", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "tool_usage": { + "name": "tool_usage", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.tasks": { + "name": "tasks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "identity": { + "type": "always", + "name": "tasks_id_seq", + "schema": "public", + "increment": "1", + "startWith": "1", + "minValue": "1", + "maxValue": "2147483647", + "cache": "1", + "cycle": false + } + }, + "run_id": { + "name": "run_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "task_metrics_id": { + "name": "task_metrics_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "language": { + "name": "language", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "exercise": { + "name": "exercise", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "passed": { + "name": "passed", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "started_at": { + "name": "started_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "finished_at": { + "name": "finished_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "tasks_language_exercise_idx": { + "name": "tasks_language_exercise_idx", + "columns": [ + { + "expression": "run_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "language", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "exercise", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "tasks_run_id_runs_id_fk": { + "name": "tasks_run_id_runs_id_fk", + "tableFrom": "tasks", + "tableTo": "runs", + "columnsFrom": ["run_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + }, + "tasks_task_metrics_id_taskMetrics_id_fk": { + "name": "tasks_task_metrics_id_taskMetrics_id_fk", + "tableFrom": "tasks", + "tableTo": "taskMetrics", + "columnsFrom": ["task_metrics_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.toolErrors": { + "name": "toolErrors", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "identity": { + "type": "always", + "name": "toolErrors_id_seq", + "schema": "public", + "increment": "1", + "startWith": "1", + "minValue": "1", + "maxValue": "2147483647", + "cache": "1", + "cycle": false + } + }, + "run_id": { + "name": "run_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "task_id": { + "name": "task_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "tool_name": { + "name": "tool_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "error": { + "name": "error", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "toolErrors_run_id_runs_id_fk": { + "name": "toolErrors_run_id_runs_id_fk", + "tableFrom": "toolErrors", + "tableTo": "runs", + "columnsFrom": ["run_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + }, + "toolErrors_task_id_tasks_id_fk": { + "name": "toolErrors_task_id_tasks_id_fk", + "tableFrom": "toolErrors", + "tableTo": "tasks", + "columnsFrom": ["task_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} diff --git a/packages/evals/src/db/migrations/meta/_journal.json b/packages/evals/src/db/migrations/meta/_journal.json new file mode 100644 index 0000000000..35df0008e3 --- /dev/null +++ b/packages/evals/src/db/migrations/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1748933185613, + "tag": "0000_old_gorilla_man", + "breakpoints": true + } + ] +} diff --git a/packages/evals/src/db/queries/runs.ts b/packages/evals/src/db/queries/runs.ts index 90e17fff6b..a294054cc6 100644 --- a/packages/evals/src/db/queries/runs.ts +++ b/packages/evals/src/db/queries/runs.ts @@ -5,7 +5,7 @@ import type { ToolUsage } from "@roo-code/types" import { RecordNotFoundError, RecordNotCreatedError } from "./errors.js" import type { InsertRun, UpdateRun } from "../schema.js" import { schema } from "../schema.js" -import { db } from "../db.js" +import { client as db } from "../db.js" import { createTaskMetrics } from "./taskMetrics.js" import { getTasks } from "./tasks.js" @@ -61,8 +61,8 @@ export const finishRun = async (runId: number) => { cacheReads: sum(schema.taskMetrics.cacheReads).mapWith(Number), cost: sum(schema.taskMetrics.cost).mapWith(Number), duration: sum(schema.taskMetrics.duration).mapWith(Number), - passed: sql`sum(${schema.tasks.passed} = 1)`, - failed: sql`sum(${schema.tasks.passed} = 0)`, + passed: sql`sum(CASE WHEN ${schema.tasks.passed} THEN 1 ELSE 0 END)`, + failed: sql`sum(CASE WHEN ${schema.tasks.passed} THEN 0 ELSE 1 END)`, }) .from(schema.taskMetrics) .innerJoin(schema.tasks, eq(schema.taskMetrics.id, schema.tasks.taskMetricsId)) diff --git a/packages/evals/src/db/queries/taskMetrics.ts b/packages/evals/src/db/queries/taskMetrics.ts index cec90218f2..3ddf353edd 100644 --- a/packages/evals/src/db/queries/taskMetrics.ts +++ b/packages/evals/src/db/queries/taskMetrics.ts @@ -3,7 +3,7 @@ import { eq } from "drizzle-orm" import { RecordNotFoundError, RecordNotCreatedError } from "./errors.js" import type { InsertTaskMetrics, UpdateTaskMetrics } from "../schema.js" import { taskMetrics } from "../schema.js" -import { db } from "../db.js" +import { client as db } from "../db.js" export const findTaskMetrics = async (id: number) => { const run = await db.query.taskMetrics.findFirst({ where: eq(taskMetrics.id, id) }) diff --git a/packages/evals/src/db/queries/tasks.ts b/packages/evals/src/db/queries/tasks.ts index 5de646f178..9090f1f34b 100644 --- a/packages/evals/src/db/queries/tasks.ts +++ b/packages/evals/src/db/queries/tasks.ts @@ -5,7 +5,7 @@ import type { ExerciseLanguage } from "../../exercises/index.js" import { RecordNotFoundError, RecordNotCreatedError } from "./errors.js" import type { InsertTask, UpdateTask } from "../schema.js" import { tasks } from "../schema.js" -import { db } from "../db.js" +import { client as db } from "../db.js" export const findTask = async (id: number) => { const run = await db.query.tasks.findFirst({ where: eq(tasks.id, id) }) diff --git a/packages/evals/src/db/queries/toolErrors.ts b/packages/evals/src/db/queries/toolErrors.ts index b07f9f53a6..213dc38592 100644 --- a/packages/evals/src/db/queries/toolErrors.ts +++ b/packages/evals/src/db/queries/toolErrors.ts @@ -1,7 +1,7 @@ import { RecordNotCreatedError } from "./errors.js" import type { InsertToolError } from "../schema.js" import { toolErrors } from "../schema.js" -import { db } from "../db.js" +import { client as db } from "../db.js" export const createToolError = async (args: InsertToolError) => { const records = await db diff --git a/packages/evals/src/db/schema.ts b/packages/evals/src/db/schema.ts index 8205fc166a..487b5def14 100644 --- a/packages/evals/src/db/schema.ts +++ b/packages/evals/src/db/schema.ts @@ -1,7 +1,7 @@ -import { sqliteTable, text, real, integer, blob, uniqueIndex } from "drizzle-orm/sqlite-core" +import { pgTable, text, timestamp, integer, real, boolean, jsonb, uniqueIndex } from "drizzle-orm/pg-core" import { relations } from "drizzle-orm" -import { type RooCodeSettings, type ToolUsage, toolNames } from "@roo-code/types" +import { type RooCodeSettings, ToolName, type ToolUsage, toolNames } from "@roo-code/types" import { type ExerciseLanguage, exerciseLanguages } from "../exercises/index.js" @@ -9,18 +9,18 @@ import { type ExerciseLanguage, exerciseLanguages } from "../exercises/index.js" * runs */ -export const runs = sqliteTable("runs", { - id: integer({ mode: "number" }).primaryKey({ autoIncrement: true }), - taskMetricsId: integer({ mode: "number" }).references(() => taskMetrics.id), +export const runs = pgTable("runs", { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + taskMetricsId: integer("task_metrics_id").references(() => taskMetrics.id), model: text().notNull(), description: text(), - settings: blob({ mode: "json" }).$type(), - pid: integer({ mode: "number" }), - socketPath: text().notNull(), - concurrency: integer({ mode: "number" }).default(2).notNull(), - passed: integer({ mode: "number" }).default(0).notNull(), - failed: integer({ mode: "number" }).default(0).notNull(), - createdAt: integer({ mode: "timestamp" }).notNull(), + settings: jsonb().$type(), + pid: integer(), + socketPath: text("socket_path").notNull(), + concurrency: integer().default(2).notNull(), + passed: integer().default(0).notNull(), + failed: integer().default(0).notNull(), + createdAt: timestamp("created_at").notNull(), }) export const runsRelations = relations(runs, ({ one }) => ({ @@ -37,20 +37,20 @@ export type UpdateRun = Partial> * tasks */ -export const tasks = sqliteTable( +export const tasks = pgTable( "tasks", { - id: integer({ mode: "number" }).primaryKey({ autoIncrement: true }), - runId: integer({ mode: "number" }) + id: integer().primaryKey().generatedAlwaysAsIdentity(), + runId: integer("run_id") .references(() => runs.id) .notNull(), - taskMetricsId: integer({ mode: "number" }).references(() => taskMetrics.id), + taskMetricsId: integer("task_metrics_id").references(() => taskMetrics.id), language: text({ enum: exerciseLanguages }).notNull().$type(), exercise: text().notNull(), - passed: integer({ mode: "boolean" }), - startedAt: integer({ mode: "timestamp" }), - finishedAt: integer({ mode: "timestamp" }), - createdAt: integer({ mode: "timestamp" }).notNull(), + passed: boolean(), + startedAt: timestamp("started_at"), + finishedAt: timestamp("finished_at"), + createdAt: timestamp("created_at").notNull(), }, (table) => [uniqueIndex("tasks_language_exercise_idx").on(table.runId, table.language, table.exercise)], ) @@ -70,17 +70,17 @@ export type UpdateTask = Partial> * taskMetrics */ -export const taskMetrics = sqliteTable("taskMetrics", { - id: integer({ mode: "number" }).primaryKey({ autoIncrement: true }), - tokensIn: integer({ mode: "number" }).notNull(), - tokensOut: integer({ mode: "number" }).notNull(), - tokensContext: integer({ mode: "number" }).notNull(), - cacheWrites: integer({ mode: "number" }).notNull(), - cacheReads: integer({ mode: "number" }).notNull(), +export const taskMetrics = pgTable("taskMetrics", { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + tokensIn: integer("tokens_in").notNull(), + tokensOut: integer("tokens_out").notNull(), + tokensContext: integer("tokens_context").notNull(), + cacheWrites: integer("cache_writes").notNull(), + cacheReads: integer("cache_reads").notNull(), cost: real().notNull(), - duration: integer({ mode: "number" }).notNull(), - toolUsage: text({ mode: "json" }).$type(), - createdAt: integer({ mode: "timestamp" }).notNull(), + duration: integer().notNull(), + toolUsage: jsonb("tool_usage").$type(), + createdAt: timestamp("created_at").notNull(), }) export type TaskMetrics = typeof taskMetrics.$inferSelect @@ -93,13 +93,13 @@ export type UpdateTaskMetrics = Partial> * toolErrors */ -export const toolErrors = sqliteTable("toolErrors", { - id: integer({ mode: "number" }).primaryKey({ autoIncrement: true }), - runId: integer({ mode: "number" }).references(() => runs.id), - taskId: integer({ mode: "number" }).references(() => tasks.id), - toolName: text({ enum: toolNames }).notNull(), +export const toolErrors = pgTable("toolErrors", { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + runId: integer("run_id").references(() => runs.id), + taskId: integer("task_id").references(() => tasks.id), + toolName: text("tool_name", { enum: toolNames }).notNull().$type(), error: text().notNull(), - createdAt: integer({ mode: "timestamp" }).notNull(), + createdAt: timestamp("created_at").notNull(), }) export const toolErrorsRelations = relations(toolErrors, ({ one }) => ({ diff --git a/packages/evals/test.db b/packages/evals/test.db deleted file mode 100644 index 3bb6a25cfa3d77f5b693a2b04142a530c9da5d30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28672 zcmeI4Pi)&%9LN3aw5dZow}L9{P~@f{8ZGOe4LEFq5?XhPNYgHB1U<#B^O9Ok?96sh zyQ+s$jcFIS0^)!K7lZ`Iap8`{4u}Jskk%UqPF&!~d->DESpsxSsDWF?{v1Fe(rtysD~#APlo3%#KzYU?-v01^Xl&=lxEHg_*bR zj}q zuYDF?%xcMXOl&*Hg`qK ztgD$-cI49O1e@X3>{NRa@9_<9ySs~dk})b&SADwU2j)}mV2^&&rG`%nNx$t-huP)T ztd_c#srxqF^dYWhwPh`wM?%oPmbN~kta<=JyNA=cpeSrAX|?c%pRVZMa#Cltw2)o?$eTLZ6*(A zTyyM%86AngeM<^Qr>4m5tH-f!s_KYB=;64x>^)-ieP^56Udrydd0ExrqpP*vd%HQj z=&(Ap(?`TK%q{wc%f2Xiy-m~wveYQ_8+SaWn$?(cATu9Fuz zeu#nDjoSC9k?XrTD^7uydu+b~^-R~QHn8!KaV{S9eakK}`kQ5EllN3vDQ^AWQkQVd zZR)QX{#Fm2rem8m*JYq~k0-Huy`0RY*VRjbkag|;W2w1-RMD`?9W|nl)JZBq$Nphe z?D6eb{@t7?-wW&?8VG;@2!H?xfB*=900@8p2!H?xfWVm{kRZbXd5*dJJRw6NsZ{kZ zzA!U?vBK^~&ia+=tm`;49=jVNid(O|=Zq*n36gSOP<~VHE5DqXMZ!@K009sH0T2KI z5C8!X009sH0TB4#5>P~GigdgvATbh(%sV`GHY&@K6s?bYVwgzdGJltYKmV7`eIzJ% zl_%K;8VG;@2!H?xfB*=900@8p2!H?x{Obg2(y$U}OKeKu%C|I{zV~_3I zizV-T9R7~HTV43<1KvIqzWnB&n+^EaTrB_oFDhRP$^-TT4Fo^{1V8`;KmY_l00ck) z1V8`;K;ZNdm=q&|OvWbUP$(ppoRTx^n7&cwH!)hrGlYrAW9PX@UBWYVTVwn)!d4|J zM}l&s{CfHp2#-Jj1V8`;KmY_l00ck)1V8`;KmY{(7J<(sql` + SELECT table_name + FROM information_schema.tables + WHERE table_schema = 'public' + AND table_type = 'BASE TABLE'; + `) + + const tableNames = tables.map((t) => t.table_name) + + for (const tableName of tableNames) { + await db.execute(sql`TRUNCATE TABLE "${sql.raw(tableName)}" CASCADE;`) + } + + console.log(`[${process.env.DATABASE_URL}] TRUNCATE ${tableNames.join(", ")}`) + } catch (error) { + console.error("Error resetting database:", error) + throw error + } +} + +export default async function () { + await resetTestDatabase() + + return async () => { + await disconnect() + } +} diff --git a/packages/evals/vitest.config.ts b/packages/evals/vitest.config.ts index cda7c6337d..c42fa18c10 100644 --- a/packages/evals/vitest.config.ts +++ b/packages/evals/vitest.config.ts @@ -4,6 +4,6 @@ export default defineConfig({ test: { globals: true, environment: "node", - globalSetup: ["./vitest.setup.ts"], + globalSetup: "./vitest-global-setup.ts", }, }) diff --git a/packages/evals/vitest.setup.ts b/packages/evals/vitest.setup.ts deleted file mode 100644 index c296ef6cf1..0000000000 --- a/packages/evals/vitest.setup.ts +++ /dev/null @@ -1,20 +0,0 @@ -import fs from "node:fs/promises" -import path from "node:path" - -import { execa } from "execa" - -const TEST_DB_PATH = path.join(process.cwd(), "test.db") - -export default async function () { - const exists = await fs.stat(TEST_DB_PATH).catch(() => false) - - if (exists) { - await fs.unlink(TEST_DB_PATH) - } - - await execa({ - env: { BENCHMARKS_DB_PATH: `file:${TEST_DB_PATH}` }, - })`pnpm db:push` - - process.env.BENCHMARKS_DB_PATH = `file:${TEST_DB_PATH}` -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ce0eb6722..27976c1661 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -168,8 +168,8 @@ importers: specifier: ^0.511.0 version: 0.511.0(react@18.3.1) next: - specifier: 15.3.3 - version: 15.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^15.2.5 + version: 15.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -316,18 +316,18 @@ importers: packages/evals: dependencies: - '@libsql/client': - specifier: ^0.15.8 - version: 0.15.8 '@roo-code/ipc': specifier: workspace:^ version: link:../ipc '@roo-code/types': specifier: workspace:^ version: link:../types + better-sqlite3: + specifier: ^11.10.0 + version: 11.10.0 drizzle-orm: specifier: ^0.44.1 - version: 0.44.1(@libsql/client@0.15.8) + version: 0.44.1(@libsql/client@0.15.8)(better-sqlite3@11.10.0)(postgres@3.4.7) execa: specifier: ^9.5.2 version: 9.5.3 @@ -343,6 +343,9 @@ importers: p-wait-for: specifier: ^5.0.2 version: 5.0.2 + postgres: + specifier: ^3.4.7 + version: 3.4.7 ps-tree: specifier: ^1.2.0 version: 1.2.0 @@ -372,8 +375,8 @@ importers: specifier: ^4.19.3 version: 4.19.4 vitest: - specifier: ^3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) + specifier: ^3.2.0 + version: 3.2.0(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) packages/ipc: dependencies: @@ -2052,118 +2055,107 @@ packages: '@iconify/utils@2.3.0': resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} - '@img/sharp-darwin-arm64@0.34.2': - resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==} + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.2': - resolution: {integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==} + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.1.0': - resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.1.0': - resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.1.0': - resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.1.0': - resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.1.0': - resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} - cpu: [ppc64] - os: [linux] - - '@img/sharp-libvips-linux-s390x@1.1.0': - resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.1.0': - resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': - resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.1.0': - resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.2': - resolution: {integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==} + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.2': - resolution: {integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==} + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.34.2': - resolution: {integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==} + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.2': - resolution: {integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==} + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.2': - resolution: {integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==} + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.2': - resolution: {integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==} + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.2': - resolution: {integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==} + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.2': - resolution: {integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [win32] - - '@img/sharp-win32-ia32@0.34.2': - resolution: {integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==} + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.2': - resolution: {integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==} + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -2396,56 +2388,56 @@ packages: '@neon-rs/load@0.0.4': resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} - '@next/env@15.3.3': - resolution: {integrity: sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==} + '@next/env@15.2.5': + resolution: {integrity: sha512-uWkCf9C8wKTyQjqrNk+BA7eL3LOQdhL+xlmJUf2O85RM4lbzwBwot3Sqv2QGe/RGnc3zysIf1oJdtq9S00pkmQ==} '@next/eslint-plugin-next@15.3.2': resolution: {integrity: sha512-ijVRTXBgnHT33aWnDtmlG+LJD+5vhc9AKTJPquGG5NKXjpKNjc62woIhFtrAcWdBobt8kqjCoaJ0q6sDQoX7aQ==} - '@next/swc-darwin-arm64@15.3.3': - resolution: {integrity: sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==} + '@next/swc-darwin-arm64@15.2.5': + resolution: {integrity: sha512-4OimvVlFTbgzPdA0kh8A1ih6FN9pQkL4nPXGqemEYgk+e7eQhsst/p35siNNqA49eQA6bvKZ1ASsDtu9gtXuog==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.3.3': - resolution: {integrity: sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==} + '@next/swc-darwin-x64@15.2.5': + resolution: {integrity: sha512-ohzRaE9YbGt1ctE0um+UGYIDkkOxHV44kEcHzLqQigoRLaiMtZzGrA11AJh2Lu0lv51XeiY1ZkUvkThjkVNBMA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.3.3': - resolution: {integrity: sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==} + '@next/swc-linux-arm64-gnu@15.2.5': + resolution: {integrity: sha512-FMSdxSUt5bVXqqOoZCc/Seg4LQep9w/fXTazr/EkpXW2Eu4IFI9FD7zBDlID8TJIybmvKk7mhd9s+2XWxz4flA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.3.3': - resolution: {integrity: sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==} + '@next/swc-linux-arm64-musl@15.2.5': + resolution: {integrity: sha512-4ZNKmuEiW5hRKkGp2HWwZ+JrvK4DQLgf8YDaqtZyn7NYdl0cHfatvlnLFSWUayx9yFAUagIgRGRk8pFxS8Qniw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.3.3': - resolution: {integrity: sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==} + '@next/swc-linux-x64-gnu@15.2.5': + resolution: {integrity: sha512-bE6lHQ9GXIf3gCDE53u2pTl99RPZW5V1GLHSRMJ5l/oB/MT+cohu9uwnCK7QUph2xIOu2a6+27kL0REa/kqwZw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.3.3': - resolution: {integrity: sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==} + '@next/swc-linux-x64-musl@15.2.5': + resolution: {integrity: sha512-y7EeQuSkQbTAkCEQnJXm1asRUuGSWAchGJ3c+Qtxh8LVjXleZast8Mn/rL7tZOm7o35QeIpIcid6ufG7EVTTcA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.3.3': - resolution: {integrity: sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==} + '@next/swc-win32-arm64-msvc@15.2.5': + resolution: {integrity: sha512-gQMz0yA8/dskZM2Xyiq2FRShxSrsJNha40Ob/M2n2+JGRrZ0JwTVjLdvtN6vCxuq4ByhOd4a9qEf60hApNR2gQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.3.3': - resolution: {integrity: sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==} + '@next/swc-win32-x64-msvc@15.2.5': + resolution: {integrity: sha512-tBDNVUcI7U03+3oMvJ11zrtVin5p0NctiuKmTGyaTIEAVj9Q77xukLXGXRnWxKRIIdFG4OTA2rUVGZDYOwgmAA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3875,6 +3867,9 @@ packages: '@types/babel__traverse@7.20.7': resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/clone-deep@4.0.4': resolution: {integrity: sha512-vXh6JuuaAha6sqEbJueYdh5zNBPPgG1OYumuz2UvLvriN6ABHDSW8ludREGWJb1MLIzbwZn4q4zUbUCerJTJfA==} @@ -3974,6 +3969,9 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/diff-match-patch@1.0.36': resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} @@ -4071,6 +4069,9 @@ packages: '@types/node@22.15.20': resolution: {integrity: sha512-A6BohGFRGHAscJsTslDCA9JG7qSJr/DWUvrvY8yi9IgnGtMxCyat7vvQ//MFa0DnLsyuS3wYTpLdw4Hf+Q5JXw==} + '@types/node@22.15.29': + resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==} + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -4208,6 +4209,9 @@ packages: '@vitest/expect@3.1.3': resolution: {integrity: sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==} + '@vitest/expect@3.2.0': + resolution: {integrity: sha512-0v4YVbhDKX3SKoy0PHWXpKhj44w+3zZkIoVES9Ex2pq+u6+Bijijbi2ua5kE+h3qT6LBWFTNZSCOEU37H8Y5sA==} + '@vitest/mocker@3.1.3': resolution: {integrity: sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==} peerDependencies: @@ -4219,21 +4223,47 @@ packages: vite: optional: true + '@vitest/mocker@3.2.0': + resolution: {integrity: sha512-HFcW0lAMx3eN9vQqis63H0Pscv0QcVMo1Kv8BNysZbxcmHu3ZUYv59DS6BGYiGQ8F5lUkmsfMMlPm4DJFJdf/A==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/pretty-format@3.1.3': resolution: {integrity: sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==} + '@vitest/pretty-format@3.2.0': + resolution: {integrity: sha512-gUUhaUmPBHFkrqnOokmfMGRBMHhgpICud9nrz/xpNV3/4OXCn35oG+Pl8rYYsKaTNd/FAIrqRHnwpDpmYxCYZw==} + '@vitest/runner@3.1.3': resolution: {integrity: sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==} + '@vitest/runner@3.2.0': + resolution: {integrity: sha512-bXdmnHxuB7fXJdh+8vvnlwi/m1zvu+I06i1dICVcDQFhyV4iKw2RExC/acavtDn93m/dRuawUObKsrNE1gJacA==} + '@vitest/snapshot@3.1.3': resolution: {integrity: sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==} + '@vitest/snapshot@3.2.0': + resolution: {integrity: sha512-z7P/EneBRMe7hdvWhcHoXjhA6at0Q4ipcoZo6SqgxLyQQ8KSMMCmvw1cSt7FHib3ozt0wnRHc37ivuUMbxzG/A==} + '@vitest/spy@3.1.3': resolution: {integrity: sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==} + '@vitest/spy@3.2.0': + resolution: {integrity: sha512-s3+TkCNUIEOX99S0JwNDfsHRaZDDZZR/n8F0mop0PmsEbQGKZikCGpTGZ6JRiHuONKew3Fb5//EPwCP+pUX9cw==} + '@vitest/utils@3.1.3': resolution: {integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==} + '@vitest/utils@3.2.0': + resolution: {integrity: sha512-gXXOe7Fj6toCsZKVQouTRLJftJwmvbhH5lKOBR6rlP950zUq9AitTUjnFoXS/CqjBC2aoejAztLPzzuva++XBw==} + '@vscode/codicons@0.0.36': resolution: {integrity: sha512-wsNOvNMMJ2BY8rC2N2MNBG7yOowV3ov8KlvUE/AiVUlHKTfWsw3OgAOQduX7h0Un6GssKD3aoTVH+TF3DSQwKQ==} @@ -4585,6 +4615,9 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} + better-sqlite3@11.10.0: + resolution: {integrity: sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==} + bignumber.js@9.3.0: resolution: {integrity: sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA==} @@ -4592,6 +4625,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -5972,6 +6008,9 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} @@ -7093,6 +7132,7 @@ packages: libsql@0.5.12: resolution: {integrity: sha512-TikiQZ1j4TwFEqVdJdTM9ZTti28is/ytGEvn0S2MocOj69UKQetWACe/qd8KAD5VeNnQSVd6Nlm2AJx0DFW9Ag==} + cpu: [x64, arm64, wasm32, arm] os: [darwin, linux, win32] lie@3.3.0: @@ -7775,8 +7815,8 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - next@15.3.3: - resolution: {integrity: sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==} + next@15.2.5: + resolution: {integrity: sha512-LlqS8ljc7RWR3riUwxB5+14v7ULAa5EuLUyarD/sFgXPd6Hmmscg8DXcu9hDdh5atybrIDVBrFhjDpRIQo/4pQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -8244,6 +8284,10 @@ packages: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} + postgres@3.4.7: + resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} + engines: {node: '>=12'} + posthog-js@1.242.1: resolution: {integrity: sha512-j2mzw0eukyuw/Qm3tNZ6pfaXmc7eglWj6ftmvR1Lz9GtMr85ndGNXJvIGO+6PBrQW2o0D1G0k/KV93ehta0hFA==} peerDependencies: @@ -8799,8 +8843,8 @@ packages: shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - sharp@0.34.2: - resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==} + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -9268,10 +9312,18 @@ packages: resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + tinypool@1.0.2: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} + tinypool@1.1.0: + resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==} + engines: {node: ^18.0.0 || >=20.0.0} + tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} @@ -9280,6 +9332,10 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} + tinyspy@4.0.3: + resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} + engines: {node: '>=14.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -9744,6 +9800,11 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true + vite-node@3.2.0: + resolution: {integrity: sha512-8Fc5Ko5Y4URIJkmMF/iFP1C0/OJyY+VGVe9Nw6WAdZyw4bTO+eVg9mwxWkQp/y8NnAoQY3o9KAvE1ZdA2v+Vmg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + vite@6.3.5: resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -9812,6 +9873,34 @@ packages: jsdom: optional: true + vitest@3.2.0: + resolution: {integrity: sha512-P7Nvwuli8WBNmeMHHek7PnGW4oAZl9za1fddfRVidZar8wDZRi7hpznLKQePQ8JPLwSBEYDK11g+++j7uFJV8Q==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.0 + '@vitest/ui': 3.2.0 + 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 + void-elements@3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} @@ -11461,85 +11550,79 @@ snapshots: transitivePeerDependencies: - supports-color - '@img/sharp-darwin-arm64@0.34.2': + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.1.0 + '@img/sharp-libvips-darwin-arm64': 1.0.4 optional: true - '@img/sharp-darwin-x64@0.34.2': + '@img/sharp-darwin-x64@0.33.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.1.0 + '@img/sharp-libvips-darwin-x64': 1.0.4 optional: true - '@img/sharp-libvips-darwin-arm64@1.1.0': + '@img/sharp-libvips-darwin-arm64@1.0.4': optional: true - '@img/sharp-libvips-darwin-x64@1.1.0': + '@img/sharp-libvips-darwin-x64@1.0.4': optional: true - '@img/sharp-libvips-linux-arm64@1.1.0': + '@img/sharp-libvips-linux-arm64@1.0.4': optional: true - '@img/sharp-libvips-linux-arm@1.1.0': + '@img/sharp-libvips-linux-arm@1.0.5': optional: true - '@img/sharp-libvips-linux-ppc64@1.1.0': + '@img/sharp-libvips-linux-s390x@1.0.4': optional: true - '@img/sharp-libvips-linux-s390x@1.1.0': + '@img/sharp-libvips-linux-x64@1.0.4': optional: true - '@img/sharp-libvips-linux-x64@1.1.0': + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + '@img/sharp-libvips-linuxmusl-x64@1.0.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.1.0': - optional: true - - '@img/sharp-linux-arm64@0.34.2': + '@img/sharp-linux-arm64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.1.0 + '@img/sharp-libvips-linux-arm64': 1.0.4 optional: true - '@img/sharp-linux-arm@0.34.2': + '@img/sharp-linux-arm@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.1.0 + '@img/sharp-libvips-linux-arm': 1.0.5 optional: true - '@img/sharp-linux-s390x@0.34.2': + '@img/sharp-linux-s390x@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.1.0 + '@img/sharp-libvips-linux-s390x': 1.0.4 optional: true - '@img/sharp-linux-x64@0.34.2': + '@img/sharp-linux-x64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.1.0 + '@img/sharp-libvips-linux-x64': 1.0.4 optional: true - '@img/sharp-linuxmusl-arm64@0.34.2': + '@img/sharp-linuxmusl-arm64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 optional: true - '@img/sharp-linuxmusl-x64@0.34.2': + '@img/sharp-linuxmusl-x64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 optional: true - '@img/sharp-wasm32@0.34.2': + '@img/sharp-wasm32@0.33.5': dependencies: '@emnapi/runtime': 1.4.3 optional: true - '@img/sharp-win32-arm64@0.34.2': - optional: true - - '@img/sharp-win32-ia32@0.34.2': + '@img/sharp-win32-ia32@0.33.5': optional: true - '@img/sharp-win32-x64@0.34.2': + '@img/sharp-win32-x64@0.33.5': optional: true '@isaacs/cliui@8.0.2': @@ -11771,10 +11854,12 @@ snapshots: transitivePeerDependencies: - bufferutil - utf-8-validate + optional: true '@libsql/core@0.15.8': dependencies: js-base64: 3.7.7 + optional: true '@libsql/darwin-arm64@0.5.12': optional: true @@ -11791,8 +11876,10 @@ snapshots: transitivePeerDependencies: - bufferutil - utf-8-validate + optional: true - '@libsql/isomorphic-fetch@0.3.1': {} + '@libsql/isomorphic-fetch@0.3.1': + optional: true '@libsql/isomorphic-ws@0.1.5': dependencies: @@ -11801,6 +11888,7 @@ snapshots: transitivePeerDependencies: - bufferutil - utf-8-validate + optional: true '@libsql/linux-arm-gnueabihf@0.5.12': optional: true @@ -11904,36 +11992,37 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@neon-rs/load@0.0.4': {} + '@neon-rs/load@0.0.4': + optional: true - '@next/env@15.3.3': {} + '@next/env@15.2.5': {} '@next/eslint-plugin-next@15.3.2': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.3.3': + '@next/swc-darwin-arm64@15.2.5': optional: true - '@next/swc-darwin-x64@15.3.3': + '@next/swc-darwin-x64@15.2.5': optional: true - '@next/swc-linux-arm64-gnu@15.3.3': + '@next/swc-linux-arm64-gnu@15.2.5': optional: true - '@next/swc-linux-arm64-musl@15.3.3': + '@next/swc-linux-arm64-musl@15.2.5': optional: true - '@next/swc-linux-x64-gnu@15.3.3': + '@next/swc-linux-x64-gnu@15.2.5': optional: true - '@next/swc-linux-x64-musl@15.3.3': + '@next/swc-linux-x64-musl@15.2.5': optional: true - '@next/swc-win32-arm64-msvc@15.3.3': + '@next/swc-win32-arm64-msvc@15.2.5': optional: true - '@next/swc-win32-x64-msvc@15.3.3': + '@next/swc-win32-x64-msvc@15.2.5': optional: true '@noble/ciphers@1.3.0': {} @@ -13536,6 +13625,10 @@ snapshots: dependencies: '@babel/types': 7.27.1 + '@types/chai@5.2.2': + dependencies: + '@types/deep-eql': 4.0.2 + '@types/clone-deep@4.0.4': {} '@types/d3-array@3.2.1': {} @@ -13659,6 +13752,8 @@ snapshots: dependencies: '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} + '@types/diff-match-patch@1.0.36': {} '@types/diff@5.2.3': {} @@ -13765,6 +13860,11 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@22.15.29': + dependencies: + undici-types: 6.21.0 + optional: true + '@types/parse-json@4.0.2': {} '@types/prop-types@15.7.14': {} @@ -13815,7 +13915,8 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 22.15.20 + '@types/node': 22.15.29 + optional: true '@types/yargs-parser@21.0.3': {} @@ -13933,6 +14034,14 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 + '@vitest/expect@3.2.0': + dependencies: + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.0 + '@vitest/utils': 3.2.0 + chai: 5.2.0 + tinyrainbow: 2.0.0 + '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@20.17.50)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.1.3 @@ -13949,31 +14058,64 @@ snapshots: optionalDependencies: vite: 6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) + '@vitest/mocker@3.2.0(vite@6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0))': + dependencies: + '@vitest/spy': 3.2.0 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) + '@vitest/pretty-format@3.1.3': dependencies: tinyrainbow: 2.0.0 + '@vitest/pretty-format@3.2.0': + dependencies: + tinyrainbow: 2.0.0 + '@vitest/runner@3.1.3': dependencies: '@vitest/utils': 3.1.3 pathe: 2.0.3 + '@vitest/runner@3.2.0': + dependencies: + '@vitest/utils': 3.2.0 + pathe: 2.0.3 + '@vitest/snapshot@3.1.3': dependencies: '@vitest/pretty-format': 3.1.3 magic-string: 0.30.17 pathe: 2.0.3 + '@vitest/snapshot@3.2.0': + dependencies: + '@vitest/pretty-format': 3.2.0 + magic-string: 0.30.17 + pathe: 2.0.3 + '@vitest/spy@3.1.3': dependencies: tinyspy: 3.0.2 + '@vitest/spy@3.2.0': + dependencies: + tinyspy: 4.0.3 + '@vitest/utils@3.1.3': dependencies: '@vitest/pretty-format': 3.1.3 loupe: 3.1.3 tinyrainbow: 2.0.0 + '@vitest/utils@3.2.0': + dependencies: + '@vitest/pretty-format': 3.2.0 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + '@vscode/codicons@0.0.36': {} '@vscode/test-cli@0.0.11': @@ -14393,16 +14535,24 @@ snapshots: dependencies: is-windows: 1.0.2 + better-sqlite3@11.10.0: + dependencies: + bindings: 1.5.0 + prebuild-install: 7.1.3 + bignumber.js@9.3.0: {} binary-extensions@2.3.0: {} + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - optional: true bluebird@3.4.7: {} @@ -14626,8 +14776,7 @@ snapshots: dependencies: readdirp: 4.1.2 - chownr@1.1.4: - optional: true + chownr@1.1.4: {} chownr@3.0.0: {} @@ -15106,7 +15255,8 @@ snapshots: d3: 7.9.0 lodash-es: 4.17.21 - data-uri-to-buffer@4.0.1: {} + data-uri-to-buffer@4.0.1: + optional: true data-uri-to-buffer@6.0.2: {} @@ -15161,7 +15311,6 @@ snapshots: decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - optional: true dedent@1.6.0(babel-plugin-macros@3.1.0): optionalDependencies: @@ -15169,8 +15318,7 @@ snapshots: deep-eql@5.0.2: {} - deep-extend@0.6.0: - optional: true + deep-extend@0.6.0: {} deep-is@0.1.4: {} @@ -15225,7 +15373,8 @@ snapshots: detect-indent@6.1.0: {} - detect-libc@2.0.2: {} + detect-libc@2.0.2: + optional: true detect-libc@2.0.4: {} @@ -15304,9 +15453,11 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.44.1(@libsql/client@0.15.8): + drizzle-orm@0.44.1(@libsql/client@0.15.8)(better-sqlite3@11.10.0)(postgres@3.4.7): optionalDependencies: '@libsql/client': 0.15.8 + better-sqlite3: 11.10.0 + postgres: 3.4.7 duck@0.1.12: dependencies: @@ -15791,8 +15942,7 @@ snapshots: exit@0.1.2: {} - expand-template@2.0.3: - optional: true + expand-template@2.0.3: {} expect-type@1.2.1: {} @@ -15928,6 +16078,7 @@ snapshots: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + optional: true fflate@0.4.8: {} @@ -15939,6 +16090,8 @@ snapshots: dependencies: flat-cache: 4.0.1 + file-uri-to-path@1.0.0: {} + filelist@1.0.4: dependencies: minimatch: 5.1.6 @@ -16015,6 +16168,7 @@ snapshots: formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 + optional: true forwarded@0.2.0: {} @@ -16022,8 +16176,7 @@ snapshots: from@0.1.7: {} - fs-constants@1.0.0: - optional: true + fs-constants@1.0.0: {} fs-extra@7.0.1: dependencies: @@ -16156,8 +16309,7 @@ snapshots: transitivePeerDependencies: - supports-color - github-from-package@0.0.0: - optional: true + github-from-package@0.0.0: {} glob-parent@5.1.2: dependencies: @@ -16505,8 +16657,7 @@ snapshots: inherits@2.0.4: {} - ini@1.3.8: - optional: true + ini@1.3.8: {} inline-style-parser@0.1.1: {} @@ -17259,7 +17410,8 @@ snapshots: joycon@3.1.1: {} - js-base64@3.7.7: {} + js-base64@3.7.7: + optional: true js-cookie@2.2.1: {} @@ -17469,6 +17621,7 @@ snapshots: '@libsql/linux-x64-gnu': 0.5.12 '@libsql/linux-x64-musl': 0.5.12 '@libsql/win32-x64-msvc': 0.5.12 + optional: true lie@3.3.0: dependencies: @@ -18230,8 +18383,7 @@ snapshots: mimic-function@5.0.1: {} - mimic-response@3.1.0: - optional: true + mimic-response@3.1.0: {} min-indent@1.0.1: {} @@ -18261,8 +18413,7 @@ snapshots: mitt@3.0.1: {} - mkdirp-classic@0.5.3: - optional: true + mkdirp-classic@0.5.3: {} mkdirp@1.0.4: {} @@ -18331,8 +18482,7 @@ snapshots: nanoid@3.3.11: {} - napi-build-utils@2.0.0: - optional: true + napi-build-utils@2.0.0: {} natural-compare@1.4.0: {} @@ -18345,9 +18495,9 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@15.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 15.3.3 + '@next/env': 15.2.5 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -18357,15 +18507,15 @@ snapshots: react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.6(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.3.3 - '@next/swc-darwin-x64': 15.3.3 - '@next/swc-linux-arm64-gnu': 15.3.3 - '@next/swc-linux-arm64-musl': 15.3.3 - '@next/swc-linux-x64-gnu': 15.3.3 - '@next/swc-linux-x64-musl': 15.3.3 - '@next/swc-win32-arm64-msvc': 15.3.3 - '@next/swc-win32-x64-msvc': 15.3.3 - sharp: 0.34.2 + '@next/swc-darwin-arm64': 15.2.5 + '@next/swc-darwin-x64': 15.2.5 + '@next/swc-linux-arm64-gnu': 15.2.5 + '@next/swc-linux-arm64-musl': 15.2.5 + '@next/swc-linux-x64-gnu': 15.2.5 + '@next/swc-linux-x64-musl': 15.2.5 + '@next/swc-win32-arm64-msvc': 15.2.5 + '@next/swc-win32-x64-msvc': 15.2.5 + sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -18379,7 +18529,6 @@ snapshots: node-abi@3.75.0: dependencies: semver: 7.7.2 - optional: true node-addon-api@4.3.0: optional: true @@ -18401,6 +18550,7 @@ snapshots: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + optional: true node-int64@0.4.0: {} @@ -18850,6 +19000,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postgres@3.4.7: {} + posthog-js@1.242.1: dependencies: core-js: 3.42.0 @@ -18879,7 +19031,6 @@ snapshots: simple-get: 4.0.1 tar-fs: 2.1.2 tunnel-agent: 0.6.0 - optional: true prelude-ls@1.2.1: {} @@ -18911,7 +19062,8 @@ snapshots: progress@2.0.3: {} - promise-limit@2.7.0: {} + promise-limit@2.7.0: + optional: true prompts@2.4.2: dependencies: @@ -19026,7 +19178,6 @@ snapshots: ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 - optional: true react-docgen-typescript@2.2.2(typescript@5.8.3): dependencies: @@ -19210,7 +19361,6 @@ snapshots: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - optional: true readdirp@3.6.0: dependencies: @@ -19556,33 +19706,31 @@ snapshots: shallowequal@1.1.0: {} - sharp@0.34.2: + sharp@0.33.5: dependencies: color: 4.2.3 detect-libc: 2.0.4 semver: 7.7.2 optionalDependencies: - '@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.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 optional: true shebang-command@2.0.0: @@ -19638,15 +19786,13 @@ snapshots: signal-exit@4.1.0: {} - simple-concat@1.0.1: - optional: true + simple-concat@1.0.1: {} simple-get@4.0.1: dependencies: decompress-response: 6.0.0 once: 1.4.0 simple-concat: 1.0.1 - optional: true simple-git@3.27.0: dependencies: @@ -19887,7 +20033,6 @@ snapshots: string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - optional: true stringify-entities@4.0.4: dependencies: @@ -19926,8 +20071,7 @@ snapshots: dependencies: min-indent: 1.0.1 - strip-json-comments@2.0.1: - optional: true + strip-json-comments@2.0.1: {} strip-json-comments@3.1.1: {} @@ -20024,7 +20168,6 @@ snapshots: mkdirp-classic: 0.5.3 pump: 3.0.2 tar-stream: 2.2.0 - optional: true tar-fs@3.0.9: dependencies: @@ -20043,7 +20186,6 @@ snapshots: fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 - optional: true tar-stream@3.1.7: dependencies: @@ -20104,12 +20246,21 @@ snapshots: fdir: 6.4.5(picomatch@4.0.2) picomatch: 4.0.2 + tinyglobby@0.2.14: + dependencies: + fdir: 6.4.5(picomatch@4.0.2) + picomatch: 4.0.2 + tinypool@1.0.2: {} + tinypool@1.1.0: {} + tinyrainbow@2.0.0: {} tinyspy@3.0.2: {} + tinyspy@4.0.3: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -20259,7 +20410,6 @@ snapshots: tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 - optional: true tunnel@0.0.6: {} @@ -20646,6 +20796,27 @@ snapshots: - tsx - yaml + vite-node@3.2.0(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0): + dependencies: + cac: 6.7.14 + debug: 4.4.1(supports-color@8.1.1) + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vite@6.3.5(@types/node@18.19.100)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0): dependencies: esbuild: 0.25.5 @@ -20776,6 +20947,49 @@ snapshots: - tsx - yaml + vitest@3.2.0(@types/debug@4.1.12)(@types/node@22.15.20)(jiti@2.4.2)(jsdom@20.0.3)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.0 + '@vitest/mocker': 3.2.0(vite@6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0)) + '@vitest/pretty-format': 3.2.0 + '@vitest/runner': 3.2.0 + '@vitest/snapshot': 3.2.0 + '@vitest/spy': 3.2.0 + '@vitest/utils': 3.2.0 + chai: 5.2.0 + debug: 4.4.1(supports-color@8.1.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.0 + tinyrainbow: 2.0.0 + vite: 6.3.5(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) + vite-node: 3.2.0(@types/node@22.15.20)(jiti@2.4.2)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 22.15.20 + jsdom: 20.0.3 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + void-elements@3.1.0: {} vscode-jsonrpc@8.2.0: {} @@ -20818,7 +21032,8 @@ snapshots: web-namespaces@1.1.4: {} - web-streams-polyfill@3.3.3: {} + web-streams-polyfill@3.3.3: + optional: true web-streams-polyfill@4.0.0-beta.3: {} From a8ebf63757dc7fa8ad6684df7dd7794f7f0d4bba Mon Sep 17 00:00:00 2001 From: cte Date: Tue, 3 Jun 2025 00:26:28 -0700 Subject: [PATCH 7/9] More progress --- apps/web-evals/.env | 1 + apps/web-evals/.gitignore | 6 ++ apps/web-evals/src/app/runs/[id]/run.tsx | 6 +- .../web-evals/src/app/runs/new/defaults.ts | 0 apps/web-evals/src/app/runs/new/new-run.tsx | 2 +- apps/web-evals/src/hooks/use-exercises.ts | 2 +- apps/web-evals/src/lib/server/exercises.ts | 2 +- apps/web-evals/src/lib/server/runs.ts | 1 + packages/evals/src/cli/index.ts | 88 ++----------------- packages/evals/src/index.ts | 1 - .../src/lib/__tests__/in-chunks-of.test.ts | 18 ---- packages/evals/src/lib/in-chunks-of.ts | 14 --- packages/evals/src/lib/index.ts | 1 - pnpm-lock.yaml | 7 +- 14 files changed, 23 insertions(+), 126 deletions(-) create mode 100644 apps/web-evals/.env rename packages/evals/src/settings/index.ts => apps/web-evals/src/app/runs/new/defaults.ts (100%) delete mode 100644 packages/evals/src/lib/__tests__/in-chunks-of.test.ts delete mode 100644 packages/evals/src/lib/in-chunks-of.ts delete mode 100644 packages/evals/src/lib/index.ts diff --git a/apps/web-evals/.env b/apps/web-evals/.env new file mode 100644 index 0000000000..7970806bec --- /dev/null +++ b/apps/web-evals/.env @@ -0,0 +1 @@ +DATABASE_URL=postgres://postgres:password@localhost:5432/evals_development diff --git a/apps/web-evals/.gitignore b/apps/web-evals/.gitignore index 917e44d27f..443f3159ed 100644 --- a/apps/web-evals/.gitignore +++ b/apps/web-evals/.gitignore @@ -1,2 +1,8 @@ +# .env +!.env + +# next.js .next + +# typescript tsconfig.tsbuildinfo diff --git a/apps/web-evals/src/app/runs/[id]/run.tsx b/apps/web-evals/src/app/runs/[id]/run.tsx index aa82354bf0..576fb12a2e 100644 --- a/apps/web-evals/src/app/runs/[id]/run.tsx +++ b/apps/web-evals/src/app/runs/[id]/run.tsx @@ -3,7 +3,7 @@ import { useMemo } from "react" import { LoaderCircle } from "lucide-react" -import * as db from "@roo-code/evals" +import type { Run, TaskMetrics as _TaskMetrics } from "@roo-code/evals" import { formatCurrency, formatDuration, formatTokens } from "@/lib/formatters" import { useRunStatus } from "@/hooks/use-run-status" @@ -12,9 +12,9 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@ import { TaskStatus } from "./task-status" import { ConnectionStatus } from "./connection-status" -type TaskMetrics = Pick +type TaskMetrics = Pick<_TaskMetrics, "tokensIn" | "tokensOut" | "tokensContext" | "duration" | "cost"> -export function Run({ run }: { run: db.Run }) { +export function Run({ run }: { run: Run }) { const { tasks, status, tokenUsage, usageUpdatedAt } = useRunStatus(run) const taskMetrics: Record = useMemo(() => { diff --git a/packages/evals/src/settings/index.ts b/apps/web-evals/src/app/runs/new/defaults.ts similarity index 100% rename from packages/evals/src/settings/index.ts rename to apps/web-evals/src/app/runs/new/defaults.ts diff --git a/apps/web-evals/src/app/runs/new/new-run.tsx b/apps/web-evals/src/app/runs/new/new-run.tsx index 0de4491e2b..535094fcd5 100644 --- a/apps/web-evals/src/app/runs/new/new-run.tsx +++ b/apps/web-evals/src/app/runs/new/new-run.tsx @@ -10,7 +10,6 @@ import { toast } from "sonner" import { X, Rocket, Check, ChevronsUpDown, SlidersHorizontal, Book, CircleCheck } from "lucide-react" import { globalSettingsSchema, providerSettingsSchema } from "@roo-code/types" -import { rooCodeDefaults } from "@roo-code/evals" import { createRun } from "@/lib/server/runs" import { @@ -52,6 +51,7 @@ import { DialogFooter, } from "@/components/ui" +import { rooCodeDefaults } from "./defaults" import { SettingsDiff } from "./settings-diff" export function NewRun() { diff --git a/apps/web-evals/src/hooks/use-exercises.ts b/apps/web-evals/src/hooks/use-exercises.ts index 2149f70cda..811fda93ab 100644 --- a/apps/web-evals/src/hooks/use-exercises.ts +++ b/apps/web-evals/src/hooks/use-exercises.ts @@ -2,4 +2,4 @@ import { useQuery } from "@tanstack/react-query" import { getExercises } from "@/lib/server/exercises" -export const useExercises = () => useQuery({ queryKey: ["exercises"], queryFn: getExercises }) +export const useExercises = () => useQuery({ queryKey: ["exercises"], queryFn: () => getExercises() }) diff --git a/apps/web-evals/src/lib/server/exercises.ts b/apps/web-evals/src/lib/server/exercises.ts index 1f0f2ff192..ee4255e5fa 100644 --- a/apps/web-evals/src/lib/server/exercises.ts +++ b/apps/web-evals/src/lib/server/exercises.ts @@ -20,7 +20,7 @@ export const listDirectories = async (relativePath: string) => { } // __dirname = /evals/apps/web/src/lib/server -const EXERCISES_BASE_PATH = path.resolve(__dirname, "../../../../../../../evals") +const EXERCISES_BASE_PATH = path.resolve(__dirname, "../../../../../../evals") export const getExercises = async () => { const result = await Promise.all( diff --git a/apps/web-evals/src/lib/server/runs.ts b/apps/web-evals/src/lib/server/runs.ts index dff0482d6d..509eba8a18 100644 --- a/apps/web-evals/src/lib/server/runs.ts +++ b/apps/web-evals/src/lib/server/runs.ts @@ -18,6 +18,7 @@ import { } from "@roo-code/evals" import { CreateRun } from "@/lib/schemas" + import { getExercisesForLanguage } from "./exercises" export async function createRun({ suite, exercises = [], systemPrompt, ...values }: CreateRun) { diff --git a/packages/evals/src/cli/index.ts b/packages/evals/src/cli/index.ts index b3bfb796ae..6035f0075a 100644 --- a/packages/evals/src/cli/index.ts +++ b/packages/evals/src/cli/index.ts @@ -1,11 +1,9 @@ import * as fs from "fs" import * as path from "path" -import * as os from "os" -import pMap from "p-map" import pWaitFor from "p-wait-for" import { execa, parseCommandString } from "execa" -import { build, filesystem, GluegunPrompt, GluegunToolbox } from "gluegun" +import { build, GluegunToolbox } from "gluegun" import psTree from "ps-tree" import { RooCodeEventName, IpcOrigin, IpcMessageType, TaskCommandName } from "@roo-code/types" @@ -15,18 +13,14 @@ import { type Run, type Task, findRun, - createRun, finishRun, - createTask, getTasks, updateTask, createTaskMetrics, updateTaskMetrics, createToolError, } from "../db/index.js" -import { rooCodeDefaults } from "../settings/index.js" -import { __dirname, extensionDevelopmentPath, exercisesPath } from "../exercises/index.js" -import { type ExerciseLanguage, exerciseLanguages, getExercises } from "../exercises/exercises.js" +import { __dirname, extensionDevelopmentPath, exercisesPath, type ExerciseLanguage } from "../exercises/index.js" type TaskResult = { success: boolean } type TaskPromise = Promise @@ -44,50 +38,14 @@ const testCommands: Record { - const { config, prompt } = toolbox - - let { language, exercise } = config - - if (![undefined, ...exerciseLanguages, "all"].includes(language)) { - throw new Error(`Language is invalid: ${language}`) - } - - if (!["undefined", "string"].includes(typeof exercise)) { - throw new Error(`Exercise is invalid: ${exercise}`) - } - + const { config } = toolbox const id = config.runId ? Number(config.runId) : undefined - let run: Run - - if (id) { - run = await findRun(id) - } else { - run = await createRun({ - model: rooCodeDefaults.openRouterModelId!, - pid: process.pid, - socketPath: path.resolve(os.tmpdir(), `roo-code-evals-${crypto.randomUUID().slice(0, 8)}.sock`), - }) - if (language === "all") { - for (const language of exerciseLanguages) { - const exercises = getExercises()[language as ExerciseLanguage] - - await pMap(exercises, (exercise) => createTask({ runId: run.id, language, exercise }), { - concurrency: run.concurrency, - }) - } - } else if (exercise === "all") { - const exercises = getExercises()[language as ExerciseLanguage] - await pMap(exercises, (exercise) => createTask({ runId: run.id, language, exercise }), { - concurrency: run.concurrency, - }) - } else { - language = language || (await askLanguage(prompt)) - exercise = exercise || (await askExercise(prompt, language)) - await createTask({ runId: run.id, language, exercise }) - } + if (!id) { + throw new Error("Run ID is required.") } + const run = await findRun(id) const tasks = await getTasks(run.id) if (!tasks[0]) { @@ -100,11 +58,6 @@ const run = async (toolbox: GluegunToolbox) => { await execa({ cwd: exercisesPath })`git clean -fd` await execa({ cwd: exercisesPath })`git checkout -b runs/${run.id}-${crypto.randomUUID().slice(0, 8)} main` - fs.writeFileSync( - path.resolve(exercisesPath, "settings.json"), - JSON.stringify({ ...rooCodeDefaults, ...run.settings }, null, 2), - ) - const server = new IpcServer(run.socketPath, () => {}) server.listen() @@ -328,7 +281,6 @@ const runExercise = async ({ run, task, server }: { run: Run; task: Task; server commandName: TaskCommandName.StartNewTask, data: { configuration: { - ...rooCodeDefaults, openRouterApiKey: process.env.OPENROUTER_API_KEY!, ...run.settings, }, @@ -472,34 +424,6 @@ const runUnitTest = async ({ task }: { task: Task }) => { return passed } -const askLanguage = async (prompt: GluegunPrompt) => { - const { language } = await prompt.ask<{ language: ExerciseLanguage }>({ - type: "select", - name: "language", - message: "Which language?", - choices: [...exerciseLanguages], - }) - - return language -} - -const askExercise = async (prompt: GluegunPrompt, language: ExerciseLanguage) => { - const exercises = filesystem.subdirectories(path.join(exercisesPath, language)) - - if (exercises.length === 0) { - throw new Error(`No exercises found for ${language}`) - } - - const { exercise } = await prompt.ask<{ exercise: string }>({ - type: "select", - name: "exercise", - message: "Which exercise?", - choices: exercises.map((exercise) => path.basename(exercise)).filter((exercise) => !exercise.startsWith(".")), - }) - - return exercise -} - const main = async () => { const cli = build() .brand("cli") diff --git a/packages/evals/src/index.ts b/packages/evals/src/index.ts index 3abb4d03c1..d626fd43b9 100644 --- a/packages/evals/src/index.ts +++ b/packages/evals/src/index.ts @@ -1,3 +1,2 @@ export * from "./db/index.js" -export * from "./settings/index.js" export * from "./exercises/index.js" diff --git a/packages/evals/src/lib/__tests__/in-chunks-of.test.ts b/packages/evals/src/lib/__tests__/in-chunks-of.test.ts deleted file mode 100644 index 3dd0151569..0000000000 --- a/packages/evals/src/lib/__tests__/in-chunks-of.test.ts +++ /dev/null @@ -1,18 +0,0 @@ -// npx vitest run src/__tests__/in-chunks-of.test.ts - -import { inChunksOf } from "../in-chunks-of.js" - -describe("inChunksOf", () => { - it("should return an array of arrays", () => { - const result = inChunksOf([1, 2, 3, 4, 5]) - expect(result).toEqual([[1, 2], [3, 4], [5]]) - }) - - it("should return an array of arrays with a custom chunk size", () => { - const result = inChunksOf([1, 2, 3, 4, 5], 3) - expect(result).toEqual([ - [1, 2, 3], - [4, 5], - ]) - }) -}) diff --git a/packages/evals/src/lib/in-chunks-of.ts b/packages/evals/src/lib/in-chunks-of.ts deleted file mode 100644 index 8245c97a8a..0000000000 --- a/packages/evals/src/lib/in-chunks-of.ts +++ /dev/null @@ -1,14 +0,0 @@ -export function inChunksOf(ary: T[], perChunk = 2) { - const result = ary.reduce((collect, item, index) => { - const chunkIndex = Math.floor(index / perChunk) - - if (!collect[chunkIndex]) { - collect[chunkIndex] = [] - } - - collect[chunkIndex].push(item) - return collect - }, [] as T[][]) - - return result -} diff --git a/packages/evals/src/lib/index.ts b/packages/evals/src/lib/index.ts deleted file mode 100644 index 8c2aa62d40..0000000000 --- a/packages/evals/src/lib/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./in-chunks-of.js" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 27976c1661..ac583c10a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,7 +28,7 @@ importers: version: 9.1.7 knip: specifier: ^5.44.4 - version: 5.55.1(@types/node@22.15.20)(typescript@5.8.3) + version: 5.55.1(@types/node@22.15.29)(typescript@5.8.3) lint-staged: specifier: ^15.2.11 version: 15.5.2 @@ -13863,7 +13863,6 @@ snapshots: '@types/node@22.15.29': dependencies: undici-types: 6.21.0 - optional: true '@types/parse-json@4.0.2': {} @@ -17564,10 +17563,10 @@ snapshots: kleur@3.0.3: {} - knip@5.55.1(@types/node@22.15.20)(typescript@5.8.3): + knip@5.55.1(@types/node@22.15.29)(typescript@5.8.3): dependencies: '@nodelib/fs.walk': 1.2.8 - '@types/node': 22.15.20 + '@types/node': 22.15.29 enhanced-resolve: 5.18.1 fast-glob: 3.3.3 formatly: 0.2.3 From 4f476c89d9f24c42a3da2990ea2cbc7378031827 Mon Sep 17 00:00:00 2001 From: cte Date: Tue, 3 Jun 2025 01:20:18 -0700 Subject: [PATCH 8/9] More progress --- apps/web-evals/package.json | 12 +- packages/evals/package.json | 7 +- packages/evals/scripts/setup.sh | 3 +- packages/evals/src/cli/index.ts | 57 +-- ..._gorilla_man.sql => 0000_young_trauma.sql} | 0 .../src/db/migrations/meta/0000_snapshot.json | 2 +- .../src/db/migrations/meta/_journal.json | 4 +- packages/evals/src/db/schema.ts | 8 +- packages/evals/src/exercises/exercises.ts | 36 -- packages/evals/src/exercises/index.ts | 27 +- packages/evals/src/exercises/paths.ts | 7 - pnpm-lock.yaml | 357 +++--------------- 12 files changed, 106 insertions(+), 414 deletions(-) rename packages/evals/src/db/migrations/{0000_old_gorilla_man.sql => 0000_young_trauma.sql} (100%) delete mode 100644 packages/evals/src/exercises/exercises.ts delete mode 100644 packages/evals/src/exercises/paths.ts diff --git a/apps/web-evals/package.json b/apps/web-evals/package.json index b32d43190f..9276f6d01f 100644 --- a/apps/web-evals/package.json +++ b/apps/web-evals/package.json @@ -10,9 +10,6 @@ "start": "next start" }, "dependencies": { - "@roo-code/evals": "workspace:^", - "@roo-code/ipc": "workspace:^", - "@roo-code/types": "workspace:^", "@hookform/resolvers": "^4.1.3", "@radix-ui/react-alert-dialog": "^1.1.7", "@radix-ui/react-dialog": "^1.1.6", @@ -26,6 +23,9 @@ "@radix-ui/react-slot": "^1.1.2", "@radix-ui/react-tabs": "^1.1.3", "@radix-ui/react-tooltip": "^1.1.8", + "@roo-code/evals": "workspace:^", + "@roo-code/ipc": "workspace:^", + "@roo-code/types": "workspace:^", "@tanstack/react-query": "^5.69.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -38,10 +38,10 @@ "ps-tree": "^1.2.0", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-hook-form": "^7.54.2", + "react-hook-form": "^7.57.0", "react-use": "^17.6.0", - "sonner": "^2.0.2", - "tailwind-merge": "^3.0.2", + "sonner": "^2.0.5", + "tailwind-merge": "^3.3.0", "tailwindcss-animate": "^1.0.7", "vaul": "^1.1.2", "zod": "^3.24.2" diff --git a/packages/evals/package.json b/packages/evals/package.json index 2abb8c094a..c73408a65b 100644 --- a/packages/evals/package.json +++ b/packages/evals/package.json @@ -7,8 +7,9 @@ "scripts": { "lint": "eslint src --ext=ts --max-warnings=0", "check-types": "tsc --noEmit", - "test": "dotenvx run -f .env.test -- vitest run", + "_test": "dotenvx run -f .env.test -- vitest run", "clean": "rimraf dist .turbo", + "cli": "dotenvx run -f .env.development -- tsx src/cli/index.ts", "drizzle-kit": "dotenvx run -f .env.development -- tsx node_modules/drizzle-kit/bin.cjs", "drizzle-kit:test": "dotenvx run -f .env.test -- tsx node_modules/drizzle-kit/bin.cjs", "db:start": "docker compose up -d", @@ -24,9 +25,9 @@ "@roo-code/ipc": "workspace:^", "@roo-code/types": "workspace:^", "better-sqlite3": "^11.10.0", + "cmd-ts": "^0.13.0", "drizzle-orm": "^0.44.1", - "execa": "^9.5.2", - "gluegun": "^5.2.0", + "execa": "^9.6.0", "node-ipc": "^12.0.0", "p-map": "^7.0.3", "p-wait-for": "^5.0.2", diff --git a/packages/evals/scripts/setup.sh b/packages/evals/scripts/setup.sh index 115e180126..85bf40efd9 100755 --- a/packages/evals/scripts/setup.sh +++ b/packages/evals/scripts/setup.sh @@ -323,8 +323,7 @@ if [[ ! -s .env ]]; then fi echo -n "šŸ—„ļø Syncing Roo Code evals database... " -pnpm --filter @roo-code/evals db:push &>/dev/null || exit 1 -pnpm --filter @roo-code/evals db:enable-wal &>/dev/null || exit 1 +pnpm --filter @roo-code/evals db:push --force &>/dev/null || exit 1 echo "āœ… Done" if ! grep -q "OPENROUTER_API_KEY" .env; then diff --git a/packages/evals/src/cli/index.ts b/packages/evals/src/cli/index.ts index 6035f0075a..86a8ebfcad 100644 --- a/packages/evals/src/cli/index.ts +++ b/packages/evals/src/cli/index.ts @@ -3,7 +3,7 @@ import * as path from "path" import pWaitFor from "p-wait-for" import { execa, parseCommandString } from "execa" -import { build, GluegunToolbox } from "gluegun" +import { command, run, number, positional } from "cmd-ts" import psTree from "ps-tree" import { RooCodeEventName, IpcOrigin, IpcMessageType, TaskCommandName } from "@roo-code/types" @@ -20,7 +20,7 @@ import { updateTaskMetrics, createToolError, } from "../db/index.js" -import { __dirname, extensionDevelopmentPath, exercisesPath, type ExerciseLanguage } from "../exercises/index.js" +import { type ExerciseLanguage, exercisesPath } from "../exercises/index.js" type TaskResult = { success: boolean } type TaskPromise = Promise @@ -37,14 +37,7 @@ const testCommands: Record /dev/null 2>&1" } -const run = async (toolbox: GluegunToolbox) => { - const { config } = toolbox - const id = config.runId ? Number(config.runId) : undefined - - if (!id) { - throw new Error("Run ID is required.") - } - +const runEvals = async (id: number) => { const run = await findRun(id) const tasks = await getTasks(run.id) @@ -425,43 +418,23 @@ const runUnitTest = async ({ task }: { task: Task }) => { } const main = async () => { - const cli = build() - .brand("cli") - .src(__dirname) - .help() - .version() - .command({ - name: "run", - description: "Run an eval", - run: ({ config, parameters }) => { - config.language = parameters.first - config.exercise = parameters.second - - if (parameters.options["runId"]) { - config.runId = parameters.options["runId"] - } + const result = await run( + command({ + name: "cli", + description: "Execute an eval run.", + version: "0.0.0", + args: { + runId: positional({ type: number, displayName: "runId" }), }, - }) - .defaultCommand() - .create() - - const toolbox = await cli.run(process.argv) - const { command } = toolbox - - switch (command?.name) { - case "run": - await run(toolbox) - break - } + handler: (args) => runEvals(args.runId), + }), + process.argv.slice(2), + ) + console.log(result) process.exit(0) } -if (!fs.existsSync(extensionDevelopmentPath)) { - console.error(`"extensionDevelopmentPath" does not exist.`) - process.exit(1) -} - if (!fs.existsSync(exercisesPath)) { console.error( `Exercises do not exist at ${exercisesPath}. Please run "git clone https://github.com/RooCodeInc/Roo-Code-Evals.git evals".`, diff --git a/packages/evals/src/db/migrations/0000_old_gorilla_man.sql b/packages/evals/src/db/migrations/0000_young_trauma.sql similarity index 100% rename from packages/evals/src/db/migrations/0000_old_gorilla_man.sql rename to packages/evals/src/db/migrations/0000_young_trauma.sql diff --git a/packages/evals/src/db/migrations/meta/0000_snapshot.json b/packages/evals/src/db/migrations/meta/0000_snapshot.json index cdacd985d4..191248c405 100644 --- a/packages/evals/src/db/migrations/meta/0000_snapshot.json +++ b/packages/evals/src/db/migrations/meta/0000_snapshot.json @@ -1,5 +1,5 @@ { - "id": "caee25bc-e9ae-4d17-8448-11b879c8b66d", + "id": "b50d5e6a-0f3f-4605-a5e7-9351711fc5e4", "prevId": "00000000-0000-0000-0000-000000000000", "version": "7", "dialect": "postgresql", diff --git a/packages/evals/src/db/migrations/meta/_journal.json b/packages/evals/src/db/migrations/meta/_journal.json index 35df0008e3..b26aac5417 100644 --- a/packages/evals/src/db/migrations/meta/_journal.json +++ b/packages/evals/src/db/migrations/meta/_journal.json @@ -5,8 +5,8 @@ { "idx": 0, "version": "7", - "when": 1748933185613, - "tag": "0000_old_gorilla_man", + "when": 1748937674449, + "tag": "0000_young_trauma", "breakpoints": true } ] diff --git a/packages/evals/src/db/schema.ts b/packages/evals/src/db/schema.ts index 487b5def14..62480392d6 100644 --- a/packages/evals/src/db/schema.ts +++ b/packages/evals/src/db/schema.ts @@ -1,9 +1,9 @@ import { pgTable, text, timestamp, integer, real, boolean, jsonb, uniqueIndex } from "drizzle-orm/pg-core" import { relations } from "drizzle-orm" -import { type RooCodeSettings, ToolName, type ToolUsage, toolNames } from "@roo-code/types" +import type { RooCodeSettings, ToolName, ToolUsage } from "@roo-code/types" -import { type ExerciseLanguage, exerciseLanguages } from "../exercises/index.js" +import type { ExerciseLanguage } from "../exercises/index.js" /** * runs @@ -45,7 +45,7 @@ export const tasks = pgTable( .references(() => runs.id) .notNull(), taskMetricsId: integer("task_metrics_id").references(() => taskMetrics.id), - language: text({ enum: exerciseLanguages }).notNull().$type(), + language: text().notNull().$type(), exercise: text().notNull(), passed: boolean(), startedAt: timestamp("started_at"), @@ -97,7 +97,7 @@ export const toolErrors = pgTable("toolErrors", { id: integer().primaryKey().generatedAlwaysAsIdentity(), runId: integer("run_id").references(() => runs.id), taskId: integer("task_id").references(() => tasks.id), - toolName: text("tool_name", { enum: toolNames }).notNull().$type(), + toolName: text("tool_name").notNull().$type(), error: text().notNull(), createdAt: timestamp("created_at").notNull(), }) diff --git a/packages/evals/src/exercises/exercises.ts b/packages/evals/src/exercises/exercises.ts deleted file mode 100644 index 03084da58c..0000000000 --- a/packages/evals/src/exercises/exercises.ts +++ /dev/null @@ -1,36 +0,0 @@ -import * as path from "path" -import * as fs from "fs" - -import { filesystem } from "gluegun" - -import { exercisesPath } from "./paths.js" - -export const exerciseLanguages = ["go", "java", "javascript", "python", "rust"] as const - -export type ExerciseLanguage = (typeof exerciseLanguages)[number] - -export const isExerciseLanguage = (value: string): value is ExerciseLanguage => - exerciseLanguages.includes(value as ExerciseLanguage) - -let exercisesByLanguage: Record | null = null - -export const getExercises = () => { - if (exercisesByLanguage !== null) { - return exercisesByLanguage - } - - const getLanguageExercises = (language: ExerciseLanguage) => - fs.existsSync(path.resolve(exercisesPath, language)) - ? filesystem - .subdirectories(path.resolve(exercisesPath, language)) - .map((exercise) => path.basename(exercise)) - .filter((exercise) => !exercise.startsWith(".")) - : [] - - exercisesByLanguage = exerciseLanguages.reduce( - (collect, language) => ({ ...collect, [language]: getLanguageExercises(language) }), - {} as Record, - ) - - return exercisesByLanguage -} diff --git a/packages/evals/src/exercises/index.ts b/packages/evals/src/exercises/index.ts index d92d82ce0a..17e339f21a 100644 --- a/packages/evals/src/exercises/index.ts +++ b/packages/evals/src/exercises/index.ts @@ -1,2 +1,25 @@ -export * from "./exercises.js" -export * from "./paths.js" +import * as path from "path" +import * as fs from "fs/promises" +import { fileURLToPath } from "url" + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +export const exercisesPath = path.resolve(__dirname, "..", "..", "..", "..", "..", "evals") + +export const exerciseLanguages = ["go", "java", "javascript", "python", "rust"] as const + +export type ExerciseLanguage = (typeof exerciseLanguages)[number] + +const listDirectories = async (relativePath: string) => { + try { + const targetPath = path.resolve(__dirname, relativePath) + const entries = await fs.readdir(targetPath, { withFileTypes: true }) + return entries.filter((entry) => entry.isDirectory() && !entry.name.startsWith(".")).map((entry) => entry.name) + } catch (error) { + console.error(`Error listing directories at ${relativePath}:`, error) + return [] + } +} + +export const getExercisesForLanguage = async (language: ExerciseLanguage) => + listDirectories(path.join(exercisesPath, language)) diff --git a/packages/evals/src/exercises/paths.ts b/packages/evals/src/exercises/paths.ts deleted file mode 100644 index 10bf4e3d7a..0000000000 --- a/packages/evals/src/exercises/paths.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as path from "path" -import { fileURLToPath } from "url" - -export const __dirname = path.dirname(fileURLToPath(import.meta.url)) - -export const extensionDevelopmentPath = path.resolve(__dirname, "..", "..", "..", "..") -export const exercisesPath = path.resolve(extensionDevelopmentPath, "..", "evals") diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ac583c10a9..02336db7e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -186,16 +186,16 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) react-hook-form: - specifier: ^7.54.2 + specifier: ^7.57.0 version: 7.57.0(react@18.3.1) react-use: specifier: ^17.6.0 version: 17.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) sonner: - specifier: ^2.0.2 + specifier: ^2.0.5 version: 2.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: - specifier: ^3.0.2 + specifier: ^3.3.0 version: 3.3.0 tailwindcss-animate: specifier: ^1.0.7 @@ -325,15 +325,15 @@ importers: better-sqlite3: specifier: ^11.10.0 version: 11.10.0 + cmd-ts: + specifier: ^0.13.0 + version: 0.13.0 drizzle-orm: specifier: ^0.44.1 version: 0.44.1(@libsql/client@0.15.8)(better-sqlite3@11.10.0)(postgres@3.4.7) execa: - specifier: ^9.5.2 - version: 9.5.3 - gluegun: - specifier: ^5.2.0 - version: 5.2.0 + specifier: ^9.6.0 + version: 9.6.0 node-ipc: specifier: ^12.0.0 version: 12.0.0 @@ -4398,10 +4398,6 @@ packages: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} - ansi-regex@4.1.1: - resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} - engines: {node: '>=6'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -4433,12 +4429,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - apisauce@2.1.6: - resolution: {integrity: sha512-MdxR391op/FucS2YQRfB/NMRyCnHEPDd4h17LRIuVYi0BpGmMhpxc0shbOpfs5ahABuBEffNCGal5EcsydbBWg==} - - app-module-path@2.2.0: - resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} - aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} @@ -4520,9 +4510,6 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axios@0.21.4: - resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} - axios@1.9.0: resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} @@ -4844,10 +4831,6 @@ packages: class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -4856,10 +4839,6 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} - cli-table3@0.6.0: - resolution: {integrity: sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==} - engines: {node: 10.* || >= 12.*} - cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} @@ -4878,10 +4857,6 @@ packages: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} @@ -4890,6 +4865,9 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + cmd-ts@0.13.0: + resolution: {integrity: sha512-nsnxf6wNIM/JAS7T/x/1JmbEsjH0a8tezXqqpaL0O6+eV0/aDEnRxwjxpu0VzDdRcaC1ixGSbRlUuf/IU59I4g==} + cmdk@1.1.1: resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} peerDependencies: @@ -4934,10 +4912,6 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - colors@1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -5034,10 +5008,6 @@ packages: cose-base@2.2.0: resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} - cosmiconfig@7.0.1: - resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} - engines: {node: '>=10'} - cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -5050,10 +5020,6 @@ packages: cross-fetch@4.0.0: resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -5351,9 +5317,6 @@ packages: resolution: {integrity: sha512-sPpMZcVhRQ0nEMDtuMJ+RtCxt7iHPAMBU+I4tAlo5dU1sjRpNax0crj6nR3qKpvVnckaQ9U38enXcwW9nZJeCw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -5418,6 +5381,9 @@ packages: devtools-protocol@0.0.1367902: resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==} + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} @@ -5614,11 +5580,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - ejs@3.1.8: - resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} - engines: {node: '>=0.10.0'} - hasBin: true - electron-to-chromium@1.5.152: resolution: {integrity: sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==} @@ -5649,10 +5610,6 @@ packages: resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} - enquirer@2.3.6: - resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} - engines: {node: '>=8.6'} - enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -5880,6 +5837,10 @@ packages: resolution: {integrity: sha512-QFNnTvU3UjgWFy8Ef9iDHvIdcgZ344ebkwYx4/KLbR+CKQA4xBaHzv+iRpp86QfMHP8faFQLh8iOc57215y4Rg==} engines: {node: ^18.19.0 || >=20.5.0} + execa@9.6.0: + resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} + engines: {node: ^18.19.0 || >=20.5.0} + exenv-es6@1.1.1: resolution: {integrity: sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==} @@ -6103,9 +6064,6 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} - fs-jetpack@4.3.1: - resolution: {integrity: sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ==} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -6251,10 +6209,6 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - gluegun@5.2.0: - resolution: {integrity: sha512-jSUM5xUy2ztYFQANne17OUm/oAd7qSX7EBksS9bQDt9UvLPqcEkeWUebmaposb8Tx7eTTD8uJVWGRe6PYSsYkg==} - hasBin: true - google-auth-library@9.15.1: resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} engines: {node: '>=14'} @@ -6633,10 +6587,6 @@ packages: engines: {node: '>=14.16'} hasBin: true - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} @@ -7304,9 +7254,6 @@ packages: lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -7328,15 +7275,6 @@ packages: lodash.isstring@4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - - lodash.lowercase@4.3.0: - resolution: {integrity: sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA==} - - lodash.lowerfirst@4.3.1: - resolution: {integrity: sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w==} - lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} @@ -7346,49 +7284,15 @@ packages: lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - lodash.pad@4.5.1: - resolution: {integrity: sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==} - - lodash.padend@4.6.1: - resolution: {integrity: sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==} - - lodash.padstart@4.6.1: - resolution: {integrity: sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==} - - lodash.repeat@4.1.0: - resolution: {integrity: sha512-eWsgQW89IewS95ZOcr15HHCX6FVDxq3f2PNUIng3fyzsPev9imFQxIYdFZ6crl8L56UR6ZlGDLcEb3RZsCSSqw==} - - lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - lodash.trim@4.5.1: - resolution: {integrity: sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg==} - - lodash.trimend@4.5.1: - resolution: {integrity: sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA==} - - lodash.trimstart@4.5.1: - resolution: {integrity: sha512-b/+D6La8tU76L/61/aN0jULWHkT0EeJCmVstPBn/K9MtD2qBW83AsBNrr63dKuWYwVMO7ucv13QNO/Ek/2RKaQ==} - - lodash.uppercase@4.3.0: - resolution: {integrity: sha512-+Nbnxkj7s8K5U8z6KnEYPGUOGp3woZbB7Ecs7v3LkkjLQSm2kP9SKIILitN1ktn2mB/tmM9oSlku06I+/lH7QA==} - - lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@3.0.0: - resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} - engines: {node: '>=8'} - log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -8007,10 +7911,6 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - ora@4.0.2: - resolution: {integrity: sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig==} - engines: {node: '>=8'} - ora@8.2.0: resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} @@ -8233,10 +8133,6 @@ packages: pkg-types@2.1.0: resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - points-on-curve@0.2.0: resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} @@ -8683,10 +8579,6 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -8698,11 +8590,6 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@6.0.1: resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} engines: {node: 20 || >=22} @@ -8789,11 +8676,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.3.5: - resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} @@ -9094,10 +8976,6 @@ packages: stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - strip-ansi@5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -9944,9 +9822,6 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-namespaces@1.1.4: resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} @@ -13864,7 +13739,8 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/parse-json@4.0.2': {} + '@types/parse-json@4.0.2': + optional: true '@types/prop-types@15.7.14': {} @@ -14276,8 +14152,6 @@ snapshots: dependencies: environment: 1.1.0 - ansi-regex@4.1.1: {} - ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -14301,14 +14175,6 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - apisauce@2.1.6: - dependencies: - axios: 0.21.4 - transitivePeerDependencies: - - debug - - app-module-path@2.2.0: {} - aproba@2.0.0: {} argparse@1.0.10: @@ -14408,12 +14274,6 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - axios@0.21.4: - dependencies: - follow-redirects: 1.15.9 - transitivePeerDependencies: - - debug - axios@1.9.0: dependencies: follow-redirects: 1.15.9 @@ -14795,23 +14655,12 @@ snapshots: dependencies: clsx: 2.1.1 - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 cli-spinners@2.9.2: {} - cli-table3@0.6.0: - dependencies: - object-assign: 4.1.1 - string-width: 4.2.3 - optionalDependencies: - colors: 1.4.0 - cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 @@ -14837,12 +14686,19 @@ snapshots: kind-of: 6.0.3 shallow-clone: 3.0.1 - clone@1.0.4: {} - clone@2.1.2: {} clsx@2.1.1: {} + cmd-ts@0.13.0: + dependencies: + chalk: 4.1.2 + debug: 4.4.1(supports-color@8.1.1) + didyoumean: 1.2.2 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - supports-color + cmdk@1.1.1(@types/react-dom@18.3.7(@types/react@18.3.21))(@types/react@18.3.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.21)(react@18.3.1) @@ -14889,8 +14745,6 @@ snapshots: colorette@2.0.20: {} - colors@1.4.0: {} - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -14966,14 +14820,6 @@ snapshots: dependencies: layout-base: 2.0.1 - cosmiconfig@7.0.1: - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 @@ -15019,12 +14865,6 @@ snapshots: transitivePeerDependencies: - encoding - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -15332,10 +15172,6 @@ snapshots: default-shell@2.2.0: {} - defaults@1.0.4: - dependencies: - clone: 1.0.4 - define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -15387,6 +15223,8 @@ snapshots: devtools-protocol@0.0.1367902: {} + didyoumean@1.2.2: {} + diff-match-patch@1.0.5: {} diff-sequences@27.5.1: {} @@ -15493,10 +15331,6 @@ snapshots: dependencies: jake: 10.9.2 - ejs@3.1.8: - dependencies: - jake: 10.9.2 - electron-to-chromium@1.5.152: {} emittery@0.13.1: {} @@ -15523,10 +15357,6 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 - enquirer@2.3.6: - dependencies: - ansi-colors: 4.1.3 - enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -15937,6 +15767,21 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.1 + execa@9.6.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + exenv-es6@1.1.1: {} exit@0.1.2: {} @@ -16189,11 +16034,6 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 - fs-jetpack@4.3.1: - dependencies: - minimatch: 3.1.2 - rimraf: 2.7.1 - fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -16367,41 +16207,6 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - gluegun@5.2.0: - dependencies: - apisauce: 2.1.6 - app-module-path: 2.2.0 - cli-table3: 0.6.0 - colors: 1.4.0 - cosmiconfig: 7.0.1 - cross-spawn: 7.0.3 - ejs: 3.1.8 - enquirer: 2.3.6 - execa: 5.1.1 - fs-jetpack: 4.3.1 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.lowercase: 4.3.0 - lodash.lowerfirst: 4.3.1 - lodash.pad: 4.5.1 - lodash.padend: 4.6.1 - lodash.padstart: 4.6.1 - lodash.repeat: 4.1.0 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.trim: 4.5.1 - lodash.trimend: 4.5.1 - lodash.trimstart: 4.5.1 - lodash.uppercase: 4.3.0 - lodash.upperfirst: 4.3.1 - ora: 4.0.2 - pluralize: 8.0.0 - semver: 7.3.5 - which: 2.0.2 - yargs-parser: 21.1.1 - transitivePeerDependencies: - - debug - google-auth-library@9.15.1: dependencies: base64-js: 1.5.1 @@ -16800,8 +16605,6 @@ snapshots: dependencies: is-docker: 3.0.0 - is-interactive@1.0.0: {} - is-interactive@2.0.0: {} is-map@2.0.3: {} @@ -17766,8 +17569,6 @@ snapshots: lodash-es@4.17.21: {} - lodash.camelcase@4.3.0: {} - lodash.debounce@4.0.8: {} lodash.includes@4.3.0: {} @@ -17782,48 +17583,18 @@ snapshots: lodash.isstring@4.0.1: {} - lodash.kebabcase@4.1.1: {} - - lodash.lowercase@4.3.0: {} - - lodash.lowerfirst@4.3.1: {} - lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} lodash.once@4.1.1: {} - lodash.pad@4.5.1: {} - - lodash.padend@4.6.1: {} - - lodash.padstart@4.6.1: {} - - lodash.repeat@4.1.0: {} - - lodash.snakecase@4.1.1: {} - lodash.sortby@4.7.0: {} lodash.startcase@4.4.0: {} - lodash.trim@4.5.1: {} - - lodash.trimend@4.5.1: {} - - lodash.trimstart@4.5.1: {} - - lodash.uppercase@4.3.0: {} - - lodash.upperfirst@4.3.1: {} - lodash@4.17.21: {} - log-symbols@3.0.0: - dependencies: - chalk: 2.4.2 - log-symbols@4.1.0: dependencies: chalk: 4.1.2 @@ -18712,16 +18483,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - ora@4.0.2: - dependencies: - chalk: 2.4.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - log-symbols: 3.0.0 - strip-ansi: 5.2.0 - wcwidth: 1.0.1 - ora@8.2.0: dependencies: chalk: 5.4.1 @@ -18955,8 +18716,6 @@ snapshots: exsolve: 1.0.5 pathe: 2.0.3 - pluralize@8.0.0: {} - points-on-curve@0.2.0: {} points-on-path@0.2.1: @@ -19501,11 +19260,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -19515,10 +19269,6 @@ snapshots: rfdc@1.4.1: {} - rimraf@2.7.1: - dependencies: - glob: 7.2.3 - rimraf@6.0.1: dependencies: glob: 11.0.2 @@ -19632,10 +19382,6 @@ snapshots: semver@6.3.1: {} - semver@7.3.5: - dependencies: - lru-cache: 6.0.0 - semver@7.7.2: {} send@1.2.0: @@ -20038,10 +19784,6 @@ snapshots: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 - strip-ansi@5.2.0: - dependencies: - ansi-regex: 4.1.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -21025,10 +20767,6 @@ snapshots: dependencies: makeerror: 1.0.12 - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - web-namespaces@1.1.4: {} web-streams-polyfill@3.3.3: @@ -21200,7 +20938,8 @@ snapshots: yallist@5.0.0: {} - yaml@1.10.2: {} + yaml@1.10.2: + optional: true yaml@2.7.1: {} From 1bfc6cc3497b330327ca85acd26d2cf27d21a864 Mon Sep 17 00:00:00 2001 From: cte Date: Tue, 3 Jun 2025 01:31:54 -0700 Subject: [PATCH 9/9] More fixes --- apps/web-evals/src/lib/server/runs.ts | 14 ++-- packages/evals/Dockerfile | 3 +- packages/evals/README.md | 2 +- packages/evals/package.json | 2 +- packages/evals/scripts/copy-run.mts | 112 -------------------------- packages/evals/scripts/enable-wal.mts | 23 ------ packages/evals/scripts/setup.sh | 12 +-- 7 files changed, 14 insertions(+), 154 deletions(-) delete mode 100644 packages/evals/scripts/copy-run.mts delete mode 100644 packages/evals/scripts/enable-wal.mts diff --git a/apps/web-evals/src/lib/server/runs.ts b/apps/web-evals/src/lib/server/runs.ts index 509eba8a18..bb4a2b47d0 100644 --- a/apps/web-evals/src/lib/server/runs.ts +++ b/apps/web-evals/src/lib/server/runs.ts @@ -56,15 +56,11 @@ export async function createRun({ suite, exercises = [], systemPrompt, ...values ? { ...process.env, FOOTGUN_SYSTEM_PROMPT: systemPrompt } : process.env - const childProcess = spawn( - "pnpm", - ["--filter", "@roo-code/evals", "dev", "run", "all", "--runId", run.id.toString()], - { - detached: true, - stdio: ["ignore", logFile, logFile], - env, - }, - ) + const childProcess = spawn("pnpm", ["--filter", "@roo-code/evals", "cli", run.id.toString()], { + detached: true, + stdio: ["ignore", logFile, logFile], + env, + }) childProcess.unref() await _updateRun(run.id, { pid: childProcess.pid }) diff --git a/packages/evals/Dockerfile b/packages/evals/Dockerfile index e906fc7a34..a39c5cb94c 100644 --- a/packages/evals/Dockerfile +++ b/packages/evals/Dockerfile @@ -7,7 +7,6 @@ RUN npm install -g npm-run-all # Install dependencies RUN apt update && apt install -y sudo curl git vim jq - # Create a `vscode` user RUN useradd -m vscode -s /bin/bash && \ echo "vscode ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/vscode && \ @@ -72,7 +71,7 @@ RUN echo 'source $HOME/.cargo/env' >> $HOME/.bashrc COPY --chown=vscode:vscode ./evals/.env ./ # Push database schema - RUN pnpm --filter @roo-code/evals db:push + RUN pnpm --filter @roo-code/evals db:push --force EXPOSE 3000 CMD ["pnpm", "web"] diff --git a/packages/evals/README.md b/packages/evals/README.md index 207e549b36..0aef77f863 100644 --- a/packages/evals/README.md +++ b/packages/evals/README.md @@ -14,7 +14,7 @@ cd Roo-Code Run the setup script: ```sh -cd evals +cd packages/evals ./scripts/setup.sh ``` diff --git a/packages/evals/package.json b/packages/evals/package.json index c73408a65b..eb166a1ee2 100644 --- a/packages/evals/package.json +++ b/packages/evals/package.json @@ -9,7 +9,7 @@ "check-types": "tsc --noEmit", "_test": "dotenvx run -f .env.test -- vitest run", "clean": "rimraf dist .turbo", - "cli": "dotenvx run -f .env.development -- tsx src/cli/index.ts", + "cli": "dotenvx run -f .env.development .env.local -- tsx src/cli/index.ts", "drizzle-kit": "dotenvx run -f .env.development -- tsx node_modules/drizzle-kit/bin.cjs", "drizzle-kit:test": "dotenvx run -f .env.test -- tsx node_modules/drizzle-kit/bin.cjs", "db:start": "docker compose up -d", diff --git a/packages/evals/scripts/copy-run.mts b/packages/evals/scripts/copy-run.mts deleted file mode 100644 index 6212a8c883..0000000000 --- a/packages/evals/scripts/copy-run.mts +++ /dev/null @@ -1,112 +0,0 @@ -import { drizzle } from "drizzle-orm/libsql" -import { eq } from "drizzle-orm" -import pMap from "p-map" - -import { db as sourceDb } from "../src/db/db.js" -import { schema } from "../src/db/schema.js" - -const copyRun = async (runId: number) => { - const destDb = drizzle({ - schema, - connection: { url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN! }, - }) - - const run = await sourceDb.query.runs.findFirst({ - where: eq(schema.runs.id, runId), - with: { taskMetrics: true }, - }) - - if (!run) { - throw new Error(`Run with ID ${runId} not found in source database`) - } - - if (!run.taskMetrics) { - throw new Error("Run is not completed") - } - - console.log(`Copying run ${run.id}`) - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { id: _, ...runTaskMetricsValues } = run.taskMetrics - const [newRunTaskMetrics] = await destDb.insert(schema.taskMetrics).values(runTaskMetricsValues).returning() - - if (!newRunTaskMetrics) { - throw new Error("Failed to insert run taskMetrics") - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { id: __, ...runValues } = run - - const [newRun] = await destDb - .insert(schema.runs) - .values({ ...runValues, taskMetricsId: newRunTaskMetrics.id }) - .returning() - - if (!newRun) { - throw new Error("Failed to insert run") - } - - const tasks = await sourceDb.query.tasks.findMany({ - where: eq(schema.tasks.runId, run.id), - with: { taskMetrics: true }, - }) - - console.log(`Copying ${tasks.length} tasks`) - - await pMap( - tasks, - async (task) => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { id: _, ...newTaskMetricsValues } = task.taskMetrics || { - duration: 0, - tokensIn: 0, - tokensOut: 0, - tokensContext: 0, - cacheWrites: 0, - cacheReads: 0, - cost: 0, - createdAt: new Date(), - } - - const [newTaskMetrics] = await destDb.insert(schema.taskMetrics).values(newTaskMetricsValues).returning() - - if (!newTaskMetrics) { - throw new Error(`Failed to insert taskMetrics for task ${task.id}`) - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { id: __, ...newTaskValues } = task - - const [newTask] = await destDb - .insert(schema.tasks) - .values({ ...newTaskValues, runId: newRun.id, taskMetricsId: newTaskMetrics.id }) - .returning() - - if (!newTask) { - throw new Error(`Failed to insert task ${task.id}`) - } - }, - { concurrency: 25 }, - ) - - console.log(`\nSuccessfully copied run ${runId} with ${tasks.length} tasks`) -} - -const main = async () => { - const runId = parseInt(process.argv[2], 10) - - if (isNaN(runId)) { - console.error("Run ID must be a number") - process.exit(1) - } - - try { - await copyRun(runId) - process.exit(0) - } catch (error) { - console.error(error) - process.exit(1) - } -} - -main() diff --git a/packages/evals/scripts/enable-wal.mts b/packages/evals/scripts/enable-wal.mts deleted file mode 100644 index 567be64ab3..0000000000 --- a/packages/evals/scripts/enable-wal.mts +++ /dev/null @@ -1,23 +0,0 @@ -import { db } from "../src/db/db.js" - -const main = async () => { - // Enable WAL mode for better performance and concurrency. - // https://til.simonwillison.net/sqlite/enabling-wal-mode - try { - const { rows } = await db.$client.execute("PRAGMA journal_mode = WAL;") - const row = rows[0] - - if (row) { - console.log(`SQLite journal mode set to: ${row[0]}`) - process.exit(0) - } else { - console.error("Failed to enable WAL mode: no rows returned") - process.exit(1) - } - } catch (error) { - console.error(error) - process.exit(1) - } -} - -main() diff --git a/packages/evals/scripts/setup.sh b/packages/evals/scripts/setup.sh index 85bf40efd9..33f08bfe09 100755 --- a/packages/evals/scripts/setup.sh +++ b/packages/evals/scripts/setup.sh @@ -318,19 +318,19 @@ else echo "āœ… Done" fi -if [[ ! -s .env ]]; then - cp .env.sample .env || exit 1 +if [[ ! -s .env.local ]]; then + touch .env.local || exit 1 fi echo -n "šŸ—„ļø Syncing Roo Code evals database... " pnpm --filter @roo-code/evals db:push --force &>/dev/null || exit 1 echo "āœ… Done" -if ! grep -q "OPENROUTER_API_KEY" .env; then +if ! grep -q "OPENROUTER_API_KEY" .env.local; then read -p "šŸ” Enter your OpenRouter API key (sk-or-v1-...): " openrouter_api_key echo "šŸ”‘ Validating..." curl --silent --fail https://openrouter.ai/api/v1/key -H "Authorization: Bearer $openrouter_api_key" &>/dev/null || exit 1 - echo "OPENROUTER_API_KEY=$openrouter_api_key" >> .env || exit 1 + echo "OPENROUTER_API_KEY=$openrouter_api_key" >> .env.local || exit 1 fi current_version=$(code --list-extensions --show-versions 2>/dev/null | grep roo) @@ -346,9 +346,9 @@ if ! nc -z localhost 3000; then read -p "🌐 Would you like to start the evals web app? (Y/n): " start_evals if [[ "$start_evals" =~ ^[Yy]|^$ ]]; then - pnpm web + pnpm --filter @roo-code/web-evals dev else - echo "šŸ’” You can start it anytime with 'pnpm web'." + echo "šŸ’” You can start it anytime with 'pnpm --filter @roo-code/web-evals dev'." fi else echo "šŸ‘Ÿ The evals web app is running at http://localhost:3000"