From 44f26a8a07376bd181a9e9c4f00c052710e834f8 Mon Sep 17 00:00:00 2001 From: cte Date: Mon, 24 Mar 2025 15:31:21 -0700 Subject: [PATCH] Move the server to the cli app --- benchmark/apps/cli/package.json | 1 + benchmark/apps/cli/src/index.ts | 24 +- benchmark/apps/web/package.json | 2 +- .../web/src/app/api/runs/[id]/stream/route.ts | 2 +- .../web/src/app/api/runs/[id]/tasks/route.ts | 37 -- benchmark/packages/ipc/package.json | 1 + benchmark/packages/ipc/scripts/client.ts | 29 +- benchmark/packages/ipc/src/index.ts | 138 ++++--- benchmark/packages/runner/package.json | 3 +- benchmark/packages/runner/src/index.ts | 50 ++- benchmark/packages/types/src/index.ts | 45 ++- benchmark/pnpm-lock.yaml | 364 +----------------- 12 files changed, 225 insertions(+), 471 deletions(-) delete mode 100644 benchmark/apps/web/src/app/api/runs/[id]/tasks/route.ts diff --git a/benchmark/apps/cli/package.json b/benchmark/apps/cli/package.json index db48ab0edf..eb46b2585c 100644 --- a/benchmark/apps/cli/package.json +++ b/benchmark/apps/cli/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@benchmark/db": "workspace:^", + "@benchmark/ipc": "workspace:^", "@benchmark/types": "workspace:^", "@vscode/test-electron": "^2.4.0", "execa": "^9.5.2", diff --git a/benchmark/apps/cli/src/index.ts b/benchmark/apps/cli/src/index.ts index d2b7d463ca..a23298f06a 100644 --- a/benchmark/apps/cli/src/index.ts +++ b/benchmark/apps/cli/src/index.ts @@ -7,14 +7,13 @@ import { build, filesystem, GluegunPrompt, GluegunToolbox } from "gluegun" import { runTests } from "@vscode/test-electron" import { execa, parseCommandString } from "execa" -import { type Language, languages } from "@benchmark/types" +import { type Language, languages, TaskEventName } from "@benchmark/types" import { type Run, findRun, createRun, finishRun, createTask, Task, getTasks, updateTask } from "@benchmark/db" +import { IpcServer, IpcMessageType, IpcOrigin } from "@benchmark/ipc" import { __dirname, extensionDevelopmentPath, extensionTestsPath, exercisesPath } from "./paths.js" import { getExercises } from "./exercises.js" -export const isLanguage = (language: string): language is Language => languages.includes(language as Language) - const testCommands: Record = { cpp: { commands: ["cmake -G 'Unix\\ Makefiles' -DEXERCISM_RUN_ALL_TESTS=1 ..", "make"], cwd: "build" }, // timeout 15s bash -c "cd '$dir' && mkdir -p build && cd build && cmake -G 'Unix Makefiles' -DEXERCISM_RUN_ALL_TESTS=1 .. >/dev/null 2>&1 && make >/dev/null 2>&1" go: { commands: ["go test"] }, // timeout 15s bash -c "cd '$dir' && go test > /dev/null 2>&1" @@ -69,7 +68,26 @@ const run = async (toolbox: GluegunToolbox) => { const tasks = await getTasks(run.id) + if (tasks.length === 0) { + throw new Error("No tasks found.") + } + + const server = new IpcServer(run.socketPath, () => {}) + server.listen() + + let currentTask = tasks[0] + + server.on("connect", (clientId) => { + server.send(clientId, { + type: IpcMessageType.TaskEvent, + origin: IpcOrigin.Server, + data: { eventName: TaskEventName.Connect, data: { task: currentTask } }, + }) + }) + for (const task of tasks) { + currentTask = task + await runExercise({ run, task }) const cmd = testCommands[task.language] diff --git a/benchmark/apps/web/package.json b/benchmark/apps/web/package.json index 7c363679de..117d16cab4 100644 --- a/benchmark/apps/web/package.json +++ b/benchmark/apps/web/package.json @@ -25,7 +25,7 @@ "@tanstack/react-query": "^5.69.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "cmdk": "1.0.0", + "cmdk": "^1.1.0", "fuzzysort": "^3.1.0", "lucide-react": "^0.479.0", "next": "15.2.2", diff --git a/benchmark/apps/web/src/app/api/runs/[id]/stream/route.ts b/benchmark/apps/web/src/app/api/runs/[id]/stream/route.ts index 864d2566f4..4a93428890 100644 --- a/benchmark/apps/web/src/app/api/runs/[id]/stream/route.ts +++ b/benchmark/apps/web/src/app/api/runs/[id]/stream/route.ts @@ -25,7 +25,7 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{ console.log(`[stream#${requestId}] connect`) client.on("connect", () => write("connect")) client.on("disconnect", () => write("disconnect")) - client.on("message", write) + client.on("taskEvent", write) request.signal.addEventListener("abort", () => { console.log(`[stream#${requestId}] abort`) diff --git a/benchmark/apps/web/src/app/api/runs/[id]/tasks/route.ts b/benchmark/apps/web/src/app/api/runs/[id]/tasks/route.ts deleted file mode 100644 index 864d2566f4..0000000000 --- a/benchmark/apps/web/src/app/api/runs/[id]/tasks/route.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { NextRequest } from "next/server" - -import { findRun } from "@benchmark/db" -import { IpcClient } from "@benchmark/ipc" - -import { SSEStream } from "@/lib/server/sse-stream" - -export const dynamic = "force-dynamic" - -export async function GET(request: NextRequest, { params }: { params: Promise<{ id: string }> }) { - const { id } = await params - const requestId = crypto.randomUUID() - const stream = new SSEStream() - const run = await findRun(Number(id)) - const client = new IpcClient(run.socketPath, () => {}) - - const write = async (data: string | object) => { - const success = await stream.write(data) - - if (!success) { - client.disconnect() - } - } - - console.log(`[stream#${requestId}] connect`) - client.on("connect", () => write("connect")) - client.on("disconnect", () => write("disconnect")) - client.on("message", write) - - request.signal.addEventListener("abort", () => { - console.log(`[stream#${requestId}] abort`) - client.disconnect() - stream.close().catch(() => {}) - }) - - return stream.getResponse() -} diff --git a/benchmark/packages/ipc/package.json b/benchmark/packages/ipc/package.json index ca8034f2b7..1634cec88e 100644 --- a/benchmark/packages/ipc/package.json +++ b/benchmark/packages/ipc/package.json @@ -22,6 +22,7 @@ "build": "tsup" }, "dependencies": { + "@benchmark/types": "workspace:^", "node-ipc": "^12.0.0", "zod": "^3.24.2" }, diff --git a/benchmark/packages/ipc/scripts/client.ts b/benchmark/packages/ipc/scripts/client.ts index b774a783b6..da74e40ae7 100644 --- a/benchmark/packages/ipc/scripts/client.ts +++ b/benchmark/packages/ipc/scripts/client.ts @@ -1,21 +1,28 @@ -import { IpcClientMessageType, IpcClient } from "../src/index.js" +import { TaskCommandName } from "@benchmark/types" + +import { IpcMessageType, IpcClient, IpcOrigin } from "../src/index.js" async function main(socketPath: string, prompt: string) { try { - const startTime = Date.now() const client = new IpcClient(socketPath) + const clientStartedAt = Date.now() - client.on("message", (data) => console.log(data)) - - while (!client.isConnected) { - if (Date.now() - startTime > 5000) { - throw new Error("Failed to connect to server.") - } - - await new Promise((resolve) => setTimeout(resolve, 1000)) + while (!client.isConnected && Date.now() - clientStartedAt < 10_000) { + await new Promise((resolve) => setTimeout(resolve, 250)) } - client.sendMessage({ type: IpcClientMessageType.StartNewTask, data: { text: prompt } }) + if (!client.isConnected) { + throw new Error("Failed to connect to server.") + } + + client.on("taskEvent", (data) => console.log(data)) + + client.sendMessage({ + type: IpcMessageType.TaskCommand, + origin: IpcOrigin.Client, + clientId: client.clientId!, + data: { commandName: TaskCommandName.StartNewTask, data: { text: prompt } }, + }) while (client.isConnected) { await new Promise((resolve) => setTimeout(resolve, 1000)) diff --git a/benchmark/packages/ipc/src/index.ts b/benchmark/packages/ipc/src/index.ts index fcf11eb738..140ed6b7ad 100644 --- a/benchmark/packages/ipc/src/index.ts +++ b/benchmark/packages/ipc/src/index.ts @@ -5,33 +5,56 @@ import * as crypto from "node:crypto" import ipc from "node-ipc" import { z } from "zod" +import { TaskCommand, taskCommandSchema, TaskEvent, taskEventSchema } from "@benchmark/types" + +/** + * IpcMessage + */ + +export enum IpcMessageType { + Ack = "Ack", + TaskCommand = "TaskCommand", + TaskEvent = "TaskEvent", +} + +export enum IpcOrigin { + Client = "client", + Server = "server", + Relay = "relay", +} + +export const ipcMessageSchema = z.discriminatedUnion("type", [ + z.object({ + type: z.literal(IpcMessageType.Ack), + origin: z.literal(IpcOrigin.Server), + data: z.object({ clientId: z.string() }), + }), + 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.union([z.literal(IpcOrigin.Server), z.literal(IpcOrigin.Relay)]), + relayClientId: z.string().optional(), + data: taskEventSchema, + }), +]) + +export type IpcMessage = z.infer + /** * IpcClient */ -export type IpcClientId = string - -export enum IpcClientMessageType { - Message = "Message", - StartNewTask = "StartNewTask", -} - -export const ipcClientMessageSchema = z.discriminatedUnion("type", [ - z.object({ - type: z.literal(IpcClientMessageType.StartNewTask), - data: z.object({ - text: z.string(), - images: z.array(z.string()).optional(), - }), - }), -]) - -export type IpcClientMessage = z.infer - -export interface IpcClientEvents { +type IpcClientEvents = { connect: [] disconnect: [] - message: [data: IpcServerMessage] + ack: [clientId: string] + taskCommand: [data: TaskCommand] + taskEvent: [data: TaskEvent] } export class IpcClient extends EventEmitter { @@ -39,7 +62,7 @@ export class IpcClient extends EventEmitter { private readonly _log: (...args: unknown[]) => void private _isConnected = false - private _clientId?: IpcClientId + private _clientId?: string constructor(socketPath: string, log = console.log) { super() @@ -82,21 +105,33 @@ export class IpcClient extends EventEmitter { return } - const result = ipcServerMessageSchema.safeParse(data) + const result = ipcMessageSchema.safeParse(data) if (!result.success) { this.log("[client#onMessage] invalid payload", result.error) return } - this.emit("message", result.data) + const payload = result.data + + if (payload.origin === IpcOrigin.Server) { + switch (payload.type) { + case IpcMessageType.Ack: + this._clientId = payload.data.clientId + this.emit("ack", payload.data.clientId) + break + case IpcMessageType.TaskEvent: + this.emit("taskEvent", payload.data) + break + } + } } private log(...args: unknown[]) { this._log(...args) } - public sendMessage(message: IpcClientMessage) { + public sendMessage(message: IpcMessage) { ipc.of.benchmarkServer?.emit("message", message) } @@ -130,31 +165,11 @@ export class IpcClient extends EventEmitter { * IpcServer */ -export enum IpcServerMessageType { - Ack = "Ack", - TaskEvent = "TaskEvent", -} - -export const ipcServerMessageSchema = z.discriminatedUnion("type", [ - z.object({ - type: z.literal(IpcServerMessageType.Ack), - data: z.object({ clientId: z.string() }), - }), - z.object({ - type: z.literal(IpcServerMessageType.TaskEvent), - data: z.object({ - eventName: z.enum(["connect", "taskStarted", "message", "taskTokenUsageUpdated", "taskFinished"]), - data: z.unknown(), - }), - }), -]) - -export type IpcServerMessage = z.infer - type IpcServerEvents = { - connect: [id: IpcClientId] - disconnect: [id: IpcClientId] - message: [data: IpcClientMessage] + connect: [clientId: string] + disconnect: [clientId: string] + taskCommand: [clientId: string, data: TaskCommand] + taskEvent: [relayClientId: string | undefined, data: TaskEvent] } export class IpcServer extends EventEmitter { @@ -190,12 +205,12 @@ export class IpcServer extends EventEmitter { 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: IpcServerMessageType.Ack, data: { clientId } }) + this.send(socket, { type: IpcMessageType.Ack, origin: IpcOrigin.Server, data: { clientId } }) this.emit("connect", clientId) } private onDisconnect(destroyedSocket: Socket) { - let disconnectedClientId: IpcClientId | undefined + let disconnectedClientId: string | undefined for (const [clientId, socket] of this._clients.entries()) { if (socket === destroyedSocket) { @@ -218,7 +233,7 @@ export class IpcServer extends EventEmitter { return } - const result = ipcClientMessageSchema.safeParse(data) + const result = ipcMessageSchema.safeParse(data) if (!result.success) { this.log("[server#onMessage] invalid payload", result.error) @@ -226,19 +241,32 @@ export class IpcServer extends EventEmitter { } const payload = result.data - this.emit("message", payload) + + if (payload.origin === IpcOrigin.Client) { + switch (payload.type) { + case IpcMessageType.TaskCommand: + this.emit("taskCommand", payload.clientId, payload.data) + break + } + } else if (payload.origin === IpcOrigin.Relay) { + switch (payload.type) { + case IpcMessageType.TaskEvent: + this.emit("taskEvent", payload.relayClientId, payload.data) + break + } + } } private log(...args: unknown[]) { this._log(...args) } - public broadcast(message: IpcServerMessage) { + public broadcast(message: IpcMessage) { this.log("[server#broadcast] message =", message) ipc.server.broadcast("message", message) } - public send(client: IpcClientId | Socket, message: IpcServerMessage) { + public send(client: string | Socket, message: IpcMessage) { this.log("[server#send] message =", message) if (typeof client === "string") { diff --git a/benchmark/packages/runner/package.json b/benchmark/packages/runner/package.json index a91cd9b726..1a8088bc2a 100644 --- a/benchmark/packages/runner/package.json +++ b/benchmark/packages/runner/package.json @@ -9,7 +9,8 @@ }, "dependencies": { "@benchmark/db": "workspace:^", - "@benchmark/ipc": "workspace:^" + "@benchmark/ipc": "workspace:^", + "@benchmark/types": "workspace:^" }, "devDependencies": { "@benchmark/eslint-config": "workspace:^", diff --git a/benchmark/packages/runner/src/index.ts b/benchmark/packages/runner/src/index.ts index 411a35ee58..008631030a 100644 --- a/benchmark/packages/runner/src/index.ts +++ b/benchmark/packages/runner/src/index.ts @@ -5,7 +5,8 @@ import * as vscode from "vscode" import { RooCodeAPI } from "../../../../src/exports/roo-code.js" -import { IpcServer, IpcServerMessageType } from "@benchmark/ipc" +import { TaskEventName } from "@benchmark/types" +import { IpcMessageType, IpcOrigin, IpcClient } from "@benchmark/ipc" import { findTask, findRun, createTaskMetrics, updateTask } from "@benchmark/db" import { waitUntilReady, waitUntilCompleted, sleep } from "./utils.js" @@ -87,31 +88,44 @@ export async function run() { await sleep(1_000) /** - * Start the IPC server. + * Start the IPC client. */ - const server = new IpcServer(run.socketPath, () => {}) - server.listen() + const client = new IpcClient(run.socketPath, () => {}) + const clientStartedAt = Date.now() - server.on("connect", (id) => - server.send(id, { type: IpcServerMessageType.TaskEvent, data: { eventName: "connect", data: { task } } }), - ) + while (!client.clientId && Date.now() - clientStartedAt < 10_000) { + await sleep(250) + } + + if (!client.clientId) { + throw new Error("No client ID received.") + } api.on("taskStarted", () => - server.broadcast({ type: IpcServerMessageType.TaskEvent, data: { eventName: "taskStarted", data: { task } } }), + client.sendMessage({ + type: IpcMessageType.TaskEvent, + relayClientId: client.clientId, + origin: IpcOrigin.Relay, + data: { eventName: TaskEventName.TaskStarted, data: { task } }, + }), ) api.on("message", (message) => - server.broadcast({ - type: IpcServerMessageType.TaskEvent, - data: { eventName: "message", data: { task, message } }, + client.sendMessage({ + type: IpcMessageType.TaskEvent, + relayClientId: client.clientId, + origin: IpcOrigin.Relay, + data: { eventName: TaskEventName.Message, data: { task, message } }, }), ) api.on("taskTokenUsageUpdated", (_, usage) => - server.broadcast({ - type: IpcServerMessageType.TaskEvent, - data: { eventName: "taskTokenUsageUpdated", data: { task, usage } }, + client.sendMessage({ + type: IpcMessageType.TaskEvent, + relayClientId: client.clientId, + origin: IpcOrigin.Relay, + data: { eventName: TaskEventName.TaskTokenUsageUpdated, data: { task, usage } }, }), ) @@ -144,9 +158,11 @@ export async function run() { task = await updateTask(task.id, { taskMetricsId: taskMetrics.id, finishedAt: new Date() }) - server.broadcast({ - type: IpcServerMessageType.TaskEvent, - data: { eventName: "taskFinished", data: { task, taskMetrics } }, + client.sendMessage({ + type: IpcMessageType.TaskEvent, + relayClientId: client.clientId, + origin: IpcOrigin.Relay, + data: { eventName: TaskEventName.TaskFinished, data: { task, taskMetrics } }, }) await fs.writeFile(path.resolve(workspacePath, "usage.json"), JSON.stringify({ ...task, ...taskMetrics }, null, 2)) diff --git a/benchmark/packages/types/src/index.ts b/benchmark/packages/types/src/index.ts index df7bcf2780..ff0b111d7f 100644 --- a/benchmark/packages/types/src/index.ts +++ b/benchmark/packages/types/src/index.ts @@ -1,7 +1,50 @@ +import { z } from "zod" + /** - * languages + * Language */ export const languages = ["cpp", "go", "java", "javascript", "python", "rust"] as const export type Language = (typeof languages)[number] + +export const isLanguage = (value: string): value is Language => languages.includes(value as Language) + +/** + * TaskEvent + */ + +export enum TaskEventName { + Connect = "Connect", + TaskStarted = "TaskStarted", + Message = "Message", + TaskTokenUsageUpdated = "TaskTokenUsageUpdated", + TaskFinished = "TaskFinished", +} + +export const taskEventSchema = z.object({ + eventName: z.nativeEnum(TaskEventName), + data: z.unknown(), +}) + +export type TaskEvent = z.infer + +/** + * TaskCommand + */ + +export enum TaskCommandName { + StartNewTask = "StartNewTask", +} + +export const taskCommandSchema = z.discriminatedUnion("commandName", [ + z.object({ + commandName: z.literal(TaskCommandName.StartNewTask), + data: z.object({ + text: z.string(), + images: z.array(z.string()).optional(), + }), + }), +]) + +export type TaskCommand = z.infer diff --git a/benchmark/pnpm-lock.yaml b/benchmark/pnpm-lock.yaml index 332de94316..7495b043e6 100644 --- a/benchmark/pnpm-lock.yaml +++ b/benchmark/pnpm-lock.yaml @@ -44,6 +44,9 @@ importers: '@benchmark/db': specifier: workspace:^ version: link:../../packages/db + '@benchmark/ipc': + specifier: workspace:^ + version: link:../../packages/ipc '@benchmark/types': specifier: workspace:^ version: link:../../packages/types @@ -115,8 +118,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 cmdk: - specifier: 1.0.0 - version: 1.0.0(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: ^1.1.0 + version: 1.1.1(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) fuzzysort: specifier: ^3.1.0 version: 3.1.0 @@ -244,6 +247,9 @@ importers: packages/ipc: dependencies: + '@benchmark/types': + specifier: workspace:^ + version: link:../types node-ipc: specifier: ^12.0.0 version: 12.0.0 @@ -282,6 +288,9 @@ importers: '@benchmark/ipc': specifier: workspace:^ version: link:../ipc + '@benchmark/types': + specifier: workspace:^ + version: link:../types devDependencies: '@benchmark/eslint-config': specifier: workspace:^ @@ -1128,9 +1137,6 @@ packages: '@radix-ui/number@1.1.0': resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} - '@radix-ui/primitive@1.0.1': - resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} - '@radix-ui/primitive@1.1.1': resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} @@ -1160,15 +1166,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-compose-refs@1.0.1': - resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-compose-refs@1.1.1': resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} peerDependencies: @@ -1178,15 +1175,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-context@1.0.1': - resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-context@1.1.1': resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} peerDependencies: @@ -1196,19 +1184,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-dialog@1.0.5': - resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-dialog@1.1.6': resolution: {integrity: sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==} peerDependencies: @@ -1231,19 +1206,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-dismissable-layer@1.0.5': - resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-dismissable-layer@1.1.5': resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==} peerDependencies: @@ -1257,15 +1219,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-focus-guards@1.0.1': - resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-focus-guards@1.1.1': resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} peerDependencies: @@ -1275,19 +1228,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-focus-scope@1.0.4': - resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-focus-scope@1.1.2': resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==} peerDependencies: @@ -1301,15 +1241,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-id@1.0.1': - resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-id@1.1.0': resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} peerDependencies: @@ -1358,19 +1289,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-portal@1.0.4': - resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-portal@1.1.4': resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==} peerDependencies: @@ -1384,19 +1302,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-presence@1.0.1': - resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-presence@1.1.2': resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==} peerDependencies: @@ -1410,19 +1315,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-primitive@1.0.3': - resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-primitive@2.0.2': resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} peerDependencies: @@ -1488,15 +1380,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slot@1.0.2': - resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-slot@1.1.2': resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} peerDependencies: @@ -1519,15 +1402,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-use-callback-ref@1.0.1': - resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-use-callback-ref@1.1.0': resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} peerDependencies: @@ -1537,15 +1411,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-controllable-state@1.0.1': - resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-use-controllable-state@1.1.0': resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} peerDependencies: @@ -1555,15 +1420,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-escape-keydown@1.0.3': - resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-use-escape-keydown@1.1.0': resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} peerDependencies: @@ -1573,15 +1429,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-layout-effect@1.0.1': - resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-use-layout-effect@1.1.0': resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} peerDependencies: @@ -2175,11 +2022,11 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - cmdk@1.0.0: - resolution: {integrity: sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==} + cmdk@1.1.1: + resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 + 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==} @@ -3111,7 +2958,6 @@ packages: libsql@0.4.7: resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==} - cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] lie@3.3.0: @@ -3603,16 +3449,6 @@ packages: '@types/react': optional: true - react-remove-scroll@2.5.5: - resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - react-remove-scroll@2.6.3: resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} engines: {node: '>=10'} @@ -4896,10 +4732,6 @@ snapshots: '@radix-ui/number@1.1.0': {} - '@radix-ui/primitive@1.0.1': - dependencies: - '@babel/runtime': 7.26.10 - '@radix-ui/primitive@1.1.1': {} '@radix-ui/react-arrow@1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': @@ -4923,55 +4755,18 @@ snapshots: '@types/react': 19.0.12 '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-compose-refs@1.0.1(@types/react@19.0.12)(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - react: 19.0.0 - optionalDependencies: - '@types/react': 19.0.12 - '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.12)(react@19.0.0)': dependencies: react: 19.0.0 optionalDependencies: '@types/react': 19.0.12 - '@radix-ui/react-context@1.0.1(@types/react@19.0.12)(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - react: 19.0.0 - optionalDependencies: - '@types/react': 19.0.12 - '@radix-ui/react-context@1.1.1(@types/react@19.0.12)(react@19.0.0)': dependencies: react: 19.0.0 optionalDependencies: '@types/react': 19.0.12 - '@radix-ui/react-dialog@1.0.5(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@19.0.12)(react@19.0.0) - '@radix-ui/react-context': 1.0.1(@types/react@19.0.12)(react@19.0.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@19.0.12)(react@19.0.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-id': 1.0.1(@types/react@19.0.12)(react@19.0.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-slot': 1.0.2(@types/react@19.0.12)(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@19.0.12)(react@19.0.0) - aria-hidden: 1.2.4 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - react-remove-scroll: 2.5.5(@types/react@19.0.12)(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.12 - '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-dialog@1.1.6(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -5000,20 +4795,6 @@ snapshots: optionalDependencies: '@types/react': 19.0.12 - '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@19.0.12)(react@19.0.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@19.0.12)(react@19.0.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@19.0.12)(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.12 - '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -5027,31 +4808,12 @@ snapshots: '@types/react': 19.0.12 '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-focus-guards@1.0.1(@types/react@19.0.12)(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - react: 19.0.0 - optionalDependencies: - '@types/react': 19.0.12 - '@radix-ui/react-focus-guards@1.1.1(@types/react@19.0.12)(react@19.0.0)': dependencies: react: 19.0.0 optionalDependencies: '@types/react': 19.0.12 - '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@19.0.12)(react@19.0.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@19.0.12)(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.12 - '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@19.0.0) @@ -5063,14 +4825,6 @@ snapshots: '@types/react': 19.0.12 '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-id@1.0.1(@types/react@19.0.12)(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@19.0.12)(react@19.0.0) - react: 19.0.0 - optionalDependencies: - '@types/react': 19.0.12 - '@radix-ui/react-id@1.1.0(@types/react@19.0.12)(react@19.0.0)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.12)(react@19.0.0) @@ -5128,16 +4882,6 @@ snapshots: '@types/react': 19.0.12 '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-portal@1.0.4(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.12 - '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-portal@1.1.4(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -5148,17 +4892,6 @@ snapshots: '@types/react': 19.0.12 '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-presence@1.0.1(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@19.0.12)(react@19.0.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@19.0.12)(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.12 - '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-presence@1.1.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@19.0.0) @@ -5169,16 +4902,6 @@ snapshots: '@types/react': 19.0.12 '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-primitive@1.0.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - '@radix-ui/react-slot': 1.0.2(@types/react@19.0.12)(react@19.0.0) - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.12 - '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-primitive@2.0.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/react-slot': 1.1.2(@types/react@19.0.12)(react@19.0.0) @@ -5260,14 +4983,6 @@ snapshots: '@types/react': 19.0.12 '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-slot@1.0.2(@types/react@19.0.12)(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@19.0.12)(react@19.0.0) - react: 19.0.0 - optionalDependencies: - '@types/react': 19.0.12 - '@radix-ui/react-slot@1.1.2(@types/react@19.0.12)(react@19.0.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@19.0.0) @@ -5291,27 +5006,12 @@ snapshots: '@types/react': 19.0.12 '@types/react-dom': 19.0.4(@types/react@19.0.12) - '@radix-ui/react-use-callback-ref@1.0.1(@types/react@19.0.12)(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - react: 19.0.0 - optionalDependencies: - '@types/react': 19.0.12 - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.12)(react@19.0.0)': dependencies: react: 19.0.0 optionalDependencies: '@types/react': 19.0.12 - '@radix-ui/react-use-controllable-state@1.0.1(@types/react@19.0.12)(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@19.0.12)(react@19.0.0) - react: 19.0.0 - optionalDependencies: - '@types/react': 19.0.12 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.0.12)(react@19.0.0)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.12)(react@19.0.0) @@ -5319,14 +5019,6 @@ snapshots: optionalDependencies: '@types/react': 19.0.12 - '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@19.0.12)(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@19.0.12)(react@19.0.0) - react: 19.0.0 - optionalDependencies: - '@types/react': 19.0.12 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.0.12)(react@19.0.0)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.12)(react@19.0.0) @@ -5334,13 +5026,6 @@ snapshots: optionalDependencies: '@types/react': 19.0.12 - '@radix-ui/react-use-layout-effect@1.0.1(@types/react@19.0.12)(react@19.0.0)': - dependencies: - '@babel/runtime': 7.26.10 - react: 19.0.0 - optionalDependencies: - '@types/react': 19.0.12 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.12)(react@19.0.0)': dependencies: react: 19.0.0 @@ -5937,10 +5622,12 @@ snapshots: clsx@2.1.1: {} - cmdk@1.0.0(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + cmdk@1.1.1(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@19.0.0) + '@radix-ui/react-dialog': 1.1.6(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.12)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) transitivePeerDependencies: @@ -7470,17 +7157,6 @@ snapshots: optionalDependencies: '@types/react': 19.0.12 - react-remove-scroll@2.5.5(@types/react@19.0.12)(react@19.0.0): - dependencies: - react: 19.0.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.0.12)(react@19.0.0) - react-style-singleton: 2.2.3(@types/react@19.0.12)(react@19.0.0) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.0.12)(react@19.0.0) - use-sidecar: 1.1.3(@types/react@19.0.12)(react@19.0.0) - optionalDependencies: - '@types/react': 19.0.12 - react-remove-scroll@2.6.3(@types/react@19.0.12)(react@19.0.0): dependencies: react: 19.0.0