diff --git a/agent/.gitignore b/agent/.gitignore
new file mode 100644
index 00000000000..c377cce3115
--- /dev/null
+++ b/agent/.gitignore
@@ -0,0 +1,6 @@
+*.ts
+!index.ts
+!character.ts
+.env
+*.env
+.env*
\ No newline at end of file
diff --git a/agent/package.json b/agent/package.json
new file mode 100644
index 00000000000..b5ac03e5c9f
--- /dev/null
+++ b/agent/package.json
@@ -0,0 +1,20 @@
+{
+    "name": "@eliza/agent",
+    "version": "0.0.1",
+    "main": "src/index.ts",
+    "type": "module",
+    "scripts": {
+        "build": "tsup --format esm --dts",
+        "start": "node --loader ts-node/esm src/index.ts",
+        "dev": "node --loader ts-node/esm src/index.ts"
+    },
+    "dependencies": {
+        "@eliza/core": "workspace:*",
+        "@eliza/plugin-image-generation": "workspace:*",
+        "readline": "^1.3.0",
+        "tsup": "^8.3.5"
+    },
+    "devDependencies": {
+        "ts-node": "10.9.2"
+    }
+}
diff --git a/agent/src/index.ts b/agent/src/index.ts
new file mode 100644
index 00000000000..6047d8601f8
--- /dev/null
+++ b/agent/src/index.ts
@@ -0,0 +1,158 @@
+import {
+    AgentRuntime,
+    boredomProvider,
+    Character,
+    defaultActions,
+    defaultCharacter,
+    DirectClient,
+    followRoom,
+    getTokenForProvider,
+    IAgentRuntime,
+    initializeClients,
+    initializeDatabase,
+    loadActionConfigs,
+    loadCharacters,
+    loadCustomActions,
+    muteRoom,
+    parseArguments,
+    timeProvider,
+    unfollowRoom,
+    unmuteRoom,
+    walletProvider,
+} from "@eliza/core";
+import readline from "readline";
+
+const args = parseArguments();
+
+console.log("Args are: ", args);
+
+let charactersArg = args.characters || args.character;
+
+let characters = [defaultCharacter];
+
+if (charactersArg) {
+    characters = loadCharacters(charactersArg);
+}
+
+console.log("Characters are: ", characters);
+
+const directClient = new DirectClient();
+
+const serverPort = parseInt(process.env.SERVER_PORT || "3000");
+directClient.start(serverPort);
+
+export async function createDirectRuntime(
+    character: Character,
+    db: any,
+    token: string,
+    configPath: string = "./elizaConfig.yaml"
+) {
+    console.log("Creating runtime for character", character.name);
+    return new AgentRuntime({
+        databaseAdapter: db,
+        token,
+        modelProvider: character.modelProvider,
+        evaluators: [],
+        character,
+        providers: [
+            timeProvider,
+            boredomProvider,
+            character.settings?.secrets?.WALLET_PUBLIC_KEY && walletProvider,
+        ].filter(Boolean),
+        actions: [
+            ...defaultActions,
+
+            // Custom actions
+            followRoom,
+            unfollowRoom,
+            unmuteRoom,
+            muteRoom,
+
+            // imported from elizaConfig.yaml
+            ...(await loadCustomActions(loadActionConfigs(configPath))),
+        ],
+    });
+}
+
+async function startAgent(character: Character) {
+    try {
+        const token = getTokenForProvider(character.modelProvider, character);
+        const db = initializeDatabase();
+
+        const runtime = await createDirectRuntime(character, db, token);
+
+        const clients = await initializeClients(
+            character,
+            runtime as IAgentRuntime
+        );
+
+        directClient.registerAgent(await runtime);
+
+        return clients;
+    } catch (error) {
+        console.error(
+            `Error starting agent for character ${character.name}:`,
+            error
+        );
+        throw error; // Re-throw after logging
+    }
+}
+
+const startAgents = async () => {
+    try {
+        for (const character of characters) {
+            await startAgent(character);
+        }
+    } catch (error) {
+        console.error("Error starting agents:", error);
+    }
+};
+
+startAgents().catch((error) => {
+    console.error("Unhandled error in startAgents:", error);
+    process.exit(1); // Exit the process after logging
+});
+
+const rl = readline.createInterface({
+    input: process.stdin,
+    output: process.stdout,
+});
+
+async function handleUserInput(input) {
+    if (input.toLowerCase() === "exit") {
+        rl.close();
+        return;
+    }
+
+    const agentId = characters[0].name.toLowerCase();
+    try {
+        const response = await fetch(
+            `http://localhost:3000/${agentId}/message`,
+            {
+                method: "POST",
+                headers: { "Content-Type": "application/json" },
+                body: JSON.stringify({
+                    text: input,
+                    userId: "user",
+                    userName: "User",
+                }),
+            }
+        );
+
+        const data = await response.json();
+        data.forEach((message) =>
+            console.log(`${characters[0].name}: ${message.text}`)
+        );
+    } catch (error) {
+        console.error("Error fetching response:", error);
+    }
+
+    chat();
+}
+
+function chat() {
+    rl.question("You: ", handleUserInput);
+}
+
+console.log("Chat started. Type 'exit' to quit.");
+chat();
diff --git a/agent/tsconfig.json b/agent/tsconfig.json
new file mode 100644
index 00000000000..06ee6c7b2d8
--- /dev/null
+++ b/agent/tsconfig.json
@@ -0,0 +1,7 @@
+{
+    "extends": "../tsconfig.json",
+    "compilerOptions": {
+        "outDir": "dist"
+    },
+    "include": ["."]
+}
diff --git a/agent/tsup.config.ts b/agent/tsup.config.ts
new file mode 100644
index 00000000000..6b2d4c14887
--- /dev/null
+++ b/agent/tsup.config.ts
@@ -0,0 +1,8 @@
+import { defineConfig } from "tsup";
+
+export default defineConfig({
+    entry: ["src/index.ts"],
+    outDir: "dist",
+    sourcemap: true,
+    clean: true,
+});
diff --git a/core/package.json b/core/package.json
index ee3f10e7e61..4b98649d0eb 100644
--- a/core/package.json
+++ b/core/package.json
@@ -1,14 +1,14 @@
 {
-    "name": "eliza",
+    "name": "@eliza/core",
     "version": "1.0.0",
     "description": "",
     "main": "dist/index.js",
     "type": "module",
     "types": "dist/index.d.ts",
     "scripts": {
-        "build": "tsc -p tsconfig.json",
+        "build": "tsup --format esm --dts",
         "lint": "eslint . --fix",
-        "start": "node --loader ts-node/esm src/index.ts",
+        "start": "node --loader ts-node/esm src/index.ts --characters=\"../characters/blobert.character.json\"",
         "start:arok": "node --loader ts-node/esm src/index.ts --characters=\"../characters/arok.character.json\"",
         "start:service:ruby": "pm2 start pnpm --name=\"ruby\" --restart-delay=3000 --max-restarts=10 -- run start:ruby",
         "stop:service:ruby": "pm2 stop ruby",
@@ -70,11 +70,6 @@
         "typescript": "5.6.3",
         "wrangler": "3.84.0"
     },
-    "pnpm": {
-        "overrides": {
-            "onnxruntime-node": "^1.19.2"
-        }
-    },
     "dependencies": {
         "@ai-sdk/anthropic": "^0.0.53",
         "@ai-sdk/google": "^0.0.55",
@@ -84,8 +79,8 @@
         "@anthropic-ai/sdk": "^0.30.1",
         "@cliqz/adblocker-playwright": "1.34.0",
         "@coral-xyz/anchor": "^0.30.1",
-        "@discordjs/rest": "2.4.0",
         "@discordjs/opus": "github:discordjs/opus",
+        "@discordjs/rest": "2.4.0",
         "@discordjs/voice": "0.17.0",
         "@echogarden/espeak-ng-emscripten": "0.3.0",
         "@echogarden/kissfft-wasm": "0.2.0",
@@ -144,7 +139,7 @@
         "node-wav": "0.0.2",
         "nodejs-whisper": "0.1.18",
         "nodemon": "3.1.7",
-        "onnxruntime-node": "^1.19.2",
+        "onnxruntime-node": "^1.20.0",
         "openai": "4.69.0",
         "pdfjs-dist": "4.7.76",
         "pg": "^8.13.1",
@@ -163,6 +158,7 @@
         "tiktoken": "1.0.17",
         "tinyld": "1.3.4",
         "together-ai": "^0.7.0",
+        "tsup": "^8.3.5",
         "unique-names-generator": "4.7.1",
         "uuid": "11.0.2",
         "wav": "1.0.2",
@@ -174,12 +170,12 @@
         "youtube-dl-exec": "3.0.10"
     },
     "trustedDependencies": {
-        "onnxruntime-node": "^1.19.2",
+        "onnxruntime-node": "^1.20.0",
         "@discordjs/opus": "github:discordjs/opus",
         "@discordjs/voice": "0.17.0",
         "sharp": "^0.33.5"
     },
     "peerDependencies": {
-        "onnxruntime-node": "^1.19.2"
+        "onnxruntime-node": "^1.20.0"
     }
 }
diff --git a/core/src/actions/continue.ts b/core/src/actions/continue.ts
index deb9c90a5a1..ca7d5de6c45 100644
--- a/core/src/actions/continue.ts
+++ b/core/src/actions/continue.ts
@@ -3,7 +3,6 @@ import {
     generateMessageResponse,
     generateTrueOrFalse,
 } from "../core/generation.ts";
-import { log_to_file } from "../core/logger.ts";
 import { booleanFooter, messageCompletionFooter } from "../core/parsing.ts";
 import {
     Action,
@@ -137,11 +136,6 @@ export const continueAction: Action = {
                 runtime.character.templates?.messageHandlerTemplate ||
                 messageHandlerTemplate,
         });
-        const datestr = new Date().toUTCString().replace(/:/g, "-");
-
-        // log context to file
-        log_to_file(`${state.agentName}_${datestr}_continue_context`, context);
-
         const { userId, roomId } = message;
 
         const response = await generateMessageResponse({
@@ -152,12 +146,6 @@ export const continueAction: Action = {
 
         response.inReplyTo = message.id;
 
-        // log response to file
-        log_to_file(
-            `${state.agentName}_${datestr}_continue_response`,
-            JSON.stringify(response)
-        );
-
         runtime.databaseAdapter.log({
             body: { message, context, response },
             userId,
diff --git a/core/src/actions/imageGeneration.ts b/core/src/actions/imageGeneration.ts
index 3d48b4e82a1..0287c79e0d9 100644
--- a/core/src/actions/imageGeneration.ts
+++ b/core/src/actions/imageGeneration.ts
@@ -5,7 +5,7 @@ import {
     State,
     Action,
 } from "../core/types.ts";
-import { prettyConsole } from "../index.ts";
+import { elizaLogger } from "../index.ts";
 import { generateCaption, generateImage } from "./imageGenerationUtils.ts";
 
 export const imageGeneration: Action = {
@@ -13,6 +13,8 @@ export const imageGeneration: Action = {
     similes: ["IMAGE_GENERATION", "IMAGE_GEN", "CREATE_IMAGE", "MAKE_PICTURE"],
     description: "Generate an image to go along with the message.",
     validate: async (runtime: IAgentRuntime, message: Memory) => {
+        // TODO: Abstract this to an image provider thing
+
         const anthropicApiKeyOk = !!runtime.getSetting("ANTHROPIC_API_KEY");
         const togetherApiKeyOk = !!runtime.getSetting("TOGETHER_API_KEY");
 
@@ -27,19 +29,19 @@ export const imageGeneration: Action = {
         options: any,
         callback: HandlerCallback
     ) => {
-        prettyConsole.log("Composing state for message:", message);
+        elizaLogger.log("Composing state for message:", message);
         state = (await runtime.composeState(message)) as State;
         const userId = runtime.agentId;
-        prettyConsole.log("User ID:", userId);
+        elizaLogger.log("User ID:", userId);
 
         const imagePrompt = message.content.text;
-        prettyConsole.log("Image prompt received:", imagePrompt);
+        elizaLogger.log("Image prompt received:", imagePrompt);
 
         // TODO: Generate a prompt for the image
 
         const res: { image: string; caption: string }[] = [];
 
-        prettyConsole.log("Generating image with prompt:", imagePrompt);
+        elizaLogger.log("Generating image with prompt:", imagePrompt);
         const images = await generateImage(
             {
                 prompt: imagePrompt,
@@ -51,13 +53,13 @@ export const imageGeneration: Action = {
         );
 
         if (images.success && images.data && images.data.length > 0) {
-            prettyConsole.log(
+            elizaLogger.log(
                 "Image generation successful, number of images:",
                 images.data.length
             );
             for (let i = 0; i < images.data.length; i++) {
                 const image = images.data[i];
-                prettyConsole.log(`Processing image ${i + 1}:`, image);
+                elizaLogger.log(`Processing image ${i + 1}:`, image);
 
                 const caption = await generateCaption(
                     {
@@ -66,7 +68,7 @@ export const imageGeneration: Action = {
                     runtime
                 );
 
-                prettyConsole.log(
+                elizaLogger.log(
                     `Generated caption for image ${i + 1}:`,
                     caption.title
                 );
@@ -90,7 +92,7 @@ export const imageGeneration: Action = {
                 );
             }
         } else {
-            prettyConsole.error("Image generation failed or returned no data.");
+            elizaLogger.error("Image generation failed or returned no data.");
         }
     },
     examples: [
diff --git a/core/src/actions/imageGenerationUtils.ts b/core/src/actions/imageGenerationUtils.ts
index 5ceac5d84d6..d53e2e41edd 100644
--- a/core/src/actions/imageGenerationUtils.ts
+++ b/core/src/actions/imageGenerationUtils.ts
@@ -2,7 +2,7 @@
 import { Buffer } from "buffer";
 import Together from "together-ai";
 import { IAgentRuntime } from "../core/types.ts";
-import { getModel, ImageGenModel } from "../core/imageGenModels.ts";
+import { getImageGenModel, ImageGenModel } from "../core/imageGenModels.ts";
 import OpenAI from "openai";
 
 export const generateImage = async (
@@ -25,7 +25,7 @@ export const generateImage = async (
     }
 
     const imageGenModel = runtime.imageGenModel;
-    const model = getModel(imageGenModel);
+    const model = getImageGenModel(imageGenModel);
     const apiKey =
         imageGenModel === ImageGenModel.TogetherAI
             ? runtime.getSetting("TOGETHER_API_KEY")
diff --git a/core/src/adapters/sqlite.ts b/core/src/adapters/sqlite.ts
index da46464e71f..d49c841bb22 100644
--- a/core/src/adapters/sqlite.ts
+++ b/core/src/adapters/sqlite.ts
@@ -152,7 +152,6 @@ export class SqliteDatabaseAdapter extends DatabaseAdapter {
         tableName: string;
         agentId?: UUID;
     }): Promise<Memory[]> {
-
         if (!params.tableName) {
             // default to messages
             params.tableName = "messages";
diff --git a/core/src/adapters/sqlite/sqlite_vec.ts b/core/src/adapters/sqlite/sqlite_vec.ts
index 2f159d22f99..5707b8c708b 100644
--- a/core/src/adapters/sqlite/sqlite_vec.ts
+++ b/core/src/adapters/sqlite/sqlite_vec.ts
@@ -1,15 +1,15 @@
 import * as sqliteVec from "sqlite-vec";
 import { Database } from "better-sqlite3";
-import { prettyConsole } from "../../index.ts";
+import { elizaLogger } from "../../index.ts";
 
 // Loads the sqlite-vec extensions into the provided SQLite database
 export function loadVecExtensions(db: Database): void {
     try {
         // Load sqlite-vec extensions
         sqliteVec.load(db);
-        prettyConsole.log("sqlite-vec extensions loaded successfully.");
+        elizaLogger.log("sqlite-vec extensions loaded successfully.");
     } catch (error) {
-        prettyConsole.error("Failed to load sqlite-vec extensions:", error);
+        elizaLogger.error("Failed to load sqlite-vec extensions:", error);
         throw error;
     }
 }
diff --git a/core/src/cli/colors.ts b/core/src/cli/colors.ts
deleted file mode 100644
index 86209c1ebbd..00000000000
--- a/core/src/cli/colors.ts
+++ /dev/null
@@ -1,268 +0,0 @@
-export class PrettyConsole {
-    closeByNewLine = true;
-    useIcons = true;
-    logsTitle = "LOGS";
-    warningsTitle = "WARNINGS";
-    errorsTitle = "ERRORS";
-    informationsTitle = "INFORMATIONS";
-    successesTitle = "SUCCESS";
-    debugsTitle = "DEBUG";
-    assertsTitle = "ASSERT";
-    #getColor(foregroundColor = "", backgroundColor = "") {
-        let fgc = "\x1b[37m";
-        switch (foregroundColor.trim().toLowerCase()) {
-            case "black":
-                fgc = "\x1b[30m";
-                break;
-            case "red":
-                fgc = "\x1b[31m";
-                break;
-            case "green":
-                fgc = "\x1b[32m";
-                break;
-            case "yellow":
-                fgc = "\x1b[33m";
-                break;
-            case "blue":
-                fgc = "\x1b[34m";
-                break;
-            case "magenta":
-                fgc = "\x1b[35m";
-                break;
-            case "cyan":
-                fgc = "\x1b[36m";
-                break;
-            case "white":
-                fgc = "\x1b[37m";
-                break;
-        }
-
-        let bgc = "";
-        switch (backgroundColor.trim().toLowerCase()) {
-            case "black":
-                bgc = "\x1b[40m";
-                break;
-            case "red":
-                bgc = "\x1b[44m";
-                break;
-            case "green":
-                bgc = "\x1b[44m";
-                break;
-            case "yellow":
-                bgc = "\x1b[43m";
-                break;
-            case "blue":
-                bgc = "\x1b[44m";
-                break;
-            case "magenta":
-                bgc = "\x1b[45m";
-                break;
-            case "cyan":
-                bgc = "\x1b[46m";
-                break;
-            case "white":
-                bgc = "\x1b[47m";
-                break;
-        }
-
-        return `${fgc}${bgc}`;
-    }
-    #getColorReset() {
-        return "\x1b[0m";
-    }
-    clear() {
-        console.clear();
-    }
-    print(foregroundColor = "white", backgroundColor = "black", ...strings) {
-        const c = this.#getColor(foregroundColor, backgroundColor);
-        // turns objects into printable strings
-        strings = strings.map((item) => {
-            if (typeof item === "object") item = JSON.stringify(item);
-            return item;
-        });
-        console.log(c, strings.join(""), this.#getColorReset());
-        if (this.closeByNewLine) console.log("");
-    }
-    log(...strings) {
-        const fg = "white";
-        const bg = "";
-        const icon = "\u25ce";
-        const groupTile = ` ${this.logsTitle}`;
-        if (strings.length > 1) {
-            const c = this.#getColor(fg, bg);
-            console.group(c, (this.useIcons ? icon : "") + groupTile);
-            const nl = this.closeByNewLine;
-            this.closeByNewLine = false;
-            strings.forEach((item) => {
-                this.print(fg, bg, item, this.#getColorReset());
-            });
-            this.closeByNewLine = nl;
-            console.groupEnd();
-            if (nl) console.log();
-        } else {
-            this.print(
-                fg,
-                bg,
-                strings.map((item) => {
-                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
-                })
-            );
-        }
-    }
-    warn(...strings) {
-        const fg = "yellow";
-        const bg = "";
-        const icon = "\u26a0";
-        const groupTile = ` ${this.warningsTitle}`;
-        if (strings.length > 1) {
-            const c = this.#getColor(fg, bg);
-            console.group(c, (this.useIcons ? icon : "") + groupTile);
-            const nl = this.closeByNewLine;
-            this.closeByNewLine = false;
-            strings.forEach((item) => {
-                this.print(fg, bg, item, this.#getColorReset());
-            });
-            this.closeByNewLine = nl;
-            console.groupEnd();
-            if (nl) console.log();
-        } else {
-            this.print(
-                fg,
-                bg,
-                strings.map((item) => {
-                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
-                })
-            );
-        }
-    }
-    error(...strings) {
-        const fg = "red";
-        const bg = "";
-        const icon = "\u26D4";
-        const groupTile = ` ${this.errorsTitle}`;
-        if (strings.length > 1) {
-            const c = this.#getColor(fg, bg);
-            console.group(c, (this.useIcons ? icon : "") + groupTile);
-            const nl = this.closeByNewLine;
-            this.closeByNewLine = false;
-            strings.forEach((item) => {
-                this.print(fg, bg, item);
-            });
-            this.closeByNewLine = nl;
-            console.groupEnd();
-            if (nl) console.log();
-        } else {
-            this.print(
-                fg,
-                bg,
-                strings.map((item) => {
-                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
-                })
-            );
-        }
-    }
-    info(...strings) {
-        const fg = "blue";
-        const bg = "";
-        const icon = "\u2139";
-        const groupTile = ` ${this.informationsTitle}`;
-        if (strings.length > 1) {
-            const c = this.#getColor(fg, bg);
-            console.group(c, (this.useIcons ? icon : "") + groupTile);
-            const nl = this.closeByNewLine;
-            this.closeByNewLine = false;
-            strings.forEach((item) => {
-                this.print(fg, bg, item);
-            });
-            this.closeByNewLine = nl;
-            console.groupEnd();
-            if (nl) console.log();
-        } else {
-            this.print(
-                fg,
-                bg,
-                strings.map((item) => {
-                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
-                })
-            );
-        }
-    }
-    success(...strings) {
-        const fg = "green";
-        const bg = "";
-        const icon = "\u2713";
-        const groupTile = ` ${this.successesTitle}`;
-        if (strings.length > 1) {
-            const c = this.#getColor(fg, bg);
-            console.group(c, (this.useIcons ? icon : "") + groupTile);
-            const nl = this.closeByNewLine;
-            this.closeByNewLine = false;
-            strings.forEach((item) => {
-                this.print(fg, bg, item);
-            });
-            this.closeByNewLine = nl;
-            console.groupEnd();
-            if (nl) console.log();
-        } else {
-            this.print(
-                fg,
-                bg,
-                strings.map((item) => {
-                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
-                })
-            );
-        }
-    }
-    debug(...strings) {
-        const fg = "magenta";
-        const bg = "";
-        const icon = "\u1367";
-        const groupTile = ` ${this.debugsTitle}`;
-        if (strings.length > 1) {
-            const c = this.#getColor(fg, bg);
-            console.group(c, (this.useIcons ? icon : "") + groupTile);
-            const nl = this.closeByNewLine;
-            this.closeByNewLine = false;
-            strings.forEach((item) => {
-                this.print(fg, bg, item);
-            });
-            this.closeByNewLine = nl;
-            console.groupEnd();
-            if (nl) console.log();
-        } else {
-            this.print(
-                fg,
-                bg,
-                strings.map((item) => {
-                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
-                })
-            );
-        }
-    }
-    assert(...strings) {
-        const fg = "cyan";
-        const bg = "";
-        const icon = "\u0021";
-        const groupTile = ` ${this.assertsTitle}`;
-        if (strings.length > 1) {
-            const c = this.#getColor(fg, bg);
-            console.group(c, (this.useIcons ? icon : "") + groupTile);
-            const nl = this.closeByNewLine;
-            this.closeByNewLine = false;
-            strings.forEach((item) => {
-                this.print(fg, bg, item);
-            });
-            this.closeByNewLine = nl;
-            console.groupEnd();
-            if (nl) console.log();
-        } else {
-            this.print(
-                fg,
-                bg,
-                strings.map((item) => {
-                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
-                })
-            );
-        }
-    }
-}
diff --git a/core/src/cli/config.ts b/core/src/cli/config.ts
index 7162f8e1e15..371e536dafb 100644
--- a/core/src/cli/config.ts
+++ b/core/src/cli/config.ts
@@ -3,7 +3,7 @@ import yaml from "js-yaml";
 import path from "path";
 import { fileURLToPath } from "url";
 import { Action } from "../core/types";
-import { prettyConsole } from "../index.ts";
+import { elizaLogger } from "../index.ts";
 
 const ROOT_DIR = path.resolve(fileURLToPath(import.meta.url), "../../../src");
 
@@ -30,13 +30,13 @@ export async function loadCustomActions(
 
     for (const config of actionConfigs) {
         const resolvedPath = path.resolve(ROOT_DIR, config.path);
-        prettyConsole.log(`Importing action from: ${resolvedPath}`); // Debugging log
+        elizaLogger.log(`Importing action from: ${resolvedPath}`); // Debugging log
 
         try {
             const actionModule = await import(resolvedPath);
             actions.push(actionModule[config.name]);
         } catch (error) {
-            prettyConsole.error(
+            elizaLogger.error(
                 `Failed to import action from ${resolvedPath}:`,
                 error
             );
diff --git a/core/src/cli/index.ts b/core/src/cli/index.ts
index 8dc6074814a..cf578721932 100644
--- a/core/src/cli/index.ts
+++ b/core/src/cli/index.ts
@@ -1,4 +1,6 @@
-import defaultCharacter from "../core/defaultCharacter.ts";
+export * from "./config.ts";
+
+import { defaultCharacter } from "../core/defaultCharacter.ts";
 import settings from "../core/settings.ts";
 import { Character, IAgentRuntime, ModelProvider } from "../core/types.ts";
 import * as Action from "../actions/index.ts";
@@ -14,7 +16,7 @@ import { AgentRuntime } from "../core/runtime.ts";
 import { defaultActions } from "../core/actions.ts";
 import { Arguments } from "../types/index.ts";
 import { loadActionConfigs, loadCustomActions } from "./config.ts";
-import { prettyConsole } from "../index.ts";
+import { elizaLogger } from "../index.ts";
 
 export async function initializeClients(
     character: Character,
@@ -71,7 +73,10 @@ export function loadCharacters(charactersArg: string): Character[] {
         .map((path) => path.trim())
         .map((path) => {
             if (path.startsWith("./characters")) {
-                return `../characters/${path}`;
+                return `.${path}`;
+            }
+            if (path.startsWith("characters")) {
+                return `../${path}`;
             }
             return path;
         });
@@ -211,11 +216,11 @@ export async function startTelegram(
     runtime: IAgentRuntime,
     character: Character
 ) {
-    prettyConsole.log("🔍 Attempting to start Telegram bot...");
+    elizaLogger.log("🔍 Attempting to start Telegram bot...");
     const botToken = runtime.getSetting("TELEGRAM_BOT_TOKEN");
 
     if (!botToken) {
-        prettyConsole.error(
+        elizaLogger.error(
             `❌ Telegram bot token is not set for character ${character.name}.`
         );
         return null;
@@ -224,12 +229,12 @@ export async function startTelegram(
     try {
         const telegramClient = new Client.TelegramClient(runtime, botToken);
         await telegramClient.start();
-        prettyConsole.success(
+        elizaLogger.success(
             `✅ Telegram client successfully started for character ${character.name}`
         );
         return telegramClient;
     } catch (error) {
-        prettyConsole.error(
+        elizaLogger.error(
             `❌ Error creating/starting Telegram client for ${character.name}:`,
             error
         );
@@ -238,7 +243,7 @@ export async function startTelegram(
 }
 
 export async function startTwitter(runtime: IAgentRuntime) {
-    prettyConsole.log("Starting Twitter clients...");
+    elizaLogger.log("Starting Twitter clients...");
     const twitterSearchClient = new Client.TwitterSearchClient(runtime);
     await wait();
     const twitterInteractionClient = new Client.TwitterInteractionClient(
diff --git a/core/src/clients/discord/actions/chat_with_attachments.ts b/core/src/clients/discord/actions/chat_with_attachments.ts
index ee54c937043..fc5885a651d 100644
--- a/core/src/clients/discord/actions/chat_with_attachments.ts
+++ b/core/src/clients/discord/actions/chat_with_attachments.ts
@@ -1,6 +1,6 @@
+import fs from "fs";
 import { composeContext } from "../../../core/context.ts";
 import { generateText, trimTokens } from "../../../core/generation.ts";
-import { log_to_file } from "../../../core/logger.ts";
 import models from "../../../core/models.ts";
 import { parseJSONObjectFromText } from "../../../core/parsing.ts";
 import {
@@ -13,7 +13,6 @@ import {
     ModelClass,
     State,
 } from "../../../core/types.ts";
-import fs from "fs";
 export const summarizationTemplate = `# Summarized so far (we are adding to this)
 {{currentSummary}}
 
@@ -199,30 +198,14 @@ const summarizeAction = {
             ),
         });
 
-        log_to_file(
-            `${state.agentName}_${datestr}_chat_with_attachment_context`,
-            context
-        );
-
         const summary = await generateText({
             runtime,
             context,
             modelClass: ModelClass.SMALL,
         });
 
-        log_to_file(
-            `${state.agentName}_${datestr}_chat_with_attachment_response`,
-            summary
-        );
-
         currentSummary = currentSummary + "\n" + summary;
 
-        // log summary to file
-        log_to_file(
-            `${state.agentName}_${datestr}_chat_with_attachment_summary`,
-            currentSummary
-        );
-
         if (!currentSummary) {
             console.error("No summary found, that's not good!");
             return;
diff --git a/core/src/clients/discord/actions/joinvoice.ts b/core/src/clients/discord/actions/joinvoice.ts
index f63194be86a..3e8ed02fadc 100644
--- a/core/src/clients/discord/actions/joinvoice.ts
+++ b/core/src/clients/discord/actions/joinvoice.ts
@@ -10,7 +10,6 @@ import {
     GuildMember,
 } from "discord.js";
 import { composeContext } from "../../../core/context.ts";
-import { log_to_file } from "../../../core/logger.ts";
 import {
     Action,
     ActionExample,
@@ -164,24 +163,12 @@ You should only respond with the name of the voice channel or none, no commentar
 
             const datestr = new Date().toUTCString().replace(/:/g, "-");
 
-            // log context to file
-            log_to_file(
-                `${state.agentName}_${datestr}_joinvoice_context`,
-                context
-            );
-
             const responseContent = await generateText({
                 runtime,
                 context,
                 modelClass: ModelClass.SMALL,
             });
 
-            // log response to file
-            log_to_file(
-                `${state.agentName}_${datestr}_joinvoice_response`,
-                responseContent
-            );
-
             runtime.databaseAdapter.log({
                 body: { message, context, response: responseContent },
                 userId: message.userId,
diff --git a/core/src/clients/discord/actions/summarize_conversation.ts b/core/src/clients/discord/actions/summarize_conversation.ts
index 3247b177f37..aff93e5623d 100644
--- a/core/src/clients/discord/actions/summarize_conversation.ts
+++ b/core/src/clients/discord/actions/summarize_conversation.ts
@@ -1,10 +1,10 @@
+import fs from "fs";
 import { composeContext } from "../../../core/context.ts";
 import {
     generateText,
     splitChunks,
     trimTokens,
 } from "../../../core/generation.ts";
-import { log_to_file } from "../../../core/logger.ts";
 import { getActorDetails } from "../../../core/messages.ts";
 import models from "../../../core/models.ts";
 import { parseJSONObjectFromText } from "../../../core/parsing.ts";
@@ -19,7 +19,6 @@ import {
     ModelClass,
     State,
 } from "../../../core/types.ts";
-import fs from "fs";
 export const summarizationTemplate = `# Summarized so far (we are adding to this)
 {{currentSummary}}
 
@@ -290,33 +289,15 @@ const summarizeAction = {
                 ),
             });
 
-            log_to_file(
-                `${state.agentName}_${datestr}_summarization_context`,
-                context
-            );
-
             const summary = await generateText({
                 runtime,
                 context,
                 modelClass: ModelClass.SMALL,
             });
 
-            log_to_file(
-                `${state.agentName}_${datestr}_summarization_response_${i}`,
-                summary
-            );
-
             currentSummary = currentSummary + "\n" + summary;
         }
 
-        // log context to file
-        log_to_file(
-            `${state.agentName}_${datestr}_summarization_summary`,
-            currentSummary
-        );
-
-        // call callback with it -- twitter and discord client can separately handle what to do, IMO we may way to add gists so the agent can post a gist and link to it later
-
         if (!currentSummary) {
             console.error("No summary found, that's not good!");
             return;
diff --git a/core/src/clients/discord/actions/transcribe_media.ts b/core/src/clients/discord/actions/transcribe_media.ts
index fa22a4f566f..3fb661ea750 100644
--- a/core/src/clients/discord/actions/transcribe_media.ts
+++ b/core/src/clients/discord/actions/transcribe_media.ts
@@ -1,6 +1,6 @@
+import fs from "fs";
 import { composeContext } from "../../../core/context.ts";
 import { generateText } from "../../../core/generation.ts";
-import { log_to_file } from "../../../core/logger.ts";
 import { parseJSONObjectFromText } from "../../../core/parsing.ts";
 import {
     Action,
@@ -12,7 +12,6 @@ import {
     ModelClass,
     State,
 } from "../../../core/types.ts";
-import fs from "fs";
 export const transcriptionTemplate = `# Transcription of media file
 {{mediaTranscript}}
 
diff --git a/core/src/clients/discord/index.ts b/core/src/clients/discord/index.ts
index 080359bd45a..ba7945107aa 100644
--- a/core/src/clients/discord/index.ts
+++ b/core/src/clients/discord/index.ts
@@ -11,7 +11,7 @@ import { EventEmitter } from "events";
 import { embeddingZeroVector } from "../../core/memory.ts";
 import { Character, IAgentRuntime } from "../../core/types.ts";
 import { stringToUuid } from "../../core/uuid.ts";
-import { prettyConsole } from "../../index.ts";
+import { elizaLogger } from "../../index.ts";
 import chat_with_attachments from "./actions/chat_with_attachments.ts";
 import download_media from "./actions/download_media.ts";
 import joinvoice from "./actions/joinvoice.ts";
@@ -110,16 +110,16 @@ export class DiscordClient extends EventEmitter {
     }
 
     private async onClientReady(readyClient: { user: { tag: any; id: any } }) {
-        prettyConsole.success(`Logged in as ${readyClient.user?.tag}`);
-        prettyConsole.success("Use this URL to add the bot to your server:");
-        prettyConsole.success(
+        elizaLogger.success(`Logged in as ${readyClient.user?.tag}`);
+        elizaLogger.success("Use this URL to add the bot to your server:");
+        elizaLogger.success(
             `https://discord.com/api/oauth2/authorize?client_id=${readyClient.user?.id}&permissions=0&scope=bot%20applications.commands`
         );
         await this.onReady();
     }
 
     async handleReactionAdd(reaction: MessageReaction, user: User) {
-        prettyConsole.log("Reaction added");
+        elizaLogger.log("Reaction added");
         // if (user.bot) return;
 
         let emoji = reaction.emoji.name;
diff --git a/core/src/clients/discord/messages.ts b/core/src/clients/discord/messages.ts
index 35dff4f0b94..a4e52df8845 100644
--- a/core/src/clients/discord/messages.ts
+++ b/core/src/clients/discord/messages.ts
@@ -11,7 +11,6 @@ import {
     generateMessageResponse,
     generateShouldRespond,
 } from "../../core/generation.ts";
-import { log_to_file } from "../../core/logger.ts";
 import { embeddingZeroVector } from "../../core/memory.ts";
 import {
     Content,
@@ -27,8 +26,8 @@ import { stringToUuid } from "../../core/uuid.ts";
 import { generateSummary } from "../../services/summary.ts";
 import { AttachmentManager } from "./attachments.ts";
 
+import { elizaLogger } from "../../index.ts";
 import { VoiceManager } from "./voice.ts";
-import { prettyConsole } from "../../index.ts";
 
 import {
     messageCompletionFooter,
@@ -187,7 +186,7 @@ export async function sendMessageInChunks(
             }
         }
     } catch (error) {
-        prettyConsole.error("Error sending message:", error);
+        elizaLogger.error("Error sending message:", error);
     }
 
     return sentMessages;
@@ -389,7 +388,7 @@ export class MessageManager {
             })) as State;
 
             if (!canSendMessage(message.channel).canSend) {
-                return prettyConsole.warn(
+                return elizaLogger.warn(
                     `Cannot send message to channel ${message.channel}`,
                     canSendMessage(message.channel)
                 );
@@ -447,6 +446,8 @@ export class MessageManager {
                 context
             );
 
+            console.log("Response content:", responseContent);
+
             responseContent.text = responseContent.text?.trim();
             responseContent.inReplyTo = stringToUuid(
                 message.id + "-" + this.runtime.agentId
@@ -841,14 +842,6 @@ export class MessageManager {
     ): Promise<Content> {
         const { userId, roomId } = message;
 
-        const datestr = new Date().toUTCString().replace(/:/g, "-");
-
-        // log context to file
-        log_to_file(
-            `${state.agentName}_${datestr}_discord_message_context`,
-            context
-        );
-
         const response = await generateMessageResponse({
             runtime: this.runtime,
             context,
@@ -860,11 +853,6 @@ export class MessageManager {
             return;
         }
 
-        log_to_file(
-            `${state.agentName}_${datestr}_discord_message_response`,
-            JSON.stringify(response)
-        );
-
         await this.runtime.databaseAdapter.log({
             body: { message, context, response },
             userId: userId,
diff --git a/core/src/clients/discord/voice.ts b/core/src/clients/discord/voice.ts
index 6474091b03d..11bd289ef8b 100644
--- a/core/src/clients/discord/voice.ts
+++ b/core/src/clients/discord/voice.ts
@@ -22,7 +22,6 @@ import prism from "prism-media";
 import { Readable, pipeline } from "stream";
 import { composeContext } from "../../core/context.ts";
 import { generateMessageResponse } from "../../core/generation.ts";
-import { log_to_file } from "../../core/logger.ts";
 import { embeddingZeroVector } from "../../core/memory.ts";
 import {
     Content,
@@ -594,14 +593,6 @@ export class VoiceManager extends EventEmitter {
     ): Promise<Content> {
         const { userId, roomId } = message;
 
-        const datestr = new Date().toUTCString().replace(/:/g, "-");
-
-        // log context to file
-        log_to_file(
-            `${state.agentName}_${datestr}_discord_voice_context`,
-            context
-        );
-
         const response = await generateMessageResponse({
             runtime: this.runtime,
             context,
@@ -615,11 +606,6 @@ export class VoiceManager extends EventEmitter {
             return;
         }
 
-        log_to_file(
-            `${state.agentName}_${datestr}_discord_voice_response`,
-            JSON.stringify(response)
-        );
-
         await this.runtime.databaseAdapter.log({
             body: { message, context, response },
             userId: userId,
diff --git a/core/src/clients/telegram/src/index.ts b/core/src/clients/telegram/src/index.ts
index c378db8cfb3..dd6cc6156e9 100644
--- a/core/src/clients/telegram/src/index.ts
+++ b/core/src/clients/telegram/src/index.ts
@@ -2,7 +2,7 @@ import { Context, Telegraf } from "telegraf";
 
 import { IAgentRuntime } from "../../../core/types.ts";
 import { MessageManager } from "./messageManager.ts";
-import { prettyConsole } from "../../../index.ts";
+import { elizaLogger } from "../../../index.ts";
 
 export class TelegramClient {
     private bot: Telegraf<Context>;
@@ -10,18 +10,18 @@ export class TelegramClient {
     private messageManager: MessageManager;
 
     constructor(runtime: IAgentRuntime, botToken: string) {
-        prettyConsole.log("📱 Constructing new TelegramClient...");
+        elizaLogger.log("📱 Constructing new TelegramClient...");
         this.runtime = runtime;
         this.bot = new Telegraf(botToken);
         this.messageManager = new MessageManager(this.bot, this.runtime);
 
-        prettyConsole.log("Setting up message handler...");
+        elizaLogger.log("Setting up message handler...");
         this.bot.on("message", async (ctx) => {
             try {
-                prettyConsole.log("📥 Received message:", ctx.message);
+                elizaLogger.log("📥 Received message:", ctx.message);
                 await this.messageManager.handleMessage(ctx);
             } catch (error) {
-                prettyConsole.error("❌ Error handling message:", error);
+                elizaLogger.error("❌ Error handling message:", error);
                 await ctx.reply(
                     "An error occurred while processing your message."
                 );
@@ -30,51 +30,48 @@ export class TelegramClient {
 
         // Handle specific message types for better logging
         this.bot.on("photo", (ctx) => {
-            prettyConsole.log(
+            elizaLogger.log(
                 "📸 Received photo message with caption:",
                 ctx.message.caption
             );
         });
 
         this.bot.on("document", (ctx) => {
-            prettyConsole.log(
+            elizaLogger.log(
                 "📎 Received document message:",
                 ctx.message.document.file_name
             );
         });
 
         this.bot.catch((err, ctx) => {
-            prettyConsole.error(
-                `❌ Telegram Error for ${ctx.updateType}:`,
-                err
-            );
+            elizaLogger.error(`❌ Telegram Error for ${ctx.updateType}:`, err);
             ctx.reply("An unexpected error occurred. Please try again later.");
         });
 
-        prettyConsole.log("✅ TelegramClient constructor completed");
+        elizaLogger.log("✅ TelegramClient constructor completed");
     }
 
     public async start(): Promise<void> {
-        prettyConsole.log("🚀 Starting Telegram bot...");
+        elizaLogger.log("🚀 Starting Telegram bot...");
         try {
             this.bot.launch({
                 dropPendingUpdates: true,
             });
-            prettyConsole.log(
+            elizaLogger.log(
                 "✨ Telegram bot successfully launched and is running!"
             );
-            prettyConsole.log(`Bot username: @${this.bot.botInfo?.username}`);
+            elizaLogger.log(`Bot username: @${this.bot.botInfo?.username}`);
 
             // Graceful shutdown handlers
             const shutdownHandler = async (signal: string) => {
-                prettyConsole.log(
+                elizaLogger.log(
                     `⚠️ Received ${signal}. Shutting down Telegram bot gracefully...`
                 );
                 try {
                     await this.stop();
-                    prettyConsole.log("🛑 Telegram bot stopped gracefully");
+                    elizaLogger.log("🛑 Telegram bot stopped gracefully");
                 } catch (error) {
-                    prettyConsole.error(
+                    elizaLogger.error(
                         "❌ Error during Telegram bot shutdown:",
                         error
                     );
@@ -86,14 +83,14 @@ export class TelegramClient {
             process.once("SIGTERM", () => shutdownHandler("SIGTERM"));
             process.once("SIGHUP", () => shutdownHandler("SIGHUP"));
         } catch (error) {
-            prettyConsole.error("❌ Failed to launch Telegram bot:", error);
+            elizaLogger.error("❌ Failed to launch Telegram bot:", error);
             throw error;
         }
     }
 
     public async stop(): Promise<void> {
-        prettyConsole.log("Stopping Telegram bot...");
+        elizaLogger.log("Stopping Telegram bot...");
         await this.bot.stop();
-        prettyConsole.log("Telegram bot stopped");
+        elizaLogger.log("Telegram bot stopped");
     }
 }
diff --git a/core/src/clients/telegram/src/messageManager.ts b/core/src/clients/telegram/src/messageManager.ts
index f6018649200..310ed145691 100644
--- a/core/src/clients/telegram/src/messageManager.ts
+++ b/core/src/clients/telegram/src/messageManager.ts
@@ -1,22 +1,19 @@
 import { Message } from "@telegraf/types";
-import { Context } from "telegraf";
-import { Telegraf } from "telegraf";
+import { Context, Telegraf } from "telegraf";
 
 import { composeContext } from "../../../core/context.ts";
-import { log_to_file } from "../../../core/logger.ts";
 import { embeddingZeroVector } from "../../../core/memory.ts";
 import {
     Content,
+    HandlerCallback,
     IAgentRuntime,
     Memory,
+    ModelClass,
     State,
     UUID,
-    HandlerCallback,
-    ModelClass,
 } from "../../../core/types.ts";
 import { stringToUuid } from "../../../core/uuid.ts";
 
-import ImageDescriptionService from "../../../services/image.ts";
 import {
     generateMessageResponse,
     generateShouldRespond,
@@ -25,6 +22,7 @@ import {
     messageCompletionFooter,
     shouldRespondFooter,
 } from "../../../core/parsing.ts";
+import ImageDescriptionService from "../../../services/image.ts";
 
 const MAX_MESSAGE_LENGTH = 4096; // Telegram's max message length
 
@@ -296,12 +294,6 @@ export class MessageManager {
         context: string
     ): Promise<Content> {
         const { userId, roomId } = message;
-        const datestr = new Date().toUTCString().replace(/:/g, "-");
-
-        log_to_file(
-            `${state.agentName}_${datestr}_telegram_message_context`,
-            context
-        );
 
         const response = await generateMessageResponse({
             runtime: this.runtime,
@@ -313,12 +305,6 @@ export class MessageManager {
             console.error("❌ No response from generateMessageResponse");
             return null;
         }
-
-        log_to_file(
-            `${state.agentName}_${datestr}_telegram_message_response`,
-            JSON.stringify(response)
-        );
-
         await this.runtime.databaseAdapter.log({
             body: { message, context, response },
             userId: userId,
diff --git a/core/src/clients/twitter/base.ts b/core/src/clients/twitter/base.ts
index 6482c20faca..8617df324ec 100644
--- a/core/src/clients/twitter/base.ts
+++ b/core/src/clients/twitter/base.ts
@@ -21,7 +21,7 @@ import ImageDescriptionService from "../../services/image.ts";
 import { glob } from "glob";
 
 import { stringToUuid } from "../../core/uuid.ts";
-import { prettyConsole } from "../../index.ts";
+import { elizaLogger } from "../../index.ts";
 
 export function extractAnswer(text: string): string {
     const startIndex = text.indexOf("Answer: ") + 8;
@@ -91,7 +91,6 @@ export class ClientBase extends EventEmitter {
     tweetCacheFilePath = "tweetcache/latest_checked_tweet_id.txt";
     imageDescriptionService: ImageDescriptionService;
     temperature: number = 0.5;
-    dryRun: boolean = false;
 
     private tweetCache: Map<string, Tweet> = new Map();
     requestQueue: RequestQueue = new RequestQueue();
@@ -165,9 +164,7 @@ export class ClientBase extends EventEmitter {
             this.twitterClient = new Scraper();
             ClientBase._twitterClient = this.twitterClient;
         }
-        this.dryRun =
-            this.runtime.getSetting("TWITTER_DRY_RUN")?.toLowerCase() ===
-            "true";
+
         this.directions =
             "- " +
             this.runtime.character.style.all.join("\n- ") +
@@ -436,7 +433,7 @@ export class ClientBase extends EventEmitter {
                             : undefined,
                     } as Content;
 
-                    prettyConsole.log("Creating memory for tweet", tweet.id);
+                    elizaLogger.log("Creating memory for tweet", tweet.id);
 
                     // check if it already exists
                     const memory =
@@ -444,7 +441,7 @@ export class ClientBase extends EventEmitter {
                             stringToUuid(tweet.id + "-" + this.runtime.agentId)
                         );
                     if (memory) {
-                        prettyConsole.log(
+                        elizaLogger.log(
                             "Memory already exists, skipping timeline population"
                         );
                         break;
@@ -461,7 +458,7 @@ export class ClientBase extends EventEmitter {
                     });
                 }
 
-                prettyConsole.log(
+                elizaLogger.log(
                     `Populated ${tweetsToSave.length} missing tweets from the cache.`
                 );
                 return;
diff --git a/core/src/clients/twitter/interactions.ts b/core/src/clients/twitter/interactions.ts
index 413afa3fe81..4cea752c8ae 100644
--- a/core/src/clients/twitter/interactions.ts
+++ b/core/src/clients/twitter/interactions.ts
@@ -1,7 +1,10 @@
 import { SearchMode, Tweet } from "agent-twitter-client";
 import fs from "fs";
 import { composeContext } from "../../core/context.ts";
-import { log_to_file } from "../../core/logger.ts";
+import {
+    generateMessageResponse,
+    generateShouldRespond,
+} from "../../core/generation.ts";
 import {
     messageCompletionFooter,
     shouldRespondFooter,
@@ -17,10 +20,6 @@ import {
 import { stringToUuid } from "../../core/uuid.ts";
 import { ClientBase } from "./base.ts";
 import { buildConversationThread, sendTweetChunks, wait } from "./utils.ts";
-import {
-    generateMessageResponse,
-    generateShouldRespond,
-} from "../../core/generation.ts";
 
 export const twitterMessageHandlerTemplate =
     `{{relevantFacts}}
@@ -300,75 +299,48 @@ export class TwitterInteractionClient extends ClientBase {
                 twitterMessageHandlerTemplate,
         });
 
-        const datestr = new Date().toUTCString().replace(/:/g, "-");
-
-        // log context to file
-        log_to_file(
-            `${this.runtime.getSetting("TWITTER_USERNAME")}_${datestr}_interactions_context`,
-            context
-        );
-
         const response = await generateMessageResponse({
             runtime: this.runtime,
             context,
             modelClass: ModelClass.SMALL,
         });
 
-        console.log("response", response);
-
-        console.log("tweet is", tweet);
-
         const stringId = stringToUuid(tweet.id + "-" + this.runtime.agentId);
 
-        console.log("stringId is", stringId, "while tweet.id is", tweet.id);
-
         response.inReplyTo = stringId;
 
-        console.log("response is", response);
-
-        log_to_file(
-            `${this.runtime.getSetting("TWITTER_USERNAME")}_${datestr}_interactions_response`,
-            JSON.stringify(response)
-        );
-
         if (response.text) {
             try {
-                if (!this.dryRun) {
-                    const callback: HandlerCallback = async (
-                        response: Content
-                    ) => {
-                        const memories = await sendTweetChunks(
-                            this,
-                            response,
-                            message.roomId,
-                            this.runtime.getSetting("TWITTER_USERNAME"),
-                            tweet.id
-                        );
-                        return memories;
-                    };
+                const callback: HandlerCallback = async (response: Content) => {
+                    const memories = await sendTweetChunks(
+                        this,
+                        response,
+                        message.roomId,
+                        this.runtime.getSetting("TWITTER_USERNAME"),
+                        tweet.id
+                    );
+                    return memories;
+                };
 
-                    const responseMessages = await callback(response);
+                const responseMessages = await callback(response);
 
-                    state = (await this.runtime.updateRecentMessageState(
-                        state
-                    )) as State;
+                state = (await this.runtime.updateRecentMessageState(
+                    state
+                )) as State;
 
-                    for (const responseMessage of responseMessages) {
-                        await this.runtime.messageManager.createMemory(
-                            responseMessage
-                        );
-                    }
-
-                    await this.runtime.evaluate(message, state);
-
-                    await this.runtime.processActions(
-                        message,
-                        responseMessages,
-                        state
+                for (const responseMessage of responseMessages) {
+                    await this.runtime.messageManager.createMemory(
+                        responseMessage
                     );
-                } else {
-                    console.log("Dry run, not sending tweet:", response.text);
                 }
+
+                await this.runtime.evaluate(message, state);
+
+                await this.runtime.processActions(
+                    message,
+                    responseMessages,
+                    state
+                );
                 const responseInfo = `Context:\n\n${context}\n\nSelected Post: ${tweet.id} - ${tweet.username}: ${tweet.text}\nAgent's Output:\n${response.text}`;
                 // f tweets folder dont exist, create
                 if (!fs.existsSync("tweets")) {
diff --git a/core/src/clients/twitter/post.ts b/core/src/clients/twitter/post.ts
index c39dc3b336c..bb93c2637e4 100644
--- a/core/src/clients/twitter/post.ts
+++ b/core/src/clients/twitter/post.ts
@@ -1,12 +1,11 @@
 import { Tweet } from "agent-twitter-client";
 import fs from "fs";
 import { composeContext } from "../../core/context.ts";
-import { log_to_file } from "../../core/logger.ts";
+import { generateText } from "../../core/generation.ts";
 import { embeddingZeroVector } from "../../core/memory.ts";
 import { IAgentRuntime, ModelClass } from "../../core/types.ts";
 import { stringToUuid } from "../../core/uuid.ts";
 import { ClientBase } from "./base.ts";
-import { generateText } from "../../core/generation.ts";
 
 const twitterPostTemplate = `{{timeline}}
 
@@ -101,98 +100,84 @@ export class TwitterPostClient extends ClientBase {
                     twitterPostTemplate,
             });
 
-            const datestr = new Date().toUTCString().replace(/:/g, "-");
-
-            // log context to file
-            log_to_file(
-                `${this.runtime.getSetting("TWITTER_USERNAME")}_${datestr}_generate_context`,
-                context
-            );
-
             const newTweetContent = await generateText({
                 runtime: this.runtime,
                 context,
                 modelClass: ModelClass.SMALL,
             });
-            console.log("New Tweet:", newTweetContent);
-            log_to_file(
-                `${this.runtime.getSetting("TWITTER_USERNAME")}_${datestr}_generate_response`,
-                JSON.stringify(newTweetContent)
-            );
 
             const slice = newTweetContent.replaceAll(/\\n/g, "\n").trim();
 
-            const content = slice;
-            // .slice(0, 280);
-            // // if its bigger than 280, delete the last line
-            // if (content.length > 280) {
-            //   content = content.slice(0, content.lastIndexOf("\n"));
-            // }
-
-            // if(content.length < 1) {
-            //   content = slice.slice(0, 280);
-            // }
-
-            // Send the new tweet
-            if (!this.dryRun) {
-                try {
-                    const result = await this.requestQueue.add(
-                        async () => await this.twitterClient.sendTweet(content)
-                    );
-                    // read the body of the response
-                    const body = await result.json();
-                    const tweetResult =
-                        body.data.create_tweet.tweet_results.result;
-
-                    const tweet = {
-                        id: tweetResult.rest_id,
-                        text: tweetResult.legacy.full_text,
-                        conversationId: tweetResult.legacy.conversation_id_str,
-                        createdAt: tweetResult.legacy.created_at,
-                        userId: tweetResult.legacy.user_id_str,
-                        inReplyToStatusId:
-                            tweetResult.legacy.in_reply_to_status_id_str,
-                        permanentUrl: `https://twitter.com/${this.runtime.getSetting("TWITTER_USERNAME")}/status/${tweetResult.rest_id}`,
-                        hashtags: [],
-                        mentions: [],
-                        photos: [],
-                        thread: [],
-                        urls: [],
-                        videos: [],
-                    } as Tweet;
-
-                    const postId = tweet.id;
-                    const conversationId =
-                        tweet.conversationId + "-" + this.runtime.agentId;
-                    const roomId = stringToUuid(conversationId);
-
-                    // make sure the agent is in the room
-                    await this.runtime.ensureRoomExists(roomId);
-                    await this.runtime.ensureParticipantInRoom(
-                        this.runtime.agentId,
-                        roomId
-                    );
-
-                    await this.cacheTweet(tweet);
-
-                    await this.runtime.messageManager.createMemory({
-                        id: stringToUuid(postId + "-" + this.runtime.agentId),
-                        userId: this.runtime.agentId,
-                        agentId: this.runtime.agentId,
-                        content: {
-                            text: newTweetContent.trim(),
-                            url: tweet.permanentUrl,
-                            source: "twitter",
-                        },
-                        roomId,
-                        embedding: embeddingZeroVector,
-                        createdAt: tweet.timestamp * 1000,
-                    });
-                } catch (error) {
-                    console.error("Error sending tweet:", error);
-                }
-            } else {
-                console.log("Dry run, not sending tweet:", newTweetContent);
+            const contentLength = 240;
+
+            let content = slice.slice(0, contentLength);
+            // if its bigger than 280, delete the last line
+            if (content.length > 280) {
+                content = content.slice(0, content.lastIndexOf("\n"));
+            }
+            if (content.length > contentLength) {
+                // slice at the last period
+                content = content.slice(0, content.lastIndexOf("."));
+            }
+
+            // if it's still too long, get the period before the last period
+            if (content.length > contentLength) {
+                content = content.slice(0, content.lastIndexOf("."));
+            }
+            try {
+                const result = await this.requestQueue.add(
+                    async () => await this.twitterClient.sendTweet(content)
+                );
+                // read the body of the response
+                const body = await result.json();
+                const tweetResult = body.data.create_tweet.tweet_results.result;
+
+                const tweet = {
+                    id: tweetResult.rest_id,
+                    text: tweetResult.legacy.full_text,
+                    conversationId: tweetResult.legacy.conversation_id_str,
+                    createdAt: tweetResult.legacy.created_at,
+                    userId: tweetResult.legacy.user_id_str,
+                    inReplyToStatusId:
+                        tweetResult.legacy.in_reply_to_status_id_str,
+                    permanentUrl: `https://twitter.com/${this.runtime.getSetting("TWITTER_USERNAME")}/status/${tweetResult.rest_id}`,
+                    hashtags: [],
+                    mentions: [],
+                    photos: [],
+                    thread: [],
+                    urls: [],
+                    videos: [],
+                } as Tweet;
+
+                const postId = tweet.id;
+                const conversationId =
+                    tweet.conversationId + "-" + this.runtime.agentId;
+                const roomId = stringToUuid(conversationId);
+
+                // make sure the agent is in the room
+                await this.runtime.ensureRoomExists(roomId);
+                await this.runtime.ensureParticipantInRoom(
+                    this.runtime.agentId,
+                    roomId
+                );
+
+                await this.cacheTweet(tweet);
+
+                await this.runtime.messageManager.createMemory({
+                    id: stringToUuid(postId + "-" + this.runtime.agentId),
+                    userId: this.runtime.agentId,
+                    agentId: this.runtime.agentId,
+                    content: {
+                        text: newTweetContent.trim(),
+                        url: tweet.permanentUrl,
+                        source: "twitter",
+                    },
+                    roomId,
+                    embedding: embeddingZeroVector,
+                    createdAt: tweet.timestamp * 1000,
+                });
+            } catch (error) {
+                console.error("Error sending tweet:", error);
             }
         } catch (error) {
             console.error("Error generating new tweet:", error);
diff --git a/core/src/clients/twitter/search.ts b/core/src/clients/twitter/search.ts
index de3f8341552..3ebaba93c79 100644
--- a/core/src/clients/twitter/search.ts
+++ b/core/src/clients/twitter/search.ts
@@ -5,7 +5,6 @@ import {
     generateMessageResponse,
     generateText,
 } from "../../core/generation.ts";
-import { log_to_file } from "../../core/logger.ts";
 import { messageCompletionFooter } from "../../core/parsing.ts";
 import {
     Content,
@@ -146,19 +145,12 @@ export class TwitterSearchClient extends ClientBase {
     - Respond to tweets where there is an easy exchange of ideas to have with the user
     - ONLY respond with the ID of the tweet`;
 
-            const datestr = new Date().toUTCString().replace(/:/g, "-");
-            const logName = `${this.runtime.character.name}_search_${datestr}`;
-            log_to_file(logName, prompt);
-
             const mostInterestingTweetResponse = await generateText({
                 runtime: this.runtime,
                 context: prompt,
                 modelClass: ModelClass.SMALL,
             });
 
-            const responseLogName = `${this.runtime.character.name}_search_${datestr}_result`;
-            log_to_file(responseLogName, mostInterestingTweetResponse);
-
             const tweetId = mostInterestingTweetResponse.trim();
             const selectedTweet = slicedTweets.find(
                 (tweet) =>
@@ -275,12 +267,6 @@ export class TwitterSearchClient extends ClientBase {
                     twitterSearchTemplate,
             });
 
-            // log context to file
-            log_to_file(
-                `${this.runtime.getSetting("TWITTER_USERNAME")}_${datestr}_search_context`,
-                context
-            );
-
             const responseContent = await generateMessageResponse({
                 runtime: this.runtime,
                 context,
@@ -289,11 +275,6 @@ export class TwitterSearchClient extends ClientBase {
 
             responseContent.inReplyTo = message.id;
 
-            log_to_file(
-                `${this.runtime.getSetting("TWITTER_USERNAME")}_${datestr}_search_response`,
-                JSON.stringify(responseContent)
-            );
-
             const response = responseContent;
 
             if (!response.text) {
diff --git a/core/src/clients/twitter/utils.ts b/core/src/clients/twitter/utils.ts
index 6e4b73b7018..ee044c5b0bc 100644
--- a/core/src/clients/twitter/utils.ts
+++ b/core/src/clients/twitter/utils.ts
@@ -3,7 +3,7 @@ import { embeddingZeroVector } from "../../core/memory.ts";
 import { Content, Memory, UUID } from "../../core/types.ts";
 import { stringToUuid } from "../../core/uuid.ts";
 import { ClientBase } from "./base.ts";
-import { prettyConsole } from "../../index.ts";
+import { elizaLogger } from "../../index.ts";
 
 const MAX_TWEET_LENGTH = 240;
 
@@ -37,7 +37,7 @@ export async function buildConversationThread(
 
     async function processThread(currentTweet: Tweet) {
         if (!currentTweet) {
-            prettyConsole.log("No current tweet found");
+            elizaLogger.log("No current tweet found");
             return;
         }
         // check if the current tweet has already been saved
@@ -45,7 +45,7 @@ export async function buildConversationThread(
             stringToUuid(currentTweet.id + "-" + client.runtime.agentId)
         );
         if (!memory) {
-            prettyConsole.log("Creating memory for tweet", currentTweet.id);
+            elizaLogger.log("Creating memory for tweet", currentTweet.id);
             const roomId = stringToUuid(
                 currentTweet.conversationId + "-" + client.runtime.agentId
             );
diff --git a/core/src/core/defaultCharacter.ts b/core/src/core/defaultCharacter.ts
index 0260a7ceafd..3c811871d8b 100644
--- a/core/src/core/defaultCharacter.ts
+++ b/core/src/core/defaultCharacter.ts
@@ -1,12 +1,9 @@
 import { Character, ModelProvider } from "./types.ts";
 
-const defaultCharacter: Character = {
+export const defaultCharacter: Character = {
     name: "Eliza",
-    clients: [
-        // "telegram",
-        // "discord",
-        // "twitter"
-    ],
+    plugins: [],
+    clients: [],
     modelProvider: ModelProvider.LLAMALOCAL,
     settings: {
         secrets: {},
@@ -402,5 +399,3 @@ const defaultCharacter: Character = {
         ],
     },
 };
-
-export default defaultCharacter;
diff --git a/core/src/core/generation.ts b/core/src/core/generation.ts
index c1983bae939..6c2ce257461 100644
--- a/core/src/core/generation.ts
+++ b/core/src/core/generation.ts
@@ -1,21 +1,18 @@
+import { createAnthropic } from "@ai-sdk/anthropic";
+import { createGroq } from "@ai-sdk/groq";
+import { createOpenAI } from "@ai-sdk/openai";
+import { generateText as aiGenerateText } from "ai";
+import { default as tiktoken, TiktokenModel } from "tiktoken";
+import { elizaLogger } from "../index.ts";
+import models from "./models.ts";
 import {
     parseBooleanFromText,
     parseJsonArrayFromText,
     parseJSONObjectFromText,
     parseShouldRespondFromText,
 } from "./parsing.ts";
-import { Content, IAgentRuntime, ModelProvider } from "./types.ts";
-
-import { createGroq } from "@ai-sdk/groq";
-import { createOpenAI } from "@ai-sdk/openai";
-import { default as tiktoken, TiktokenModel } from "tiktoken";
-import models from "./models.ts";
-
-import { generateText as aiGenerateText } from "ai";
-
-import { createAnthropic } from "@ai-sdk/anthropic";
-import { prettyConsole } from "../index.ts";
 import settings from "./settings.ts";
+import { Content, IAgentRuntime, ModelProvider } from "./types.ts";
 
 /**
  * Send a message to the model for a text generateText - receive a string back and parse how you'd like
@@ -47,6 +44,8 @@ export async function generateText({
     }
 
     const provider = runtime.modelProvider;
+    const endpoint =
+        runtime.character.modelEndpointOverride || models[provider].endpoint;
     const model = models[provider].model[modelClass];
     const temperature = models[provider].settings.temperature;
     const frequency_penalty = models[provider].settings.frequency_penalty;
@@ -57,7 +56,7 @@ export async function generateText({
     const apiKey = runtime.token;
 
     try {
-        prettyConsole.log(
+        elizaLogger.log(
             `Trimming context to max length of ${max_context_length} tokens.`
         );
         context = await trimTokens(context, max_context_length, "gpt-4o");
@@ -65,17 +64,15 @@ export async function generateText({
         let response: string;
 
         const _stop = stop || models[provider].settings.stop;
-        prettyConsole.log(
+        elizaLogger.log(
             `Using provider: ${provider}, model: ${model}, temperature: ${temperature}, max response length: ${max_response_length}`
         );
 
         switch (provider) {
             case ModelProvider.OPENAI:
             case ModelProvider.LLAMACLOUD: {
-                prettyConsole.log("Initializing OpenAI model.");
-                const openai = createOpenAI({ apiKey });
-
-                console.log("****** CONTEXT\n", context);
+                elizaLogger.log("Initializing OpenAI model.");
+                const openai = createOpenAI({ apiKey, baseURL: endpoint });
 
                 const { text: openaiResponse } = await aiGenerateText({
                     model: openai.languageModel(model),
@@ -91,12 +88,12 @@ export async function generateText({
                 });
 
                 response = openaiResponse;
-                prettyConsole.log("Received response from OpenAI model.");
+                elizaLogger.log("Received response from OpenAI model.");
                 break;
             }
 
             case ModelProvider.ANTHROPIC: {
-                prettyConsole.log("Initializing Anthropic model.");
+                elizaLogger.log("Initializing Anthropic model.");
 
                 const anthropic = createAnthropic({ apiKey });
 
@@ -114,14 +111,13 @@ export async function generateText({
                 });
 
                 response = anthropicResponse;
-                prettyConsole.log("Received response from Anthropic model.");
+                elizaLogger.log("Received response from Anthropic model.");
                 break;
             }
 
             case ModelProvider.GROK: {
-                prettyConsole.log("Initializing Grok model.");
-                const serverUrl = models[provider].endpoint;
-                const grok = createOpenAI({ apiKey, baseURL: serverUrl });
+                elizaLogger.log("Initializing Grok model.");
+                const grok = createOpenAI({ apiKey, baseURL: endpoint });
 
                 const { text: grokResponse } = await aiGenerateText({
                     model: grok.languageModel(model, {
@@ -139,7 +135,7 @@ export async function generateText({
                 });
 
                 response = grokResponse;
-                prettyConsole.log("Received response from Grok model.");
+                elizaLogger.log("Received response from Grok model.");
                 break;
             }
 
@@ -166,9 +162,7 @@ export async function generateText({
             }
 
             case ModelProvider.LLAMALOCAL: {
-                prettyConsole.log(
-                    "Using local Llama model for text completion."
-                );
+                elizaLogger.log("Using local Llama model for text completion.");
                 response = await runtime.llamaService.queueTextCompletion(
                     context,
                     temperature,
@@ -177,12 +171,12 @@ export async function generateText({
                     presence_penalty,
                     max_response_length
                 );
-                prettyConsole.log("Received response from local Llama model.");
+                elizaLogger.log("Received response from local Llama model.");
                 break;
             }
 
             case ModelProvider.REDPILL: {
-                prettyConsole.log("Initializing RedPill model.");
+                elizaLogger.log("Initializing RedPill model.");
                 const serverUrl = models[provider].endpoint;
                 const openai = createOpenAI({ apiKey, baseURL: serverUrl });
 
@@ -200,20 +194,20 @@ export async function generateText({
                 });
 
                 response = openaiResponse;
-                prettyConsole.log("Received response from OpenAI model.");
+                elizaLogger.log("Received response from OpenAI model.");
                 break;
             }
 
             default: {
                 const errorMessage = `Unsupported provider: ${provider}`;
-                prettyConsole.error(errorMessage);
+                elizaLogger.error(errorMessage);
                 throw new Error(errorMessage);
             }
         }
 
         return response;
     } catch (error) {
-        prettyConsole.error("Error in generateText:", error);
+        elizaLogger.error("Error in generateText:", error);
         throw error;
     }
 }
@@ -263,7 +257,7 @@ export async function generateShouldRespond({
     let retryDelay = 1000;
     while (true) {
         try {
-            prettyConsole.log(
+            elizaLogger.log(
                 "Attempting to generate text with context:",
                 context
             );
@@ -273,27 +267,27 @@ export async function generateShouldRespond({
                 modelClass,
             });
 
-            prettyConsole.log("Received response from generateText:", response);
+            elizaLogger.log("Received response from generateText:", response);
             const parsedResponse = parseShouldRespondFromText(response.trim());
             if (parsedResponse) {
-                prettyConsole.log("Parsed response:", parsedResponse);
+                elizaLogger.log("Parsed response:", parsedResponse);
                 return parsedResponse;
             } else {
-                prettyConsole.log("generateShouldRespond no response");
+                elizaLogger.log("generateShouldRespond no response");
             }
         } catch (error) {
-            prettyConsole.error("Error in generateShouldRespond:", error);
+            elizaLogger.error("Error in generateShouldRespond:", error);
             if (
                 error instanceof TypeError &&
                 error.message.includes("queueTextCompletion")
             ) {
-                prettyConsole.error(
+                elizaLogger.error(
                     "TypeError: Cannot read properties of null (reading 'queueTextCompletion')"
                 );
             }
         }
 
-        prettyConsole.log(`Retrying in ${retryDelay}ms...`);
+        elizaLogger.log(`Retrying in ${retryDelay}ms...`);
         await new Promise((resolve) => setTimeout(resolve, retryDelay));
         retryDelay *= 2;
     }
@@ -384,7 +378,7 @@ export async function generateTrueOrFalse({
                 return parsedResponse;
             }
         } catch (error) {
-            prettyConsole.error("Error in generateTrueOrFalse:", error);
+            elizaLogger.error("Error in generateTrueOrFalse:", error);
         }
 
         await new Promise((resolve) => setTimeout(resolve, retryDelay));
@@ -417,7 +411,7 @@ export async function generateTextArray({
     modelClass: string;
 }): Promise<string[]> {
     if (!context) {
-        prettyConsole.error("generateTextArray context is empty");
+        elizaLogger.error("generateTextArray context is empty");
         return [];
     }
     let retryDelay = 1000;
@@ -435,7 +429,7 @@ export async function generateTextArray({
                 return parsedResponse;
             }
         } catch (error) {
-            prettyConsole.error("Error in generateTextArray:", error);
+            elizaLogger.error("Error in generateTextArray:", error);
         }
 
         await new Promise((resolve) => setTimeout(resolve, retryDelay));
@@ -453,7 +447,7 @@ export async function generateObject({
     modelClass: string;
 }): Promise<any> {
     if (!context) {
-        prettyConsole.error("generateObject context is empty");
+        elizaLogger.error("generateObject context is empty");
         return null;
     }
     let retryDelay = 1000;
@@ -471,7 +465,7 @@ export async function generateObject({
                 return parsedResponse;
             }
         } catch (error) {
-            prettyConsole.error("Error in generateObject:", error);
+            elizaLogger.error("Error in generateObject:", error);
         }
 
         await new Promise((resolve) => setTimeout(resolve, retryDelay));
@@ -489,7 +483,7 @@ export async function generateObjectArray({
     modelClass: string;
 }): Promise<any[]> {
     if (!context) {
-        prettyConsole.error("generateObjectArray context is empty");
+        elizaLogger.error("generateObjectArray context is empty");
         return [];
     }
     let retryDelay = 1000;
@@ -507,7 +501,7 @@ export async function generateObjectArray({
                 return parsedResponse;
             }
         } catch (error) {
-            prettyConsole.error("Error in generateTextArray:", error);
+            elizaLogger.error("Error in generateTextArray:", error);
         }
 
         await new Promise((resolve) => setTimeout(resolve, retryDelay));
@@ -550,17 +544,17 @@ export async function generateMessageResponse({
             // try parsing the response as JSON, if null then try again
             const parsedContent = parseJSONObjectFromText(response) as Content;
             if (!parsedContent) {
-                prettyConsole.log("parsedContent is null, retrying");
+                elizaLogger.log("parsedContent is null, retrying");
                 continue;
             }
 
             return parsedContent;
         } catch (error) {
-            prettyConsole.error("ERROR:", error);
+            elizaLogger.error("ERROR:", error);
             // wait for 2 seconds
             retryLength *= 2;
             await new Promise((resolve) => setTimeout(resolve, retryLength));
-            prettyConsole.log("Retrying...");
+            elizaLogger.log("Retrying...");
         }
     }
 }
diff --git a/core/src/core/imageGenModels.ts b/core/src/core/imageGenModels.ts
index 86bbe422a91..6515644c2e9 100644
--- a/core/src/core/imageGenModels.ts
+++ b/core/src/core/imageGenModels.ts
@@ -3,7 +3,7 @@ export enum ImageGenModel {
     Dalle = "Dalle",
 }
 
-const imageGenModels = {
+export const imageGenModels = {
     [ImageGenModel.TogetherAI]: {
         steps: 4,
         subModel: "black-forest-labs/FLUX.1-schnell",
@@ -14,6 +14,6 @@ const imageGenModels = {
     },
 };
 
-export function getModel(model: ImageGenModel) {
+export function getImageGenModel(model: ImageGenModel) {
     return imageGenModels[model];
 }
diff --git a/core/src/core/index.ts b/core/src/core/index.ts
new file mode 100644
index 00000000000..c0fec60edc2
--- /dev/null
+++ b/core/src/core/index.ts
@@ -0,0 +1,19 @@
+export * from "./actions.ts";
+export * from "./context.ts";
+export * from "./database.ts";
+export * from "./defaultCharacter.ts";
+export * from "./embedding.ts";
+export * from "./evaluators.ts";
+export * from "./generation.ts";
+export * from "./goals.ts";
+export * from "./imageGenModels.ts";
+export * from "./memory.ts";
+export * from "./messages.ts";
+export * from "./models.ts";
+export * from "./logger.ts";
+export * from "./posts.ts";
+export * from "./providers.ts";
+export * from "./relationships.ts";
+export * from "./runtime.ts";
+export * from "./settings.ts";
+export * from "./types.ts";
diff --git a/core/src/core/logger.ts b/core/src/core/logger.ts
index 99ef8d1521e..7928845f62c 100644
--- a/core/src/core/logger.ts
+++ b/core/src/core/logger.ts
@@ -1,74 +1,268 @@
-import fs from "fs";
-import path from "path";
-class Logger {
-    frameChar = "*";
+export class elizaLogger {
+    closeByNewLine = true;
+    useIcons = true;
+    logsTitle = "LOGS";
+    warningsTitle = "WARNINGS";
+    errorsTitle = "ERRORS";
+    informationsTitle = "INFORMATIONS";
+    successesTitle = "SUCCESS";
+    debugsTitle = "DEBUG";
+    assertsTitle = "ASSERT";
+    #getColor(foregroundColor = "", backgroundColor = "") {
+        let fgc = "\x1b[37m";
+        switch (foregroundColor.trim().toLowerCase()) {
+            case "black":
+                fgc = "\x1b[30m";
+                break;
+            case "red":
+                fgc = "\x1b[31m";
+                break;
+            case "green":
+                fgc = "\x1b[32m";
+                break;
+            case "yellow":
+                fgc = "\x1b[33m";
+                break;
+            case "blue":
+                fgc = "\x1b[34m";
+                break;
+            case "magenta":
+                fgc = "\x1b[35m";
+                break;
+            case "cyan":
+                fgc = "\x1b[36m";
+                break;
+            case "white":
+                fgc = "\x1b[37m";
+                break;
+        }
 
-    async log(
-        message: string,
-        title: string = "",
-        color: string = "white"
-    ): Promise<void> {
-        const c = await import("ansi-colors");
-        const ansiColors = c.default;
-        console.log(ansiColors[color]("*** LOG: " + title + "\n" + message));
-    }
+        let bgc = "";
+        switch (backgroundColor.trim().toLowerCase()) {
+            case "black":
+                bgc = "\x1b[40m";
+                break;
+            case "red":
+                bgc = "\x1b[44m";
+                break;
+            case "green":
+                bgc = "\x1b[44m";
+                break;
+            case "yellow":
+                bgc = "\x1b[43m";
+                break;
+            case "blue":
+                bgc = "\x1b[44m";
+                break;
+            case "magenta":
+                bgc = "\x1b[45m";
+                break;
+            case "cyan":
+                bgc = "\x1b[46m";
+                break;
+            case "white":
+                bgc = "\x1b[47m";
+                break;
+        }
 
-    warn(message: string, options = {}) {
-        console.warn(message, { ...options });
+        return `${fgc}${bgc}`;
     }
-
-    error(message: string, options = {}) {
-        console.error(message, { ...options });
+    #getColorReset() {
+        return "\x1b[0m";
     }
-
-    frameMessage(message: string, title: string) {
-        const lines = message.split("\n");
-        const frameHorizontalLength = 30;
-        const topFrame =
-            this.frameChar.repeat(frameHorizontalLength + 4) +
-            " " +
-            this.frameChar +
-            " " +
-            (title ?? "log") +
-            " ".repeat(
-                frameHorizontalLength -
-                    ((title as string) ?? ("log" as string)).length +
-                    1
-            ) +
-            this.frameChar.repeat(frameHorizontalLength + 4);
-        const bottomFrame = this.frameChar.repeat(frameHorizontalLength + 4);
-        return [topFrame, ...lines, bottomFrame].join("\n");
+    clear() {
+        console.clear();
     }
-}
-
-const logger = new Logger();
-
-export function log_to_file(
-    filename: string,
-    message: string,
-    logDirectory: string = "./logs"
-): void {
-    // Ensure the log directory exists
-    if (!fs.existsSync(logDirectory)) {
-        fs.mkdirSync(logDirectory, { recursive: true });
+    print(foregroundColor = "white", backgroundColor = "black", ...strings) {
+        const c = this.#getColor(foregroundColor, backgroundColor);
+        // turns objects into printable strings
+        strings = strings.map((item) => {
+            if (typeof item === "object") item = JSON.stringify(item);
+            return item;
+        });
+        console.log(c, strings.join(""), this.#getColorReset());
+        if (this.closeByNewLine) console.log("");
     }
-
-    let fullPath = path.join(logDirectory, filename);
-    const timestamp = new Date().toUTCString();
-    const logEntry = `[${timestamp}] ${message}\n`;
-
-    // if full path doesnt end in .log or .txt, append .log
-    if (!fullPath.endsWith(".log") && !fullPath.endsWith(".txt")) {
-        fullPath += ".log";
+    log(...strings) {
+        const fg = "white";
+        const bg = "";
+        const icon = "\u25ce";
+        const groupTile = ` ${this.logsTitle}`;
+        if (strings.length > 1) {
+            const c = this.#getColor(fg, bg);
+            console.group(c, (this.useIcons ? icon : "") + groupTile);
+            const nl = this.closeByNewLine;
+            this.closeByNewLine = false;
+            strings.forEach((item) => {
+                this.print(fg, bg, item, this.#getColorReset());
+            });
+            this.closeByNewLine = nl;
+            console.groupEnd();
+            if (nl) console.log();
+        } else {
+            this.print(
+                fg,
+                bg,
+                strings.map((item) => {
+                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
+                })
+            );
+        }
+    }
+    warn(...strings) {
+        const fg = "yellow";
+        const bg = "";
+        const icon = "\u26a0";
+        const groupTile = ` ${this.warningsTitle}`;
+        if (strings.length > 1) {
+            const c = this.#getColor(fg, bg);
+            console.group(c, (this.useIcons ? icon : "") + groupTile);
+            const nl = this.closeByNewLine;
+            this.closeByNewLine = false;
+            strings.forEach((item) => {
+                this.print(fg, bg, item, this.#getColorReset());
+            });
+            this.closeByNewLine = nl;
+            console.groupEnd();
+            if (nl) console.log();
+        } else {
+            this.print(
+                fg,
+                bg,
+                strings.map((item) => {
+                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
+                })
+            );
+        }
+    }
+    error(...strings) {
+        const fg = "red";
+        const bg = "";
+        const icon = "\u26D4";
+        const groupTile = ` ${this.errorsTitle}`;
+        if (strings.length > 1) {
+            const c = this.#getColor(fg, bg);
+            console.group(c, (this.useIcons ? icon : "") + groupTile);
+            const nl = this.closeByNewLine;
+            this.closeByNewLine = false;
+            strings.forEach((item) => {
+                this.print(fg, bg, item);
+            });
+            this.closeByNewLine = nl;
+            console.groupEnd();
+            if (nl) console.log();
+        } else {
+            this.print(
+                fg,
+                bg,
+                strings.map((item) => {
+                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
+                })
+            );
+        }
+    }
+    info(...strings) {
+        const fg = "blue";
+        const bg = "";
+        const icon = "\u2139";
+        const groupTile = ` ${this.informationsTitle}`;
+        if (strings.length > 1) {
+            const c = this.#getColor(fg, bg);
+            console.group(c, (this.useIcons ? icon : "") + groupTile);
+            const nl = this.closeByNewLine;
+            this.closeByNewLine = false;
+            strings.forEach((item) => {
+                this.print(fg, bg, item);
+            });
+            this.closeByNewLine = nl;
+            console.groupEnd();
+            if (nl) console.log();
+        } else {
+            this.print(
+                fg,
+                bg,
+                strings.map((item) => {
+                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
+                })
+            );
+        }
+    }
+    success(...strings) {
+        const fg = "green";
+        const bg = "";
+        const icon = "\u2713";
+        const groupTile = ` ${this.successesTitle}`;
+        if (strings.length > 1) {
+            const c = this.#getColor(fg, bg);
+            console.group(c, (this.useIcons ? icon : "") + groupTile);
+            const nl = this.closeByNewLine;
+            this.closeByNewLine = false;
+            strings.forEach((item) => {
+                this.print(fg, bg, item);
+            });
+            this.closeByNewLine = nl;
+            console.groupEnd();
+            if (nl) console.log();
+        } else {
+            this.print(
+                fg,
+                bg,
+                strings.map((item) => {
+                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
+                })
+            );
+        }
+    }
+    debug(...strings) {
+        const fg = "magenta";
+        const bg = "";
+        const icon = "\u1367";
+        const groupTile = ` ${this.debugsTitle}`;
+        if (strings.length > 1) {
+            const c = this.#getColor(fg, bg);
+            console.group(c, (this.useIcons ? icon : "") + groupTile);
+            const nl = this.closeByNewLine;
+            this.closeByNewLine = false;
+            strings.forEach((item) => {
+                this.print(fg, bg, item);
+            });
+            this.closeByNewLine = nl;
+            console.groupEnd();
+            if (nl) console.log();
+        } else {
+            this.print(
+                fg,
+                bg,
+                strings.map((item) => {
+                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
+                })
+            );
+        }
+    }
+    assert(...strings) {
+        const fg = "cyan";
+        const bg = "";
+        const icon = "\u0021";
+        const groupTile = ` ${this.assertsTitle}`;
+        if (strings.length > 1) {
+            const c = this.#getColor(fg, bg);
+            console.group(c, (this.useIcons ? icon : "") + groupTile);
+            const nl = this.closeByNewLine;
+            this.closeByNewLine = false;
+            strings.forEach((item) => {
+                this.print(fg, bg, item);
+            });
+            this.closeByNewLine = nl;
+            console.groupEnd();
+            if (nl) console.log();
+        } else {
+            this.print(
+                fg,
+                bg,
+                strings.map((item) => {
+                    return `${this.useIcons ? `${icon} ` : ""}${item}`;
+                })
+            );
+        }
     }
-
-    // Append the log entry to the file
-    fs.appendFileSync(fullPath, logEntry);
-
-    // Print a message to the console
-    const preview =
-        message.length > 200 ? message.substring(0, 200) + "..." : message;
-    logger.log(`Logged to ${filename}: ${preview}`, filename);
 }
-
-export default logger;
diff --git a/core/src/core/runtime.ts b/core/src/core/runtime.ts
index 1927db9621a..1df82d340a8 100644
--- a/core/src/core/runtime.ts
+++ b/core/src/core/runtime.ts
@@ -6,7 +6,7 @@ import {
     formatEvaluatorNames,
     formatEvaluators,
 } from "./evaluators.ts";
-import { embeddingZeroVector, MemoryManager } from "./memory.ts";
+import { MemoryManager } from "./memory.ts";
 import { parseJsonArrayFromText } from "./parsing.ts";
 import {
     Character,
@@ -32,6 +32,7 @@ import {
 
 import { names, uniqueNamesGenerator } from "unique-names-generator";
 import { formatFacts } from "../evaluators/fact.ts";
+import { elizaLogger } from "../index.ts";
 import { BrowserService } from "../services/browser.ts";
 import ImageDescriptionService from "../services/image.ts";
 import LlamaService from "../services/llama.ts";
@@ -44,18 +45,16 @@ import {
     formatActionNames,
     formatActions,
 } from "./actions.ts";
-import defaultCharacter from "./defaultCharacter.ts";
-import { embed } from "./embedding.ts";
-import { generateText, splitChunks } from "./generation.ts";
+import { defaultCharacter } from "./defaultCharacter.ts";
+import { generateText } from "./generation.ts";
 import { formatGoalsAsString, getGoals } from "./goals.ts";
+import { ImageGenModel } from "./imageGenModels.ts";
 import { formatActors, formatMessages, getActorDetails } from "./messages.ts";
 import { formatPosts } from "./posts.ts";
 import { defaultProviders, getProviders } from "./providers.ts";
 import settings from "./settings.ts";
 import { UUID, type Actor } from "./types.ts";
 import { stringToUuid } from "./uuid.ts";
-import { ImageGenModel } from "./imageGenModels.ts";
-import { prettyConsole } from "../index.ts";
 
 /**
  * Represents the runtime environment for an agent, handling message processing,
@@ -263,13 +262,24 @@ export class AgentRuntime implements IAgentRuntime {
 
         this.token = opts.token;
 
-        (opts.actions ?? []).forEach((action) => {
-            this.registerAction(action);
+        (opts.character.plugins ?? []).forEach((plugin) => {
+            plugin.actions.forEach((action) => {
+                this.registerAction(action);
+            });
+
+            plugin.evaluators.forEach((evaluator) => {
+                this.registerEvaluator(evaluator);
+            });
+
+            plugin.providers.forEach((provider) => {
+                this.registerContextProvider(provider);
+            });
         });
 
         (opts.evaluators ?? defaultEvaluators).forEach((evaluator) => {
             this.registerEvaluator(evaluator);
         });
+
         (opts.providers ?? defaultProviders).forEach((provider) => {
             this.registerContextProvider(provider);
         });
@@ -405,7 +415,7 @@ export class AgentRuntime implements IAgentRuntime {
      * @param action The action to register.
      */
     registerAction(action: Action) {
-        prettyConsole.success(`Registering action: ${action.name}`);
+        elizaLogger.success(`Registering action: ${action.name}`);
         this.actions.push(action);
     }
 
@@ -437,6 +447,7 @@ export class AgentRuntime implements IAgentRuntime {
         callback?: HandlerCallback
     ): Promise<void> {
         if (!responses[0].content?.action) {
+            elizaLogger.warn("No action found in the response content.");
             return;
         }
 
@@ -444,6 +455,8 @@ export class AgentRuntime implements IAgentRuntime {
             .toLowerCase()
             .replace("_", "");
 
+        elizaLogger.success(`Normalized action: ${normalizedAction}`);
+
         let action = this.actions.find(
             (a: { name: string }) =>
                 a.name
@@ -454,7 +467,7 @@ export class AgentRuntime implements IAgentRuntime {
         );
 
         if (!action) {
-            // each action has a .similes array, lets see if we can find a match
+            elizaLogger.info("Attempting to find action in similes.");
             for (const _action of this.actions) {
                 const simileAction = _action.similes.find(
                     (simile) =>
@@ -468,22 +481,28 @@ export class AgentRuntime implements IAgentRuntime {
                 );
                 if (simileAction) {
                     action = _action;
+                    elizaLogger.success(
+                        `Action found in similes: ${action.name}`
+                    );
                     break;
                 }
             }
         }
 
         if (!action) {
-            return console.warn(
+            elizaLogger.error(
                 "No action found for",
                 responses[0].content.action
             );
+            return;
         }
 
         if (!action.handler) {
+            elizaLogger.error(`Action ${action.name} has no handler.`);
             return;
         }
 
+        elizaLogger.success(`Executing handler for action: ${action.name}`);
         await action.handler(this, message, state, {}, callback);
     }
 
@@ -591,7 +610,7 @@ export class AgentRuntime implements IAgentRuntime {
                 email: email || (userName || "Bot") + "@" + source || "Unknown", // Temporary
                 details: { summary: "" },
             });
-            prettyConsole.success(`User ${userName} created successfully.`);
+            elizaLogger.success(`User ${userName} created successfully.`);
         }
     }
 
@@ -600,7 +619,7 @@ export class AgentRuntime implements IAgentRuntime {
             await this.databaseAdapter.getParticipantsForRoom(roomId);
         if (!participants.includes(userId)) {
             await this.databaseAdapter.addParticipant(userId, roomId);
-            prettyConsole.log(
+            elizaLogger.log(
                 `User ${userId} linked to room ${roomId} successfully.`
             );
         }
@@ -646,7 +665,7 @@ export class AgentRuntime implements IAgentRuntime {
         const room = await this.databaseAdapter.getRoom(roomId);
         if (!room) {
             await this.databaseAdapter.createRoom(roomId);
-            prettyConsole.log(`Room ${roomId} created successfully.`);
+            elizaLogger.log(`Room ${roomId} created successfully.`);
         }
     }
 
diff --git a/core/src/core/settings.ts b/core/src/core/settings.ts
index d9918af9bc6..9455091e231 100644
--- a/core/src/core/settings.ts
+++ b/core/src/core/settings.ts
@@ -1,5 +1,5 @@
-import dotenv from "dotenv";
-dotenv.config();
+import { config } from "dotenv";
+config();
 
 const settings = process.env;
 
diff --git a/core/src/core/types.ts b/core/src/core/types.ts
index d6a21605acd..6ef504f4ce1 100644
--- a/core/src/core/types.ts
+++ b/core/src/core/types.ts
@@ -108,6 +108,7 @@ export enum ModelProvider {
     GOOGLE = "google",
     CLAUDE_VERTEX = "claude_vertex",
     REDPILL = "redpill",
+    GITHUB = "GITHUB",
 }
 
 /**
@@ -286,16 +287,31 @@ export type Media = {
     text: string;
 };
 
+export type Plugin = {
+    name: string;
+    description: string;
+    actions: Action[];
+    providers: Provider[];
+    evaluators: Evaluator[];
+};
+
+export enum Clients {
+    DISCORD = "discord",
+    DIRECT = "direct",
+    TWITTER = "twitter",
+    TELEGRAM = "telegram",
+}
+
 export type Character = {
     id?: UUID; // optional UUID which can be passed down to identify the character
     name: string;
     system?: string;
     modelProvider: ModelProvider;
+    modelEndpointOverride?: string;
     imageGenModel?: ImageGenModel;
     templates?: {
         [key: string]: string;
     };
-    modelOverride?: string;
     bio: string | string[];
     lore: string[];
     messageExamples: MessageExample[][];
@@ -304,7 +320,8 @@ export type Character = {
     topics: string[];
     adjectives: string[];
     knowledge?: string[];
-    clients: string[]; // list of clients the character can interact with
+    clients: Clients[]; // list of clients the character can interact with
+    plugins: Plugin[]; // list of plugins the character can use
     settings?: {
         secrets?: { [key: string]: string };
         voice?: {
diff --git a/core/src/index.ts b/core/src/index.ts
index 54597239ca9..a3c9a118d05 100644
--- a/core/src/index.ts
+++ b/core/src/index.ts
@@ -3,107 +3,13 @@ export * from "./actions/index.ts";
 export * from "./clients/index.ts";
 export * from "./adapters/index.ts";
 export * from "./providers/index.ts";
+export * from "./core/index.ts";
+export * from "./cli/index.ts";
 
-import * as Client from "./clients/index.ts";
+import { elizaLogger as Logging } from "./core/index.ts";
 
-import { Character } from "./core/types.ts";
-
-import readline from "readline";
-import { Arguments } from "./types/index.ts";
-import {
-    createAgentRuntime,
-    createDirectRuntime,
-    getTokenForProvider,
-    initializeClients,
-    initializeDatabase,
-    loadCharacters,
-    parseArguments,
-} from "./cli/index.ts";
-import { PrettyConsole } from "./cli/colors.ts";
-
-let argv: Arguments = parseArguments();
-let basePath = "./";
-// if argv.isroot is true, then set the base path to "../"
-if (argv.isRoot) {
-    basePath = "../";
-}
-
-// if the path doesnt start with a /, add the base path to the beginning of the path
-if (!argv.characters?.startsWith("/")) {
-    argv.characters = `${basePath}${argv.characters}`;
-}
-
-let characters = loadCharacters(argv.characters);
-
-const directClient = new Client.DirectClient();
-
-// Initialize the pretty console
-export const prettyConsole = new PrettyConsole();
-prettyConsole.clear();
-prettyConsole.closeByNewLine = true;
-prettyConsole.useIcons = true;
-
-// Start the direct client
-const serverPort = parseInt(process.env.SERVER_PORT || "3000");
-directClient.start(serverPort);
-
-async function startAgent(character: Character) {
-    prettyConsole.success(`Starting agent for character ${character.name}`);
-    const token = getTokenForProvider(character.modelProvider, character);
-    const db = initializeDatabase();
-
-    const runtime = await createAgentRuntime(character, db, token);
-    const directRuntime = createDirectRuntime(character, db, token);
-
-    const clients = await initializeClients(character, runtime);
-    directClient.registerAgent(await directRuntime);
-
-    return clients;
-}
-
-const startAgents = async () => {
-    for (const character of characters) {
-        await startAgent(character);
-    }
-};
-
-startAgents();
-
-const rl = readline.createInterface({
-    input: process.stdin,
-    output: process.stdout,
-});
-
-function chat() {
-    rl.question("You: ", async (input) => {
-        if (input.toLowerCase() === "exit") {
-            rl.close();
-            return;
-        }
-
-        const agentId = characters[0].name.toLowerCase();
-        const response = await fetch(
-            `http://localhost:3000/${agentId}/message`,
-            {
-                method: "POST",
-                headers: {
-                    "Content-Type": "application/json",
-                },
-                body: JSON.stringify({
-                    text: input,
-                    userId: "user",
-                    userName: "User",
-                }),
-            }
-        );
-
-        const data = await response.json();
-        for (const message of data) {
-            console.log(`${characters[0].name}: ${message.text}`);
-        }
-        chat();
-    });
-}
-
-console.log("Chat started. Type 'exit' to quit.");
-chat();
+// // Initialize the pretty console
+export const elizaLogger = new Logging();
+elizaLogger.clear();
+elizaLogger.closeByNewLine = true;
+elizaLogger.useIcons = true;
diff --git a/core/src/services/llama.ts b/core/src/services/llama.ts
index 4cbcc5e9cb1..753c91b977b 100644
--- a/core/src/services/llama.ts
+++ b/core/src/services/llama.ts
@@ -15,7 +15,7 @@ import fs from "fs";
 import https from "https";
 import si from "systeminformation";
 import { wordsToPunish } from "./wordsToPunish.ts";
-import { prettyConsole } from "../index.ts";
+import { elizaLogger } from "../index.ts";
 
 const __dirname = path.dirname(fileURLToPath(import.meta.url));
 
@@ -74,7 +74,6 @@ class LlamaService {
             "https://huggingface.co/NousResearch/Hermes-3-Llama-3.1-8B-GGUF/resolve/main/Hermes-3-Llama-3.1-8B.Q8_0.gguf?download=true";
         const modelName = "model.gguf";
         this.modelPath = path.join(__dirname, modelName);
-
     }
     private async ensureInitialized() {
         if (!this.modelInitialized) {
@@ -116,7 +115,7 @@ class LlamaService {
             this.model = await this.llama.loadModel({
                 modelPath: this.modelPath,
             });
-            
+
             this.ctx = await this.model.createContext({ contextSize: 8192 });
             this.sequence = this.ctx.getSequence();
 
@@ -195,7 +194,7 @@ class LlamaService {
                 });
             });
         } else {
-            prettyConsole.warn("Model already exists.");
+            elizaLogger.warn("Model already exists.");
         }
     }
 
@@ -391,4 +390,3 @@ class LlamaService {
 }
 
 export default LlamaService;
-
diff --git a/core/src/test_resources/cache.ts b/core/src/test_resources/cache.ts
index b8fbef0bbe3..3f42011eb1b 100644
--- a/core/src/test_resources/cache.ts
+++ b/core/src/test_resources/cache.ts
@@ -1,8 +1,7 @@
 // getCachedEmbeddings
 // check cache.json for embedding where the key is a stringified version of the memory and the value is a number array
+import fs from "fs";
 export const getCachedEmbeddings = async (text: string) => {
-    const fs = await import("fs");
-
     if (!fs.existsSync("./embedding-cache.json")) {
         fs.writeFileSync("./embedding-cache.json", "{}");
     }
@@ -20,8 +19,6 @@ export const writeCachedEmbedding = async (
     text: string,
     embedding: number[]
 ) => {
-    const fs = await import("fs");
-
     // check if ./embedding-cache.json exists, if it doesn't, write {} to it
     if (!fs.existsSync("./embedding-cache.json")) {
         fs.writeFileSync("./embedding-cache.json", "{}");
diff --git a/core/src/test_resources/report.ts b/core/src/test_resources/report.ts
index 70d4a37cb9d..7e10e600e1f 100644
--- a/core/src/test_resources/report.ts
+++ b/core/src/test_resources/report.ts
@@ -1,3 +1,5 @@
+import fs from "fs";
+
 interface TestResult {
     testName: string;
     attempts: number;
@@ -6,7 +8,7 @@ interface TestResult {
 }
 
 export async function deleteReport() {
-    const { existsSync, unlinkSync } = await import("fs");
+    const { existsSync, unlinkSync } = fs;
 
     // Define the path to the test-report.json file
     const reportPath = "./test-report.json";
@@ -24,7 +26,7 @@ export async function addToReport(
     successful: number,
     successRate: number
 ) {
-    const { existsSync, readFileSync, writeFileSync } = await import("fs");
+    const { existsSync, readFileSync, writeFileSync } = fs;
 
     // Define the path to the test-report.json file
     const reportPath = "./test-report.json";
@@ -65,7 +67,7 @@ export async function addToReport(
 }
 
 export async function logReport() {
-    const { existsSync, readFileSync } = await import("fs");
+    const { existsSync, readFileSync } = fs;
     const colors = await import("ansi-colors");
 
     // Define the path to the test-report.json file
diff --git a/core/src/vendor/vits.ts b/core/src/vendor/vits.ts
index 239e610b284..7a49f6cd656 100644
--- a/core/src/vendor/vits.ts
+++ b/core/src/vendor/vits.ts
@@ -4471,7 +4471,6 @@ class VitsTTS {
                         const id = phonemeMap.get(phonemeCharacter);
 
                         if (id == null) {
-                            //logger.log(`No id found for subphoneme '${char}'`)
                             continue;
                         }
 
@@ -4498,8 +4497,6 @@ class VitsTTS {
             ...endId
         );
 
-        //logger.log(ids)
-
         const bigIntIds = new BigInt64Array(ids.map((id) => BigInt(id)));
         const idLengths = new BigInt64Array([BigInt(bigIntIds.length)]);
 
diff --git a/core/tests/utils.test.ts b/core/tests/utils.test.ts
index 9e357f3cdb1..9fb50d8b448 100644
--- a/core/tests/utils.test.ts
+++ b/core/tests/utils.test.ts
@@ -1,14 +1,14 @@
 import Database from "better-sqlite3";
 import fs from "fs";
 import path from "path";
-import { SqliteDatabaseAdapter } from "../../adapters/sqlite.ts";
-import defaultCharacter from "../../core/defaultCharacter.ts";
-import { AgentRuntime } from "../../core/runtime.ts";
-import settings from "../../core/settings.ts";
-import { TwitterInteractionClient } from "./interactions.ts";
-import { buildConversationThread } from "./utils.ts";
 import { fileURLToPath } from "url";
-import { ModelProvider } from "../../core/types.ts";
+import { TwitterInteractionClient } from "../src/clients/twitter/interactions.ts";
+import { SqliteDatabaseAdapter } from "../src/adapters/sqlite.ts";
+import { defaultCharacter } from "../src/core/defaultCharacter.ts";
+import { buildConversationThread } from "../src/clients/twitter/utils.ts";
+import { AgentRuntime } from "../src/core/runtime.ts";
+import settings from "../src/core/settings.ts";
+import { ModelProvider } from "../src/core/types.ts";
 
 // const __dirname = path.dirname(new URL(".", import.meta.url).pathname);
 
diff --git a/core/tsconfig.json b/core/tsconfig.json
index 80348176dae..e18cf5e6fa2 100644
--- a/core/tsconfig.json
+++ b/core/tsconfig.json
@@ -1,4 +1,5 @@
 {
+    "extends": "../tsconfig.json",
     "compilerOptions": {
         "target": "ESNext",
         "module": "ESNext",
diff --git a/core/tsup.config.ts b/core/tsup.config.ts
new file mode 100644
index 00000000000..6525647521c
--- /dev/null
+++ b/core/tsup.config.ts
@@ -0,0 +1,17 @@
+import { defineConfig } from "tsup";
+
+export default defineConfig({
+    entry: ["src/index.ts"],
+    outDir: "dist",
+    sourcemap: true,
+    clean: true,
+    format: ["esm"], // Ensure you're targeting CommonJS
+    external: [
+        "dotenv", // Externalize dotenv to prevent bundling
+        "fs", // Externalize fs to use Node.js built-in module
+        "path", // Externalize other built-ins if necessary
+        "http",
+        "https",
+        // Add other modules you want to externalize
+    ],
+});
diff --git a/core/types/index.ts b/core/types/index.ts
deleted file mode 100644
index e2e35b58d0c..00000000000
--- a/core/types/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-declare global {
-    interface Buffer extends Uint8Array {}
-}
-
-export {};
diff --git a/docs/backup_docusaurus.config.js b/docs/backup_docusaurus.config.js
deleted file mode 100644
index 3616d66e23c..00000000000
--- a/docs/backup_docusaurus.config.js
+++ /dev/null
@@ -1,141 +0,0 @@
-// @ts-check
-import { themes as prismThemes } from "prism-react-renderer";
-
-/** @type {import('@docusaurus/types').Config} */
-const config = {
-  title: "eliza",
-  tagline: "The flexible, scalable AI agent for everyone",
-  favicon: "img/favicon.ico",
-
-  // GitHub Pages Configuration - Updated based on docs
-  url: "https://madjin.github.io", // Your GitHub Pages URL
-  baseUrl: "/eliza/", // Repository name with trailing slash
-  organizationName: "madjin", // GitHub username
-  projectName: "eliza", // Repository name
-  deploymentBranch: "gh-pages",
-  trailingSlash: true, // Recommended for GitHub Pages
-  onBrokenLinks: "throw",
-  onBrokenMarkdownLinks: "warn",
-
-  //url: "https://docs.ai16z.ai",
-  //baseUrl: "/",
-  //organizationName: "ai16z",
-  //projectName: "eliza",
-
-  i18n: {
-    defaultLocale: "en",
-    locales: ["en"],
-  },
-
-  plugins: [
-    // TypeDoc plugin for API documentation
-    [
-      "docusaurus-plugin-typedoc",
-      {
-        entryPoints: ["src/index.ts"],
-        tsconfig: "../core/tsconfig.json",
-        out: "./api", // Changed to output directly to api folder
-      },
-    ],
-    // Search functionality
-    require.resolve("docusaurus-lunr-search"),
-    // Separate API docs plugin instance
-    [
-      "@docusaurus/plugin-content-docs",
-      {
-        id: "api",
-        path: "api",
-        routeBasePath: "api",
-        sidebarPath: "./sidebars.api.js",
-      },
-    ],
-  ],
-
-  presets: [
-    [
-      "classic",
-      /** @type {import('@docusaurus/preset-classic').Options} */
-      ({
-        docs: {
-          sidebarPath: "./sidebars.js",
-          editUrl: "https://github.com/ai16z/eliza/tree/main/docs/",
-          routeBasePath: "docs",
-        },
-        theme: {
-          customCss: "./src/css/custom.css",
-        },
-      }),
-    ],
-  ],
-
-  themeConfig:
-    /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
-    ({
-      navbar: {
-        title: "eliza",
-        logo: {
-          alt: "Eliza Logo",
-          src: "img/favicon.ico",
-        },
-        items: [
-          {
-            type: "docSidebar",
-            sidebarId: "tutorialSidebar",
-            position: "left",
-            label: "Documentation",
-          },
-          {
-            type: "doc",
-            docsPluginId: "api",
-            position: "left",
-            label: "API",
-            docId: "index",
-          },
-          {
-            href: "https://github.com/ai16z/eliza",
-            label: "GitHub",
-            position: "right",
-          },
-        ],
-      },
-      footer: {
-        style: "dark",
-        links: [
-          {
-            title: "Docs",
-            items: [{ label: "General", href: "./" }],
-          },
-
-          {
-            title: "Community",
-            items: [
-              {
-                label: "Discord",
-                href: "https://discord.gg/NQHKW7US",
-              },
-              {
-                label: "Twitter",
-                href: "https://twitter.com/pmairca",
-              },
-            ],
-          },
-          {
-            title: "More",
-            items: [
-              {
-                label: "GitHub",
-                href: "https://github.com/ai16z/eliza",
-              },
-            ],
-          },
-        ],
-        copyright: `Copyright © ${new Date().getFullYear()} ai16z.ai`,
-      },
-      prism: {
-        theme: prismThemes.github,
-        darkTheme: prismThemes.dracula,
-      },
-    }),
-};
-
-export default config;
diff --git a/docs/docs/api/_media/README_CN.md b/docs/docs/api/_media/README_CN.md
new file mode 100644
index 00000000000..5a4bfe5c0d3
--- /dev/null
+++ b/docs/docs/api/_media/README_CN.md
@@ -0,0 +1,171 @@
+# Eliza
+
+<img src="./docs/static/img/eliza_banner.jpg" alt="Eliza Banner" width="100%" />
+
+## 功能
+
+- 🛠 支持discord/推特/telegram连接
+- 👥 支持多模态agent
+- 📚 简单的导入文档并与文档交互
+- 💾 可检索的内存和文档存储
+- 🚀 高可拓展性,你可以自定义客户端和行为来进行功能拓展
+- ☁️ 多模型支持,包括Llama、OpenAI、Grok、Anthropic等
+- 📦 简单好用
+
+你可以用Eliza做什么?
+
+- 🤖 聊天机器人
+- 🕵️ 自主Agents
+- 📈 业务流程自动化处理
+- 🎮 游戏NPC
+
+# 开始使用
+
+**前置要求(必须):**
+
+- [Node.js 22+](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
+- Nodejs安装
+- [pnpm](https://pnpm.io/installation)
+- 使用pnpm
+
+### 编辑.env文件
+
+- - 将 .env.example 复制为 .env 并填写适当的值
+- 编辑推特环境并输入你的推特账号和密码
+
+### 编辑角色文件
+
+- 查看文件 `src/core/defaultCharacter.ts` - 您可以修改它
+- 您也可以使用 `node --loader ts-node/esm src/index.ts --characters="path/to/your/character.json"` 加载角色并同时运行多个机器人。
+
+在完成账号和角色文件的配置后,输入以下命令行启动你的bot:
+
+```
+pnpm i
+pnpm start
+```
+
+# 自定义Eliza
+
+### 添加常规行为
+
+为避免在核心目录中的 Git 冲突,我们建议将自定义操作添加到 custom_actions 目录中,并在 elizaConfig.yaml 文件中配置这些操作。可以参考 elizaConfig.example.yaml 文件中的示例。
+
+## 配置不同的大模型
+
+### 配置Llama
+
+您可以通过设置 `XAI_MODEL` 环境变量为 `meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo` 或 `meta-llama/Meta-Llama-3.1-405B-Instruct` 来运行 Llama 70B 或 405B 模型
+
+### 配置OpenAI
+
+您可以通过设置 `XAI_MODEL` 环境变量为 `gpt-4o-mini` 或 `gpt-4o` 来运行 OpenAI 模型
+
+## 其他要求
+
+您可能需要安装 Sharp。如果在启动时看到错误,请尝试使用以下命令安装:
+
+```
+pnpm install --include=optional sharp
+```
+
+# 环境设置
+
+您需要在 .env 文件中添加环境变量以连接到各种平台:
+
+```
+# Required environment variables
+DISCORD_APPLICATION_ID=
+DISCORD_API_TOKEN= # Bot token
+OPENAI_API_KEY=sk-* # OpenAI API key, starting with sk-
+ELEVENLABS_XI_API_KEY= # API key from elevenlabs
+
+# ELEVENLABS SETTINGS
+ELEVENLABS_MODEL_ID=eleven_multilingual_v2
+ELEVENLABS_VOICE_ID=21m00Tcm4TlvDq8ikWAM
+ELEVENLABS_VOICE_STABILITY=0.5
+ELEVENLABS_VOICE_SIMILARITY_BOOST=0.9
+ELEVENLABS_VOICE_STYLE=0.66
+ELEVENLABS_VOICE_USE_SPEAKER_BOOST=false
+ELEVENLABS_OPTIMIZE_STREAMING_LATENCY=4
+ELEVENLABS_OUTPUT_FORMAT=pcm_16000
+
+TWITTER_DRY_RUN=false
+TWITTER_USERNAME= # Account username
+TWITTER_PASSWORD= # Account password
+TWITTER_EMAIL= # Account email
+TWITTER_COOKIES= # Account cookies
+
+X_SERVER_URL=
+XAI_API_KEY=
+XAI_MODEL=
+
+
+# For asking Claude stuff
+ANTHROPIC_API_KEY=
+
+WALLET_PRIVATE_KEY=EXAMPLE_WALLET_PRIVATE_KEY
+WALLET_PUBLIC_KEY=EXAMPLE_WALLET_PUBLIC_KEY
+
+BIRDEYE_API_KEY=
+
+SOL_ADDRESS=So11111111111111111111111111111111111111112
+SLIPPAGE=1
+RPC_URL=https://api.mainnet-beta.solana.com
+HELIUS_API_KEY=
+
+
+## Telegram
+TELEGRAM_BOT_TOKEN=
+
+TOGETHER_API_KEY=
+```
+
+# 本地设置
+
+### CUDA设置
+
+如果你有高性能的英伟达显卡,你可以以下命令行通过CUDA来做本地加速
+
+```
+pnpm install
+npx --no node-llama-cpp source download --gpu cuda
+```
+
+确保你安装了完整的CUDA工具包,包括cuDNN和cuBLAS
+
+### 本地运行
+
+添加 XAI_MODEL 并将其设置为上述 [使用 Llama 运行](#run-with-llama) 中的选项之一
+您可以将 X_SERVER_URL 和 XAI_API_KEY 留空,它会从 huggingface 下载模型并在本地查询
+
+# 客户端
+
+关于怎么设置discord bot,可以查看discord的官方文档
+
+# 开发
+
+## 测试
+
+几种测试方法的命令行:
+
+```bash
+pnpm test           # Run tests once
+pnpm test:watch    # Run tests in watch mode
+```
+
+对于数据库特定的测试:
+
+```bash
+pnpm test:sqlite   # Run tests with SQLite
+pnpm test:sqljs    # Run tests with SQL.js
+```
+
+测试使用 Jest 编写,位于 src/\*_/_.test.ts 文件中。测试环境配置如下:
+
+- 从 .env.test 加载环境变量
+- 使用 2 分钟的超时时间来运行长时间运行的测试
+- 支持 ESM 模块
+- 按顺序运行测试 (--runInBand)
+
+要创建新测试,请在要测试的代码旁边添加一个 .test.ts 文件。
diff --git a/docs/docs/api/classes/AgentRuntime.md b/docs/docs/api/classes/AgentRuntime.md
new file mode 100644
index 00000000000..5a7cb26cbff
--- /dev/null
+++ b/docs/docs/api/classes/AgentRuntime.md
@@ -0,0 +1,836 @@
+# Class: AgentRuntime
+
+Represents the runtime environment for an agent, handling message processing,
+action registration, and interaction with external services like OpenAI and Supabase.
+
+## Implements
+
+- [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Constructors
+
+### new AgentRuntime()
+
+> **new AgentRuntime**(`opts`): [`AgentRuntime`](AgentRuntime.md)
+
+Creates an instance of AgentRuntime.
+
+#### Parameters
+
+• **opts**
+
+The options for configuring the AgentRuntime.
+
+• **opts.actions?**: [`Action`](../interfaces/Action.md)[]
+
+Optional custom actions.
+
+• **opts.agentId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+Optional ID of the agent.
+
+• **opts.character?**: [`Character`](../type-aliases/Character.md)
+
+• **opts.conversationLength?**: `number`
+
+The number of messages to hold in the recent message cache.
+
+• **opts.databaseAdapter**: [`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md)
+
+The database adapter used for interacting with the database.
+
+• **opts.evaluators?**: [`Evaluator`](../interfaces/Evaluator.md)[]
+
+Optional custom evaluators.
+
+• **opts.fetch?**: `unknown`
+
+Custom fetch function to use for making requests.
+
+• **opts.imageGenModel?**: [`ImageGenModel`](../enumerations/ImageGenModel.md)
+
+• **opts.modelProvider**: [`ModelProvider`](../enumerations/ModelProvider.md)
+
+• **opts.providers?**: [`Provider`](../interfaces/Provider.md)[]
+
+Optional context providers.
+
+• **opts.serverUrl?**: `string`
+
+The URL of the worker.
+
+• **opts.speechModelPath?**: `string`
+
+• **opts.token**: `string`
+
+The JWT token, can be a JWT token if outside worker, or an OpenAI token if inside worker.
+
+#### Returns
+
+[`AgentRuntime`](AgentRuntime.md)
+
+#### Defined in
+
+[core/src/core/runtime.ts:188](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L188)
+
+## Properties
+
+### actions
+
+> **actions**: [`Action`](../interfaces/Action.md)[] = `[]`
+
+Custom actions that the agent can perform.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`actions`](../interfaces/IAgentRuntime.md#actions)
+
+#### Defined in
+
+[core/src/core/runtime.ts:91](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L91)
+
+---
+
+### agentId
+
+> **agentId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The ID of the agent
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`agentId`](../interfaces/IAgentRuntime.md#agentid)
+
+#### Defined in
+
+[core/src/core/runtime.ts:72](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L72)
+
+---
+
+### browserService
+
+> **browserService**: [`IBrowserService`](../interfaces/IBrowserService.md)
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`browserService`](../interfaces/IAgentRuntime.md#browserservice)
+
+#### Defined in
+
+[core/src/core/runtime.ts:125](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L125)
+
+---
+
+### character
+
+> **character**: [`Character`](../type-aliases/Character.md)
+
+The character to use for the agent
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`character`](../interfaces/IAgentRuntime.md#character)
+
+#### Defined in
+
+[core/src/core/runtime.ts:140](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L140)
+
+---
+
+### databaseAdapter
+
+> **databaseAdapter**: [`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md)
+
+The database adapter used for interacting with the database.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`databaseAdapter`](../interfaces/IAgentRuntime.md#databaseadapter)
+
+#### Defined in
+
+[core/src/core/runtime.ts:81](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L81)
+
+---
+
+### descriptionManager
+
+> **descriptionManager**: [`IMemoryManager`](../interfaces/IMemoryManager.md)
+
+Store and recall descriptions of users based on conversations.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`descriptionManager`](../interfaces/IAgentRuntime.md#descriptionmanager)
+
+#### Defined in
+
+[core/src/core/runtime.ts:150](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L150)
+
+---
+
+### documentsManager
+
+> **documentsManager**: [`IMemoryManager`](../interfaces/IMemoryManager.md)
+
+Hold large documents that can be referenced
+
+#### Defined in
+
+[core/src/core/runtime.ts:165](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L165)
+
+---
+
+### evaluators
+
+> **evaluators**: [`Evaluator`](../interfaces/Evaluator.md)[] = `[]`
+
+Evaluators used to assess and guide the agent's responses.
+
+#### Defined in
+
+[core/src/core/runtime.ts:96](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L96)
+
+---
+
+### factManager
+
+> **factManager**: [`IMemoryManager`](../interfaces/IMemoryManager.md)
+
+Manage the fact and recall of facts.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`factManager`](../interfaces/IAgentRuntime.md#factmanager)
+
+#### Defined in
+
+[core/src/core/runtime.ts:155](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L155)
+
+---
+
+### fetch()
+
+> **fetch**: (`input`, `init`?) => `Promise`\<`Response`\>(`input`, `init`?) => `Promise`\<`Response`\>
+
+Fetch function to use
+Some environments may not have access to the global fetch function and need a custom fetch override.
+
+[MDN Reference](https://developer.mozilla.org/docs/Web/API/fetch)
+
+#### Parameters
+
+• **input**: `RequestInfo` \| `URL`
+
+• **init?**: `RequestInit`
+
+#### Returns
+
+`Promise`\<`Response`\>
+
+#### Parameters
+
+• **input**: `string` \| `Request` \| `URL`
+
+• **init?**: `RequestInit`
+
+#### Returns
+
+`Promise`\<`Response`\>
+
+#### Defined in
+
+[core/src/core/runtime.ts:135](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L135)
+
+---
+
+### fragmentsManager
+
+> **fragmentsManager**: [`IMemoryManager`](../interfaces/IMemoryManager.md)
+
+Searchable document fragments
+
+#### Defined in
+
+[core/src/core/runtime.ts:170](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L170)
+
+---
+
+### imageDescriptionService
+
+> **imageDescriptionService**: [`IImageRecognitionService`](../interfaces/IImageRecognitionService.md)
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`imageDescriptionService`](../interfaces/IAgentRuntime.md#imagedescriptionservice)
+
+#### Defined in
+
+[core/src/core/runtime.ts:123](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L123)
+
+---
+
+### imageGenModel
+
+> **imageGenModel**: [`ImageGenModel`](../enumerations/ImageGenModel.md) = `ImageGenModel.TogetherAI`
+
+The model to use for image generation.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`imageGenModel`](../interfaces/IAgentRuntime.md#imagegenmodel)
+
+#### Defined in
+
+[core/src/core/runtime.ts:111](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L111)
+
+---
+
+### llamaService
+
+> **llamaService**: `LlamaService` = `null`
+
+Local Llama if no OpenAI key is present
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`llamaService`](../interfaces/IAgentRuntime.md#llamaservice)
+
+#### Defined in
+
+[core/src/core/runtime.ts:116](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L116)
+
+---
+
+### loreManager
+
+> **loreManager**: [`IMemoryManager`](../interfaces/IMemoryManager.md)
+
+Manage the creation and recall of static information (documents, historical game lore, etc)
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`loreManager`](../interfaces/IAgentRuntime.md#loremanager)
+
+#### Defined in
+
+[core/src/core/runtime.ts:160](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L160)
+
+---
+
+### messageManager
+
+> **messageManager**: [`IMemoryManager`](../interfaces/IMemoryManager.md)
+
+Store messages that are sent and received by the agent.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`messageManager`](../interfaces/IAgentRuntime.md#messagemanager)
+
+#### Defined in
+
+[core/src/core/runtime.ts:145](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L145)
+
+---
+
+### modelProvider
+
+> **modelProvider**: [`ModelProvider`](../enumerations/ModelProvider.md) = `ModelProvider.LLAMALOCAL`
+
+The model to use for generateText.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`modelProvider`](../interfaces/IAgentRuntime.md#modelprovider)
+
+#### Defined in
+
+[core/src/core/runtime.ts:106](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L106)
+
+---
+
+### pdfService
+
+> **pdfService**: [`IPdfService`](../interfaces/IPdfService.md)
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`pdfService`](../interfaces/IAgentRuntime.md#pdfservice)
+
+#### Defined in
+
+[core/src/core/runtime.ts:129](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L129)
+
+---
+
+### providers
+
+> **providers**: [`Provider`](../interfaces/Provider.md)[] = `[]`
+
+Context providers used to provide context for message generation.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`providers`](../interfaces/IAgentRuntime.md#providers)
+
+#### Defined in
+
+[core/src/core/runtime.ts:101](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L101)
+
+---
+
+### serverUrl
+
+> **serverUrl**: `string` = `"http://localhost:7998"`
+
+The base URL of the server where the agent's requests are processed.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`serverUrl`](../interfaces/IAgentRuntime.md#serverurl)
+
+#### Defined in
+
+[core/src/core/runtime.ts:76](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L76)
+
+---
+
+### speechService
+
+> **speechService**: [`ISpeechService`](../interfaces/ISpeechService.md)
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`speechService`](../interfaces/IAgentRuntime.md#speechservice)
+
+#### Defined in
+
+[core/src/core/runtime.ts:119](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L119)
+
+---
+
+### token
+
+> **token**: `string`
+
+Authentication token used for securing requests.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`token`](../interfaces/IAgentRuntime.md#token)
+
+#### Defined in
+
+[core/src/core/runtime.ts:86](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L86)
+
+---
+
+### transcriptionService
+
+> **transcriptionService**: [`ITranscriptionService`](../interfaces/ITranscriptionService.md)
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`transcriptionService`](../interfaces/IAgentRuntime.md#transcriptionservice)
+
+#### Defined in
+
+[core/src/core/runtime.ts:121](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L121)
+
+---
+
+### videoService
+
+> **videoService**: [`IVideoService`](../interfaces/IVideoService.md)
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`videoService`](../interfaces/IAgentRuntime.md#videoservice)
+
+#### Defined in
+
+[core/src/core/runtime.ts:127](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L127)
+
+## Methods
+
+### composeState()
+
+> **composeState**(`message`, `additionalKeys`): `Promise`\<[`State`](../interfaces/State.md)\>
+
+Compose the state of the agent into an object that can be passed or used for response generation.
+
+#### Parameters
+
+• **message**: [`Memory`](../interfaces/Memory.md)
+
+The message to compose the state from.
+
+• **additionalKeys** = `{}`
+
+#### Returns
+
+`Promise`\<[`State`](../interfaces/State.md)\>
+
+The state of the agent.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`composeState`](../interfaces/IAgentRuntime.md#composestate)
+
+#### Defined in
+
+[core/src/core/runtime.ts:673](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L673)
+
+---
+
+### ensureConnection()
+
+> **ensureConnection**(`userId`, `roomId`, `userName`?, `userScreenName`?, `source`?): `Promise`\<`void`\>
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **userName?**: `string`
+
+• **userScreenName?**: `string`
+
+• **source?**: `string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`ensureConnection`](../interfaces/IAgentRuntime.md#ensureconnection)
+
+#### Defined in
+
+[core/src/core/runtime.ts:624](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L624)
+
+---
+
+### ensureParticipantExists()
+
+> **ensureParticipantExists**(`userId`, `roomId`): `Promise`\<`void`\>
+
+Ensure the existence of a participant in the room. If the participant does not exist, they are added to the room.
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The user ID to ensure the existence of.
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Throws
+
+An error if the participant cannot be added.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`ensureParticipantExists`](../interfaces/IAgentRuntime.md#ensureparticipantexists)
+
+#### Defined in
+
+[core/src/core/runtime.ts:577](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L577)
+
+---
+
+### ensureParticipantInRoom()
+
+> **ensureParticipantInRoom**(`userId`, `roomId`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`ensureParticipantInRoom`](../interfaces/IAgentRuntime.md#ensureparticipantinroom)
+
+#### Defined in
+
+[core/src/core/runtime.ts:613](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L613)
+
+---
+
+### ensureRoomExists()
+
+> **ensureRoomExists**(`roomId`): `Promise`\<`void`\>
+
+Ensure the existence of a room between the agent and a user. If no room exists, a new room is created and the user
+and agent are added as participants. The room ID is returned.
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+The room ID of the room between the agent and the user.
+
+#### Throws
+
+An error if the room cannot be created.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`ensureRoomExists`](../interfaces/IAgentRuntime.md#ensureroomexists)
+
+#### Defined in
+
+[core/src/core/runtime.ts:660](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L660)
+
+---
+
+### ensureUserExists()
+
+> **ensureUserExists**(`userId`, `userName`, `name`, `email`?, `source`?): `Promise`\<`void`\>
+
+Ensure the existence of a user in the database. If the user does not exist, they are added to the database.
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The user ID to ensure the existence of.
+
+• **userName**: `string`
+
+The user name to ensure the existence of.
+
+• **name**: `string`
+
+• **email?**: `string`
+
+• **source?**: `string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`ensureUserExists`](../interfaces/IAgentRuntime.md#ensureuserexists)
+
+#### Defined in
+
+[core/src/core/runtime.ts:593](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L593)
+
+---
+
+### evaluate()
+
+> **evaluate**(`message`, `state`?): `Promise`\<`string`[]\>
+
+Evaluate the message and state using the registered evaluators.
+
+#### Parameters
+
+• **message**: [`Memory`](../interfaces/Memory.md)
+
+The message to evaluate.
+
+• **state?**: [`State`](../interfaces/State.md)
+
+The state of the agent.
+
+#### Returns
+
+`Promise`\<`string`[]\>
+
+The results of the evaluation.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`evaluate`](../interfaces/IAgentRuntime.md#evaluate)
+
+#### Defined in
+
+[core/src/core/runtime.ts:511](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L511)
+
+---
+
+### getConversationLength()
+
+> **getConversationLength**(): `number`
+
+Get the number of messages that are kept in the conversation buffer.
+
+#### Returns
+
+`number`
+
+The number of recent messages to be kept in memory.
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`getConversationLength`](../interfaces/IAgentRuntime.md#getconversationlength)
+
+#### Defined in
+
+[core/src/core/runtime.ts:410](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L410)
+
+---
+
+### getSetting()
+
+> **getSetting**(`key`): `any`
+
+#### Parameters
+
+• **key**: `string`
+
+#### Returns
+
+`any`
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`getSetting`](../interfaces/IAgentRuntime.md#getsetting)
+
+#### Defined in
+
+[core/src/core/runtime.ts:388](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L388)
+
+---
+
+### processActions()
+
+> **processActions**(`message`, `responses`, `state`?, `callback`?): `Promise`\<`void`\>
+
+Process the actions of a message.
+
+#### Parameters
+
+• **message**: [`Memory`](../interfaces/Memory.md)
+
+The message to process.
+
+• **responses**: [`Memory`](../interfaces/Memory.md)[]
+
+• **state?**: [`State`](../interfaces/State.md)
+
+• **callback?**: [`HandlerCallback`](../type-aliases/HandlerCallback.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`processActions`](../interfaces/IAgentRuntime.md#processactions)
+
+#### Defined in
+
+[core/src/core/runtime.ts:444](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L444)
+
+---
+
+### registerAction()
+
+> **registerAction**(`action`): `void`
+
+Register an action for the agent to perform.
+
+#### Parameters
+
+• **action**: [`Action`](../interfaces/Action.md)
+
+The action to register.
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`registerAction`](../interfaces/IAgentRuntime.md#registeraction)
+
+#### Defined in
+
+[core/src/core/runtime.ts:418](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L418)
+
+---
+
+### registerContextProvider()
+
+> **registerContextProvider**(`provider`): `void`
+
+Register a context provider to provide context for message generation.
+
+#### Parameters
+
+• **provider**: [`Provider`](../interfaces/Provider.md)
+
+The context provider to register.
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[core/src/core/runtime.ts:435](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L435)
+
+---
+
+### registerEvaluator()
+
+> **registerEvaluator**(`evaluator`): `void`
+
+Register an evaluator to assess and guide the agent's responses.
+
+#### Parameters
+
+• **evaluator**: [`Evaluator`](../interfaces/Evaluator.md)
+
+The evaluator to register.
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[core/src/core/runtime.ts:427](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L427)
+
+---
+
+### updateRecentMessageState()
+
+> **updateRecentMessageState**(`state`): `Promise`\<[`State`](../interfaces/State.md)\>
+
+#### Parameters
+
+• **state**: [`State`](../interfaces/State.md)
+
+#### Returns
+
+`Promise`\<[`State`](../interfaces/State.md)\>
+
+#### Implementation of
+
+[`IAgentRuntime`](../interfaces/IAgentRuntime.md).[`updateRecentMessageState`](../interfaces/IAgentRuntime.md#updaterecentmessagestate)
+
+#### Defined in
+
+[core/src/core/runtime.ts:1146](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/runtime.ts#L1146)
diff --git a/docs/docs/api/classes/DatabaseAdapter.md b/docs/docs/api/classes/DatabaseAdapter.md
new file mode 100644
index 00000000000..a25bd0a1328
--- /dev/null
+++ b/docs/docs/api/classes/DatabaseAdapter.md
@@ -0,0 +1,1119 @@
+# Class: `abstract` DatabaseAdapter
+
+An abstract class representing a database adapter for managing various entities
+like accounts, memories, actors, goals, and rooms.
+
+## Extended by
+
+- [`PostgresDatabaseAdapter`](PostgresDatabaseAdapter.md)
+- [`SqliteDatabaseAdapter`](SqliteDatabaseAdapter.md)
+
+## Implements
+
+- [`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md)
+
+## Constructors
+
+### new DatabaseAdapter()
+
+> **new DatabaseAdapter**(): [`DatabaseAdapter`](DatabaseAdapter.md)
+
+#### Returns
+
+[`DatabaseAdapter`](DatabaseAdapter.md)
+
+## Properties
+
+### db
+
+> **db**: `any`
+
+The database instance.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`db`](../interfaces/IDatabaseAdapter.md#db)
+
+#### Defined in
+
+[core/src/core/database.ts:21](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L21)
+
+## Methods
+
+### addParticipant()
+
+> `abstract` **addParticipant**(`userId`, `roomId`): `Promise`\<`boolean`\>
+
+Adds a user as a participant to a specific room.
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the user to add as a participant.
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the room to which the user will be added.
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+A Promise that resolves to a boolean indicating success or failure.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`addParticipant`](../interfaces/IDatabaseAdapter.md#addparticipant)
+
+#### Defined in
+
+[core/src/core/database.ts:266](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L266)
+
+---
+
+### countMemories()
+
+> `abstract` **countMemories**(`roomId`, `unique`?, `tableName`?): `Promise`\<`number`\>
+
+Counts the number of memories in a specific room.
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the room for which to count memories.
+
+• **unique?**: `boolean`
+
+Specifies whether to count only unique memories.
+
+• **tableName?**: `string`
+
+Optional table name to count memories from.
+
+#### Returns
+
+`Promise`\<`number`\>
+
+A Promise that resolves to the number of memories.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`countMemories`](../interfaces/IDatabaseAdapter.md#countmemories)
+
+#### Defined in
+
+[core/src/core/database.ts:179](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L179)
+
+---
+
+### createAccount()
+
+> `abstract` **createAccount**(`account`): `Promise`\<`boolean`\>
+
+Creates a new account in the database.
+
+#### Parameters
+
+• **account**: [`Account`](../interfaces/Account.md)
+
+The account object to create.
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+A Promise that resolves when the account creation is complete.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`createAccount`](../interfaces/IDatabaseAdapter.md#createaccount)
+
+#### Defined in
+
+[core/src/core/database.ts:34](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L34)
+
+---
+
+### createGoal()
+
+> `abstract` **createGoal**(`goal`): `Promise`\<`void`\>
+
+Creates a new goal in the database.
+
+#### Parameters
+
+• **goal**: [`Goal`](../interfaces/Goal.md)
+
+The goal object to create.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when the goal has been created.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`createGoal`](../interfaces/IDatabaseAdapter.md#creategoal)
+
+#### Defined in
+
+[core/src/core/database.ts:209](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L209)
+
+---
+
+### createMemory()
+
+> `abstract` **createMemory**(`memory`, `tableName`, `unique`?): `Promise`\<`void`\>
+
+Creates a new memory in the database.
+
+#### Parameters
+
+• **memory**: [`Memory`](../interfaces/Memory.md)
+
+The memory object to create.
+
+• **tableName**: `string`
+
+The table where the memory should be stored.
+
+• **unique?**: `boolean`
+
+Indicates if the memory should be unique.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when the memory has been created.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`createMemory`](../interfaces/IDatabaseAdapter.md#creatememory)
+
+#### Defined in
+
+[core/src/core/database.ts:150](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L150)
+
+---
+
+### createRelationship()
+
+> `abstract` **createRelationship**(`params`): `Promise`\<`boolean`\>
+
+Creates a new relationship between two users.
+
+#### Parameters
+
+• **params**
+
+An object containing the UUIDs of the two users (userA and userB).
+
+• **params.userA**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.userB**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+A Promise that resolves to a boolean indicating success or failure of the creation.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`createRelationship`](../interfaces/IDatabaseAdapter.md#createrelationship)
+
+#### Defined in
+
+[core/src/core/database.ts:312](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L312)
+
+---
+
+### createRoom()
+
+> `abstract` **createRoom**(`roomId`?): `Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`\>
+
+Creates a new room with an optional specified ID.
+
+#### Parameters
+
+• **roomId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+Optional UUID to assign to the new room.
+
+#### Returns
+
+`Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`\>
+
+A Promise that resolves to the UUID of the created room.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`createRoom`](../interfaces/IDatabaseAdapter.md#createroom)
+
+#### Defined in
+
+[core/src/core/database.ts:237](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L237)
+
+---
+
+### getAccountById()
+
+> `abstract` **getAccountById**(`userId`): `Promise`\<[`Account`](../interfaces/Account.md)\>
+
+Retrieves an account by its ID.
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the user account to retrieve.
+
+#### Returns
+
+`Promise`\<[`Account`](../interfaces/Account.md)\>
+
+A Promise that resolves to the Account object or null if not found.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getAccountById`](../interfaces/IDatabaseAdapter.md#getaccountbyid)
+
+#### Defined in
+
+[core/src/core/database.ts:27](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L27)
+
+---
+
+### getActorDetails()
+
+> `abstract` **getActorDetails**(`params`): `Promise`\<[`Actor`](../interfaces/Actor.md)[]\>
+
+Retrieves details of actors in a given room.
+
+#### Parameters
+
+• **params**
+
+An object containing the roomId to search for actors.
+
+• **params.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Actor`](../interfaces/Actor.md)[]\>
+
+A Promise that resolves to an array of Actor objects.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getActorDetails`](../interfaces/IDatabaseAdapter.md#getactordetails)
+
+#### Defined in
+
+[core/src/core/database.ts:99](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L99)
+
+---
+
+### getCachedEmbeddings()
+
+> `abstract` **getCachedEmbeddings**(`params`): `Promise`\<`object`[]\>
+
+Retrieves cached embeddings based on the specified query parameters.
+
+#### Parameters
+
+• **params**
+
+An object containing parameters for the embedding retrieval.
+
+• **params.query_field_name**: `string`
+
+• **params.query_field_sub_name**: `string`
+
+• **params.query_input**: `string`
+
+• **params.query_match_count**: `number`
+
+• **params.query_table_name**: `string`
+
+• **params.query_threshold**: `number`
+
+#### Returns
+
+`Promise`\<`object`[]\>
+
+A Promise that resolves to an array of objects containing embeddings and levenshtein scores.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getCachedEmbeddings`](../interfaces/IDatabaseAdapter.md#getcachedembeddings)
+
+#### Defined in
+
+[core/src/core/database.ts:61](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L61)
+
+---
+
+### getGoals()
+
+> `abstract` **getGoals**(`params`): `Promise`\<[`Goal`](../interfaces/Goal.md)[]\>
+
+Retrieves goals based on specified parameters.
+
+#### Parameters
+
+• **params**
+
+An object containing parameters for goal retrieval.
+
+• **params.count?**: `number`
+
+• **params.onlyInProgress?**: `boolean`
+
+• **params.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.userId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Goal`](../interfaces/Goal.md)[]\>
+
+A Promise that resolves to an array of Goal objects.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getGoals`](../interfaces/IDatabaseAdapter.md#getgoals)
+
+#### Defined in
+
+[core/src/core/database.ts:190](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L190)
+
+---
+
+### getMemories()
+
+> `abstract` **getMemories**(`params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+Retrieves memories based on the specified parameters.
+
+#### Parameters
+
+• **params**
+
+An object containing parameters for the memory retrieval.
+
+• **params.count?**: `number`
+
+• **params.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.tableName**: `string`
+
+• **params.unique?**: `boolean`
+
+#### Returns
+
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+A Promise that resolves to an array of Memory objects.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getMemories`](../interfaces/IDatabaseAdapter.md#getmemories)
+
+#### Defined in
+
+[core/src/core/database.ts:41](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L41)
+
+---
+
+### getMemoriesByRoomIds()
+
+> `abstract` **getMemoriesByRoomIds**(`params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+#### Parameters
+
+• **params**
+
+• **params.agentId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.roomIds**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]
+
+• **params.tableName**: `string`
+
+#### Returns
+
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getMemoriesByRoomIds`](../interfaces/IDatabaseAdapter.md#getmemoriesbyroomids)
+
+#### Defined in
+
+[core/src/core/database.ts:48](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L48)
+
+---
+
+### getMemoryById()
+
+> `abstract` **getMemoryById**(`id`): `Promise`\<[`Memory`](../interfaces/Memory.md)\>
+
+#### Parameters
+
+• **id**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Memory`](../interfaces/Memory.md)\>
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getMemoryById`](../interfaces/IDatabaseAdapter.md#getmemorybyid)
+
+#### Defined in
+
+[core/src/core/database.ts:54](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L54)
+
+---
+
+### getParticipantsForAccount()
+
+#### getParticipantsForAccount(userId)
+
+> `abstract` **getParticipantsForAccount**(`userId`): `Promise`\<[`Participant`](../interfaces/Participant.md)[]\>
+
+Retrieves participants associated with a specific account.
+
+##### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the account.
+
+##### Returns
+
+`Promise`\<[`Participant`](../interfaces/Participant.md)[]\>
+
+A Promise that resolves to an array of Participant objects.
+
+##### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getParticipantsForAccount`](../interfaces/IDatabaseAdapter.md#getparticipantsforaccount)
+
+##### Defined in
+
+[core/src/core/database.ts:281](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L281)
+
+#### getParticipantsForAccount(userId)
+
+> `abstract` **getParticipantsForAccount**(`userId`): `Promise`\<[`Participant`](../interfaces/Participant.md)[]\>
+
+Retrieves participants associated with a specific account.
+
+##### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the account.
+
+##### Returns
+
+`Promise`\<[`Participant`](../interfaces/Participant.md)[]\>
+
+A Promise that resolves to an array of Participant objects.
+
+##### Implementation of
+
+`IDatabaseAdapter.getParticipantsForAccount`
+
+##### Defined in
+
+[core/src/core/database.ts:288](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L288)
+
+---
+
+### getParticipantsForRoom()
+
+> `abstract` **getParticipantsForRoom**(`roomId`): `Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+Retrieves participants for a specific room.
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the room for which to retrieve participants.
+
+#### Returns
+
+`Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+A Promise that resolves to an array of UUIDs representing the participants.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getParticipantsForRoom`](../interfaces/IDatabaseAdapter.md#getparticipantsforroom)
+
+#### Defined in
+
+[core/src/core/database.ts:295](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L295)
+
+---
+
+### getParticipantUserState()
+
+> `abstract` **getParticipantUserState**(`roomId`, `userId`): `Promise`\<`"FOLLOWED"` \| `"MUTED"`\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`"FOLLOWED"` \| `"MUTED"`\>
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getParticipantUserState`](../interfaces/IDatabaseAdapter.md#getparticipantuserstate)
+
+#### Defined in
+
+[core/src/core/database.ts:297](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L297)
+
+---
+
+### getRelationship()
+
+> `abstract` **getRelationship**(`params`): `Promise`\<[`Relationship`](../interfaces/Relationship.md)\>
+
+Retrieves a relationship between two users if it exists.
+
+#### Parameters
+
+• **params**
+
+An object containing the UUIDs of the two users (userA and userB).
+
+• **params.userA**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.userB**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Relationship`](../interfaces/Relationship.md)\>
+
+A Promise that resolves to the Relationship object or null if not found.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getRelationship`](../interfaces/IDatabaseAdapter.md#getrelationship)
+
+#### Defined in
+
+[core/src/core/database.ts:322](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L322)
+
+---
+
+### getRelationships()
+
+> `abstract` **getRelationships**(`params`): `Promise`\<[`Relationship`](../interfaces/Relationship.md)[]\>
+
+Retrieves all relationships for a specific user.
+
+#### Parameters
+
+• **params**
+
+An object containing the UUID of the user.
+
+• **params.userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Relationship`](../interfaces/Relationship.md)[]\>
+
+A Promise that resolves to an array of Relationship objects.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getRelationships`](../interfaces/IDatabaseAdapter.md#getrelationships)
+
+#### Defined in
+
+[core/src/core/database.ts:332](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L332)
+
+---
+
+### getRoom()
+
+> `abstract` **getRoom**(`roomId`): `Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`\>
+
+Retrieves the room ID for a given room, if it exists.
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the room to retrieve.
+
+#### Returns
+
+`Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`\>
+
+A Promise that resolves to the room ID or null if not found.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getRoom`](../interfaces/IDatabaseAdapter.md#getroom)
+
+#### Defined in
+
+[core/src/core/database.ts:230](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L230)
+
+---
+
+### getRoomsForParticipant()
+
+> `abstract` **getRoomsForParticipant**(`userId`): `Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+Retrieves room IDs for which a specific user is a participant.
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the user.
+
+#### Returns
+
+`Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+A Promise that resolves to an array of room IDs.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getRoomsForParticipant`](../interfaces/IDatabaseAdapter.md#getroomsforparticipant)
+
+#### Defined in
+
+[core/src/core/database.ts:251](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L251)
+
+---
+
+### getRoomsForParticipants()
+
+> `abstract` **getRoomsForParticipants**(`userIds`): `Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+Retrieves room IDs for which specific users are participants.
+
+#### Parameters
+
+• **userIds**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]
+
+An array of UUIDs of the users.
+
+#### Returns
+
+`Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+A Promise that resolves to an array of room IDs.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`getRoomsForParticipants`](../interfaces/IDatabaseAdapter.md#getroomsforparticipants)
+
+#### Defined in
+
+[core/src/core/database.ts:258](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L258)
+
+---
+
+### log()
+
+> `abstract` **log**(`params`): `Promise`\<`void`\>
+
+Logs an event or action with the specified details.
+
+#### Parameters
+
+• **params**
+
+An object containing parameters for the log entry.
+
+• **params.body**
+
+• **params.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.type**: `string`
+
+• **params.userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when the log entry has been saved.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`log`](../interfaces/IDatabaseAdapter.md#log)
+
+#### Defined in
+
+[core/src/core/database.ts:87](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L87)
+
+---
+
+### removeAllGoals()
+
+> `abstract` **removeAllGoals**(`roomId`): `Promise`\<`void`\>
+
+Removes all goals associated with a specific room.
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the room whose goals should be removed.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when all goals have been removed.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`removeAllGoals`](../interfaces/IDatabaseAdapter.md#removeallgoals)
+
+#### Defined in
+
+[core/src/core/database.ts:223](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L223)
+
+---
+
+### removeAllMemories()
+
+> `abstract` **removeAllMemories**(`roomId`, `tableName`): `Promise`\<`void`\>
+
+Removes all memories associated with a specific room.
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the room whose memories should be removed.
+
+• **tableName**: `string`
+
+The table from which the memories should be removed.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when all memories have been removed.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`removeAllMemories`](../interfaces/IDatabaseAdapter.md#removeallmemories)
+
+#### Defined in
+
+[core/src/core/database.ts:170](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L170)
+
+---
+
+### removeGoal()
+
+> `abstract` **removeGoal**(`goalId`): `Promise`\<`void`\>
+
+Removes a specific goal from the database.
+
+#### Parameters
+
+• **goalId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the goal to remove.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when the goal has been removed.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`removeGoal`](../interfaces/IDatabaseAdapter.md#removegoal)
+
+#### Defined in
+
+[core/src/core/database.ts:216](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L216)
+
+---
+
+### removeMemory()
+
+> `abstract` **removeMemory**(`memoryId`, `tableName`): `Promise`\<`void`\>
+
+Removes a specific memory from the database.
+
+#### Parameters
+
+• **memoryId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the memory to remove.
+
+• **tableName**: `string`
+
+The table from which the memory should be removed.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when the memory has been removed.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`removeMemory`](../interfaces/IDatabaseAdapter.md#removememory)
+
+#### Defined in
+
+[core/src/core/database.ts:162](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L162)
+
+---
+
+### removeParticipant()
+
+> `abstract` **removeParticipant**(`userId`, `roomId`): `Promise`\<`boolean`\>
+
+Removes a user as a participant from a specific room.
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the user to remove as a participant.
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the room from which the user will be removed.
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+A Promise that resolves to a boolean indicating success or failure.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`removeParticipant`](../interfaces/IDatabaseAdapter.md#removeparticipant)
+
+#### Defined in
+
+[core/src/core/database.ts:274](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L274)
+
+---
+
+### removeRoom()
+
+> `abstract` **removeRoom**(`roomId`): `Promise`\<`void`\>
+
+Removes a specific room from the database.
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The UUID of the room to remove.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when the room has been removed.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`removeRoom`](../interfaces/IDatabaseAdapter.md#removeroom)
+
+#### Defined in
+
+[core/src/core/database.ts:244](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L244)
+
+---
+
+### searchMemories()
+
+> `abstract` **searchMemories**(`params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+Searches for memories based on embeddings and other specified parameters.
+
+#### Parameters
+
+• **params**
+
+An object containing parameters for the memory search.
+
+• **params.embedding**: `number`[]
+
+• **params.match_count**: `number`
+
+• **params.match_threshold**: `number`
+
+• **params.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.tableName**: `string`
+
+• **params.unique**: `boolean`
+
+#### Returns
+
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+A Promise that resolves to an array of Memory objects.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`searchMemories`](../interfaces/IDatabaseAdapter.md#searchmemories)
+
+#### Defined in
+
+[core/src/core/database.ts:106](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L106)
+
+---
+
+### searchMemoriesByEmbedding()
+
+> `abstract` **searchMemoriesByEmbedding**(`embedding`, `params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+Searches for memories by embedding and other specified parameters.
+
+#### Parameters
+
+• **embedding**: `number`[]
+
+The embedding vector to search with.
+
+• **params**
+
+Additional parameters for the search.
+
+• **params.agentId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.count?**: `number`
+
+• **params.match_threshold?**: `number`
+
+• **params.roomId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.tableName**: `string`
+
+• **params.unique?**: `boolean`
+
+#### Returns
+
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+A Promise that resolves to an array of Memory objects.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`searchMemoriesByEmbedding`](../interfaces/IDatabaseAdapter.md#searchmemoriesbyembedding)
+
+#### Defined in
+
+[core/src/core/database.ts:131](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L131)
+
+---
+
+### setParticipantUserState()
+
+> `abstract` **setParticipantUserState**(`roomId`, `userId`, `state`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **state**: `"FOLLOWED"` \| `"MUTED"`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`setParticipantUserState`](../interfaces/IDatabaseAdapter.md#setparticipantuserstate)
+
+#### Defined in
+
+[core/src/core/database.ts:301](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L301)
+
+---
+
+### updateGoal()
+
+> `abstract` **updateGoal**(`goal`): `Promise`\<`void`\>
+
+Updates a specific goal in the database.
+
+#### Parameters
+
+• **goal**: [`Goal`](../interfaces/Goal.md)
+
+The goal object with updated properties.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when the goal has been updated.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`updateGoal`](../interfaces/IDatabaseAdapter.md#updategoal)
+
+#### Defined in
+
+[core/src/core/database.ts:202](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L202)
+
+---
+
+### updateGoalStatus()
+
+> `abstract` **updateGoalStatus**(`params`): `Promise`\<`void`\>
+
+Updates the status of a specific goal.
+
+#### Parameters
+
+• **params**
+
+An object containing the goalId and the new status.
+
+• **params.goalId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.status**: [`GoalStatus`](../enumerations/GoalStatus.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when the goal status has been updated.
+
+#### Implementation of
+
+[`IDatabaseAdapter`](../interfaces/IDatabaseAdapter.md).[`updateGoalStatus`](../interfaces/IDatabaseAdapter.md#updategoalstatus)
+
+#### Defined in
+
+[core/src/core/database.ts:120](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L120)
diff --git a/docs/docs/api/classes/DirectClient.md b/docs/docs/api/classes/DirectClient.md
index a49f829290e..5b0662da0c9 100644
--- a/docs/docs/api/classes/DirectClient.md
+++ b/docs/docs/api/classes/DirectClient.md
@@ -12,7 +12,7 @@
 
 #### Defined in
 
-[core/src/clients/direct/index.ts:57](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/direct/index.ts#L57)
+[core/src/clients/direct/index.ts:57](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/direct/index.ts#L57)
 
 ## Methods
 
@@ -22,7 +22,7 @@
 
 #### Parameters
 
-• **runtime**: `AgentRuntime`
+• **runtime**: [`AgentRuntime`](AgentRuntime.md)
 
 #### Returns
 
@@ -30,7 +30,7 @@
 
 #### Defined in
 
-[core/src/clients/direct/index.ts:259](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/direct/index.ts#L259)
+[core/src/clients/direct/index.ts:263](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/direct/index.ts#L263)
 
 ---
 
@@ -48,7 +48,7 @@
 
 #### Defined in
 
-[core/src/clients/direct/index.ts:267](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/direct/index.ts#L267)
+[core/src/clients/direct/index.ts:271](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/direct/index.ts#L271)
 
 ---
 
@@ -58,7 +58,7 @@
 
 #### Parameters
 
-• **runtime**: `AgentRuntime`
+• **runtime**: [`AgentRuntime`](AgentRuntime.md)
 
 #### Returns
 
@@ -66,4 +66,4 @@
 
 #### Defined in
 
-[core/src/clients/direct/index.ts:263](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/direct/index.ts#L263)
+[core/src/clients/direct/index.ts:267](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/direct/index.ts#L267)
diff --git a/docs/docs/api/classes/DiscordClient.md b/docs/docs/api/classes/DiscordClient.md
index 23da8bb578d..66dd101ca5c 100644
--- a/docs/docs/api/classes/DiscordClient.md
+++ b/docs/docs/api/classes/DiscordClient.md
@@ -12,7 +12,7 @@
 
 #### Parameters
 
-• **runtime**: `IAgentRuntime`
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
 
 #### Returns
 
@@ -24,7 +24,7 @@
 
 #### Defined in
 
-[core/src/clients/discord/index.ts:34](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/discord/index.ts#L34)
+[core/src/clients/discord/index.ts:34](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/discord/index.ts#L34)
 
 ## Properties
 
@@ -34,17 +34,17 @@
 
 #### Defined in
 
-[core/src/clients/discord/index.ts:27](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/discord/index.ts#L27)
+[core/src/clients/discord/index.ts:27](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/discord/index.ts#L27)
 
 ---
 
 ### character
 
-> **character**: `Character`
+> **character**: [`Character`](../type-aliases/Character.md)
 
 #### Defined in
 
-[core/src/clients/discord/index.ts:30](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/discord/index.ts#L30)
+[core/src/clients/discord/index.ts:30](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/discord/index.ts#L30)
 
 ---
 
@@ -383,7 +383,7 @@ node_modules/@types/node/events.d.ts:774
 
 #### Defined in
 
-[core/src/clients/discord/index.ts:121](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/discord/index.ts#L121)
+[core/src/clients/discord/index.ts:121](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/discord/index.ts#L121)
 
 ---
 
@@ -403,7 +403,7 @@ node_modules/@types/node/events.d.ts:774
 
 #### Defined in
 
-[core/src/clients/discord/index.ts:191](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/discord/index.ts#L191)
+[core/src/clients/discord/index.ts:195](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/discord/index.ts#L195)
 
 ---
 
diff --git a/docs/docs/api/classes/MemoryManager.md b/docs/docs/api/classes/MemoryManager.md
new file mode 100644
index 00000000000..4f605abac5c
--- /dev/null
+++ b/docs/docs/api/classes/MemoryManager.md
@@ -0,0 +1,383 @@
+# Class: MemoryManager
+
+Manage memories in the database.
+
+## Implements
+
+- [`IMemoryManager`](../interfaces/IMemoryManager.md)
+
+## Constructors
+
+### new MemoryManager()
+
+> **new MemoryManager**(`opts`): [`MemoryManager`](MemoryManager.md)
+
+Constructs a new MemoryManager instance.
+
+#### Parameters
+
+• **opts**
+
+Options for the manager.
+
+• **opts.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+The AgentRuntime instance associated with this manager.
+
+• **opts.tableName**: `string`
+
+The name of the table this manager will operate on.
+
+#### Returns
+
+[`MemoryManager`](MemoryManager.md)
+
+#### Defined in
+
+[core/src/core/memory.ts:35](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L35)
+
+## Properties
+
+### runtime
+
+> **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+The AgentRuntime instance associated with this manager.
+
+#### Implementation of
+
+[`IMemoryManager`](../interfaces/IMemoryManager.md).[`runtime`](../interfaces/IMemoryManager.md#runtime)
+
+#### Defined in
+
+[core/src/core/memory.ts:22](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L22)
+
+---
+
+### tableName
+
+> **tableName**: `string`
+
+The name of the database table this manager operates on.
+
+#### Implementation of
+
+[`IMemoryManager`](../interfaces/IMemoryManager.md).[`tableName`](../interfaces/IMemoryManager.md#tablename)
+
+#### Defined in
+
+[core/src/core/memory.ts:27](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L27)
+
+## Methods
+
+### addEmbeddingToMemory()
+
+> **addEmbeddingToMemory**(`memory`): `Promise`\<[`Memory`](../interfaces/Memory.md)\>
+
+Adds an embedding vector to a memory object. If the memory already has an embedding, it is returned as is.
+
+#### Parameters
+
+• **memory**: [`Memory`](../interfaces/Memory.md)
+
+The memory object to add an embedding to.
+
+#### Returns
+
+`Promise`\<[`Memory`](../interfaces/Memory.md)\>
+
+A Promise resolving to the memory object, potentially updated with an embedding vector.
+
+#### Implementation of
+
+[`IMemoryManager`](../interfaces/IMemoryManager.md).[`addEmbeddingToMemory`](../interfaces/IMemoryManager.md#addembeddingtomemory)
+
+#### Defined in
+
+[core/src/core/memory.ts:45](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L45)
+
+---
+
+### countMemories()
+
+> **countMemories**(`roomId`, `unique`): `Promise`\<`number`\>
+
+Counts the number of memories associated with a set of user IDs, with an option for uniqueness.
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The room ID to count memories for.
+
+• **unique**: `boolean` = `true`
+
+Whether to count unique memories only.
+
+#### Returns
+
+`Promise`\<`number`\>
+
+A Promise resolving to the count of memories.
+
+#### Implementation of
+
+[`IMemoryManager`](../interfaces/IMemoryManager.md).[`countMemories`](../interfaces/IMemoryManager.md#countmemories)
+
+#### Defined in
+
+[core/src/core/memory.ts:218](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L218)
+
+---
+
+### createMemory()
+
+> **createMemory**(`memory`, `unique`): `Promise`\<`void`\>
+
+Creates a new memory in the database, with an option to check for similarity before insertion.
+
+#### Parameters
+
+• **memory**: [`Memory`](../interfaces/Memory.md)
+
+The memory object to create.
+
+• **unique**: `boolean` = `false`
+
+Whether to check for similarity before insertion.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when the operation completes.
+
+#### Implementation of
+
+[`IMemoryManager`](../interfaces/IMemoryManager.md).[`createMemory`](../interfaces/IMemoryManager.md#creatememory)
+
+#### Defined in
+
+[core/src/core/memory.ts:158](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L158)
+
+---
+
+### getCachedEmbeddings()
+
+> **getCachedEmbeddings**(`content`): `Promise`\<`object`[]\>
+
+#### Parameters
+
+• **content**: `string`
+
+#### Returns
+
+`Promise`\<`object`[]\>
+
+#### Implementation of
+
+[`IMemoryManager`](../interfaces/IMemoryManager.md).[`getCachedEmbeddings`](../interfaces/IMemoryManager.md#getcachedembeddings)
+
+#### Defined in
+
+[core/src/core/memory.ts:93](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L93)
+
+---
+
+### getMemories()
+
+> **getMemories**(`opts`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+Retrieves a list of memories by user IDs, with optional deduplication.
+
+#### Parameters
+
+• **opts**
+
+Options including user IDs, count, and uniqueness.
+
+• **opts.agentId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **opts.count?**: `number` = `10`
+
+The number of memories to retrieve.
+
+• **opts.end?**: `number`
+
+• **opts.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The room ID to retrieve memories for.
+
+• **opts.start?**: `number`
+
+• **opts.unique?**: `boolean` = `true`
+
+Whether to retrieve unique memories only.
+
+#### Returns
+
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+A Promise resolving to an array of Memory objects.
+
+#### Implementation of
+
+[`IMemoryManager`](../interfaces/IMemoryManager.md).[`getMemories`](../interfaces/IMemoryManager.md#getmemories)
+
+#### Defined in
+
+[core/src/core/memory.ts:66](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L66)
+
+---
+
+### getMemoriesByRoomIds()
+
+> **getMemoriesByRoomIds**(`params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+#### Parameters
+
+• **params**
+
+• **params.agentId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.roomIds**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]
+
+#### Returns
+
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+#### Implementation of
+
+[`IMemoryManager`](../interfaces/IMemoryManager.md).[`getMemoriesByRoomIds`](../interfaces/IMemoryManager.md#getmemoriesbyroomids)
+
+#### Defined in
+
+[core/src/core/memory.ts:172](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L172)
+
+---
+
+### getMemoryById()
+
+> **getMemoryById**(`id`): `Promise`\<[`Memory`](../interfaces/Memory.md)\>
+
+#### Parameters
+
+• **id**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Memory`](../interfaces/Memory.md)\>
+
+#### Implementation of
+
+[`IMemoryManager`](../interfaces/IMemoryManager.md).[`getMemoryById`](../interfaces/IMemoryManager.md#getmemorybyid)
+
+#### Defined in
+
+[core/src/core/memory.ts:183](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L183)
+
+---
+
+### removeAllMemories()
+
+> **removeAllMemories**(`roomId`): `Promise`\<`void`\>
+
+Removes all memories associated with a set of user IDs.
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The room ID to remove memories for.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when the operation completes.
+
+#### Implementation of
+
+[`IMemoryManager`](../interfaces/IMemoryManager.md).[`removeAllMemories`](../interfaces/IMemoryManager.md#removeallmemories)
+
+#### Defined in
+
+[core/src/core/memory.ts:205](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L205)
+
+---
+
+### removeMemory()
+
+> **removeMemory**(`memoryId`): `Promise`\<`void`\>
+
+Removes a memory from the database by its ID.
+
+#### Parameters
+
+• **memoryId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The ID of the memory to remove.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+A Promise that resolves when the operation completes.
+
+#### Implementation of
+
+[`IMemoryManager`](../interfaces/IMemoryManager.md).[`removeMemory`](../interfaces/IMemoryManager.md#removememory)
+
+#### Defined in
+
+[core/src/core/memory.ts:193](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L193)
+
+---
+
+### searchMemoriesByEmbedding()
+
+> **searchMemoriesByEmbedding**(`embedding`, `opts`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+Searches for memories similar to a given embedding vector.
+
+#### Parameters
+
+• **embedding**: `number`[]
+
+The embedding vector to search with.
+
+• **opts**
+
+Options including match threshold, count, user IDs, and uniqueness.
+
+• **opts.agentId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **opts.count?**: `number`
+
+The maximum number of memories to retrieve.
+
+• **opts.match_threshold?**: `number`
+
+The similarity threshold for matching memories.
+
+• **opts.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+The room ID to retrieve memories for.
+
+• **opts.unique?**: `boolean`
+
+Whether to retrieve unique memories only.
+
+#### Returns
+
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+A Promise resolving to an array of Memory objects that match the embedding.
+
+#### Implementation of
+
+[`IMemoryManager`](../interfaces/IMemoryManager.md).[`searchMemoriesByEmbedding`](../interfaces/IMemoryManager.md#searchmemoriesbyembedding)
+
+#### Defined in
+
+[core/src/core/memory.ts:120](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L120)
diff --git a/docs/docs/api/classes/PostgresDatabaseAdapter.md b/docs/docs/api/classes/PostgresDatabaseAdapter.md
index 56d3b1b11a9..23da6fff343 100644
--- a/docs/docs/api/classes/PostgresDatabaseAdapter.md
+++ b/docs/docs/api/classes/PostgresDatabaseAdapter.md
@@ -1,8 +1,11 @@
 # Class: PostgresDatabaseAdapter
 
+An abstract class representing a database adapter for managing various entities
+like accounts, memories, actors, goals, and rooms.
+
 ## Extends
 
-- `DatabaseAdapter`
+- [`DatabaseAdapter`](DatabaseAdapter.md)
 
 ## Constructors
 
@@ -20,11 +23,11 @@
 
 #### Overrides
 
-`DatabaseAdapter.constructor`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`constructor`](DatabaseAdapter.md#constructors)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:19](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L19)
+[core/src/adapters/postgres.ts:19](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L19)
 
 ## Properties
 
@@ -36,11 +39,11 @@ The database instance.
 
 #### Inherited from
 
-`DatabaseAdapter.db`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`db`](DatabaseAdapter.md#db)
 
 #### Defined in
 
-[core/src/core/database.ts:21](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/core/database.ts#L21)
+[core/src/core/database.ts:21](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L21)
 
 ## Methods
 
@@ -68,11 +71,11 @@ A Promise that resolves to a boolean indicating success or failure.
 
 #### Overrides
 
-`DatabaseAdapter.addParticipant`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`addParticipant`](DatabaseAdapter.md#addparticipant)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:681](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L681)
+[core/src/adapters/postgres.ts:681](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L681)
 
 ---
 
@@ -104,11 +107,11 @@ A Promise that resolves to the number of memories.
 
 #### Overrides
 
-`DatabaseAdapter.countMemories`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`countMemories`](DatabaseAdapter.md#countmemories)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:752](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L752)
+[core/src/adapters/postgres.ts:752](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L752)
 
 ---
 
@@ -120,7 +123,7 @@ Creates a new account in the database.
 
 #### Parameters
 
-• **account**: `Account`
+• **account**: [`Account`](../interfaces/Account.md)
 
 The account object to create.
 
@@ -132,11 +135,11 @@ A Promise that resolves when the account creation is complete.
 
 #### Overrides
 
-`DatabaseAdapter.createAccount`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`createAccount`](DatabaseAdapter.md#createaccount)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:186](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L186)
+[core/src/adapters/postgres.ts:186](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L186)
 
 ---
 
@@ -148,7 +151,7 @@ Creates a new goal in the database.
 
 #### Parameters
 
-• **goal**: `Goal`
+• **goal**: [`Goal`](../interfaces/Goal.md)
 
 The goal object to create.
 
@@ -160,11 +163,11 @@ A Promise that resolves when the goal has been created.
 
 #### Overrides
 
-`DatabaseAdapter.createGoal`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`createGoal`](DatabaseAdapter.md#creategoal)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:454](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L454)
+[core/src/adapters/postgres.ts:454](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L454)
 
 ---
 
@@ -176,7 +179,7 @@ Creates a new memory in the database.
 
 #### Parameters
 
-• **memory**: `Memory`
+• **memory**: [`Memory`](../interfaces/Memory.md)
 
 The memory object to create.
 
@@ -192,11 +195,11 @@ A Promise that resolves when the memory has been created.
 
 #### Overrides
 
-`DatabaseAdapter.createMemory`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`createMemory`](DatabaseAdapter.md#creatememory)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:253](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L253)
+[core/src/adapters/postgres.ts:253](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L253)
 
 ---
 
@@ -224,11 +227,11 @@ A Promise that resolves to a boolean indicating success or failure of the creati
 
 #### Overrides
 
-`DatabaseAdapter.createRelationship`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`createRelationship`](DatabaseAdapter.md#createrelationship)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:505](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L505)
+[core/src/adapters/postgres.ts:505](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L505)
 
 ---
 
@@ -252,17 +255,17 @@ A Promise that resolves to the UUID of the created room.
 
 #### Overrides
 
-`DatabaseAdapter.createRoom`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`createRoom`](DatabaseAdapter.md#createroom)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:483](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L483)
+[core/src/adapters/postgres.ts:483](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L483)
 
 ---
 
 ### getAccountById()
 
-> **getAccountById**(`userId`): `Promise`\<`Account`\>
+> **getAccountById**(`userId`): `Promise`\<[`Account`](../interfaces/Account.md)\>
 
 Retrieves an account by its ID.
 
@@ -274,23 +277,23 @@ The UUID of the user account to retrieve.
 
 #### Returns
 
-`Promise`\<`Account`\>
+`Promise`\<[`Account`](../interfaces/Account.md)\>
 
 A Promise that resolves to the Account object or null if not found.
 
 #### Overrides
 
-`DatabaseAdapter.getAccountById`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getAccountById`](DatabaseAdapter.md#getaccountbyid)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:162](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L162)
+[core/src/adapters/postgres.ts:162](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L162)
 
 ---
 
 ### getActorById()
 
-> **getActorById**(`params`): `Promise`\<`Actor`[]\>
+> **getActorById**(`params`): `Promise`\<[`Actor`](../interfaces/Actor.md)[]\>
 
 #### Parameters
 
@@ -300,17 +303,17 @@ A Promise that resolves to the Account object or null if not found.
 
 #### Returns
 
-`Promise`\<`Actor`[]\>
+`Promise`\<[`Actor`](../interfaces/Actor.md)[]\>
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:210](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L210)
+[core/src/adapters/postgres.ts:210](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L210)
 
 ---
 
 ### getActorDetails()
 
-> **getActorDetails**(`params`): `Promise`\<`Actor`[]\>
+> **getActorDetails**(`params`): `Promise`\<[`Actor`](../interfaces/Actor.md)[]\>
 
 Retrieves details of actors in a given room.
 
@@ -324,17 +327,17 @@ An object containing the roomId to search for actors.
 
 #### Returns
 
-`Promise`\<`Actor`[]\>
+`Promise`\<[`Actor`](../interfaces/Actor.md)[]\>
 
 A Promise that resolves to an array of Actor objects.
 
 #### Overrides
 
-`DatabaseAdapter.getActorDetails`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getActorDetails`](DatabaseAdapter.md#getactordetails)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:810](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L810)
+[core/src/adapters/postgres.ts:810](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L810)
 
 ---
 
@@ -368,17 +371,17 @@ A Promise that resolves to an array of objects containing embeddings and levensh
 
 #### Overrides
 
-`DatabaseAdapter.getCachedEmbeddings`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getCachedEmbeddings`](DatabaseAdapter.md#getcachedembeddings)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:559](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L559)
+[core/src/adapters/postgres.ts:559](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L559)
 
 ---
 
 ### getGoals()
 
-> **getGoals**(`params`): `Promise`\<`Goal`[]\>
+> **getGoals**(`params`): `Promise`\<[`Goal`](../interfaces/Goal.md)[]\>
 
 Retrieves goals based on specified parameters.
 
@@ -398,23 +401,23 @@ An object containing parameters for goal retrieval.
 
 #### Returns
 
-`Promise`\<`Goal`[]\>
+`Promise`\<[`Goal`](../interfaces/Goal.md)[]\>
 
 A Promise that resolves to an array of Goal objects.
 
 #### Overrides
 
-`DatabaseAdapter.getGoals`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getGoals`](DatabaseAdapter.md#getgoals)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:396](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L396)
+[core/src/adapters/postgres.ts:396](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L396)
 
 ---
 
 ### getMemories()
 
-> **getMemories**(`params`): `Promise`\<`Memory`[]\>
+> **getMemories**(`params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 Retrieves memories based on the specified parameters.
 
@@ -440,23 +443,23 @@ An object containing parameters for the memory retrieval.
 
 #### Returns
 
-`Promise`\<`Memory`[]\>
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 A Promise that resolves to an array of Memory objects.
 
 #### Overrides
 
-`DatabaseAdapter.getMemories`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getMemories`](DatabaseAdapter.md#getmemories)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:334](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L334)
+[core/src/adapters/postgres.ts:334](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L334)
 
 ---
 
 ### getMemoriesByRoomIds()
 
-> **getMemoriesByRoomIds**(`params`): `Promise`\<`Memory`[]\>
+> **getMemoriesByRoomIds**(`params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 #### Parameters
 
@@ -470,21 +473,21 @@ A Promise that resolves to an array of Memory objects.
 
 #### Returns
 
-`Promise`\<`Memory`[]\>
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 #### Overrides
 
-`DatabaseAdapter.getMemoriesByRoomIds`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getMemoriesByRoomIds`](DatabaseAdapter.md#getmemoriesbyroomids)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:103](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L103)
+[core/src/adapters/postgres.ts:103](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L103)
 
 ---
 
 ### getMemoryById()
 
-> **getMemoryById**(`id`): `Promise`\<`Memory`\>
+> **getMemoryById**(`id`): `Promise`\<[`Memory`](../interfaces/Memory.md)\>
 
 #### Parameters
 
@@ -492,21 +495,21 @@ A Promise that resolves to an array of Memory objects.
 
 #### Returns
 
-`Promise`\<`Memory`\>
+`Promise`\<[`Memory`](../interfaces/Memory.md)\>
 
 #### Overrides
 
-`DatabaseAdapter.getMemoryById`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getMemoryById`](DatabaseAdapter.md#getmemorybyid)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:232](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L232)
+[core/src/adapters/postgres.ts:232](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L232)
 
 ---
 
 ### getParticipantsForAccount()
 
-> **getParticipantsForAccount**(`userId`): `Promise`\<`Participant`[]\>
+> **getParticipantsForAccount**(`userId`): `Promise`\<[`Participant`](../interfaces/Participant.md)[]\>
 
 Retrieves participants associated with a specific account.
 
@@ -518,17 +521,17 @@ The UUID of the account.
 
 #### Returns
 
-`Promise`\<`Participant`[]\>
+`Promise`\<[`Participant`](../interfaces/Participant.md)[]\>
 
 A Promise that resolves to an array of Participant objects.
 
 #### Overrides
 
-`DatabaseAdapter.getParticipantsForAccount`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getParticipantsForAccount`](DatabaseAdapter.md#getparticipantsforaccount)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:72](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L72)
+[core/src/adapters/postgres.ts:72](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L72)
 
 ---
 
@@ -552,11 +555,11 @@ A Promise that resolves to an array of UUIDs representing the participants.
 
 #### Overrides
 
-`DatabaseAdapter.getParticipantsForRoom`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getParticipantsForRoom`](DatabaseAdapter.md#getparticipantsforroom)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:149](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L149)
+[core/src/adapters/postgres.ts:149](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L149)
 
 ---
 
@@ -576,17 +579,17 @@ A Promise that resolves to an array of UUIDs representing the participants.
 
 #### Overrides
 
-`DatabaseAdapter.getParticipantUserState`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getParticipantUserState`](DatabaseAdapter.md#getparticipantuserstate)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:87](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L87)
+[core/src/adapters/postgres.ts:87](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L87)
 
 ---
 
 ### getRelationship()
 
-> **getRelationship**(`params`): `Promise`\<`Relationship`\>
+> **getRelationship**(`params`): `Promise`\<[`Relationship`](../interfaces/Relationship.md)\>
 
 Retrieves a relationship between two users if it exists.
 
@@ -602,23 +605,23 @@ An object containing the UUIDs of the two users (userA and userB).
 
 #### Returns
 
-`Promise`\<`Relationship`\>
+`Promise`\<[`Relationship`](../interfaces/Relationship.md)\>
 
 A Promise that resolves to the Relationship object or null if not found.
 
 #### Overrides
 
-`DatabaseAdapter.getRelationship`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getRelationship`](DatabaseAdapter.md#getrelationship)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:529](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L529)
+[core/src/adapters/postgres.ts:529](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L529)
 
 ---
 
 ### getRelationships()
 
-> **getRelationships**(`params`): `Promise`\<`Relationship`[]\>
+> **getRelationships**(`params`): `Promise`\<[`Relationship`](../interfaces/Relationship.md)[]\>
 
 Retrieves all relationships for a specific user.
 
@@ -632,17 +635,17 @@ An object containing the UUID of the user.
 
 #### Returns
 
-`Promise`\<`Relationship`[]\>
+`Promise`\<[`Relationship`](../interfaces/Relationship.md)[]\>
 
 A Promise that resolves to an array of Relationship objects.
 
 #### Overrides
 
-`DatabaseAdapter.getRelationships`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getRelationships`](DatabaseAdapter.md#getrelationships)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:546](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L546)
+[core/src/adapters/postgres.ts:546](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L546)
 
 ---
 
@@ -666,11 +669,11 @@ A Promise that resolves to the room ID or null if not found.
 
 #### Overrides
 
-`DatabaseAdapter.getRoom`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getRoom`](DatabaseAdapter.md#getroom)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:59](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L59)
+[core/src/adapters/postgres.ts:59](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L59)
 
 ---
 
@@ -694,11 +697,11 @@ A Promise that resolves to an array of room IDs.
 
 #### Overrides
 
-`DatabaseAdapter.getRoomsForParticipant`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getRoomsForParticipant`](DatabaseAdapter.md#getroomsforparticipant)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:784](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L784)
+[core/src/adapters/postgres.ts:784](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L784)
 
 ---
 
@@ -722,11 +725,11 @@ A Promise that resolves to an array of room IDs.
 
 #### Overrides
 
-`DatabaseAdapter.getRoomsForParticipants`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getRoomsForParticipants`](DatabaseAdapter.md#getroomsforparticipants)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:797](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L797)
+[core/src/adapters/postgres.ts:797](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L797)
 
 ---
 
@@ -758,11 +761,11 @@ A Promise that resolves when the log entry has been saved.
 
 #### Overrides
 
-`DatabaseAdapter.log`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`log`](DatabaseAdapter.md#log)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:595](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L595)
+[core/src/adapters/postgres.ts:595](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L595)
 
 ---
 
@@ -786,11 +789,11 @@ A Promise that resolves when all goals have been removed.
 
 #### Overrides
 
-`DatabaseAdapter.removeAllGoals`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`removeAllGoals`](DatabaseAdapter.md#removeallgoals)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:773](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L773)
+[core/src/adapters/postgres.ts:773](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L773)
 
 ---
 
@@ -818,11 +821,11 @@ A Promise that resolves when all memories have been removed.
 
 #### Overrides
 
-`DatabaseAdapter.removeAllMemories`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`removeAllMemories`](DatabaseAdapter.md#removeallmemories)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:740](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L740)
+[core/src/adapters/postgres.ts:740](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L740)
 
 ---
 
@@ -846,11 +849,11 @@ A Promise that resolves when the goal has been removed.
 
 #### Overrides
 
-`DatabaseAdapter.removeGoal`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`removeGoal`](DatabaseAdapter.md#removegoal)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:474](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L474)
+[core/src/adapters/postgres.ts:474](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L474)
 
 ---
 
@@ -878,11 +881,11 @@ A Promise that resolves when the memory has been removed.
 
 #### Overrides
 
-`DatabaseAdapter.removeMemory`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`removeMemory`](DatabaseAdapter.md#removememory)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:728](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L728)
+[core/src/adapters/postgres.ts:728](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L728)
 
 ---
 
@@ -910,11 +913,11 @@ A Promise that resolves to a boolean indicating success or failure.
 
 #### Overrides
 
-`DatabaseAdapter.removeParticipant`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`removeParticipant`](DatabaseAdapter.md#removeparticipant)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:697](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L697)
+[core/src/adapters/postgres.ts:697](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L697)
 
 ---
 
@@ -938,17 +941,17 @@ A Promise that resolves when the room has been removed.
 
 #### Overrides
 
-`DatabaseAdapter.removeRoom`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`removeRoom`](DatabaseAdapter.md#removeroom)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:496](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L496)
+[core/src/adapters/postgres.ts:496](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L496)
 
 ---
 
 ### searchMemories()
 
-> **searchMemories**(`params`): `Promise`\<`Memory`[]\>
+> **searchMemories**(`params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 Searches for memories based on embeddings and other specified parameters.
 
@@ -972,23 +975,23 @@ An object containing parameters for the memory search.
 
 #### Returns
 
-`Promise`\<`Memory`[]\>
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 A Promise that resolves to an array of Memory objects.
 
 #### Overrides
 
-`DatabaseAdapter.searchMemories`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`searchMemories`](DatabaseAdapter.md#searchmemories)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:291](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L291)
+[core/src/adapters/postgres.ts:291](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L291)
 
 ---
 
 ### searchMemoriesByEmbedding()
 
-> **searchMemoriesByEmbedding**(`embedding`, `params`): `Promise`\<`Memory`[]\>
+> **searchMemoriesByEmbedding**(`embedding`, `params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 Searches for memories by embedding and other specified parameters.
 
@@ -1016,17 +1019,17 @@ Additional parameters for the search.
 
 #### Returns
 
-`Promise`\<`Memory`[]\>
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 A Promise that resolves to an array of Memory objects.
 
 #### Overrides
 
-`DatabaseAdapter.searchMemoriesByEmbedding`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`searchMemoriesByEmbedding`](DatabaseAdapter.md#searchmemoriesbyembedding)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:612](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L612)
+[core/src/adapters/postgres.ts:612](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L612)
 
 ---
 
@@ -1048,11 +1051,11 @@ A Promise that resolves to an array of Memory objects.
 
 #### Overrides
 
-`DatabaseAdapter.setParticipantUserState`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`setParticipantUserState`](DatabaseAdapter.md#setparticipantuserstate)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:133](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L133)
+[core/src/adapters/postgres.ts:133](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L133)
 
 ---
 
@@ -1066,7 +1069,7 @@ A Promise that resolves to an array of Memory objects.
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:37](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L37)
+[core/src/adapters/postgres.ts:37](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L37)
 
 ---
 
@@ -1078,7 +1081,7 @@ Updates a specific goal in the database.
 
 #### Parameters
 
-• **goal**: `Goal`
+• **goal**: [`Goal`](../interfaces/Goal.md)
 
 The goal object with updated properties.
 
@@ -1090,11 +1093,11 @@ A Promise that resolves when the goal has been updated.
 
 #### Overrides
 
-`DatabaseAdapter.updateGoal`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`updateGoal`](DatabaseAdapter.md#updategoal)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:437](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L437)
+[core/src/adapters/postgres.ts:437](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L437)
 
 ---
 
@@ -1112,7 +1115,7 @@ An object containing the goalId and the new status.
 
 • **params.goalId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
 
-• **params.status**: `GoalStatus`
+• **params.status**: [`GoalStatus`](../enumerations/GoalStatus.md)
 
 #### Returns
 
@@ -1122,8 +1125,8 @@ A Promise that resolves when the goal status has been updated.
 
 #### Overrides
 
-`DatabaseAdapter.updateGoalStatus`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`updateGoalStatus`](DatabaseAdapter.md#updategoalstatus)
 
 #### Defined in
 
-[core/src/adapters/postgres.ts:713](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/postgres.ts#L713)
+[core/src/adapters/postgres.ts:713](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/postgres.ts#L713)
diff --git a/docs/docs/api/classes/SqliteDatabaseAdapter.md b/docs/docs/api/classes/SqliteDatabaseAdapter.md
index 12a70c4354c..0abba7df7fa 100644
--- a/docs/docs/api/classes/SqliteDatabaseAdapter.md
+++ b/docs/docs/api/classes/SqliteDatabaseAdapter.md
@@ -1,8 +1,11 @@
 # Class: SqliteDatabaseAdapter
 
+An abstract class representing a database adapter for managing various entities
+like accounts, memories, actors, goals, and rooms.
+
 ## Extends
 
-- `DatabaseAdapter`
+- [`DatabaseAdapter`](DatabaseAdapter.md)
 
 ## Constructors
 
@@ -20,11 +23,11 @@
 
 #### Overrides
 
-`DatabaseAdapter.constructor`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`constructor`](DatabaseAdapter.md#constructors)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:70](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L70)
+[core/src/adapters/sqlite.ts:70](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L70)
 
 ## Properties
 
@@ -36,11 +39,11 @@ The database instance.
 
 #### Inherited from
 
-`DatabaseAdapter.db`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`db`](DatabaseAdapter.md#db)
 
 #### Defined in
 
-[core/src/core/database.ts:21](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/core/database.ts#L21)
+[core/src/core/database.ts:21](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/database.ts#L21)
 
 ## Methods
 
@@ -68,11 +71,11 @@ A Promise that resolves to a boolean indicating success or failure.
 
 #### Overrides
 
-`DatabaseAdapter.addParticipant`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`addParticipant`](DatabaseAdapter.md#addparticipant)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:592](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L592)
+[core/src/adapters/sqlite.ts:592](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L592)
 
 ---
 
@@ -104,11 +107,11 @@ A Promise that resolves to the number of memories.
 
 #### Overrides
 
-`DatabaseAdapter.countMemories`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`countMemories`](DatabaseAdapter.md#countmemories)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:465](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L465)
+[core/src/adapters/sqlite.ts:465](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L465)
 
 ---
 
@@ -120,7 +123,7 @@ Creates a new account in the database.
 
 #### Parameters
 
-• **account**: `Account`
+• **account**: [`Account`](../interfaces/Account.md)
 
 The account object to create.
 
@@ -132,11 +135,11 @@ A Promise that resolves when the account creation is complete.
 
 #### Overrides
 
-`DatabaseAdapter.createAccount`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`createAccount`](DatabaseAdapter.md#createaccount)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:102](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L102)
+[core/src/adapters/sqlite.ts:102](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L102)
 
 ---
 
@@ -148,7 +151,7 @@ Creates a new goal in the database.
 
 #### Parameters
 
-• **goal**: `Goal`
+• **goal**: [`Goal`](../interfaces/Goal.md)
 
 The goal object to create.
 
@@ -160,11 +163,11 @@ A Promise that resolves when the goal has been created.
 
 #### Overrides
 
-`DatabaseAdapter.createGoal`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`createGoal`](DatabaseAdapter.md#creategoal)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:532](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L532)
+[core/src/adapters/sqlite.ts:532](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L532)
 
 ---
 
@@ -176,7 +179,7 @@ Creates a new memory in the database.
 
 #### Parameters
 
-• **memory**: `Memory`
+• **memory**: [`Memory`](../interfaces/Memory.md)
 
 The memory object to create.
 
@@ -192,11 +195,11 @@ A Promise that resolves when the memory has been created.
 
 #### Overrides
 
-`DatabaseAdapter.createMemory`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`createMemory`](DatabaseAdapter.md#creatememory)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:196](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L196)
+[core/src/adapters/sqlite.ts:196](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L196)
 
 ---
 
@@ -224,11 +227,11 @@ A Promise that resolves to a boolean indicating success or failure of the creati
 
 #### Overrides
 
-`DatabaseAdapter.createRelationship`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`createRelationship`](DatabaseAdapter.md#createrelationship)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:616](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L616)
+[core/src/adapters/sqlite.ts:616](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L616)
 
 ---
 
@@ -252,17 +255,17 @@ A Promise that resolves to the UUID of the created room.
 
 #### Overrides
 
-`DatabaseAdapter.createRoom`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`createRoom`](DatabaseAdapter.md#createroom)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:557](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L557)
+[core/src/adapters/sqlite.ts:557](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L557)
 
 ---
 
 ### getAccountById()
 
-> **getAccountById**(`userId`): `Promise`\<`Account`\>
+> **getAccountById**(`userId`): `Promise`\<[`Account`](../interfaces/Account.md)\>
 
 Retrieves an account by its ID.
 
@@ -274,23 +277,23 @@ The UUID of the user account to retrieve.
 
 #### Returns
 
-`Promise`\<`Account`\>
+`Promise`\<[`Account`](../interfaces/Account.md)\>
 
 A Promise that resolves to the Account object or null if not found.
 
 #### Overrides
 
-`DatabaseAdapter.getAccountById`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getAccountById`](DatabaseAdapter.md#getaccountbyid)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:88](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L88)
+[core/src/adapters/sqlite.ts:88](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L88)
 
 ---
 
 ### getActorDetails()
 
-> **getActorDetails**(`params`): `Promise`\<`Actor`[]\>
+> **getActorDetails**(`params`): `Promise`\<[`Actor`](../interfaces/Actor.md)[]\>
 
 Retrieves details of actors in a given room.
 
@@ -304,17 +307,17 @@ An object containing the roomId to search for actors.
 
 #### Returns
 
-`Promise`\<`Actor`[]\>
+`Promise`\<[`Actor`](../interfaces/Actor.md)[]\>
 
 A Promise that resolves to an array of Actor objects.
 
 #### Overrides
 
-`DatabaseAdapter.getActorDetails`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getActorDetails`](DatabaseAdapter.md#getactordetails)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:123](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L123)
+[core/src/adapters/sqlite.ts:123](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L123)
 
 ---
 
@@ -348,17 +351,17 @@ A Promise that resolves to an array of objects containing embeddings and levensh
 
 #### Overrides
 
-`DatabaseAdapter.getCachedEmbeddings`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getCachedEmbeddings`](DatabaseAdapter.md#getcachedembeddings)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:336](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L336)
+[core/src/adapters/sqlite.ts:336](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L336)
 
 ---
 
 ### getGoals()
 
-> **getGoals**(`params`): `Promise`\<`Goal`[]\>
+> **getGoals**(`params`): `Promise`\<[`Goal`](../interfaces/Goal.md)[]\>
 
 Retrieves goals based on specified parameters.
 
@@ -378,23 +381,23 @@ An object containing parameters for goal retrieval.
 
 #### Returns
 
-`Promise`\<`Goal`[]\>
+`Promise`\<[`Goal`](../interfaces/Goal.md)[]\>
 
 A Promise that resolves to an array of Goal objects.
 
 #### Overrides
 
-`DatabaseAdapter.getGoals`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getGoals`](DatabaseAdapter.md#getgoals)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:485](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L485)
+[core/src/adapters/sqlite.ts:485](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L485)
 
 ---
 
 ### getMemories()
 
-> **getMemories**(`params`): `Promise`\<`Memory`[]\>
+> **getMemories**(`params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 Retrieves memories based on the specified parameters.
 
@@ -420,23 +423,23 @@ An object containing parameters for the memory retrieval.
 
 #### Returns
 
-`Promise`\<`Memory`[]\>
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 A Promise that resolves to an array of Memory objects.
 
 #### Overrides
 
-`DatabaseAdapter.getMemories`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getMemories`](DatabaseAdapter.md#getmemories)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:398](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L398)
+[core/src/adapters/sqlite.ts:398](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L398)
 
 ---
 
 ### getMemoriesByRoomIds()
 
-> **getMemoriesByRoomIds**(`params`): `Promise`\<`Memory`[]\>
+> **getMemoriesByRoomIds**(`params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 #### Parameters
 
@@ -450,21 +453,21 @@ A Promise that resolves to an array of Memory objects.
 
 #### Returns
 
-`Promise`\<`Memory`[]\>
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 #### Overrides
 
-`DatabaseAdapter.getMemoriesByRoomIds`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getMemoriesByRoomIds`](DatabaseAdapter.md#getmemoriesbyroomids)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:150](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L150)
+[core/src/adapters/sqlite.ts:150](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L150)
 
 ---
 
 ### getMemoryById()
 
-> **getMemoryById**(`memoryId`): `Promise`\<`Memory`\>
+> **getMemoryById**(`memoryId`): `Promise`\<[`Memory`](../interfaces/Memory.md)\>
 
 #### Parameters
 
@@ -472,21 +475,21 @@ A Promise that resolves to an array of Memory objects.
 
 #### Returns
 
-`Promise`\<`Memory`\>
+`Promise`\<[`Memory`](../interfaces/Memory.md)\>
 
 #### Overrides
 
-`DatabaseAdapter.getMemoryById`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getMemoryById`](DatabaseAdapter.md#getmemorybyid)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:180](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L180)
+[core/src/adapters/sqlite.ts:180](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L180)
 
 ---
 
 ### getParticipantsForAccount()
 
-> **getParticipantsForAccount**(`userId`): `Promise`\<`Participant`[]\>
+> **getParticipantsForAccount**(`userId`): `Promise`\<[`Participant`](../interfaces/Participant.md)[]\>
 
 Retrieves participants associated with a specific account.
 
@@ -498,17 +501,17 @@ The UUID of the account.
 
 #### Returns
 
-`Promise`\<`Participant`[]\>
+`Promise`\<[`Participant`](../interfaces/Participant.md)[]\>
 
 A Promise that resolves to an array of Participant objects.
 
 #### Overrides
 
-`DatabaseAdapter.getParticipantsForAccount`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getParticipantsForAccount`](DatabaseAdapter.md#getparticipantsforaccount)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:30](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L30)
+[core/src/adapters/sqlite.ts:30](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L30)
 
 ---
 
@@ -532,11 +535,11 @@ A Promise that resolves to an array of UUIDs representing the participants.
 
 #### Overrides
 
-`DatabaseAdapter.getParticipantsForRoom`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getParticipantsForRoom`](DatabaseAdapter.md#getparticipantsforroom)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:40](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L40)
+[core/src/adapters/sqlite.ts:40](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L40)
 
 ---
 
@@ -556,17 +559,17 @@ A Promise that resolves to an array of UUIDs representing the participants.
 
 #### Overrides
 
-`DatabaseAdapter.getParticipantUserState`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getParticipantUserState`](DatabaseAdapter.md#getparticipantuserstate)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:46](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L46)
+[core/src/adapters/sqlite.ts:46](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L46)
 
 ---
 
 ### getRelationship()
 
-> **getRelationship**(`params`): `Promise`\<`Relationship`\>
+> **getRelationship**(`params`): `Promise`\<[`Relationship`](../interfaces/Relationship.md)\>
 
 Retrieves a relationship between two users if it exists.
 
@@ -582,23 +585,23 @@ An object containing the UUIDs of the two users (userA and userB).
 
 #### Returns
 
-`Promise`\<`Relationship`\>
+`Promise`\<[`Relationship`](../interfaces/Relationship.md)\>
 
 A Promise that resolves to the Relationship object or null if not found.
 
 #### Overrides
 
-`DatabaseAdapter.getRelationship`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getRelationship`](DatabaseAdapter.md#getrelationship)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:631](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L631)
+[core/src/adapters/sqlite.ts:631](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L631)
 
 ---
 
 ### getRelationships()
 
-> **getRelationships**(`params`): `Promise`\<`Relationship`[]\>
+> **getRelationships**(`params`): `Promise`\<[`Relationship`](../interfaces/Relationship.md)[]\>
 
 Retrieves all relationships for a specific user.
 
@@ -612,17 +615,17 @@ An object containing the UUID of the user.
 
 #### Returns
 
-`Promise`\<`Relationship`[]\>
+`Promise`\<[`Relationship`](../interfaces/Relationship.md)[]\>
 
 A Promise that resolves to an array of Relationship objects.
 
 #### Overrides
 
-`DatabaseAdapter.getRelationships`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getRelationships`](DatabaseAdapter.md#getrelationships)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:649](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L649)
+[core/src/adapters/sqlite.ts:649](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L649)
 
 ---
 
@@ -646,11 +649,11 @@ A Promise that resolves to the room ID or null if not found.
 
 #### Overrides
 
-`DatabaseAdapter.getRoom`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getRoom`](DatabaseAdapter.md#getroom)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:22](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L22)
+[core/src/adapters/sqlite.ts:22](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L22)
 
 ---
 
@@ -674,11 +677,11 @@ A Promise that resolves to an array of room IDs.
 
 #### Overrides
 
-`DatabaseAdapter.getRoomsForParticipant`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getRoomsForParticipant`](DatabaseAdapter.md#getroomsforparticipant)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:573](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L573)
+[core/src/adapters/sqlite.ts:573](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L573)
 
 ---
 
@@ -702,11 +705,11 @@ A Promise that resolves to an array of room IDs.
 
 #### Overrides
 
-`DatabaseAdapter.getRoomsForParticipants`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`getRoomsForParticipants`](DatabaseAdapter.md#getroomsforparticipants)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:579](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L579)
+[core/src/adapters/sqlite.ts:579](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L579)
 
 ---
 
@@ -738,11 +741,11 @@ A Promise that resolves when the log entry has been saved.
 
 #### Overrides
 
-`DatabaseAdapter.log`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`log`](DatabaseAdapter.md#log)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:380](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L380)
+[core/src/adapters/sqlite.ts:380](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L380)
 
 ---
 
@@ -766,11 +769,11 @@ A Promise that resolves when all goals have been removed.
 
 #### Overrides
 
-`DatabaseAdapter.removeAllGoals`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`removeAllGoals`](DatabaseAdapter.md#removeallgoals)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:552](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L552)
+[core/src/adapters/sqlite.ts:552](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L552)
 
 ---
 
@@ -798,11 +801,11 @@ A Promise that resolves when all memories have been removed.
 
 #### Overrides
 
-`DatabaseAdapter.removeAllMemories`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`removeAllMemories`](DatabaseAdapter.md#removeallmemories)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:460](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L460)
+[core/src/adapters/sqlite.ts:460](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L460)
 
 ---
 
@@ -826,11 +829,11 @@ A Promise that resolves when the goal has been removed.
 
 #### Overrides
 
-`DatabaseAdapter.removeGoal`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`removeGoal`](DatabaseAdapter.md#removegoal)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:547](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L547)
+[core/src/adapters/sqlite.ts:547](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L547)
 
 ---
 
@@ -858,11 +861,11 @@ A Promise that resolves when the memory has been removed.
 
 #### Overrides
 
-`DatabaseAdapter.removeMemory`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`removeMemory`](DatabaseAdapter.md#removememory)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:455](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L455)
+[core/src/adapters/sqlite.ts:455](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L455)
 
 ---
 
@@ -890,11 +893,11 @@ A Promise that resolves to a boolean indicating success or failure.
 
 #### Overrides
 
-`DatabaseAdapter.removeParticipant`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`removeParticipant`](DatabaseAdapter.md#removeparticipant)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:604](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L604)
+[core/src/adapters/sqlite.ts:604](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L604)
 
 ---
 
@@ -918,17 +921,17 @@ A Promise that resolves when the room has been removed.
 
 #### Overrides
 
-`DatabaseAdapter.removeRoom`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`removeRoom`](DatabaseAdapter.md#removeroom)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:568](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L568)
+[core/src/adapters/sqlite.ts:568](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L568)
 
 ---
 
 ### searchMemories()
 
-> **searchMemories**(`params`): `Promise`\<`Memory`[]\>
+> **searchMemories**(`params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 Searches for memories based on embeddings and other specified parameters.
 
@@ -954,23 +957,23 @@ An object containing parameters for the memory search.
 
 #### Returns
 
-`Promise`\<`Memory`[]\>
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 A Promise that resolves to an array of Memory objects.
 
 #### Overrides
 
-`DatabaseAdapter.searchMemories`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`searchMemories`](DatabaseAdapter.md#searchmemories)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:236](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L236)
+[core/src/adapters/sqlite.ts:236](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L236)
 
 ---
 
 ### searchMemoriesByEmbedding()
 
-> **searchMemoriesByEmbedding**(`embedding`, `params`): `Promise`\<`Memory`[]\>
+> **searchMemoriesByEmbedding**(`embedding`, `params`): `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 Searches for memories by embedding and other specified parameters.
 
@@ -998,17 +1001,17 @@ Additional parameters for the search.
 
 #### Returns
 
-`Promise`\<`Memory`[]\>
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
 
 A Promise that resolves to an array of Memory objects.
 
 #### Overrides
 
-`DatabaseAdapter.searchMemoriesByEmbedding`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`searchMemoriesByEmbedding`](DatabaseAdapter.md#searchmemoriesbyembedding)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:282](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L282)
+[core/src/adapters/sqlite.ts:282](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L282)
 
 ---
 
@@ -1030,11 +1033,11 @@ A Promise that resolves to an array of Memory objects.
 
 #### Overrides
 
-`DatabaseAdapter.setParticipantUserState`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`setParticipantUserState`](DatabaseAdapter.md#setparticipantuserstate)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:59](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L59)
+[core/src/adapters/sqlite.ts:59](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L59)
 
 ---
 
@@ -1046,7 +1049,7 @@ Updates a specific goal in the database.
 
 #### Parameters
 
-• **goal**: `Goal`
+• **goal**: [`Goal`](../interfaces/Goal.md)
 
 The goal object with updated properties.
 
@@ -1058,11 +1061,11 @@ A Promise that resolves when the goal has been updated.
 
 #### Overrides
 
-`DatabaseAdapter.updateGoal`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`updateGoal`](DatabaseAdapter.md#updategoal)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:519](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L519)
+[core/src/adapters/sqlite.ts:519](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L519)
 
 ---
 
@@ -1080,7 +1083,7 @@ An object containing the goalId and the new status.
 
 • **params.goalId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
 
-• **params.status**: `GoalStatus`
+• **params.status**: [`GoalStatus`](../enumerations/GoalStatus.md)
 
 #### Returns
 
@@ -1090,8 +1093,8 @@ A Promise that resolves when the goal status has been updated.
 
 #### Overrides
 
-`DatabaseAdapter.updateGoalStatus`
+[`DatabaseAdapter`](DatabaseAdapter.md).[`updateGoalStatus`](DatabaseAdapter.md#updategoalstatus)
 
 #### Defined in
 
-[core/src/adapters/sqlite.ts:372](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/adapters/sqlite.ts#L372)
+[core/src/adapters/sqlite.ts:372](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/adapters/sqlite.ts#L372)
diff --git a/docs/docs/api/classes/TelegramClient.md b/docs/docs/api/classes/TelegramClient.md
index 15b1e1eaf8b..6f29127555e 100644
--- a/docs/docs/api/classes/TelegramClient.md
+++ b/docs/docs/api/classes/TelegramClient.md
@@ -8,7 +8,7 @@
 
 #### Parameters
 
-• **runtime**: `IAgentRuntime`
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
 
 • **botToken**: `string`
 
@@ -18,7 +18,7 @@
 
 #### Defined in
 
-[core/src/clients/telegram/src/index.ts:12](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/telegram/src/index.ts#L12)
+[core/src/clients/telegram/src/index.ts:12](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/telegram/src/index.ts#L12)
 
 ## Methods
 
@@ -32,7 +32,7 @@
 
 #### Defined in
 
-[core/src/clients/telegram/src/index.ts:57](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/telegram/src/index.ts#L57)
+[core/src/clients/telegram/src/index.ts:54](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/telegram/src/index.ts#L54)
 
 ---
 
@@ -46,4 +46,4 @@
 
 #### Defined in
 
-[core/src/clients/telegram/src/index.ts:94](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/telegram/src/index.ts#L94)
+[core/src/clients/telegram/src/index.ts:91](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/telegram/src/index.ts#L91)
diff --git a/docs/docs/api/classes/TokenProvider.md b/docs/docs/api/classes/TokenProvider.md
index af8feae9f57..0e0fb8d77eb 100644
--- a/docs/docs/api/classes/TokenProvider.md
+++ b/docs/docs/api/classes/TokenProvider.md
@@ -16,7 +16,7 @@
 
 #### Defined in
 
-[core/src/providers/token.ts:38](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L38)
+[core/src/providers/token.ts:38](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L38)
 
 ## Methods
 
@@ -34,7 +34,7 @@
 
 #### Defined in
 
-[core/src/providers/token.ts:461](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L461)
+[core/src/providers/token.ts:461](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L461)
 
 ---
 
@@ -52,7 +52,7 @@
 
 #### Defined in
 
-[core/src/providers/token.ts:631](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L631)
+[core/src/providers/token.ts:631](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L631)
 
 ---
 
@@ -70,7 +70,7 @@
 
 #### Defined in
 
-[core/src/providers/token.ts:635](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L635)
+[core/src/providers/token.ts:635](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L635)
 
 ---
 
@@ -84,7 +84,7 @@
 
 #### Defined in
 
-[core/src/providers/token.ts:420](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L420)
+[core/src/providers/token.ts:420](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L420)
 
 ---
 
@@ -98,7 +98,7 @@
 
 #### Defined in
 
-[core/src/providers/token.ts:507](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L507)
+[core/src/providers/token.ts:507](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L507)
 
 ---
 
@@ -112,7 +112,7 @@
 
 #### Defined in
 
-[core/src/providers/token.ts:155](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L155)
+[core/src/providers/token.ts:155](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L155)
 
 ---
 
@@ -126,7 +126,7 @@
 
 #### Defined in
 
-[core/src/providers/token.ts:185](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L185)
+[core/src/providers/token.ts:185](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L185)
 
 ---
 
@@ -144,7 +144,7 @@
 
 #### Defined in
 
-[core/src/providers/token.ts:607](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L607)
+[core/src/providers/token.ts:607](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L607)
 
 ---
 
@@ -162,7 +162,7 @@
 
 #### Defined in
 
-[core/src/providers/token.ts:722](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L722)
+[core/src/providers/token.ts:722](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L722)
 
 ---
 
@@ -176,7 +176,7 @@
 
 #### Defined in
 
-[core/src/providers/token.ts:786](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L786)
+[core/src/providers/token.ts:786](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L786)
 
 ---
 
@@ -190,4 +190,4 @@
 
 #### Defined in
 
-[core/src/providers/token.ts:656](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L656)
+[core/src/providers/token.ts:656](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L656)
diff --git a/docs/docs/api/classes/TwitterInteractionClient.md b/docs/docs/api/classes/TwitterInteractionClient.md
index 67d56943979..7b06e7039e4 100644
--- a/docs/docs/api/classes/TwitterInteractionClient.md
+++ b/docs/docs/api/classes/TwitterInteractionClient.md
@@ -12,7 +12,7 @@
 
 #### Parameters
 
-• **runtime**: `IAgentRuntime`
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
 
 #### Returns
 
@@ -24,7 +24,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/interactions.ts:88](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/interactions.ts#L88)
+[core/src/clients/twitter/interactions.ts:87](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/interactions.ts#L87)
 
 ## Properties
 
@@ -46,7 +46,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:151](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L151)
+[core/src/clients/twitter/base.ts:150](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L150)
 
 ---
 
@@ -60,21 +60,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:89](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L89)
-
----
-
-### dryRun
-
-> **dryRun**: `boolean` = `false`
-
-#### Inherited from
-
-`ClientBase.dryRun`
-
-#### Defined in
-
-[core/src/clients/twitter/base.ts:94](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L94)
+[core/src/clients/twitter/base.ts:89](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L89)
 
 ---
 
@@ -88,7 +74,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:92](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L92)
+[core/src/clients/twitter/base.ts:92](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L92)
 
 ---
 
@@ -102,7 +88,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:90](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L90)
+[core/src/clients/twitter/base.ts:90](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L90)
 
 ---
 
@@ -116,13 +102,13 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:97](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L97)
+[core/src/clients/twitter/base.ts:96](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L96)
 
 ---
 
 ### runtime
 
-> **runtime**: `IAgentRuntime`
+> **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
 
 #### Inherited from
 
@@ -130,7 +116,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:88](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L88)
+[core/src/clients/twitter/base.ts:88](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L88)
 
 ---
 
@@ -144,7 +130,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:93](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L93)
+[core/src/clients/twitter/base.ts:93](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L93)
 
 ---
 
@@ -158,7 +144,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:91](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L91)
+[core/src/clients/twitter/base.ts:91](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L91)
 
 ---
 
@@ -172,7 +158,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:87](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L87)
+[core/src/clients/twitter/base.ts:87](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L87)
 
 ---
 
@@ -186,7 +172,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:98](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L98)
+[core/src/clients/twitter/base.ts:97](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L97)
 
 ---
 
@@ -200,7 +186,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:86](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L86)
+[core/src/clients/twitter/base.ts:86](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L86)
 
 ---
 
@@ -407,7 +393,7 @@ node_modules/@types/node/events.d.ts:597
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:100](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L100)
+[core/src/clients/twitter/base.ts:99](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L99)
 
 ---
 
@@ -538,7 +524,7 @@ node_modules/@types/node/events.d.ts:922
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:281](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L281)
+[core/src/clients/twitter/base.ts:278](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L278)
 
 ---
 
@@ -566,7 +552,7 @@ node_modules/@types/node/events.d.ts:922
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:333](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L333)
+[core/src/clients/twitter/base.ts:330](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L330)
 
 ---
 
@@ -588,7 +574,7 @@ node_modules/@types/node/events.d.ts:922
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:116](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L116)
+[core/src/clients/twitter/base.ts:115](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L115)
 
 ---
 
@@ -635,7 +621,7 @@ node_modules/@types/node/events.d.ts:774
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:138](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L138)
+[core/src/clients/twitter/base.ts:137](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L137)
 
 ---
 
@@ -649,7 +635,7 @@ node_modules/@types/node/events.d.ts:774
 
 #### Defined in
 
-[core/src/clients/twitter/interactions.ts:94](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/interactions.ts#L94)
+[core/src/clients/twitter/interactions.ts:93](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/interactions.ts#L93)
 
 ---
 
@@ -905,7 +891,7 @@ node_modules/@types/node/events.d.ts:659
 
 #### Defined in
 
-[core/src/clients/twitter/interactions.ts:77](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/interactions.ts#L77)
+[core/src/clients/twitter/interactions.ts:76](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/interactions.ts#L76)
 
 ---
 
@@ -1215,9 +1201,9 @@ node_modules/@types/node/events.d.ts:742
 
 #### Parameters
 
-• **message**: `Memory`
+• **message**: [`Memory`](../interfaces/Memory.md)
 
-• **state**: `State`
+• **state**: [`State`](../interfaces/State.md)
 
 #### Returns
 
@@ -1229,7 +1215,7 @@ node_modules/@types/node/events.d.ts:742
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:566](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L566)
+[core/src/clients/twitter/base.ts:572](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L572)
 
 ---
 
@@ -1251,7 +1237,7 @@ node_modules/@types/node/events.d.ts:742
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:554](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L554)
+[core/src/clients/twitter/base.ts:560](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L560)
 
 ---
 
diff --git a/docs/docs/api/classes/TwitterPostClient.md b/docs/docs/api/classes/TwitterPostClient.md
index 7d0a3bd3dd8..fbf83d8f83c 100644
--- a/docs/docs/api/classes/TwitterPostClient.md
+++ b/docs/docs/api/classes/TwitterPostClient.md
@@ -12,7 +12,7 @@
 
 #### Parameters
 
-• **runtime**: `IAgentRuntime`
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
 
 #### Returns
 
@@ -24,7 +24,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/post.ts:42](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/post.ts#L42)
+[core/src/clients/twitter/post.ts:41](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/post.ts#L41)
 
 ## Properties
 
@@ -46,7 +46,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:151](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L151)
+[core/src/clients/twitter/base.ts:150](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L150)
 
 ---
 
@@ -60,21 +60,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:89](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L89)
-
----
-
-### dryRun
-
-> **dryRun**: `boolean` = `false`
-
-#### Inherited from
-
-`ClientBase.dryRun`
-
-#### Defined in
-
-[core/src/clients/twitter/base.ts:94](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L94)
+[core/src/clients/twitter/base.ts:89](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L89)
 
 ---
 
@@ -88,7 +74,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:92](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L92)
+[core/src/clients/twitter/base.ts:92](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L92)
 
 ---
 
@@ -102,7 +88,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:90](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L90)
+[core/src/clients/twitter/base.ts:90](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L90)
 
 ---
 
@@ -116,13 +102,13 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:97](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L97)
+[core/src/clients/twitter/base.ts:96](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L96)
 
 ---
 
 ### runtime
 
-> **runtime**: `IAgentRuntime`
+> **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
 
 #### Inherited from
 
@@ -130,7 +116,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:88](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L88)
+[core/src/clients/twitter/base.ts:88](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L88)
 
 ---
 
@@ -144,7 +130,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:93](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L93)
+[core/src/clients/twitter/base.ts:93](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L93)
 
 ---
 
@@ -158,7 +144,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:91](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L91)
+[core/src/clients/twitter/base.ts:91](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L91)
 
 ---
 
@@ -172,7 +158,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:87](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L87)
+[core/src/clients/twitter/base.ts:87](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L87)
 
 ---
 
@@ -186,7 +172,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:98](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L98)
+[core/src/clients/twitter/base.ts:97](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L97)
 
 ---
 
@@ -200,7 +186,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:86](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L86)
+[core/src/clients/twitter/base.ts:86](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L86)
 
 ---
 
@@ -407,7 +393,7 @@ node_modules/@types/node/events.d.ts:597
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:100](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L100)
+[core/src/clients/twitter/base.ts:99](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L99)
 
 ---
 
@@ -538,7 +524,7 @@ node_modules/@types/node/events.d.ts:922
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:281](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L281)
+[core/src/clients/twitter/base.ts:278](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L278)
 
 ---
 
@@ -566,7 +552,7 @@ node_modules/@types/node/events.d.ts:922
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:333](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L333)
+[core/src/clients/twitter/base.ts:330](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L330)
 
 ---
 
@@ -588,7 +574,7 @@ node_modules/@types/node/events.d.ts:922
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:116](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L116)
+[core/src/clients/twitter/base.ts:115](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L115)
 
 ---
 
@@ -635,7 +621,7 @@ node_modules/@types/node/events.d.ts:774
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:138](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L138)
+[core/src/clients/twitter/base.ts:137](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L137)
 
 ---
 
@@ -891,7 +877,7 @@ node_modules/@types/node/events.d.ts:659
 
 #### Defined in
 
-[core/src/clients/twitter/post.ts:29](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/post.ts#L29)
+[core/src/clients/twitter/post.ts:28](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/post.ts#L28)
 
 ---
 
@@ -1201,9 +1187,9 @@ node_modules/@types/node/events.d.ts:742
 
 #### Parameters
 
-• **message**: `Memory`
+• **message**: [`Memory`](../interfaces/Memory.md)
 
-• **state**: `State`
+• **state**: [`State`](../interfaces/State.md)
 
 #### Returns
 
@@ -1215,7 +1201,7 @@ node_modules/@types/node/events.d.ts:742
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:566](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L566)
+[core/src/clients/twitter/base.ts:572](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L572)
 
 ---
 
@@ -1237,7 +1223,7 @@ node_modules/@types/node/events.d.ts:742
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:554](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L554)
+[core/src/clients/twitter/base.ts:560](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L560)
 
 ---
 
diff --git a/docs/docs/api/classes/TwitterSearchClient.md b/docs/docs/api/classes/TwitterSearchClient.md
index 98fbd49e451..ab977bd41e2 100644
--- a/docs/docs/api/classes/TwitterSearchClient.md
+++ b/docs/docs/api/classes/TwitterSearchClient.md
@@ -12,7 +12,7 @@
 
 #### Parameters
 
-• **runtime**: `IAgentRuntime`
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
 
 #### Returns
 
@@ -24,7 +24,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/search.ts:54](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/search.ts#L54)
+[core/src/clients/twitter/search.ts:53](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/search.ts#L53)
 
 ## Properties
 
@@ -46,7 +46,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:151](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L151)
+[core/src/clients/twitter/base.ts:150](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L150)
 
 ---
 
@@ -60,21 +60,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:89](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L89)
-
----
-
-### dryRun
-
-> **dryRun**: `boolean` = `false`
-
-#### Inherited from
-
-`ClientBase.dryRun`
-
-#### Defined in
-
-[core/src/clients/twitter/base.ts:94](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L94)
+[core/src/clients/twitter/base.ts:89](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L89)
 
 ---
 
@@ -88,7 +74,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:92](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L92)
+[core/src/clients/twitter/base.ts:92](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L92)
 
 ---
 
@@ -102,7 +88,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:90](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L90)
+[core/src/clients/twitter/base.ts:90](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L90)
 
 ---
 
@@ -116,13 +102,13 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:97](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L97)
+[core/src/clients/twitter/base.ts:96](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L96)
 
 ---
 
 ### runtime
 
-> **runtime**: `IAgentRuntime`
+> **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
 
 #### Inherited from
 
@@ -130,7 +116,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:88](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L88)
+[core/src/clients/twitter/base.ts:88](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L88)
 
 ---
 
@@ -144,7 +130,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:93](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L93)
+[core/src/clients/twitter/base.ts:93](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L93)
 
 ---
 
@@ -158,7 +144,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:91](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L91)
+[core/src/clients/twitter/base.ts:91](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L91)
 
 ---
 
@@ -172,7 +158,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:87](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L87)
+[core/src/clients/twitter/base.ts:87](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L87)
 
 ---
 
@@ -186,7 +172,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:98](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L98)
+[core/src/clients/twitter/base.ts:97](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L97)
 
 ---
 
@@ -200,7 +186,7 @@
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:86](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L86)
+[core/src/clients/twitter/base.ts:86](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L86)
 
 ---
 
@@ -407,7 +393,7 @@ node_modules/@types/node/events.d.ts:597
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:100](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L100)
+[core/src/clients/twitter/base.ts:99](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L99)
 
 ---
 
@@ -538,7 +524,7 @@ node_modules/@types/node/events.d.ts:922
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:281](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L281)
+[core/src/clients/twitter/base.ts:278](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L278)
 
 ---
 
@@ -566,7 +552,7 @@ node_modules/@types/node/events.d.ts:922
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:333](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L333)
+[core/src/clients/twitter/base.ts:330](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L330)
 
 ---
 
@@ -588,7 +574,7 @@ node_modules/@types/node/events.d.ts:922
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:116](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L116)
+[core/src/clients/twitter/base.ts:115](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L115)
 
 ---
 
@@ -635,7 +621,7 @@ node_modules/@types/node/events.d.ts:774
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:138](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L138)
+[core/src/clients/twitter/base.ts:137](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L137)
 
 ---
 
@@ -891,7 +877,7 @@ node_modules/@types/node/events.d.ts:659
 
 #### Defined in
 
-[core/src/clients/twitter/search.ts:61](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/search.ts#L61)
+[core/src/clients/twitter/search.ts:60](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/search.ts#L60)
 
 ---
 
@@ -1201,9 +1187,9 @@ node_modules/@types/node/events.d.ts:742
 
 #### Parameters
 
-• **message**: `Memory`
+• **message**: [`Memory`](../interfaces/Memory.md)
 
-• **state**: `State`
+• **state**: [`State`](../interfaces/State.md)
 
 #### Returns
 
@@ -1215,7 +1201,7 @@ node_modules/@types/node/events.d.ts:742
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:566](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L566)
+[core/src/clients/twitter/base.ts:572](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L572)
 
 ---
 
@@ -1237,7 +1223,7 @@ node_modules/@types/node/events.d.ts:742
 
 #### Defined in
 
-[core/src/clients/twitter/base.ts:554](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/clients/twitter/base.ts#L554)
+[core/src/clients/twitter/base.ts:560](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/clients/twitter/base.ts#L560)
 
 ---
 
diff --git a/docs/docs/api/classes/WalletProvider.md b/docs/docs/api/classes/WalletProvider.md
index 7c7e1da09ac..7f0284df838 100644
--- a/docs/docs/api/classes/WalletProvider.md
+++ b/docs/docs/api/classes/WalletProvider.md
@@ -18,7 +18,7 @@
 
 #### Defined in
 
-[core/src/providers/wallet.ts:53](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/wallet.ts#L53)
+[core/src/providers/wallet.ts:53](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/wallet.ts#L53)
 
 ## Methods
 
@@ -36,7 +36,7 @@
 
 #### Defined in
 
-[core/src/providers/wallet.ts:105](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/wallet.ts#L105)
+[core/src/providers/wallet.ts:105](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/wallet.ts#L105)
 
 ---
 
@@ -54,7 +54,7 @@
 
 #### Defined in
 
-[core/src/providers/wallet.ts:150](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/wallet.ts#L150)
+[core/src/providers/wallet.ts:150](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/wallet.ts#L150)
 
 ---
 
@@ -76,7 +76,7 @@
 
 #### Defined in
 
-[core/src/providers/wallet.ts:192](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/wallet.ts#L192)
+[core/src/providers/wallet.ts:192](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/wallet.ts#L192)
 
 ---
 
@@ -94,4 +94,4 @@
 
 #### Defined in
 
-[core/src/providers/wallet.ts:229](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/wallet.ts#L229)
+[core/src/providers/wallet.ts:229](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/wallet.ts#L229)
diff --git a/docs/docs/api/enumerations/Clients.md b/docs/docs/api/enumerations/Clients.md
new file mode 100644
index 00000000000..2639b8da956
--- /dev/null
+++ b/docs/docs/api/enumerations/Clients.md
@@ -0,0 +1,41 @@
+# Enumeration: Clients
+
+## Enumeration Members
+
+### DIRECT
+
+> **DIRECT**: `"direct"`
+
+#### Defined in
+
+[core/src/core/types.ts:300](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L300)
+
+---
+
+### DISCORD
+
+> **DISCORD**: `"discord"`
+
+#### Defined in
+
+[core/src/core/types.ts:299](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L299)
+
+---
+
+### TELEGRAM
+
+> **TELEGRAM**: `"telegram"`
+
+#### Defined in
+
+[core/src/core/types.ts:302](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L302)
+
+---
+
+### TWITTER
+
+> **TWITTER**: `"twitter"`
+
+#### Defined in
+
+[core/src/core/types.ts:301](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L301)
diff --git a/docs/docs/api/enumerations/GoalStatus.md b/docs/docs/api/enumerations/GoalStatus.md
new file mode 100644
index 00000000000..3bec50a388d
--- /dev/null
+++ b/docs/docs/api/enumerations/GoalStatus.md
@@ -0,0 +1,31 @@
+# Enumeration: GoalStatus
+
+## Enumeration Members
+
+### DONE
+
+> **DONE**: `"DONE"`
+
+#### Defined in
+
+[core/src/core/types.ts:58](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L58)
+
+---
+
+### FAILED
+
+> **FAILED**: `"FAILED"`
+
+#### Defined in
+
+[core/src/core/types.ts:59](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L59)
+
+---
+
+### IN_PROGRESS
+
+> **IN_PROGRESS**: `"IN_PROGRESS"`
+
+#### Defined in
+
+[core/src/core/types.ts:60](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L60)
diff --git a/docs/docs/api/enumerations/ImageGenModel.md b/docs/docs/api/enumerations/ImageGenModel.md
new file mode 100644
index 00000000000..e9b366064ba
--- /dev/null
+++ b/docs/docs/api/enumerations/ImageGenModel.md
@@ -0,0 +1,21 @@
+# Enumeration: ImageGenModel
+
+## Enumeration Members
+
+### Dalle
+
+> **Dalle**: `"Dalle"`
+
+#### Defined in
+
+[core/src/core/imageGenModels.ts:3](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/imageGenModels.ts#L3)
+
+---
+
+### TogetherAI
+
+> **TogetherAI**: `"TogetherAI"`
+
+#### Defined in
+
+[core/src/core/imageGenModels.ts:2](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/imageGenModels.ts#L2)
diff --git a/docs/docs/api/enumerations/ModelClass.md b/docs/docs/api/enumerations/ModelClass.md
new file mode 100644
index 00000000000..ff8b6242396
--- /dev/null
+++ b/docs/docs/api/enumerations/ModelClass.md
@@ -0,0 +1,41 @@
+# Enumeration: ModelClass
+
+## Enumeration Members
+
+### EMBEDDING
+
+> **EMBEDDING**: `"embedding"`
+
+#### Defined in
+
+[core/src/core/types.ts:79](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L79)
+
+---
+
+### LARGE
+
+> **LARGE**: `"large"`
+
+#### Defined in
+
+[core/src/core/types.ts:78](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L78)
+
+---
+
+### MEDIUM
+
+> **MEDIUM**: `"medium"`
+
+#### Defined in
+
+[core/src/core/types.ts:77](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L77)
+
+---
+
+### SMALL
+
+> **SMALL**: `"small"`
+
+#### Defined in
+
+[core/src/core/types.ts:76](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L76)
diff --git a/docs/docs/api/enumerations/ModelProvider.md b/docs/docs/api/enumerations/ModelProvider.md
new file mode 100644
index 00000000000..8cea253f246
--- /dev/null
+++ b/docs/docs/api/enumerations/ModelProvider.md
@@ -0,0 +1,101 @@
+# Enumeration: ModelProvider
+
+## Enumeration Members
+
+### ANTHROPIC
+
+> **ANTHROPIC**: `"anthropic"`
+
+#### Defined in
+
+[core/src/core/types.ts:103](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L103)
+
+---
+
+### CLAUDE_VERTEX
+
+> **CLAUDE_VERTEX**: `"claude_vertex"`
+
+#### Defined in
+
+[core/src/core/types.ts:109](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L109)
+
+---
+
+### GITHUB
+
+> **GITHUB**: `"GITHUB"`
+
+#### Defined in
+
+[core/src/core/types.ts:111](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L111)
+
+---
+
+### GOOGLE
+
+> **GOOGLE**: `"google"`
+
+#### Defined in
+
+[core/src/core/types.ts:108](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L108)
+
+---
+
+### GROK
+
+> **GROK**: `"grok"`
+
+#### Defined in
+
+[core/src/core/types.ts:104](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L104)
+
+---
+
+### GROQ
+
+> **GROQ**: `"groq"`
+
+#### Defined in
+
+[core/src/core/types.ts:105](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L105)
+
+---
+
+### LLAMACLOUD
+
+> **LLAMACLOUD**: `"llama_cloud"`
+
+#### Defined in
+
+[core/src/core/types.ts:106](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L106)
+
+---
+
+### LLAMALOCAL
+
+> **LLAMALOCAL**: `"llama_local"`
+
+#### Defined in
+
+[core/src/core/types.ts:107](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L107)
+
+---
+
+### OPENAI
+
+> **OPENAI**: `"openai"`
+
+#### Defined in
+
+[core/src/core/types.ts:102](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L102)
+
+---
+
+### REDPILL
+
+> **REDPILL**: `"redpill"`
+
+#### Defined in
+
+[core/src/core/types.ts:110](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L110)
diff --git a/docs/docs/api/functions/addHeader.md b/docs/docs/api/functions/addHeader.md
new file mode 100644
index 00000000000..b93ea9b2445
--- /dev/null
+++ b/docs/docs/api/functions/addHeader.md
@@ -0,0 +1,40 @@
+# Function: addHeader()
+
+> **addHeader**(`header`, `body`): `string`
+
+Adds a header to a body of text.
+
+This function takes a header string and a body string and returns a new string with the header prepended to the body.
+If the body string is empty, the header is returned as is.
+
+## Parameters
+
+• **header**: `string`
+
+The header to add to the body.
+
+• **body**: `string`
+
+The body to which to add the header.
+
+## Returns
+
+`string`
+
+The body with the header prepended.
+
+## Example
+
+```ts
+// Given a header and a body
+const header = "Header";
+const body = "Body";
+
+// Adding the header to the body will result in:
+// "Header\nBody"
+const text = addHeader(header, body);
+```
+
+## Defined in
+
+[core/src/core/context.ts:58](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/context.ts#L58)
diff --git a/docs/docs/api/functions/buyToken.md b/docs/docs/api/functions/buyToken.md
index 16716c149b8..98dfb5f0d55 100644
--- a/docs/docs/api/functions/buyToken.md
+++ b/docs/docs/api/functions/buyToken.md
@@ -28,4 +28,4 @@
 
 ## Defined in
 
-[core/src/actions/pumpfun.ts:119](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/pumpfun.ts#L119)
+[core/src/actions/pumpfun.ts:119](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/pumpfun.ts#L119)
diff --git a/docs/docs/api/functions/composeActionExamples.md b/docs/docs/api/functions/composeActionExamples.md
new file mode 100644
index 00000000000..8ba5371a578
--- /dev/null
+++ b/docs/docs/api/functions/composeActionExamples.md
@@ -0,0 +1,26 @@
+# Function: composeActionExamples()
+
+> **composeActionExamples**(`actionsData`, `count`): `string`
+
+Composes a set of example conversations based on provided actions and a specified count.
+It randomly selects examples from the provided actions and formats them with generated names.
+
+## Parameters
+
+• **actionsData**: [`Action`](../interfaces/Action.md)[]
+
+An array of `Action` objects from which to draw examples.
+
+• **count**: `number`
+
+The number of examples to generate.
+
+## Returns
+
+`string`
+
+A string containing formatted examples of conversations.
+
+## Defined in
+
+[core/src/core/actions.ts:18](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/actions.ts#L18)
diff --git a/docs/docs/api/functions/composeContext.md b/docs/docs/api/functions/composeContext.md
new file mode 100644
index 00000000000..df9064caa56
--- /dev/null
+++ b/docs/docs/api/functions/composeContext.md
@@ -0,0 +1,45 @@
+# Function: composeContext()
+
+> **composeContext**(`params`): `string`
+
+Composes a context string by replacing placeholders in a template with corresponding values from the state.
+
+This function takes a template string with placeholders in the format `{{placeholder}}` and a state object.
+It replaces each placeholder with the value from the state object that matches the placeholder's name.
+If a matching key is not found in the state object for a given placeholder, the placeholder is replaced with an empty string.
+
+## Parameters
+
+• **params**
+
+The parameters for composing the context.
+
+• **params.state**: [`State`](../interfaces/State.md)
+
+The state object containing values to replace the placeholders in the template.
+
+• **params.template**: `string`
+
+The template string containing placeholders to be replaced with state values.
+
+## Returns
+
+`string`
+
+The composed context string with placeholders replaced by corresponding state values.
+
+## Example
+
+```ts
+// Given a state object and a template
+const state = { userName: "Alice", userAge: 30 };
+const template = "Hello, {{userName}}! You are {{userAge}} years old";
+
+// Composing the context will result in:
+// "Hello, Alice! You are 30 years old."
+const context = composeContext({ state, template });
+```
+
+## Defined in
+
+[core/src/core/context.ts:24](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/context.ts#L24)
diff --git a/docs/docs/api/functions/createAgentRuntime.md b/docs/docs/api/functions/createAgentRuntime.md
new file mode 100644
index 00000000000..ef33390ee9a
--- /dev/null
+++ b/docs/docs/api/functions/createAgentRuntime.md
@@ -0,0 +1,21 @@
+# Function: createAgentRuntime()
+
+> **createAgentRuntime**(`character`, `db`, `token`, `configPath`): `Promise`\<[`AgentRuntime`](../classes/AgentRuntime.md)\>
+
+## Parameters
+
+• **character**: [`Character`](../type-aliases/Character.md)
+
+• **db**: `any`
+
+• **token**: `string`
+
+• **configPath**: `string` = `"./elizaConfig.yaml"`
+
+## Returns
+
+`Promise`\<[`AgentRuntime`](../classes/AgentRuntime.md)\>
+
+## Defined in
+
+[core/src/cli/index.ts:139](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/cli/index.ts#L139)
diff --git a/docs/docs/api/functions/createAndBuyToken.md b/docs/docs/api/functions/createAndBuyToken.md
index f33f2e3282d..06add699226 100644
--- a/docs/docs/api/functions/createAndBuyToken.md
+++ b/docs/docs/api/functions/createAndBuyToken.md
@@ -32,4 +32,4 @@
 
 ## Defined in
 
-[core/src/actions/pumpfun.ts:51](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/pumpfun.ts#L51)
+[core/src/actions/pumpfun.ts:51](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/pumpfun.ts#L51)
diff --git a/docs/docs/api/functions/createDirectRuntime.md b/docs/docs/api/functions/createDirectRuntime.md
new file mode 100644
index 00000000000..256a9cf0b05
--- /dev/null
+++ b/docs/docs/api/functions/createDirectRuntime.md
@@ -0,0 +1,21 @@
+# Function: createDirectRuntime()
+
+> **createDirectRuntime**(`character`, `db`, `token`, `configPath`): `Promise`\<[`AgentRuntime`](../classes/AgentRuntime.md)\>
+
+## Parameters
+
+• **character**: [`Character`](../type-aliases/Character.md)
+
+• **db**: `any`
+
+• **token**: `string`
+
+• **configPath**: `string` = `"./elizaConfig.yaml"`
+
+## Returns
+
+`Promise`\<[`AgentRuntime`](../classes/AgentRuntime.md)\>
+
+## Defined in
+
+[core/src/cli/index.ts:174](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/cli/index.ts#L174)
diff --git a/docs/docs/api/functions/createGoal.md b/docs/docs/api/functions/createGoal.md
new file mode 100644
index 00000000000..afa2fc3f4f6
--- /dev/null
+++ b/docs/docs/api/functions/createGoal.md
@@ -0,0 +1,19 @@
+# Function: createGoal()
+
+> **createGoal**(`__namedParameters`): `Promise`\<`void`\>
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.goal**: [`Goal`](../interfaces/Goal.md)
+
+• **\_\_namedParameters.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Returns
+
+`Promise`\<`void`\>
+
+## Defined in
+
+[core/src/core/goals.ts:54](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/goals.ts#L54)
diff --git a/docs/docs/api/functions/createRelationship.md b/docs/docs/api/functions/createRelationship.md
new file mode 100644
index 00000000000..431a17e4a05
--- /dev/null
+++ b/docs/docs/api/functions/createRelationship.md
@@ -0,0 +1,21 @@
+# Function: createRelationship()
+
+> **createRelationship**(`__namedParameters`): `Promise`\<`boolean`\>
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+• **\_\_namedParameters.userA**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **\_\_namedParameters.userB**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+## Returns
+
+`Promise`\<`boolean`\>
+
+## Defined in
+
+[core/src/core/relationships.ts:3](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/relationships.ts#L3)
diff --git a/docs/docs/api/functions/embed.md b/docs/docs/api/functions/embed.md
new file mode 100644
index 00000000000..9c9492cbc5b
--- /dev/null
+++ b/docs/docs/api/functions/embed.md
@@ -0,0 +1,23 @@
+# Function: embed()
+
+> **embed**(`runtime`, `input`): `Promise`\<`number`[]\>
+
+Send a message to the OpenAI API for embedding.
+
+## Parameters
+
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+• **input**: `string`
+
+The input to be embedded.
+
+## Returns
+
+`Promise`\<`number`[]\>
+
+The embedding of the input.
+
+## Defined in
+
+[core/src/core/embedding.ts:9](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/embedding.ts#L9)
diff --git a/docs/docs/api/functions/formatActionNames.md b/docs/docs/api/functions/formatActionNames.md
new file mode 100644
index 00000000000..e2b189af443
--- /dev/null
+++ b/docs/docs/api/functions/formatActionNames.md
@@ -0,0 +1,21 @@
+# Function: formatActionNames()
+
+> **formatActionNames**(`actions`): `string`
+
+Formats the names of the provided actions into a comma-separated string.
+
+## Parameters
+
+• **actions**: [`Action`](../interfaces/Action.md)[]
+
+An array of `Action` objects from which to extract names.
+
+## Returns
+
+`string`
+
+A comma-separated string of action names.
+
+## Defined in
+
+[core/src/core/actions.ts:54](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/actions.ts#L54)
diff --git a/docs/docs/api/functions/formatActions.md b/docs/docs/api/functions/formatActions.md
new file mode 100644
index 00000000000..9b181d7bb39
--- /dev/null
+++ b/docs/docs/api/functions/formatActions.md
@@ -0,0 +1,21 @@
+# Function: formatActions()
+
+> **formatActions**(`actions`): `string`
+
+Formats the provided actions into a detailed string listing each action's name and description, separated by commas and newlines.
+
+## Parameters
+
+• **actions**: [`Action`](../interfaces/Action.md)[]
+
+An array of `Action` objects to format.
+
+## Returns
+
+`string`
+
+A detailed string of actions, including names and descriptions.
+
+## Defined in
+
+[core/src/core/actions.ts:66](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/actions.ts#L66)
diff --git a/docs/docs/api/functions/formatActors.md b/docs/docs/api/functions/formatActors.md
new file mode 100644
index 00000000000..43b2112243e
--- /dev/null
+++ b/docs/docs/api/functions/formatActors.md
@@ -0,0 +1,23 @@
+# Function: formatActors()
+
+> **formatActors**(`actors`): `string`
+
+Format actors into a string
+
+## Parameters
+
+• **actors**
+
+list of actors
+
+• **actors.actors**: [`Actor`](../interfaces/Actor.md)[]
+
+## Returns
+
+`string`
+
+string
+
+## Defined in
+
+[core/src/core/messages.ts:45](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/messages.ts#L45)
diff --git a/docs/docs/api/functions/formatEvaluatorExampleDescriptions.md b/docs/docs/api/functions/formatEvaluatorExampleDescriptions.md
new file mode 100644
index 00000000000..3c3e677ecf4
--- /dev/null
+++ b/docs/docs/api/functions/formatEvaluatorExampleDescriptions.md
@@ -0,0 +1,21 @@
+# Function: formatEvaluatorExampleDescriptions()
+
+> **formatEvaluatorExampleDescriptions**(`evaluators`): `string`
+
+Generates a string summarizing the descriptions of each evaluator example.
+
+## Parameters
+
+• **evaluators**: [`Evaluator`](../interfaces/Evaluator.md)[]
+
+An array of evaluator objects, each containing examples.
+
+## Returns
+
+`string`
+
+A string that summarizes the descriptions for each evaluator example, formatted with the evaluator name, example number, and description.
+
+## Defined in
+
+[core/src/core/evaluators.ts:114](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/evaluators.ts#L114)
diff --git a/docs/docs/api/functions/formatEvaluatorExamples.md b/docs/docs/api/functions/formatEvaluatorExamples.md
new file mode 100644
index 00000000000..b0e29b29d8c
--- /dev/null
+++ b/docs/docs/api/functions/formatEvaluatorExamples.md
@@ -0,0 +1,21 @@
+# Function: formatEvaluatorExamples()
+
+> **formatEvaluatorExamples**(`evaluators`): `string`
+
+Formats evaluator examples into a readable string, replacing placeholders with generated names.
+
+## Parameters
+
+• **evaluators**: [`Evaluator`](../interfaces/Evaluator.md)[]
+
+An array of evaluator objects, each containing examples to format.
+
+## Returns
+
+`string`
+
+A string that presents each evaluator example in a structured format, including context, messages, and outcomes, with placeholders replaced by generated names.
+
+## Defined in
+
+[core/src/core/evaluators.ts:59](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/evaluators.ts#L59)
diff --git a/docs/docs/api/functions/formatEvaluatorNames.md b/docs/docs/api/functions/formatEvaluatorNames.md
new file mode 100644
index 00000000000..f6786782383
--- /dev/null
+++ b/docs/docs/api/functions/formatEvaluatorNames.md
@@ -0,0 +1,21 @@
+# Function: formatEvaluatorNames()
+
+> **formatEvaluatorNames**(`evaluators`): `string`
+
+Formats the names of evaluators into a comma-separated list, each enclosed in single quotes.
+
+## Parameters
+
+• **evaluators**: [`Evaluator`](../interfaces/Evaluator.md)[]
+
+An array of evaluator objects.
+
+## Returns
+
+`string`
+
+A string that concatenates the names of all evaluators, each enclosed in single quotes and separated by commas.
+
+## Defined in
+
+[core/src/core/evaluators.ts:34](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/evaluators.ts#L34)
diff --git a/docs/docs/api/functions/formatEvaluators.md b/docs/docs/api/functions/formatEvaluators.md
new file mode 100644
index 00000000000..bdabc314acf
--- /dev/null
+++ b/docs/docs/api/functions/formatEvaluators.md
@@ -0,0 +1,21 @@
+# Function: formatEvaluators()
+
+> **formatEvaluators**(`evaluators`): `string`
+
+Formats evaluator details into a string, including both the name and description of each evaluator.
+
+## Parameters
+
+• **evaluators**: [`Evaluator`](../interfaces/Evaluator.md)[]
+
+An array of evaluator objects.
+
+## Returns
+
+`string`
+
+A string that concatenates the name and description of each evaluator, separated by a colon and a newline character.
+
+## Defined in
+
+[core/src/core/evaluators.ts:45](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/evaluators.ts#L45)
diff --git a/docs/docs/api/functions/formatGoalsAsString.md b/docs/docs/api/functions/formatGoalsAsString.md
new file mode 100644
index 00000000000..abf951cbdef
--- /dev/null
+++ b/docs/docs/api/functions/formatGoalsAsString.md
@@ -0,0 +1,17 @@
+# Function: formatGoalsAsString()
+
+> **formatGoalsAsString**(`__namedParameters`): `string`
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.goals**: [`Goal`](../interfaces/Goal.md)[]
+
+## Returns
+
+`string`
+
+## Defined in
+
+[core/src/core/goals.ts:29](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/goals.ts#L29)
diff --git a/docs/docs/api/functions/formatMessages.md b/docs/docs/api/functions/formatMessages.md
new file mode 100644
index 00000000000..7dd245834e5
--- /dev/null
+++ b/docs/docs/api/functions/formatMessages.md
@@ -0,0 +1,23 @@
+# Function: formatMessages()
+
+> **formatMessages**(`__namedParameters`): `string`
+
+Format messages into a string
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.actors**: [`Actor`](../interfaces/Actor.md)[]
+
+• **\_\_namedParameters.messages**: [`Memory`](../interfaces/Memory.md)[]
+
+## Returns
+
+`string`
+
+string
+
+## Defined in
+
+[core/src/core/messages.ts:60](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/messages.ts#L60)
diff --git a/docs/docs/api/functions/formatPosts.md b/docs/docs/api/functions/formatPosts.md
new file mode 100644
index 00000000000..565fc5d3363
--- /dev/null
+++ b/docs/docs/api/functions/formatPosts.md
@@ -0,0 +1,21 @@
+# Function: formatPosts()
+
+> **formatPosts**(`__namedParameters`): `string`
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.actors**: [`Actor`](../interfaces/Actor.md)[]
+
+• **\_\_namedParameters.conversationHeader?**: `boolean` = `true`
+
+• **\_\_namedParameters.messages**: [`Memory`](../interfaces/Memory.md)[]
+
+## Returns
+
+`string`
+
+## Defined in
+
+[core/src/core/posts.ts:4](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/posts.ts#L4)
diff --git a/docs/docs/api/functions/formatRelationships.md b/docs/docs/api/functions/formatRelationships.md
new file mode 100644
index 00000000000..cd1d8dd7544
--- /dev/null
+++ b/docs/docs/api/functions/formatRelationships.md
@@ -0,0 +1,19 @@
+# Function: formatRelationships()
+
+> **formatRelationships**(`__namedParameters`): `Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+• **\_\_namedParameters.userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+## Returns
+
+`Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+## Defined in
+
+[core/src/core/relationships.ts:43](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/relationships.ts#L43)
diff --git a/docs/docs/api/functions/formatTimestamp.md b/docs/docs/api/functions/formatTimestamp.md
new file mode 100644
index 00000000000..a33b4ceed5c
--- /dev/null
+++ b/docs/docs/api/functions/formatTimestamp.md
@@ -0,0 +1,15 @@
+# Function: formatTimestamp()
+
+> **formatTimestamp**(`messageDate`): `string`
+
+## Parameters
+
+• **messageDate**: `number`
+
+## Returns
+
+`string`
+
+## Defined in
+
+[core/src/core/messages.ts:94](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/messages.ts#L94)
diff --git a/docs/docs/api/functions/generateCaption.md b/docs/docs/api/functions/generateCaption.md
index 85ca7765c4c..3f9b6eaea67 100644
--- a/docs/docs/api/functions/generateCaption.md
+++ b/docs/docs/api/functions/generateCaption.md
@@ -8,7 +8,7 @@
 
 • **data.imageUrl**: `string`
 
-• **runtime**: `IAgentRuntime`
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
 
 ## Returns
 
@@ -24,4 +24,4 @@
 
 ## Defined in
 
-[core/src/actions/imageGenerationUtils.ts:90](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/imageGenerationUtils.ts#L90)
+[core/src/actions/imageGenerationUtils.ts:90](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/imageGenerationUtils.ts#L90)
diff --git a/docs/docs/api/functions/generateImage.md b/docs/docs/api/functions/generateImage.md
index 2361629f5c7..e5b91938b03 100644
--- a/docs/docs/api/functions/generateImage.md
+++ b/docs/docs/api/functions/generateImage.md
@@ -14,7 +14,7 @@
 
 • **data.width**: `number`
 
-• **runtime**: `IAgentRuntime`
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
 
 ## Returns
 
@@ -34,4 +34,4 @@
 
 ## Defined in
 
-[core/src/actions/imageGenerationUtils.ts:8](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/imageGenerationUtils.ts#L8)
+[core/src/actions/imageGenerationUtils.ts:8](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/imageGenerationUtils.ts#L8)
diff --git a/docs/docs/api/functions/generateMessageResponse.md b/docs/docs/api/functions/generateMessageResponse.md
new file mode 100644
index 00000000000..90542895ec8
--- /dev/null
+++ b/docs/docs/api/functions/generateMessageResponse.md
@@ -0,0 +1,29 @@
+# Function: generateMessageResponse()
+
+> **generateMessageResponse**(`opts`): `Promise`\<[`Content`](../interfaces/Content.md)\>
+
+Send a message to the model for generateText.
+
+## Parameters
+
+• **opts**
+
+The options for the generateText request.
+
+• **opts.context**: `string`
+
+The context of the message to be completed.
+
+• **opts.modelClass**: `string`
+
+• **opts.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Returns
+
+`Promise`\<[`Content`](../interfaces/Content.md)\>
+
+The completed message.
+
+## Defined in
+
+[core/src/core/generation.ts:522](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/generation.ts#L522)
diff --git a/docs/docs/api/functions/generateObject.md b/docs/docs/api/functions/generateObject.md
new file mode 100644
index 00000000000..9d1dbf9eea2
--- /dev/null
+++ b/docs/docs/api/functions/generateObject.md
@@ -0,0 +1,21 @@
+# Function: generateObject()
+
+> **generateObject**(`__namedParameters`): `Promise`\<`any`\>
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.context**: `string`
+
+• **\_\_namedParameters.modelClass**: `string`
+
+• **\_\_namedParameters.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Returns
+
+`Promise`\<`any`\>
+
+## Defined in
+
+[core/src/core/generation.ts:438](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/generation.ts#L438)
diff --git a/docs/docs/api/functions/generateObjectArray.md b/docs/docs/api/functions/generateObjectArray.md
new file mode 100644
index 00000000000..af24589e74d
--- /dev/null
+++ b/docs/docs/api/functions/generateObjectArray.md
@@ -0,0 +1,21 @@
+# Function: generateObjectArray()
+
+> **generateObjectArray**(`__namedParameters`): `Promise`\<`any`[]\>
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.context**: `string`
+
+• **\_\_namedParameters.modelClass**: `string`
+
+• **\_\_namedParameters.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Returns
+
+`Promise`\<`any`[]\>
+
+## Defined in
+
+[core/src/core/generation.ts:474](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/generation.ts#L474)
diff --git a/docs/docs/api/functions/generateShouldRespond.md b/docs/docs/api/functions/generateShouldRespond.md
new file mode 100644
index 00000000000..5f73dfa705e
--- /dev/null
+++ b/docs/docs/api/functions/generateShouldRespond.md
@@ -0,0 +1,29 @@
+# Function: generateShouldRespond()
+
+> **generateShouldRespond**(`opts`): `Promise`\<`"RESPOND"` \| `"IGNORE"` \| `"STOP"` \| `null`\>
+
+Sends a message to the model to determine if it should respond to the given context.
+
+## Parameters
+
+• **opts**
+
+The options for the generateText request
+
+• **opts.context**: `string`
+
+The context to evaluate for response
+
+• **opts.modelClass**: `string`
+
+• **opts.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Returns
+
+`Promise`\<`"RESPOND"` \| `"IGNORE"` \| `"STOP"` \| `null`\>
+
+Promise resolving to "RESPOND", "IGNORE", "STOP" or null
+
+## Defined in
+
+[core/src/core/generation.ts:249](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/generation.ts#L249)
diff --git a/docs/docs/api/functions/generateText.md b/docs/docs/api/functions/generateText.md
new file mode 100644
index 00000000000..4c5c6da9974
--- /dev/null
+++ b/docs/docs/api/functions/generateText.md
@@ -0,0 +1,33 @@
+# Function: generateText()
+
+> **generateText**(`opts`): `Promise`\<`string`\>
+
+Send a message to the model for a text generateText - receive a string back and parse how you'd like
+
+## Parameters
+
+• **opts**
+
+The options for the generateText request.
+
+• **opts.context**: `string`
+
+The context of the message to be completed.
+
+• **opts.modelClass**: `string`
+
+• **opts.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+• **opts.stop?**: `string`[]
+
+A list of strings to stop the generateText at.
+
+## Returns
+
+`Promise`\<`string`\>
+
+The completed message.
+
+## Defined in
+
+[core/src/core/generation.ts:30](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/generation.ts#L30)
diff --git a/docs/docs/api/functions/generateTextArray.md b/docs/docs/api/functions/generateTextArray.md
new file mode 100644
index 00000000000..8aa1618631a
--- /dev/null
+++ b/docs/docs/api/functions/generateTextArray.md
@@ -0,0 +1,29 @@
+# Function: generateTextArray()
+
+> **generateTextArray**(`opts`): `Promise`\<`string`[]\>
+
+Send a message to the model and parse the response as a string array
+
+## Parameters
+
+• **opts**
+
+The options for the generateText request
+
+• **opts.context**: `string`
+
+The context/prompt to send to the model
+
+• **opts.modelClass**: `string`
+
+• **opts.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Returns
+
+`Promise`\<`string`[]\>
+
+Promise resolving to an array of strings parsed from the model's response
+
+## Defined in
+
+[core/src/core/generation.ts:402](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/generation.ts#L402)
diff --git a/docs/docs/api/functions/generateTrueOrFalse.md b/docs/docs/api/functions/generateTrueOrFalse.md
new file mode 100644
index 00000000000..55a73fb8203
--- /dev/null
+++ b/docs/docs/api/functions/generateTrueOrFalse.md
@@ -0,0 +1,29 @@
+# Function: generateTrueOrFalse()
+
+> **generateTrueOrFalse**(`opts`): `Promise`\<`boolean`\>
+
+Sends a message to the model and parses the response as a boolean value
+
+## Parameters
+
+• **opts**
+
+The options for the generateText request
+
+• **opts.context**: `string` = `""`
+
+The context to evaluate for the boolean response
+
+• **opts.modelClass**: `string`
+
+• **opts.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Returns
+
+`Promise`\<`boolean`\>
+
+Promise resolving to a boolean value parsed from the model's response
+
+## Defined in
+
+[core/src/core/generation.ts:350](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/generation.ts#L350)
diff --git a/docs/docs/api/functions/getActorDetails.md b/docs/docs/api/functions/getActorDetails.md
new file mode 100644
index 00000000000..fd1308e231a
--- /dev/null
+++ b/docs/docs/api/functions/getActorDetails.md
@@ -0,0 +1,21 @@
+# Function: getActorDetails()
+
+> **getActorDetails**(`__namedParameters`): `Promise`\<[`Actor`](../interfaces/Actor.md)[]\>
+
+Get details for a list of actors.
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **\_\_namedParameters.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Returns
+
+`Promise`\<[`Actor`](../interfaces/Actor.md)[]\>
+
+## Defined in
+
+[core/src/core/messages.ts:12](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/messages.ts#L12)
diff --git a/docs/docs/api/functions/getEndpoint.md b/docs/docs/api/functions/getEndpoint.md
new file mode 100644
index 00000000000..80d526b74a8
--- /dev/null
+++ b/docs/docs/api/functions/getEndpoint.md
@@ -0,0 +1,15 @@
+# Function: getEndpoint()
+
+> **getEndpoint**(`provider`): `any`
+
+## Parameters
+
+• **provider**: [`ModelProvider`](../enumerations/ModelProvider.md)
+
+## Returns
+
+`any`
+
+## Defined in
+
+[core/src/core/models.ts:178](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/models.ts#L178)
diff --git a/docs/docs/api/functions/getGoals.md b/docs/docs/api/functions/getGoals.md
new file mode 100644
index 00000000000..145fbd9bed4
--- /dev/null
+++ b/docs/docs/api/functions/getGoals.md
@@ -0,0 +1,25 @@
+# Function: getGoals()
+
+> **getGoals**(`__namedParameters`): `Promise`\<[`Goal`](../interfaces/Goal.md)[]\>
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.count?**: `number` = `5`
+
+• **\_\_namedParameters.onlyInProgress?**: `boolean` = `true`
+
+• **\_\_namedParameters.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **\_\_namedParameters.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+• **\_\_namedParameters.userId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+## Returns
+
+`Promise`\<[`Goal`](../interfaces/Goal.md)[]\>
+
+## Defined in
+
+[core/src/core/goals.ts:8](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/goals.ts#L8)
diff --git a/docs/docs/api/functions/getImageGenModel.md b/docs/docs/api/functions/getImageGenModel.md
new file mode 100644
index 00000000000..cb905f53167
--- /dev/null
+++ b/docs/docs/api/functions/getImageGenModel.md
@@ -0,0 +1,15 @@
+# Function: getImageGenModel()
+
+> **getImageGenModel**(`model`): `object` \| `object`
+
+## Parameters
+
+• **model**: [`ImageGenModel`](../enumerations/ImageGenModel.md)
+
+## Returns
+
+`object` \| `object`
+
+## Defined in
+
+[core/src/core/imageGenModels.ts:17](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/imageGenModels.ts#L17)
diff --git a/docs/docs/api/functions/getModel.md b/docs/docs/api/functions/getModel.md
new file mode 100644
index 00000000000..9c980265b4e
--- /dev/null
+++ b/docs/docs/api/functions/getModel.md
@@ -0,0 +1,17 @@
+# Function: getModel()
+
+> **getModel**(`provider`, `type`): `any`
+
+## Parameters
+
+• **provider**: [`ModelProvider`](../enumerations/ModelProvider.md)
+
+• **type**: [`ModelClass`](../enumerations/ModelClass.md)
+
+## Returns
+
+`any`
+
+## Defined in
+
+[core/src/core/models.ts:174](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/models.ts#L174)
diff --git a/docs/docs/api/functions/getProviders.md b/docs/docs/api/functions/getProviders.md
new file mode 100644
index 00000000000..ae5e5b56b6b
--- /dev/null
+++ b/docs/docs/api/functions/getProviders.md
@@ -0,0 +1,29 @@
+# Function: getProviders()
+
+> **getProviders**(`runtime`, `message`, `state`?): `Promise`\<`string`\>
+
+Formats provider outputs into a string which can be injected into the context.
+
+## Parameters
+
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+The AgentRuntime object.
+
+• **message**: [`Memory`](../interfaces/Memory.md)
+
+The incoming message object.
+
+• **state?**: [`State`](../interfaces/State.md)
+
+The current state object.
+
+## Returns
+
+`Promise`\<`string`\>
+
+A string that concatenates the outputs of each provider.
+
+## Defined in
+
+[core/src/core/providers.ts:13](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/providers.ts#L13)
diff --git a/docs/docs/api/functions/getRelationship.md b/docs/docs/api/functions/getRelationship.md
new file mode 100644
index 00000000000..53db6c21ee6
--- /dev/null
+++ b/docs/docs/api/functions/getRelationship.md
@@ -0,0 +1,21 @@
+# Function: getRelationship()
+
+> **getRelationship**(`__namedParameters`): `Promise`\<[`Relationship`](../interfaces/Relationship.md)\>
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+• **\_\_namedParameters.userA**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **\_\_namedParameters.userB**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+## Returns
+
+`Promise`\<[`Relationship`](../interfaces/Relationship.md)\>
+
+## Defined in
+
+[core/src/core/relationships.ts:18](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/relationships.ts#L18)
diff --git a/docs/docs/api/functions/getRelationships.md b/docs/docs/api/functions/getRelationships.md
new file mode 100644
index 00000000000..c4b451730c6
--- /dev/null
+++ b/docs/docs/api/functions/getRelationships.md
@@ -0,0 +1,19 @@
+# Function: getRelationships()
+
+> **getRelationships**(`__namedParameters`): `Promise`\<[`Relationship`](../interfaces/Relationship.md)[]\>
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+• **\_\_namedParameters.userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+## Returns
+
+`Promise`\<[`Relationship`](../interfaces/Relationship.md)[]\>
+
+## Defined in
+
+[core/src/core/relationships.ts:33](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/relationships.ts#L33)
diff --git a/docs/docs/api/functions/getTokenForProvider.md b/docs/docs/api/functions/getTokenForProvider.md
new file mode 100644
index 00000000000..0177abf0f69
--- /dev/null
+++ b/docs/docs/api/functions/getTokenForProvider.md
@@ -0,0 +1,17 @@
+# Function: getTokenForProvider()
+
+> **getTokenForProvider**(`provider`, `character`): `string`
+
+## Parameters
+
+• **provider**: [`ModelProvider`](../enumerations/ModelProvider.md)
+
+• **character**: [`Character`](../type-aliases/Character.md)
+
+## Returns
+
+`string`
+
+## Defined in
+
+[core/src/cli/index.ts:105](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/cli/index.ts#L105)
diff --git a/docs/docs/api/functions/initializeClients.md b/docs/docs/api/functions/initializeClients.md
new file mode 100644
index 00000000000..9549c70a104
--- /dev/null
+++ b/docs/docs/api/functions/initializeClients.md
@@ -0,0 +1,17 @@
+# Function: initializeClients()
+
+> **initializeClients**(`character`, `runtime`): `Promise`\<`any`[]\>
+
+## Parameters
+
+• **character**: [`Character`](../type-aliases/Character.md)
+
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Returns
+
+`Promise`\<`any`[]\>
+
+## Defined in
+
+[core/src/cli/index.ts:21](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/cli/index.ts#L21)
diff --git a/docs/docs/api/functions/initializeDatabase.md b/docs/docs/api/functions/initializeDatabase.md
new file mode 100644
index 00000000000..d7d58df27f6
--- /dev/null
+++ b/docs/docs/api/functions/initializeDatabase.md
@@ -0,0 +1,11 @@
+# Function: initializeDatabase()
+
+> **initializeDatabase**(): [`PostgresDatabaseAdapter`](../classes/PostgresDatabaseAdapter.md) \| [`SqliteDatabaseAdapter`](../classes/SqliteDatabaseAdapter.md)
+
+## Returns
+
+[`PostgresDatabaseAdapter`](../classes/PostgresDatabaseAdapter.md) \| [`SqliteDatabaseAdapter`](../classes/SqliteDatabaseAdapter.md)
+
+## Defined in
+
+[core/src/cli/index.ts:129](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/cli/index.ts#L129)
diff --git a/docs/docs/api/functions/isCreateAndBuyContent.md b/docs/docs/api/functions/isCreateAndBuyContent.md
index e0d1735e59f..da8cdbee1a2 100644
--- a/docs/docs/api/functions/isCreateAndBuyContent.md
+++ b/docs/docs/api/functions/isCreateAndBuyContent.md
@@ -4,7 +4,7 @@
 
 ## Parameters
 
-• **runtime**: `IAgentRuntime`
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
 
 • **content**: `any`
 
@@ -14,4 +14,4 @@
 
 ## Defined in
 
-[core/src/actions/pumpfun.ts:33](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/pumpfun.ts#L33)
+[core/src/actions/pumpfun.ts:33](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/pumpfun.ts#L33)
diff --git a/docs/docs/api/functions/loadActionConfigs.md b/docs/docs/api/functions/loadActionConfigs.md
new file mode 100644
index 00000000000..3348a03d815
--- /dev/null
+++ b/docs/docs/api/functions/loadActionConfigs.md
@@ -0,0 +1,15 @@
+# Function: loadActionConfigs()
+
+> **loadActionConfigs**(`configPath`): `ActionConfig`[]
+
+## Parameters
+
+• **configPath**: `string`
+
+## Returns
+
+`ActionConfig`[]
+
+## Defined in
+
+[core/src/cli/config.ts:15](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/cli/config.ts#L15)
diff --git a/docs/docs/api/functions/loadCharacters.md b/docs/docs/api/functions/loadCharacters.md
new file mode 100644
index 00000000000..43f4922c042
--- /dev/null
+++ b/docs/docs/api/functions/loadCharacters.md
@@ -0,0 +1,15 @@
+# Function: loadCharacters()
+
+> **loadCharacters**(`charactersArg`): [`Character`](../type-aliases/Character.md)[]
+
+## Parameters
+
+• **charactersArg**: `string`
+
+## Returns
+
+[`Character`](../type-aliases/Character.md)[]
+
+## Defined in
+
+[core/src/cli/index.ts:70](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/cli/index.ts#L70)
diff --git a/docs/docs/api/functions/loadCustomActions.md b/docs/docs/api/functions/loadCustomActions.md
new file mode 100644
index 00000000000..c1d81f66a46
--- /dev/null
+++ b/docs/docs/api/functions/loadCustomActions.md
@@ -0,0 +1,15 @@
+# Function: loadCustomActions()
+
+> **loadCustomActions**(`actionConfigs`): `Promise`\<[`Action`](../interfaces/Action.md)[]\>
+
+## Parameters
+
+• **actionConfigs**: `ActionConfig`[]
+
+## Returns
+
+`Promise`\<[`Action`](../interfaces/Action.md)[]\>
+
+## Defined in
+
+[core/src/cli/config.ts:26](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/cli/config.ts#L26)
diff --git a/docs/docs/api/functions/parseArguments.md b/docs/docs/api/functions/parseArguments.md
new file mode 100644
index 00000000000..b70bd97354a
--- /dev/null
+++ b/docs/docs/api/functions/parseArguments.md
@@ -0,0 +1,11 @@
+# Function: parseArguments()
+
+> **parseArguments**(): `Arguments`
+
+## Returns
+
+`Arguments`
+
+## Defined in
+
+[core/src/cli/index.ts:46](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/cli/index.ts#L46)
diff --git a/docs/docs/api/functions/retrieveCachedEmbedding.md b/docs/docs/api/functions/retrieveCachedEmbedding.md
new file mode 100644
index 00000000000..31922d1ebcb
--- /dev/null
+++ b/docs/docs/api/functions/retrieveCachedEmbedding.md
@@ -0,0 +1,17 @@
+# Function: retrieveCachedEmbedding()
+
+> **retrieveCachedEmbedding**(`runtime`, `input`): `Promise`\<`number`[]\>
+
+## Parameters
+
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+• **input**: `string`
+
+## Returns
+
+`Promise`\<`number`[]\>
+
+## Defined in
+
+[core/src/core/embedding.ts:65](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/embedding.ts#L65)
diff --git a/docs/docs/api/functions/sellToken.md b/docs/docs/api/functions/sellToken.md
index 4f46a2303c5..c275a4ae4ed 100644
--- a/docs/docs/api/functions/sellToken.md
+++ b/docs/docs/api/functions/sellToken.md
@@ -28,4 +28,4 @@
 
 ## Defined in
 
-[core/src/actions/pumpfun.ts:167](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/pumpfun.ts#L167)
+[core/src/actions/pumpfun.ts:167](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/pumpfun.ts#L167)
diff --git a/docs/docs/api/functions/splitChunks.md b/docs/docs/api/functions/splitChunks.md
new file mode 100644
index 00000000000..7e8758b5330
--- /dev/null
+++ b/docs/docs/api/functions/splitChunks.md
@@ -0,0 +1,33 @@
+# Function: splitChunks()
+
+> **splitChunks**(`runtime`, `content`, `chunkSize`, `bleed`, `modelClass`): `Promise`\<`string`[]\>
+
+Splits content into chunks of specified size with optional overlapping bleed sections
+
+## Parameters
+
+• **runtime**: `any`
+
+• **content**: `string`
+
+The text content to split into chunks
+
+• **chunkSize**: `number`
+
+The maximum size of each chunk in tokens
+
+• **bleed**: `number` = `100`
+
+Number of characters to overlap between chunks (default: 100)
+
+• **modelClass**: `string`
+
+## Returns
+
+`Promise`\<`string`[]\>
+
+Promise resolving to array of text chunks with bleed sections
+
+## Defined in
+
+[core/src/core/generation.ts:302](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/generation.ts#L302)
diff --git a/docs/docs/api/functions/startDiscord.md b/docs/docs/api/functions/startDiscord.md
new file mode 100644
index 00000000000..1c46e116f36
--- /dev/null
+++ b/docs/docs/api/functions/startDiscord.md
@@ -0,0 +1,15 @@
+# Function: startDiscord()
+
+> **startDiscord**(`runtime`): [`DiscordClient`](../classes/DiscordClient.md)
+
+## Parameters
+
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Returns
+
+[`DiscordClient`](../classes/DiscordClient.md)
+
+## Defined in
+
+[core/src/cli/index.ts:211](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/cli/index.ts#L211)
diff --git a/docs/docs/api/functions/startTelegram.md b/docs/docs/api/functions/startTelegram.md
new file mode 100644
index 00000000000..f70aa9fbab3
--- /dev/null
+++ b/docs/docs/api/functions/startTelegram.md
@@ -0,0 +1,17 @@
+# Function: startTelegram()
+
+> **startTelegram**(`runtime`, `character`): `Promise`\<[`TelegramClient`](../classes/TelegramClient.md)\>
+
+## Parameters
+
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+• **character**: [`Character`](../type-aliases/Character.md)
+
+## Returns
+
+`Promise`\<[`TelegramClient`](../classes/TelegramClient.md)\>
+
+## Defined in
+
+[core/src/cli/index.ts:215](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/cli/index.ts#L215)
diff --git a/docs/docs/api/functions/startTwitter.md b/docs/docs/api/functions/startTwitter.md
new file mode 100644
index 00000000000..ab9859190da
--- /dev/null
+++ b/docs/docs/api/functions/startTwitter.md
@@ -0,0 +1,15 @@
+# Function: startTwitter()
+
+> **startTwitter**(`runtime`): `Promise`\<([`TwitterPostClient`](../classes/TwitterPostClient.md) \| [`TwitterInteractionClient`](../classes/TwitterInteractionClient.md) \| [`TwitterSearchClient`](../classes/TwitterSearchClient.md))[]\>
+
+## Parameters
+
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Returns
+
+`Promise`\<([`TwitterPostClient`](../classes/TwitterPostClient.md) \| [`TwitterInteractionClient`](../classes/TwitterInteractionClient.md) \| [`TwitterSearchClient`](../classes/TwitterSearchClient.md))[]\>
+
+## Defined in
+
+[core/src/cli/index.ts:245](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/cli/index.ts#L245)
diff --git a/docs/docs/api/functions/trimTokens.md b/docs/docs/api/functions/trimTokens.md
new file mode 100644
index 00000000000..b42f5b16712
--- /dev/null
+++ b/docs/docs/api/functions/trimTokens.md
@@ -0,0 +1,25 @@
+# Function: trimTokens()
+
+> **trimTokens**(`context`, `maxTokens`, `model`): `any`
+
+Truncate the context to the maximum length allowed by the model.
+
+## Parameters
+
+• **context**: `any`
+
+The context of the message to be completed.
+
+• **maxTokens**: `any`
+
+• **model**: `any`
+
+The model to use for generateText.
+
+## Returns
+
+`any`
+
+## Defined in
+
+[core/src/core/generation.ts:223](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/generation.ts#L223)
diff --git a/docs/docs/api/functions/updateGoal.md b/docs/docs/api/functions/updateGoal.md
new file mode 100644
index 00000000000..b4150ab70ff
--- /dev/null
+++ b/docs/docs/api/functions/updateGoal.md
@@ -0,0 +1,19 @@
+# Function: updateGoal()
+
+> **updateGoal**(`__namedParameters`): `Promise`\<`void`\>
+
+## Parameters
+
+• **\_\_namedParameters**
+
+• **\_\_namedParameters.goal**: [`Goal`](../interfaces/Goal.md)
+
+• **\_\_namedParameters.runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+## Returns
+
+`Promise`\<`void`\>
+
+## Defined in
+
+[core/src/core/goals.ts:44](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/goals.ts#L44)
diff --git a/docs/docs/api/globals.md b/docs/docs/api/globals.md
index 44ddce71bc6..c01b63de249 100644
--- a/docs/docs/api/globals.md
+++ b/docs/docs/api/globals.md
@@ -1,9 +1,20 @@
-# eliza
+# @eliza/core
+
+## Enumerations
+
+- [Clients](enumerations/Clients.md)
+- [GoalStatus](enumerations/GoalStatus.md)
+- [ImageGenModel](enumerations/ImageGenModel.md)
+- [ModelClass](enumerations/ModelClass.md)
+- [ModelProvider](enumerations/ModelProvider.md)
 
 ## Classes
 
+- [AgentRuntime](classes/AgentRuntime.md)
+- [DatabaseAdapter](classes/DatabaseAdapter.md)
 - [DirectClient](classes/DirectClient.md)
 - [DiscordClient](classes/DiscordClient.md)
+- [MemoryManager](classes/MemoryManager.md)
 - [PostgresDatabaseAdapter](classes/PostgresDatabaseAdapter.md)
 - [SqliteDatabaseAdapter](classes/SqliteDatabaseAdapter.md)
 - [TelegramClient](classes/TelegramClient.md)
@@ -15,21 +26,67 @@
 
 ## Interfaces
 
+- [Account](interfaces/Account.md)
+- [Action](interfaces/Action.md)
+- [ActionExample](interfaces/ActionExample.md)
+- [Actor](interfaces/Actor.md)
+- [Content](interfaces/Content.md)
+- [ConversationExample](interfaces/ConversationExample.md)
 - [CreateAndBuyContent](interfaces/CreateAndBuyContent.md)
+- [EvaluationExample](interfaces/EvaluationExample.md)
+- [Evaluator](interfaces/Evaluator.md)
+- [Goal](interfaces/Goal.md)
+- [IAgentRuntime](interfaces/IAgentRuntime.md)
+- [IBrowserService](interfaces/IBrowserService.md)
+- [IDatabaseAdapter](interfaces/IDatabaseAdapter.md)
+- [IImageRecognitionService](interfaces/IImageRecognitionService.md)
+- [ILlamaService](interfaces/ILlamaService.md)
+- [IMemoryManager](interfaces/IMemoryManager.md)
+- [IPdfService](interfaces/IPdfService.md)
+- [ISpeechService](interfaces/ISpeechService.md)
+- [ITranscriptionService](interfaces/ITranscriptionService.md)
+- [IVideoService](interfaces/IVideoService.md)
+- [Memory](interfaces/Memory.md)
+- [MessageExample](interfaces/MessageExample.md)
+- [Objective](interfaces/Objective.md)
+- [Participant](interfaces/Participant.md)
+- [Provider](interfaces/Provider.md)
+- [Relationship](interfaces/Relationship.md)
+- [Room](interfaces/Room.md)
+- [State](interfaces/State.md)
+
+## Type Aliases
+
+- [Character](type-aliases/Character.md)
+- [Handler](type-aliases/Handler.md)
+- [HandlerCallback](type-aliases/HandlerCallback.md)
+- [Media](type-aliases/Media.md)
+- [Model](type-aliases/Model.md)
+- [Plugin](type-aliases/Plugin.md)
+- [UUID](type-aliases/UUID.md)
+- [Validator](type-aliases/Validator.md)
 
 ## Variables
 
 - [boredomProvider](variables/boredomProvider.md)
 - [continueAction](variables/continueAction.md)
+- [defaultActions](variables/defaultActions.md)
+- [defaultCharacter](variables/defaultCharacter.md)
+- [defaultEvaluators](variables/defaultEvaluators.md)
+- [defaultProviders](variables/defaultProviders.md)
+- [elizaLogger](variables/elizaLogger.md)
+- [embeddingDimension](variables/embeddingDimension.md)
+- [embeddingZeroVector](variables/embeddingZeroVector.md)
+- [evaluationTemplate](variables/evaluationTemplate.md)
 - [executeSwap](variables/executeSwap.md)
 - [followRoom](variables/followRoom.md)
 - [ignore](variables/ignore.md)
 - [imageGeneration](variables/imageGeneration.md)
+- [imageGenModels](variables/imageGenModels.md)
 - [messageHandlerTemplate](variables/messageHandlerTemplate.md)
 - [muteRoom](variables/muteRoom.md)
 - [none](variables/none.md)
 - [orderBookProvider](variables/orderBookProvider.md)
-- [prettyConsole](variables/prettyConsole.md)
 - [shouldContinueTemplate](variables/shouldContinueTemplate.md)
 - [shouldFollowTemplate](variables/shouldFollowTemplate.md)
 - [shouldMuteTemplate](variables/shouldMuteTemplate.md)
@@ -42,9 +99,58 @@
 
 ## Functions
 
+- [addHeader](functions/addHeader.md)
 - [buyToken](functions/buyToken.md)
+- [composeActionExamples](functions/composeActionExamples.md)
+- [composeContext](functions/composeContext.md)
+- [createAgentRuntime](functions/createAgentRuntime.md)
 - [createAndBuyToken](functions/createAndBuyToken.md)
+- [createDirectRuntime](functions/createDirectRuntime.md)
+- [createGoal](functions/createGoal.md)
+- [createRelationship](functions/createRelationship.md)
+- [embed](functions/embed.md)
+- [formatActionNames](functions/formatActionNames.md)
+- [formatActions](functions/formatActions.md)
+- [formatActors](functions/formatActors.md)
+- [formatEvaluatorExampleDescriptions](functions/formatEvaluatorExampleDescriptions.md)
+- [formatEvaluatorExamples](functions/formatEvaluatorExamples.md)
+- [formatEvaluatorNames](functions/formatEvaluatorNames.md)
+- [formatEvaluators](functions/formatEvaluators.md)
+- [formatGoalsAsString](functions/formatGoalsAsString.md)
+- [formatMessages](functions/formatMessages.md)
+- [formatPosts](functions/formatPosts.md)
+- [formatRelationships](functions/formatRelationships.md)
+- [formatTimestamp](functions/formatTimestamp.md)
 - [generateCaption](functions/generateCaption.md)
 - [generateImage](functions/generateImage.md)
+- [generateMessageResponse](functions/generateMessageResponse.md)
+- [generateObject](functions/generateObject.md)
+- [generateObjectArray](functions/generateObjectArray.md)
+- [generateShouldRespond](functions/generateShouldRespond.md)
+- [generateText](functions/generateText.md)
+- [generateTextArray](functions/generateTextArray.md)
+- [generateTrueOrFalse](functions/generateTrueOrFalse.md)
+- [getActorDetails](functions/getActorDetails.md)
+- [getEndpoint](functions/getEndpoint.md)
+- [getGoals](functions/getGoals.md)
+- [getImageGenModel](functions/getImageGenModel.md)
+- [getModel](functions/getModel.md)
+- [getProviders](functions/getProviders.md)
+- [getRelationship](functions/getRelationship.md)
+- [getRelationships](functions/getRelationships.md)
+- [getTokenForProvider](functions/getTokenForProvider.md)
+- [initializeClients](functions/initializeClients.md)
+- [initializeDatabase](functions/initializeDatabase.md)
 - [isCreateAndBuyContent](functions/isCreateAndBuyContent.md)
+- [loadActionConfigs](functions/loadActionConfigs.md)
+- [loadCharacters](functions/loadCharacters.md)
+- [loadCustomActions](functions/loadCustomActions.md)
+- [parseArguments](functions/parseArguments.md)
+- [retrieveCachedEmbedding](functions/retrieveCachedEmbedding.md)
 - [sellToken](functions/sellToken.md)
+- [splitChunks](functions/splitChunks.md)
+- [startDiscord](functions/startDiscord.md)
+- [startTelegram](functions/startTelegram.md)
+- [startTwitter](functions/startTwitter.md)
+- [trimTokens](functions/trimTokens.md)
+- [updateGoal](functions/updateGoal.md)
diff --git a/docs/docs/api/index.md b/docs/docs/api/index.md
index bde58458b00..277dac78164 100644
--- a/docs/docs/api/index.md
+++ b/docs/docs/api/index.md
@@ -2,18 +2,24 @@
 
 <img src="_media/eliza_banner.jpg" alt="Eliza Banner" width="100%" />
 
-_As seen powering [@DegenSpartanAI](https://x.com/degenspartanai) and [@MarcAIndreessen](https://x.com/pmairca)_
-
-- Multi-agent simulation framework
-- Add as many unique characters as you want with [characterfile](https://github.com/lalalune/characterfile/)
-- Full-featured Discord and Twitter connectors, with Discord voice channel support
-- Full conversational and document RAG memory
-- Can read links and PDFs, transcribe audio and videos, summarize conversations, and more
-- Highly extensible - create your own actions and clients to extend Eliza's capabilities
-- Supports open source and local models (default configured with Nous Hermes Llama 3.1B)
-- Supports OpenAI for cloud inference on a light-weight device
-- "Ask Claude" mode for calling Claude on more complex queries
-- 100% Typescript
+### [For Chinese Version: 中文说明](_media/README_CN.md)
+
+## Features
+
+- 🛠 Full-featured Discord, Twitter and Telegram connectors
+- 👥 Multi-agent and room support
+- 📚 Easily ingest and interact with your documents
+- 💾 Retrievable memory and document store
+- 🚀 Highly extensible - create your own actions and clients to extend capabilities
+- ☁️ Supports many models, including local Llama, OpenAI, Anthropic, Groq, and more
+- 📦 Just works!
+
+## What can I use it for?
+
+- 🤖 Chatbots
+- 🕵️ Autonomous Agents
+- 📈 Business process handling
+- 🎮 Video game NPCs
 
 # Getting Started
 
diff --git a/docs/docs/api/interfaces/Account.md b/docs/docs/api/interfaces/Account.md
new file mode 100644
index 00000000000..c6022f7c906
--- /dev/null
+++ b/docs/docs/api/interfaces/Account.md
@@ -0,0 +1,67 @@
+# Interface: Account
+
+Represents a user, including their name, details, and a unique identifier.
+
+## Properties
+
+### avatarUrl?
+
+> `optional` **avatarUrl**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:262](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L262)
+
+---
+
+### details?
+
+> `optional` **details**: `object`
+
+#### Index Signature
+
+\[`key`: `string`\]: `any`
+
+#### Defined in
+
+[core/src/core/types.ts:260](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L260)
+
+---
+
+### email?
+
+> `optional` **email**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:261](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L261)
+
+---
+
+### id
+
+> **id**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:257](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L257)
+
+---
+
+### name
+
+> **name**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:258](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L258)
+
+---
+
+### username
+
+> **username**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:259](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L259)
diff --git a/docs/docs/api/interfaces/Action.md b/docs/docs/api/interfaces/Action.md
new file mode 100644
index 00000000000..6e83f718283
--- /dev/null
+++ b/docs/docs/api/interfaces/Action.md
@@ -0,0 +1,63 @@
+# Interface: Action
+
+Represents an action that the agent can perform, including conditions for its use, a description, examples, a handler function, and a validation function.
+
+## Properties
+
+### description
+
+> **description**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:201](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L201)
+
+---
+
+### examples
+
+> **examples**: [`ActionExample`](ActionExample.md)[][]
+
+#### Defined in
+
+[core/src/core/types.ts:202](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L202)
+
+---
+
+### handler
+
+> **handler**: [`Handler`](../type-aliases/Handler.md)
+
+#### Defined in
+
+[core/src/core/types.ts:203](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L203)
+
+---
+
+### name
+
+> **name**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:204](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L204)
+
+---
+
+### similes
+
+> **similes**: `string`[]
+
+#### Defined in
+
+[core/src/core/types.ts:200](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L200)
+
+---
+
+### validate
+
+> **validate**: [`Validator`](../type-aliases/Validator.md)
+
+#### Defined in
+
+[core/src/core/types.ts:205](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L205)
diff --git a/docs/docs/api/interfaces/ActionExample.md b/docs/docs/api/interfaces/ActionExample.md
new file mode 100644
index 00000000000..40240f293cd
--- /dev/null
+++ b/docs/docs/api/interfaces/ActionExample.md
@@ -0,0 +1,23 @@
+# Interface: ActionExample
+
+Represents an example of content, typically used for demonstrating or testing purposes. Includes user, content, optional action, and optional source.
+
+## Properties
+
+### content
+
+> **content**: [`Content`](Content.md)
+
+#### Defined in
+
+[core/src/core/types.ts:27](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L27)
+
+---
+
+### user
+
+> **user**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:26](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L26)
diff --git a/docs/docs/api/interfaces/Actor.md b/docs/docs/api/interfaces/Actor.md
new file mode 100644
index 00000000000..be771e44ad9
--- /dev/null
+++ b/docs/docs/api/interfaces/Actor.md
@@ -0,0 +1,55 @@
+# Interface: Actor
+
+Represents an actor in the conversation, which could be a user or the agent itself, including their name, details (such as tagline, summary, and quote), and a unique identifier.
+
+## Properties
+
+### details
+
+> **details**: `object`
+
+#### quote
+
+> **quote**: `string`
+
+#### summary
+
+> **summary**: `string`
+
+#### tagline
+
+> **tagline**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:44](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L44)
+
+---
+
+### id
+
+> **id**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:45](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L45)
+
+---
+
+### name
+
+> **name**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:42](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L42)
+
+---
+
+### username
+
+> **username**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:43](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L43)
diff --git a/docs/docs/api/interfaces/Content.md b/docs/docs/api/interfaces/Content.md
new file mode 100644
index 00000000000..c5200d905df
--- /dev/null
+++ b/docs/docs/api/interfaces/Content.md
@@ -0,0 +1,71 @@
+# Interface: Content
+
+Represents the content of a message, including its main text (`content`), any associated action (`action`), and the source of the content (`source`), if applicable.
+
+## Extended by
+
+- [`CreateAndBuyContent`](CreateAndBuyContent.md)
+
+## Indexable
+
+\[`key`: `string`\]: `unknown`
+
+## Properties
+
+### action?
+
+> `optional` **action**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:14](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L14)
+
+---
+
+### attachments?
+
+> `optional` **attachments**: [`Media`](../type-aliases/Media.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:18](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L18)
+
+---
+
+### inReplyTo?
+
+> `optional` **inReplyTo**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:17](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L17)
+
+---
+
+### source?
+
+> `optional` **source**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:15](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L15)
+
+---
+
+### text
+
+> **text**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:13](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L13)
+
+---
+
+### url?
+
+> `optional` **url**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:16](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L16)
diff --git a/docs/docs/api/interfaces/ConversationExample.md b/docs/docs/api/interfaces/ConversationExample.md
new file mode 100644
index 00000000000..a0602491922
--- /dev/null
+++ b/docs/docs/api/interfaces/ConversationExample.md
@@ -0,0 +1,23 @@
+# Interface: ConversationExample
+
+Represents an example of content, typically used for demonstrating or testing purposes. Includes user, content, optional action, and optional source.
+
+## Properties
+
+### content
+
+> **content**: [`Content`](Content.md)
+
+#### Defined in
+
+[core/src/core/types.ts:35](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L35)
+
+---
+
+### userId
+
+> **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:34](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L34)
diff --git a/docs/docs/api/interfaces/CreateAndBuyContent.md b/docs/docs/api/interfaces/CreateAndBuyContent.md
index e8a11f37696..fd158d57101 100644
--- a/docs/docs/api/interfaces/CreateAndBuyContent.md
+++ b/docs/docs/api/interfaces/CreateAndBuyContent.md
@@ -1,8 +1,10 @@
 # Interface: CreateAndBuyContent
 
+Represents the content of a message, including its main text (`content`), any associated action (`action`), and the source of the content (`source`), if applicable.
+
 ## Extends
 
-- `Content`
+- [`Content`](Content.md)
 
 ## Properties
 
@@ -12,11 +14,11 @@
 
 #### Inherited from
 
-`Content.action`
+[`Content`](Content.md).[`action`](Content.md#action)
 
 #### Defined in
 
-[core/src/core/types.ts:14](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/core/types.ts#L14)
+[core/src/core/types.ts:14](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L14)
 
 ---
 
@@ -26,21 +28,21 @@
 
 #### Defined in
 
-[core/src/actions/pumpfun.ts:30](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/pumpfun.ts#L30)
+[core/src/actions/pumpfun.ts:30](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/pumpfun.ts#L30)
 
 ---
 
 ### attachments?
 
-> `optional` **attachments**: `Media`[]
+> `optional` **attachments**: [`Media`](../type-aliases/Media.md)[]
 
 #### Inherited from
 
-`Content.attachments`
+[`Content`](Content.md).[`attachments`](Content.md#attachments)
 
 #### Defined in
 
-[core/src/core/types.ts:18](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/core/types.ts#L18)
+[core/src/core/types.ts:18](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L18)
 
 ---
 
@@ -50,7 +52,7 @@
 
 #### Defined in
 
-[core/src/actions/pumpfun.ts:25](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/pumpfun.ts#L25)
+[core/src/actions/pumpfun.ts:25](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/pumpfun.ts#L25)
 
 ---
 
@@ -60,7 +62,7 @@
 
 #### Defined in
 
-[core/src/actions/pumpfun.ts:23](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/pumpfun.ts#L23)
+[core/src/actions/pumpfun.ts:23](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/pumpfun.ts#L23)
 
 ---
 
@@ -70,11 +72,11 @@
 
 #### Inherited from
 
-`Content.inReplyTo`
+[`Content`](Content.md).[`inReplyTo`](Content.md#inreplyto)
 
 #### Defined in
 
-[core/src/core/types.ts:17](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/core/types.ts#L17)
+[core/src/core/types.ts:17](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L17)
 
 ---
 
@@ -92,7 +94,7 @@
 
 #### Defined in
 
-[core/src/actions/pumpfun.ts:26](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/pumpfun.ts#L26)
+[core/src/actions/pumpfun.ts:26](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/pumpfun.ts#L26)
 
 ---
 
@@ -102,11 +104,11 @@
 
 #### Inherited from
 
-`Content.source`
+[`Content`](Content.md).[`source`](Content.md#source)
 
 #### Defined in
 
-[core/src/core/types.ts:15](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/core/types.ts#L15)
+[core/src/core/types.ts:15](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L15)
 
 ---
 
@@ -116,11 +118,11 @@
 
 #### Inherited from
 
-`Content.text`
+[`Content`](Content.md).[`text`](Content.md#text)
 
 #### Defined in
 
-[core/src/core/types.ts:13](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/core/types.ts#L13)
+[core/src/core/types.ts:13](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L13)
 
 ---
 
@@ -130,7 +132,7 @@
 
 #### Defined in
 
-[core/src/actions/pumpfun.ts:24](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/pumpfun.ts#L24)
+[core/src/actions/pumpfun.ts:24](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/pumpfun.ts#L24)
 
 ---
 
@@ -140,8 +142,8 @@
 
 #### Inherited from
 
-`Content.url`
+[`Content`](Content.md).[`url`](Content.md#url)
 
 #### Defined in
 
-[core/src/core/types.ts:16](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/core/types.ts#L16)
+[core/src/core/types.ts:16](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L16)
diff --git a/docs/docs/api/interfaces/EvaluationExample.md b/docs/docs/api/interfaces/EvaluationExample.md
new file mode 100644
index 00000000000..0891f664ae5
--- /dev/null
+++ b/docs/docs/api/interfaces/EvaluationExample.md
@@ -0,0 +1,33 @@
+# Interface: EvaluationExample
+
+Represents an example for evaluation, including the context, an array of message examples, and the expected outcome.
+
+## Properties
+
+### context
+
+> **context**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:212](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L212)
+
+---
+
+### messages
+
+> **messages**: [`ActionExample`](ActionExample.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:213](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L213)
+
+---
+
+### outcome
+
+> **outcome**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:214](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L214)
diff --git a/docs/docs/api/interfaces/Evaluator.md b/docs/docs/api/interfaces/Evaluator.md
new file mode 100644
index 00000000000..3596d2b1b3e
--- /dev/null
+++ b/docs/docs/api/interfaces/Evaluator.md
@@ -0,0 +1,63 @@
+# Interface: Evaluator
+
+Represents an evaluator, which is used to assess and guide the agent's responses based on the current context and state.
+
+## Properties
+
+### description
+
+> **description**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:221](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L221)
+
+---
+
+### examples
+
+> **examples**: [`EvaluationExample`](EvaluationExample.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:223](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L223)
+
+---
+
+### handler
+
+> **handler**: [`Handler`](../type-aliases/Handler.md)
+
+#### Defined in
+
+[core/src/core/types.ts:224](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L224)
+
+---
+
+### name
+
+> **name**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:225](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L225)
+
+---
+
+### similes
+
+> **similes**: `string`[]
+
+#### Defined in
+
+[core/src/core/types.ts:222](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L222)
+
+---
+
+### validate
+
+> **validate**: [`Validator`](../type-aliases/Validator.md)
+
+#### Defined in
+
+[core/src/core/types.ts:226](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L226)
diff --git a/docs/docs/api/interfaces/Goal.md b/docs/docs/api/interfaces/Goal.md
new file mode 100644
index 00000000000..8aa672768b0
--- /dev/null
+++ b/docs/docs/api/interfaces/Goal.md
@@ -0,0 +1,63 @@
+# Interface: Goal
+
+Represents a goal, which is a higher-level aim composed of one or more objectives. Goals are tracked to measure progress or achievements within the conversation or system.
+
+## Properties
+
+### id?
+
+> `optional` **id**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:67](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L67)
+
+---
+
+### name
+
+> **name**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:70](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L70)
+
+---
+
+### objectives
+
+> **objectives**: [`Objective`](Objective.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:72](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L72)
+
+---
+
+### roomId
+
+> **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:68](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L68)
+
+---
+
+### status
+
+> **status**: [`GoalStatus`](../enumerations/GoalStatus.md)
+
+#### Defined in
+
+[core/src/core/types.ts:71](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L71)
+
+---
+
+### userId
+
+> **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:69](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L69)
diff --git a/docs/docs/api/interfaces/IAgentRuntime.md b/docs/docs/api/interfaces/IAgentRuntime.md
new file mode 100644
index 00000000000..61b5234f98e
--- /dev/null
+++ b/docs/docs/api/interfaces/IAgentRuntime.md
@@ -0,0 +1,441 @@
+# Interface: IAgentRuntime
+
+## Properties
+
+### actions
+
+> **actions**: [`Action`](Action.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:494](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L494)
+
+---
+
+### agentId
+
+> **agentId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:486](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L486)
+
+---
+
+### browserService
+
+> **browserService**: [`IBrowserService`](IBrowserService.md)
+
+#### Defined in
+
+[core/src/core/types.ts:504](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L504)
+
+---
+
+### character
+
+> **character**: [`Character`](../type-aliases/Character.md)
+
+#### Defined in
+
+[core/src/core/types.ts:492](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L492)
+
+---
+
+### databaseAdapter
+
+> **databaseAdapter**: [`IDatabaseAdapter`](IDatabaseAdapter.md)
+
+#### Defined in
+
+[core/src/core/types.ts:488](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L488)
+
+---
+
+### descriptionManager
+
+> **descriptionManager**: [`IMemoryManager`](IMemoryManager.md)
+
+#### Defined in
+
+[core/src/core/types.ts:497](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L497)
+
+---
+
+### factManager
+
+> **factManager**: [`IMemoryManager`](IMemoryManager.md)
+
+#### Defined in
+
+[core/src/core/types.ts:498](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L498)
+
+---
+
+### imageDescriptionService
+
+> **imageDescriptionService**: [`IImageRecognitionService`](IImageRecognitionService.md)
+
+#### Defined in
+
+[core/src/core/types.ts:500](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L500)
+
+---
+
+### imageGenModel
+
+> **imageGenModel**: [`ImageGenModel`](../enumerations/ImageGenModel.md)
+
+#### Defined in
+
+[core/src/core/types.ts:491](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L491)
+
+---
+
+### llamaService
+
+> **llamaService**: [`ILlamaService`](ILlamaService.md)
+
+#### Defined in
+
+[core/src/core/types.ts:503](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L503)
+
+---
+
+### loreManager
+
+> **loreManager**: [`IMemoryManager`](IMemoryManager.md)
+
+#### Defined in
+
+[core/src/core/types.ts:499](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L499)
+
+---
+
+### messageManager
+
+> **messageManager**: [`IMemoryManager`](IMemoryManager.md)
+
+#### Defined in
+
+[core/src/core/types.ts:496](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L496)
+
+---
+
+### modelProvider
+
+> **modelProvider**: [`ModelProvider`](../enumerations/ModelProvider.md)
+
+#### Defined in
+
+[core/src/core/types.ts:490](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L490)
+
+---
+
+### pdfService
+
+> **pdfService**: [`IPdfService`](IPdfService.md)
+
+#### Defined in
+
+[core/src/core/types.ts:506](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L506)
+
+---
+
+### providers
+
+> **providers**: [`Provider`](Provider.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:493](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L493)
+
+---
+
+### serverUrl
+
+> **serverUrl**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:487](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L487)
+
+---
+
+### speechService
+
+> **speechService**: [`ISpeechService`](ISpeechService.md)
+
+#### Defined in
+
+[core/src/core/types.ts:505](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L505)
+
+---
+
+### token
+
+> **token**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:489](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L489)
+
+---
+
+### transcriptionService
+
+> **transcriptionService**: [`ITranscriptionService`](ITranscriptionService.md)
+
+#### Defined in
+
+[core/src/core/types.ts:501](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L501)
+
+---
+
+### videoService
+
+> **videoService**: [`IVideoService`](IVideoService.md)
+
+#### Defined in
+
+[core/src/core/types.ts:502](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L502)
+
+## Methods
+
+### composeState()
+
+> **composeState**(`message`, `additionalKeys`?): `Promise`\<[`State`](State.md)\>
+
+#### Parameters
+
+• **message**: [`Memory`](Memory.md)
+
+• **additionalKeys?**
+
+#### Returns
+
+`Promise`\<[`State`](State.md)\>
+
+#### Defined in
+
+[core/src/core/types.ts:536](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L536)
+
+---
+
+### ensureConnection()
+
+> **ensureConnection**(`userId`, `roomId`, `userName`?, `userScreenName`?, `source`?): `Promise`\<`void`\>
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **userName?**: `string`
+
+• **userScreenName?**: `string`
+
+• **source?**: `string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:527](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L527)
+
+---
+
+### ensureParticipantExists()
+
+> **ensureParticipantExists**(`userId`, `roomId`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:519](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L519)
+
+---
+
+### ensureParticipantInRoom()
+
+> **ensureParticipantInRoom**(`userId`, `roomId`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:534](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L534)
+
+---
+
+### ensureRoomExists()
+
+> **ensureRoomExists**(`roomId`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:535](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L535)
+
+---
+
+### ensureUserExists()
+
+> **ensureUserExists**(`userId`, `userName`, `name`, `source`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **userName**: `string`
+
+• **name**: `string`
+
+• **source**: `string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:520](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L520)
+
+---
+
+### evaluate()
+
+> **evaluate**(`message`, `state`?): `Promise`\<`string`[]\>
+
+#### Parameters
+
+• **message**: [`Memory`](Memory.md)
+
+• **state?**: [`State`](State.md)
+
+#### Returns
+
+`Promise`\<`string`[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:518](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L518)
+
+---
+
+### getConversationLength()
+
+> **getConversationLength**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[core/src/core/types.ts:511](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L511)
+
+---
+
+### getSetting()
+
+> **getSetting**(`key`): `string`
+
+#### Parameters
+
+• **key**: `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[core/src/core/types.ts:508](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L508)
+
+---
+
+### processActions()
+
+> **processActions**(`message`, `responses`, `state`?, `callback`?): `Promise`\<`void`\>
+
+#### Parameters
+
+• **message**: [`Memory`](Memory.md)
+
+• **responses**: [`Memory`](Memory.md)[]
+
+• **state?**: [`State`](State.md)
+
+• **callback?**: [`HandlerCallback`](../type-aliases/HandlerCallback.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:512](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L512)
+
+---
+
+### registerAction()
+
+> **registerAction**(`action`): `void`
+
+#### Parameters
+
+• **action**: [`Action`](Action.md)
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[core/src/core/types.ts:526](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L526)
+
+---
+
+### updateRecentMessageState()
+
+> **updateRecentMessageState**(`state`): `Promise`\<[`State`](State.md)\>
+
+#### Parameters
+
+• **state**: [`State`](State.md)
+
+#### Returns
+
+`Promise`\<[`State`](State.md)\>
+
+#### Defined in
+
+[core/src/core/types.ts:540](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L540)
diff --git a/docs/docs/api/interfaces/IBrowserService.md b/docs/docs/api/interfaces/IBrowserService.md
new file mode 100644
index 00000000000..445c72451b4
--- /dev/null
+++ b/docs/docs/api/interfaces/IBrowserService.md
@@ -0,0 +1,59 @@
+# Interface: IBrowserService
+
+## Methods
+
+### closeBrowser()
+
+> **closeBrowser**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:587](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L587)
+
+---
+
+### getPageContent()
+
+> **getPageContent**(`url`): `Promise`\<`object`\>
+
+#### Parameters
+
+• **url**: `string`
+
+#### Returns
+
+`Promise`\<`object`\>
+
+##### bodyContent
+
+> **bodyContent**: `string`
+
+##### description
+
+> **description**: `string`
+
+##### title
+
+> **title**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:588](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L588)
+
+---
+
+### initialize()
+
+> **initialize**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:586](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L586)
diff --git a/docs/docs/api/interfaces/IDatabaseAdapter.md b/docs/docs/api/interfaces/IDatabaseAdapter.md
new file mode 100644
index 00000000000..76d1544b164
--- /dev/null
+++ b/docs/docs/api/interfaces/IDatabaseAdapter.md
@@ -0,0 +1,733 @@
+# Interface: IDatabaseAdapter
+
+## Properties
+
+### db
+
+> **db**: `any`
+
+#### Defined in
+
+[core/src/core/types.ts:342](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L342)
+
+## Methods
+
+### addParticipant()
+
+> **addParticipant**(`userId`, `roomId`): `Promise`\<`boolean`\>
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+#### Defined in
+
+[core/src/core/types.ts:424](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L424)
+
+---
+
+### countMemories()
+
+> **countMemories**(`roomId`, `unique`?, `tableName`?): `Promise`\<`number`\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **unique?**: `boolean`
+
+• **tableName?**: `string`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+#### Defined in
+
+[core/src/core/types.ts:404](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L404)
+
+---
+
+### createAccount()
+
+> **createAccount**(`account`): `Promise`\<`boolean`\>
+
+#### Parameters
+
+• **account**: [`Account`](Account.md)
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+#### Defined in
+
+[core/src/core/types.ts:344](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L344)
+
+---
+
+### createGoal()
+
+> **createGoal**(`goal`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **goal**: [`Goal`](Goal.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:416](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L416)
+
+---
+
+### createMemory()
+
+> **createMemory**(`memory`, `tableName`, `unique`?): `Promise`\<`void`\>
+
+#### Parameters
+
+• **memory**: [`Memory`](Memory.md)
+
+• **tableName**: `string`
+
+• **unique?**: `boolean`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:397](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L397)
+
+---
+
+### createRelationship()
+
+> **createRelationship**(`params`): `Promise`\<`boolean`\>
+
+#### Parameters
+
+• **params**
+
+• **params.userA**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.userB**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+#### Defined in
+
+[core/src/core/types.ts:437](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L437)
+
+---
+
+### createRoom()
+
+> **createRoom**(`roomId`?): `Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`\>
+
+#### Parameters
+
+• **roomId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`\>
+
+#### Defined in
+
+[core/src/core/types.ts:420](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L420)
+
+---
+
+### getAccountById()
+
+> **getAccountById**(`userId`): `Promise`\<[`Account`](Account.md)\>
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Account`](Account.md)\>
+
+#### Defined in
+
+[core/src/core/types.ts:343](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L343)
+
+---
+
+### getActorDetails()
+
+> **getActorDetails**(`params`): `Promise`\<[`Actor`](Actor.md)[]\>
+
+#### Parameters
+
+• **params**
+
+• **params.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Actor`](Actor.md)[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:373](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L373)
+
+---
+
+### getCachedEmbeddings()
+
+> **getCachedEmbeddings**(`params`): `Promise`\<`object`[]\>
+
+#### Parameters
+
+• **params**
+
+• **params.query_field_name**: `string`
+
+• **params.query_field_sub_name**: `string`
+
+• **params.query_input**: `string`
+
+• **params.query_match_count**: `number`
+
+• **params.query_table_name**: `string`
+
+• **params.query_threshold**: `number`
+
+#### Returns
+
+`Promise`\<`object`[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:359](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L359)
+
+---
+
+### getGoals()
+
+> **getGoals**(`params`): `Promise`\<[`Goal`](Goal.md)[]\>
+
+#### Parameters
+
+• **params**
+
+• **params.count?**: `number`
+
+• **params.onlyInProgress?**: `boolean`
+
+• **params.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.userId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Goal`](Goal.md)[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:409](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L409)
+
+---
+
+### getMemories()
+
+> **getMemories**(`params`): `Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Parameters
+
+• **params**
+
+• **params.agentId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.count?**: `number`
+
+• **params.end?**: `number`
+
+• **params.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.start?**: `number`
+
+• **params.tableName**: `string`
+
+• **params.unique?**: `boolean`
+
+#### Returns
+
+`Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:345](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L345)
+
+---
+
+### getMemoriesByRoomIds()
+
+> **getMemoriesByRoomIds**(`params`): `Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Parameters
+
+• **params**
+
+• **params.agentId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.roomIds**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]
+
+#### Returns
+
+`Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:355](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L355)
+
+---
+
+### getMemoryById()
+
+> **getMemoryById**(`id`): `Promise`\<[`Memory`](Memory.md)\>
+
+#### Parameters
+
+• **id**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Memory`](Memory.md)\>
+
+#### Defined in
+
+[core/src/core/types.ts:354](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L354)
+
+---
+
+### getParticipantsForAccount()
+
+> **getParticipantsForAccount**(`userId`): `Promise`\<[`Participant`](Participant.md)[]\>
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Participant`](Participant.md)[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:426](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L426)
+
+---
+
+### getParticipantsForRoom()
+
+> **getParticipantsForRoom**(`roomId`): `Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:427](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L427)
+
+---
+
+### getParticipantUserState()
+
+> **getParticipantUserState**(`roomId`, `userId`): `Promise`\<`"FOLLOWED"` \| `"MUTED"`\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`"FOLLOWED"` \| `"MUTED"`\>
+
+#### Defined in
+
+[core/src/core/types.ts:428](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L428)
+
+---
+
+### getRelationship()
+
+> **getRelationship**(`params`): `Promise`\<[`Relationship`](Relationship.md)\>
+
+#### Parameters
+
+• **params**
+
+• **params.userA**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.userB**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Relationship`](Relationship.md)\>
+
+#### Defined in
+
+[core/src/core/types.ts:438](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L438)
+
+---
+
+### getRelationships()
+
+> **getRelationships**(`params`): `Promise`\<[`Relationship`](Relationship.md)[]\>
+
+#### Parameters
+
+• **params**
+
+• **params.userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Relationship`](Relationship.md)[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:442](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L442)
+
+---
+
+### getRoom()
+
+> **getRoom**(`roomId`): `Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`\>
+
+#### Defined in
+
+[core/src/core/types.ts:419](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L419)
+
+---
+
+### getRoomsForParticipant()
+
+> **getRoomsForParticipant**(`userId`): `Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:422](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L422)
+
+---
+
+### getRoomsForParticipants()
+
+> **getRoomsForParticipants**(`userIds`): `Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+#### Parameters
+
+• **userIds**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]
+
+#### Returns
+
+`Promise`\<\`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:423](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L423)
+
+---
+
+### log()
+
+> **log**(`params`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **params**
+
+• **params.body**
+
+• **params.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.type**: `string`
+
+• **params.userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:367](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L367)
+
+---
+
+### removeAllGoals()
+
+> **removeAllGoals**(`roomId`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:418](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L418)
+
+---
+
+### removeAllMemories()
+
+> **removeAllMemories**(`roomId`, `tableName`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **tableName**: `string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:403](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L403)
+
+---
+
+### removeGoal()
+
+> **removeGoal**(`goalId`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **goalId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:417](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L417)
+
+---
+
+### removeMemory()
+
+> **removeMemory**(`memoryId`, `tableName`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **memoryId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **tableName**: `string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:402](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L402)
+
+---
+
+### removeParticipant()
+
+> **removeParticipant**(`userId`, `roomId`): `Promise`\<`boolean`\>
+
+#### Parameters
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+#### Defined in
+
+[core/src/core/types.ts:425](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L425)
+
+---
+
+### removeRoom()
+
+> **removeRoom**(`roomId`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:421](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L421)
+
+---
+
+### searchMemories()
+
+> **searchMemories**(`params`): `Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Parameters
+
+• **params**
+
+• **params.embedding**: `number`[]
+
+• **params.match_count**: `number`
+
+• **params.match_threshold**: `number`
+
+• **params.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.tableName**: `string`
+
+• **params.unique**: `boolean`
+
+#### Returns
+
+`Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:374](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L374)
+
+---
+
+### searchMemoriesByEmbedding()
+
+> **searchMemoriesByEmbedding**(`embedding`, `params`): `Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Parameters
+
+• **embedding**: `number`[]
+
+• **params**
+
+• **params.agentId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.count?**: `number`
+
+• **params.match_threshold?**: `number`
+
+• **params.roomId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.tableName**: `string`
+
+• **params.unique?**: `boolean`
+
+#### Returns
+
+`Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:386](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L386)
+
+---
+
+### setParticipantUserState()
+
+> **setParticipantUserState**(`roomId`, `userId`, `state`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **state**: `"FOLLOWED"` \| `"MUTED"`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:432](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L432)
+
+---
+
+### updateGoal()
+
+> **updateGoal**(`goal`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **goal**: [`Goal`](Goal.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:415](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L415)
+
+---
+
+### updateGoalStatus()
+
+> **updateGoalStatus**(`params`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **params**
+
+• **params.goalId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.status**: [`GoalStatus`](../enumerations/GoalStatus.md)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:382](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L382)
diff --git a/docs/docs/api/interfaces/IImageRecognitionService.md b/docs/docs/api/interfaces/IImageRecognitionService.md
new file mode 100644
index 00000000000..80743e38c6a
--- /dev/null
+++ b/docs/docs/api/interfaces/IImageRecognitionService.md
@@ -0,0 +1,47 @@
+# Interface: IImageRecognitionService
+
+## Methods
+
+### describeImage()
+
+> **describeImage**(`imageUrl`): `Promise`\<`object`\>
+
+#### Parameters
+
+• **imageUrl**: `string`
+
+#### Returns
+
+`Promise`\<`object`\>
+
+##### description
+
+> **description**: `string`
+
+##### title
+
+> **title**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:545](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L545)
+
+---
+
+### initialize()
+
+> **initialize**(`modelId`?, `device`?): `Promise`\<`void`\>
+
+#### Parameters
+
+• **modelId?**: `string`
+
+• **device?**: `string`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:544](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L544)
diff --git a/docs/docs/api/interfaces/ILlamaService.md b/docs/docs/api/interfaces/ILlamaService.md
new file mode 100644
index 00000000000..99f1d512e7e
--- /dev/null
+++ b/docs/docs/api/interfaces/ILlamaService.md
@@ -0,0 +1,89 @@
+# Interface: ILlamaService
+
+## Methods
+
+### getEmbeddingResponse()
+
+> **getEmbeddingResponse**(`input`): `Promise`\<`number`[]\>
+
+#### Parameters
+
+• **input**: `string`
+
+#### Returns
+
+`Promise`\<`number`[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:582](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L582)
+
+---
+
+### initializeModel()
+
+> **initializeModel**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:565](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L565)
+
+---
+
+### queueMessageCompletion()
+
+> **queueMessageCompletion**(`context`, `temperature`, `stop`, `frequency_penalty`, `presence_penalty`, `max_tokens`): `Promise`\<`any`\>
+
+#### Parameters
+
+• **context**: `string`
+
+• **temperature**: `number`
+
+• **stop**: `string`[]
+
+• **frequency_penalty**: `number`
+
+• **presence_penalty**: `number`
+
+• **max_tokens**: `number`
+
+#### Returns
+
+`Promise`\<`any`\>
+
+#### Defined in
+
+[core/src/core/types.ts:566](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L566)
+
+---
+
+### queueTextCompletion()
+
+> **queueTextCompletion**(`context`, `temperature`, `stop`, `frequency_penalty`, `presence_penalty`, `max_tokens`): `Promise`\<`string`\>
+
+#### Parameters
+
+• **context**: `string`
+
+• **temperature**: `number`
+
+• **stop**: `string`[]
+
+• **frequency_penalty**: `number`
+
+• **presence_penalty**: `number`
+
+• **max_tokens**: `number`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+#### Defined in
+
+[core/src/core/types.ts:574](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L574)
diff --git a/docs/docs/api/interfaces/IMemoryManager.md b/docs/docs/api/interfaces/IMemoryManager.md
new file mode 100644
index 00000000000..9026f0b807f
--- /dev/null
+++ b/docs/docs/api/interfaces/IMemoryManager.md
@@ -0,0 +1,243 @@
+# Interface: IMemoryManager
+
+## Properties
+
+### constructor
+
+> **constructor**: `Function`
+
+#### Defined in
+
+[core/src/core/types.ts:449](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L449)
+
+---
+
+### runtime
+
+> **runtime**: [`IAgentRuntime`](IAgentRuntime.md)
+
+#### Defined in
+
+[core/src/core/types.ts:446](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L446)
+
+---
+
+### tableName
+
+> **tableName**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:447](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L447)
+
+## Methods
+
+### addEmbeddingToMemory()
+
+> **addEmbeddingToMemory**(`memory`): `Promise`\<[`Memory`](Memory.md)\>
+
+#### Parameters
+
+• **memory**: [`Memory`](Memory.md)
+
+#### Returns
+
+`Promise`\<[`Memory`](Memory.md)\>
+
+#### Defined in
+
+[core/src/core/types.ts:451](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L451)
+
+---
+
+### countMemories()
+
+> **countMemories**(`roomId`, `unique`?): `Promise`\<`number`\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **unique?**: `boolean`
+
+#### Returns
+
+`Promise`\<`number`\>
+
+#### Defined in
+
+[core/src/core/types.ts:481](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L481)
+
+---
+
+### createMemory()
+
+> **createMemory**(`memory`, `unique`?): `Promise`\<`void`\>
+
+#### Parameters
+
+• **memory**: [`Memory`](Memory.md)
+
+• **unique?**: `boolean`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:478](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L478)
+
+---
+
+### getCachedEmbeddings()
+
+> **getCachedEmbeddings**(`content`): `Promise`\<`object`[]\>
+
+#### Parameters
+
+• **content**: `string`
+
+#### Returns
+
+`Promise`\<`object`[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:460](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L460)
+
+---
+
+### getMemories()
+
+> **getMemories**(`opts`): `Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Parameters
+
+• **opts**
+
+• **opts.agentId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **opts.count?**: `number`
+
+• **opts.end?**: `number`
+
+• **opts.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **opts.start?**: `number`
+
+• **opts.unique?**: `boolean`
+
+#### Returns
+
+`Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:452](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L452)
+
+---
+
+### getMemoriesByRoomIds()
+
+> **getMemoriesByRoomIds**(`params`): `Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Parameters
+
+• **params**
+
+• **params.agentId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **params.roomIds**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`[]
+
+#### Returns
+
+`Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:464](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L464)
+
+---
+
+### getMemoryById()
+
+> **getMemoryById**(`id`): `Promise`\<[`Memory`](Memory.md)\>
+
+#### Parameters
+
+• **id**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<[`Memory`](Memory.md)\>
+
+#### Defined in
+
+[core/src/core/types.ts:463](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L463)
+
+---
+
+### removeAllMemories()
+
+> **removeAllMemories**(`roomId`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:480](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L480)
+
+---
+
+### removeMemory()
+
+> **removeMemory**(`memoryId`): `Promise`\<`void`\>
+
+#### Parameters
+
+• **memoryId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[core/src/core/types.ts:479](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L479)
+
+---
+
+### searchMemoriesByEmbedding()
+
+> **searchMemoriesByEmbedding**(`embedding`, `opts`): `Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Parameters
+
+• **embedding**: `number`[]
+
+• **opts**
+
+• **opts.agentId?**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **opts.count?**: `number`
+
+• **opts.match_threshold?**: `number`
+
+• **opts.roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+• **opts.unique?**: `boolean`
+
+#### Returns
+
+`Promise`\<[`Memory`](Memory.md)[]\>
+
+#### Defined in
+
+[core/src/core/types.ts:468](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L468)
diff --git a/docs/docs/api/interfaces/IPdfService.md b/docs/docs/api/interfaces/IPdfService.md
new file mode 100644
index 00000000000..a4d4b011711
--- /dev/null
+++ b/docs/docs/api/interfaces/IPdfService.md
@@ -0,0 +1,19 @@
+# Interface: IPdfService
+
+## Methods
+
+### convertPdfToText()
+
+> **convertPdfToText**(`pdfBuffer`): `Promise`\<`string`\>
+
+#### Parameters
+
+• **pdfBuffer**: `Buffer`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+#### Defined in
+
+[core/src/core/types.ts:598](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L598)
diff --git a/docs/docs/api/interfaces/ISpeechService.md b/docs/docs/api/interfaces/ISpeechService.md
new file mode 100644
index 00000000000..1fd58914203
--- /dev/null
+++ b/docs/docs/api/interfaces/ISpeechService.md
@@ -0,0 +1,21 @@
+# Interface: ISpeechService
+
+## Methods
+
+### generate()
+
+> **generate**(`runtime`, `text`): `Promise`\<`Readable`\>
+
+#### Parameters
+
+• **runtime**: [`IAgentRuntime`](IAgentRuntime.md)
+
+• **text**: `string`
+
+#### Returns
+
+`Promise`\<`Readable`\>
+
+#### Defined in
+
+[core/src/core/types.ts:594](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L594)
diff --git a/docs/docs/api/interfaces/ITranscriptionService.md b/docs/docs/api/interfaces/ITranscriptionService.md
new file mode 100644
index 00000000000..e21318f2812
--- /dev/null
+++ b/docs/docs/api/interfaces/ITranscriptionService.md
@@ -0,0 +1,73 @@
+# Interface: ITranscriptionService
+
+## Methods
+
+### transcribe()
+
+> **transcribe**(`audioBuffer`): `Promise`\<`string`\>
+
+#### Parameters
+
+• **audioBuffer**: `ArrayBuffer`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+#### Defined in
+
+[core/src/core/types.ts:555](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L555)
+
+---
+
+### transcribeAttachment()
+
+> **transcribeAttachment**(`audioBuffer`): `Promise`\<`string`\>
+
+#### Parameters
+
+• **audioBuffer**: `ArrayBuffer`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+#### Defined in
+
+[core/src/core/types.ts:551](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L551)
+
+---
+
+### transcribeAttachmentLocally()
+
+> **transcribeAttachmentLocally**(`audioBuffer`): `Promise`\<`string`\>
+
+#### Parameters
+
+• **audioBuffer**: `ArrayBuffer`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+#### Defined in
+
+[core/src/core/types.ts:552](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L552)
+
+---
+
+### transcribeLocally()
+
+> **transcribeLocally**(`audioBuffer`): `Promise`\<`string`\>
+
+#### Parameters
+
+• **audioBuffer**: `ArrayBuffer`
+
+#### Returns
+
+`Promise`\<`string`\>
+
+#### Defined in
+
+[core/src/core/types.ts:556](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L556)
diff --git a/docs/docs/api/interfaces/IVideoService.md b/docs/docs/api/interfaces/IVideoService.md
new file mode 100644
index 00000000000..37974807efb
--- /dev/null
+++ b/docs/docs/api/interfaces/IVideoService.md
@@ -0,0 +1,37 @@
+# Interface: IVideoService
+
+## Methods
+
+### isVideoUrl()
+
+> **isVideoUrl**(`url`): `boolean`
+
+#### Parameters
+
+• **url**: `string`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[core/src/core/types.ts:560](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L560)
+
+---
+
+### processVideo()
+
+> **processVideo**(`url`): `Promise`\<[`Media`](../type-aliases/Media.md)\>
+
+#### Parameters
+
+• **url**: `string`
+
+#### Returns
+
+`Promise`\<[`Media`](../type-aliases/Media.md)\>
+
+#### Defined in
+
+[core/src/core/types.ts:561](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L561)
diff --git a/docs/docs/api/interfaces/Memory.md b/docs/docs/api/interfaces/Memory.md
new file mode 100644
index 00000000000..b395bcfa43d
--- /dev/null
+++ b/docs/docs/api/interfaces/Memory.md
@@ -0,0 +1,83 @@
+# Interface: Memory
+
+Represents a memory record, which could be a message or any other piece of information remembered by the system, including its content, associated user IDs, and optionally, its embedding vector for similarity comparisons.
+
+## Properties
+
+### agentId
+
+> **agentId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:154](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L154)
+
+---
+
+### content
+
+> **content**: [`Content`](Content.md)
+
+#### Defined in
+
+[core/src/core/types.ts:156](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L156)
+
+---
+
+### createdAt?
+
+> `optional` **createdAt**: `number`
+
+#### Defined in
+
+[core/src/core/types.ts:155](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L155)
+
+---
+
+### embedding?
+
+> `optional` **embedding**: `number`[]
+
+#### Defined in
+
+[core/src/core/types.ts:157](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L157)
+
+---
+
+### id?
+
+> `optional` **id**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:152](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L152)
+
+---
+
+### roomId
+
+> **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:158](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L158)
+
+---
+
+### unique?
+
+> `optional` **unique**: `boolean`
+
+#### Defined in
+
+[core/src/core/types.ts:159](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L159)
+
+---
+
+### userId
+
+> **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:153](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L153)
diff --git a/docs/docs/api/interfaces/MessageExample.md b/docs/docs/api/interfaces/MessageExample.md
new file mode 100644
index 00000000000..100e99f58e3
--- /dev/null
+++ b/docs/docs/api/interfaces/MessageExample.md
@@ -0,0 +1,23 @@
+# Interface: MessageExample
+
+Represents an example of a message, typically used for demonstrating or testing purposes, including optional content and action.
+
+## Properties
+
+### content
+
+> **content**: [`Content`](Content.md)
+
+#### Defined in
+
+[core/src/core/types.ts:167](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L167)
+
+---
+
+### user
+
+> **user**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:166](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L166)
diff --git a/docs/docs/api/interfaces/Objective.md b/docs/docs/api/interfaces/Objective.md
new file mode 100644
index 00000000000..6fd03f9c5e8
--- /dev/null
+++ b/docs/docs/api/interfaces/Objective.md
@@ -0,0 +1,33 @@
+# Interface: Objective
+
+Represents an objective within a goal, detailing what needs to be achieved and whether it has been completed.
+
+## Properties
+
+### completed
+
+> **completed**: `boolean`
+
+#### Defined in
+
+[core/src/core/types.ts:54](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L54)
+
+---
+
+### description
+
+> **description**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:53](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L53)
+
+---
+
+### id?
+
+> `optional` **id**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:52](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L52)
diff --git a/docs/docs/api/interfaces/Participant.md b/docs/docs/api/interfaces/Participant.md
new file mode 100644
index 00000000000..e8a774c6f21
--- /dev/null
+++ b/docs/docs/api/interfaces/Participant.md
@@ -0,0 +1,23 @@
+# Interface: Participant
+
+Represents a participant in a room, including their ID and account details.
+
+## Properties
+
+### account
+
+> **account**: [`Account`](Account.md)
+
+#### Defined in
+
+[core/src/core/types.ts:270](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L270)
+
+---
+
+### id
+
+> **id**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:269](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L269)
diff --git a/docs/docs/api/interfaces/Provider.md b/docs/docs/api/interfaces/Provider.md
new file mode 100644
index 00000000000..8951692f9c1
--- /dev/null
+++ b/docs/docs/api/interfaces/Provider.md
@@ -0,0 +1,25 @@
+# Interface: Provider
+
+Represents a provider, which is used to retrieve information or perform actions on behalf of the agent, such as fetching data from an external API or service.
+
+## Properties
+
+### get()
+
+> **get**: (`runtime`, `message`, `state`?) => `Promise`\<`any`\>
+
+#### Parameters
+
+• **runtime**: [`IAgentRuntime`](IAgentRuntime.md)
+
+• **message**: [`Memory`](Memory.md)
+
+• **state?**: [`State`](State.md)
+
+#### Returns
+
+`Promise`\<`any`\>
+
+#### Defined in
+
+[core/src/core/types.ts:233](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L233)
diff --git a/docs/docs/api/interfaces/Relationship.md b/docs/docs/api/interfaces/Relationship.md
new file mode 100644
index 00000000000..fb5742fb7c3
--- /dev/null
+++ b/docs/docs/api/interfaces/Relationship.md
@@ -0,0 +1,73 @@
+# Interface: Relationship
+
+Represents a relationship between two users, including their IDs, the status of the relationship, and the room ID in which the relationship is established.
+
+## Properties
+
+### createdAt?
+
+> `optional` **createdAt**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:250](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L250)
+
+---
+
+### id
+
+> **id**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:244](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L244)
+
+---
+
+### roomId
+
+> **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:248](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L248)
+
+---
+
+### status
+
+> **status**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:249](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L249)
+
+---
+
+### userA
+
+> **userA**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:245](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L245)
+
+---
+
+### userB
+
+> **userB**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:246](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L246)
+
+---
+
+### userId
+
+> **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:247](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L247)
diff --git a/docs/docs/api/interfaces/Room.md b/docs/docs/api/interfaces/Room.md
new file mode 100644
index 00000000000..63a2ed05817
--- /dev/null
+++ b/docs/docs/api/interfaces/Room.md
@@ -0,0 +1,23 @@
+# Interface: Room
+
+Represents a room or conversation context, including its ID and a list of participants.
+
+## Properties
+
+### id
+
+> **id**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:277](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L277)
+
+---
+
+### participants
+
+> **participants**: [`Participant`](Participant.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:278](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L278)
diff --git a/docs/docs/api/interfaces/State.md b/docs/docs/api/interfaces/State.md
new file mode 100644
index 00000000000..177552ce39d
--- /dev/null
+++ b/docs/docs/api/interfaces/State.md
@@ -0,0 +1,277 @@
+# Interface: State
+
+Represents the state of the conversation or context in which the agent is operating, including information about users, messages, goals, and other relevant data.
+
+## Indexable
+
+\[`key`: `string`\]: `unknown`
+
+## Properties
+
+### actionExamples?
+
+> `optional` **actionExamples**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:140](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L140)
+
+---
+
+### actionNames?
+
+> `optional` **actionNames**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:137](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L137)
+
+---
+
+### actions?
+
+> `optional` **actions**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:138](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L138)
+
+---
+
+### actionsData?
+
+> `optional` **actionsData**: [`Action`](Action.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:139](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L139)
+
+---
+
+### actors
+
+> **actors**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:127](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L127)
+
+---
+
+### actorsData?
+
+> `optional` **actorsData**: [`Actor`](Actor.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:128](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L128)
+
+---
+
+### agentId?
+
+> `optional` **agentId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:119](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L119)
+
+---
+
+### agentName?
+
+> `optional` **agentName**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:125](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L125)
+
+---
+
+### bio
+
+> **bio**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:120](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L120)
+
+---
+
+### goals?
+
+> `optional` **goals**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:129](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L129)
+
+---
+
+### goalsData?
+
+> `optional` **goalsData**: [`Goal`](Goal.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:130](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L130)
+
+---
+
+### lore
+
+> **lore**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:121](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L121)
+
+---
+
+### messageDirections
+
+> **messageDirections**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:122](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L122)
+
+---
+
+### postDirections
+
+> **postDirections**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:123](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L123)
+
+---
+
+### providers?
+
+> `optional` **providers**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:141](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L141)
+
+---
+
+### recentFacts?
+
+> `optional` **recentFacts**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:133](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L133)
+
+---
+
+### recentFactsData?
+
+> `optional` **recentFactsData**: [`Memory`](Memory.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:134](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L134)
+
+---
+
+### recentInteractions?
+
+> `optional` **recentInteractions**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:144](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L144)
+
+---
+
+### recentInteractionsData?
+
+> `optional` **recentInteractionsData**: [`Memory`](Memory.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:143](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L143)
+
+---
+
+### recentMessages
+
+> **recentMessages**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:131](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L131)
+
+---
+
+### recentMessagesData
+
+> **recentMessagesData**: [`Memory`](Memory.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:132](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L132)
+
+---
+
+### relevantFacts?
+
+> `optional` **relevantFacts**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:135](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L135)
+
+---
+
+### relevantFactsData?
+
+> `optional` **relevantFactsData**: [`Memory`](Memory.md)[]
+
+#### Defined in
+
+[core/src/core/types.ts:136](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L136)
+
+---
+
+### responseData?
+
+> `optional` **responseData**: [`Content`](Content.md)
+
+#### Defined in
+
+[core/src/core/types.ts:142](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L142)
+
+---
+
+### roomId
+
+> **roomId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:124](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L124)
+
+---
+
+### senderName?
+
+> `optional` **senderName**: `string`
+
+#### Defined in
+
+[core/src/core/types.ts:126](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L126)
+
+---
+
+### userId?
+
+> `optional` **userId**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+#### Defined in
+
+[core/src/core/types.ts:118](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L118)
diff --git a/docs/docs/api/type-aliases/Character.md b/docs/docs/api/type-aliases/Character.md
new file mode 100644
index 00000000000..511d14ef778
--- /dev/null
+++ b/docs/docs/api/type-aliases/Character.md
@@ -0,0 +1,129 @@
+# Type Alias: Character
+
+> **Character**: `object`
+
+## Type declaration
+
+### adjectives
+
+> **adjectives**: `string`[]
+
+### bio
+
+> **bio**: `string` \| `string`[]
+
+### clients
+
+> **clients**: [`Clients`](../enumerations/Clients.md)[]
+
+### id?
+
+> `optional` **id**: [`UUID`](UUID.md)
+
+### imageGenModel?
+
+> `optional` **imageGenModel**: [`ImageGenModel`](../enumerations/ImageGenModel.md)
+
+### knowledge?
+
+> `optional` **knowledge**: `string`[]
+
+### lore
+
+> **lore**: `string`[]
+
+### messageExamples
+
+> **messageExamples**: [`MessageExample`](../interfaces/MessageExample.md)[][]
+
+### modelEndpointOverride?
+
+> `optional` **modelEndpointOverride**: `string`
+
+### modelProvider
+
+> **modelProvider**: [`ModelProvider`](../enumerations/ModelProvider.md)
+
+### name
+
+> **name**: `string`
+
+### people
+
+> **people**: `string`[]
+
+### plugins
+
+> **plugins**: [`Plugin`](Plugin.md)[]
+
+### postExamples
+
+> **postExamples**: `string`[]
+
+### settings?
+
+> `optional` **settings**: `object`
+
+### settings.embeddingModel?
+
+> `optional` **embeddingModel**: `string`
+
+### settings.model?
+
+> `optional` **model**: `string`
+
+### settings.secrets?
+
+> `optional` **secrets**: `object`
+
+#### Index Signature
+
+\[`key`: `string`\]: `string`
+
+### settings.voice?
+
+> `optional` **voice**: `object`
+
+### settings.voice.model?
+
+> `optional` **model**: `string`
+
+### settings.voice.url?
+
+> `optional` **url**: `string`
+
+### style
+
+> **style**: `object`
+
+### style.all
+
+> **all**: `string`[]
+
+### style.chat
+
+> **chat**: `string`[]
+
+### style.post
+
+> **post**: `string`[]
+
+### system?
+
+> `optional` **system**: `string`
+
+### templates?
+
+> `optional` **templates**: `object`
+
+#### Index Signature
+
+\[`key`: `string`\]: `string`
+
+### topics
+
+> **topics**: `string`[]
+
+## Defined in
+
+[core/src/core/types.ts:305](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L305)
diff --git a/docs/docs/api/type-aliases/Handler.md b/docs/docs/api/type-aliases/Handler.md
new file mode 100644
index 00000000000..6b3e13d5b4d
--- /dev/null
+++ b/docs/docs/api/type-aliases/Handler.md
@@ -0,0 +1,25 @@
+# Type Alias: Handler()
+
+> **Handler**: (`runtime`, `message`, `state`?, `options`?, `callback`?) => `Promise`\<`unknown`\>
+
+Represents the type of a handler function, which takes a runtime instance, a message, and an optional state, and returns a promise resolving to any type.
+
+## Parameters
+
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+• **message**: [`Memory`](../interfaces/Memory.md)
+
+• **state?**: [`State`](../interfaces/State.md)
+
+• **options?**
+
+• **callback?**: [`HandlerCallback`](HandlerCallback.md)
+
+## Returns
+
+`Promise`\<`unknown`\>
+
+## Defined in
+
+[core/src/core/types.ts:173](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L173)
diff --git a/docs/docs/api/type-aliases/HandlerCallback.md b/docs/docs/api/type-aliases/HandlerCallback.md
new file mode 100644
index 00000000000..2d9641aea5b
--- /dev/null
+++ b/docs/docs/api/type-aliases/HandlerCallback.md
@@ -0,0 +1,17 @@
+# Type Alias: HandlerCallback()
+
+> **HandlerCallback**: (`response`, `files`?) => `Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+## Parameters
+
+• **response**: [`Content`](../interfaces/Content.md)
+
+• **files?**: `any`
+
+## Returns
+
+`Promise`\<[`Memory`](../interfaces/Memory.md)[]\>
+
+## Defined in
+
+[core/src/core/types.ts:182](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L182)
diff --git a/docs/docs/api/type-aliases/Media.md b/docs/docs/api/type-aliases/Media.md
new file mode 100644
index 00000000000..0585ea6b841
--- /dev/null
+++ b/docs/docs/api/type-aliases/Media.md
@@ -0,0 +1,33 @@
+# Type Alias: Media
+
+> **Media**: `object`
+
+## Type declaration
+
+### description
+
+> **description**: `string`
+
+### id
+
+> **id**: `string`
+
+### source
+
+> **source**: `string`
+
+### text
+
+> **text**: `string`
+
+### title
+
+> **title**: `string`
+
+### url
+
+> **url**: `string`
+
+## Defined in
+
+[core/src/core/types.ts:281](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L281)
diff --git a/docs/docs/api/type-aliases/Model.md b/docs/docs/api/type-aliases/Model.md
new file mode 100644
index 00000000000..0449532f653
--- /dev/null
+++ b/docs/docs/api/type-aliases/Model.md
@@ -0,0 +1,65 @@
+# Type Alias: Model
+
+> **Model**: `object`
+
+## Type declaration
+
+### endpoint?
+
+> `optional` **endpoint**: `string`
+
+### model
+
+> **model**: `object`
+
+### model.embedding?
+
+> `optional` **embedding**: `string`
+
+### model.large
+
+> **large**: `string`
+
+### model.medium
+
+> **medium**: `string`
+
+### model.small
+
+> **small**: `string`
+
+### settings
+
+> **settings**: `object`
+
+### settings.frequency_penalty?
+
+> `optional` **frequency_penalty**: `number`
+
+### settings.maxInputTokens
+
+> **maxInputTokens**: `number`
+
+### settings.maxOutputTokens
+
+> **maxOutputTokens**: `number`
+
+### settings.presence_penalty?
+
+> `optional` **presence_penalty**: `number`
+
+### settings.repetition_penalty?
+
+> `optional` **repetition_penalty**: `number`
+
+### settings.stop
+
+> **stop**: `string`[]
+
+### settings.temperature
+
+> **temperature**: `number`
+
+## Defined in
+
+[core/src/core/types.ts:82](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L82)
diff --git a/docs/docs/api/type-aliases/Plugin.md b/docs/docs/api/type-aliases/Plugin.md
new file mode 100644
index 00000000000..3598e5ac7bc
--- /dev/null
+++ b/docs/docs/api/type-aliases/Plugin.md
@@ -0,0 +1,29 @@
+# Type Alias: Plugin
+
+> **Plugin**: `object`
+
+## Type declaration
+
+### actions
+
+> **actions**: [`Action`](../interfaces/Action.md)[]
+
+### description
+
+> **description**: `string`
+
+### evaluators
+
+> **evaluators**: [`Evaluator`](../interfaces/Evaluator.md)[]
+
+### name
+
+> **name**: `string`
+
+### providers
+
+> **providers**: [`Provider`](../interfaces/Provider.md)[]
+
+## Defined in
+
+[core/src/core/types.ts:290](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L290)
diff --git a/docs/docs/api/type-aliases/UUID.md b/docs/docs/api/type-aliases/UUID.md
new file mode 100644
index 00000000000..bf620cb27db
--- /dev/null
+++ b/docs/docs/api/type-aliases/UUID.md
@@ -0,0 +1,9 @@
+# Type Alias: UUID
+
+> **UUID**: \`$\{string\}-$\{string\}-$\{string\}-$\{string\}-$\{string\}\`
+
+Represents a UUID, which is a universally unique identifier conforming to the UUID standard.
+
+## Defined in
+
+[core/src/core/types.ts:7](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L7)
diff --git a/docs/docs/api/type-aliases/Validator.md b/docs/docs/api/type-aliases/Validator.md
new file mode 100644
index 00000000000..3289d9e2e56
--- /dev/null
+++ b/docs/docs/api/type-aliases/Validator.md
@@ -0,0 +1,21 @@
+# Type Alias: Validator()
+
+> **Validator**: (`runtime`, `message`, `state`?) => `Promise`\<`boolean`\>
+
+Represents the type of a validator function, which takes a runtime instance, a message, and an optional state, and returns a promise resolving to a boolean indicating whether the validation passed.
+
+## Parameters
+
+• **runtime**: [`IAgentRuntime`](../interfaces/IAgentRuntime.md)
+
+• **message**: [`Memory`](../interfaces/Memory.md)
+
+• **state?**: [`State`](../interfaces/State.md)
+
+## Returns
+
+`Promise`\<`boolean`\>
+
+## Defined in
+
+[core/src/core/types.ts:190](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/types.ts#L190)
diff --git a/docs/docs/api/typedoc-sidebar.cjs b/docs/docs/api/typedoc-sidebar.cjs
index 98379497e79..6c759f89fee 100644
--- a/docs/docs/api/typedoc-sidebar.cjs
+++ b/docs/docs/api/typedoc-sidebar.cjs
@@ -2,16 +2,46 @@
 /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
 const typedocSidebar = {
   items: [
+    {
+      type: "category",
+      label: "Enumerations",
+      items: [
+        { type: "doc", id: "api/enumerations/Clients", label: "Clients" },
+        { type: "doc", id: "api/enumerations/GoalStatus", label: "GoalStatus" },
+        {
+          type: "doc",
+          id: "api/enumerations/ImageGenModel",
+          label: "ImageGenModel",
+        },
+        { type: "doc", id: "api/enumerations/ModelClass", label: "ModelClass" },
+        {
+          type: "doc",
+          id: "api/enumerations/ModelProvider",
+          label: "ModelProvider",
+        },
+      ],
+    },
     {
       type: "category",
       label: "Classes",
       items: [
+        { type: "doc", id: "api/classes/AgentRuntime", label: "AgentRuntime" },
+        {
+          type: "doc",
+          id: "api/classes/DatabaseAdapter",
+          label: "DatabaseAdapter",
+        },
         { type: "doc", id: "api/classes/DirectClient", label: "DirectClient" },
         {
           type: "doc",
           id: "api/classes/DiscordClient",
           label: "DiscordClient",
         },
+        {
+          type: "doc",
+          id: "api/classes/MemoryManager",
+          label: "MemoryManager",
+        },
         {
           type: "doc",
           id: "api/classes/PostgresDatabaseAdapter",
@@ -58,11 +88,112 @@ const typedocSidebar = {
       type: "category",
       label: "Interfaces",
       items: [
+        { type: "doc", id: "api/interfaces/Account", label: "Account" },
+        { type: "doc", id: "api/interfaces/Action", label: "Action" },
+        {
+          type: "doc",
+          id: "api/interfaces/ActionExample",
+          label: "ActionExample",
+        },
+        { type: "doc", id: "api/interfaces/Actor", label: "Actor" },
+        { type: "doc", id: "api/interfaces/Content", label: "Content" },
+        {
+          type: "doc",
+          id: "api/interfaces/ConversationExample",
+          label: "ConversationExample",
+        },
         {
           type: "doc",
           id: "api/interfaces/CreateAndBuyContent",
           label: "CreateAndBuyContent",
         },
+        {
+          type: "doc",
+          id: "api/interfaces/EvaluationExample",
+          label: "EvaluationExample",
+        },
+        { type: "doc", id: "api/interfaces/Evaluator", label: "Evaluator" },
+        { type: "doc", id: "api/interfaces/Goal", label: "Goal" },
+        {
+          type: "doc",
+          id: "api/interfaces/IAgentRuntime",
+          label: "IAgentRuntime",
+        },
+        {
+          type: "doc",
+          id: "api/interfaces/IBrowserService",
+          label: "IBrowserService",
+        },
+        {
+          type: "doc",
+          id: "api/interfaces/IDatabaseAdapter",
+          label: "IDatabaseAdapter",
+        },
+        {
+          type: "doc",
+          id: "api/interfaces/IImageRecognitionService",
+          label: "IImageRecognitionService",
+        },
+        {
+          type: "doc",
+          id: "api/interfaces/ILlamaService",
+          label: "ILlamaService",
+        },
+        {
+          type: "doc",
+          id: "api/interfaces/IMemoryManager",
+          label: "IMemoryManager",
+        },
+        { type: "doc", id: "api/interfaces/IPdfService", label: "IPdfService" },
+        {
+          type: "doc",
+          id: "api/interfaces/ISpeechService",
+          label: "ISpeechService",
+        },
+        {
+          type: "doc",
+          id: "api/interfaces/ITranscriptionService",
+          label: "ITranscriptionService",
+        },
+        {
+          type: "doc",
+          id: "api/interfaces/IVideoService",
+          label: "IVideoService",
+        },
+        { type: "doc", id: "api/interfaces/Memory", label: "Memory" },
+        {
+          type: "doc",
+          id: "api/interfaces/MessageExample",
+          label: "MessageExample",
+        },
+        { type: "doc", id: "api/interfaces/Objective", label: "Objective" },
+        { type: "doc", id: "api/interfaces/Participant", label: "Participant" },
+        { type: "doc", id: "api/interfaces/Provider", label: "Provider" },
+        {
+          type: "doc",
+          id: "api/interfaces/Relationship",
+          label: "Relationship",
+        },
+        { type: "doc", id: "api/interfaces/Room", label: "Room" },
+        { type: "doc", id: "api/interfaces/State", label: "State" },
+      ],
+    },
+    {
+      type: "category",
+      label: "Type Aliases",
+      items: [
+        { type: "doc", id: "api/type-aliases/Character", label: "Character" },
+        { type: "doc", id: "api/type-aliases/Handler", label: "Handler" },
+        {
+          type: "doc",
+          id: "api/type-aliases/HandlerCallback",
+          label: "HandlerCallback",
+        },
+        { type: "doc", id: "api/type-aliases/Media", label: "Media" },
+        { type: "doc", id: "api/type-aliases/Model", label: "Model" },
+        { type: "doc", id: "api/type-aliases/Plugin", label: "Plugin" },
+        { type: "doc", id: "api/type-aliases/UUID", label: "UUID" },
+        { type: "doc", id: "api/type-aliases/Validator", label: "Validator" },
       ],
     },
     {
@@ -79,6 +210,42 @@ const typedocSidebar = {
           id: "api/variables/continueAction",
           label: "continueAction",
         },
+        {
+          type: "doc",
+          id: "api/variables/defaultActions",
+          label: "defaultActions",
+        },
+        {
+          type: "doc",
+          id: "api/variables/defaultCharacter",
+          label: "defaultCharacter",
+        },
+        {
+          type: "doc",
+          id: "api/variables/defaultEvaluators",
+          label: "defaultEvaluators",
+        },
+        {
+          type: "doc",
+          id: "api/variables/defaultProviders",
+          label: "defaultProviders",
+        },
+        { type: "doc", id: "api/variables/elizaLogger", label: "elizaLogger" },
+        {
+          type: "doc",
+          id: "api/variables/embeddingDimension",
+          label: "embeddingDimension",
+        },
+        {
+          type: "doc",
+          id: "api/variables/embeddingZeroVector",
+          label: "embeddingZeroVector",
+        },
+        {
+          type: "doc",
+          id: "api/variables/evaluationTemplate",
+          label: "evaluationTemplate",
+        },
         { type: "doc", id: "api/variables/executeSwap", label: "executeSwap" },
         { type: "doc", id: "api/variables/followRoom", label: "followRoom" },
         { type: "doc", id: "api/variables/ignore", label: "ignore" },
@@ -87,6 +254,11 @@ const typedocSidebar = {
           id: "api/variables/imageGeneration",
           label: "imageGeneration",
         },
+        {
+          type: "doc",
+          id: "api/variables/imageGenModels",
+          label: "imageGenModels",
+        },
         {
           type: "doc",
           id: "api/variables/messageHandlerTemplate",
@@ -99,11 +271,6 @@ const typedocSidebar = {
           id: "api/variables/orderBookProvider",
           label: "orderBookProvider",
         },
-        {
-          type: "doc",
-          id: "api/variables/prettyConsole",
-          label: "prettyConsole",
-        },
         {
           type: "doc",
           id: "api/variables/shouldContinueTemplate",
@@ -151,12 +318,96 @@ const typedocSidebar = {
       type: "category",
       label: "Functions",
       items: [
+        { type: "doc", id: "api/functions/addHeader", label: "addHeader" },
         { type: "doc", id: "api/functions/buyToken", label: "buyToken" },
+        {
+          type: "doc",
+          id: "api/functions/composeActionExamples",
+          label: "composeActionExamples",
+        },
+        {
+          type: "doc",
+          id: "api/functions/composeContext",
+          label: "composeContext",
+        },
+        {
+          type: "doc",
+          id: "api/functions/createAgentRuntime",
+          label: "createAgentRuntime",
+        },
         {
           type: "doc",
           id: "api/functions/createAndBuyToken",
           label: "createAndBuyToken",
         },
+        {
+          type: "doc",
+          id: "api/functions/createDirectRuntime",
+          label: "createDirectRuntime",
+        },
+        { type: "doc", id: "api/functions/createGoal", label: "createGoal" },
+        {
+          type: "doc",
+          id: "api/functions/createRelationship",
+          label: "createRelationship",
+        },
+        { type: "doc", id: "api/functions/embed", label: "embed" },
+        {
+          type: "doc",
+          id: "api/functions/formatActionNames",
+          label: "formatActionNames",
+        },
+        {
+          type: "doc",
+          id: "api/functions/formatActions",
+          label: "formatActions",
+        },
+        {
+          type: "doc",
+          id: "api/functions/formatActors",
+          label: "formatActors",
+        },
+        {
+          type: "doc",
+          id: "api/functions/formatEvaluatorExampleDescriptions",
+          label: "formatEvaluatorExampleDescriptions",
+        },
+        {
+          type: "doc",
+          id: "api/functions/formatEvaluatorExamples",
+          label: "formatEvaluatorExamples",
+        },
+        {
+          type: "doc",
+          id: "api/functions/formatEvaluatorNames",
+          label: "formatEvaluatorNames",
+        },
+        {
+          type: "doc",
+          id: "api/functions/formatEvaluators",
+          label: "formatEvaluators",
+        },
+        {
+          type: "doc",
+          id: "api/functions/formatGoalsAsString",
+          label: "formatGoalsAsString",
+        },
+        {
+          type: "doc",
+          id: "api/functions/formatMessages",
+          label: "formatMessages",
+        },
+        { type: "doc", id: "api/functions/formatPosts", label: "formatPosts" },
+        {
+          type: "doc",
+          id: "api/functions/formatRelationships",
+          label: "formatRelationships",
+        },
+        {
+          type: "doc",
+          id: "api/functions/formatTimestamp",
+          label: "formatTimestamp",
+        },
         {
           type: "doc",
           id: "api/functions/generateCaption",
@@ -167,12 +418,133 @@ const typedocSidebar = {
           id: "api/functions/generateImage",
           label: "generateImage",
         },
+        {
+          type: "doc",
+          id: "api/functions/generateMessageResponse",
+          label: "generateMessageResponse",
+        },
+        {
+          type: "doc",
+          id: "api/functions/generateObject",
+          label: "generateObject",
+        },
+        {
+          type: "doc",
+          id: "api/functions/generateObjectArray",
+          label: "generateObjectArray",
+        },
+        {
+          type: "doc",
+          id: "api/functions/generateShouldRespond",
+          label: "generateShouldRespond",
+        },
+        {
+          type: "doc",
+          id: "api/functions/generateText",
+          label: "generateText",
+        },
+        {
+          type: "doc",
+          id: "api/functions/generateTextArray",
+          label: "generateTextArray",
+        },
+        {
+          type: "doc",
+          id: "api/functions/generateTrueOrFalse",
+          label: "generateTrueOrFalse",
+        },
+        {
+          type: "doc",
+          id: "api/functions/getActorDetails",
+          label: "getActorDetails",
+        },
+        { type: "doc", id: "api/functions/getEndpoint", label: "getEndpoint" },
+        { type: "doc", id: "api/functions/getGoals", label: "getGoals" },
+        {
+          type: "doc",
+          id: "api/functions/getImageGenModel",
+          label: "getImageGenModel",
+        },
+        { type: "doc", id: "api/functions/getModel", label: "getModel" },
+        {
+          type: "doc",
+          id: "api/functions/getProviders",
+          label: "getProviders",
+        },
+        {
+          type: "doc",
+          id: "api/functions/getRelationship",
+          label: "getRelationship",
+        },
+        {
+          type: "doc",
+          id: "api/functions/getRelationships",
+          label: "getRelationships",
+        },
+        {
+          type: "doc",
+          id: "api/functions/getTokenForProvider",
+          label: "getTokenForProvider",
+        },
+        {
+          type: "doc",
+          id: "api/functions/initializeClients",
+          label: "initializeClients",
+        },
+        {
+          type: "doc",
+          id: "api/functions/initializeDatabase",
+          label: "initializeDatabase",
+        },
         {
           type: "doc",
           id: "api/functions/isCreateAndBuyContent",
           label: "isCreateAndBuyContent",
         },
+        {
+          type: "doc",
+          id: "api/functions/loadActionConfigs",
+          label: "loadActionConfigs",
+        },
+        {
+          type: "doc",
+          id: "api/functions/loadCharacters",
+          label: "loadCharacters",
+        },
+        {
+          type: "doc",
+          id: "api/functions/loadCustomActions",
+          label: "loadCustomActions",
+        },
+        {
+          type: "doc",
+          id: "api/functions/parseArguments",
+          label: "parseArguments",
+        },
+        {
+          type: "doc",
+          id: "api/functions/retrieveCachedEmbedding",
+          label: "retrieveCachedEmbedding",
+        },
         { type: "doc", id: "api/functions/sellToken", label: "sellToken" },
+        { type: "doc", id: "api/functions/splitChunks", label: "splitChunks" },
+        {
+          type: "doc",
+          id: "api/functions/startDiscord",
+          label: "startDiscord",
+        },
+        {
+          type: "doc",
+          id: "api/functions/startTelegram",
+          label: "startTelegram",
+        },
+        {
+          type: "doc",
+          id: "api/functions/startTwitter",
+          label: "startTwitter",
+        },
+        { type: "doc", id: "api/functions/trimTokens", label: "trimTokens" },
+        { type: "doc", id: "api/functions/updateGoal", label: "updateGoal" },
       ],
     },
   ],
diff --git a/docs/docs/api/variables/boredomProvider.md b/docs/docs/api/variables/boredomProvider.md
index f64a1c7bda6..f9fdc3d727c 100644
--- a/docs/docs/api/variables/boredomProvider.md
+++ b/docs/docs/api/variables/boredomProvider.md
@@ -1,7 +1,7 @@
 # Variable: boredomProvider
 
-> `const` **boredomProvider**: `Provider`
+> `const` **boredomProvider**: [`Provider`](../interfaces/Provider.md)
 
 ## Defined in
 
-[core/src/providers/boredom.ts:275](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/boredom.ts#L275)
+[core/src/providers/boredom.ts:275](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/boredom.ts#L275)
diff --git a/docs/docs/api/variables/continueAction.md b/docs/docs/api/variables/continueAction.md
index 9d2a97ad19c..030165236dd 100644
--- a/docs/docs/api/variables/continueAction.md
+++ b/docs/docs/api/variables/continueAction.md
@@ -1,7 +1,7 @@
 # Variable: continueAction
 
-> `const` **continueAction**: `Action`
+> `const` **continueAction**: [`Action`](../interfaces/Action.md)
 
 ## Defined in
 
-[core/src/actions/continue.ts:59](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/continue.ts#L59)
+[core/src/actions/continue.ts:58](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/continue.ts#L58)
diff --git a/docs/docs/api/variables/defaultActions.md b/docs/docs/api/variables/defaultActions.md
new file mode 100644
index 00000000000..b283756741b
--- /dev/null
+++ b/docs/docs/api/variables/defaultActions.md
@@ -0,0 +1,7 @@
+# Variable: defaultActions
+
+> `const` **defaultActions**: [`Action`](../interfaces/Action.md)[]
+
+## Defined in
+
+[core/src/core/actions.ts:6](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/actions.ts#L6)
diff --git a/docs/docs/api/variables/defaultCharacter.md b/docs/docs/api/variables/defaultCharacter.md
new file mode 100644
index 00000000000..58de13c19f4
--- /dev/null
+++ b/docs/docs/api/variables/defaultCharacter.md
@@ -0,0 +1,7 @@
+# Variable: defaultCharacter
+
+> `const` **defaultCharacter**: [`Character`](../type-aliases/Character.md)
+
+## Defined in
+
+[core/src/core/defaultCharacter.ts:3](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/defaultCharacter.ts#L3)
diff --git a/docs/docs/api/variables/defaultEvaluators.md b/docs/docs/api/variables/defaultEvaluators.md
new file mode 100644
index 00000000000..3d8953896dc
--- /dev/null
+++ b/docs/docs/api/variables/defaultEvaluators.md
@@ -0,0 +1,7 @@
+# Variable: defaultEvaluators
+
+> `const` **defaultEvaluators**: [`Evaluator`](../interfaces/Evaluator.md)[]
+
+## Defined in
+
+[core/src/core/evaluators.ts:7](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/evaluators.ts#L7)
diff --git a/docs/docs/api/variables/defaultProviders.md b/docs/docs/api/variables/defaultProviders.md
new file mode 100644
index 00000000000..a7005af1763
--- /dev/null
+++ b/docs/docs/api/variables/defaultProviders.md
@@ -0,0 +1,7 @@
+# Variable: defaultProviders
+
+> `const` **defaultProviders**: [`Provider`](../interfaces/Provider.md)[]
+
+## Defined in
+
+[core/src/core/providers.ts:4](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/providers.ts#L4)
diff --git a/docs/docs/api/variables/elizaLogger.md b/docs/docs/api/variables/elizaLogger.md
new file mode 100644
index 00000000000..ffb378d63fa
--- /dev/null
+++ b/docs/docs/api/variables/elizaLogger.md
@@ -0,0 +1,7 @@
+# Variable: elizaLogger
+
+> `const` **elizaLogger**: `elizaLogger`
+
+## Defined in
+
+[core/src/index.ts:12](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/index.ts#L12)
diff --git a/docs/docs/api/variables/embeddingDimension.md b/docs/docs/api/variables/embeddingDimension.md
new file mode 100644
index 00000000000..1447d864ead
--- /dev/null
+++ b/docs/docs/api/variables/embeddingDimension.md
@@ -0,0 +1,7 @@
+# Variable: embeddingDimension
+
+> `const` **embeddingDimension**: `1536` = `1536`
+
+## Defined in
+
+[core/src/core/memory.ts:9](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L9)
diff --git a/docs/docs/api/variables/embeddingZeroVector.md b/docs/docs/api/variables/embeddingZeroVector.md
new file mode 100644
index 00000000000..9101bd6332b
--- /dev/null
+++ b/docs/docs/api/variables/embeddingZeroVector.md
@@ -0,0 +1,7 @@
+# Variable: embeddingZeroVector
+
+> `const` **embeddingZeroVector**: `any`[]
+
+## Defined in
+
+[core/src/core/memory.ts:10](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/memory.ts#L10)
diff --git a/docs/docs/api/variables/evaluationTemplate.md b/docs/docs/api/variables/evaluationTemplate.md
new file mode 100644
index 00000000000..316b9d6be67
--- /dev/null
+++ b/docs/docs/api/variables/evaluationTemplate.md
@@ -0,0 +1,9 @@
+# Variable: evaluationTemplate
+
+> `const` **evaluationTemplate**: `string`
+
+Template used for the evaluation generateText.
+
+## Defined in
+
+[core/src/core/evaluators.ts:12](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/evaluators.ts#L12)
diff --git a/docs/docs/api/variables/executeSwap.md b/docs/docs/api/variables/executeSwap.md
index 20c81045a84..15018dafaaf 100644
--- a/docs/docs/api/variables/executeSwap.md
+++ b/docs/docs/api/variables/executeSwap.md
@@ -1,7 +1,7 @@
 # Variable: executeSwap
 
-> `const` **executeSwap**: `Action`
+> `const` **executeSwap**: [`Action`](../interfaces/Action.md)
 
 ## Defined in
 
-[core/src/actions/swap.ts:178](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/swap.ts#L178)
+[core/src/actions/swap.ts:178](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/swap.ts#L178)
diff --git a/docs/docs/api/variables/followRoom.md b/docs/docs/api/variables/followRoom.md
index f3e3fee3b0b..37276e24ce0 100644
--- a/docs/docs/api/variables/followRoom.md
+++ b/docs/docs/api/variables/followRoom.md
@@ -1,7 +1,7 @@
 # Variable: followRoom
 
-> `const` **followRoom**: `Action`
+> `const` **followRoom**: [`Action`](../interfaces/Action.md)
 
 ## Defined in
 
-[core/src/actions/followRoom.ts:27](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/followRoom.ts#L27)
+[core/src/actions/followRoom.ts:27](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/followRoom.ts#L27)
diff --git a/docs/docs/api/variables/ignore.md b/docs/docs/api/variables/ignore.md
index cde18669ca5..151124d7180 100644
--- a/docs/docs/api/variables/ignore.md
+++ b/docs/docs/api/variables/ignore.md
@@ -1,7 +1,7 @@
 # Variable: ignore
 
-> `const` **ignore**: `Action`
+> `const` **ignore**: [`Action`](../interfaces/Action.md)
 
 ## Defined in
 
-[core/src/actions/ignore.ts:8](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/ignore.ts#L8)
+[core/src/actions/ignore.ts:8](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/ignore.ts#L8)
diff --git a/docs/docs/api/variables/imageGenModels.md b/docs/docs/api/variables/imageGenModels.md
new file mode 100644
index 00000000000..7f38921b9ea
--- /dev/null
+++ b/docs/docs/api/variables/imageGenModels.md
@@ -0,0 +1,33 @@
+# Variable: imageGenModels
+
+> `const` **imageGenModels**: `object`
+
+## Type declaration
+
+### Dalle
+
+> **Dalle**: `object`
+
+### Dalle.steps
+
+> **steps**: `number` = `0`
+
+### Dalle.subModel
+
+> **subModel**: `string` = `"dall-e-3"`
+
+### TogetherAI
+
+> **TogetherAI**: `object`
+
+### TogetherAI.steps
+
+> **steps**: `number` = `4`
+
+### TogetherAI.subModel
+
+> **subModel**: `string` = `"black-forest-labs/FLUX.1-schnell"`
+
+## Defined in
+
+[core/src/core/imageGenModels.ts:6](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/core/imageGenModels.ts#L6)
diff --git a/docs/docs/api/variables/imageGeneration.md b/docs/docs/api/variables/imageGeneration.md
index 140f3ac2ae9..2ca52ee544c 100644
--- a/docs/docs/api/variables/imageGeneration.md
+++ b/docs/docs/api/variables/imageGeneration.md
@@ -1,7 +1,7 @@
 # Variable: imageGeneration
 
-> `const` **imageGeneration**: `Action`
+> `const` **imageGeneration**: [`Action`](../interfaces/Action.md)
 
 ## Defined in
 
-[core/src/actions/imageGeneration.ts:11](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/imageGeneration.ts#L11)
+[core/src/actions/imageGeneration.ts:11](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/imageGeneration.ts#L11)
diff --git a/docs/docs/api/variables/messageHandlerTemplate.md b/docs/docs/api/variables/messageHandlerTemplate.md
index 0aa659883ce..cef7d99229a 100644
--- a/docs/docs/api/variables/messageHandlerTemplate.md
+++ b/docs/docs/api/variables/messageHandlerTemplate.md
@@ -4,4 +4,4 @@
 
 ## Defined in
 
-[core/src/actions/continue.ts:21](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/continue.ts#L21)
+[core/src/actions/continue.ts:20](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/continue.ts#L20)
diff --git a/docs/docs/api/variables/muteRoom.md b/docs/docs/api/variables/muteRoom.md
index f6320b62e81..e955e043758 100644
--- a/docs/docs/api/variables/muteRoom.md
+++ b/docs/docs/api/variables/muteRoom.md
@@ -1,7 +1,7 @@
 # Variable: muteRoom
 
-> `const` **muteRoom**: `Action`
+> `const` **muteRoom**: [`Action`](../interfaces/Action.md)
 
 ## Defined in
 
-[core/src/actions/muteRoom.ts:28](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/muteRoom.ts#L28)
+[core/src/actions/muteRoom.ts:28](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/muteRoom.ts#L28)
diff --git a/docs/docs/api/variables/none.md b/docs/docs/api/variables/none.md
index 7a1c6fdde29..583c9f86f15 100644
--- a/docs/docs/api/variables/none.md
+++ b/docs/docs/api/variables/none.md
@@ -1,7 +1,7 @@
 # Variable: none
 
-> `const` **none**: `Action`
+> `const` **none**: [`Action`](../interfaces/Action.md)
 
 ## Defined in
 
-[core/src/actions/none.ts:8](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/none.ts#L8)
+[core/src/actions/none.ts:8](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/none.ts#L8)
diff --git a/docs/docs/api/variables/orderBookProvider.md b/docs/docs/api/variables/orderBookProvider.md
index 6111bb763c5..1a727c6a829 100644
--- a/docs/docs/api/variables/orderBookProvider.md
+++ b/docs/docs/api/variables/orderBookProvider.md
@@ -1,7 +1,7 @@
 # Variable: orderBookProvider
 
-> `const` **orderBookProvider**: `Provider`
+> `const` **orderBookProvider**: [`Provider`](../interfaces/Provider.md)
 
 ## Defined in
 
-[core/src/providers/orderBook.ts:14](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/orderBook.ts#L14)
+[core/src/providers/orderBook.ts:14](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/orderBook.ts#L14)
diff --git a/docs/docs/api/variables/prettyConsole.md b/docs/docs/api/variables/prettyConsole.md
deleted file mode 100644
index 5dce8db6011..00000000000
--- a/docs/docs/api/variables/prettyConsole.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Variable: prettyConsole
-
-> `const` **prettyConsole**: `PrettyConsole`
-
-## Defined in
-
-[core/src/index.ts:41](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/index.ts#L41)
diff --git a/docs/docs/api/variables/shouldContinueTemplate.md b/docs/docs/api/variables/shouldContinueTemplate.md
index 9ef30f57af2..a6f189eb0b3 100644
--- a/docs/docs/api/variables/shouldContinueTemplate.md
+++ b/docs/docs/api/variables/shouldContinueTemplate.md
@@ -4,4 +4,4 @@
 
 ## Defined in
 
-[core/src/actions/continue.ts:48](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/continue.ts#L48)
+[core/src/actions/continue.ts:47](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/continue.ts#L47)
diff --git a/docs/docs/api/variables/shouldFollowTemplate.md b/docs/docs/api/variables/shouldFollowTemplate.md
index ed671265855..682da6f91ba 100644
--- a/docs/docs/api/variables/shouldFollowTemplate.md
+++ b/docs/docs/api/variables/shouldFollowTemplate.md
@@ -4,4 +4,4 @@
 
 ## Defined in
 
-[core/src/actions/followRoom.ts:13](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/followRoom.ts#L13)
+[core/src/actions/followRoom.ts:13](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/followRoom.ts#L13)
diff --git a/docs/docs/api/variables/shouldMuteTemplate.md b/docs/docs/api/variables/shouldMuteTemplate.md
index 604c2eff89a..c999f23e561 100644
--- a/docs/docs/api/variables/shouldMuteTemplate.md
+++ b/docs/docs/api/variables/shouldMuteTemplate.md
@@ -4,4 +4,4 @@
 
 ## Defined in
 
-[core/src/actions/muteRoom.ts:13](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/muteRoom.ts#L13)
+[core/src/actions/muteRoom.ts:13](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/muteRoom.ts#L13)
diff --git a/docs/docs/api/variables/shouldUnmuteTemplate.md b/docs/docs/api/variables/shouldUnmuteTemplate.md
index 22903802eda..e69a5fc9aaa 100644
--- a/docs/docs/api/variables/shouldUnmuteTemplate.md
+++ b/docs/docs/api/variables/shouldUnmuteTemplate.md
@@ -4,4 +4,4 @@
 
 ## Defined in
 
-[core/src/actions/unmuteRoom.ts:13](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/unmuteRoom.ts#L13)
+[core/src/actions/unmuteRoom.ts:13](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/unmuteRoom.ts#L13)
diff --git a/docs/docs/api/variables/timeProvider.md b/docs/docs/api/variables/timeProvider.md
index 4008bf32796..495451cd21c 100644
--- a/docs/docs/api/variables/timeProvider.md
+++ b/docs/docs/api/variables/timeProvider.md
@@ -1,7 +1,7 @@
 # Variable: timeProvider
 
-> `const` **timeProvider**: `Provider`
+> `const` **timeProvider**: [`Provider`](../interfaces/Provider.md)
 
 ## Defined in
 
-[core/src/providers/time.ts:3](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/time.ts#L3)
+[core/src/providers/time.ts:3](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/time.ts#L3)
diff --git a/docs/docs/api/variables/tokenProvider.md b/docs/docs/api/variables/tokenProvider.md
index e1ed488be40..f2af9a6a8bb 100644
--- a/docs/docs/api/variables/tokenProvider.md
+++ b/docs/docs/api/variables/tokenProvider.md
@@ -1,7 +1,7 @@
 # Variable: tokenProvider
 
-> `const` **tokenProvider**: `Provider`
+> `const` **tokenProvider**: [`Provider`](../interfaces/Provider.md)
 
 ## Defined in
 
-[core/src/providers/token.ts:801](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/token.ts#L801)
+[core/src/providers/token.ts:801](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/token.ts#L801)
diff --git a/docs/docs/api/variables/unfollowRoom.md b/docs/docs/api/variables/unfollowRoom.md
index c58006ef9a1..a35743195c4 100644
--- a/docs/docs/api/variables/unfollowRoom.md
+++ b/docs/docs/api/variables/unfollowRoom.md
@@ -1,7 +1,7 @@
 # Variable: unfollowRoom
 
-> `const` **unfollowRoom**: `Action`
+> `const` **unfollowRoom**: [`Action`](../interfaces/Action.md)
 
 ## Defined in
 
-[core/src/actions/unfollowRoom.ts:27](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/unfollowRoom.ts#L27)
+[core/src/actions/unfollowRoom.ts:27](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/unfollowRoom.ts#L27)
diff --git a/docs/docs/api/variables/unmuteRoom.md b/docs/docs/api/variables/unmuteRoom.md
index f67161a173f..95fd4dabbe3 100644
--- a/docs/docs/api/variables/unmuteRoom.md
+++ b/docs/docs/api/variables/unmuteRoom.md
@@ -1,7 +1,7 @@
 # Variable: unmuteRoom
 
-> `const` **unmuteRoom**: `Action`
+> `const` **unmuteRoom**: [`Action`](../interfaces/Action.md)
 
 ## Defined in
 
-[core/src/actions/unmuteRoom.ts:27](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/actions/unmuteRoom.ts#L27)
+[core/src/actions/unmuteRoom.ts:27](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/actions/unmuteRoom.ts#L27)
diff --git a/docs/docs/api/variables/walletProvider.md b/docs/docs/api/variables/walletProvider.md
index ee69c8f2f10..32f4688f60c 100644
--- a/docs/docs/api/variables/walletProvider.md
+++ b/docs/docs/api/variables/walletProvider.md
@@ -1,7 +1,7 @@
 # Variable: walletProvider
 
-> `const` **walletProvider**: `Provider`
+> `const` **walletProvider**: [`Provider`](../interfaces/Provider.md)
 
 ## Defined in
 
-[core/src/providers/wallet.ts:244](https://github.com/ai16z/eliza/blob/d62ba1b3bd238d14ac669409dda20e8446e34da9/core/src/providers/wallet.ts#L244)
+[core/src/providers/wallet.ts:244](https://github.com/ai16z/eliza/blob/c96957e5a5d17e343b499dd4d46ce403856ac5bc/core/src/providers/wallet.ts#L244)
diff --git a/package.json b/package.json
index 47f93f63804..1d07c9fd579 100644
--- a/package.json
+++ b/package.json
@@ -2,15 +2,15 @@
     "name": "eliza",
     "scripts": {
         "preinstall": "npx only-allow pnpm",
-        "build": "pnpm --dir core build",
+        "build": "bash ./scripts/build.sh",
         "build-docs": "pnpm --dir docs build",
-        "start:all": "pnpm --dir core start:all --isRoot",
-        "stop:all": "pnpm --dir core stop:all --isRoot",
-        "start:service:all": "pnpm --dir core start:service:all --isRoot",
-        "stop:service:all": "pnpm --dir core stop:service:all --isRoot",
-        "start": "pnpm --dir core start --isRoot",
-        "dev": "pnpm --dir core dev --isRoot",
-        "lint": "pnpm --dir core lint",
+        "start:all": "pnpm --dir agent start:all --isRoot",
+        "stop:all": "pnpm --dir agent stop:all --isRoot",
+        "start:service:all": "pnpm --dir agent start:service:all --isRoot",
+        "stop:service:all": "pnpm --dir agent stop:service:all --isRoot",
+        "start": "pnpm --dir agent start --isRoot",
+        "dev": "pnpm --dir agent dev --isRoot",
+        "lint": "pnpm --dir core lint && pnpm --dir agent lint",
         "prettier-check": "npx prettier --check .",
         "prettier": "npx prettier --write .",
         "clean": "bash ./scripts/clean.sh"
@@ -22,6 +22,11 @@
         "prettier": "^3.3.3",
         "typedoc": "^0.26.11"
     },
+    "pnpm": {
+        "overrides": {
+            "onnxruntime-node": "^1.20.0"
+        }
+    },
     "engines": {
         "node": ">=22"
     },
diff --git a/packages/plugin-image-generation/package.json b/packages/plugin-image-generation/package.json
new file mode 100644
index 00000000000..d5f898f046c
--- /dev/null
+++ b/packages/plugin-image-generation/package.json
@@ -0,0 +1,17 @@
+{
+    "name": "@eliza/plugin-image-generation",
+    "version": "0.0.1",
+    "main": "dist/index.js",
+    "type": "module",
+    "types": "dist/index.d.ts",
+    "dependencies": {
+        "@eliza/core": "workspace:*",
+        "tsup": "^8.3.5"
+    },
+    "scripts": {
+        "build": "tsup --format esm --dts"
+    },
+    "peerDependencies": {
+        "whatwg-url": "7.1.0"
+    }
+}
diff --git a/packages/plugin-image-generation/src/index.ts b/packages/plugin-image-generation/src/index.ts
new file mode 100644
index 00000000000..61bd1b81b3b
--- /dev/null
+++ b/packages/plugin-image-generation/src/index.ts
@@ -0,0 +1,174 @@
+import {
+    HandlerCallback,
+    IAgentRuntime,
+    Memory,
+    State,
+    Plugin,
+    Action,
+} from "@eliza/core";
+import { elizaLogger } from "@eliza/core";
+import { generateCaption, generateImage } from "./utils.ts";
+
+const imageGeneration: Action = {
+    name: "GENERATE_IMAGE",
+    similes: ["IMAGE_GENERATION", "IMAGE_GEN", "CREATE_IMAGE", "MAKE_PICTURE"],
+    description: "Generate an image to go along with the message.",
+    validate: async (runtime: IAgentRuntime, message: Memory) => {
+        const anthropicApiKeyOk = !!runtime.getSetting("ANTHROPIC_API_KEY");
+        const togetherApiKeyOk = !!runtime.getSetting("TOGETHER_API_KEY");
+
+        // TODO: Add openai DALL-E generation as well
+
+        return anthropicApiKeyOk && togetherApiKeyOk;
+    },
+    handler: async (
+        runtime: IAgentRuntime,
+        message: Memory,
+        state: State,
+        options: any,
+        callback: HandlerCallback
+    ) => {
+        elizaLogger.log("Composing state for message:", message);
+        state = (await runtime.composeState(message)) as State;
+        const userId = runtime.agentId;
+        elizaLogger.log("User ID:", userId);
+
+        const imagePrompt = message.content.text;
+        elizaLogger.log("Image prompt received:", imagePrompt);
+
+        // TODO: Generate a prompt for the image
+
+        const res: { image: string; caption: string }[] = [];
+
+        elizaLogger.log("Generating image with prompt:", imagePrompt);
+        const images = await generateImage(
+            {
+                prompt: imagePrompt,
+                width: 1024,
+                height: 1024,
+                count: 1,
+            },
+            runtime
+        );
+
+        if (images.success && images.data && images.data.length > 0) {
+            elizaLogger.log(
+                "Image generation successful, number of images:",
+                images.data.length
+            );
+            for (let i = 0; i < images.data.length; i++) {
+                const image = images.data[i];
+                elizaLogger.log(`Processing image ${i + 1}:`, image);
+
+                const caption = await generateCaption(
+                    {
+                        imageUrl: image,
+                    },
+                    runtime
+                );
+
+                elizaLogger.log(
+                    `Generated caption for image ${i + 1}:`,
+                    caption.title
+                );
+                res.push({ image: image, caption: caption.title });
+
+                callback(
+                    {
+                        text: caption.description,
+                        attachments: [
+                            {
+                                id: crypto.randomUUID(),
+                                url: image,
+                                title: "Generated image",
+                                source: "imageGeneration",
+                                description: caption.title,
+                                text: caption.description,
+                            },
+                        ],
+                    },
+                    []
+                );
+            }
+        } else {
+            elizaLogger.error("Image generation failed or returned no data.");
+        }
+    },
+    examples: [
+        // TODO: We want to generate images in more abstract ways, not just when asked to generate an image
+
+        [
+            {
+                user: "{{user1}}",
+                content: { text: "Generate an image of a cat" },
+            },
+            {
+                user: "{{agentName}}",
+                content: {
+                    text: "Here's an image of a cat",
+                    action: "GENERATE_IMAGE",
+                },
+            },
+        ],
+        [
+            {
+                user: "{{user1}}",
+                content: { text: "Generate an image of a dog" },
+            },
+            {
+                user: "{{agentName}}",
+                content: {
+                    text: "Here's an image of a dog",
+                    action: "GENERATE_IMAGE",
+                },
+            },
+        ],
+        [
+            {
+                user: "{{user1}}",
+                content: { text: "Create an image of a cat with a hat" },
+            },
+            {
+                user: "{{agentName}}",
+                content: {
+                    text: "Here's an image of a cat with a hat",
+                    action: "GENERATE_IMAGE",
+                },
+            },
+        ],
+        [
+            {
+                user: "{{user1}}",
+                content: { text: "Make an image of a dog with a hat" },
+            },
+            {
+                user: "{{agentName}}",
+                content: {
+                    text: "Here's an image of a dog with a hat",
+                    action: "GENERATE_IMAGE",
+                },
+            },
+        ],
+        [
+            {
+                user: "{{user1}}",
+                content: { text: "Paint an image of a cat with a hat" },
+            },
+            {
+                user: "{{agentName}}",
+                content: {
+                    text: "Here's an image of a cat with a hat",
+                    action: "GENERATE_IMAGE",
+                },
+            },
+        ],
+    ],
+} as Action;
+
+export const imageGenerationPlugin: Plugin = {
+    name: "imageGeneration",
+    description: "Generate images",
+    actions: [imageGeneration],
+    evaluators: [],
+    providers: [],
+};
diff --git a/packages/plugin-image-generation/src/utils.ts b/packages/plugin-image-generation/src/utils.ts
new file mode 100644
index 00000000000..e00e56e17e5
--- /dev/null
+++ b/packages/plugin-image-generation/src/utils.ts
@@ -0,0 +1,104 @@
+// TODO: Replace with the vercel ai sdk and support all providers
+import { Buffer } from "buffer";
+import Together from "together-ai";
+import { IAgentRuntime } from "@eliza/core";
+import { getImageGenModel, ImageGenModel } from "@eliza/core";
+
+import OpenAI from "openai";
+
+export const generateImage = async (
+    data: {
+        prompt: string;
+        width: number;
+        height: number;
+        count?: number;
+    },
+    runtime: IAgentRuntime
+): Promise<{
+    success: boolean;
+    data?: string[];
+    error?: any;
+}> => {
+    const { prompt, width, height } = data;
+    let { count } = data;
+    if (!count) {
+        count = 1;
+    }
+
+    const imageGenModel = runtime.imageGenModel;
+    const model = getImageGenModel(imageGenModel);
+    const apiKey =
+        imageGenModel === ImageGenModel.TogetherAI
+            ? runtime.getSetting("TOGETHER_API_KEY")
+            : runtime.getSetting("OPENAI_API_KEY");
+
+    try {
+        if (imageGenModel === ImageGenModel.TogetherAI) {
+            const together = new Together({ apiKey: apiKey as string });
+            const response = await together.images.create({
+                model: "black-forest-labs/FLUX.1-schnell",
+                prompt,
+                width,
+                height,
+                steps: model.steps,
+                n: count,
+            });
+            const urls: string[] = [];
+            for (let i = 0; i < response.data.length; i++) {
+                //@ts-ignore
+                const url = response.data[i].url;
+                urls.push(url);
+            }
+            const base64s = await Promise.all(
+                urls.map(async (url) => {
+                    const response = await fetch(url);
+                    const blob = await response.blob();
+                    const buffer = await blob.arrayBuffer();
+                    let base64 = Buffer.from(buffer).toString("base64");
+                    base64 = "data:image/jpeg;base64," + base64;
+                    return base64;
+                })
+            );
+            return { success: true, data: base64s };
+        } else {
+            let targetSize = `${width}x${height}`;
+            if (
+                targetSize !== "1024x1024" &&
+                targetSize !== "1792x1024" &&
+                targetSize !== "1024x1792"
+            ) {
+                targetSize = "1024x1024";
+            }
+            const openai = new OpenAI({ apiKey: apiKey as string });
+            const response = await openai.images.generate({
+                model: model.subModel,
+                prompt,
+                size: targetSize as "1024x1024" | "1792x1024" | "1024x1792",
+                n: count,
+                response_format: "b64_json",
+            });
+            const base64s = response.data.map(
+                (image) => `data:image/png;base64,${image.b64_json}`
+            );
+            return { success: true, data: base64s };
+        }
+    } catch (error) {
+        console.error(error);
+        return { success: false, error: error };
+    }
+};
+
+export const generateCaption = async (
+    data: { imageUrl: string },
+    runtime: IAgentRuntime
+): Promise<{
+    title: string;
+    description: string;
+}> => {
+    const { imageUrl } = data;
+    const resp = await runtime.imageDescriptionService.describeImage(imageUrl);
+    return {
+        title: resp.title.trim(),
+        description: resp.description.trim(),
+    };
+};
diff --git a/packages/plugin-image-generation/tsconfig.json b/packages/plugin-image-generation/tsconfig.json
new file mode 100644
index 00000000000..eaa78145aa3
--- /dev/null
+++ b/packages/plugin-image-generation/tsconfig.json
@@ -0,0 +1,8 @@
+{
+    "extends": "../../tsconfig.json",
+    "compilerOptions": {
+        "outDir": "dist",
+        "rootDir": "./src"
+    },
+    "include": ["src"]
+}
diff --git a/packages/plugin-image-generation/tsup.config.ts b/packages/plugin-image-generation/tsup.config.ts
new file mode 100644
index 00000000000..e42bf4efeae
--- /dev/null
+++ b/packages/plugin-image-generation/tsup.config.ts
@@ -0,0 +1,20 @@
+import { defineConfig } from "tsup";
+
+export default defineConfig({
+    entry: ["src/index.ts"],
+    outDir: "dist",
+    sourcemap: true,
+    clean: true,
+    format: ["esm"], // Ensure you're targeting CommonJS
+    external: [
+        "dotenv", // Externalize dotenv to prevent bundling
+        "fs", // Externalize fs to use Node.js built-in module
+        "path", // Externalize other built-ins if necessary
+        "@reflink/reflink",
+        "@node-llama-cpp",
+        "https",
+        "http",
+        "agentkeepalive",
+        // Add other modules you want to externalize
+    ],
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ee15f21d93a..a3e87a1e855 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4,6 +4,9 @@ settings:
   autoInstallPeers: true
   excludeLinksFromLockfile: false
 
+overrides:
+  onnxruntime-node: ^1.20.0
+
 importers:
 
   .:
@@ -28,6 +31,25 @@ importers:
         specifier: ^0.26.11
         version: 0.26.11(typescript@5.6.3)
 
+  agent:
+    dependencies:
+      '@eliza/core':
+        specifier: workspace:*
+        version: link:../core
+      '@eliza/plugin-image-generation':
+        specifier: workspace:*
+        version: link:../packages/plugin-image-generation
+      readline:
+        specifier: ^1.3.0
+        version: 1.3.0
+      tsup:
+        specifier: ^8.3.5
+        version: 8.3.5(jiti@1.21.6)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.6.0)
+    devDependencies:
+      ts-node:
+        specifier: 10.9.2
+        version: 10.9.2(@types/node@22.8.4)(typescript@5.6.3)
+
   core:
     dependencies:
       '@ai-sdk/anthropic':
@@ -107,7 +129,7 @@ importers:
         version: 0.0.13
       ai:
         specifier: ^3.4.23
-        version: 3.4.32(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.2.0)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
+        version: 3.4.33(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.2.0)(sswr@2.1.0(svelte@5.1.11))(svelte@5.1.11)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
       alawmulaw:
         specifier: 6.0.0
         version: 6.0.0
@@ -235,7 +257,7 @@ importers:
         specifier: 3.1.7
         version: 3.1.7
       onnxruntime-node:
-        specifier: ^1.19.2
+        specifier: ^1.20.0
         version: 1.20.0
       openai:
         specifier: 4.69.0
@@ -291,6 +313,9 @@ importers:
       together-ai:
         specifier: ^0.7.0
         version: 0.7.0(encoding@0.1.13)
+      tsup:
+        specifier: ^8.3.5
+        version: 8.3.5(jiti@1.21.6)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.6.0)
       unique-names-generator:
         specifier: 4.7.1
         version: 4.7.1
@@ -432,7 +457,7 @@ importers:
         version: 3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(prop-types@15.8.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)
       '@docusaurus/preset-classic':
         specifier: ^3.6.0
-        version: 3.6.0(@algolia/client-search@5.12.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)
+        version: 3.6.0(@algolia/client-search@5.13.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)
       '@docusaurus/theme-mermaid':
         specifier: ^3.6.0
         version: 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)
@@ -474,6 +499,18 @@ importers:
         specifier: 4.2.9
         version: 4.2.9(typedoc@0.26.11(typescript@5.6.3))
 
+  packages/plugin-image-generation:
+    dependencies:
+      '@eliza/core':
+        specifier: workspace:*
+        version: link:../../core
+      tsup:
+        specifier: ^8.3.5
+        version: 8.3.5(jiti@1.21.6)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.6.0)
+      whatwg-url:
+        specifier: 7.1.0
+        version: 7.1.0
+
 packages:
 
   '@ai-sdk/anthropic@0.0.53':
@@ -580,11 +617,11 @@ packages:
       vue:
         optional: true
 
-  '@algolia/autocomplete-core@1.9.3':
-    resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==}
+  '@algolia/autocomplete-core@1.17.6':
+    resolution: {integrity: sha512-lkDoW4I7h2kKlIgf3pUt1LqvxyYKkVyiypoGLlUnhPSnCpmeOwudM6rNq6YYsCmdQtnDQoW5lUNNuj6ASg3qeg==}
 
-  '@algolia/autocomplete-plugin-algolia-insights@1.9.3':
-    resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==}
+  '@algolia/autocomplete-plugin-algolia-insights@1.17.6':
+    resolution: {integrity: sha512-17NnaacuFzSWVuZu4NKzVeaFIe9Abpw8w+/gjc7xhZFtqj+GadufzodIdchwiB2eM2cDdiR3icW7gbNTB3K2YA==}
     peerDependencies:
       search-insights: '>= 1 < 3'
 
@@ -600,12 +637,6 @@ packages:
       '@algolia/client-search': '>= 4.9.1 < 6'
       algoliasearch: '>= 4.9.1 < 6'
 
-  '@algolia/autocomplete-shared@1.9.3':
-    resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==}
-    peerDependencies:
-      '@algolia/client-search': '>= 4.9.1 < 6'
-      algoliasearch: '>= 4.9.1 < 6'
-
   '@algolia/cache-browser-local-storage@4.24.0':
     resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==}
 
@@ -615,8 +646,8 @@ packages:
   '@algolia/cache-in-memory@4.24.0':
     resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==}
 
-  '@algolia/client-abtesting@5.12.0':
-    resolution: {integrity: sha512-hx4eVydkm3yrFCFxmcBtSzI/ykt0cZ6sDWch+v3JTgKpD2WtosMJU3Upv1AjQ4B6COSHCOWEX3vfFxW6OoH6aA==}
+  '@algolia/client-abtesting@5.13.0':
+    resolution: {integrity: sha512-6CoQjlMi1pmQYMQO8tXfuGxSPf6iKX5FP9MuMe6IWmvC81wwTvOehnwchyBl2wuPVhcw2Ar53K53mQ60DAC64g==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/client-account@4.24.0':
@@ -625,44 +656,44 @@ packages:
   '@algolia/client-analytics@4.24.0':
     resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==}
 
-  '@algolia/client-analytics@5.12.0':
-    resolution: {integrity: sha512-EpTsSv6IW8maCfXCDIptgT7+mQJj7pImEkcNUnxR8yUKAHzTogTXv9yGm2WXOZFVuwstd2i0sImhQ1Vz8RH/hA==}
+  '@algolia/client-analytics@5.13.0':
+    resolution: {integrity: sha512-pS3qyXiWTwKnrt/jE79fqkNqZp7kjsFNlJDcBGkSWid74DNc6DmArlkvPqyLxnoaYGjUGACT6g56n7E3mVV2TA==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/client-common@4.24.0':
     resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==}
 
-  '@algolia/client-common@5.12.0':
-    resolution: {integrity: sha512-od3WmO8qxyfNhKc+K3D17tvun3IMs/xMNmxCG9MiElAkYVbPPTRUYMkRneCpmJyQI0hNx2/EA4kZgzVfQjO86Q==}
+  '@algolia/client-common@5.13.0':
+    resolution: {integrity: sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==}
     engines: {node: '>= 14.0.0'}
 
-  '@algolia/client-insights@5.12.0':
-    resolution: {integrity: sha512-8alajmsYUd+7vfX5lpRNdxqv3Xx9clIHLUItyQK0Z6gwGMbVEFe6YYhgDtwslMAP0y6b0WeJEIZJMLgT7VYpRw==}
+  '@algolia/client-insights@5.13.0':
+    resolution: {integrity: sha512-ldHTe+LVgC6L4Wr6doAQQ7Ku0jAdhaaPg1T+IHzmmiRZb2Uq5OsjW2yC65JifOmzPCiMkIZE2mGRpWgkn5ktlw==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/client-personalization@4.24.0':
     resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==}
 
-  '@algolia/client-personalization@5.12.0':
-    resolution: {integrity: sha512-bUV9HtfkTBgpoVhxFrMkmVPG03ZN1Rtn51kiaEtukucdk3ggjR9Qu1YUfRSU2lFgxr9qJc8lTxwfvhjCeJRcqw==}
+  '@algolia/client-personalization@5.13.0':
+    resolution: {integrity: sha512-RnCfOSN4OUJDuMNHFca2M8lY64Tmw0kQOZikge4TknTqHmlbKJb8IbJE7Rol79Z80W2Y+B1ydcjV7DPje4GMRA==}
     engines: {node: '>= 14.0.0'}
 
-  '@algolia/client-query-suggestions@5.12.0':
-    resolution: {integrity: sha512-Q5CszzGWfxbIDs9DJ/QJsL7bP6h+lJMg27KxieEnI9KGCu0Jt5iFA3GkREkgRZxRdzlHbZKkrIzhtHVbSHw/rg==}
+  '@algolia/client-query-suggestions@5.13.0':
+    resolution: {integrity: sha512-pYo0jbLUtPDN1r341UHTaF2fgN5rbaZfDZqjPRKPM+FRlRmxFxqFQm1UUfpkSUWYGn7lECwDpbKYiKUf81MTwA==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/client-search@4.24.0':
     resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==}
 
-  '@algolia/client-search@5.12.0':
-    resolution: {integrity: sha512-R3qzEytgVLHOGNri+bpta6NtTt7YtkvUe/QBcAmMDjW4Jk1P0eBYIPfvnzIPbINRsLxIq9fZs9uAYBgsrts4Zg==}
+  '@algolia/client-search@5.13.0':
+    resolution: {integrity: sha512-s2ge3uZ6Zg2sPSFibqijgEYsuorxcc8KVHg3I95nOPHvFHdnBtSHymhZvq4sp/fu8ijt/Y8jLwkuqm5myn+2Sg==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/events@4.0.1':
     resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==}
 
-  '@algolia/ingestion@1.12.0':
-    resolution: {integrity: sha512-zpHo6qhR22tL8FsdSI4DvEraPDi/019HmMrCFB/TUX98yzh5ooAU7sNW0qPL1I7+S++VbBmNzJOEU9VI8tEC8A==}
+  '@algolia/ingestion@1.13.0':
+    resolution: {integrity: sha512-fm5LEOe4FPDOc1D+M9stEs8hfcdmbdD+pt9og5shql6ueTZJANDbFoQhDOpiPJizR/ps1GwmjkWfUEywx3sV+Q==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/logger-common@4.24.0':
@@ -671,36 +702,36 @@ packages:
   '@algolia/logger-console@4.24.0':
     resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==}
 
-  '@algolia/monitoring@1.12.0':
-    resolution: {integrity: sha512-i2AJZED/zf4uhxezAJUhMKoL5QoepCBp2ynOYol0N76+TSoohaMADdPnWCqOULF4RzOwrG8wWynAwBlXsAI1RQ==}
+  '@algolia/monitoring@1.13.0':
+    resolution: {integrity: sha512-e8Hshlnm2G5fapyUgWTBwhJ22yXcnLtPC4LWZKx7KOvv35GcdoHtlUBX94I/sWCJLraUr65JvR8qOo3LXC43dg==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/recommend@4.24.0':
     resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==}
 
-  '@algolia/recommend@5.12.0':
-    resolution: {integrity: sha512-0jmZyKvYnB/Bj5c7WKsKedOUjnr0UtXm0LVFUdQrxXfqOqvWv9n6Vpr65UjdYG4Q49kRQxhlwtal9WJYrYymXg==}
+  '@algolia/recommend@5.13.0':
+    resolution: {integrity: sha512-53/wW96oaj1FKMzGdFcZ/epygfTppLDUvgI1thLkd475EtVZCH3ZZVUNCEvf1AtnNyH1RnItkFzX8ayWCpx2PQ==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/requester-browser-xhr@4.24.0':
     resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==}
 
-  '@algolia/requester-browser-xhr@5.12.0':
-    resolution: {integrity: sha512-KxwleraFuVoEGCoeW6Y1RAEbgBMS7SavqeyzWdtkJc6mXeCOJXn1iZitb8Tyn2FcpMNUKlSm0adrUTt7G47+Ow==}
+  '@algolia/requester-browser-xhr@5.13.0':
+    resolution: {integrity: sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/requester-common@4.24.0':
     resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==}
 
-  '@algolia/requester-fetch@5.12.0':
-    resolution: {integrity: sha512-FuDZXUGU1pAg2HCnrt8+q1VGHKChV/LhvjvZlLOT7e56GJie6p+EuLu4/hMKPOVuQQ8XXtrTHKIU3Lw+7O5/bQ==}
+  '@algolia/requester-fetch@5.13.0':
+    resolution: {integrity: sha512-094bK4rumf+rXJazxv3mq6eKRM0ep5AxIo8T0YmOdldswQt79apeufFiPLN19nHEWH22xR2FelimD+T/wRSP+Q==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/requester-node-http@4.24.0':
     resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==}
 
-  '@algolia/requester-node-http@5.12.0':
-    resolution: {integrity: sha512-ncDDY7CxZhMs6LIoPl+vHFQceIBhYPY5EfuGF1V7beO0U38xfsCYEyutEFB2kRzf4D9Gqppn3iWX71sNtrKcuw==}
+  '@algolia/requester-node-http@5.13.0':
+    resolution: {integrity: sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/transporter@4.24.0':
@@ -1509,11 +1540,11 @@ packages:
     resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
     engines: {node: '>=10.0.0'}
 
-  '@docsearch/css@3.6.3':
-    resolution: {integrity: sha512-3uvbg8E7rhqE1C4oBAK3tGlS2qfhi9zpfZgH/yjDPF73vd9B41urVIKujF4rczcF4E3qs34SedhehiDJ4UdNBA==}
+  '@docsearch/css@3.7.0':
+    resolution: {integrity: sha512-1OorbTwi1eeDmr0v5t+ckSRlt1zM5GHjm92iIl3kUu7im3GHuP+csf6E0WBg8pdXQczTWP9J9+o9n+Vg6DH5cQ==}
 
-  '@docsearch/react@3.6.3':
-    resolution: {integrity: sha512-2munr4uBuZq1PG+Ge+F+ldIdxb3Wi8OmEIv2tQQb4RvEvvph+xtQkxwHzVIEnt5s+HecwucuXwB+3JhcZboFLg==}
+  '@docsearch/react@3.7.0':
+    resolution: {integrity: sha512-8e6tdDfkYoxafEEPuX5eE1h9cTkLvhe4KgoFkO5JCddXSQONnN1FHcDZRI4r8894eMpbYq6rdJF0dVYh8ikwNQ==}
     peerDependencies:
       '@types/react': '>= 16.8.0 < 19.0.0'
       react: '>= 16.8.0 < 19.0.0'
@@ -1757,138 +1788,282 @@ packages:
     peerDependencies:
       esbuild: '*'
 
+  '@esbuild/aix-ppc64@0.24.0':
+    resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==}
+    engines: {node: '>=18'}
+    cpu: [ppc64]
+    os: [aix]
+
   '@esbuild/android-arm64@0.17.19':
     resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [android]
 
+  '@esbuild/android-arm64@0.24.0':
+    resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==}
+    engines: {node: '>=18'}
+    cpu: [arm64]
+    os: [android]
+
   '@esbuild/android-arm@0.17.19':
     resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
     engines: {node: '>=12'}
     cpu: [arm]
     os: [android]
 
+  '@esbuild/android-arm@0.24.0':
+    resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==}
+    engines: {node: '>=18'}
+    cpu: [arm]
+    os: [android]
+
   '@esbuild/android-x64@0.17.19':
     resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [android]
 
+  '@esbuild/android-x64@0.24.0':
+    resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==}
+    engines: {node: '>=18'}
+    cpu: [x64]
+    os: [android]
+
   '@esbuild/darwin-arm64@0.17.19':
     resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [darwin]
 
+  '@esbuild/darwin-arm64@0.24.0':
+    resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==}
+    engines: {node: '>=18'}
+    cpu: [arm64]
+    os: [darwin]
+
   '@esbuild/darwin-x64@0.17.19':
     resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [darwin]
 
+  '@esbuild/darwin-x64@0.24.0':
+    resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==}
+    engines: {node: '>=18'}
+    cpu: [x64]
+    os: [darwin]
+
   '@esbuild/freebsd-arm64@0.17.19':
     resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [freebsd]
 
+  '@esbuild/freebsd-arm64@0.24.0':
+    resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==}
+    engines: {node: '>=18'}
+    cpu: [arm64]
+    os: [freebsd]
+
   '@esbuild/freebsd-x64@0.17.19':
     resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [freebsd]
 
+  '@esbuild/freebsd-x64@0.24.0':
+    resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==}
+    engines: {node: '>=18'}
+    cpu: [x64]
+    os: [freebsd]
+
   '@esbuild/linux-arm64@0.17.19':
     resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [linux]
 
+  '@esbuild/linux-arm64@0.24.0':
+    resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==}
+    engines: {node: '>=18'}
+    cpu: [arm64]
+    os: [linux]
+
   '@esbuild/linux-arm@0.17.19':
     resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
     engines: {node: '>=12'}
     cpu: [arm]
     os: [linux]
 
+  '@esbuild/linux-arm@0.24.0':
+    resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==}
+    engines: {node: '>=18'}
+    cpu: [arm]
+    os: [linux]
+
   '@esbuild/linux-ia32@0.17.19':
     resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
     engines: {node: '>=12'}
     cpu: [ia32]
     os: [linux]
 
+  '@esbuild/linux-ia32@0.24.0':
+    resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==}
+    engines: {node: '>=18'}
+    cpu: [ia32]
+    os: [linux]
+
   '@esbuild/linux-loong64@0.17.19':
     resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
     engines: {node: '>=12'}
     cpu: [loong64]
     os: [linux]
 
+  '@esbuild/linux-loong64@0.24.0':
+    resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==}
+    engines: {node: '>=18'}
+    cpu: [loong64]
+    os: [linux]
+
   '@esbuild/linux-mips64el@0.17.19':
     resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
     engines: {node: '>=12'}
     cpu: [mips64el]
     os: [linux]
 
+  '@esbuild/linux-mips64el@0.24.0':
+    resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==}
+    engines: {node: '>=18'}
+    cpu: [mips64el]
+    os: [linux]
+
   '@esbuild/linux-ppc64@0.17.19':
     resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
     engines: {node: '>=12'}
     cpu: [ppc64]
     os: [linux]
 
+  '@esbuild/linux-ppc64@0.24.0':
+    resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==}
+    engines: {node: '>=18'}
+    cpu: [ppc64]
+    os: [linux]
+
   '@esbuild/linux-riscv64@0.17.19':
     resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
     engines: {node: '>=12'}
     cpu: [riscv64]
     os: [linux]
 
+  '@esbuild/linux-riscv64@0.24.0':
+    resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==}
+    engines: {node: '>=18'}
+    cpu: [riscv64]
+    os: [linux]
+
   '@esbuild/linux-s390x@0.17.19':
     resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
     engines: {node: '>=12'}
     cpu: [s390x]
     os: [linux]
 
+  '@esbuild/linux-s390x@0.24.0':
+    resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==}
+    engines: {node: '>=18'}
+    cpu: [s390x]
+    os: [linux]
+
   '@esbuild/linux-x64@0.17.19':
     resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [linux]
 
+  '@esbuild/linux-x64@0.24.0':
+    resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==}
+    engines: {node: '>=18'}
+    cpu: [x64]
+    os: [linux]
+
   '@esbuild/netbsd-x64@0.17.19':
     resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [netbsd]
 
+  '@esbuild/netbsd-x64@0.24.0':
+    resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==}
+    engines: {node: '>=18'}
+    cpu: [x64]
+    os: [netbsd]
+
+  '@esbuild/openbsd-arm64@0.24.0':
+    resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==}
+    engines: {node: '>=18'}
+    cpu: [arm64]
+    os: [openbsd]
+
   '@esbuild/openbsd-x64@0.17.19':
     resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [openbsd]
 
+  '@esbuild/openbsd-x64@0.24.0':
+    resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==}
+    engines: {node: '>=18'}
+    cpu: [x64]
+    os: [openbsd]
+
   '@esbuild/sunos-x64@0.17.19':
     resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [sunos]
 
+  '@esbuild/sunos-x64@0.24.0':
+    resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==}
+    engines: {node: '>=18'}
+    cpu: [x64]
+    os: [sunos]
+
   '@esbuild/win32-arm64@0.17.19':
     resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [win32]
 
+  '@esbuild/win32-arm64@0.24.0':
+    resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==}
+    engines: {node: '>=18'}
+    cpu: [arm64]
+    os: [win32]
+
   '@esbuild/win32-ia32@0.17.19':
     resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
     engines: {node: '>=12'}
     cpu: [ia32]
     os: [win32]
 
+  '@esbuild/win32-ia32@0.24.0':
+    resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==}
+    engines: {node: '>=18'}
+    cpu: [ia32]
+    os: [win32]
+
   '@esbuild/win32-x64@0.17.19':
     resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [win32]
 
+  '@esbuild/win32-x64@0.24.0':
+    resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==}
+    engines: {node: '>=18'}
+    cpu: [x64]
+    os: [win32]
+
   '@eslint-community/eslint-utils@4.4.1':
     resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -2372,67 +2547,67 @@ packages:
     resolution: {integrity: sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==}
     engines: {node: ^16.14.0 || >=18.0.0}
 
-  '@nx/devkit@20.0.7':
-    resolution: {integrity: sha512-h+B5S+tkHObtKj2pQYUkbiaiYdcim95iS27CaZgasq7FiIXQOoupQ6jrIKduQJKx+GfYbuCCd60zrAYbkyvxiA==}
+  '@nx/devkit@20.0.10':
+    resolution: {integrity: sha512-GcIAQ11JrcONZpn3tIU5mtLzx9j8UMdpjns0r6yMiW7k0z6SwK5+hxIkNQJ86mndjSqiY1EdUK629tz0UscacQ==}
     peerDependencies:
       nx: '>= 19 <= 21'
 
-  '@nx/nx-darwin-arm64@20.0.7':
-    resolution: {integrity: sha512-QLD0DlyT343okCMHNg4EyM1s9HWU55RGiD36OxopaAmDcJ45j4p7IgmYlwbWCC5TyjIXSnLnZyIAs5DrqaKwrg==}
+  '@nx/nx-darwin-arm64@20.0.10':
+    resolution: {integrity: sha512-fa2coWtz4wUwsB5Zpi47FEgdiKn5Bn4jVYsN37BE+wci1GpoxqhQOGgl0Hgv3KTjQfw9mEmvPT701QZcZBsetA==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [darwin]
 
-  '@nx/nx-darwin-x64@20.0.7':
-    resolution: {integrity: sha512-Sc2h+eAunGKiqpumvjVrrt0LRtk/l6Fev/633WP55svSNuY9muB/MPcP9v/oLyAD1flDnzvIWeUT6eEw6oqvZw==}
+  '@nx/nx-darwin-x64@20.0.10':
+    resolution: {integrity: sha512-LIsFeOEt1PKybhIpSJuMoBXe7ID5pBJa2w4SfiGeD9+mv3dAp/COJ9+XYeWA1HpTMgY0nOabfi1bMqzezFt/fg==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [darwin]
 
-  '@nx/nx-freebsd-x64@20.0.7':
-    resolution: {integrity: sha512-Sp0pMVGj4LuPaO6oL9R5gsIPjIm8Xt3IyP9f+5uwtqjipiPriw0IdD2uV9bDjPPs0QQc15ncz+eSk30p836qpA==}
+  '@nx/nx-freebsd-x64@20.0.10':
+    resolution: {integrity: sha512-q1LTJlazM35PGjJIBLIXOFLjuR8y0R7BIEu1LTJPIsQEshJSlEUzQUocT2k51HB54OdFQG7Xhu0aMDzfCqU3ag==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [freebsd]
 
-  '@nx/nx-linux-arm-gnueabihf@20.0.7':
-    resolution: {integrity: sha512-hs15RudLvFkfBtUL20M9Hr0wn8FLije3EGn1j9iPmo8EiZBZn4mDAywwPZXmDiAuxKTU8LKBLT/xJczNe8gzbQ==}
+  '@nx/nx-linux-arm-gnueabihf@20.0.10':
+    resolution: {integrity: sha512-fVphTD459f7ogzcADDGLR3Ot7v7ApWTLeL9vw0j95Kza3sBWHE1hYIlzHwOANLkdzy5lxtSo44XIvNuTRkingg==}
     engines: {node: '>= 10'}
     cpu: [arm]
     os: [linux]
 
-  '@nx/nx-linux-arm64-gnu@20.0.7':
-    resolution: {integrity: sha512-t1NSxBvWpyjb9VnbxAN2Oka3JXEKtbQv//aLOer8++8Y+e6INDOHmRADyyp5BcLwBpsaP/lWLKcDa6vlsMzXTg==}
+  '@nx/nx-linux-arm64-gnu@20.0.10':
+    resolution: {integrity: sha512-BPAA5vzoEuKjPDXMqocOXS2SuvxfqpL/YCbMNtFt/PK1lzYijxaFY6L+00fIauKFv+99dG8e/IPf0Y3ze5pw4g==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [linux]
 
-  '@nx/nx-linux-arm64-musl@20.0.7':
-    resolution: {integrity: sha512-lLAzyxQeeALMKM2uBA9728gZ0bihy6rfhMe+fracV1xjGLfcHEa/hNmhXNMp9Vf80sZJ50EUeW6mUPluLROBNQ==}
+  '@nx/nx-linux-arm64-musl@20.0.10':
+    resolution: {integrity: sha512-9tUBJk45kMAbW3v3q42WtufYd2OwlrlH/MBemEEve78eRr/SYnpFKsdQC2snJOy8bzE4JoG91vMBoSw9a0X/ng==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [linux]
 
-  '@nx/nx-linux-x64-gnu@20.0.7':
-    resolution: {integrity: sha512-H9LfEoHEa0ZHnfifseY24RPErtGaXSoWTuW9JAPylUXeYOy66i/FwxwbjsG5BMFJCnL1LGXPN9Oirh442lcsbQ==}
+  '@nx/nx-linux-x64-gnu@20.0.10':
+    resolution: {integrity: sha512-7D10+bJvAbqDp/r3hIaZFbq8kPIgnpPiJ37I2E8EHNSGsmRUAkM33zkF2FfTHpiLIlsKvqr+UNADwV2fLBYzAw==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [linux]
 
-  '@nx/nx-linux-x64-musl@20.0.7':
-    resolution: {integrity: sha512-2VsTSLZZVGHmN2BkSaLoOp/Byj9j20so/Ne/TZg4Lo/HBp0iDSOmUtbPAnkJOS6UiAPvQtb9zqzRKPphhDhnzg==}
+  '@nx/nx-linux-x64-musl@20.0.10':
+    resolution: {integrity: sha512-cI6wNpWPFgEnzdMGpUd459bas+hJYT+vjdcwcQ9piCNwBroKgZK67SZFxf+7sL6yhUFRydDyFCalyubGE/hlrQ==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [linux]
 
-  '@nx/nx-win32-arm64-msvc@20.0.7':
-    resolution: {integrity: sha512-lmH7xTPHJe2q/P2tnHEjOTdwzNxnFV08Kp2z6sUU0lAfJ79mye2nydGBDtFq9CeFF1Q6vfCSDTRu5fbxAZ9/Xg==}
+  '@nx/nx-win32-arm64-msvc@20.0.10':
+    resolution: {integrity: sha512-/N2somgmYfwrGNRJpu7c6S+98xqvBImXKF5iZt0aA9wyYnjJ18gA3AiI/nyGbayAstzSSg7hwMMnEZfw9pifdg==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [win32]
 
-  '@nx/nx-win32-x64-msvc@20.0.7':
-    resolution: {integrity: sha512-U8LY1O3XA1yD8FoCM0ozT0DpFJdei2NNSrp/5lBXn5KHb2nkZ8DQ1zh7RKvMhEMwDNfNGbM7JsaBTr+fP6eYJg==}
+  '@nx/nx-win32-x64-msvc@20.0.10':
+    resolution: {integrity: sha512-38NGZjq53W0hF6YDXRB+FTrzbF+3XZoeea2nU/C5HBw9MeiSgLsAjpMsL7YlcmFyvwY/BTIWQITCrwVUhPF/BA==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [win32]
@@ -2441,8 +2616,8 @@ packages:
     resolution: {integrity: sha512-TkBr7QgOmE6ORxvIAhDbZsqPkF7RSqTY4pLTtUQCvr6dTXqvi2fFo46q3h1lxlk/sGMQjqyZ0kEahkD/NyzOHg==}
     engines: {node: '>= 18'}
 
-  '@octokit/auth-app@7.1.1':
-    resolution: {integrity: sha512-kRAd6yelV9OgvlEJE88H0VLlQdZcag9UlLr7dV0YYP37X8PPDvhgiTy66QVhDXdyoT0AleFN2w/qXkPdrSzINg==}
+  '@octokit/auth-app@7.1.2':
+    resolution: {integrity: sha512-5cfWRr1hr0w/EW3StFIIOkMtYhOyGZ6/R3T0xeN6UgC/uL5pIyeood9N/8Z7W4NZUdz2QK1Fv0oM/1AzTME3/Q==}
     engines: {node: '>= 18'}
 
   '@octokit/auth-oauth-app@8.1.1':
@@ -2830,6 +3005,96 @@ packages:
       rollup:
         optional: true
 
+  '@rollup/rollup-android-arm-eabi@4.24.4':
+    resolution: {integrity: sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==}
+    cpu: [arm]
+    os: [android]
+
+  '@rollup/rollup-android-arm64@4.24.4':
+    resolution: {integrity: sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==}
+    cpu: [arm64]
+    os: [android]
+
+  '@rollup/rollup-darwin-arm64@4.24.4':
+    resolution: {integrity: sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==}
+    cpu: [arm64]
+    os: [darwin]
+
+  '@rollup/rollup-darwin-x64@4.24.4':
+    resolution: {integrity: sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==}
+    cpu: [x64]
+    os: [darwin]
+
+  '@rollup/rollup-freebsd-arm64@4.24.4':
+    resolution: {integrity: sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==}
+    cpu: [arm64]
+    os: [freebsd]
+
+  '@rollup/rollup-freebsd-x64@4.24.4':
+    resolution: {integrity: sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==}
+    cpu: [x64]
+    os: [freebsd]
+
+  '@rollup/rollup-linux-arm-gnueabihf@4.24.4':
+    resolution: {integrity: sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==}
+    cpu: [arm]
+    os: [linux]
+
+  '@rollup/rollup-linux-arm-musleabihf@4.24.4':
+    resolution: {integrity: sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==}
+    cpu: [arm]
+    os: [linux]
+
+  '@rollup/rollup-linux-arm64-gnu@4.24.4':
+    resolution: {integrity: sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==}
+    cpu: [arm64]
+    os: [linux]
+
+  '@rollup/rollup-linux-arm64-musl@4.24.4':
+    resolution: {integrity: sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==}
+    cpu: [arm64]
+    os: [linux]
+
+  '@rollup/rollup-linux-powerpc64le-gnu@4.24.4':
+    resolution: {integrity: sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==}
+    cpu: [ppc64]
+    os: [linux]
+
+  '@rollup/rollup-linux-riscv64-gnu@4.24.4':
+    resolution: {integrity: sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==}
+    cpu: [riscv64]
+    os: [linux]
+
+  '@rollup/rollup-linux-s390x-gnu@4.24.4':
+    resolution: {integrity: sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==}
+    cpu: [s390x]
+    os: [linux]
+
+  '@rollup/rollup-linux-x64-gnu@4.24.4':
+    resolution: {integrity: sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==}
+    cpu: [x64]
+    os: [linux]
+
+  '@rollup/rollup-linux-x64-musl@4.24.4':
+    resolution: {integrity: sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==}
+    cpu: [x64]
+    os: [linux]
+
+  '@rollup/rollup-win32-arm64-msvc@4.24.4':
+    resolution: {integrity: sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==}
+    cpu: [arm64]
+    os: [win32]
+
+  '@rollup/rollup-win32-ia32-msvc@4.24.4':
+    resolution: {integrity: sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==}
+    cpu: [ia32]
+    os: [win32]
+
+  '@rollup/rollup-win32-x64-msvc@4.24.4':
+    resolution: {integrity: sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==}
+    cpu: [x64]
+    os: [win32]
+
   '@sapphire/async-queue@1.5.4':
     resolution: {integrity: sha512-id65RxAx34DCk8KAVTPWwcephJSkStiS9M15F87+zvK2gK47wf7yeRIo8WiuKeXQS6bsyo/uQ/t0QW1cLmSb+A==}
     engines: {node: '>=v14.0.0', npm: '>=7.0.0'}
@@ -3467,8 +3732,8 @@ packages:
   '@types/prop-types@15.7.13':
     resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==}
 
-  '@types/qs@6.9.16':
-    resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==}
+  '@types/qs@6.9.17':
+    resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==}
 
   '@types/range-parser@1.2.7':
     resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
@@ -3644,50 +3909,54 @@ packages:
   '@vue/shared@3.5.12':
     resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==}
 
-  '@webassemblyjs/ast@1.12.1':
-    resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==}
+  '@webassemblyjs/ast@1.14.1':
+    resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
+
+  '@webassemblyjs/floating-point-hex-parser@1.13.2':
+    resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
 
-  '@webassemblyjs/floating-point-hex-parser@1.11.6':
-    resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==}
+  '@webassemblyjs/helper-api-error@1.13.2':
+    resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
 
-  '@webassemblyjs/helper-api-error@1.11.6':
-    resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==}
+  '@webassemblyjs/helper-buffer@1.14.1':
+    resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
 
-  '@webassemblyjs/helper-buffer@1.12.1':
-    resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==}
+  '@webassemblyjs/helper-numbers@1.13.2':
+    resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
 
-  '@webassemblyjs/helper-numbers@1.11.6':
-    resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==}
+  '@webassemblyjs/helper-wasm-bytecode@1.13.2':
+    resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
 
-  '@webassemblyjs/helper-wasm-bytecode@1.11.6':
-    resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==}
+  '@webassemblyjs/helper-wasm-section@1.14.1':
+    resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
 
-  '@webassemblyjs/helper-wasm-section@1.12.1':
-    resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==}
+  '@webassemblyjs/ieee754@1.13.2':
+    resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
 
-  '@webassemblyjs/ieee754@1.11.6':
-    resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==}
+  '@webassemblyjs/leb128@1.13.2':
+    resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
 
-  '@webassemblyjs/leb128@1.11.6':
-    resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==}
+  '@webassemblyjs/utf8@1.13.2':
+    resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
 
-  '@webassemblyjs/utf8@1.11.6':
-    resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==}
+  '@webassemblyjs/wasm-edit@1.14.1':
+    resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
 
-  '@webassemblyjs/wasm-edit@1.12.1':
-    resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==}
+  '@webassemblyjs/wasm-gen@1.14.1':
+    resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
 
-  '@webassemblyjs/wasm-gen@1.12.1':
-    resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==}
+  '@webassemblyjs/wasm-opt@1.14.1':
+    resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
 
-  '@webassemblyjs/wasm-opt@1.12.1':
-    resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==}
+  '@webassemblyjs/wasm-parser@1.14.1':
+    resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
 
-  '@webassemblyjs/wasm-parser@1.12.1':
-    resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==}
+  '@webassemblyjs/wast-printer@1.14.1':
+    resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
 
-  '@webassemblyjs/wast-printer@1.12.1':
-    resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==}
+  '@wolfy1339/lru-cache@11.0.2-patch.1':
+    resolution: {integrity: sha512-BgYZfL2ADCXKOw2wJtkM3slhHotawWkgIRRxq4wEybnZQPjvAp71SPX35xepMykTw8gXlzWcWPTY31hlbnRsDA==}
+    engines: {node: 18 >=18.20 || 20 || >=22}
 
   '@xtuc/ieee754@1.2.0':
     resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
@@ -3698,9 +3967,9 @@ packages:
   '@yarnpkg/lockfile@1.1.0':
     resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==}
 
-  '@yarnpkg/parsers@3.0.0-rc.46':
-    resolution: {integrity: sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==}
-    engines: {node: '>=14.15.0'}
+  '@yarnpkg/parsers@3.0.2':
+    resolution: {integrity: sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==}
+    engines: {node: '>=18.12.0'}
 
   '@zkochan/js-yaml@0.0.7':
     resolution: {integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==}
@@ -3770,8 +4039,8 @@ packages:
     resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
     engines: {node: '>=8'}
 
-  ai@3.4.32:
-    resolution: {integrity: sha512-d5Im7kWsjw1T/IFfYPH4KDLUn4W+XIZqip34q7wcyVBAKLcjGSbJh+5F7Ktc1MIzThHUPh/NUzbHlDDNhTlCgA==}
+  ai@3.4.33:
+    resolution: {integrity: sha512-plBlrVZKwPoRTmM8+D1sJac9Bq8eaa2jiZlHLZIWekKWI1yMWYZvCCEezY9ASPwRhULYDJB2VhKOBUUeg3S5JQ==}
     engines: {node: '>=18'}
     peerDependencies:
       openai: ^4.42.0
@@ -3827,8 +4096,8 @@ packages:
   algoliasearch@4.24.0:
     resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==}
 
-  algoliasearch@5.12.0:
-    resolution: {integrity: sha512-psGBRYdGgik8I6m28iAB8xpubvjEt7UQU+w5MAJUA2324WHiGoHap5BPkkjB14rMaXeRts6pmOsrVIglGyOVwg==}
+  algoliasearch@5.13.0:
+    resolution: {integrity: sha512-04lyQX3Ev/oLYQx+aagamQDXvkUUfX1mwrLrus15+9fNaYj28GDxxEzbwaRfvmHFcZyoxvup7mMtDTTw8SrTEQ==}
     engines: {node: '>= 14.0.0'}
 
   amp-message@0.1.2:
@@ -3887,6 +4156,9 @@ packages:
     peerDependencies:
       zod: ^3.0.0
 
+  any-promise@1.3.0:
+    resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
   anymatch@3.1.3:
     resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
     engines: {node: '>= 8'}
@@ -4252,6 +4524,12 @@ packages:
     resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
     engines: {node: '>=6.14.2'}
 
+  bundle-require@5.0.0:
+    resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+    peerDependencies:
+      esbuild: '>=0.18'
+
   busboy@1.6.0:
     resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
     engines: {node: '>=10.16.0'}
@@ -4268,6 +4546,10 @@ packages:
     resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
     engines: {node: '>= 0.8'}
 
+  cac@6.7.14:
+    resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+    engines: {node: '>=8'}
+
   cacache@18.0.4:
     resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==}
     engines: {node: ^16.14.0 || >=18.0.0}
@@ -4389,6 +4671,10 @@ packages:
     resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
     engines: {node: '>= 8.10.0'}
 
+  chokidar@4.0.1:
+    resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==}
+    engines: {node: '>= 14.16.0'}
+
   chownr@1.1.4:
     resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
 
@@ -4582,6 +4868,10 @@ packages:
   commander@2.20.3:
     resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
 
+  commander@4.1.1:
+    resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+    engines: {node: '>= 6'}
+
   commander@5.1.0:
     resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
     engines: {node: '>= 6'}
@@ -5412,8 +5702,8 @@ packages:
     engines: {node: '>=0.10.0'}
     hasBin: true
 
-  electron-to-chromium@1.5.50:
-    resolution: {integrity: sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==}
+  electron-to-chromium@1.5.52:
+    resolution: {integrity: sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ==}
 
   emittery@0.13.1:
     resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
@@ -5535,6 +5825,11 @@ packages:
     engines: {node: '>=12'}
     hasBin: true
 
+  esbuild@0.24.0:
+    resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==}
+    engines: {node: '>=18'}
+    hasBin: true
+
   escalade@3.2.0:
     resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
     engines: {node: '>=6'}
@@ -5842,6 +6137,14 @@ packages:
   fd-slicer@1.1.0:
     resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
 
+  fdir@6.4.2:
+    resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==}
+    peerDependencies:
+      picomatch: ^3 || ^4
+    peerDependenciesMeta:
+      picomatch:
+        optional: true
+
   feed@4.2.2:
     resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==}
     engines: {node: '>=0.4.0'}
@@ -7112,6 +7415,10 @@ packages:
   joi@17.13.3:
     resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==}
 
+  joycon@3.1.1:
+    resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
+    engines: {node: '>=10'}
+
   jpeg-js@0.3.7:
     resolution: {integrity: sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==}
 
@@ -7345,6 +7652,10 @@ packages:
     resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==}
     engines: {node: '>=8'}
 
+  load-tsconfig@0.2.5:
+    resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
   loader-runner@4.3.0:
     resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
     engines: {node: '>=6.11.5'}
@@ -7405,6 +7716,9 @@ packages:
   lodash.snakecase@4.1.1:
     resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
 
+  lodash.sortby@4.7.0:
+    resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
+
   lodash.uniq@4.5.0:
     resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
 
@@ -7584,8 +7898,8 @@ packages:
   mdast-util-to-hast@13.2.0:
     resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
 
-  mdast-util-to-markdown@2.1.1:
-    resolution: {integrity: sha512-OrkcCoqAkEg9b1ykXBrA0ehRc8H4fGU/03cACmW2xXzau1+dIdS+qJugh1Cqex3hMumSBgSE/5pc7uqP12nLAw==}
+  mdast-util-to-markdown@2.1.2:
+    resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
 
   mdast-util-to-string@4.0.0:
     resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
@@ -7996,6 +8310,9 @@ packages:
     resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
     engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
 
+  mz@2.7.0:
+    resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
   nan@2.22.0:
     resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==}
 
@@ -8249,8 +8566,8 @@ packages:
     peerDependencies:
       webpack: ^4.0.0 || ^5.0.0
 
-  nx@20.0.7:
-    resolution: {integrity: sha512-Un7eMAqTx+gRB4j6hRWafMvOso4pmFg3Ff+BmfFOgqD8XdE+xV/+Ke9mPTfi4qYD5eQiY1lO15l3dRuBH7+AJw==}
+  nx@20.0.10:
+    resolution: {integrity: sha512-QcPWtyfA8B0AevLLmWLmOwRXAeelpSx3osEBqpLJgsNnpd1XOq/dLUQwSOOFFTLaWVkukU3qRanE5ReTllj+2Q==}
     hasBin: true
     peerDependencies:
       '@swc-node/register': ^1.8.0
@@ -8323,19 +8640,12 @@ packages:
     resolution: {integrity: sha512-M7CJbmv7UCopc0neRKdzfoGWaVZC+xC1925GitKH9EAqYFzX9//25Q7oX4+jw0tiCCj+t5l6VZh8UPH23NZkMA==}
     hasBin: true
 
-  onnxruntime-common@1.19.2:
-    resolution: {integrity: sha512-a4R7wYEVFbZBlp0BfhpbFWqe4opCor3KM+5Wm22Az3NGDcQMiU2hfG/0MfnBs+1ZrlSGmlgWeMcXQkDk1UFb8Q==}
-
   onnxruntime-common@1.20.0:
     resolution: {integrity: sha512-9ehS4ul5fBszIcHhfxuDgk45lO+Fqrxmrgwk1Pxb1JRvbQiCB/v9Royv95SRCWHktLMviqNjBsEd/biJhd39cg==}
 
   onnxruntime-common@1.20.0-dev.20241016-2b8fc5529b:
     resolution: {integrity: sha512-KZK8b6zCYGZFjd4ANze0pqBnqnFTS3GIVeclQpa2qseDpXrCQJfkWBixRcrZShNhm3LpFOZ8qJYFC5/qsJK9WQ==}
 
-  onnxruntime-node@1.19.2:
-    resolution: {integrity: sha512-9eHMP/HKbbeUcqte1JYzaaRC8JPn7ojWeCeoyShO86TOR97OCyIyAIOGX3V95ErjslVhJRXY8Em/caIUc0hm1Q==}
-    os: [win32, darwin, linux]
-
   onnxruntime-node@1.20.0:
     resolution: {integrity: sha512-mjLge++8WHfyCZ4IqZ1FbUbtFAfGht7BLCkOeBL1L9PFV27YHwluXkNt7m0Pgf6TR2P5pqVZsD3zqFbFP6QTMw==}
     os: [win32, darwin, linux]
@@ -8844,6 +9154,24 @@ packages:
     peerDependencies:
       postcss: ^8.4.31
 
+  postcss-load-config@6.0.1:
+    resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
+    engines: {node: '>= 18'}
+    peerDependencies:
+      jiti: '>=1.21.0'
+      postcss: '>=8.0.9'
+      tsx: ^4.8.1
+      yaml: ^2.4.2
+    peerDependenciesMeta:
+      jiti:
+        optional: true
+      postcss:
+        optional: true
+      tsx:
+        optional: true
+      yaml:
+        optional: true
+
   postcss-loader@7.3.4:
     resolution: {integrity: sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==}
     engines: {node: '>= 14.15.0'}
@@ -9453,6 +9781,10 @@ packages:
     resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
     engines: {node: '>=8.10.0'}
 
+  readdirp@4.0.2:
+    resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==}
+    engines: {node: '>= 14.16.0'}
+
   reading-time@1.5.0:
     resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==}
 
@@ -9460,6 +9792,9 @@ packages:
     resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==}
     engines: {node: '>= 0.8.0'}
 
+  readline@1.3.0:
+    resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==}
+
   rechoir@0.6.2:
     resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
     engines: {node: '>= 0.10'}
@@ -9677,6 +10012,11 @@ packages:
     engines: {node: '>=10.0.0'}
     hasBin: true
 
+  rollup@4.24.4:
+    resolution: {integrity: sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==}
+    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+    hasBin: true
+
   roughjs@4.6.6:
     resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==}
 
@@ -9982,6 +10322,10 @@ packages:
     resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
     engines: {node: '>= 8'}
 
+  source-map@0.8.0-beta.0:
+    resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
+    engines: {node: '>= 8'}
+
   sourcemap-codec@1.4.8:
     resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
     deprecated: Please use @jridgewell/sourcemap-codec instead
@@ -10217,6 +10561,11 @@ packages:
   stylis@4.3.4:
     resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==}
 
+  sucrase@3.35.0:
+    resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+    engines: {node: '>=16 || 14 >=14.17'}
+    hasBin: true
+
   super-regex@1.0.0:
     resolution: {integrity: sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==}
     engines: {node: '>=18'}
@@ -10244,8 +10593,8 @@ packages:
     resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
     engines: {node: '>= 0.4'}
 
-  svelte@5.1.9:
-    resolution: {integrity: sha512-nzq+PPKGS2PoEWDjAcXSrKSbXmmmOAxd6dAz1IhRusUpVkFS6DMELWPyBPGwu6TpO/gsgtFXwX0M4+pAR5gzKw==}
+  svelte@5.1.11:
+    resolution: {integrity: sha512-XpPcUBKCg2c+L0nDTkv0ekc8LOHMzN328MNOeAHt4sRcX5AROU9tkqwL35VvE6srt8RpmnzsXBGDwyRB5TSbuw==}
     engines: {node: '>=18'}
 
   svg-parser@2.0.4:
@@ -10355,6 +10704,13 @@ packages:
   text-table@0.2.0:
     resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
 
+  thenify-all@1.6.0:
+    resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+    engines: {node: '>=0.8'}
+
+  thenify@3.3.1:
+    resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
   throttleit@2.1.0:
     resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==}
     engines: {node: '>=18'}
@@ -10388,6 +10744,10 @@ packages:
   tinyexec@0.3.1:
     resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
 
+  tinyglobby@0.2.10:
+    resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==}
+    engines: {node: '>=12.0.0'}
+
   tinyld@1.3.4:
     resolution: {integrity: sha512-u26CNoaInA4XpDU+8s/6Cq8xHc2T5M4fXB3ICfXPokUQoLzmPgSZU02TAkFwFMJCWTjk53gtkS8pETTreZwCqw==}
     engines: {node: '>= 12.10.0', npm: '>= 6.12.0', yarn: '>= 1.20.0'}
@@ -10450,6 +10810,13 @@ packages:
   tr46@0.0.3:
     resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
 
+  tr46@1.0.1:
+    resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
+
+  tree-kill@1.2.2:
+    resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
+    hasBin: true
+
   treeverse@3.0.0:
     resolution: {integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==}
     engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -10481,6 +10848,9 @@ packages:
     resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
     engines: {node: '>=6.10'}
 
+  ts-interface-checker@0.1.13:
+    resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
   ts-jest@29.2.5:
     resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==}
     engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
@@ -10532,6 +10902,25 @@ packages:
   tslib@2.8.0:
     resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
 
+  tsup@8.3.5:
+    resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==}
+    engines: {node: '>=18'}
+    hasBin: true
+    peerDependencies:
+      '@microsoft/api-extractor': ^7.36.0
+      '@swc/core': ^1
+      postcss: ^8.4.12
+      typescript: '>=4.5.0'
+    peerDependenciesMeta:
+      '@microsoft/api-extractor':
+        optional: true
+      '@swc/core':
+        optional: true
+      postcss:
+        optional: true
+      typescript:
+        optional: true
+
   tuf-js@2.2.1:
     resolution: {integrity: sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==}
     engines: {node: ^16.14.0 || >=18.0.0}
@@ -10944,6 +11333,9 @@ packages:
   webidl-conversions@3.0.1:
     resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
 
+  webidl-conversions@4.0.2:
+    resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
+
   webpack-bundle-analyzer@4.10.2:
     resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==}
     engines: {node: '>= 10.13.0'}
@@ -11007,6 +11399,9 @@ packages:
   whatwg-url@5.0.0:
     resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
 
+  whatwg-url@7.1.0:
+    resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
+
   which-pm-runs@1.1.0:
     resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==}
     engines: {node: '>=4'}
@@ -11326,13 +11721,13 @@ snapshots:
     transitivePeerDependencies:
       - zod
 
-  '@ai-sdk/svelte@0.0.57(svelte@5.1.9)(zod@3.23.8)':
+  '@ai-sdk/svelte@0.0.57(svelte@5.1.11)(zod@3.23.8)':
     dependencies:
       '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
       '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
-      sswr: 2.1.0(svelte@5.1.9)
+      sswr: 2.1.0(svelte@5.1.11)
     optionalDependencies:
-      svelte: 5.1.9
+      svelte: 5.1.11
     transitivePeerDependencies:
       - zod
 
@@ -11356,38 +11751,33 @@ snapshots:
     transitivePeerDependencies:
       - zod
 
-  '@algolia/autocomplete-core@1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)(search-insights@2.17.2)':
+  '@algolia/autocomplete-core@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)':
     dependencies:
-      '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)(search-insights@2.17.2)
-      '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)
+      '@algolia/autocomplete-plugin-algolia-insights': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)
+      '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)
     transitivePeerDependencies:
       - '@algolia/client-search'
       - algoliasearch
       - search-insights
 
-  '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)(search-insights@2.17.2)':
+  '@algolia/autocomplete-plugin-algolia-insights@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)':
     dependencies:
-      '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)
+      '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)
       search-insights: 2.17.2
     transitivePeerDependencies:
       - '@algolia/client-search'
       - algoliasearch
 
-  '@algolia/autocomplete-preset-algolia@1.17.6(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)':
-    dependencies:
-      '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)
-      '@algolia/client-search': 5.12.0
-      algoliasearch: 5.12.0
-
-  '@algolia/autocomplete-shared@1.17.6(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)':
+  '@algolia/autocomplete-preset-algolia@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)':
     dependencies:
-      '@algolia/client-search': 5.12.0
-      algoliasearch: 5.12.0
+      '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)
+      '@algolia/client-search': 5.13.0
+      algoliasearch: 5.13.0
 
-  '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)':
+  '@algolia/autocomplete-shared@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)':
     dependencies:
-      '@algolia/client-search': 5.12.0
-      algoliasearch: 5.12.0
+      '@algolia/client-search': 5.13.0
+      algoliasearch: 5.13.0
 
   '@algolia/cache-browser-local-storage@4.24.0':
     dependencies:
@@ -11399,12 +11789,12 @@ snapshots:
     dependencies:
       '@algolia/cache-common': 4.24.0
 
-  '@algolia/client-abtesting@5.12.0':
+  '@algolia/client-abtesting@5.13.0':
     dependencies:
-      '@algolia/client-common': 5.12.0
-      '@algolia/requester-browser-xhr': 5.12.0
-      '@algolia/requester-fetch': 5.12.0
-      '@algolia/requester-node-http': 5.12.0
+      '@algolia/client-common': 5.13.0
+      '@algolia/requester-browser-xhr': 5.13.0
+      '@algolia/requester-fetch': 5.13.0
+      '@algolia/requester-node-http': 5.13.0
 
   '@algolia/client-account@4.24.0':
     dependencies:
@@ -11419,26 +11809,26 @@ snapshots:
       '@algolia/requester-common': 4.24.0
       '@algolia/transporter': 4.24.0
 
-  '@algolia/client-analytics@5.12.0':
+  '@algolia/client-analytics@5.13.0':
     dependencies:
-      '@algolia/client-common': 5.12.0
-      '@algolia/requester-browser-xhr': 5.12.0
-      '@algolia/requester-fetch': 5.12.0
-      '@algolia/requester-node-http': 5.12.0
+      '@algolia/client-common': 5.13.0
+      '@algolia/requester-browser-xhr': 5.13.0
+      '@algolia/requester-fetch': 5.13.0
+      '@algolia/requester-node-http': 5.13.0
 
   '@algolia/client-common@4.24.0':
     dependencies:
       '@algolia/requester-common': 4.24.0
       '@algolia/transporter': 4.24.0
 
-  '@algolia/client-common@5.12.0': {}
+  '@algolia/client-common@5.13.0': {}
 
-  '@algolia/client-insights@5.12.0':
+  '@algolia/client-insights@5.13.0':
     dependencies:
-      '@algolia/client-common': 5.12.0
-      '@algolia/requester-browser-xhr': 5.12.0
-      '@algolia/requester-fetch': 5.12.0
-      '@algolia/requester-node-http': 5.12.0
+      '@algolia/client-common': 5.13.0
+      '@algolia/requester-browser-xhr': 5.13.0
+      '@algolia/requester-fetch': 5.13.0
+      '@algolia/requester-node-http': 5.13.0
 
   '@algolia/client-personalization@4.24.0':
     dependencies:
@@ -11446,19 +11836,19 @@ snapshots:
       '@algolia/requester-common': 4.24.0
       '@algolia/transporter': 4.24.0
 
-  '@algolia/client-personalization@5.12.0':
+  '@algolia/client-personalization@5.13.0':
     dependencies:
-      '@algolia/client-common': 5.12.0
-      '@algolia/requester-browser-xhr': 5.12.0
-      '@algolia/requester-fetch': 5.12.0
-      '@algolia/requester-node-http': 5.12.0
+      '@algolia/client-common': 5.13.0
+      '@algolia/requester-browser-xhr': 5.13.0
+      '@algolia/requester-fetch': 5.13.0
+      '@algolia/requester-node-http': 5.13.0
 
-  '@algolia/client-query-suggestions@5.12.0':
+  '@algolia/client-query-suggestions@5.13.0':
     dependencies:
-      '@algolia/client-common': 5.12.0
-      '@algolia/requester-browser-xhr': 5.12.0
-      '@algolia/requester-fetch': 5.12.0
-      '@algolia/requester-node-http': 5.12.0
+      '@algolia/client-common': 5.13.0
+      '@algolia/requester-browser-xhr': 5.13.0
+      '@algolia/requester-fetch': 5.13.0
+      '@algolia/requester-node-http': 5.13.0
 
   '@algolia/client-search@4.24.0':
     dependencies:
@@ -11466,21 +11856,21 @@ snapshots:
       '@algolia/requester-common': 4.24.0
       '@algolia/transporter': 4.24.0
 
-  '@algolia/client-search@5.12.0':
+  '@algolia/client-search@5.13.0':
     dependencies:
-      '@algolia/client-common': 5.12.0
-      '@algolia/requester-browser-xhr': 5.12.0
-      '@algolia/requester-fetch': 5.12.0
-      '@algolia/requester-node-http': 5.12.0
+      '@algolia/client-common': 5.13.0
+      '@algolia/requester-browser-xhr': 5.13.0
+      '@algolia/requester-fetch': 5.13.0
+      '@algolia/requester-node-http': 5.13.0
 
   '@algolia/events@4.0.1': {}
 
-  '@algolia/ingestion@1.12.0':
+  '@algolia/ingestion@1.13.0':
     dependencies:
-      '@algolia/client-common': 5.12.0
-      '@algolia/requester-browser-xhr': 5.12.0
-      '@algolia/requester-fetch': 5.12.0
-      '@algolia/requester-node-http': 5.12.0
+      '@algolia/client-common': 5.13.0
+      '@algolia/requester-browser-xhr': 5.13.0
+      '@algolia/requester-fetch': 5.13.0
+      '@algolia/requester-node-http': 5.13.0
 
   '@algolia/logger-common@4.24.0': {}
 
@@ -11488,12 +11878,12 @@ snapshots:
     dependencies:
       '@algolia/logger-common': 4.24.0
 
-  '@algolia/monitoring@1.12.0':
+  '@algolia/monitoring@1.13.0':
     dependencies:
-      '@algolia/client-common': 5.12.0
-      '@algolia/requester-browser-xhr': 5.12.0
-      '@algolia/requester-fetch': 5.12.0
-      '@algolia/requester-node-http': 5.12.0
+      '@algolia/client-common': 5.13.0
+      '@algolia/requester-browser-xhr': 5.13.0
+      '@algolia/requester-fetch': 5.13.0
+      '@algolia/requester-node-http': 5.13.0
 
   '@algolia/recommend@4.24.0':
     dependencies:
@@ -11509,34 +11899,34 @@ snapshots:
       '@algolia/requester-node-http': 4.24.0
       '@algolia/transporter': 4.24.0
 
-  '@algolia/recommend@5.12.0':
+  '@algolia/recommend@5.13.0':
     dependencies:
-      '@algolia/client-common': 5.12.0
-      '@algolia/requester-browser-xhr': 5.12.0
-      '@algolia/requester-fetch': 5.12.0
-      '@algolia/requester-node-http': 5.12.0
+      '@algolia/client-common': 5.13.0
+      '@algolia/requester-browser-xhr': 5.13.0
+      '@algolia/requester-fetch': 5.13.0
+      '@algolia/requester-node-http': 5.13.0
 
   '@algolia/requester-browser-xhr@4.24.0':
     dependencies:
       '@algolia/requester-common': 4.24.0
 
-  '@algolia/requester-browser-xhr@5.12.0':
+  '@algolia/requester-browser-xhr@5.13.0':
     dependencies:
-      '@algolia/client-common': 5.12.0
+      '@algolia/client-common': 5.13.0
 
   '@algolia/requester-common@4.24.0': {}
 
-  '@algolia/requester-fetch@5.12.0':
+  '@algolia/requester-fetch@5.13.0':
     dependencies:
-      '@algolia/client-common': 5.12.0
+      '@algolia/client-common': 5.13.0
 
   '@algolia/requester-node-http@4.24.0':
     dependencies:
       '@algolia/requester-common': 4.24.0
 
-  '@algolia/requester-node-http@5.12.0':
+  '@algolia/requester-node-http@5.13.0':
     dependencies:
-      '@algolia/client-common': 5.12.0
+      '@algolia/client-common': 5.13.0
 
   '@algolia/transporter@4.24.0':
     dependencies:
@@ -12595,14 +12985,14 @@ snapshots:
 
   '@discoveryjs/json-ext@0.5.7': {}
 
-  '@docsearch/css@3.6.3': {}
+  '@docsearch/css@3.7.0': {}
 
-  '@docsearch/react@3.6.3(@algolia/client-search@5.12.0)(@types/react@18.3.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)':
+  '@docsearch/react@3.7.0(@algolia/client-search@5.13.0)(@types/react@18.3.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)':
     dependencies:
-      '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)(search-insights@2.17.2)
-      '@algolia/autocomplete-preset-algolia': 1.17.6(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)
-      '@docsearch/css': 3.6.3
-      algoliasearch: 5.12.0
+      '@algolia/autocomplete-core': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)
+      '@algolia/autocomplete-preset-algolia': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)
+      '@docsearch/css': 3.7.0
+      algoliasearch: 5.13.0
     optionalDependencies:
       '@types/react': 18.3.12
       react: 18.2.0
@@ -13139,7 +13529,7 @@ snapshots:
       - vue-template-compiler
       - webpack-cli
 
-  '@docusaurus/preset-classic@3.6.0(@algolia/client-search@5.12.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)':
+  '@docusaurus/preset-classic@3.6.0(@algolia/client-search@5.13.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)':
     dependencies:
       '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)
       '@docusaurus/plugin-content-blog': 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)
@@ -13152,7 +13542,7 @@ snapshots:
       '@docusaurus/plugin-sitemap': 3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)
       '@docusaurus/theme-classic': 3.6.0(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)
       '@docusaurus/theme-common': 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)
-      '@docusaurus/theme-search-algolia': 3.6.0(@algolia/client-search@5.12.0)(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)
+      '@docusaurus/theme-search-algolia': 3.6.0(@algolia/client-search@5.13.0)(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)
       '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
       react: 18.2.0
       react-dom: 18.2.0(react@18.2.0)
@@ -13302,9 +13692,9 @@ snapshots:
       - vue-template-compiler
       - webpack-cli
 
-  '@docusaurus/theme-search-algolia@3.6.0(@algolia/client-search@5.12.0)(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)':
+  '@docusaurus/theme-search-algolia@3.6.0(@algolia/client-search@5.13.0)(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)':
     dependencies:
-      '@docsearch/react': 3.6.3(@algolia/client-search@5.12.0)(@types/react@18.3.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)
+      '@docsearch/react': 3.7.0(@algolia/client-search@5.13.0)(@types/react@18.3.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)
       '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)
       '@docusaurus/logger': 3.6.0
       '@docusaurus/plugin-content-docs': 3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)
@@ -13459,72 +13849,144 @@ snapshots:
       escape-string-regexp: 4.0.0
       rollup-plugin-node-polyfills: 0.2.1
 
+  '@esbuild/aix-ppc64@0.24.0':
+    optional: true
+
   '@esbuild/android-arm64@0.17.19':
     optional: true
 
+  '@esbuild/android-arm64@0.24.0':
+    optional: true
+
   '@esbuild/android-arm@0.17.19':
     optional: true
 
+  '@esbuild/android-arm@0.24.0':
+    optional: true
+
   '@esbuild/android-x64@0.17.19':
     optional: true
 
+  '@esbuild/android-x64@0.24.0':
+    optional: true
+
   '@esbuild/darwin-arm64@0.17.19':
     optional: true
 
+  '@esbuild/darwin-arm64@0.24.0':
+    optional: true
+
   '@esbuild/darwin-x64@0.17.19':
     optional: true
 
+  '@esbuild/darwin-x64@0.24.0':
+    optional: true
+
   '@esbuild/freebsd-arm64@0.17.19':
     optional: true
 
+  '@esbuild/freebsd-arm64@0.24.0':
+    optional: true
+
   '@esbuild/freebsd-x64@0.17.19':
     optional: true
 
+  '@esbuild/freebsd-x64@0.24.0':
+    optional: true
+
   '@esbuild/linux-arm64@0.17.19':
     optional: true
 
+  '@esbuild/linux-arm64@0.24.0':
+    optional: true
+
   '@esbuild/linux-arm@0.17.19':
     optional: true
 
+  '@esbuild/linux-arm@0.24.0':
+    optional: true
+
   '@esbuild/linux-ia32@0.17.19':
     optional: true
 
+  '@esbuild/linux-ia32@0.24.0':
+    optional: true
+
   '@esbuild/linux-loong64@0.17.19':
     optional: true
 
+  '@esbuild/linux-loong64@0.24.0':
+    optional: true
+
   '@esbuild/linux-mips64el@0.17.19':
     optional: true
 
+  '@esbuild/linux-mips64el@0.24.0':
+    optional: true
+
   '@esbuild/linux-ppc64@0.17.19':
     optional: true
 
+  '@esbuild/linux-ppc64@0.24.0':
+    optional: true
+
   '@esbuild/linux-riscv64@0.17.19':
     optional: true
 
+  '@esbuild/linux-riscv64@0.24.0':
+    optional: true
+
   '@esbuild/linux-s390x@0.17.19':
     optional: true
 
+  '@esbuild/linux-s390x@0.24.0':
+    optional: true
+
   '@esbuild/linux-x64@0.17.19':
     optional: true
 
+  '@esbuild/linux-x64@0.24.0':
+    optional: true
+
   '@esbuild/netbsd-x64@0.17.19':
     optional: true
 
+  '@esbuild/netbsd-x64@0.24.0':
+    optional: true
+
+  '@esbuild/openbsd-arm64@0.24.0':
+    optional: true
+
   '@esbuild/openbsd-x64@0.17.19':
     optional: true
 
+  '@esbuild/openbsd-x64@0.24.0':
+    optional: true
+
   '@esbuild/sunos-x64@0.17.19':
     optional: true
 
+  '@esbuild/sunos-x64@0.24.0':
+    optional: true
+
   '@esbuild/win32-arm64@0.17.19':
     optional: true
 
+  '@esbuild/win32-arm64@0.24.0':
+    optional: true
+
   '@esbuild/win32-ia32@0.17.19':
     optional: true
 
+  '@esbuild/win32-ia32@0.24.0':
+    optional: true
+
   '@esbuild/win32-x64@0.17.19':
     optional: true
 
+  '@esbuild/win32-x64@0.24.0':
+    optional: true
+
   '@eslint-community/eslint-utils@4.4.1(eslint@9.13.0(jiti@1.21.6))':
     dependencies:
       eslint: 9.13.0(jiti@1.21.6)
@@ -13586,7 +14048,7 @@ snapshots:
   '@huggingface/transformers@3.0.1':
     dependencies:
       '@huggingface/jinja': 0.3.2
-      onnxruntime-node: 1.19.2
+      onnxruntime-node: 1.20.0
       onnxruntime-web: 1.21.0-dev.20241024-d9ca84ef96
       sharp: 0.33.5
 
@@ -13925,7 +14387,7 @@ snapshots:
       '@npmcli/arborist': 7.5.4
       '@npmcli/package-json': 5.2.0
       '@npmcli/run-script': 8.1.0
-      '@nx/devkit': 20.0.7(nx@20.0.7)
+      '@nx/devkit': 20.0.10(nx@20.0.10)
       '@octokit/plugin-enterprise-rest': 6.0.1
       '@octokit/rest': 19.0.11(encoding@0.1.13)
       aproba: 2.0.0
@@ -13964,7 +14426,7 @@ snapshots:
       npm-package-arg: 11.0.2
       npm-packlist: 8.0.2
       npm-registry-fetch: 17.1.0
-      nx: 20.0.7
+      nx: 20.0.10
       p-map: 4.0.0
       p-map-series: 2.1.0
       p-queue: 6.6.2
@@ -14246,51 +14708,51 @@ snapshots:
       - bluebird
       - supports-color
 
-  '@nx/devkit@20.0.7(nx@20.0.7)':
+  '@nx/devkit@20.0.10(nx@20.0.10)':
     dependencies:
       ejs: 3.1.10
       enquirer: 2.3.6
       ignore: 5.3.2
       minimatch: 9.0.3
-      nx: 20.0.7
+      nx: 20.0.10
       semver: 7.6.3
       tmp: 0.2.3
       tslib: 2.8.0
       yargs-parser: 21.1.1
 
-  '@nx/nx-darwin-arm64@20.0.7':
+  '@nx/nx-darwin-arm64@20.0.10':
     optional: true
 
-  '@nx/nx-darwin-x64@20.0.7':
+  '@nx/nx-darwin-x64@20.0.10':
     optional: true
 
-  '@nx/nx-freebsd-x64@20.0.7':
+  '@nx/nx-freebsd-x64@20.0.10':
     optional: true
 
-  '@nx/nx-linux-arm-gnueabihf@20.0.7':
+  '@nx/nx-linux-arm-gnueabihf@20.0.10':
     optional: true
 
-  '@nx/nx-linux-arm64-gnu@20.0.7':
+  '@nx/nx-linux-arm64-gnu@20.0.10':
     optional: true
 
-  '@nx/nx-linux-arm64-musl@20.0.7':
+  '@nx/nx-linux-arm64-musl@20.0.10':
     optional: true
 
-  '@nx/nx-linux-x64-gnu@20.0.7':
+  '@nx/nx-linux-x64-gnu@20.0.10':
     optional: true
 
-  '@nx/nx-linux-x64-musl@20.0.7':
+  '@nx/nx-linux-x64-musl@20.0.10':
     optional: true
 
-  '@nx/nx-win32-arm64-msvc@20.0.7':
+  '@nx/nx-win32-arm64-msvc@20.0.10':
     optional: true
 
-  '@nx/nx-win32-x64-msvc@20.0.7':
+  '@nx/nx-win32-x64-msvc@20.0.10':
     optional: true
 
   '@octokit/app@15.1.0':
     dependencies:
-      '@octokit/auth-app': 7.1.1
+      '@octokit/auth-app': 7.1.2
       '@octokit/auth-unauthenticated': 6.1.0
       '@octokit/core': 6.1.2
       '@octokit/oauth-app': 7.1.3
@@ -14298,14 +14760,14 @@ snapshots:
       '@octokit/types': 13.6.1
       '@octokit/webhooks': 13.3.0
 
-  '@octokit/auth-app@7.1.1':
+  '@octokit/auth-app@7.1.2':
     dependencies:
       '@octokit/auth-oauth-app': 8.1.1
       '@octokit/auth-oauth-user': 5.1.1
       '@octokit/request': 9.1.3
       '@octokit/request-error': 6.1.5
       '@octokit/types': 13.6.1
-      lru-cache: 10.4.3
+      lru-cache: '@wolfy1339/lru-cache@11.0.2-patch.1'
       universal-github-app-jwt: 2.2.0
       universal-user-agent: 7.0.2
 
@@ -14474,7 +14936,7 @@ snapshots:
       '@octokit/request-error': 3.0.3
       '@octokit/types': 9.3.2
       is-plain-object: 5.0.0
-      node-fetch: 2.7.0(encoding@0.1.13)
+      node-fetch: 2.6.7(encoding@0.1.13)
       universal-user-agent: 6.0.1
     transitivePeerDependencies:
       - encoding
@@ -14748,6 +15210,60 @@ snapshots:
     optionalDependencies:
       rollup: 2.79.2
 
+  '@rollup/rollup-android-arm-eabi@4.24.4':
+    optional: true
+
+  '@rollup/rollup-android-arm64@4.24.4':
+    optional: true
+
+  '@rollup/rollup-darwin-arm64@4.24.4':
+    optional: true
+
+  '@rollup/rollup-darwin-x64@4.24.4':
+    optional: true
+
+  '@rollup/rollup-freebsd-arm64@4.24.4':
+    optional: true
+
+  '@rollup/rollup-freebsd-x64@4.24.4':
+    optional: true
+
+  '@rollup/rollup-linux-arm-gnueabihf@4.24.4':
+    optional: true
+
+  '@rollup/rollup-linux-arm-musleabihf@4.24.4':
+    optional: true
+
+  '@rollup/rollup-linux-arm64-gnu@4.24.4':
+    optional: true
+
+  '@rollup/rollup-linux-arm64-musl@4.24.4':
+    optional: true
+
+  '@rollup/rollup-linux-powerpc64le-gnu@4.24.4':
+    optional: true
+
+  '@rollup/rollup-linux-riscv64-gnu@4.24.4':
+    optional: true
+
+  '@rollup/rollup-linux-s390x-gnu@4.24.4':
+    optional: true
+
+  '@rollup/rollup-linux-x64-gnu@4.24.4':
+    optional: true
+
+  '@rollup/rollup-linux-x64-musl@4.24.4':
+    optional: true
+
+  '@rollup/rollup-win32-arm64-msvc@4.24.4':
+    optional: true
+
+  '@rollup/rollup-win32-ia32-msvc@4.24.4':
+    optional: true
+
+  '@rollup/rollup-win32-x64-msvc@4.24.4':
+    optional: true
+
   '@sapphire/async-queue@1.5.4': {}
 
   '@sapphire/shapeshift@4.0.0':
@@ -15426,14 +15942,14 @@ snapshots:
   '@types/express-serve-static-core@4.19.6':
     dependencies:
       '@types/node': 22.8.4
-      '@types/qs': 6.9.16
+      '@types/qs': 6.9.17
       '@types/range-parser': 1.2.7
       '@types/send': 0.17.4
 
   '@types/express-serve-static-core@5.0.1':
     dependencies:
       '@types/node': 22.8.4
-      '@types/qs': 6.9.16
+      '@types/qs': 6.9.17
       '@types/range-parser': 1.2.7
       '@types/send': 0.17.4
 
@@ -15441,14 +15957,14 @@ snapshots:
     dependencies:
       '@types/body-parser': 1.19.5
       '@types/express-serve-static-core': 4.19.6
-      '@types/qs': 6.9.16
+      '@types/qs': 6.9.17
       '@types/serve-static': 1.15.7
 
   '@types/express@5.0.0':
     dependencies:
       '@types/body-parser': 1.19.5
       '@types/express-serve-static-core': 5.0.1
-      '@types/qs': 6.9.16
+      '@types/qs': 6.9.17
       '@types/serve-static': 1.15.7
 
   '@types/filesystem@0.0.36':
@@ -15566,7 +16082,7 @@ snapshots:
 
   '@types/prop-types@15.7.13': {}
 
-  '@types/qs@6.9.16': {}
+  '@types/qs@6.9.17': {}
 
   '@types/range-parser@1.2.7': {}
 
@@ -15803,89 +16319,91 @@ snapshots:
 
   '@vue/shared@3.5.12': {}
 
-  '@webassemblyjs/ast@1.12.1':
+  '@webassemblyjs/ast@1.14.1':
     dependencies:
-      '@webassemblyjs/helper-numbers': 1.11.6
-      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+      '@webassemblyjs/helper-numbers': 1.13.2
+      '@webassemblyjs/helper-wasm-bytecode': 1.13.2
 
-  '@webassemblyjs/floating-point-hex-parser@1.11.6': {}
+  '@webassemblyjs/floating-point-hex-parser@1.13.2': {}
 
-  '@webassemblyjs/helper-api-error@1.11.6': {}
+  '@webassemblyjs/helper-api-error@1.13.2': {}
 
-  '@webassemblyjs/helper-buffer@1.12.1': {}
+  '@webassemblyjs/helper-buffer@1.14.1': {}
 
-  '@webassemblyjs/helper-numbers@1.11.6':
+  '@webassemblyjs/helper-numbers@1.13.2':
     dependencies:
-      '@webassemblyjs/floating-point-hex-parser': 1.11.6
-      '@webassemblyjs/helper-api-error': 1.11.6
+      '@webassemblyjs/floating-point-hex-parser': 1.13.2
+      '@webassemblyjs/helper-api-error': 1.13.2
       '@xtuc/long': 4.2.2
 
-  '@webassemblyjs/helper-wasm-bytecode@1.11.6': {}
+  '@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
 
-  '@webassemblyjs/helper-wasm-section@1.12.1':
+  '@webassemblyjs/helper-wasm-section@1.14.1':
     dependencies:
-      '@webassemblyjs/ast': 1.12.1
-      '@webassemblyjs/helper-buffer': 1.12.1
-      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
-      '@webassemblyjs/wasm-gen': 1.12.1
+      '@webassemblyjs/ast': 1.14.1
+      '@webassemblyjs/helper-buffer': 1.14.1
+      '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+      '@webassemblyjs/wasm-gen': 1.14.1
 
-  '@webassemblyjs/ieee754@1.11.6':
+  '@webassemblyjs/ieee754@1.13.2':
     dependencies:
       '@xtuc/ieee754': 1.2.0
 
-  '@webassemblyjs/leb128@1.11.6':
+  '@webassemblyjs/leb128@1.13.2':
     dependencies:
       '@xtuc/long': 4.2.2
 
-  '@webassemblyjs/utf8@1.11.6': {}
+  '@webassemblyjs/utf8@1.13.2': {}
 
-  '@webassemblyjs/wasm-edit@1.12.1':
+  '@webassemblyjs/wasm-edit@1.14.1':
     dependencies:
-      '@webassemblyjs/ast': 1.12.1
-      '@webassemblyjs/helper-buffer': 1.12.1
-      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
-      '@webassemblyjs/helper-wasm-section': 1.12.1
-      '@webassemblyjs/wasm-gen': 1.12.1
-      '@webassemblyjs/wasm-opt': 1.12.1
-      '@webassemblyjs/wasm-parser': 1.12.1
-      '@webassemblyjs/wast-printer': 1.12.1
+      '@webassemblyjs/ast': 1.14.1
+      '@webassemblyjs/helper-buffer': 1.14.1
+      '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+      '@webassemblyjs/helper-wasm-section': 1.14.1
+      '@webassemblyjs/wasm-gen': 1.14.1
+      '@webassemblyjs/wasm-opt': 1.14.1
+      '@webassemblyjs/wasm-parser': 1.14.1
+      '@webassemblyjs/wast-printer': 1.14.1
 
-  '@webassemblyjs/wasm-gen@1.12.1':
+  '@webassemblyjs/wasm-gen@1.14.1':
     dependencies:
-      '@webassemblyjs/ast': 1.12.1
-      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
-      '@webassemblyjs/ieee754': 1.11.6
-      '@webassemblyjs/leb128': 1.11.6
-      '@webassemblyjs/utf8': 1.11.6
+      '@webassemblyjs/ast': 1.14.1
+      '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+      '@webassemblyjs/ieee754': 1.13.2
+      '@webassemblyjs/leb128': 1.13.2
+      '@webassemblyjs/utf8': 1.13.2
 
-  '@webassemblyjs/wasm-opt@1.12.1':
+  '@webassemblyjs/wasm-opt@1.14.1':
     dependencies:
-      '@webassemblyjs/ast': 1.12.1
-      '@webassemblyjs/helper-buffer': 1.12.1
-      '@webassemblyjs/wasm-gen': 1.12.1
-      '@webassemblyjs/wasm-parser': 1.12.1
+      '@webassemblyjs/ast': 1.14.1
+      '@webassemblyjs/helper-buffer': 1.14.1
+      '@webassemblyjs/wasm-gen': 1.14.1
+      '@webassemblyjs/wasm-parser': 1.14.1
 
-  '@webassemblyjs/wasm-parser@1.12.1':
+  '@webassemblyjs/wasm-parser@1.14.1':
     dependencies:
-      '@webassemblyjs/ast': 1.12.1
-      '@webassemblyjs/helper-api-error': 1.11.6
-      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
-      '@webassemblyjs/ieee754': 1.11.6
-      '@webassemblyjs/leb128': 1.11.6
-      '@webassemblyjs/utf8': 1.11.6
+      '@webassemblyjs/ast': 1.14.1
+      '@webassemblyjs/helper-api-error': 1.13.2
+      '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+      '@webassemblyjs/ieee754': 1.13.2
+      '@webassemblyjs/leb128': 1.13.2
+      '@webassemblyjs/utf8': 1.13.2
 
-  '@webassemblyjs/wast-printer@1.12.1':
+  '@webassemblyjs/wast-printer@1.14.1':
     dependencies:
-      '@webassemblyjs/ast': 1.12.1
+      '@webassemblyjs/ast': 1.14.1
       '@xtuc/long': 4.2.2
 
+  '@wolfy1339/lru-cache@11.0.2-patch.1': {}
+
   '@xtuc/ieee754@1.2.0': {}
 
   '@xtuc/long@4.2.2': {}
 
   '@yarnpkg/lockfile@1.1.0': {}
 
-  '@yarnpkg/parsers@3.0.0-rc.46':
+  '@yarnpkg/parsers@3.0.2':
     dependencies:
       js-yaml: 3.14.1
       tslib: 2.8.0
@@ -15961,13 +16479,13 @@ snapshots:
       clean-stack: 2.2.0
       indent-string: 4.0.0
 
-  ai@3.4.32(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.2.0)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8):
+  ai@3.4.33(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.2.0)(sswr@2.1.0(svelte@5.1.11))(svelte@5.1.11)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8):
     dependencies:
       '@ai-sdk/provider': 0.0.26
       '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
       '@ai-sdk/react': 0.0.70(react@18.2.0)(zod@3.23.8)
       '@ai-sdk/solid': 0.0.54(zod@3.23.8)
-      '@ai-sdk/svelte': 0.0.57(svelte@5.1.9)(zod@3.23.8)
+      '@ai-sdk/svelte': 0.0.57(svelte@5.1.11)(zod@3.23.8)
       '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
       '@ai-sdk/vue': 0.0.59(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
       '@opentelemetry/api': 1.9.0
@@ -15979,8 +16497,8 @@ snapshots:
     optionalDependencies:
       openai: 4.69.0(encoding@0.1.13)(zod@3.23.8)
       react: 18.2.0
-      sswr: 2.1.0(svelte@5.1.9)
-      svelte: 5.1.9
+      sswr: 2.1.0(svelte@5.1.11)
+      svelte: 5.1.11
       zod: 3.23.8
     transitivePeerDependencies:
       - solid-js
@@ -16038,21 +16556,21 @@ snapshots:
       '@algolia/requester-node-http': 4.24.0
       '@algolia/transporter': 4.24.0
 
-  algoliasearch@5.12.0:
-    dependencies:
-      '@algolia/client-abtesting': 5.12.0
-      '@algolia/client-analytics': 5.12.0
-      '@algolia/client-common': 5.12.0
-      '@algolia/client-insights': 5.12.0
-      '@algolia/client-personalization': 5.12.0
-      '@algolia/client-query-suggestions': 5.12.0
-      '@algolia/client-search': 5.12.0
-      '@algolia/ingestion': 1.12.0
-      '@algolia/monitoring': 1.12.0
-      '@algolia/recommend': 5.12.0
-      '@algolia/requester-browser-xhr': 5.12.0
-      '@algolia/requester-fetch': 5.12.0
-      '@algolia/requester-node-http': 5.12.0
+  algoliasearch@5.13.0:
+    dependencies:
+      '@algolia/client-abtesting': 5.13.0
+      '@algolia/client-analytics': 5.13.0
+      '@algolia/client-common': 5.13.0
+      '@algolia/client-insights': 5.13.0
+      '@algolia/client-personalization': 5.13.0
+      '@algolia/client-query-suggestions': 5.13.0
+      '@algolia/client-search': 5.13.0
+      '@algolia/ingestion': 1.13.0
+      '@algolia/monitoring': 1.13.0
+      '@algolia/recommend': 5.13.0
+      '@algolia/requester-browser-xhr': 5.13.0
+      '@algolia/requester-fetch': 5.13.0
+      '@algolia/requester-node-http': 5.13.0
 
   amp-message@0.1.2:
     dependencies:
@@ -16100,6 +16618,8 @@ snapshots:
       - encoding
       - supports-color
 
+  any-promise@1.3.0: {}
+
   anymatch@3.1.3:
     dependencies:
       normalize-path: 3.0.0
@@ -16478,7 +16998,7 @@ snapshots:
   browserslist@4.24.2:
     dependencies:
       caniuse-lite: 1.0.30001677
-      electron-to-chromium: 1.5.50
+      electron-to-chromium: 1.5.52
       node-releases: 2.0.18
       update-browserslist-db: 1.1.1(browserslist@4.24.2)
 
@@ -16526,6 +17046,11 @@ snapshots:
       node-gyp-build: 4.8.2
     optional: true
 
+  bundle-require@5.0.0(esbuild@0.24.0):
+    dependencies:
+      esbuild: 0.24.0
+      load-tsconfig: 0.2.5
+
   busboy@1.6.0:
     dependencies:
       streamsearch: 1.1.0
@@ -16536,6 +17061,8 @@ snapshots:
 
   bytes@3.1.2: {}
 
+  cac@6.7.14: {}
+
   cacache@18.0.4:
     dependencies:
       '@npmcli/fs': 3.1.1
@@ -16705,6 +17232,10 @@ snapshots:
     optionalDependencies:
       fsevents: 2.3.3
 
+  chokidar@4.0.1:
+    dependencies:
+      readdirp: 4.0.2
+
   chownr@1.1.4: {}
 
   chownr@2.0.0: {}
@@ -16876,6 +17407,8 @@ snapshots:
 
   commander@2.20.3: {}
 
+  commander@4.1.1: {}
+
   commander@5.1.0: {}
 
   commander@7.2.0: {}
@@ -17783,7 +18316,7 @@ snapshots:
     dependencies:
       jake: 10.9.2
 
-  electron-to-chromium@1.5.50: {}
+  electron-to-chromium@1.5.52: {}
 
   emittery@0.13.1: {}
 
@@ -17919,6 +18452,33 @@ snapshots:
       '@esbuild/win32-ia32': 0.17.19
       '@esbuild/win32-x64': 0.17.19
 
+  esbuild@0.24.0:
+    optionalDependencies:
+      '@esbuild/aix-ppc64': 0.24.0
+      '@esbuild/android-arm': 0.24.0
+      '@esbuild/android-arm64': 0.24.0
+      '@esbuild/android-x64': 0.24.0
+      '@esbuild/darwin-arm64': 0.24.0
+      '@esbuild/darwin-x64': 0.24.0
+      '@esbuild/freebsd-arm64': 0.24.0
+      '@esbuild/freebsd-x64': 0.24.0
+      '@esbuild/linux-arm': 0.24.0
+      '@esbuild/linux-arm64': 0.24.0
+      '@esbuild/linux-ia32': 0.24.0
+      '@esbuild/linux-loong64': 0.24.0
+      '@esbuild/linux-mips64el': 0.24.0
+      '@esbuild/linux-ppc64': 0.24.0
+      '@esbuild/linux-riscv64': 0.24.0
+      '@esbuild/linux-s390x': 0.24.0
+      '@esbuild/linux-x64': 0.24.0
+      '@esbuild/netbsd-x64': 0.24.0
+      '@esbuild/openbsd-arm64': 0.24.0
+      '@esbuild/openbsd-x64': 0.24.0
+      '@esbuild/sunos-x64': 0.24.0
+      '@esbuild/win32-arm64': 0.24.0
+      '@esbuild/win32-ia32': 0.24.0
+      '@esbuild/win32-x64': 0.24.0
+
   escalade@3.2.0: {}
 
   escape-goat@4.0.0: {}
@@ -18292,6 +18852,10 @@ snapshots:
     dependencies:
       pend: 1.2.0
 
+  fdir@6.4.2(picomatch@4.0.2):
+    optionalDependencies:
+      picomatch: 4.0.2
+
   feed@4.2.2:
     dependencies:
       xml-js: 1.6.11
@@ -19674,7 +20238,7 @@ snapshots:
 
   jest-diff@29.7.0:
     dependencies:
-      chalk: 4.1.2
+      chalk: 4.1.0
       diff-sequences: 29.6.3
       jest-get-type: 29.6.3
       pretty-format: 29.7.0
@@ -19917,6 +20481,8 @@ snapshots:
       '@sideway/formula': 3.0.1
       '@sideway/pinpoint': 2.0.0
 
+  joycon@3.1.1: {}
+
   jpeg-js@0.3.7: {}
 
   js-git@0.7.8:
@@ -20083,7 +20649,7 @@ snapshots:
       '@npmcli/arborist': 7.5.4
       '@npmcli/package-json': 5.2.0
       '@npmcli/run-script': 8.1.0
-      '@nx/devkit': 20.0.7(nx@20.0.7)
+      '@nx/devkit': 20.0.10(nx@20.0.10)
       '@octokit/plugin-enterprise-rest': 6.0.1
       '@octokit/rest': 19.0.11(encoding@0.1.13)
       aproba: 2.0.0
@@ -20128,7 +20694,7 @@ snapshots:
       npm-package-arg: 11.0.2
       npm-packlist: 8.0.2
       npm-registry-fetch: 17.1.0
-      nx: 20.0.7
+      nx: 20.0.10
       p-map: 4.0.0
       p-map-series: 2.1.0
       p-pipe: 3.1.0
@@ -20252,6 +20818,8 @@ snapshots:
       strip-bom: 4.0.0
       type-fest: 0.6.0
 
+  load-tsconfig@0.2.5: {}
+
   loader-runner@4.3.0: {}
 
   loader-utils@2.0.4:
@@ -20305,6 +20873,8 @@ snapshots:
 
   lodash.snakecase@4.1.1: {}
 
+  lodash.sortby@4.7.0: {}
+
   lodash.uniq@4.5.0: {}
 
   lodash@4.17.21: {}
@@ -20449,7 +21019,7 @@ snapshots:
       '@types/unist': 3.0.3
       devlop: 1.1.0
       mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.1
+      mdast-util-to-markdown: 2.1.2
       parse-entities: 4.0.1
       stringify-entities: 4.0.4
       unist-util-visit-parents: 6.0.1
@@ -20486,7 +21056,7 @@ snapshots:
       devlop: 1.1.0
       escape-string-regexp: 5.0.0
       mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.1
+      mdast-util-to-markdown: 2.1.2
       micromark-extension-frontmatter: 2.0.0
     transitivePeerDependencies:
       - supports-color
@@ -20504,7 +21074,7 @@ snapshots:
       '@types/mdast': 4.0.4
       devlop: 1.1.0
       mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.1
+      mdast-util-to-markdown: 2.1.2
       micromark-util-normalize-identifier: 2.0.0
     transitivePeerDependencies:
       - supports-color
@@ -20513,7 +21083,7 @@ snapshots:
     dependencies:
       '@types/mdast': 4.0.4
       mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.1
+      mdast-util-to-markdown: 2.1.2
     transitivePeerDependencies:
       - supports-color
 
@@ -20523,7 +21093,7 @@ snapshots:
       devlop: 1.1.0
       markdown-table: 3.0.4
       mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.1
+      mdast-util-to-markdown: 2.1.2
     transitivePeerDependencies:
       - supports-color
 
@@ -20532,7 +21102,7 @@ snapshots:
       '@types/mdast': 4.0.4
       devlop: 1.1.0
       mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.1
+      mdast-util-to-markdown: 2.1.2
     transitivePeerDependencies:
       - supports-color
 
@@ -20544,7 +21114,7 @@ snapshots:
       mdast-util-gfm-strikethrough: 2.0.0
       mdast-util-gfm-table: 2.0.0
       mdast-util-gfm-task-list-item: 2.0.0
-      mdast-util-to-markdown: 2.1.1
+      mdast-util-to-markdown: 2.1.2
     transitivePeerDependencies:
       - supports-color
 
@@ -20555,7 +21125,7 @@ snapshots:
       '@types/mdast': 4.0.4
       devlop: 1.1.0
       mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.1
+      mdast-util-to-markdown: 2.1.2
     transitivePeerDependencies:
       - supports-color
 
@@ -20568,7 +21138,7 @@ snapshots:
       ccount: 2.0.1
       devlop: 1.1.0
       mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.1
+      mdast-util-to-markdown: 2.1.2
       parse-entities: 4.0.1
       stringify-entities: 4.0.4
       unist-util-stringify-position: 4.0.0
@@ -20582,7 +21152,7 @@ snapshots:
       mdast-util-mdx-expression: 2.0.1
       mdast-util-mdx-jsx: 3.1.3
       mdast-util-mdxjs-esm: 2.0.1
-      mdast-util-to-markdown: 2.1.1
+      mdast-util-to-markdown: 2.1.2
     transitivePeerDependencies:
       - supports-color
 
@@ -20593,7 +21163,7 @@ snapshots:
       '@types/mdast': 4.0.4
       devlop: 1.1.0
       mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.1
+      mdast-util-to-markdown: 2.1.2
     transitivePeerDependencies:
       - supports-color
 
@@ -20614,7 +21184,7 @@ snapshots:
       unist-util-visit: 5.0.0
       vfile: 6.0.3
 
-  mdast-util-to-markdown@2.1.1:
+  mdast-util-to-markdown@2.1.2:
     dependencies:
       '@types/mdast': 4.0.4
       '@types/unist': 3.0.3
@@ -21224,6 +21794,12 @@ snapshots:
 
   mute-stream@1.0.0: {}
 
+  mz@2.7.0:
+    dependencies:
+      any-promise: 1.3.0
+      object-assign: 4.1.1
+      thenify-all: 1.6.0
+
   nan@2.22.0:
     optional: true
 
@@ -21525,14 +22101,14 @@ snapshots:
       schema-utils: 3.3.0
       webpack: 5.96.1
 
-  nx@20.0.7:
+  nx@20.0.10:
     dependencies:
       '@napi-rs/wasm-runtime': 0.2.4
       '@yarnpkg/lockfile': 1.1.0
-      '@yarnpkg/parsers': 3.0.0-rc.46
+      '@yarnpkg/parsers': 3.0.2
       '@zkochan/js-yaml': 0.0.7
       axios: 1.7.7(debug@4.3.7)
-      chalk: 4.1.2
+      chalk: 4.1.0
       cli-cursor: 3.1.0
       cli-spinners: 2.6.1
       cliui: 8.0.1
@@ -21560,16 +22136,16 @@ snapshots:
       yargs: 17.7.2
       yargs-parser: 21.1.1
     optionalDependencies:
-      '@nx/nx-darwin-arm64': 20.0.7
-      '@nx/nx-darwin-x64': 20.0.7
-      '@nx/nx-freebsd-x64': 20.0.7
-      '@nx/nx-linux-arm-gnueabihf': 20.0.7
-      '@nx/nx-linux-arm64-gnu': 20.0.7
-      '@nx/nx-linux-arm64-musl': 20.0.7
-      '@nx/nx-linux-x64-gnu': 20.0.7
-      '@nx/nx-linux-x64-musl': 20.0.7
-      '@nx/nx-win32-arm64-msvc': 20.0.7
-      '@nx/nx-win32-x64-msvc': 20.0.7
+      '@nx/nx-darwin-arm64': 20.0.10
+      '@nx/nx-darwin-x64': 20.0.10
+      '@nx/nx-freebsd-x64': 20.0.10
+      '@nx/nx-linux-arm-gnueabihf': 20.0.10
+      '@nx/nx-linux-arm64-gnu': 20.0.10
+      '@nx/nx-linux-arm64-musl': 20.0.10
+      '@nx/nx-linux-x64-gnu': 20.0.10
+      '@nx/nx-linux-x64-musl': 20.0.10
+      '@nx/nx-win32-arm64-msvc': 20.0.10
+      '@nx/nx-win32-x64-msvc': 20.0.10
     transitivePeerDependencies:
       - debug
 
@@ -21637,17 +22213,10 @@ snapshots:
     dependencies:
       which-pm-runs: 1.1.0
 
-  onnxruntime-common@1.19.2: {}
-
   onnxruntime-common@1.20.0: {}
 
   onnxruntime-common@1.20.0-dev.20241016-2b8fc5529b: {}
 
-  onnxruntime-node@1.19.2:
-    dependencies:
-      onnxruntime-common: 1.19.2
-      tar: 7.4.3
-
   onnxruntime-node@1.20.0:
     dependencies:
       onnxruntime-common: 1.20.0
@@ -21696,7 +22265,7 @@ snapshots:
   ora@5.3.0:
     dependencies:
       bl: 4.1.0
-      chalk: 4.1.2
+      chalk: 4.1.0
       cli-cursor: 3.1.0
       cli-spinners: 2.6.1
       is-interactive: 1.0.0
@@ -22230,6 +22799,14 @@ snapshots:
       postcss: 8.4.47
       postcss-selector-parser: 6.1.2
 
+  postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(yaml@2.6.0):
+    dependencies:
+      lilconfig: 3.1.2
+    optionalDependencies:
+      jiti: 1.21.6
+      postcss: 8.4.47
+      yaml: 2.6.0
+
   postcss-loader@7.3.4(postcss@8.4.47)(typescript@5.6.3)(webpack@5.96.1):
     dependencies:
       cosmiconfig: 8.3.6(typescript@5.6.3)
@@ -22921,10 +23498,14 @@ snapshots:
     dependencies:
       picomatch: 2.3.1
 
+  readdirp@4.0.2: {}
+
   reading-time@1.5.0: {}
 
   readline-sync@1.4.10: {}
 
+  readline@1.3.0: {}
+
   rechoir@0.6.2:
     dependencies:
       resolve: 1.22.8
@@ -23090,7 +23671,7 @@ snapshots:
   remark-stringify@11.0.0:
     dependencies:
       '@types/mdast': 4.0.4
-      mdast-util-to-markdown: 2.1.1
+      mdast-util-to-markdown: 2.1.2
       unified: 11.0.5
 
   renderkid@3.0.0:
@@ -23221,6 +23802,30 @@ snapshots:
     optionalDependencies:
       fsevents: 2.3.3
 
+  rollup@4.24.4:
+    dependencies:
+      '@types/estree': 1.0.6
+    optionalDependencies:
+      '@rollup/rollup-android-arm-eabi': 4.24.4
+      '@rollup/rollup-android-arm64': 4.24.4
+      '@rollup/rollup-darwin-arm64': 4.24.4
+      '@rollup/rollup-darwin-x64': 4.24.4
+      '@rollup/rollup-freebsd-arm64': 4.24.4
+      '@rollup/rollup-freebsd-x64': 4.24.4
+      '@rollup/rollup-linux-arm-gnueabihf': 4.24.4
+      '@rollup/rollup-linux-arm-musleabihf': 4.24.4
+      '@rollup/rollup-linux-arm64-gnu': 4.24.4
+      '@rollup/rollup-linux-arm64-musl': 4.24.4
+      '@rollup/rollup-linux-powerpc64le-gnu': 4.24.4
+      '@rollup/rollup-linux-riscv64-gnu': 4.24.4
+      '@rollup/rollup-linux-s390x-gnu': 4.24.4
+      '@rollup/rollup-linux-x64-gnu': 4.24.4
+      '@rollup/rollup-linux-x64-musl': 4.24.4
+      '@rollup/rollup-win32-arm64-msvc': 4.24.4
+      '@rollup/rollup-win32-ia32-msvc': 4.24.4
+      '@rollup/rollup-win32-x64-msvc': 4.24.4
+      fsevents: 2.3.3
+
   roughjs@4.6.6:
     dependencies:
       hachure-fill: 0.5.2
@@ -23632,6 +24237,10 @@ snapshots:
 
   source-map@0.7.4: {}
 
+  source-map@0.8.0-beta.0:
+    dependencies:
+      whatwg-url: 7.1.0
+
   sourcemap-codec@1.4.8: {}
 
   space-separated-tokens@1.1.5: {}
@@ -23732,9 +24341,9 @@ snapshots:
     dependencies:
       minipass: 7.1.2
 
-  sswr@2.1.0(svelte@5.1.9):
+  sswr@2.1.0(svelte@5.1.11):
     dependencies:
-      svelte: 5.1.9
+      svelte: 5.1.11
       swrev: 4.0.0
 
   stack-utils@2.0.6:
@@ -23875,6 +24484,16 @@ snapshots:
 
   stylis@4.3.4: {}
 
+  sucrase@3.35.0:
+    dependencies:
+      '@jridgewell/gen-mapping': 0.3.5
+      commander: 4.1.1
+      glob: 10.4.5
+      lines-and-columns: 1.2.4
+      mz: 2.7.0
+      pirates: 4.0.6
+      ts-interface-checker: 0.1.13
+
   super-regex@1.0.0:
     dependencies:
       function-timeout: 1.0.2
@@ -23898,7 +24517,7 @@ snapshots:
 
   supports-preserve-symlinks-flag@1.0.0: {}
 
-  svelte@5.1.9:
+  svelte@5.1.11:
     dependencies:
       '@ampproject/remapping': 2.3.0
       '@jridgewell/sourcemap-codec': 1.5.0
@@ -24042,6 +24661,14 @@ snapshots:
 
   text-table@0.2.0: {}
 
+  thenify-all@1.6.0:
+    dependencies:
+      thenify: 3.3.1
+
+  thenify@3.3.1:
+    dependencies:
+      any-promise: 1.3.0
+
   throttleit@2.1.0: {}
 
   through2@2.0.5:
@@ -24070,6 +24697,11 @@ snapshots:
 
   tinyexec@0.3.1: {}
 
+  tinyglobby@0.2.10:
+    dependencies:
+      fdir: 6.4.2(picomatch@4.0.2)
+      picomatch: 4.0.2
+
   tinyld@1.3.4: {}
 
   tinyspawn@1.3.3: {}
@@ -24131,6 +24763,12 @@ snapshots:
 
   tr46@0.0.3: {}
 
+  tr46@1.0.1:
+    dependencies:
+      punycode: 2.3.1
+
+  tree-kill@1.2.2: {}
+
   treeverse@3.0.0: {}
 
   trim-lines@3.0.1: {}
@@ -24149,6 +24787,8 @@ snapshots:
 
   ts-dedent@2.2.0: {}
 
+  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.17.19)(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3):
     dependencies:
       bs-logger: 0.2.6
@@ -24199,6 +24839,33 @@ snapshots:
 
   tslib@2.8.0: {}
 
+  tsup@8.3.5(jiti@1.21.6)(postcss@8.4.47)(typescript@5.6.3)(yaml@2.6.0):
+    dependencies:
+      bundle-require: 5.0.0(esbuild@0.24.0)
+      cac: 6.7.14
+      chokidar: 4.0.1
+      consola: 3.2.3
+      debug: 4.3.7(supports-color@5.5.0)
+      esbuild: 0.24.0
+      joycon: 3.1.1
+      picocolors: 1.1.1
+      postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(yaml@2.6.0)
+      resolve-from: 5.0.0
+      rollup: 4.24.4
+      source-map: 0.8.0-beta.0
+      sucrase: 3.35.0
+      tinyexec: 0.3.1
+      tinyglobby: 0.2.10
+      tree-kill: 1.2.2
+    optionalDependencies:
+      postcss: 8.4.47
+      typescript: 5.6.3
+    transitivePeerDependencies:
+      - jiti
+      - supports-color
+      - tsx
+      - yaml
+
   tuf-js@2.2.1:
     dependencies:
       '@tufjs/models': 2.0.1
@@ -24611,6 +25278,8 @@ snapshots:
 
   webidl-conversions@3.0.1: {}
 
+  webidl-conversions@4.0.2: {}
+
   webpack-bundle-analyzer@4.10.2(bufferutil@4.0.8)(utf-8-validate@5.0.10):
     dependencies:
       '@discoveryjs/json-ext': 0.5.7
@@ -24696,9 +25365,9 @@ snapshots:
     dependencies:
       '@types/eslint-scope': 3.7.7
       '@types/estree': 1.0.6
-      '@webassemblyjs/ast': 1.12.1
-      '@webassemblyjs/wasm-edit': 1.12.1
-      '@webassemblyjs/wasm-parser': 1.12.1
+      '@webassemblyjs/ast': 1.14.1
+      '@webassemblyjs/wasm-edit': 1.14.1
+      '@webassemblyjs/wasm-parser': 1.14.1
       acorn: 8.14.0
       browserslist: 4.24.2
       chrome-trace-event: 1.0.4
@@ -24747,6 +25416,12 @@ snapshots:
       tr46: 0.0.3
       webidl-conversions: 3.0.1
 
+  whatwg-url@7.1.0:
+    dependencies:
+      lodash.sortby: 4.7.0
+      tr46: 1.0.1
+      webidl-conversions: 4.0.2
+
   which-pm-runs@1.1.0: {}
 
   which@1.3.1:
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 4d03833b721..642d22a684c 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,3 +1,5 @@
 packages:
     - "docs"
     - "core"
+    - "packages/*"
+    - "agent"
diff --git a/scripts/build.sh b/scripts/build.sh
new file mode 100644
index 00000000000..4ec58f68818
--- /dev/null
+++ b/scripts/build.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+
+# Navigate to the script's directory
+cd "$(dirname "$0")"/..
+
+# Build the core package first
+echo "Building core package"
+if pnpm --dir core build; then
+    echo "Successfully built core package"
+else
+    echo "Failed to build core package"
+    exit 1
+fi
+
+# Check if the packages directory exists
+if [ ! -d "packages" ]; then
+    echo "Error: 'packages' directory not found."
+    exit 1
+fi
+
+# Iterate over each directory in the packages directory
+for package in packages/*; do
+    if [ -d "$package" ]; then
+        echo "Building package: $(basename "$package")"
+        cd "$package" || continue
+
+        # Check if a package.json file exists
+        if [ -f "package.json" ]; then
+            # Run the build script defined in package.json
+            if npm run build; then
+                echo "Successfully built $(basename "$package")"
+            else
+                echo "Failed to build $(basename "$package")"
+            fi
+        else
+            echo "No package.json found in $(basename "$package"), skipping..."
+        fi
+
+        # Return to the root directory
+        cd - > /dev/null || exit
+    fi
+done
+
+echo "Build process completed."
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000000..dd7a988669f
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,24 @@
+{
+    "compilerOptions": {
+        "target": "ESNext",
+        "module": "ESNext",
+        "lib": ["ESNext", "dom"],
+        "moduleResolution": "Bundler",
+        "outDir": "./dist",
+        "rootDir": ".",
+        "strict": false,
+        "esModuleInterop": true,
+        "skipLibCheck": true,
+        "forceConsistentCasingInFileNames": false,
+        "allowImportingTsExtensions": true,
+        "declaration": true,
+        "emitDeclarationOnly": true,
+        "resolveJsonModule": true,
+        "noImplicitAny": false,
+        "allowJs": true,
+        "checkJs": false,
+        "noEmitOnError": false,
+        "moduleDetection": "force",
+        "allowArbitraryExtensions": true
+    }
+}