From 3564244ced64b4f77d3b828a18642207eb13d989 Mon Sep 17 00:00:00 2001
From: Marcus Schiesser <mail@marcusschiesser.de>
Date: Tue, 25 Feb 2025 15:18:45 +0700
Subject: [PATCH] chore: add claude 3.7 support (#1678)

---
 .changeset/ninety-walls-sort.md           |   6 +
 .changeset/tricky-ties-film.md            |   6 +
 examples/anthropic/agent.ts               |   2 +-
 examples/anthropic/chat.ts                |   4 +-
 examples/anthropic/chat_interactive.ts    |   2 +-
 examples/anthropic/prompt-caching.ts      |   2 +-
 examples/anthropic/stream.ts              |   2 +-
 examples/anthropic/thinking.ts            |  25 ++
 packages/providers/anthropic/package.json |   2 +-
 packages/providers/anthropic/src/llm.ts   |  72 +++--
 pnpm-lock.yaml                            | 327 ++++++++++++++++++----
 11 files changed, 366 insertions(+), 84 deletions(-)
 create mode 100644 .changeset/ninety-walls-sort.md
 create mode 100644 .changeset/tricky-ties-film.md
 create mode 100644 examples/anthropic/thinking.ts

diff --git a/.changeset/ninety-walls-sort.md b/.changeset/ninety-walls-sort.md
new file mode 100644
index 000000000..254b1b021
--- /dev/null
+++ b/.changeset/ninety-walls-sort.md
@@ -0,0 +1,6 @@
+---
+"@llamaindex/anthropic": minor
+"@llamaindex/examples": patch
+---
+
+Add support for claude 3.7 thinking (and set default temperature to 1)
diff --git a/.changeset/tricky-ties-film.md b/.changeset/tricky-ties-film.md
new file mode 100644
index 000000000..43564da31
--- /dev/null
+++ b/.changeset/tricky-ties-film.md
@@ -0,0 +1,6 @@
+---
+"@llamaindex/anthropic": patch
+"@llamaindex/examples": patch
+---
+
+add support for claude 3.7
diff --git a/examples/anthropic/agent.ts b/examples/anthropic/agent.ts
index 5d146e104..8391b44ca 100644
--- a/examples/anthropic/agent.ts
+++ b/examples/anthropic/agent.ts
@@ -8,7 +8,7 @@ Settings.callbackManager.on("llm-tool-call", (event) => {
 
 const anthropic = new Anthropic({
   apiKey: process.env.ANTHROPIC_API_KEY,
-  model: "claude-3-5-sonnet",
+  model: "claude-3-7-sonnet",
 });
 
 const agent = new AnthropicAgent({
diff --git a/examples/anthropic/chat.ts b/examples/anthropic/chat.ts
index 5663d91ea..50720935c 100644
--- a/examples/anthropic/chat.ts
+++ b/examples/anthropic/chat.ts
@@ -3,7 +3,7 @@ import { Anthropic } from "@llamaindex/anthropic";
 (async () => {
   const anthropic = new Anthropic({
     apiKey: process.env.ANTHROPIC_API_KEY,
-    model: "claude-3-opus",
+    model: "claude-3-7-sonnet",
   });
   const result = await anthropic.chat({
     messages: [
@@ -15,5 +15,5 @@ import { Anthropic } from "@llamaindex/anthropic";
       },
     ],
   });
-  console.log(result);
+  console.log(result.message.content);
 })();
diff --git a/examples/anthropic/chat_interactive.ts b/examples/anthropic/chat_interactive.ts
index d4ee02fb7..00a3a6fc0 100644
--- a/examples/anthropic/chat_interactive.ts
+++ b/examples/anthropic/chat_interactive.ts
@@ -6,7 +6,7 @@ import readline from "node:readline/promises";
 (async () => {
   const llm = new Anthropic({
     apiKey: process.env.ANTHROPIC_API_KEY,
-    model: "claude-3-opus",
+    model: "claude-3-7-sonnet",
   });
   // chatHistory will store all the messages in the conversation
   const chatHistory = new ChatMemoryBuffer({
diff --git a/examples/anthropic/prompt-caching.ts b/examples/anthropic/prompt-caching.ts
index e7d371c50..145f755ea 100644
--- a/examples/anthropic/prompt-caching.ts
+++ b/examples/anthropic/prompt-caching.ts
@@ -2,7 +2,7 @@ import { Anthropic } from "@llamaindex/anthropic";
 
 async function main() {
   const anthropic = new Anthropic({
-    model: "claude-3-5-sonnet-20241022",
+    model: "claude-3-7-sonnet",
   });
 
   const entireBook = await fetch(
diff --git a/examples/anthropic/stream.ts b/examples/anthropic/stream.ts
index 17b07bc55..7562f4c46 100644
--- a/examples/anthropic/stream.ts
+++ b/examples/anthropic/stream.ts
@@ -3,7 +3,7 @@ import { Anthropic } from "@llamaindex/anthropic";
 (async () => {
   const anthropic = new Anthropic({
     apiKey: process.env.ANTHROPIC_API_KEY,
-    model: "claude-3-5-sonnet",
+    model: "claude-3-7-sonnet",
   });
   const stream = await anthropic.chat({
     messages: [
diff --git a/examples/anthropic/thinking.ts b/examples/anthropic/thinking.ts
new file mode 100644
index 000000000..3901a4eaf
--- /dev/null
+++ b/examples/anthropic/thinking.ts
@@ -0,0 +1,25 @@
+import { Anthropic } from "@llamaindex/anthropic";
+
+(async () => {
+  const anthropic = new Anthropic({
+    apiKey: process.env.ANTHROPIC_API_KEY,
+    model: "claude-3-7-sonnet",
+    maxTokens: 20000,
+    additionalChatOptions: {
+      thinking: {
+        type: "enabled",
+        budget_tokens: 16000,
+      },
+    },
+  });
+  const result = await anthropic.chat({
+    messages: [
+      {
+        role: "user",
+        content:
+          "Are there an infinite number of prime numbers such that n mod 4 == 3?",
+      },
+    ],
+  });
+  console.log(result.message);
+})();
diff --git a/packages/providers/anthropic/package.json b/packages/providers/anthropic/package.json
index b47e4a443..63a8989cf 100644
--- a/packages/providers/anthropic/package.json
+++ b/packages/providers/anthropic/package.json
@@ -35,7 +35,7 @@
     "vitest": "^2.1.5"
   },
   "dependencies": {
-    "@anthropic-ai/sdk": "0.32.1",
+    "@anthropic-ai/sdk": "0.37.0",
     "@llamaindex/core": "workspace:*",
     "@llamaindex/env": "workspace:*",
     "remeda": "^2.17.3"
diff --git a/packages/providers/anthropic/src/llm.ts b/packages/providers/anthropic/src/llm.ts
index dd2f6414d..0cd80a183 100644
--- a/packages/providers/anthropic/src/llm.ts
+++ b/packages/providers/anthropic/src/llm.ts
@@ -6,6 +6,8 @@ import type {
 } from "@anthropic-ai/sdk/resources/beta/index";
 import type { TextBlock } from "@anthropic-ai/sdk/resources/index";
 import type {
+  MessageCreateParams,
+  MessageCreateParamsBase,
   MessageParam,
   Model,
   Tool,
@@ -102,10 +104,17 @@ export const ALL_AVAILABLE_V3_5_MODELS = {
   "claude-3-5-haiku-20241022": { contextWindow: 200000 },
 };
 
+export const ALL_AVAILABLE_V3_7_MODELS = {
+  "claude-3-7-sonnet": { contextWindow: 200000 },
+  "claude-3-7-sonnet-20250219": { contextWindow: 200000 },
+  "claude-3-7-sonnet-latest": { contextWindow: 200000 },
+};
+
 export const ALL_AVAILABLE_ANTHROPIC_MODELS = {
   ...ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS,
   ...ALL_AVAILABLE_V3_MODELS,
   ...ALL_AVAILABLE_V3_5_MODELS,
+  ...ALL_AVAILABLE_V3_7_MODELS,
 } satisfies {
   [key in Model]: { contextWindow: number };
 };
@@ -115,9 +124,13 @@ const AVAILABLE_ANTHROPIC_MODELS_WITHOUT_DATE: { [key: string]: string } = {
   "claude-3-sonnet": "claude-3-sonnet-20240229",
   "claude-3-haiku": "claude-3-haiku-20240307",
   "claude-3-5-sonnet": "claude-3-5-sonnet-20240620",
+  "claude-3-7-sonnet": "claude-3-7-sonnet-20250219",
 } as { [key in keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS]: string };
 
-export type AnthropicAdditionalChatOptions = object;
+export type AnthropicAdditionalChatOptions = Pick<
+  MessageCreateParamsBase,
+  "thinking"
+>;
 export type AnthropicToolCallLLMMessageOptions = ToolCallLLMMessageOptions & {
   cache_control?: BetaCacheControlEphemeral | null;
 };
@@ -129,8 +142,9 @@ export class Anthropic extends ToolCallLLM<
   // Per completion Anthropic params
   model: keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS | ({} & string);
   temperature: number;
-  topP: number;
+  topP?: number | undefined;
   maxTokens?: number | undefined;
+  additionalChatOptions?: AnthropicAdditionalChatOptions | undefined;
 
   // Anthropic session params
   apiKey?: string | undefined;
@@ -141,13 +155,14 @@ export class Anthropic extends ToolCallLLM<
   constructor(init?: Partial<Anthropic>) {
     super();
     this.model = init?.model ?? "claude-3-opus";
-    this.temperature = init?.temperature ?? 0.1;
-    this.topP = init?.topP ?? 0.999; // Per Ben Mann
+    this.temperature = init?.temperature ?? 1; // default in anthropic is 1
+    this.topP = init?.topP;
     this.maxTokens = init?.maxTokens ?? undefined;
 
     this.apiKey = init?.apiKey ?? undefined;
     this.maxRetries = init?.maxRetries ?? 10;
     this.timeout = init?.timeout ?? 60 * 1000; // Default is 60 seconds
+    this.additionalChatOptions = init?.additionalChatOptions;
     this.session =
       init?.session ??
       getAnthropicSession({
@@ -165,7 +180,7 @@ export class Anthropic extends ToolCallLLM<
     return {
       model: this.model,
       temperature: this.temperature,
-      topP: this.topP,
+      topP: this.topP ?? 0, // XXX: topP needs to be returned but might be undefined for Anthropic
       maxTokens: this.maxTokens,
       contextWindow:
         this.model in ALL_AVAILABLE_ANTHROPIC_MODELS
@@ -365,8 +380,14 @@ export class Anthropic extends ToolCallLLM<
   @wrapLLMEvent
   async chat(
     params:
-      | LLMChatParamsNonStreaming<AnthropicToolCallLLMMessageOptions>
-      | LLMChatParamsStreaming<AnthropicToolCallLLMMessageOptions>,
+      | LLMChatParamsNonStreaming<
+          AnthropicAdditionalChatOptions,
+          AnthropicToolCallLLMMessageOptions
+        >
+      | LLMChatParamsStreaming<
+          AnthropicAdditionalChatOptions,
+          AnthropicToolCallLLMMessageOptions
+        >,
   ): Promise<
     | ChatResponse<AnthropicToolCallLLMMessageOptions>
     | AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>>
@@ -407,28 +428,29 @@ export class Anthropic extends ToolCallLLM<
       anthropic = anthropic.beta.promptCaching;
     }
 
-    if (stream) {
-      if (tools) {
-        console.error("Tools are not supported in streaming mode");
-      }
-      return this.streamChat(
-        messages.filter((m) => m.role !== "system"),
-        systemPrompt,
-        anthropic,
-      );
-    }
-
-    const apiParams = {
+    const apiParams: MessageCreateParams = {
       model: this.getModelName(this.model),
       messages: this.mergeConsecutiveMessages(
         this.formatMessages(messages.filter((m) => m.role !== "system")),
       ),
       max_tokens: this.maxTokens ?? 4096,
       temperature: this.temperature,
-      top_p: this.topP,
+      ...(this.topP ? { top_p: this.topP } : {}),
       ...(systemPrompt && { system: systemPrompt }),
+      ...Object.assign(
+        {},
+        this.additionalChatOptions,
+        params.additionalChatOptions,
+      ),
     };
 
+    if (stream) {
+      if (tools) {
+        console.error("Tools are not supported in streaming mode");
+      }
+      return this.streamChat(anthropic, apiParams);
+    }
+
     if (tools?.length) {
       Object.assign(apiParams, {
         tools: this.prepareToolsForAPI(tools),
@@ -472,18 +494,12 @@ export class Anthropic extends ToolCallLLM<
   }
 
   protected async *streamChat(
-    messages: ChatMessage<AnthropicToolCallLLMMessageOptions>[],
-    systemPrompt: string | Array<BetaTextBlockParam> | null,
     anthropic: SDKAnthropic,
+    params: MessageCreateParams,
   ): AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>> {
     const stream = await anthropic.messages.create({
-      model: this.getModelName(this.model),
-      messages: this.formatMessages(messages),
-      max_tokens: this.maxTokens ?? 4096,
-      temperature: this.temperature,
-      top_p: this.topP,
+      ...params,
       stream: true,
-      ...(systemPrompt && { system: systemPrompt }),
     });
 
     let idx_counter: number = 0;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e8f40eb6e..d9590046f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -117,7 +117,7 @@ importers:
         version: 1.6.0(@aws-sdk/credential-provider-web-identity@3.744.0)
       ai:
         specifier: ^3.4.33
-        version: 3.4.33(openai@4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2))(react@19.0.0)(sswr@2.1.0(svelte@5.19.10))(svelte@5.19.10)(vue@3.5.13(typescript@5.7.2))(zod@3.24.2)
+        version: 3.4.33(openai@4.83.0(zod@3.24.2))(react@19.0.0)(sswr@2.1.0(svelte@5.19.10))(svelte@5.19.10)(vue@3.5.13(typescript@5.7.2))(zod@3.24.2)
       class-variance-authority:
         specifier: ^0.7.0
         version: 0.7.1
@@ -372,7 +372,7 @@ importers:
     devDependencies:
       '@cloudflare/vitest-pool-workers':
         specifier: ^0.5.28
-        version: 0.5.41(@cloudflare/workers-types@4.20250204.0)(@vitest/runner@2.1.5)(@vitest/snapshot@2.1.5)(bufferutil@4.0.9)(vitest@2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(terser@5.38.2))
+        version: 0.5.41(@cloudflare/workers-types@4.20250204.0)(@vitest/runner@2.1.5)(@vitest/snapshot@2.1.5)(bufferutil@4.0.9)(vitest@2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.13.5)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(terser@5.38.2))
       '@cloudflare/workers-types':
         specifier: ^4.20241112.0
         version: 4.20250204.0
@@ -387,7 +387,7 @@ importers:
         version: 5.7.2
       vitest:
         specifier: 2.1.5
-        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(terser@5.38.2)
+        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.13.5)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(terser@5.38.2)
       wrangler:
         specifier: ^3.87.0
         version: 3.108.1(@cloudflare/workers-types@4.20250204.0)(bufferutil@4.0.9)
@@ -403,10 +403,10 @@ importers:
         version: 5.7.2
       vite:
         specifier: ^5.4.12
-        version: 5.4.14(@types/node@22.9.0)(terser@5.38.2)
+        version: 5.4.14(@types/node@22.13.5)(terser@5.38.2)
       vite-plugin-wasm:
         specifier: ^3.3.0
-        version: 3.4.1(vite@5.4.14(@types/node@22.9.0)(terser@5.38.2))
+        version: 3.4.1(vite@5.4.14(@types/node@22.13.5)(terser@5.38.2))
 
   e2e/examples/nextjs-agent:
     dependencies:
@@ -542,7 +542,7 @@ importers:
         version: 5.7.2
       vite:
         specifier: ^6.1.0
-        version: 6.1.0(@types/node@22.9.0)(jiti@2.4.2)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0)
+        version: 6.1.0(@types/node@22.13.5)(jiti@2.4.2)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0)
 
   e2e/examples/waku-query-engine:
     dependencies:
@@ -563,7 +563,7 @@ importers:
         version: 19.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(webpack@5.97.1)
       waku:
         specifier: 0.21.20
-        version: 0.21.20(@swc/helpers@0.5.15)(@types/node@22.9.0)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react-server-dom-webpack@19.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(webpack@5.97.1))(react@19.0.0)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0)
+        version: 0.21.20(@swc/helpers@0.5.15)(@types/node@22.13.5)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react-server-dom-webpack@19.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(webpack@5.97.1))(react@19.0.0)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0)
     devDependencies:
       '@types/react':
         specifier: 18.3.12
@@ -777,7 +777,7 @@ importers:
         version: 2.10.2(@types/react@18.3.12)(react@19.0.0)
       openai:
         specifier: ^4
-        version: 4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2)
+        version: 4.83.0(ws@8.18.0)(zod@3.24.2)
       typedoc:
         specifier: ^0.26.11
         version: 0.26.11(typescript@5.7.2)
@@ -829,7 +829,7 @@ importers:
         version: link:../../../llamaindex
       openai:
         specifier: ^4.73.1
-        version: 4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2)
+        version: 4.83.0(ws@8.18.0)(zod@3.24.2)
     devDependencies:
       tsx:
         specifier: ^4.19.0
@@ -989,7 +989,7 @@ importers:
         version: link:..
       vitest:
         specifier: ^2.1.5
-        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.3))(terser@5.38.2)
+        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.13.5)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(terser@5.38.2)
 
   packages/env:
     dependencies:
@@ -1118,7 +1118,7 @@ importers:
         version: link:..
       vitest:
         specifier: ^2.1.5
-        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.3))(terser@5.38.2)
+        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.13.5)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(terser@5.38.2)
 
   packages/node-parser:
     dependencies:
@@ -1151,8 +1151,8 @@ importers:
   packages/providers/anthropic:
     dependencies:
       '@anthropic-ai/sdk':
-        specifier: 0.32.1
-        version: 0.32.1
+        specifier: 0.37.0
+        version: 0.37.0
       '@llamaindex/core':
         specifier: workspace:*
         version: link:../../core
@@ -1168,7 +1168,7 @@ importers:
         version: 6.3.4(patch_hash=pavboztthlgni7m5gzw7643oru)(typescript@5.7.3)
       vitest:
         specifier: ^2.1.5
-        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.3))(terser@5.38.2)
+        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.13.5)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.3))(terser@5.38.2)
 
   packages/providers/clip:
     dependencies:
@@ -1339,7 +1339,7 @@ importers:
         version: link:../../env
       openai:
         specifier: ^4.83.0
-        version: 4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2)
+        version: 4.83.0(ws@8.18.0)(zod@3.24.2)
     devDependencies:
       bunchee:
         specifier: 6.3.4
@@ -1443,7 +1443,7 @@ importers:
         version: link:../../../env
       chromadb:
         specifier: 1.10.3
-        version: 1.10.3(cohere-ai@7.14.0)(openai@4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2))
+        version: 1.10.3(cohere-ai@7.14.0)(openai@4.83.0)
       chromadb-default-embed:
         specifier: ^2.13.2
         version: 2.13.2
@@ -1491,7 +1491,7 @@ importers:
         version: 6.3.4(patch_hash=pavboztthlgni7m5gzw7643oru)(typescript@5.7.3)
       vitest:
         specifier: ^2.1.5
-        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.3))(terser@5.38.2)
+        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.13.5)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.3))(terser@5.38.2)
 
   packages/providers/storage/mongodb:
     dependencies:
@@ -1576,7 +1576,7 @@ importers:
         version: 6.3.4(patch_hash=pavboztthlgni7m5gzw7643oru)(typescript@5.7.3)
       vitest:
         specifier: ^2.1.5
-        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.3))(terser@5.38.2)
+        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.13.5)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.3))(terser@5.38.2)
 
   packages/providers/storage/upstash:
     dependencies:
@@ -1781,10 +1781,10 @@ importers:
         version: 18.3.1
       msw:
         specifier: ^2.6.5
-        version: 2.7.0(@types/node@22.9.0)(typescript@5.7.3)
+        version: 2.7.0(@types/node@22.13.5)(typescript@5.7.3)
       vitest:
         specifier: ^2.1.5
-        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.3))(terser@5.38.2)
+        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.13.5)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.3))(terser@5.38.2)
 
 packages:
 
@@ -1897,8 +1897,8 @@ packages:
     resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
     engines: {node: '>=6.0.0'}
 
-  '@anthropic-ai/sdk@0.32.1':
-    resolution: {integrity: sha512-U9JwTrDvdQ9iWuABVsMLj8nJVwAyQz6QXvgLsVhryhCEPkLsbcP/MXxm+jYcAwLoV8ESbaTTjnD4kuAFa+Hyjg==}
+  '@anthropic-ai/sdk@0.37.0':
+    resolution: {integrity: sha512-tHjX2YbkUBwEgg0JZU3EFSSAQPoK4qQR/NFYa8Vtzd5UAyXzZksCw2In69Rml4R/TyHPBfRYaLK35XiOe33pjw==}
 
   '@apidevtools/json-schema-ref-parser@11.9.1':
     resolution: {integrity: sha512-OvyhwtYaWSTfo8NfibmFlgl+pIMaBOmN0OwZ3CPaGscEK3B8FCVDuQ7zgxY8seU/1kfSvNWnyB0DtKJyNLxX7g==}
@@ -5109,6 +5109,12 @@ packages:
   '@types/node@18.19.75':
     resolution: {integrity: sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==}
 
+  '@types/node@18.19.76':
+    resolution: {integrity: sha512-yvR7Q9LdPz2vGpmpJX5LolrgRdWvB67MJKDPSgIIzpFbaf9a1j/f5DnLp5VDyHGMR0QZHlTr1afsD87QCXFHKw==}
+
+  '@types/node@22.13.5':
+    resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==}
+
   '@types/node@22.9.0':
     resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==}
 
@@ -6842,8 +6848,8 @@ packages:
     resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
     engines: {node: '>=0.10'}
 
-  esrap@1.4.4:
-    resolution: {integrity: sha512-tDN6xP/r/b3WmdpWm7LybrD252hY52IokcycPnO+WHfhFF0+n5AWtcLLK7VNV6m0uYgVRhGVs8OkZwRyfC7HzQ==}
+  esrap@1.4.5:
+    resolution: {integrity: sha512-CjNMjkBWWZeHn+VX+gS8YvFwJ5+NDhg8aWZBSFJPR8qQduDNjbJodA2WcwCm7uQa5Rjqj+nZvVmceg1RbHFB9g==}
 
   esrecurse@4.3.0:
     resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
@@ -7123,6 +7129,10 @@ packages:
     resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==}
     engines: {node: '>= 6'}
 
+  form-data@4.0.2:
+    resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
+    engines: {node: '>= 6'}
+
   format@0.2.2:
     resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
     engines: {node: '>=0.4.x'}
@@ -11235,6 +11245,9 @@ packages:
   undici-types@6.19.8:
     resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
 
+  undici-types@6.20.0:
+    resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
+
   undici@5.28.5:
     resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==}
     engines: {node: '>=14.0'}
@@ -11965,9 +11978,9 @@ snapshots:
       '@jridgewell/gen-mapping': 0.3.8
       '@jridgewell/trace-mapping': 0.3.25
 
-  '@anthropic-ai/sdk@0.32.1':
+  '@anthropic-ai/sdk@0.37.0':
     dependencies:
-      '@types/node': 18.19.75
+      '@types/node': 18.19.76
       '@types/node-fetch': 2.6.12
       abort-controller: 3.0.0
       agentkeepalive: 4.6.0
@@ -12930,7 +12943,7 @@ snapshots:
     dependencies:
       mime: 3.0.0
 
-  '@cloudflare/vitest-pool-workers@0.5.41(@cloudflare/workers-types@4.20250204.0)(@vitest/runner@2.1.5)(@vitest/snapshot@2.1.5)(bufferutil@4.0.9)(vitest@2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(terser@5.38.2))':
+  '@cloudflare/vitest-pool-workers@0.5.41(@cloudflare/workers-types@4.20250204.0)(@vitest/runner@2.1.5)(@vitest/snapshot@2.1.5)(bufferutil@4.0.9)(vitest@2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.13.5)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(terser@5.38.2))':
     dependencies:
       '@vitest/runner': 2.1.5
       '@vitest/snapshot': 2.1.5
@@ -12940,7 +12953,7 @@ snapshots:
       esbuild: 0.17.19
       miniflare: 3.20241230.0(bufferutil@4.0.9)
       semver: 7.7.1
-      vitest: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(terser@5.38.2)
+      vitest: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.13.5)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(terser@5.38.2)
       wrangler: 3.100.0(@cloudflare/workers-types@4.20250204.0)(bufferutil@4.0.9)
       zod: 3.24.2
     transitivePeerDependencies:
@@ -13722,12 +13735,33 @@ snapshots:
   '@img/sharp-win32-x64@0.33.5':
     optional: true
 
+  '@inquirer/confirm@5.1.5(@types/node@22.13.5)':
+    dependencies:
+      '@inquirer/core': 10.1.6(@types/node@22.13.5)
+      '@inquirer/type': 3.0.4(@types/node@22.13.5)
+    optionalDependencies:
+      '@types/node': 22.13.5
+
   '@inquirer/confirm@5.1.5(@types/node@22.9.0)':
     dependencies:
       '@inquirer/core': 10.1.6(@types/node@22.9.0)
       '@inquirer/type': 3.0.4(@types/node@22.9.0)
     optionalDependencies:
       '@types/node': 22.9.0
+    optional: true
+
+  '@inquirer/core@10.1.6(@types/node@22.13.5)':
+    dependencies:
+      '@inquirer/figures': 1.0.10
+      '@inquirer/type': 3.0.4(@types/node@22.13.5)
+      ansi-escapes: 4.3.2
+      cli-width: 4.1.0
+      mute-stream: 2.0.0
+      signal-exit: 4.1.0
+      wrap-ansi: 6.2.0
+      yoctocolors-cjs: 2.1.2
+    optionalDependencies:
+      '@types/node': 22.13.5
 
   '@inquirer/core@10.1.6(@types/node@22.9.0)':
     dependencies:
@@ -13741,12 +13775,18 @@ snapshots:
       yoctocolors-cjs: 2.1.2
     optionalDependencies:
       '@types/node': 22.9.0
+    optional: true
 
   '@inquirer/figures@1.0.10': {}
 
+  '@inquirer/type@3.0.4(@types/node@22.13.5)':
+    optionalDependencies:
+      '@types/node': 22.13.5
+
   '@inquirer/type@3.0.4(@types/node@22.9.0)':
     optionalDependencies:
       '@types/node': 22.9.0
+    optional: true
 
   '@internationalized/date@3.7.0':
     dependencies:
@@ -15864,8 +15904,8 @@ snapshots:
 
   '@types/node-fetch@2.6.12':
     dependencies:
-      '@types/node': 22.9.0
-      form-data: 4.0.1
+      '@types/node': 18.19.76
+      form-data: 4.0.2
 
   '@types/node-forge@1.3.11':
     dependencies:
@@ -15877,6 +15917,14 @@ snapshots:
     dependencies:
       undici-types: 5.26.5
 
+  '@types/node@18.19.76':
+    dependencies:
+      undici-types: 5.26.5
+
+  '@types/node@22.13.5':
+    dependencies:
+      undici-types: 6.20.0
+
   '@types/node@22.9.0':
     dependencies:
       undici-types: 6.19.8
@@ -16066,14 +16114,14 @@ snapshots:
     transitivePeerDependencies:
       - utf-8-validate
 
-  '@vitejs/plugin-react@4.3.4(vite@6.1.0(@types/node@22.9.0)(jiti@2.4.2)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0))':
+  '@vitejs/plugin-react@4.3.4(vite@6.1.0(@types/node@22.13.5)(jiti@2.4.2)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0))':
     dependencies:
       '@babel/core': 7.26.8
       '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8)
       '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.8)
       '@types/babel__core': 7.20.5
       react-refresh: 0.14.2
-      vite: 6.1.0(@types/node@22.9.0)(jiti@2.4.2)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0)
+      vite: 6.1.0(@types/node@22.13.5)(jiti@2.4.2)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0)
     transitivePeerDependencies:
       - supports-color
 
@@ -16084,6 +16132,24 @@ snapshots:
       chai: 5.1.2
       tinyrainbow: 1.2.0
 
+  '@vitest/mocker@2.1.5(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(vite@5.4.14(@types/node@22.13.5)(terser@5.38.2))':
+    dependencies:
+      '@vitest/spy': 2.1.5
+      estree-walker: 3.0.3
+      magic-string: 0.30.17
+    optionalDependencies:
+      msw: 2.7.0(@types/node@22.13.5)(typescript@5.7.2)
+      vite: 5.4.14(@types/node@22.13.5)(terser@5.38.2)
+
+  '@vitest/mocker@2.1.5(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.3))(vite@5.4.14(@types/node@22.13.5)(terser@5.38.2))':
+    dependencies:
+      '@vitest/spy': 2.1.5
+      estree-walker: 3.0.3
+      magic-string: 0.30.17
+    optionalDependencies:
+      msw: 2.7.0(@types/node@22.13.5)(typescript@5.7.3)
+      vite: 5.4.14(@types/node@22.13.5)(terser@5.38.2)
+
   '@vitest/mocker@2.1.5(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(vite@5.4.14(@types/node@22.9.0)(terser@5.38.2))':
     dependencies:
       '@vitest/spy': 2.1.5
@@ -16452,7 +16518,7 @@ snapshots:
     dependencies:
       humanize-ms: 1.2.1
 
-  ai@3.4.33(openai@4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2))(react@19.0.0)(sswr@2.1.0(svelte@5.19.10))(svelte@5.19.10)(vue@3.5.13(typescript@5.7.2))(zod@3.24.2):
+  ai@3.4.33(openai@4.83.0(zod@3.24.2))(react@19.0.0)(sswr@2.1.0(svelte@5.19.10))(svelte@5.19.10)(vue@3.5.13(typescript@5.7.2))(zod@3.24.2):
     dependencies:
       '@ai-sdk/provider': 0.0.26
       '@ai-sdk/provider-utils': 1.0.22(zod@3.24.2)
@@ -16468,7 +16534,7 @@ snapshots:
       secure-json-parse: 2.7.0
       zod-to-json-schema: 3.24.1(zod@3.24.2)
     optionalDependencies:
-      openai: 4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2)
+      openai: 4.83.0(ws@8.18.0)(zod@3.24.2)
       react: 19.0.0
       sswr: 2.1.0(svelte@5.19.10)
       svelte: 5.19.10
@@ -17067,13 +17133,13 @@ snapshots:
     transitivePeerDependencies:
       - bare-buffer
 
-  chromadb@1.10.3(cohere-ai@7.14.0)(openai@4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2)):
+  chromadb@1.10.3(cohere-ai@7.14.0)(openai@4.83.0):
     dependencies:
       cliui: 8.0.1
       isomorphic-fetch: 3.0.0
     optionalDependencies:
       cohere-ai: 7.14.0
-      openai: 4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2)
+      openai: 4.83.0(ws@8.18.0)(zod@3.24.2)
     transitivePeerDependencies:
       - encoding
 
@@ -17874,7 +17940,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2)):
+  eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)):
     dependencies:
       debug: 3.2.7
     optionalDependencies:
@@ -17896,7 +17962,7 @@ snapshots:
       doctrine: 2.1.0
       eslint: 9.16.0(jiti@2.4.2)
       eslint-import-resolver-node: 0.3.9
-      eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2))
+      eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2))
       hasown: 2.0.2
       is-core-module: 2.16.1
       is-glob: 4.0.3
@@ -18036,7 +18102,7 @@ snapshots:
     dependencies:
       estraverse: 5.3.0
 
-  esrap@1.4.4:
+  esrap@1.4.5:
     dependencies:
       '@jridgewell/sourcemap-codec': 1.5.0
 
@@ -18352,6 +18418,13 @@ snapshots:
       combined-stream: 1.0.8
       mime-types: 2.1.35
 
+  form-data@4.0.2:
+    dependencies:
+      asynckit: 0.4.0
+      combined-stream: 1.0.8
+      es-set-tostringtag: 2.1.0
+      mime-types: 2.1.35
+
   format@0.2.2: {}
 
   formdata-node@4.4.1:
@@ -20956,6 +21029,57 @@ snapshots:
 
   ms@2.1.3: {}
 
+  msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2):
+    dependencies:
+      '@bundled-es-modules/cookie': 2.0.1
+      '@bundled-es-modules/statuses': 1.0.1
+      '@bundled-es-modules/tough-cookie': 0.1.6
+      '@inquirer/confirm': 5.1.5(@types/node@22.13.5)
+      '@mswjs/interceptors': 0.37.6
+      '@open-draft/deferred-promise': 2.2.0
+      '@open-draft/until': 2.1.0
+      '@types/cookie': 0.6.0
+      '@types/statuses': 2.0.5
+      graphql: 16.10.0
+      headers-polyfill: 4.0.3
+      is-node-process: 1.2.0
+      outvariant: 1.4.3
+      path-to-regexp: 6.3.0
+      picocolors: 1.1.1
+      strict-event-emitter: 0.5.1
+      type-fest: 4.34.1
+      yargs: 17.7.2
+    optionalDependencies:
+      typescript: 5.7.2
+    transitivePeerDependencies:
+      - '@types/node'
+    optional: true
+
+  msw@2.7.0(@types/node@22.13.5)(typescript@5.7.3):
+    dependencies:
+      '@bundled-es-modules/cookie': 2.0.1
+      '@bundled-es-modules/statuses': 1.0.1
+      '@bundled-es-modules/tough-cookie': 0.1.6
+      '@inquirer/confirm': 5.1.5(@types/node@22.13.5)
+      '@mswjs/interceptors': 0.37.6
+      '@open-draft/deferred-promise': 2.2.0
+      '@open-draft/until': 2.1.0
+      '@types/cookie': 0.6.0
+      '@types/statuses': 2.0.5
+      graphql: 16.10.0
+      headers-polyfill: 4.0.3
+      is-node-process: 1.2.0
+      outvariant: 1.4.3
+      path-to-regexp: 6.3.0
+      picocolors: 1.1.1
+      strict-event-emitter: 0.5.1
+      type-fest: 4.34.1
+      yargs: 17.7.2
+    optionalDependencies:
+      typescript: 5.7.3
+    transitivePeerDependencies:
+      - '@types/node'
+
   msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2):
     dependencies:
       '@bundled-es-modules/cookie': 2.0.1
@@ -21006,6 +21130,7 @@ snapshots:
       typescript: 5.7.3
     transitivePeerDependencies:
       - '@types/node'
+    optional: true
 
   mustache@4.2.0: {}
 
@@ -21346,7 +21471,7 @@ snapshots:
       is-docker: 2.2.1
       is-wsl: 2.2.0
 
-  openai@4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2):
+  openai@4.83.0(ws@8.18.0)(zod@3.24.2):
     dependencies:
       '@types/node': 18.19.75
       '@types/node-fetch': 2.6.12
@@ -21884,7 +22009,7 @@ snapshots:
       '@protobufjs/pool': 1.1.0
       '@protobufjs/utf8': 1.1.0
       '@types/long': 4.0.2
-      '@types/node': 22.9.0
+      '@types/node': 22.13.5
       long: 4.0.0
 
   protobufjs@7.4.0:
@@ -23256,7 +23381,7 @@ snapshots:
       axobject-query: 4.1.0
       clsx: 2.1.1
       esm-env: 1.2.2
-      esrap: 1.4.4
+      esrap: 1.4.5
       is-reference: 3.0.3
       locate-character: 3.0.0
       magic-string: 0.30.17
@@ -23740,6 +23865,8 @@ snapshots:
 
   undici-types@6.19.8: {}
 
+  undici-types@6.20.0: {}
+
   undici@5.28.5:
     dependencies:
       '@fastify/busboy': 2.1.1
@@ -23977,6 +24104,24 @@ snapshots:
       '@types/unist': 3.0.3
       vfile-message: 4.0.2
 
+  vite-node@2.1.5(@types/node@22.13.5)(terser@5.38.2):
+    dependencies:
+      cac: 6.7.14
+      debug: 4.4.0
+      es-module-lexer: 1.6.0
+      pathe: 1.1.2
+      vite: 5.4.14(@types/node@22.13.5)(terser@5.38.2)
+    transitivePeerDependencies:
+      - '@types/node'
+      - less
+      - lightningcss
+      - sass
+      - sass-embedded
+      - stylus
+      - sugarss
+      - supports-color
+      - terser
+
   vite-node@2.1.5(@types/node@22.9.0)(terser@5.38.2):
     dependencies:
       cac: 6.7.14
@@ -23995,9 +24140,19 @@ snapshots:
       - supports-color
       - terser
 
-  vite-plugin-wasm@3.4.1(vite@5.4.14(@types/node@22.9.0)(terser@5.38.2)):
+  vite-plugin-wasm@3.4.1(vite@5.4.14(@types/node@22.13.5)(terser@5.38.2)):
     dependencies:
-      vite: 5.4.14(@types/node@22.9.0)(terser@5.38.2)
+      vite: 5.4.14(@types/node@22.13.5)(terser@5.38.2)
+
+  vite@5.4.14(@types/node@22.13.5)(terser@5.38.2):
+    dependencies:
+      esbuild: 0.21.5
+      postcss: 8.5.2
+      rollup: 4.34.6
+    optionalDependencies:
+      '@types/node': 22.13.5
+      fsevents: 2.3.3
+      terser: 5.38.2
 
   vite@5.4.14(@types/node@22.9.0)(terser@5.38.2):
     dependencies:
@@ -24009,19 +24164,93 @@ snapshots:
       fsevents: 2.3.3
       terser: 5.38.2
 
-  vite@6.1.0(@types/node@22.9.0)(jiti@2.4.2)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0):
+  vite@6.1.0(@types/node@22.13.5)(jiti@2.4.2)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0):
     dependencies:
       esbuild: 0.24.2
       postcss: 8.5.2
       rollup: 4.34.6
     optionalDependencies:
-      '@types/node': 22.9.0
+      '@types/node': 22.13.5
       fsevents: 2.3.3
       jiti: 2.4.2
       terser: 5.38.2
       tsx: 4.19.2
       yaml: 2.7.0
 
+  vitest@2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.13.5)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(terser@5.38.2):
+    dependencies:
+      '@vitest/expect': 2.1.5
+      '@vitest/mocker': 2.1.5(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.2))(vite@5.4.14(@types/node@22.13.5)(terser@5.38.2))
+      '@vitest/pretty-format': 2.1.9
+      '@vitest/runner': 2.1.5
+      '@vitest/snapshot': 2.1.5
+      '@vitest/spy': 2.1.5
+      '@vitest/utils': 2.1.5
+      chai: 5.1.2
+      debug: 4.4.0
+      expect-type: 1.1.0
+      magic-string: 0.30.17
+      pathe: 1.1.2
+      std-env: 3.8.0
+      tinybench: 2.9.0
+      tinyexec: 0.3.2
+      tinypool: 1.0.2
+      tinyrainbow: 1.2.0
+      vite: 5.4.14(@types/node@22.13.5)(terser@5.38.2)
+      vite-node: 2.1.5(@types/node@22.13.5)(terser@5.38.2)
+      why-is-node-running: 2.3.0
+    optionalDependencies:
+      '@edge-runtime/vm': 4.0.4
+      '@types/node': 22.13.5
+      happy-dom: 15.11.7
+    transitivePeerDependencies:
+      - less
+      - lightningcss
+      - msw
+      - sass
+      - sass-embedded
+      - stylus
+      - sugarss
+      - supports-color
+      - terser
+
+  vitest@2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.13.5)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.3))(terser@5.38.2):
+    dependencies:
+      '@vitest/expect': 2.1.5
+      '@vitest/mocker': 2.1.5(msw@2.7.0(@types/node@22.13.5)(typescript@5.7.3))(vite@5.4.14(@types/node@22.13.5)(terser@5.38.2))
+      '@vitest/pretty-format': 2.1.9
+      '@vitest/runner': 2.1.5
+      '@vitest/snapshot': 2.1.5
+      '@vitest/spy': 2.1.5
+      '@vitest/utils': 2.1.5
+      chai: 5.1.2
+      debug: 4.4.0
+      expect-type: 1.1.0
+      magic-string: 0.30.17
+      pathe: 1.1.2
+      std-env: 3.8.0
+      tinybench: 2.9.0
+      tinyexec: 0.3.2
+      tinypool: 1.0.2
+      tinyrainbow: 1.2.0
+      vite: 5.4.14(@types/node@22.13.5)(terser@5.38.2)
+      vite-node: 2.1.5(@types/node@22.13.5)(terser@5.38.2)
+      why-is-node-running: 2.3.0
+    optionalDependencies:
+      '@edge-runtime/vm': 4.0.4
+      '@types/node': 22.13.5
+      happy-dom: 15.11.7
+    transitivePeerDependencies:
+      - less
+      - lightningcss
+      - msw
+      - sass
+      - sass-embedded
+      - stylus
+      - sugarss
+      - supports-color
+      - terser
+
   vitest@2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.2))(terser@5.38.2):
     dependencies:
       '@vitest/expect': 2.1.5
@@ -24119,18 +24348,18 @@ snapshots:
 
   w3c-keyname@2.2.8: {}
 
-  waku@0.21.20(@swc/helpers@0.5.15)(@types/node@22.9.0)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react-server-dom-webpack@19.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(webpack@5.97.1))(react@19.0.0)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0):
+  waku@0.21.20(@swc/helpers@0.5.15)(@types/node@22.13.5)(jiti@2.4.2)(react-dom@19.0.0(react@19.0.0))(react-server-dom-webpack@19.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(webpack@5.97.1))(react@19.0.0)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0):
     dependencies:
       '@hono/node-server': 1.13.8(hono@4.7.1)
       '@swc/core': 1.10.16(@swc/helpers@0.5.15)
-      '@vitejs/plugin-react': 4.3.4(vite@6.1.0(@types/node@22.9.0)(jiti@2.4.2)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0))
+      '@vitejs/plugin-react': 4.3.4(vite@6.1.0(@types/node@22.13.5)(jiti@2.4.2)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0))
       dotenv: 16.4.7
       hono: 4.7.1
       react: 19.0.0
       react-dom: 19.0.0(react@19.0.0)
       react-server-dom-webpack: 19.0.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(webpack@5.97.1)
       rsc-html-stream: 0.0.4
-      vite: 6.1.0(@types/node@22.9.0)(jiti@2.4.2)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0)
+      vite: 6.1.0(@types/node@22.13.5)(jiti@2.4.2)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0)
     transitivePeerDependencies:
       - '@swc/helpers'
       - '@types/node'
-- 
GitLab