diff --git a/.github/workflows/unit-tests-internal.yml b/.github/workflows/unit-tests-internal.yml index 97ba202fcb3..1f7c03a9f26 100644 --- a/.github/workflows/unit-tests-internal.yml +++ b/.github/workflows/unit-tests-internal.yml @@ -96,7 +96,7 @@ jobs: run: pnpm run generate - name: 🧪 Run Internal Unit Tests - run: pnpm run test:internal --reporter=default --reporter=blob --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} + run: pnpm run test:internal --reporter=default --reporter=blob --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} --passWithNoTests - name: Gather all reports if: ${{ !cancelled() }} @@ -145,4 +145,4 @@ jobs: merge-multiple: true - name: Merge reports - run: pnpm dlx vitest@3.1.4 run --merge-reports --pass-with-no-tests + run: pnpm dlx vitest@4.1.7 run --merge-reports --pass-with-no-tests diff --git a/.github/workflows/unit-tests-packages.yml b/.github/workflows/unit-tests-packages.yml index fb3d513aecb..86bb056c277 100644 --- a/.github/workflows/unit-tests-packages.yml +++ b/.github/workflows/unit-tests-packages.yml @@ -96,7 +96,7 @@ jobs: run: pnpm run generate - name: 🧪 Run Package Unit Tests - run: pnpm run test:packages --reporter=default --reporter=blob --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} + run: pnpm run test:packages --reporter=default --reporter=blob --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} --passWithNoTests - name: Gather all reports if: ${{ !cancelled() }} @@ -145,4 +145,4 @@ jobs: merge-multiple: true - name: Merge reports - run: pnpm dlx vitest@3.1.4 run --merge-reports --pass-with-no-tests + run: pnpm dlx vitest@4.1.7 run --merge-reports --pass-with-no-tests diff --git a/.github/workflows/unit-tests-webapp.yml b/.github/workflows/unit-tests-webapp.yml index 79445503669..f8cae37cb3d 100644 --- a/.github/workflows/unit-tests-webapp.yml +++ b/.github/workflows/unit-tests-webapp.yml @@ -96,7 +96,7 @@ jobs: run: pnpm run generate - name: 🧪 Run Webapp Unit Tests - run: pnpm run test:webapp --reporter=default --reporter=blob --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} + run: pnpm run test:webapp --reporter=default --reporter=blob --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} --passWithNoTests env: DATABASE_URL: postgresql://postgres:postgres@localhost:5432/postgres DIRECT_URL: postgresql://postgres:postgres@localhost:5432/postgres @@ -153,4 +153,4 @@ jobs: merge-multiple: true - name: Merge reports - run: pnpm dlx vitest@3.1.4 run --merge-reports --pass-with-no-tests + run: pnpm dlx vitest@4.1.7 run --merge-reports --pass-with-no-tests diff --git a/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.query.ai-generate.tsx b/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.query.ai-generate.tsx index 91ff6218944..c1626b966d2 100644 --- a/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.query.ai-generate.tsx +++ b/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.query.ai-generate.tsx @@ -116,19 +116,19 @@ export async function action({ request, params }: ActionFunctionArgs) { for await (const part of result.fullStream) { switch (part.type) { case "text-delta": { - sendEvent({ type: "thinking", content: part.textDelta }); + sendEvent({ type: "thinking", content: part.text }); break; } case "tool-call": { sendEvent({ type: "tool_call", tool: part.toolName, - args: part.args, + args: part.input, }); // If it's a setTimeFilter call, emit the time_filter event immediately if (part.toolName === "setTimeFilter") { - const args = part.args as { period?: string; from?: string; to?: string }; + const args = part.input as { period?: string; from?: string; to?: string }; sendEvent({ type: "time_filter", filter: { diff --git a/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.test.ai-generate-payload.tsx b/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.test.ai-generate-payload.tsx index 6deadd16d83..d03b1985cb4 100644 --- a/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.test.ai-generate-payload.tsx +++ b/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.test.ai-generate-payload.tsx @@ -1,5 +1,5 @@ import { openai } from "@ai-sdk/openai"; -import { streamText, tool } from "ai"; +import { streamText, stepCountIs, tool } from "ai"; import { type ActionFunctionArgs } from "@remix-run/server-runtime"; import { z } from "zod"; import { env } from "~/env.server"; @@ -105,19 +105,19 @@ export async function action({ request, params }: ActionFunctionArgs) { getTaskSourceCode: tool({ description: "Look up the source code of the task to understand what payload shape it expects. Use this when there is no JSON Schema available and you need to infer the payload structure from the task implementation.", - parameters: z.object({}), + inputSchema: z.object({}), execute: async () => { return getTaskSourceCode(environment.id, environment.type, taskIdentifier); }, }), }, - maxSteps: 3, + stopWhen: stepCountIs(3), }); for await (const part of result.fullStream) { switch (part.type) { case "text-delta": { - sendEvent({ type: "thinking", content: part.textDelta }); + sendEvent({ type: "thinking", content: part.text }); break; } case "tool-call": { diff --git a/apps/webapp/app/v3/services/aiQueryService.server.ts b/apps/webapp/app/v3/services/aiQueryService.server.ts index 3e40fc810de..29007e5c157 100644 --- a/apps/webapp/app/v3/services/aiQueryService.server.ts +++ b/apps/webapp/app/v3/services/aiQueryService.server.ts @@ -5,7 +5,7 @@ import { type TableSchema, type ValidationIssue, } from "@internal/tsql"; -import { streamText, type LanguageModelV1, tool } from "ai"; +import { streamText, stepCountIs, type LanguageModel, tool } from "ai"; import { z } from "zod"; import type { AITimeFilter } from "~/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.query/types"; @@ -55,7 +55,7 @@ export class AIQueryService { constructor( private readonly tableSchema: TableSchema[], - private readonly model: LanguageModelV1 = openai("gpt-4.1-mini") + private readonly model: LanguageModel = openai("gpt-4.1-mini") ) {} /** @@ -66,7 +66,7 @@ export class AIQueryService { return tool({ description: "Set the time filter for the query page UI instead of adding time conditions to the query. ALWAYS use this tool when the user wants to filter by time (e.g., 'last 7 days', 'past hour', 'yesterday'). The UI will apply this filter automatically using the table's time column (triggered_at for runs, bucket_start for metrics). Do NOT add triggered_at or bucket_start to the WHERE clause for time filtering - use this tool instead.", - parameters: z.object({ + inputSchema: z.object({ period: z .string() .optional() @@ -125,7 +125,7 @@ export class AIQueryService { validateTSQLQuery: tool({ description: "Validate a TSQL query for syntax errors and schema compliance. Always use this tool to verify your query before returning it to the user.", - parameters: z.object({ + inputSchema: z.object({ query: z.string().describe("The TSQL query to validate"), }), execute: async ({ query }) => { @@ -135,7 +135,7 @@ export class AIQueryService { getTableSchema: tool({ description: "Get detailed schema information about available tables and columns. Use this to understand what data is available and how to query it.", - parameters: z.object({ + inputSchema: z.object({ tableName: z .string() .optional() @@ -147,7 +147,7 @@ export class AIQueryService { }), setTimeFilter: this.buildSetTimeFilterTool(), }, - maxSteps: 5, + stopWhen: stepCountIs(5), experimental_telemetry: { isEnabled: true, metadata: { @@ -191,7 +191,7 @@ export class AIQueryService { validateTSQLQuery: tool({ description: "Validate a TSQL query for syntax errors and schema compliance. Always use this tool to verify your query before returning it to the user.", - parameters: z.object({ + inputSchema: z.object({ query: z.string().describe("The TSQL query to validate"), }), execute: async ({ query }) => { @@ -201,7 +201,7 @@ export class AIQueryService { getTableSchema: tool({ description: "Get detailed schema information about available tables and columns. Use this to understand what data is available and how to query it.", - parameters: z.object({ + inputSchema: z.object({ tableName: z .string() .optional() @@ -213,7 +213,7 @@ export class AIQueryService { }), setTimeFilter: this.buildSetTimeFilterTool(), }, - maxSteps: 5, + stopWhen: stepCountIs(5), experimental_telemetry: { isEnabled: true, metadata: { diff --git a/apps/webapp/app/v3/services/aiQueryTitleService.server.ts b/apps/webapp/app/v3/services/aiQueryTitleService.server.ts index 983f732453a..5bf216379e8 100644 --- a/apps/webapp/app/v3/services/aiQueryTitleService.server.ts +++ b/apps/webapp/app/v3/services/aiQueryTitleService.server.ts @@ -1,5 +1,5 @@ import { openai } from "@ai-sdk/openai"; -import { generateText, type LanguageModelV1 } from "ai"; +import { generateText, type LanguageModel } from "ai"; import { env } from "~/env.server"; /** @@ -13,7 +13,7 @@ export type AIQueryTitleResult = * Service for generating concise titles for SQL queries using AI */ export class AIQueryTitleService { - constructor(private readonly model: LanguageModelV1 = openai("gpt-4o-mini")) {} + constructor(private readonly model: LanguageModel = openai("gpt-4o-mini")) {} /** * Generate a concise title for a SQL query @@ -45,7 +45,7 @@ Examples: - "Average execution time by task" - "Recent runs with errors"`, prompt: `Generate a concise title for this SQL query:\n\n${query}`, - maxTokens: 50, + maxOutputTokens: 50, experimental_telemetry: { isEnabled: true, metadata: { diff --git a/apps/webapp/app/v3/services/aiRunFilterService.server.ts b/apps/webapp/app/v3/services/aiRunFilterService.server.ts index 4ce12b94557..96b74ab3314 100644 --- a/apps/webapp/app/v3/services/aiRunFilterService.server.ts +++ b/apps/webapp/app/v3/services/aiRunFilterService.server.ts @@ -1,6 +1,6 @@ import { openai } from "@ai-sdk/openai"; import { type TaskTriggerSource } from "@trigger.dev/database"; -import { generateText, LanguageModelV1, Output, tool } from "ai"; +import { generateText, stepCountIs, type LanguageModel, Output, tool } from "ai"; import { z } from "zod"; import { TaskRunListSearchFilters } from "~/components/runs/v3/RunFilters"; import { logger } from "~/services/logger.server"; @@ -14,17 +14,25 @@ const AIFilters = TaskRunListSearchFilters.omit({ to: z.string().optional().describe("The ISO datetime to filter to"), }); +// The response is wrapped in an object with a single `response` field because +// OpenAI structured outputs (both the Chat and Responses APIs) require the root +// JSON Schema to be `type: "object"`. A bare `z.discriminatedUnion` compiles to +// a root-level `anyOf`, which OpenAI rejects ("schema must be of type object"). +// Nesting the union under a property keeps the discriminated-union ergonomics +// while satisfying the root-object constraint. const AIFilterResponseSchema = z - .discriminatedUnion("success", [ - z.object({ - success: z.literal(true), - filters: AIFilters, - }), - z.object({ - success: z.literal(false), - error: z.string().describe("A short human-readable error message"), - }), - ]) + .object({ + response: z.discriminatedUnion("success", [ + z.object({ + success: z.literal(true), + filters: AIFilters, + }), + z.object({ + success: z.literal(false), + error: z.string().describe("A short human-readable error message"), + }), + ]), + }) .describe("The response from the AI filter service"); export interface QueryQueues { @@ -80,7 +88,7 @@ export class AIRunFilterService { queryQueues: QueryQueues; queryTasks: QueryTasks; }, - private readonly model: LanguageModelV1 = openai("gpt-4o-mini") + private readonly model: LanguageModel = openai("gpt-4o-mini") ) {} async call(text: string, environmentId: string): Promise { @@ -88,10 +96,20 @@ export class AIRunFilterService { const result = await generateText({ model: this.model, experimental_output: Output.object({ schema: AIFilterResponseSchema }), + // Disable OpenAI strict JSON-schema mode. The filters schema has many + // optional fields, and strict mode requires every property to appear in + // `required` (it rejects bare optionals). Non-strict mode treats the + // schema as guidance; the `AIFilters.safeParse` below still validates + // the result, so correctness is preserved. + providerOptions: { + openai: { + strictJsonSchema: false, + }, + }, tools: { lookupTags: tool({ description: "Look up available tags in the environment", - parameters: z.object({ + inputSchema: z.object({ query: z.string().optional().describe("Optional search query to filter tags"), }), execute: async ({ query }) => { @@ -101,7 +119,7 @@ export class AIRunFilterService { lookupVersions: tool({ description: "Look up available versions in the environment. If you specify `isCurrent` it will return a single version string if it finds one. Otherwise it will return an array of version strings.", - parameters: z.object({ + inputSchema: z.object({ isCurrent: z .boolean() .optional() @@ -119,7 +137,7 @@ export class AIRunFilterService { }), lookupQueues: tool({ description: "Look up available queues in the environment", - parameters: z.object({ + inputSchema: z.object({ query: z.string().optional().describe("Optional search query to filter queues"), type: z .enum(["task", "custom"]) @@ -135,13 +153,13 @@ export class AIRunFilterService { lookupTasks: tool({ description: "Look up available tasks in the environment. It will return each one. The `slug` is used for the filtering. You also get the triggerSource which is either `STANDARD` or `SCHEDULED`", - parameters: z.object({}), + inputSchema: z.object({}), execute: async () => { return await this.queryFns.queryTasks.query(); }, }), }, - maxSteps: 5, + stopWhen: stepCountIs(5), system: `You are an AI assistant that converts natural language descriptions into structured filter parameters for a task run filtering system. Available filter options: @@ -198,21 +216,24 @@ export class AIRunFilterService { The filters object should only contain the fields that are actually being filtered. Do not include fields with empty arrays or undefined values. - CRITICAL: The response must be a valid JSON object with exactly this structure: + CRITICAL: The response must be a valid JSON object with a single top-level "response" key wrapping this structure: { - "success": true, - "filters": { - // only include fields that have actual values - }, - "explanation": "string explaining what filters were applied" + "response": { + "success": true, + "filters": { + // only include fields that have actual values + } + } } - + or if you can't figure out the filters then return: { - "success": false, - "error": "" + "response": { + "success": false, + "error": "" + } } - + Make the error no more than 8 words. `, prompt: text, @@ -224,19 +245,21 @@ export class AIRunFilterService { }, }); - if (!result.experimental_output.success) { + const output = result.experimental_output.response; + + if (!output.success) { return { success: false, - error: result.experimental_output.error, + error: output.error, }; } // Validate the filters against the schema to catch any issues - const validationResult = AIFilters.safeParse(result.experimental_output.filters); + const validationResult = AIFilters.safeParse(output.filters); if (!validationResult.success) { logger.error("AI filter validation failed", { errors: validationResult.error.errors, - filters: result.experimental_output.filters, + filters: output.filters, }); return { @@ -245,14 +268,35 @@ export class AIRunFilterService { }; } + // `from`/`to` are validated as strings, so a malformed value (e.g. the + // model returning a non-ISO date) would survive safeParse and then + // produce NaN here. NaN serializes to `null` over JSON, silently dropping + // the date constraint while still reporting success — so reject it. + const from = validationResult.data.from + ? new Date(validationResult.data.from).getTime() + : undefined; + const to = validationResult.data.to + ? new Date(validationResult.data.to).getTime() + : undefined; + + if ((from !== undefined && Number.isNaN(from)) || (to !== undefined && Number.isNaN(to))) { + logger.error("AI filter returned an invalid datetime", { + from: validationResult.data.from, + to: validationResult.data.to, + }); + + return { + success: false, + error: "AI response contained an invalid date", + }; + } + return { success: true, filters: { ...validationResult.data, - from: validationResult.data.from - ? new Date(validationResult.data.from).getTime() - : undefined, - to: validationResult.data.to ? new Date(validationResult.data.to).getTime() : undefined, + from, + to, }, }; } catch (error) { diff --git a/apps/webapp/evalite.config.ts b/apps/webapp/evalite.config.ts new file mode 100644 index 00000000000..52f5728b65b --- /dev/null +++ b/apps/webapp/evalite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "evalite/config"; +import tsconfigPaths from "vite-tsconfig-paths"; + +// evalite 1.0 runs its own Vite instance and does not pick up `vitest.config.ts`, +// so the `~/*` -> `./app/*` path alias must be wired in explicitly here (mirrors +// the plugin setup in vitest.config.ts). +export default defineConfig({ + viteConfig: { + // @ts-ignore - vite-tsconfig-paths plugin type vs evalite's bundled vite version + plugins: [tsconfigPaths({ projects: ["./tsconfig.json"] })], + }, +}); diff --git a/apps/webapp/evals/aiQuery.eval.ts b/apps/webapp/evals/aiQuery.eval.ts index b65cf076ddc..801aea7fbf1 100644 --- a/apps/webapp/evals/aiQuery.eval.ts +++ b/apps/webapp/evals/aiQuery.eval.ts @@ -3,7 +3,7 @@ import { Levenshtein } from "autoevals"; import { AIQueryService } from "~/v3/services/aiQueryService.server"; import { runsSchema } from "~/v3/querySchemas"; import dotenv from "dotenv"; -import { traceAISDKModel } from "evalite/ai-sdk"; +import { wrapAISDKModel } from "evalite/ai-sdk"; import { openai } from "@ai-sdk/openai"; dotenv.config({ path: "../../.env" }); @@ -365,7 +365,7 @@ LIMIT 100`, ]; }, task: async (input) => { - const service = new AIQueryService([runsSchema], traceAISDKModel(openai("gpt-4o-mini"))); + const service = new AIQueryService([runsSchema], wrapAISDKModel(openai("gpt-4o-mini"))); const result = await service.call(input); return JSON.stringify(result); diff --git a/apps/webapp/evals/aiRunFilter.eval.ts b/apps/webapp/evals/aiRunFilter.eval.ts index b80328789e2..28c49eceb13 100644 --- a/apps/webapp/evals/aiRunFilter.eval.ts +++ b/apps/webapp/evals/aiRunFilter.eval.ts @@ -8,7 +8,7 @@ import { type QueryVersions, } from "~/v3/services/aiRunFilterService.server"; import dotenv from "dotenv"; -import { traceAISDKModel } from "evalite/ai-sdk"; +import { wrapAISDKModel } from "evalite/ai-sdk"; import { openai } from "@ai-sdk/openai"; dotenv.config({ path: "../../.env" }); @@ -272,7 +272,7 @@ evalite("AI Run Filter", { queryQueues, queryTasks, }, - traceAISDKModel(openai("gpt-4o-mini")) + wrapAISDKModel(openai("gpt-4o-mini")) ); const result = await service.call(input, "123456"); diff --git a/apps/webapp/package.json b/apps/webapp/package.json index 198ce88b9f5..013a9ed7942 100644 --- a/apps/webapp/package.json +++ b/apps/webapp/package.json @@ -27,7 +27,7 @@ "/public/build" ], "dependencies": { - "@ai-sdk/openai": "^1.3.23", + "@ai-sdk/openai": "^3.0.0", "@ai-sdk/react": "^3.0.0", "@ariakit/react": "^0.4.6", "@ariakit/react-core": "^0.4.6", @@ -138,7 +138,7 @@ "@vercel/sdk": "^1.19.1", "@whatwg-node/fetch": "^0.9.14", "@window-splitter/react": "1.1.3", - "ai": "^4.3.19", + "ai": "^6.0.116", "assert-never": "^1.2.1", "aws4fetch": "^1.0.18", "class-variance-authority": "^0.5.2", @@ -286,7 +286,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-turbo": "^2.0.4", - "evalite": "^0.11.4", + "evalite": "1.0.0-beta.16", "npm-run-all": "^4.1.5", "postcss-import": "^16.0.1", "postcss-loader": "^8.1.1", diff --git a/apps/webapp/test/runsReplicationService.part2.test.ts b/apps/webapp/test/runsReplicationService.part2.test.ts index 32bfb5ba73d..bd7348186b3 100644 --- a/apps/webapp/test/runsReplicationService.part2.test.ts +++ b/apps/webapp/test/runsReplicationService.part2.test.ts @@ -513,6 +513,7 @@ describe("RunsReplicationService (part 2/2)", () => { containerTest( "should be able to handle processing transactions for a long period of time", + { timeout: 60_000 * 5 }, async ({ clickhouseContainer, redisOptions, postgresContainer, prisma }) => { await prisma.$executeRawUnsafe(`ALTER TABLE public."TaskRun" REPLICA IDENTITY FULL;`); @@ -614,8 +615,7 @@ describe("RunsReplicationService (part 2/2)", () => { expect(result?.length).toBeGreaterThanOrEqual(50); await runsReplicationService.stop(); - }, - { timeout: 60_000 * 5 } + } ); containerTest( diff --git a/internal-packages/clickhouse/vitest.config.ts b/internal-packages/clickhouse/vitest.config.ts index 1d779c09577..f3687eb4098 100644 --- a/internal-packages/clickhouse/vitest.config.ts +++ b/internal-packages/clickhouse/vitest.config.ts @@ -6,11 +6,6 @@ export default defineConfig({ globals: true, isolate: true, fileParallelism: false, - poolOptions: { - threads: { - singleThread: true, - }, - }, testTimeout: 60_000, coverage: { provider: "v8", diff --git a/internal-packages/llm-model-catalog/package.json b/internal-packages/llm-model-catalog/package.json index ac5cdafc0a6..b38454548b9 100644 --- a/internal-packages/llm-model-catalog/package.json +++ b/internal-packages/llm-model-catalog/package.json @@ -11,7 +11,7 @@ }, "devDependencies": { "@internal/testcontainers": "workspace:*", - "vitest": "3.1.4" + "vitest": "4.1.7" }, "scripts": { "test": "vitest --sequence.concurrent=false --no-file-parallelism", diff --git a/internal-packages/llm-model-catalog/vitest.config.ts b/internal-packages/llm-model-catalog/vitest.config.ts index 474961216bf..9ba46467cad 100644 --- a/internal-packages/llm-model-catalog/vitest.config.ts +++ b/internal-packages/llm-model-catalog/vitest.config.ts @@ -6,11 +6,6 @@ export default defineConfig({ globals: true, isolate: true, fileParallelism: false, - poolOptions: { - threads: { - singleThread: true, - }, - }, testTimeout: 120_000, }, }); diff --git a/internal-packages/replication/vitest.config.ts b/internal-packages/replication/vitest.config.ts index 1d779c09577..f3687eb4098 100644 --- a/internal-packages/replication/vitest.config.ts +++ b/internal-packages/replication/vitest.config.ts @@ -6,11 +6,6 @@ export default defineConfig({ globals: true, isolate: true, fileParallelism: false, - poolOptions: { - threads: { - singleThread: true, - }, - }, testTimeout: 60_000, coverage: { provider: "v8", diff --git a/internal-packages/run-engine/src/engine/tests/utils/engineTest.ts b/internal-packages/run-engine/src/engine/tests/utils/engineTest.ts index 67fb5429219..431a2a22c97 100644 --- a/internal-packages/run-engine/src/engine/tests/utils/engineTest.ts +++ b/internal-packages/run-engine/src/engine/tests/utils/engineTest.ts @@ -1,4 +1,4 @@ -import { TaskContext, test, TestAPI } from "vitest"; +import { TestContext, test, TestAPI } from "vitest"; import { logCleanup, network, @@ -36,7 +36,7 @@ type EngineOptions = { }; }; -const engineOptions = async ({}: TaskContext, use: Use) => { +const engineOptions = async ({}: TestContext, use: Use) => { const options: EngineOptions = { worker: { workers: 1, @@ -74,7 +74,7 @@ const engine = async ( engineOptions: EngineOptions; redisOptions: RedisOptions; prisma: PrismaClient; - } & TaskContext, + } & TestContext, use: Use ) => { const engine = new RunEngine({ diff --git a/internal-packages/run-engine/vitest.config.ts b/internal-packages/run-engine/vitest.config.ts index c364293a434..c00c5438785 100644 --- a/internal-packages/run-engine/vitest.config.ts +++ b/internal-packages/run-engine/vitest.config.ts @@ -6,11 +6,6 @@ export default defineConfig({ globals: true, isolate: true, fileParallelism: false, - poolOptions: { - threads: { - singleThread: true, - }, - }, testTimeout: 120_000, coverage: { provider: "v8", diff --git a/internal-packages/sdk-compat-tests/package.json b/internal-packages/sdk-compat-tests/package.json index e903e69f3f1..445569c957e 100644 --- a/internal-packages/sdk-compat-tests/package.json +++ b/internal-packages/sdk-compat-tests/package.json @@ -15,6 +15,6 @@ "esbuild": "^0.24.0", "execa": "^9.3.0", "typescript": "^5.5.0", - "vitest": "3.1.4" + "vitest": "4.1.7" } } diff --git a/internal-packages/sdk-compat-tests/tsconfig.json b/internal-packages/sdk-compat-tests/tsconfig.json index 05afb6f355a..1ae515e98f9 100644 --- a/internal-packages/sdk-compat-tests/tsconfig.json +++ b/internal-packages/sdk-compat-tests/tsconfig.json @@ -9,7 +9,7 @@ "declaration": false, "outDir": "dist", "rootDir": "src", - "types": ["vitest/globals"] + "types": ["vitest/globals", "node"] }, "include": ["src/**/*.ts"], "exclude": ["node_modules", "dist", "src/fixtures"] diff --git a/internal-packages/testcontainers/src/index.ts b/internal-packages/testcontainers/src/index.ts index f678fa01e7b..95b4ab48e8c 100644 --- a/internal-packages/testcontainers/src/index.ts +++ b/internal-packages/testcontainers/src/index.ts @@ -3,7 +3,7 @@ import { StartedRedisContainer } from "@testcontainers/redis"; import { PrismaClient } from "@trigger.dev/database"; import { RedisOptions } from "ioredis"; import { Network, type StartedNetwork } from "testcontainers"; -import { TaskContext, test } from "vitest"; +import { TestContext, test } from "vitest"; import { createClickHouseContainer, createElectricContainer, @@ -58,7 +58,7 @@ export type { type Use = (value: T) => Promise; -export const network = async ({ task }: TaskContext, use: Use) => { +export const network = async ({ task }: TestContext, use: Use) => { const testName = task.name; logSetup("network: starting", { testName }); @@ -85,7 +85,7 @@ export const network = async ({ task }: TaskContext, use: Use) = }; export const postgresContainer = async ( - { network, task }: { network: StartedNetwork } & TaskContext, + { network, task }: { network: StartedNetwork } & TestContext, use: Use ) => { const { container, metadata } = await withContainerSetup({ @@ -98,7 +98,7 @@ export const postgresContainer = async ( }; export const prisma = async ( - { postgresContainer, task }: { postgresContainer: StartedPostgreSqlContainer } & TaskContext, + { postgresContainer, task }: { postgresContainer: StartedPostgreSqlContainer } & TestContext, use: Use ) => { const testName = task.name; @@ -123,7 +123,7 @@ export const prisma = async ( export const postgresTest = test.extend({ network, postgresContainer, prisma }); export const redisContainer = async ( - { network, task }: { network: StartedNetwork } & TaskContext, + { network, task }: { network: StartedNetwork } & TestContext, use: Use ) => { const { container, metadata } = await withContainerSetup({ @@ -180,7 +180,7 @@ const electricOrigin = async ( postgresContainer, network, task, - }: { postgresContainer: StartedPostgreSqlContainer; network: StartedNetwork } & TaskContext, + }: { postgresContainer: StartedPostgreSqlContainer; network: StartedNetwork } & TestContext, use: Use ) => { const { origin, container, metadata } = await withContainerSetup({ @@ -193,7 +193,7 @@ const electricOrigin = async ( }; const clickhouseContainer = async ( - { network, task }: { network: StartedNetwork } & TaskContext, + { network, task }: { network: StartedNetwork } & TestContext, use: Use ) => { const { container, metadata } = await withContainerSetup({ @@ -206,7 +206,7 @@ const clickhouseContainer = async ( }; const clickhouseClient = async ( - { clickhouseContainer, task }: { clickhouseContainer: StartedClickHouseContainer } & TaskContext, + { clickhouseContainer, task }: { clickhouseContainer: StartedClickHouseContainer } & TestContext, use: Use ) => { const testName = task.name; @@ -268,7 +268,7 @@ export const containerWithElectricAndRedisTest = test.extend ) => { const { container, metadata } = await withContainerSetup({ diff --git a/internal-packages/testcontainers/src/logs.ts b/internal-packages/testcontainers/src/logs.ts index 1a844c3df94..865a6592bd5 100644 --- a/internal-packages/testcontainers/src/logs.ts +++ b/internal-packages/testcontainers/src/logs.ts @@ -1,5 +1,5 @@ import { env, isCI } from "std-env"; -import { TaskContext } from "vitest"; +import { TestContext } from "vitest"; import { DockerDiagnostics, getDockerDiagnostics } from "./docker"; import { StartedTestContainer } from "testcontainers"; @@ -31,7 +31,7 @@ export function getContainerMetadata(container: StartedTestContainer) { }; } -export function getTaskMetadata(task: TaskContext["task"]) { +export function getTaskMetadata(task: TestContext["task"]) { return { testName: task.name, }; diff --git a/internal-packages/testcontainers/src/utils.ts b/internal-packages/testcontainers/src/utils.ts index eca9b06d388..5f689bc5bfe 100644 --- a/internal-packages/testcontainers/src/utils.ts +++ b/internal-packages/testcontainers/src/utils.ts @@ -7,7 +7,7 @@ import path from "path"; import { isDebug } from "std-env"; import { GenericContainer, StartedNetwork, StartedTestContainer, Wait } from "testcontainers"; import { x } from "tinyexec"; -import type { TaskContext } from "vitest"; +import type { TestContext } from "vitest"; import { ClickHouseContainer, runClickhouseMigrations } from "./clickhouse"; import { MinIOContainer } from "./minio"; import { getContainerMetadata, getTaskMetadata, logCleanup, logSetup } from "./logs"; @@ -209,7 +209,7 @@ export async function withContainerSetup({ setup, }: { name: string; - task: TaskContext["task"]; + task: TestContext["task"]; setup: Promise; }): Promise }> { const testName = task.name; @@ -236,7 +236,7 @@ export async function useContainer( container, task, use, - }: { container: TContainer; task: TaskContext["task"]; use: () => Promise } + }: { container: TContainer; task: TestContext["task"]; use: () => Promise } ) { const metadata = { ...getTaskMetadata(task), diff --git a/internal-packages/tsql/vitest.config.ts b/internal-packages/tsql/vitest.config.ts index 1d779c09577..f3687eb4098 100644 --- a/internal-packages/tsql/vitest.config.ts +++ b/internal-packages/tsql/vitest.config.ts @@ -6,11 +6,6 @@ export default defineConfig({ globals: true, isolate: true, fileParallelism: false, - poolOptions: { - threads: { - singleThread: true, - }, - }, testTimeout: 60_000, coverage: { provider: "v8", diff --git a/package.json b/package.json index 5ba3179da15..e1e24f21a31 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "@playwright/test": "^1.36.2", "@trigger.dev/database": "workspace:*", "@types/node": "20.14.14", - "@vitest/coverage-v8": "3.1.4", + "@vitest/coverage-v8": "4.1.7", "autoprefixer": "^10.4.12", "eslint-plugin-turbo": "^2.0.4", "lefthook": "^1.11.3", @@ -65,7 +65,7 @@ "turbo": "^1.10.3", "typescript": "5.5.4", "vite-tsconfig-paths": "^4.0.5", - "vitest": "3.1.4" + "vitest": "4.1.7" }, "packageManager": "pnpm@10.33.2", "dependencies": { diff --git a/packages/cli-v3/e2e/e2e.test.ts b/packages/cli-v3/e2e/e2e.test.ts index 3ddf7419623..1d1849f5fcd 100644 --- a/packages/cli-v3/e2e/e2e.test.ts +++ b/packages/cli-v3/e2e/e2e.test.ts @@ -104,10 +104,17 @@ describe.concurrent("buildWorker", async () => { for (let testCase of testCases) { test.extend({ + // Seed `workspaceRelativeDir` before the spread so the key always exists. + // vitest 4 resolves fixture-to-fixture dependencies strictly at + // `test.extend()` time: the `workspaceDir` fixture below destructures + // `workspaceRelativeDir`, so it must be a defined fixture even for test + // cases that don't set it (it's an optional `TestCase` field). The spread + // overrides this default when the case provides its own value. + workspaceRelativeDir: "", ...testCase, fixtureDir: async ({ id }, use) => await use(path.resolve(path.join(process.cwd(), "e2e/fixtures", id))), - workspaceDir: async ({ fixtureDir, workspaceRelativeDir = "" }, use) => + workspaceDir: async ({ fixtureDir, workspaceRelativeDir }, use) => await use(path.resolve(path.join(fixtureDir, workspaceRelativeDir))), packageManager: async ({ workspaceDir }, use) => await use(await parsePackageManager(options.packageManager, workspaceDir)), diff --git a/packages/redis-worker/vitest.config.ts b/packages/redis-worker/vitest.config.ts index dfe0df27462..c4d431e10ff 100644 --- a/packages/redis-worker/vitest.config.ts +++ b/packages/redis-worker/vitest.config.ts @@ -5,10 +5,5 @@ export default defineConfig({ include: ["**/*.test.ts"], globals: true, fileParallelism: false, - poolOptions: { - threads: { - singleThread: true, - }, - }, }, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 58a5f3f8012..8a38560f8ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -101,8 +101,8 @@ importers: specifier: 20.14.14 version: 20.14.14 '@vitest/coverage-v8': - specifier: 3.1.4 - version: 3.1.4(vitest@3.1.4(@types/debug@4.1.12)(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3)) + specifier: 4.1.7 + version: 4.1.7(vitest@4.1.7) autoprefixer: specifier: ^10.4.12 version: 10.4.13(postcss@8.5.10) @@ -131,8 +131,8 @@ importers: specifier: ^4.0.5 version: 4.0.5(typescript@5.5.4) vitest: - specifier: 3.1.4 - version: 3.1.4(@types/debug@4.1.12)(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3) + specifier: 4.1.7 + version: 4.1.7(@opentelemetry/api@1.9.0)(@types/node@20.14.14)(@vitest/coverage-v8@4.1.7)(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3)) apps/coordinator: dependencies: @@ -243,8 +243,8 @@ importers: apps/webapp: dependencies: '@ai-sdk/openai': - specifier: ^1.3.23 - version: 1.3.23(zod@3.25.76) + specifier: ^3.0.0 + version: 3.0.41(zod@3.25.76) '@ai-sdk/react': specifier: ^3.0.0 version: 3.0.170(react@18.2.0)(zod@3.25.76) @@ -579,8 +579,8 @@ importers: specifier: 1.1.3 version: 1.1.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) ai: - specifier: ^4.3.19 - version: 4.3.19(react@18.2.0)(zod@3.25.76) + specifier: ^6.0.116 + version: 6.0.168(zod@3.25.76) assert-never: specifier: ^1.2.1 version: 1.2.1 @@ -1015,8 +1015,8 @@ importers: specifier: ^2.0.4 version: 2.0.5(eslint@8.31.0) evalite: - specifier: ^0.11.4 - version: 0.11.4(bufferutil@4.0.9) + specifier: 1.0.0-beta.16 + version: 1.0.0-beta.16(ai@6.0.168(zod@3.25.76))(better-sqlite3@11.10.0)(bufferutil@4.0.9) npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -1190,8 +1190,8 @@ importers: specifier: workspace:* version: link:../testcontainers vitest: - specifier: 3.1.4 - version: 3.1.4(@types/debug@4.1.12)(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3) + specifier: 4.1.7 + version: 4.1.7(@opentelemetry/api@1.9.0)(@types/node@20.14.14)(@vitest/coverage-v8@4.1.7)(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3)) internal-packages/otlp-importer: dependencies: @@ -1370,8 +1370,8 @@ importers: specifier: 5.5.4 version: 5.5.4 vitest: - specifier: 3.1.4 - version: 3.1.4(@types/debug@4.1.12)(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3) + specifier: 4.1.7 + version: 4.1.7(@opentelemetry/api@1.9.0)(@types/node@20.14.14)(@vitest/coverage-v8@4.1.7)(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3)) internal-packages/testcontainers: dependencies: @@ -2255,7 +2255,7 @@ importers: version: 7.8.0 '@prisma/client': specifier: ^7.4.2 - version: 7.8.0(prisma@7.8.0(@types/react-dom@19.0.4(@types/react@19.2.14))(@types/react@19.2.14)(better-sqlite3@11.10.0)(magicast@0.3.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.5.4))(typescript@5.5.4) + version: 7.8.0(prisma@7.8.0(@types/react-dom@19.0.4(@types/react@19.2.14))(@types/react@19.2.14)(better-sqlite3@11.10.0)(magicast@0.5.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.5.4))(typescript@5.5.4) '@trigger.dev/sdk': specifier: workspace:* version: link:../../packages/trigger-sdk @@ -2310,7 +2310,7 @@ importers: version: 5.0.6 prisma: specifier: ^7.4.2 - version: 7.8.0(@types/react-dom@19.0.4(@types/react@19.2.14))(@types/react@19.2.14)(better-sqlite3@11.10.0)(magicast@0.3.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.5.4) + version: 7.8.0(@types/react-dom@19.0.4(@types/react@19.2.14))(@types/react@19.2.14)(better-sqlite3@11.10.0)(magicast@0.5.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.5.4) tailwindcss: specifier: ^4 version: 4.0.17 @@ -2321,8 +2321,8 @@ importers: specifier: 5.5.4 version: 5.5.4 vitest: - specifier: ^3.1.4 - version: 3.1.4(@types/debug@4.1.12)(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3) + specifier: ^4.1.7 + version: 4.1.7(@opentelemetry/api@1.9.0)(@types/node@20.14.14)(@vitest/coverage-v8@4.1.7)(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3)) references/bun-catalog: dependencies: @@ -2698,7 +2698,7 @@ importers: version: link:../../packages/trigger-sdk '@uploadthing/react': specifier: ^7.0.3 - version: 7.0.3(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(react@18.3.1)(uploadthing@7.1.0(express@5.2.1)(fastify@5.4.0)(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(tailwindcss@3.4.1)) + version: 7.0.3(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(react@18.3.1)(uploadthing@7.1.0(express@5.2.1)(fastify@5.8.5)(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(tailwindcss@3.4.1)) ai: specifier: ^4.0.0 version: 4.0.0(react@18.3.1)(zod@3.25.76) @@ -2737,7 +2737,7 @@ importers: version: 1.0.7(tailwindcss@3.4.1) uploadthing: specifier: ^7.1.0 - version: 7.1.0(express@5.2.1)(fastify@5.4.0)(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(tailwindcss@3.4.1) + version: 7.1.0(express@5.2.1)(fastify@5.8.5)(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(tailwindcss@3.4.1) zod: specifier: 3.25.76 version: 3.25.76 @@ -3151,12 +3151,6 @@ packages: peerDependencies: zod: ^3.0.0 - '@ai-sdk/openai@1.3.23': - resolution: {integrity: sha512-86U7rFp8yacUAOE/Jz8WbGcwMCqWvjK33wk5DXkfnAOEn3mx2r7tNSJdjukQFZbAK97VMXGPPHxF+aEARDXRXQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - '@ai-sdk/openai@1.3.3': resolution: {integrity: sha512-CH57tonLB4DwkwqwnMmTCoIOR7cNW3bP5ciyloI7rBGJS/Bolemsoo+vn5YnwkyT9O1diWJyvYeTh7A4UfiYOw==} engines: {node: '>=18'} @@ -3205,12 +3199,6 @@ packages: peerDependencies: zod: ^3.23.8 - '@ai-sdk/provider-utils@2.2.8': - resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.23.8 - '@ai-sdk/provider-utils@3.0.12': resolution: {integrity: sha512-ZtbdvYxdMoria+2SlNarEk6Hlgyf+zzcznlD55EAl+7VZvJaSg2sqPvwArY7L6TfDEDJsnCq0fdhBSkYo0Xqdg==} engines: {node: '>=18'} @@ -3253,10 +3241,6 @@ packages: resolution: {integrity: sha512-0M+qjp+clUD0R1E5eWQFhxEvWLNaOtGQRUaBn8CUABnSKredagq92hUS9VjOzGsTm37xLfpaxl97AVtbeOsHew==} engines: {node: '>=18'} - '@ai-sdk/provider@1.1.3': - resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==} - engines: {node: '>=18'} - '@ai-sdk/provider@2.0.0': resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} engines: {node: '>=18'} @@ -3281,16 +3265,6 @@ packages: zod: optional: true - '@ai-sdk/react@1.2.12': - resolution: {integrity: sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.23.8 - peerDependenciesMeta: - zod: - optional: true - '@ai-sdk/react@1.2.2': resolution: {integrity: sha512-rxyNTFjUd3IilVOJFuUJV5ytZBYAIyRi50kFS2gNmSEiG4NHMBBm31ddrxI/i86VpY8gzZVp1/igtljnWBihUA==} engines: {node: '>=18'} @@ -3322,12 +3296,6 @@ packages: peerDependencies: zod: ^3.23.8 - '@ai-sdk/ui-utils@1.2.11': - resolution: {integrity: sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.23.8 - '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -4044,6 +4012,10 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} @@ -4052,6 +4024,10 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.22.15': resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} @@ -4079,6 +4055,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-syntax-decorators@7.22.10': resolution: {integrity: sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==} engines: {node: '>=6.9.0'} @@ -4185,6 +4166,10 @@ packages: resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + '@balena/dockerignore@1.0.2': resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} @@ -5422,8 +5407,8 @@ packages: '@fastify/accept-negotiator@2.0.1': resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} - '@fastify/ajv-compiler@4.0.2': - resolution: {integrity: sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ==} + '@fastify/ajv-compiler@4.0.5': + resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==} '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} @@ -5450,8 +5435,8 @@ packages: '@fastify/static@8.2.0': resolution: {integrity: sha512-PejC/DtT7p1yo3p+W7LiUtLMsV8fEvxAK15sozHy9t8kwo5r0uLYmhV/inURmGz1SkHZFz/8CNtHLPyhKcx4SQ==} - '@fastify/websocket@11.0.1': - resolution: {integrity: sha512-44yam5+t1I9v09hWBYO+ezV88+mb9Se2BjgERtzB/68+0mGeTfFkjBeDBe2y+ZdiPpeO2rhevhdnfrBm5mqH+Q==} + '@fastify/websocket@11.2.0': + resolution: {integrity: sha512-3HrDPbAG1CzUCqnslgJxppvzaAZffieOVbLp1DAy1huCSynUWPifSvfdEDUR8HlJLp3sp1A36uOM2tJogADS8w==} '@fingerprintjs/fingerprintjs-pro-react@2.6.3': resolution: {integrity: sha512-/axCq/cfjZkIM+WFZM/05FQvqtNfdKbIFKU6b2yrwPKlgT8BqWkAq8XvFX6JCPlq8/udVLJjFEDCK+1JQh1L6g==} @@ -5920,10 +5905,6 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -7053,6 +7034,9 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -10473,6 +10457,9 @@ packages: '@types/caseless@0.12.5': resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/compression@1.7.2': resolution: {integrity: sha512-lwEL4M/uAGWngWFLSG87ZDr2kLrbuR8p7X+QZB1OQlT+qkHsCPDVFnHPyXf4Vyl4yDDorNY+mAhosxkCvppatg==} @@ -10603,6 +10590,9 @@ packages: resolution: {integrity: sha512-7MpxcJPHqQ637FCZwJLtJMaDZkcD/iyUxj0m8A+m06slFeqRiK9QtgEyuocWNRbEtCrOZOEbZPTSSR88hMZVsg==} deprecated: This is a stub types definition. decimal.js provides its own type definitions, so you do not need this installed. + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/diff-match-patch@1.0.36': resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} @@ -11100,20 +11090,20 @@ packages: resolution: {integrity: sha512-K4rmtUT6t1vX06tiY44ot8A7W1FKN7g/tMkE7yZghCgNQ8b30SzljBd4ni8RNp2pJzM/HrZmphRDeIArO7oZuw==} hasBin: true - '@vitest/coverage-v8@3.1.4': - resolution: {integrity: sha512-G4p6OtioySL+hPV7Y6JHlhpsODbJzt1ndwHAFkyk6vVjpK03PFsKnauZIzcd0PrK4zAbc5lc+jeZ+eNGiMA+iw==} + '@vitest/coverage-v8@4.1.7': + resolution: {integrity: sha512-qsYPeXc5Q9dFLd1i8Ap+Bx8sQgcp+rFVQo4R0dDsWNBzl26ldVF1qOO+RL24K7FDrR6pA+50XedRLSoSG24bVQ==} peerDependencies: - '@vitest/browser': 3.1.4 - vitest: 3.1.4 + '@vitest/browser': 4.1.7 + vitest: 4.1.7 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@3.1.4': - resolution: {integrity: sha512-xkD/ljeliyaClDYqHPNCiJ0plY5YIcM0OlRiZizLhlPmpXWpxnGMyTZXOHFhFeG7w9P5PBeL4IdtJ/HeQwTbQA==} + '@vitest/expect@4.1.7': + resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} - '@vitest/mocker@3.1.4': - resolution: {integrity: sha512-8IJ3CvwtSw/EFXqWFL8aCMu+YyYXG2WUSrQbViOZkWTKTVicVwZ/YiEZDSqD00kX+v/+W+OnxhNWoeVKorHygA==} + '@vitest/mocker@4.1.7': + resolution: {integrity: sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==} peerDependencies: msw: ^2.4.9 vite: ^6.4.2 @@ -11123,29 +11113,20 @@ packages: vite: optional: true - '@vitest/pretty-format@2.1.9': - resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} - - '@vitest/pretty-format@3.1.4': - resolution: {integrity: sha512-cqv9H9GvAEoTaoq+cYqUTCGscUjKqlJZC7PRwY5FMySVj5J+xOm1KQcCiYHJOEzOKRUhLH4R2pTwvFlWCEScsg==} - - '@vitest/runner@2.1.9': - resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} + '@vitest/pretty-format@4.1.7': + resolution: {integrity: sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==} - '@vitest/runner@3.1.4': - resolution: {integrity: sha512-djTeF1/vt985I/wpKVFBMWUlk/I7mb5hmD5oP8K9ACRmVXgKTae3TUOtXAEBfslNKPzUQvnKhNd34nnRSYgLNQ==} + '@vitest/runner@4.1.7': + resolution: {integrity: sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==} - '@vitest/snapshot@3.1.4': - resolution: {integrity: sha512-JPHf68DvuO7vilmvwdPr9TS0SuuIzHvxeaCkxYcCD4jTk67XwL45ZhEHFKIuCm8CYstgI6LZ4XbwD6ANrwMpFg==} + '@vitest/snapshot@4.1.7': + resolution: {integrity: sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==} - '@vitest/spy@3.1.4': - resolution: {integrity: sha512-Xg1bXhu+vtPXIodYN369M86K8shGLouNjoVI78g8iAq2rFoHFdajNvJJ5A/9bPMFcfQqdaCpOgWKEoMQg/s0Yg==} + '@vitest/spy@4.1.7': + resolution: {integrity: sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==} - '@vitest/utils@2.1.9': - resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - - '@vitest/utils@3.1.4': - resolution: {integrity: sha512-yriMuO1cfFhmiGc8ataN51+9ooHRuURdfAZfwFd3usWynjzpLslZdYnRegTv32qdgtJTsj15FoeZe2g15fY1gg==} + '@vitest/utils@4.1.7': + resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==} '@web3-storage/multipart-parser@1.0.0': resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} @@ -11405,16 +11386,6 @@ packages: react: optional: true - ai@4.3.19: - resolution: {integrity: sha512-dIE2bfNpqHN3r6IINp9znguYdhIOheKW2LDigAMrgt/upT3B8eBGPSCblENvaZGoq+hxaN9fSMzjWpbqloP+7Q==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.23.8 - peerDependenciesMeta: - react: - optional: true - ai@5.0.14: resolution: {integrity: sha512-xiujFa879skB7YxGzbeHAxepsr6AEaWcHPXrc5a9MRM6p4WdVAwn6mGwVZkBnhqGfZtXFr4LUnU2ayvcjWp5ig==} engines: {node: '>=18'} @@ -11624,6 +11595,9 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} + ast-v8-to-istanbul@1.0.2: + resolution: {integrity: sha512-dKmJxJsGItLmc5CYZKuEjuG6GnBs6PG4gohMhyFOWKaNQoYCuRZJDECaBlHmcG0lv2wc2E0uU8lESmBEumC3DQ==} + astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -12017,9 +11991,9 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -12060,10 +12034,6 @@ packages: resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} engines: {pnpm: '>=8'} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - cheminfo-types@1.8.1: resolution: {integrity: sha512-FRcpVkox+cRovffgqNdDFQ1eUav+i/Vq/CUd1hcfEl2bevntFlzznL+jE8g4twl6ElB7gZjCko6pYpXyMn+6dA==} @@ -12346,6 +12316,9 @@ packages: convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -12848,10 +12821,6 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -13243,6 +13212,9 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -13682,9 +13654,17 @@ packages: resolution: {integrity: sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==} engines: {node: '>= 0.8'} - evalite@0.11.4: - resolution: {integrity: sha512-t12sJlfkxo0Hon6MYCwOd2qliAjGObrnGL6hYXP9h8AiNAVQCiyGrFrqtOH8TIhM0kgaGrq3s/DeZ679Sr8ipw==} + evalite@1.0.0-beta.16: + resolution: {integrity: sha512-14G+Y1Rqi9xOJck1vykPwaRSPSPpSvaklMS9WjJA04KWIOUwrT3jHUyA/6GkMC0twi1vdkssGS5FstNtVqVCWQ==} hasBin: true + peerDependencies: + ai: ^6 + better-sqlite3: ^11.6.0 + peerDependenciesMeta: + ai: + optional: true + better-sqlite3: + optional: true event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} @@ -13751,8 +13731,8 @@ packages: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - expect-type@1.2.1: - resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} express-rate-limit@7.5.0: @@ -13843,10 +13823,6 @@ packages: fast-querystring@1.1.2: resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} - fast-redact@3.5.0: - resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} - engines: {node: '>=6'} - fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} @@ -13876,8 +13852,8 @@ packages: fastify-plugin@5.0.1: resolution: {integrity: sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==} - fastify@5.4.0: - resolution: {integrity: sha512-I4dVlUe+WNQAhKSyv15w+dwUh2EPiEl4X2lGYMmNSgF83WzTMAPKGdWEv5tPsCQOb+SOZwz8Vlta2vF+OeDgRw==} + fastify@5.8.5: + resolution: {integrity: sha512-Yqptv59pQzPgQUSIm87hMqHJmdkb1+GPxdE6vW6FRyVE9G86mt7rOghitiU4JHRaTyDUk9pfeKmDeu70lAwM4Q==} fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} @@ -13915,6 +13891,15 @@ packages: picomatch: optional: true + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^4.0.4 + peerDependenciesMeta: + picomatch: + optional: true + fflate@0.4.8: resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} @@ -14950,12 +14935,8 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} jackspeak@2.3.6: @@ -14988,10 +14969,6 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} - hasBin: true - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -15034,6 +15011,9 @@ packages: js-sdsl@4.2.0: resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -15503,9 +15483,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} - lowercase-keys@1.0.1: resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} engines: {node: '>=0.10.0'} @@ -15572,9 +15549,6 @@ packages: resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} hasBin: true - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -15584,6 +15558,9 @@ packages: magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} + make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -16588,6 +16565,9 @@ packages: obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + octokit@3.2.2: resolution: {integrity: sha512-7Abo3nADdja8l/aglU6Y3lpnHSfv0tw7gFPiqzry/yCU+2gTAX7R1roJ8hJrxIK+S1j+7iqRJXtmuHJ/UDsBhQ==} engines: {node: '>= 18'} @@ -16955,10 +16935,6 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} - peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} @@ -17097,14 +17073,14 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pino-abstract-transport@2.0.0: - resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + pino-abstract-transport@3.0.0: + resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} pino-std-serializers@7.0.0: resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - pino@9.7.0: - resolution: {integrity: sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==} + pino@10.3.1: + resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} hasBin: true pirates@4.0.5: @@ -17940,6 +17916,9 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} + real-require@1.0.0: + resolution: {integrity: sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==} + recharts-scale@0.4.5: resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} @@ -18758,6 +18737,9 @@ packages: std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + stream-buffers@3.0.2: resolution: {integrity: sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==} engines: {node: '>= 0.10.0'} @@ -19146,10 +19128,6 @@ packages: engines: {node: '>=10'} hasBin: true - test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} - testcontainers@11.14.0: resolution: {integrity: sha512-r9pniwv/iwzyHaI7gwAvAm4Y+IvjJg3vBWdjrUCaDMc2AXIr4jKbq7jJO18Mw2ybs73pZy1Aj7p/4RVBGMRWjg==} @@ -19166,8 +19144,9 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - thread-stream@3.1.0: - resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + thread-stream@4.2.0: + resolution: {integrity: sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==} + engines: {node: '>=20'} throttle-debounce@3.0.1: resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} @@ -19207,6 +19186,10 @@ packages: tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + tinyexec@1.2.3: + resolution: {integrity: sha512-g62dB+w1/OEFnPvmX0yd/HnetYITOL+1nJW7kitOycOeAvmbWC/nu0fwmmQ/kupNojqExzyC/T++pST/jRJ2mQ==} + engines: {node: '>=18'} + tinyglobby@0.2.10: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} @@ -19215,6 +19198,10 @@ packages: resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + tinyglobby@0.2.2: resolution: {integrity: sha512-mZ2sDMaySvi1PkTp4lTo1In2zjU+cY8OvZsfwrDrx3YGRbXPX1/cbPwCR9zkm3O/Fz9Jo0F1HNgIQ1b8BepqyQ==} engines: {node: '>=12.0.0'} @@ -19222,20 +19209,8 @@ packages: tinygradient@1.1.5: resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} - engines: {node: '>=14.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==} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} tldts-core@7.0.7: @@ -19994,26 +19969,39 @@ packages: yaml: optional: true - vitest@3.1.4: - resolution: {integrity: sha512-Ta56rT7uWxCSJXlBtKgIlApJnT6e6IGmTYxYcmxjJ4ujuZDI59GUQgVDObXXJujOmPDBYXHK1qmaGtneu6TNIQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest@4.1.7: + resolution: {integrity: sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 + '@opentelemetry/api': ^1.9.0 '@types/node': 20.14.14 - '@vitest/browser': 3.1.4 - '@vitest/ui': 3.1.4 + '@vitest/browser-playwright': 4.1.7 + '@vitest/browser-preview': 4.1.7 + '@vitest/browser-webdriverio': 4.1.7 + '@vitest/coverage-istanbul': 4.1.7 + '@vitest/coverage-v8': 4.1.7 + '@vitest/ui': 4.1.7 happy-dom: '*' jsdom: '*' + vite: ^6.4.2 peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/debug': + '@opentelemetry/api': optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': optional: true '@vitest/ui': optional: true @@ -20189,18 +20177,6 @@ packages: utf-8-validate: optional: true - ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.11.0: resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} engines: {node: '>=10.0.0'} @@ -20446,12 +20422,6 @@ snapshots: '@ai-sdk/provider-utils': 2.0.0(zod@3.25.76) zod: 3.25.76 - '@ai-sdk/openai@1.3.23(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) - zod: 3.25.76 - '@ai-sdk/openai@1.3.3(zod@3.25.76)': dependencies: '@ai-sdk/provider': 1.1.0 @@ -20501,13 +20471,6 @@ snapshots: secure-json-parse: 2.7.0 zod: 3.25.76 - '@ai-sdk/provider-utils@2.2.8(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 1.1.3 - nanoid: 3.3.8 - secure-json-parse: 2.7.0 - zod: 3.25.76 - '@ai-sdk/provider-utils@3.0.12(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 @@ -20556,10 +20519,6 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/provider@1.1.3': - dependencies: - json-schema: 0.4.0 - '@ai-sdk/provider@2.0.0': dependencies: json-schema: 0.4.0 @@ -20582,16 +20541,6 @@ snapshots: react: 18.3.1 zod: 3.25.76 - '@ai-sdk/react@1.2.12(react@18.2.0)(zod@3.25.76)': - dependencies: - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) - '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) - react: 18.2.0 - swr: 2.2.5(react@18.2.0) - throttleit: 2.1.0 - optionalDependencies: - zod: 3.25.76 - '@ai-sdk/react@1.2.2(react@19.0.0)(zod@3.25.76)': dependencies: '@ai-sdk/provider-utils': 2.2.1(zod@3.25.76) @@ -20637,13 +20586,6 @@ snapshots: zod: 3.25.76 zod-to-json-schema: 3.24.6(zod@3.25.76) - '@ai-sdk/ui-utils@1.2.11(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - '@alloc/quick-lru@5.2.0': {} '@ampproject/remapping@2.3.0': @@ -22714,10 +22656,14 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-validator-identifier@7.24.7': {} '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/helper-validator-option@7.22.15': {} '@babel/helpers@7.22.15': @@ -22747,6 +22693,10 @@ snapshots: dependencies: '@babel/types': 7.27.3 + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + '@babel/plugin-syntax-decorators@7.22.10(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -22873,6 +22823,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@balena/dockerignore@1.0.2': {} '@bcoe/v8-coverage@1.0.2': {} @@ -23826,7 +23781,7 @@ snapshots: '@fastify/accept-negotiator@2.0.1': {} - '@fastify/ajv-compiler@4.0.2': + '@fastify/ajv-compiler@4.0.5': dependencies: ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) @@ -23856,7 +23811,7 @@ snapshots: '@lukeed/ms': 2.0.2 escape-html: 1.0.3 fast-decode-uri-component: 1.0.1 - http-errors: 2.0.0 + http-errors: 2.0.1 mime: 3.0.0 '@fastify/static@8.2.0': @@ -23866,9 +23821,9 @@ snapshots: content-disposition: 0.5.4 fastify-plugin: 5.0.1 fastq: 1.19.1 - glob: 11.0.0 + glob: 11.1.0 - '@fastify/websocket@11.0.1(bufferutil@4.0.9)': + '@fastify/websocket@11.2.0(bufferutil@4.0.9)': dependencies: duplexify: 4.1.3 fastify-plugin: 5.0.1 @@ -24282,8 +24237,6 @@ snapshots: dependencies: minipass: 7.1.2 - '@istanbuljs/schema@0.1.3': {} - '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -25563,6 +25516,8 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@pinojs/redact@0.4.0': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -25645,11 +25600,11 @@ snapshots: prisma: 6.20.0-integration-next.8(@types/react@19.2.14)(magicast@0.3.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.5.4) typescript: 5.5.4 - '@prisma/client@7.8.0(prisma@7.8.0(@types/react-dom@19.0.4(@types/react@19.2.14))(@types/react@19.2.14)(better-sqlite3@11.10.0)(magicast@0.3.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.5.4))(typescript@5.5.4)': + '@prisma/client@7.8.0(prisma@7.8.0(@types/react-dom@19.0.4(@types/react@19.2.14))(@types/react@19.2.14)(better-sqlite3@11.10.0)(magicast@0.5.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.5.4))(typescript@5.5.4)': dependencies: '@prisma/client-runtime-utils': 7.8.0 optionalDependencies: - prisma: 7.8.0(@types/react-dom@19.0.4(@types/react@19.2.14))(@types/react@19.2.14)(better-sqlite3@11.10.0)(magicast@0.3.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.5.4) + prisma: 7.8.0(@types/react-dom@19.0.4(@types/react@19.2.14))(@types/react@19.2.14)(better-sqlite3@11.10.0)(magicast@0.5.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.5.4) typescript: 5.5.4 '@prisma/config@6.14.0(magicast@0.3.5)': @@ -25688,9 +25643,9 @@ snapshots: transitivePeerDependencies: - magicast - '@prisma/config@7.8.0(magicast@0.3.5)': + '@prisma/config@7.8.0(magicast@0.5.3)': dependencies: - c12: 3.3.4(magicast@0.3.5) + c12: 3.3.4(magicast@0.5.3) deepmerge-ts: 7.1.5 effect: 3.20.0 empathic: 2.0.0 @@ -30237,7 +30192,7 @@ snapshots: '@tailwindcss/node@4.0.17': dependencies: enhanced-resolve: 5.18.3 - jiti: 2.4.2 + jiti: 2.6.1 tailwindcss: 4.0.17 '@tailwindcss/oxide-android-arm64@4.0.17': @@ -30410,6 +30365,11 @@ snapshots: '@types/caseless@0.12.5': {} + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + '@types/compression@1.7.2': dependencies: '@types/express': 4.17.15 @@ -30569,6 +30529,8 @@ snapshots: dependencies: decimal.js: 10.6.0 + '@types/deep-eql@4.0.2': {} + '@types/diff-match-patch@1.0.36': {} '@types/docker-modem@3.0.6': @@ -31096,12 +31058,12 @@ snapshots: '@uploadthing/mime-types@0.3.0': {} - '@uploadthing/react@7.0.3(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(react@18.3.1)(uploadthing@7.1.0(express@5.2.1)(fastify@5.4.0)(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(tailwindcss@3.4.1))': + '@uploadthing/react@7.0.3(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(react@18.3.1)(uploadthing@7.1.0(express@5.2.1)(fastify@5.8.5)(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(tailwindcss@3.4.1))': dependencies: '@uploadthing/shared': 7.0.3 file-selector: 0.6.0 react: 18.3.1 - uploadthing: 7.1.0(express@5.2.1)(fastify@5.4.0)(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(tailwindcss@3.4.1) + uploadthing: 7.1.0(express@5.2.1)(fastify@5.8.5)(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(tailwindcss@3.4.1) optionalDependencies: next: 14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1) @@ -31209,78 +31171,68 @@ snapshots: - '@cfworker/json-schema' - supports-color - '@vitest/coverage-v8@3.1.4(vitest@3.1.4(@types/debug@4.1.12)(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3))': + '@vitest/coverage-v8@4.1.7(vitest@4.1.7)': dependencies: - '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - debug: 4.4.0 + '@vitest/utils': 4.1.7 + ast-v8-to-istanbul: 1.0.2 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 - magic-string: 0.30.17 - magicast: 0.3.5 - std-env: 3.9.0 - test-exclude: 7.0.1 - tinyrainbow: 2.0.0 - vitest: 3.1.4(@types/debug@4.1.12)(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3) - transitivePeerDependencies: - - supports-color + istanbul-reports: 3.2.0 + magicast: 0.5.3 + obug: 2.1.1 + std-env: 4.1.0 + tinyrainbow: 3.1.0 + vitest: 4.1.7(@opentelemetry/api@1.9.0)(@types/node@20.14.14)(@vitest/coverage-v8@4.1.7)(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3)) - '@vitest/expect@3.1.4': + '@vitest/expect@4.1.7': dependencies: - '@vitest/spy': 3.1.4 - '@vitest/utils': 3.1.4 - chai: 5.2.0 - tinyrainbow: 2.0.0 + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.7 + '@vitest/utils': 4.1.7 + chai: 6.2.2 + tinyrainbow: 3.1.0 - '@vitest/mocker@3.1.4(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3))': + '@vitest/mocker@4.1.7(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3))': dependencies: - '@vitest/spy': 3.1.4 + '@vitest/spy': 4.1.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3) - '@vitest/pretty-format@2.1.9': + '@vitest/mocker@4.1.7(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3))': dependencies: - tinyrainbow: 1.2.0 - - '@vitest/pretty-format@3.1.4': - dependencies: - tinyrainbow: 2.0.0 + '@vitest/spy': 4.1.7 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3) - '@vitest/runner@2.1.9': + '@vitest/pretty-format@4.1.7': dependencies: - '@vitest/utils': 2.1.9 - pathe: 1.1.2 + tinyrainbow: 3.1.0 - '@vitest/runner@3.1.4': + '@vitest/runner@4.1.7': dependencies: - '@vitest/utils': 3.1.4 + '@vitest/utils': 4.1.7 pathe: 2.0.3 - '@vitest/snapshot@3.1.4': + '@vitest/snapshot@4.1.7': dependencies: - '@vitest/pretty-format': 3.1.4 + '@vitest/pretty-format': 4.1.7 + '@vitest/utils': 4.1.7 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@3.1.4': - dependencies: - tinyspy: 3.0.2 - - '@vitest/utils@2.1.9': - dependencies: - '@vitest/pretty-format': 2.1.9 - loupe: 3.1.3 - tinyrainbow: 1.2.0 + '@vitest/spy@4.1.7': {} - '@vitest/utils@3.1.4': + '@vitest/utils@4.1.7': dependencies: - '@vitest/pretty-format': 3.1.4 - loupe: 3.1.3 - tinyrainbow: 2.0.0 + '@vitest/pretty-format': 4.1.7 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 '@web3-storage/multipart-parser@1.0.0': {} @@ -31585,18 +31537,6 @@ snapshots: optionalDependencies: react: 19.0.0 - ai@4.3.19(react@18.2.0)(zod@3.25.76): - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) - '@ai-sdk/react': 1.2.12(react@18.2.0)(zod@3.25.76) - '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) - '@opentelemetry/api': 1.9.0 - jsondiffpatch: 0.6.0 - zod: 3.25.76 - optionalDependencies: - react: 18.2.0 - ai@5.0.14(zod@3.25.76): dependencies: '@ai-sdk/gateway': 1.0.6(zod@3.25.76) @@ -31837,6 +31777,12 @@ snapshots: dependencies: tslib: 2.8.1 + ast-v8-to-istanbul@1.0.2: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 10.0.0 + astral-regex@2.0.0: {} astring@1.8.4: {} @@ -32001,6 +31947,7 @@ snapshots: dependencies: bindings: 1.5.0 prebuild-install: 7.1.3 + optional: true big.js@6.2.2: {} @@ -32011,6 +31958,7 @@ snapshots: bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 + optional: true bintrees@1.0.2: {} @@ -32042,7 +31990,7 @@ snapshots: bytes: 3.1.2 content-type: 1.0.5 debug: 4.4.3(supports-color@10.0.0) - http-errors: 2.0.0 + http-errors: 2.0.1 iconv-lite: 0.6.3 on-finished: 2.4.1 qs: 6.14.1 @@ -32056,7 +32004,7 @@ snapshots: bytes: 3.1.2 content-type: 1.0.5 debug: 4.4.3(supports-color@10.0.0) - http-errors: 2.0.0 + http-errors: 2.0.1 iconv-lite: 0.7.2 on-finished: 2.4.1 qs: 6.14.1 @@ -32200,7 +32148,7 @@ snapshots: dotenv: 16.6.1 exsolve: 1.0.7 giget: 2.0.0 - jiti: 2.4.2 + jiti: 2.6.1 ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 1.0.0 @@ -32209,7 +32157,7 @@ snapshots: optionalDependencies: magicast: 0.3.5 - c12@3.3.4(magicast@0.3.5): + c12@3.3.4(magicast@0.5.3): dependencies: chokidar: 5.0.0 confbox: 0.2.4 @@ -32224,7 +32172,7 @@ snapshots: pkg-types: 2.3.0 rc9: 3.0.1 optionalDependencies: - magicast: 0.3.5 + magicast: 0.5.3 cac@6.7.14: {} @@ -32304,13 +32252,7 @@ snapshots: ccount@2.0.1: {} - 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 + chai@6.2.2: {} chalk@2.4.2: dependencies: @@ -32343,8 +32285,6 @@ snapshots: dependencies: '@kurkle/color': 0.3.4 - check-error@2.1.1: {} - cheminfo-types@1.8.1: {} chevrotain-allstar@0.3.1(chevrotain@11.0.3): @@ -32657,6 +32597,8 @@ snapshots: convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} + cookie-signature@1.0.6: {} cookie-signature@1.2.2: {} @@ -33137,8 +33079,7 @@ snapshots: decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - - deep-eql@5.0.2: {} + optional: true deep-extend@0.6.0: {} @@ -33629,6 +33570,8 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-lexer@2.1.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -34255,18 +34198,25 @@ snapshots: dependencies: require-like: 0.1.2 - evalite@0.11.4(bufferutil@4.0.9): + evalite@1.0.0-beta.16(ai@6.0.168(zod@3.25.76))(better-sqlite3@11.10.0)(bufferutil@4.0.9): dependencies: '@fastify/static': 8.2.0 - '@fastify/websocket': 11.0.1(bufferutil@4.0.9) + '@fastify/websocket': 11.2.0(bufferutil@4.0.9) '@stricli/auto-complete': 1.2.0 '@stricli/core': 1.2.0 - '@vitest/runner': 2.1.9 - better-sqlite3: 11.10.0 - fastify: 5.4.0 + '@vitest/runner': 4.1.7 + '@vitest/utils': 4.1.7 + dotenv: 16.4.7 + fastify: 5.8.5 file-type: 19.6.0 + get-port: 7.2.0 + jiti: 2.6.1 + js-levenshtein: 1.1.6 table: 6.9.0 - tinyrainbow: 1.2.0 + tinyrainbow: 3.1.0 + optionalDependencies: + ai: 6.0.168(zod@3.25.76) + better-sqlite3: 11.10.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -34344,9 +34294,10 @@ snapshots: exit-hook@2.2.1: {} - expand-template@2.0.3: {} + expand-template@2.0.3: + optional: true - expect-type@1.2.1: {} + expect-type@1.3.0: {} express-rate-limit@7.5.0(express@5.0.1(supports-color@10.0.0)): dependencies: @@ -34445,7 +34396,7 @@ snapshots: etag: 1.8.1 finalhandler: 2.1.0(supports-color@10.0.0) fresh: 2.0.0 - http-errors: 2.0.0 + http-errors: 2.0.1 merge-descriptors: 2.0.0 mime-types: 3.0.0 on-finished: 2.4.1 @@ -34457,7 +34408,7 @@ snapshots: router: 2.2.0 send: 1.1.0(supports-color@10.0.0) serve-static: 2.2.1 - statuses: 2.0.1 + statuses: 2.0.2 type-is: 2.0.1 vary: 1.1.2 transitivePeerDependencies: @@ -34530,8 +34481,6 @@ snapshots: dependencies: fast-decode-uri-component: 1.0.1 - fast-redact@3.5.0: {} - fast-safe-stringify@2.1.1: {} fast-shallow-equal@1.0.0: {} @@ -34561,9 +34510,9 @@ snapshots: fastify-plugin@5.0.1: {} - fastify@5.4.0: + fastify@5.8.5: dependencies: - '@fastify/ajv-compiler': 4.0.2 + '@fastify/ajv-compiler': 4.0.5 '@fastify/error': 4.2.0 '@fastify/fast-json-stringify-compiler': 5.0.3 '@fastify/proxy-addr': 5.0.0 @@ -34572,7 +34521,7 @@ snapshots: fast-json-stringify: 6.0.1 find-my-way: 9.3.0 light-my-request: 6.6.0 - pino: 9.7.0 + pino: 10.3.1 process-warning: 5.0.0 rfdc: 1.4.1 secure-json-parse: 4.0.0 @@ -34607,6 +34556,10 @@ snapshots: optionalDependencies: picomatch: 4.0.4 + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + fflate@0.4.8: {} fflate@0.8.2: {} @@ -34632,7 +34585,8 @@ snapshots: token-types: 6.0.3 uint8array-extras: 1.4.0 - file-uri-to-path@1.0.0: {} + file-uri-to-path@1.0.0: + optional: true fill-range@7.1.1: dependencies: @@ -34657,7 +34611,7 @@ snapshots: escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 - statuses: 2.0.1 + statuses: 2.0.2 transitivePeerDependencies: - supports-color @@ -34948,7 +34902,8 @@ snapshots: git-last-commit@1.0.1: {} - github-from-package@0.0.0: {} + github-from-package@0.0.0: + optional: true glob-parent@5.1.2: dependencies: @@ -35756,15 +35711,7 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@5.0.6: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - debug: 4.4.3(supports-color@10.0.0) - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.1.7: + istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 @@ -35803,8 +35750,6 @@ snapshots: jiti@1.21.6: {} - jiti@2.4.2: {} - jiti@2.6.1: {} joi@17.7.0: @@ -35842,6 +35787,8 @@ snapshots: js-sdsl@4.2.0: {} + js-tokens@10.0.0: {} + js-tokens@4.0.0: {} js-yaml@3.14.2: @@ -36250,8 +36197,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.3: {} - lowercase-keys@1.0.1: {} lowercase-keys@2.0.0: {} @@ -36302,10 +36247,6 @@ snapshots: lz-string@1.4.4: {} - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -36321,6 +36262,13 @@ snapshots: '@babel/parser': 7.27.5 '@babel/types': 7.27.3 source-map-js: 1.2.1 + optional: true + + magicast@0.5.3: + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + source-map-js: 1.2.1 make-dir@4.0.0: dependencies: @@ -37172,7 +37120,8 @@ snapshots: mimic-response@1.0.1: {} - mimic-response@3.1.0: {} + mimic-response@3.1.0: + optional: true min-indent@1.0.1: {} @@ -37395,7 +37344,8 @@ snapshots: nanoid@5.1.5: {} - napi-build-utils@2.0.0: {} + napi-build-utils@2.0.0: + optional: true natural-compare-lite@1.4.0: {} @@ -37586,6 +37536,7 @@ snapshots: node-abi@3.75.0: dependencies: semver: 7.7.3 + optional: true node-abort-controller@3.1.1: {} @@ -37780,6 +37731,8 @@ snapshots: obuf@1.1.2: {} + obug@2.1.1: {} + octokit@3.2.2: dependencies: '@octokit/app': 14.1.0 @@ -38189,8 +38142,6 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.0: {} - peberminta@0.9.0: {} peek-readable@5.4.2: {} @@ -38316,25 +38267,25 @@ snapshots: pify@4.0.1: {} - pino-abstract-transport@2.0.0: + pino-abstract-transport@3.0.0: dependencies: split2: 4.2.0 pino-std-serializers@7.0.0: {} - pino@9.7.0: + pino@10.3.1: dependencies: + '@pinojs/redact': 0.4.0 atomic-sleep: 1.0.0 - fast-redact: 3.5.0 on-exit-leak-free: 2.1.2 - pino-abstract-transport: 2.0.0 + pino-abstract-transport: 3.0.0 pino-std-serializers: 7.0.0 process-warning: 5.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.5.0 sonic-boom: 4.2.0 - thread-stream: 3.1.0 + thread-stream: 4.2.0 pirates@4.0.5: {} @@ -38581,6 +38532,7 @@ snapshots: simple-get: 4.0.1 tar-fs: 2.1.4 tunnel-agent: 0.6.0 + optional: true preferred-pm@3.0.3: dependencies: @@ -38680,9 +38632,9 @@ snapshots: - react - react-dom - prisma@7.8.0(@types/react-dom@19.0.4(@types/react@19.2.14))(@types/react@19.2.14)(better-sqlite3@11.10.0)(magicast@0.3.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.5.4): + prisma@7.8.0(@types/react-dom@19.0.4(@types/react@19.2.14))(@types/react@19.2.14)(better-sqlite3@11.10.0)(magicast@0.5.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.5.4): dependencies: - '@prisma/config': 7.8.0(magicast@0.3.5) + '@prisma/config': 7.8.0(magicast@0.5.3) '@prisma/dev': 0.24.3(typescript@5.5.4) '@prisma/engines': 7.8.0 '@prisma/studio-core': 0.27.3(@types/react-dom@19.0.4(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -39428,6 +39380,8 @@ snapshots: real-require@0.2.0: {} + real-require@1.0.0: {} + recharts-scale@0.4.5: dependencies: decimal.js-light: 2.5.1 @@ -40010,12 +39964,12 @@ snapshots: escape-html: 1.0.3 etag: 1.8.1 fresh: 0.5.2 - http-errors: 2.0.0 + http-errors: 2.0.1 mime-types: 2.1.35 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 - statuses: 2.0.1 + statuses: 2.0.2 transitivePeerDependencies: - supports-color @@ -40237,13 +40191,15 @@ snapshots: signal-exit@4.1.0: {} - simple-concat@1.0.1: {} + simple-concat@1.0.1: + optional: true simple-get@4.0.1: dependencies: decompress-response: 6.0.0 once: 1.4.0 simple-concat: 1.0.1 + optional: true simple-oauth2@5.0.0: dependencies: @@ -40522,6 +40478,8 @@ snapshots: std-env@3.9.0: {} + std-env@4.1.0: {} + stream-buffers@3.0.2: {} stream-shift@1.0.3: {} @@ -41095,12 +41053,6 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - test-exclude@7.0.1: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 - minimatch: 9.0.5 - testcontainers@11.14.0: dependencies: '@balena/dockerignore': 1.0.2 @@ -41137,9 +41089,9 @@ snapshots: dependencies: any-promise: 1.3.0 - thread-stream@3.1.0: + thread-stream@4.2.0: dependencies: - real-require: 0.2.0 + real-require: 1.0.0 throttle-debounce@3.0.1: {} @@ -41171,6 +41123,8 @@ snapshots: tinyexec@1.0.1: {} + tinyexec@1.2.3: {} + tinyglobby@0.2.10: dependencies: fdir: 6.4.3(picomatch@4.0.4) @@ -41181,6 +41135,11 @@ snapshots: fdir: 6.4.4(picomatch@4.0.4) picomatch: 4.0.4 + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + tinyglobby@0.2.2: dependencies: fdir: 6.2.0(picomatch@4.0.4) @@ -41191,13 +41150,7 @@ snapshots: '@types/tinycolor2': 1.4.3 tinycolor2: 1.6.0 - tinypool@1.0.2: {} - - tinyrainbow@1.2.0: {} - - tinyrainbow@2.0.0: {} - - tinyspy@3.0.2: {} + tinyrainbow@3.1.0: {} tldts-core@7.0.7: {} @@ -41741,7 +41694,7 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - uploadthing@7.1.0(express@5.2.1)(fastify@5.4.0)(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(tailwindcss@3.4.1): + uploadthing@7.1.0(express@5.2.1)(fastify@5.8.5)(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1))(tailwindcss@3.4.1): dependencies: '@effect/platform': 0.63.2(@effect/schema@0.72.2(effect@3.7.2))(effect@3.7.2) '@effect/schema': 0.72.2(effect@3.7.2) @@ -41750,7 +41703,7 @@ snapshots: effect: 3.7.2 optionalDependencies: express: 5.2.1 - fastify: 5.4.0 + fastify: 5.8.5 next: 14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.37.0)(react-dom@18.2.0(react@18.3.1))(react@18.3.1) tailwindcss: 3.4.1 @@ -41972,27 +41925,6 @@ snapshots: - supports-color - terser - vite-node@3.1.4(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3): - dependencies: - cac: 6.7.14 - debug: 4.4.3(supports-color@10.0.0) - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vite-node@3.1.4(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3): dependencies: cac: 6.7.14 @@ -42068,85 +42000,63 @@ snapshots: tsx: 4.20.6 yaml: 2.8.3 - vitest@3.1.4(@types/debug@4.1.12)(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3): - dependencies: - '@vitest/expect': 3.1.4 - '@vitest/mocker': 3.1.4(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3)) - '@vitest/pretty-format': 3.1.4 - '@vitest/runner': 3.1.4 - '@vitest/snapshot': 3.1.4 - '@vitest/spy': 3.1.4 - '@vitest/utils': 3.1.4 - chai: 5.2.0 - debug: 4.4.1 - expect-type: 1.2.1 + vitest@4.1.7(@opentelemetry/api@1.9.0)(@types/node@20.14.14)(@vitest/coverage-v8@4.1.7)(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3)): + dependencies: + '@vitest/expect': 4.1.7 + '@vitest/mocker': 4.1.7(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.7 + '@vitest/runner': 4.1.7 + '@vitest/snapshot': 4.1.7 + '@vitest/spy': 4.1.7 + '@vitest/utils': 4.1.7 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 - std-env: 3.9.0 + picomatch: 4.0.4 + std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.13 - tinypool: 1.0.2 - tinyrainbow: 2.0.0 + tinyexec: 1.2.3 + tinyglobby: 0.2.16 + tinyrainbow: 3.1.0 vite: 6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3) - vite-node: 3.1.4(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.12 + '@opentelemetry/api': 1.9.0 '@types/node': 20.14.14 + '@vitest/coverage-v8': 4.1.7(vitest@4.1.7) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vitest@3.1.4(@types/debug@4.1.12)(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3): - dependencies: - '@vitest/expect': 3.1.4 - '@vitest/mocker': 3.1.4(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@3.12.2)(yaml@2.8.3)) - '@vitest/pretty-format': 3.1.4 - '@vitest/runner': 3.1.4 - '@vitest/snapshot': 3.1.4 - '@vitest/spy': 3.1.4 - '@vitest/utils': 3.1.4 - chai: 5.2.0 - debug: 4.4.1 - expect-type: 1.2.1 + vitest@4.1.7(@opentelemetry/api@1.9.0)(@types/node@20.14.14)(@vitest/coverage-v8@4.1.7)(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3)): + dependencies: + '@vitest/expect': 4.1.7 + '@vitest/mocker': 4.1.7(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.7 + '@vitest/runner': 4.1.7 + '@vitest/snapshot': 4.1.7 + '@vitest/spy': 4.1.7 + '@vitest/utils': 4.1.7 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 - std-env: 3.9.0 + picomatch: 4.0.4 + std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.13 - tinypool: 1.0.2 - tinyrainbow: 2.0.0 + tinyexec: 1.2.3 + tinyglobby: 0.2.16 + tinyrainbow: 3.1.0 vite: 6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3) - vite-node: 3.1.4(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.12 + '@opentelemetry/api': 1.9.0 '@types/node': 20.14.14 + '@vitest/coverage-v8': 4.1.7(vitest@4.1.7) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml vscode-jsonrpc@8.2.0: {} @@ -42219,7 +42129,7 @@ snapshots: opener: 1.5.2 picocolors: 1.1.1 sirv: 2.0.4 - ws: 7.5.9(bufferutil@4.0.9) + ws: 7.5.10(bufferutil@4.0.9) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -42368,10 +42278,6 @@ snapshots: optionalDependencies: bufferutil: 4.0.9 - ws@7.5.9(bufferutil@4.0.9): - optionalDependencies: - bufferutil: 4.0.9 - ws@8.11.0(bufferutil@4.0.9): optionalDependencies: bufferutil: 4.0.9 diff --git a/references/ai-chat/package.json b/references/ai-chat/package.json index 45071838a68..ee2d62c0b61 100644 --- a/references/ai-chat/package.json +++ b/references/ai-chat/package.json @@ -43,6 +43,6 @@ "tailwindcss": "^4", "trigger.dev": "workspace:*", "typescript": "^5", - "vitest": "^3.1.4" + "vitest": "^4.1.7" } }