diff --git a/agent/src/index.ts b/agent/src/index.ts
index 803acfd895e..a1ad2f470b0 100644
--- a/agent/src/index.ts
+++ b/agent/src/index.ts
@@ -95,17 +95,10 @@ export async function loadCharacters(
         characterPaths,
         cwd: process.cwd(),
         dirname: __dirname,
-        fullPath: path.resolve(
-            process.cwd(),
-            "characters/8bitoracle.laozi.character.json"
-        ),
-        exists: fs.existsSync(
-            path.resolve(
-                process.cwd(),
-                "characters/8bitoracle.laozi.character.json"
-            )
-        ),
         dirContents: fs.readdirSync(process.cwd()),
+        characters: fs
+            .readdirSync(path.join(process.cwd(), "characters"))
+            .filter((file) => file.endsWith(".character.json")),
     });
 
     if (characterPaths?.length > 0) {
diff --git a/package.json b/package.json
index dc11aa5e4a1..f9676f223c6 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
     "name": "eliza",
     "scripts": {
         "preinstall": "npx only-allow pnpm",
-        "build": "turbo check-types build",
+        "build": "turbo run build --filter=@ai16z/plugin-bootstrap^... --filter=@ai16z/eliza^...",
         "start": "pnpm --filter \"@ai16z/agent\" start --isRoot",
         "start:client": "pnpm --dir client start --isRoot",
         "start:debug": "cross-env NODE_ENV=development VERBOSE=true DEBUG=eliza:* pnpm --filter \"@ai16z/agent\" start --isRoot",
@@ -61,4 +61,4 @@
     "workspaces": [
         "packages/*"
     ]
-}
+}
\ No newline at end of file
diff --git a/packages/adapter-postgres/src/index.ts b/packages/adapter-postgres/src/index.ts
index 0324275f323..bceeae1415f 100644
--- a/packages/adapter-postgres/src/index.ts
+++ b/packages/adapter-postgres/src/index.ts
@@ -1,8 +1,8 @@
 import { v4 } from "uuid";
 
-// Import the entire module as default
-import pg from "pg";
-type Pool = pg.Pool;
+import postgres from "pg";
+const { Pool } = postgres;
+type PoolType = typeof postgres.Pool;
 
 import {
     QueryConfig,
@@ -32,10 +32,10 @@ const __filename = fileURLToPath(import.meta.url); // get the resolved path to t
 const __dirname = path.dirname(__filename); // get the name of the directory
 
 export class PostgresDatabaseAdapter
-    extends DatabaseAdapter<Pool>
+    extends DatabaseAdapter<PoolType>
     implements IDatabaseCacheAdapter
 {
-    private pool: Pool;
+    private pool: InstanceType<PoolType>;
     private readonly maxRetries: number = 3;
     private readonly baseDelay: number = 1000; // 1 second
     private readonly maxDelay: number = 10000; // 10 seconds
@@ -51,7 +51,7 @@ export class PostgresDatabaseAdapter
             connectionTimeoutMillis: this.connectionTimeout,
         };
 
-        this.pool = new pg.Pool({
+        this.pool = new Pool({
             ...defaultConfig,
             ...connectionConfig, // Allow overriding defaults
         });
@@ -137,7 +137,7 @@ export class PostgresDatabaseAdapter
             await this.pool.end();
 
             // Create new pool
-            this.pool = new pg.Pool({
+            this.pool = new Pool({
                 ...this.pool.options,
                 connectionTimeoutMillis: this.connectionTimeout,
             });
@@ -174,12 +174,33 @@ export class PostgresDatabaseAdapter
     async init() {
         await this.testConnection();
 
-        const schema = fs.readFileSync(
-            path.resolve(__dirname, "../schema.sql"),
-            "utf8"
-        );
+        const client = await this.pool.connect();
+        try {
+            await client.query("BEGIN");
+
+            // Check if schema already exists (check for a core table)
+            const { rows } = await client.query(`
+                SELECT EXISTS (
+                    SELECT FROM information_schema.tables
+                    WHERE table_name = 'rooms'
+                );
+            `);
+
+            if (!rows[0].exists) {
+                const schema = fs.readFileSync(
+                    path.resolve(__dirname, "../schema.sql"),
+                    "utf8"
+                );
+                await client.query(schema);
+            }
 
-        await this.query(schema);
+            await client.query("COMMIT");
+        } catch (error) {
+            await client.query("ROLLBACK");
+            throw error;
+        } finally {
+            client.release();
+        }
     }
 
     async close() {
diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts
index 1edd49de65b..b900328e88b 100644
--- a/packages/core/src/types.ts
+++ b/packages/core/src/types.ts
@@ -674,8 +674,17 @@ export type Character = {
         secrets?: { [key: string]: string };
         buttplug?: boolean;
         voice?: {
-            model?: string;
-            url?: string;
+            model?: string; // For VITS
+            url?: string; // Legacy VITS support
+            elevenlabs?: {
+                // New structured ElevenLabs config
+                voiceId: string;
+                model?: string;
+                stability?: string;
+                similarityBoost?: string;
+                style?: string;
+                useSpeakerBoost?: string;
+            };
         };
         model?: string;
         embeddingModel?: string;
diff --git a/packages/plugin-node/src/enviroment.ts b/packages/plugin-node/src/enviroment.ts
index 779704cb422..5d30bb93edb 100644
--- a/packages/plugin-node/src/enviroment.ts
+++ b/packages/plugin-node/src/enviroment.ts
@@ -3,27 +3,21 @@ import { z } from "zod";
 
 export const nodeEnvSchema = z.object({
     OPENAI_API_KEY: z.string().min(1, "OpenAI API key is required"),
+
+    // Core settings
     ELEVENLABS_XI_API_KEY: z.string().optional(),
-    ELEVENLABS_MODEL_ID: z.string().min(1, "ElevenLabs model ID is required"),
-    ELEVENLABS_VOICE_ID: z.string().min(1, "ElevenLabs voice ID is required"),
-    ELEVENLABS_VOICE_STABILITY: z
-        .string()
-        .min(1, "ElevenLabs voice stability is required"),
-    ELEVENLABS_VOICE_SIMILARITY_BOOST: z
-        .string()
-        .min(1, "ElevenLabs voice similarity boost is required"),
-    ELEVENLABS_VOICE_STYLE: z
-        .string()
-        .min(1, "ElevenLabs voice style is required"),
-    ELEVENLABS_VOICE_USE_SPEAKER_BOOST: z
-        .string()
-        .min(1, "ElevenLabs voice speaker boost setting is required"),
-    ELEVENLABS_OPTIMIZE_STREAMING_LATENCY: z
-        .string()
-        .min(1, "ElevenLabs streaming latency optimization is required"),
-    ELEVENLABS_OUTPUT_FORMAT: z
-        .string()
-        .min(1, "ElevenLabs output format is required"),
+
+    // All other settings optional with defaults
+    ELEVENLABS_MODEL_ID: z.string().optional(),
+    ELEVENLABS_VOICE_ID: z.string().optional(),
+    ELEVENLABS_VOICE_STABILITY: z.string().optional(),
+    ELEVENLABS_VOICE_SIMILARITY_BOOST: z.string().optional(),
+    ELEVENLABS_VOICE_STYLE: z.string().optional(),
+    ELEVENLABS_VOICE_USE_SPEAKER_BOOST: z.string().optional(),
+    ELEVENLABS_OPTIMIZE_STREAMING_LATENCY: z.string().optional(),
+    ELEVENLABS_OUTPUT_FORMAT: z.string().optional(),
+    VITS_VOICE: z.string().optional(),
+    VITS_MODEL: z.string().optional(),
 });
 
 export type NodeConfig = z.infer<typeof nodeEnvSchema>;
@@ -32,34 +26,51 @@ export async function validateNodeConfig(
     runtime: IAgentRuntime
 ): Promise<NodeConfig> {
     try {
+        const voiceSettings = runtime.character.settings?.voice;
+        const elevenlabs = voiceSettings?.elevenlabs;
+
+        // Only include what's absolutely required
         const config = {
             OPENAI_API_KEY:
                 runtime.getSetting("OPENAI_API_KEY") ||
                 process.env.OPENAI_API_KEY,
-            ELEVENLABS_MODEL_ID:
-                runtime.getSetting("ELEVENLABS_MODEL_ID") ||
-                process.env.ELEVENLABS_MODEL_ID,
-            ELEVENLABS_VOICE_ID:
-                runtime.getSetting("ELEVENLABS_VOICE_ID") ||
-                process.env.ELEVENLABS_VOICE_ID,
-            ELEVENLABS_VOICE_STABILITY:
-                runtime.getSetting("ELEVENLABS_VOICE_STABILITY") ||
-                process.env.ELEVENLABS_VOICE_STABILITY,
-            ELEVENLABS_VOICE_SIMILARITY_BOOST:
-                runtime.getSetting("ELEVENLABS_VOICE_SIMILARITY_BOOST") ||
-                process.env.ELEVENLABS_VOICE_SIMILARITY_BOOST,
-            ELEVENLABS_VOICE_STYLE:
-                runtime.getSetting("ELEVENLABS_VOICE_STYLE") ||
-                process.env.ELEVENLABS_VOICE_STYLE,
-            ELEVENLABS_VOICE_USE_SPEAKER_BOOST:
-                runtime.getSetting("ELEVENLABS_VOICE_USE_SPEAKER_BOOST") ||
-                process.env.ELEVENLABS_VOICE_USE_SPEAKER_BOOST,
-            ELEVENLABS_OPTIMIZE_STREAMING_LATENCY:
-                runtime.getSetting("ELEVENLABS_OPTIMIZE_STREAMING_LATENCY") ||
-                process.env.ELEVENLABS_OPTIMIZE_STREAMING_LATENCY,
-            ELEVENLABS_OUTPUT_FORMAT:
-                runtime.getSetting("ELEVENLABS_OUTPUT_FORMAT") ||
-                process.env.ELEVENLABS_OUTPUT_FORMAT,
+            ELEVENLABS_XI_API_KEY:
+                runtime.getSetting("ELEVENLABS_XI_API_KEY") ||
+                process.env.ELEVENLABS_XI_API_KEY,
+
+            // Use character card settings first, fall back to env vars, then defaults
+            ...(runtime.getSetting("ELEVENLABS_XI_API_KEY") && {
+                ELEVENLABS_MODEL_ID:
+                    elevenlabs?.model ||
+                    process.env.ELEVENLABS_MODEL_ID ||
+                    "eleven_monolingual_v1",
+                ELEVENLABS_VOICE_ID:
+                    elevenlabs?.voiceId || process.env.ELEVENLABS_VOICE_ID,
+                ELEVENLABS_VOICE_STABILITY:
+                    elevenlabs?.stability ||
+                    process.env.ELEVENLABS_VOICE_STABILITY ||
+                    "0.5",
+                ELEVENLABS_VOICE_SIMILARITY_BOOST:
+                    elevenlabs?.similarityBoost ||
+                    process.env.ELEVENLABS_VOICE_SIMILARITY_BOOST ||
+                    "0.75",
+                ELEVENLABS_VOICE_STYLE:
+                    elevenlabs?.style ||
+                    process.env.ELEVENLABS_VOICE_STYLE ||
+                    "0",
+                ELEVENLABS_VOICE_USE_SPEAKER_BOOST:
+                    elevenlabs?.useSpeakerBoost ||
+                    process.env.ELEVENLABS_VOICE_USE_SPEAKER_BOOST ||
+                    "true",
+                ELEVENLABS_OPTIMIZE_STREAMING_LATENCY:
+                    process.env.ELEVENLABS_OPTIMIZE_STREAMING_LATENCY || "0",
+                ELEVENLABS_OUTPUT_FORMAT:
+                    process.env.ELEVENLABS_OUTPUT_FORMAT || "pcm_16000",
+            }),
+
+            // VITS settings
+            VITS_VOICE: voiceSettings?.model || process.env.VITS_VOICE,
+            VITS_MODEL: process.env.VITS_MODEL,
         };
 
         return nodeEnvSchema.parse(config);
diff --git a/packages/plugin-node/src/services/speech.ts b/packages/plugin-node/src/services/speech.ts
index 58533f804b5..d44c28fb69f 100644
--- a/packages/plugin-node/src/services/speech.ts
+++ b/packages/plugin-node/src/services/speech.ts
@@ -4,6 +4,7 @@ import { getWavHeader } from "./audioUtils.ts";
 import { Service } from "@ai16z/eliza";
 import { validateNodeConfig } from "../enviroment.ts";
 import * as Echogarden from "echogarden";
+import { elizaLogger } from "@ai16z/eliza";
 
 function prependWavHeader(
     readable: Readable,
@@ -33,12 +34,50 @@ function prependWavHeader(
     return passThrough;
 }
 
+async function getVoiceSettings(runtime: IAgentRuntime) {
+    const hasElevenLabs = !!runtime.getSetting("ELEVENLABS_XI_API_KEY");
+    const useVits = !hasElevenLabs;
+
+    // Get voice settings from character card
+    const voiceSettings = runtime.character.settings?.voice;
+    const elevenlabsSettings = voiceSettings?.elevenlabs;
+
+    elizaLogger.debug("Voice settings:", {
+        hasElevenLabs,
+        useVits,
+        voiceSettings,
+        elevenlabsSettings,
+    });
+
+    return {
+        elevenlabsVoiceId:
+            elevenlabsSettings?.voiceId ||
+            runtime.getSetting("ELEVENLABS_VOICE_ID"),
+        elevenlabsModel:
+            elevenlabsSettings?.model ||
+            runtime.getSetting("ELEVENLABS_MODEL_ID") ||
+            "eleven_monolingual_v1",
+        elevenlabsStability:
+            elevenlabsSettings?.stability ||
+            runtime.getSetting("ELEVENLABS_VOICE_STABILITY") ||
+            "0.5",
+        // ... other ElevenLabs settings ...
+        vitsVoice:
+            voiceSettings?.model ||
+            voiceSettings?.url ||
+            runtime.getSetting("VITS_VOICE") ||
+            "en_US-hfc_female-medium",
+        useVits,
+    };
+}
+
 async function textToSpeech(runtime: IAgentRuntime, text: string) {
     await validateNodeConfig(runtime);
+    const { elevenlabsVoiceId } = await getVoiceSettings(runtime);
 
     try {
         const response = await fetch(
-            `https://api.elevenlabs.io/v1/text-to-speech/${runtime.getSetting("ELEVENLABS_VOICE_ID")}/stream?optimize_streaming_latency=${runtime.getSetting("ELEVENLABS_OPTIMIZE_STREAMING_LATENCY")}&output_format=${runtime.getSetting("ELEVENLABS_OUTPUT_FORMAT")}`,
+            `https://api.elevenlabs.io/v1/text-to-speech/${elevenlabsVoiceId}/stream?optimize_streaming_latency=${runtime.getSetting("ELEVENLABS_OPTIMIZE_STREAMING_LATENCY")}&output_format=${runtime.getSetting("ELEVENLABS_OUTPUT_FORMAT")}`,
             {
                 method: "POST",
                 headers: {
@@ -125,9 +164,10 @@ async function textToSpeech(runtime: IAgentRuntime, text: string) {
     } catch (error) {
         if (error.message === "QUOTA_EXCEEDED") {
             // Fall back to VITS
+            const { vitsVoice } = await getVoiceSettings(runtime);
             const { audio } = await Echogarden.synthesize(text, {
                 engine: "vits",
-                voice: "en_US-hfc_female-medium",
+                voice: vitsVoice,
             });
 
             let wavStream: Readable;
@@ -173,6 +213,53 @@ async function textToSpeech(runtime: IAgentRuntime, text: string) {
     }
 }
 
+async function processVitsAudio(audio: any): Promise<Readable> {
+    let wavStream: Readable;
+    if (audio instanceof Buffer) {
+        console.log("audio is a buffer");
+        wavStream = Readable.from(audio);
+    } else if ("audioChannels" in audio && "sampleRate" in audio) {
+        console.log("audio is a RawAudio");
+        const floatBuffer = Buffer.from(audio.audioChannels[0].buffer);
+        console.log("buffer length: ", floatBuffer.length);
+
+        const sampleRate = audio.sampleRate;
+        const floatArray = new Float32Array(floatBuffer.buffer);
+        const pcmBuffer = new Int16Array(floatArray.length);
+
+        for (let i = 0; i < floatArray.length; i++) {
+            pcmBuffer[i] = Math.round(floatArray[i] * 32767);
+        }
+
+        const wavHeaderBuffer = getWavHeader(
+            pcmBuffer.length * 2,
+            sampleRate,
+            1,
+            16
+        );
+        const wavBuffer = Buffer.concat([
+            wavHeaderBuffer,
+            Buffer.from(pcmBuffer.buffer),
+        ]);
+        wavStream = Readable.from(wavBuffer);
+    } else {
+        throw new Error("Unsupported audio format");
+    }
+    return wavStream;
+}
+
+async function generateVitsAudio(
+    runtime: IAgentRuntime,
+    text: string
+): Promise<Readable> {
+    const { vitsVoice } = await getVoiceSettings(runtime);
+    const { audio } = await Echogarden.synthesize(text, {
+        engine: "vits",
+        voice: vitsVoice,
+    });
+    return processVitsAudio(audio);
+}
+
 export class SpeechService extends Service implements ISpeechService {
     static serviceType: ServiceType = ServiceType.SPEECH_GENERATION;
 
@@ -184,103 +271,16 @@ export class SpeechService extends Service implements ISpeechService {
 
     async generate(runtime: IAgentRuntime, text: string): Promise<Readable> {
         try {
-            // check for elevenlabs API key
-            if (runtime.getSetting("ELEVENLABS_XI_API_KEY")) {
-                return await textToSpeech(runtime, text);
-            }
-
-            // Default to VITS if no ElevenLabs API key
-            const { audio } = await Echogarden.synthesize(text, {
-                engine: "vits",
-                voice: "en_US-hfc_female-medium",
-            });
-
-            let wavStream: Readable;
-            if (audio instanceof Buffer) {
-                console.log("audio is a buffer");
-                wavStream = Readable.from(audio);
-            } else if ("audioChannels" in audio && "sampleRate" in audio) {
-                console.log("audio is a RawAudio");
-                const floatBuffer = Buffer.from(audio.audioChannels[0].buffer);
-                console.log("buffer length: ", floatBuffer.length);
-
-                // Get the sample rate from the RawAudio object
-                const sampleRate = audio.sampleRate;
-
-                // Create a Float32Array view of the floatBuffer
-                const floatArray = new Float32Array(floatBuffer.buffer);
-
-                // Convert 32-bit float audio to 16-bit PCM
-                const pcmBuffer = new Int16Array(floatArray.length);
-                for (let i = 0; i < floatArray.length; i++) {
-                    pcmBuffer[i] = Math.round(floatArray[i] * 32767);
-                }
-
-                // Prepend WAV header to the buffer
-                const wavHeaderBuffer = getWavHeader(
-                    pcmBuffer.length * 2,
-                    sampleRate,
-                    1,
-                    16
-                );
-                const wavBuffer = Buffer.concat([
-                    wavHeaderBuffer,
-                    Buffer.from(pcmBuffer.buffer),
-                ]);
+            const { useVits } = await getVoiceSettings(runtime);
 
-                wavStream = Readable.from(wavBuffer);
-            } else {
-                throw new Error("Unsupported audio format");
+            if (useVits || !runtime.getSetting("ELEVENLABS_XI_API_KEY")) {
+                return await generateVitsAudio(runtime, text);
             }
 
-            return wavStream;
+            return await textToSpeech(runtime, text);
         } catch (error) {
             console.error("Speech generation error:", error);
-            // If ElevenLabs fails for any reason, fall back to VITS
-            const { audio } = await Echogarden.synthesize(text, {
-                engine: "vits",
-                voice: "en_US-hfc_female-medium",
-            });
-
-            let wavStream: Readable;
-            if (audio instanceof Buffer) {
-                console.log("audio is a buffer");
-                wavStream = Readable.from(audio);
-            } else if ("audioChannels" in audio && "sampleRate" in audio) {
-                console.log("audio is a RawAudio");
-                const floatBuffer = Buffer.from(audio.audioChannels[0].buffer);
-                console.log("buffer length: ", floatBuffer.length);
-
-                // Get the sample rate from the RawAudio object
-                const sampleRate = audio.sampleRate;
-
-                // Create a Float32Array view of the floatBuffer
-                const floatArray = new Float32Array(floatBuffer.buffer);
-
-                // Convert 32-bit float audio to 16-bit PCM
-                const pcmBuffer = new Int16Array(floatArray.length);
-                for (let i = 0; i < floatArray.length; i++) {
-                    pcmBuffer[i] = Math.round(floatArray[i] * 32767);
-                }
-
-                // Prepend WAV header to the buffer
-                const wavHeaderBuffer = getWavHeader(
-                    pcmBuffer.length * 2,
-                    sampleRate,
-                    1,
-                    16
-                );
-                const wavBuffer = Buffer.concat([
-                    wavHeaderBuffer,
-                    Buffer.from(pcmBuffer.buffer),
-                ]);
-
-                wavStream = Readable.from(wavBuffer);
-            } else {
-                throw new Error("Unsupported audio format");
-            }
-
-            return wavStream;
+            return await generateVitsAudio(runtime, text);
         }
     }
 }
diff --git a/packages/plugin-node/src/vendor/vitsVoiceList.ts b/packages/plugin-node/src/vendor/vitsVoiceList.ts
index 8330fc6d356..2f6720f1578 100644
--- a/packages/plugin-node/src/vendor/vitsVoiceList.ts
+++ b/packages/plugin-node/src/vendor/vitsVoiceList.ts
@@ -1,4 +1,9 @@
-import { SynthesisVoice } from "./vits";
+export interface SynthesisVoice {
+    name: string;
+    languages: string[];
+    gender: string;
+    speakerCount?: number;
+}
 
 export const vitsVoiceList: SynthesisVoice[] = [
     {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5ff737f0c1e..0da69de09d0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -557,7 +557,7 @@ importers:
         version: 2.4.0
       '@discordjs/voice':
         specifier: 0.17.0
-        version: 0.17.0(@discordjs/opus@https://codeload.github.com/discordjs/opus/tar.gz/31da49d8d2cc6c5a2ab1bfd332033ff7d5f9fb02(encoding@0.1.13))(bufferutil@4.0.8)(ffmpeg-static@5.2.0)(utf-8-validate@5.0.10)
+        version: 0.17.0(@discordjs/opus@https://codeload.github.com/discordjs/opus/tar.gz/31da49d8d2cc6c5a2ab1bfd332033ff7d5f9fb02(encoding@0.1.13))(bufferutil@4.0.8)(ffmpeg-static@5.2.0)(node-opus@0.3.3)(utf-8-validate@5.0.10)
       discord.js:
         specifier: 14.16.3
         version: 14.16.3(bufferutil@4.0.8)(utf-8-validate@5.0.10)
@@ -566,7 +566,7 @@ importers:
         version: 0.7.15
       prism-media:
         specifier: 1.3.5
-        version: 1.3.5(@discordjs/opus@https://codeload.github.com/discordjs/opus/tar.gz/31da49d8d2cc6c5a2ab1bfd332033ff7d5f9fb02(encoding@0.1.13))(ffmpeg-static@5.2.0)
+        version: 1.3.5(@discordjs/opus@https://codeload.github.com/discordjs/opus/tar.gz/31da49d8d2cc6c5a2ab1bfd332033ff7d5f9fb02(encoding@0.1.13))(ffmpeg-static@5.2.0)(node-opus@0.3.3)
       whatwg-url:
         specifier: 7.1.0
         version: 7.1.0
@@ -872,7 +872,7 @@ importers:
         version: 2.79.2
       ts-jest:
         specifier: 29.2.5
-        version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.24.0)(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3)
+        version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3)
       ts-node:
         specifier: 10.9.2
         version: 10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)
@@ -1539,109 +1539,6 @@ importers:
         specifier: ^5.0.0
         version: 5.6.3
 
-  web-agent:
-    dependencies:
-      '@ai16z/adapter-sqljs':
-        specifier: workspace:*
-        version: link:../packages/adapter-sqljs
-      '@ai16z/eliza':
-        specifier: workspace:*
-        version: link:../packages/core
-      '@ai16z/plugin-bootstrap':
-        specifier: workspace:*
-        version: link:../packages/plugin-bootstrap
-      '@radix-ui/react-dialog':
-        specifier: 1.1.2
-        version: 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@radix-ui/react-separator':
-        specifier: 1.1.0
-        version: 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@radix-ui/react-slot':
-        specifier: 1.1.0
-        version: 1.1.0(@types/react@18.3.12)(react@18.3.1)
-      '@radix-ui/react-tooltip':
-        specifier: 1.1.4
-        version: 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@tanstack/react-query':
-        specifier: 5.61.0
-        version: 5.61.0(react@18.3.1)
-      class-variance-authority:
-        specifier: 0.7.0
-        version: 0.7.0
-      clsx:
-        specifier: 2.1.0
-        version: 2.1.0
-      lucide-react:
-        specifier: 0.460.0
-        version: 0.460.0(react@18.3.1)
-      react:
-        specifier: 18.3.1
-        version: 18.3.1
-      react-dom:
-        specifier: 18.3.1
-        version: 18.3.1(react@18.3.1)
-      react-router-dom:
-        specifier: 6.22.1
-        version: 6.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      tailwind-merge:
-        specifier: 2.5.4
-        version: 2.5.4
-      tailwindcss-animate:
-        specifier: 1.0.7
-        version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))
-      vite-plugin-top-level-await:
-        specifier: 1.4.4
-        version: 1.4.4(@swc/helpers@0.5.15)(rollup@4.27.4)(vite@web-agent+@tanstack+router-plugin+vite)
-      vite-plugin-wasm:
-        specifier: 3.3.0
-        version: 3.3.0(vite@web-agent+@tanstack+router-plugin+vite)
-    devDependencies:
-      '@eslint/js':
-        specifier: 9.15.0
-        version: 9.15.0
-      '@types/node':
-        specifier: 22.8.4
-        version: 22.8.4
-      '@types/react':
-        specifier: 18.3.12
-        version: 18.3.12
-      '@types/react-dom':
-        specifier: 18.3.1
-        version: 18.3.1
-      '@vitejs/plugin-react':
-        specifier: 4.3.3
-        version: 4.3.3(vite@web-agent+@tanstack+router-plugin+vite)
-      autoprefixer:
-        specifier: 10.4.20
-        version: 10.4.20(postcss@8.4.49)
-      eslint:
-        specifier: 9.13.0
-        version: 9.13.0(jiti@2.4.0)
-      eslint-plugin-react-hooks:
-        specifier: 5.0.0
-        version: 5.0.0(eslint@9.13.0(jiti@2.4.0))
-      eslint-plugin-react-refresh:
-        specifier: 0.4.14
-        version: 0.4.14(eslint@9.13.0(jiti@2.4.0))
-      globals:
-        specifier: 15.11.0
-        version: 15.11.0
-      postcss:
-        specifier: 8.4.49
-        version: 8.4.49
-      tailwindcss:
-        specifier: 3.4.15
-        version: 3.4.15(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3))
-      typescript:
-        specifier: ~5.6.2
-        version: 5.6.3
-      typescript-eslint:
-        specifier: 8.11.0
-        version: 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)
-      vite:
-        specifier: link:@tanstack/router-plugin/vite
-        version: link:@tanstack/router-plugin/vite
-
 packages:
 
   '@0glabs/0g-ts-sdk@0.2.1':
@@ -3957,18 +3854,10 @@ packages:
     resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
 
-  '@eslint/config-array@0.18.0':
-    resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
   '@eslint/config-array@0.19.0':
     resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/core@0.7.0':
-    resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
   '@eslint/core@0.9.0':
     resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -3977,10 +3866,6 @@ packages:
     resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/js@9.13.0':
-    resolution: {integrity: sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
   '@eslint/js@9.15.0':
     resolution: {integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -7515,6 +7400,9 @@ packages:
     resolution: {integrity: sha512-Iy//vPc3ANPNlIWd242Npqc8MK0a/i4kVcHDlDA6HNMv5zMxz4ulIFhOSYJVKw/8AbHdHy0CnGYEt1QqSXxPsw==}
     engines: {node: '>=18'}
 
+  bindings@1.2.1:
+    resolution: {integrity: sha512-u4cBQNepWxYA55FunZSM7wMi55yQaN0otnhhilNoWHq0MfOfJeQx0v0mRRpolGOExPjZcl6FtB0BB8Xkb88F0g==}
+
   bindings@1.5.0:
     resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
 
@@ -9233,16 +9121,6 @@ packages:
     resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  eslint@9.13.0:
-    resolution: {integrity: sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    hasBin: true
-    peerDependencies:
-      jiti: '*'
-    peerDependenciesMeta:
-      jiti:
-        optional: true
-
   eslint@9.16.0:
     resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -12083,6 +11961,13 @@ packages:
   node-machine-id@1.1.12:
     resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==}
 
+  node-opus@0.3.3:
+    resolution: {integrity: sha512-ZQniA8iJ6y/qOTmW6eyzM9m8odt4CIGV0NM9/U03/pYLhGyxy18QXO25WfrWd8XsUYx57tnxll2xxj54CN08uQ==}
+    engines: {node: '>=5.10.0'}
+    cpu: [x64, arm, arm64, ia32]
+    os: [linux, darwin, win32, freebsd, android]
+    deprecated: This project is unmaintained. See @discordjs/opus for an alternative.
+
   node-releases@2.0.18:
     resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
 
@@ -12249,6 +12134,9 @@ packages:
   ofetch@1.4.1:
     resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==}
 
+  ogg-packet@1.0.1:
+    resolution: {integrity: sha512-dW1ok3BMnMikyXGDIgVEckWnlViW8JLWQV4qj9aN/rNRVqHlDYSlcIEtSIMH7tpuUOiIxAhY3+OxNdIOm6s17A==}
+
   ohash@1.1.4:
     resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==}
 
@@ -13958,6 +13846,12 @@ packages:
   redeyed@2.1.1:
     resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==}
 
+  ref-struct@1.1.0:
+    resolution: {integrity: sha512-h2OSdAUycdqiwFBp2wB3XEFheWA/U+n/JYnhEi3584JqnCCDXIA3qDIhHH3klIHMNZwrJW+VagpxPGeSf6777Q==}
+
+  ref@1.3.5:
+    resolution: {integrity: sha512-2cBCniTtxcGUjDpvFfVpw323a83/0RLSGJJY5l5lcomZWhYpU2cuLdsvYqMixvsdLJ9+sTdzEkju8J8ZHDM2nA==}
+
   reflect-metadata@0.2.2:
     resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==}
 
@@ -18646,11 +18540,11 @@ snapshots:
 
   '@discordjs/util@1.1.1': {}
 
-  '@discordjs/voice@0.17.0(@discordjs/opus@https://codeload.github.com/discordjs/opus/tar.gz/31da49d8d2cc6c5a2ab1bfd332033ff7d5f9fb02(encoding@0.1.13))(bufferutil@4.0.8)(ffmpeg-static@5.2.0)(utf-8-validate@5.0.10)':
+  '@discordjs/voice@0.17.0(@discordjs/opus@https://codeload.github.com/discordjs/opus/tar.gz/31da49d8d2cc6c5a2ab1bfd332033ff7d5f9fb02(encoding@0.1.13))(bufferutil@4.0.8)(ffmpeg-static@5.2.0)(node-opus@0.3.3)(utf-8-validate@5.0.10)':
     dependencies:
       '@types/ws': 8.5.13
       discord-api-types: 0.37.83
-      prism-media: 1.3.5(@discordjs/opus@https://codeload.github.com/discordjs/opus/tar.gz/31da49d8d2cc6c5a2ab1bfd332033ff7d5f9fb02(encoding@0.1.13))(ffmpeg-static@5.2.0)
+      prism-media: 1.3.5(@discordjs/opus@https://codeload.github.com/discordjs/opus/tar.gz/31da49d8d2cc6c5a2ab1bfd332033ff7d5f9fb02(encoding@0.1.13))(ffmpeg-static@5.2.0)(node-opus@0.3.3)
       tslib: 2.8.0
       ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
     transitivePeerDependencies:
@@ -19777,11 +19671,6 @@ snapshots:
   '@esbuild/win32-x64@0.24.0':
     optional: true
 
-  '@eslint-community/eslint-utils@4.4.1(eslint@9.13.0(jiti@2.4.0))':
-    dependencies:
-      eslint: 9.13.0(jiti@2.4.0)
-      eslint-visitor-keys: 3.4.3
-
   '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0(jiti@2.4.0))':
     dependencies:
       eslint: 9.16.0(jiti@2.4.0)
@@ -19789,14 +19678,6 @@ snapshots:
 
   '@eslint-community/regexpp@4.12.1': {}
 
-  '@eslint/config-array@0.18.0':
-    dependencies:
-      '@eslint/object-schema': 2.1.4
-      debug: 4.3.7(supports-color@5.5.0)
-      minimatch: 3.1.2
-    transitivePeerDependencies:
-      - supports-color
-
   '@eslint/config-array@0.19.0':
     dependencies:
       '@eslint/object-schema': 2.1.4
@@ -19805,8 +19686,6 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint/core@0.7.0': {}
-
   '@eslint/core@0.9.0': {}
 
   '@eslint/eslintrc@3.2.0':
@@ -19823,8 +19702,6 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint/js@9.13.0': {}
-
   '@eslint/js@9.15.0': {}
 
   '@eslint/js@9.16.0': {}
@@ -23080,24 +22957,6 @@ snapshots:
       '@types/node': 20.17.9
     optional: true
 
-  '@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)':
-    dependencies:
-      '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)
-      '@typescript-eslint/scope-manager': 8.11.0
-      '@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)
-      '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)
-      '@typescript-eslint/visitor-keys': 8.11.0
-      eslint: 9.13.0(jiti@2.4.0)
-      graphemer: 1.4.0
-      ignore: 5.3.2
-      natural-compare: 1.4.0
-      ts-api-utils: 1.4.3(typescript@5.6.3)
-    optionalDependencies:
-      typescript: 5.6.3
-    transitivePeerDependencies:
-      - supports-color
-
   '@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)':
     dependencies:
       '@eslint-community/regexpp': 4.12.1
@@ -23152,19 +23011,6 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)':
-    dependencies:
-      '@typescript-eslint/scope-manager': 8.11.0
-      '@typescript-eslint/types': 8.11.0
-      '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3)
-      '@typescript-eslint/visitor-keys': 8.11.0
-      debug: 4.3.7(supports-color@5.5.0)
-      eslint: 9.13.0(jiti@2.4.0)
-    optionalDependencies:
-      typescript: 5.6.3
-    transitivePeerDependencies:
-      - supports-color
-
   '@typescript-eslint/parser@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)':
     dependencies:
       '@typescript-eslint/scope-manager': 8.11.0
@@ -23224,18 +23070,6 @@ snapshots:
       '@typescript-eslint/types': 8.16.0
       '@typescript-eslint/visitor-keys': 8.16.0
 
-  '@typescript-eslint/type-utils@8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)':
-    dependencies:
-      '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3)
-      '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)
-      debug: 4.3.7(supports-color@5.5.0)
-      ts-api-utils: 1.4.3(typescript@5.6.3)
-    optionalDependencies:
-      typescript: 5.6.3
-    transitivePeerDependencies:
-      - eslint
-      - supports-color
-
   '@typescript-eslint/type-utils@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)':
     dependencies:
       '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3)
@@ -23351,17 +23185,6 @@ snapshots:
       - supports-color
       - typescript
 
-  '@typescript-eslint/utils@8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)':
-    dependencies:
-      '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0(jiti@2.4.0))
-      '@typescript-eslint/scope-manager': 8.11.0
-      '@typescript-eslint/types': 8.11.0
-      '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3)
-      eslint: 9.13.0(jiti@2.4.0)
-    transitivePeerDependencies:
-      - supports-color
-      - typescript
-
   '@typescript-eslint/utils@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)':
     dependencies:
       '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.0))
@@ -23456,17 +23279,6 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@vitejs/plugin-react@4.3.3(vite@web-agent+@tanstack+router-plugin+vite)':
-    dependencies:
-      '@babel/core': 7.26.0
-      '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0)
-      '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0)
-      '@types/babel__core': 7.20.5
-      react-refresh: 0.14.2
-      vite: link:web-agent/@tanstack/router-plugin/vite
-    transitivePeerDependencies:
-      - supports-color
-
   '@vitest/coverage-v8@2.1.5(vitest@2.1.5(@types/node@22.8.4)(jsdom@25.0.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@5.0.10))(terser@5.36.0))':
     dependencies:
       '@ampproject/remapping': 2.3.0
@@ -24139,15 +23951,6 @@ snapshots:
     transitivePeerDependencies:
       - debug
 
-  axios@1.7.8:
-    dependencies:
-      follow-redirects: 1.15.9(debug@4.3.7)
-      form-data: 4.0.1
-      proxy-from-env: 1.1.0
-    transitivePeerDependencies:
-      - debug
-    optional: true
-
   axios@1.7.8(debug@4.3.7):
     dependencies:
       follow-redirects: 1.15.9(debug@4.3.7)
@@ -24350,6 +24153,9 @@ snapshots:
       execa: 8.0.1
       find-versions: 6.0.0
 
+  bindings@1.2.1:
+    optional: true
+
   bindings@1.5.0:
     dependencies:
       file-uri-to-path: 1.0.0
@@ -26335,18 +26141,10 @@ snapshots:
       '@types/eslint': 9.6.1
       eslint-config-prettier: 9.1.0(eslint@9.16.0(jiti@2.4.0))
 
-  eslint-plugin-react-hooks@5.0.0(eslint@9.13.0(jiti@2.4.0)):
-    dependencies:
-      eslint: 9.13.0(jiti@2.4.0)
-
   eslint-plugin-react-hooks@5.0.0(eslint@9.16.0(jiti@2.4.0)):
     dependencies:
       eslint: 9.16.0(jiti@2.4.0)
 
-  eslint-plugin-react-refresh@0.4.14(eslint@9.13.0(jiti@2.4.0)):
-    dependencies:
-      eslint: 9.13.0(jiti@2.4.0)
-
   eslint-plugin-react-refresh@0.4.14(eslint@9.16.0(jiti@2.4.0)):
     dependencies:
       eslint: 9.16.0(jiti@2.4.0)
@@ -26398,48 +26196,6 @@ snapshots:
 
   eslint-visitor-keys@4.2.0: {}
 
-  eslint@9.13.0(jiti@2.4.0):
-    dependencies:
-      '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0(jiti@2.4.0))
-      '@eslint-community/regexpp': 4.12.1
-      '@eslint/config-array': 0.18.0
-      '@eslint/core': 0.7.0
-      '@eslint/eslintrc': 3.2.0
-      '@eslint/js': 9.13.0
-      '@eslint/plugin-kit': 0.2.3
-      '@humanfs/node': 0.16.6
-      '@humanwhocodes/module-importer': 1.0.1
-      '@humanwhocodes/retry': 0.3.1
-      '@types/estree': 1.0.6
-      '@types/json-schema': 7.0.15
-      ajv: 6.12.6
-      chalk: 4.1.2
-      cross-spawn: 7.0.6
-      debug: 4.3.7(supports-color@5.5.0)
-      escape-string-regexp: 4.0.0
-      eslint-scope: 8.2.0
-      eslint-visitor-keys: 4.2.0
-      espree: 10.3.0
-      esquery: 1.6.0
-      esutils: 2.0.3
-      fast-deep-equal: 3.1.3
-      file-entry-cache: 8.0.0
-      find-up: 5.0.0
-      glob-parent: 6.0.2
-      ignore: 5.3.2
-      imurmurhash: 0.1.4
-      is-glob: 4.0.3
-      json-stable-stringify-without-jsonify: 1.0.1
-      lodash.merge: 4.6.2
-      minimatch: 3.1.2
-      natural-compare: 1.4.0
-      optionator: 0.9.4
-      text-table: 0.2.0
-    optionalDependencies:
-      jiti: 2.4.0
-    transitivePeerDependencies:
-      - supports-color
-
   eslint@9.16.0(jiti@2.4.0):
     dependencies:
       '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.0))
@@ -26711,7 +26467,7 @@ snapshots:
 
   extract-zip@2.0.1:
     dependencies:
-      debug: 4.3.4
+      debug: 4.3.7(supports-color@5.5.0)
       get-stream: 5.2.0
       yauzl: 2.10.0
     optionalDependencies:
@@ -28855,7 +28611,7 @@ snapshots:
       zod: 3.23.8
       zod-to-json-schema: 3.23.5(zod@3.23.8)
     optionalDependencies:
-      axios: 1.7.8
+      axios: 1.7.8(debug@4.3.7)
       handlebars: 4.7.8
     transitivePeerDependencies:
       - encoding
@@ -30334,6 +30090,17 @@ snapshots:
 
   node-machine-id@1.1.12: {}
 
+  node-opus@0.3.3:
+    dependencies:
+      bindings: 1.2.1
+      commander: 2.20.3
+      nan: 2.22.0
+    optionalDependencies:
+      ogg-packet: 1.0.1
+    transitivePeerDependencies:
+      - supports-color
+    optional: true
+
   node-releases@2.0.18: {}
 
   nodejs-whisper@0.1.18:
@@ -30574,6 +30341,13 @@ snapshots:
       node-fetch-native: 1.6.4
       ufo: 1.5.4
 
+  ogg-packet@1.0.1:
+    dependencies:
+      ref-struct: 1.1.0
+    transitivePeerDependencies:
+      - supports-color
+    optional: true
+
   ohash@1.1.4: {}
 
   ollama-ai-provider@0.16.1(zod@3.23.8):
@@ -31914,10 +31688,11 @@ snapshots:
 
   pretty-time@1.1.0: {}
 
-  prism-media@1.3.5(@discordjs/opus@https://codeload.github.com/discordjs/opus/tar.gz/31da49d8d2cc6c5a2ab1bfd332033ff7d5f9fb02(encoding@0.1.13))(ffmpeg-static@5.2.0):
+  prism-media@1.3.5(@discordjs/opus@https://codeload.github.com/discordjs/opus/tar.gz/31da49d8d2cc6c5a2ab1bfd332033ff7d5f9fb02(encoding@0.1.13))(ffmpeg-static@5.2.0)(node-opus@0.3.3):
     optionalDependencies:
       '@discordjs/opus': https://codeload.github.com/discordjs/opus/tar.gz/31da49d8d2cc6c5a2ab1bfd332033ff7d5f9fb02(encoding@0.1.13)
       ffmpeg-static: 5.2.0
+      node-opus: 0.3.3
 
   prism-react-renderer@2.3.1(react@18.3.1):
     dependencies:
@@ -32492,6 +32267,23 @@ snapshots:
     dependencies:
       esprima: 4.0.1
 
+  ref-struct@1.1.0:
+    dependencies:
+      debug: 2.6.9
+      ref: 1.3.5
+    transitivePeerDependencies:
+      - supports-color
+    optional: true
+
+  ref@1.3.5:
+    dependencies:
+      bindings: 1.5.0
+      debug: 2.6.9
+      nan: 2.22.0
+    transitivePeerDependencies:
+      - supports-color
+    optional: true
+
   reflect-metadata@0.2.2: {}
 
   regenerate-unicode-properties@10.2.0:
@@ -33878,12 +33670,12 @@ snapshots:
 
   ts-interface-checker@0.1.13: {}
 
-  ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.24.0)(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3):
+  ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.9))(typescript@5.6.3):
     dependencies:
       bs-logger: 0.2.6
       ejs: 3.1.10
       fast-json-stable-stringify: 2.1.0
-      jest: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3))
+      jest: 29.7.0(@types/node@20.17.9)
       jest-util: 29.7.0
       json5: 2.2.3
       lodash.memoize: 4.1.2
@@ -33896,14 +33688,13 @@ snapshots:
       '@jest/transform': 29.7.0
       '@jest/types': 29.6.3
       babel-jest: 29.7.0(@babel/core@7.26.0)
-      esbuild: 0.24.0
 
-  ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.9))(typescript@5.6.3):
+  ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3):
     dependencies:
       bs-logger: 0.2.6
       ejs: 3.1.10
       fast-json-stable-stringify: 2.1.0
-      jest: 29.7.0(@types/node@20.17.9)
+      jest: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3))
       jest-util: 29.7.0
       json5: 2.2.3
       lodash.memoize: 4.1.2
@@ -34081,17 +33872,6 @@ snapshots:
 
   typeforce@1.18.0: {}
 
-  typescript-eslint@8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3):
-    dependencies:
-      '@typescript-eslint/eslint-plugin': 8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)
-      '@typescript-eslint/parser': 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)
-      '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)
-    optionalDependencies:
-      typescript: 5.6.3
-    transitivePeerDependencies:
-      - eslint
-      - supports-color
-
   typescript-eslint@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3):
     dependencies:
       '@typescript-eslint/eslint-plugin': 8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.0))(typescript@5.6.3)
@@ -34519,24 +34299,10 @@ snapshots:
       - '@swc/helpers'
       - rollup
 
-  vite-plugin-top-level-await@1.4.4(@swc/helpers@0.5.15)(rollup@4.27.4)(vite@web-agent+@tanstack+router-plugin+vite):
-    dependencies:
-      '@rollup/plugin-virtual': 3.0.2(rollup@4.27.4)
-      '@swc/core': 1.9.3(@swc/helpers@0.5.15)
-      uuid: 10.0.0
-      vite: link:web-agent/@tanstack/router-plugin/vite
-    transitivePeerDependencies:
-      - '@swc/helpers'
-      - rollup
-
   vite-plugin-wasm@3.3.0(vite@client+@tanstack+router-plugin+vite):
     dependencies:
       vite: link:client/@tanstack/router-plugin/vite
 
-  vite-plugin-wasm@3.3.0(vite@web-agent+@tanstack+router-plugin+vite):
-    dependencies:
-      vite: link:web-agent/@tanstack/router-plugin/vite
-
   vite@5.4.11(@types/node@20.17.9)(terser@5.36.0):
     dependencies:
       esbuild: 0.21.5