@elizaos/plugin-sql 1.0.0-alpha.11 → 1.0.0-alpha.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -536,7 +536,6 @@ var BaseDrizzleAdapter = class extends DatabaseAdapter {
|
|
|
536
536
|
nextRetryIn: `${(delay / 1e3).toFixed(1)}s`
|
|
537
537
|
}
|
|
538
538
|
);
|
|
539
|
-
console.trace("****** Database operation failure source");
|
|
540
539
|
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
541
540
|
} else {
|
|
542
541
|
logger.error("Max retry attempts reached:", {
|
|
@@ -2032,7 +2031,6 @@ var PgDatabaseAdapter = class extends BaseDrizzleAdapter {
|
|
|
2032
2031
|
var pgLiteClientManager;
|
|
2033
2032
|
var postgresConnectionManager;
|
|
2034
2033
|
function createDatabaseAdapter(config, agentId) {
|
|
2035
|
-
console.log("*** postgresUrl", config.postgresUrl);
|
|
2036
2034
|
if (config.postgresUrl) {
|
|
2037
2035
|
if (!postgresConnectionManager) {
|
|
2038
2036
|
postgresConnectionManager = new PostgresConnectionManager(
|
|
@@ -2052,7 +2050,6 @@ var drizzlePlugin = {
|
|
|
2052
2050
|
name: "drizzle",
|
|
2053
2051
|
description: "Database adapter plugin using Drizzle ORM",
|
|
2054
2052
|
init: /* @__PURE__ */ __name(async (_, runtime) => {
|
|
2055
|
-
console.log("*** drizzlePlugin init");
|
|
2056
2053
|
const config = {
|
|
2057
2054
|
dataDir: runtime.getSetting("PGLITE_DATA_DIR") ?? "./pglite",
|
|
2058
2055
|
postgresUrl: runtime.getSetting("POSTGRES_URL")
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/pg-lite/adapter.ts","../src/base.ts","../src/schema/embedding.ts","../src/schema/memory.ts","../src/schema/agent.ts","../src/schema/types.ts","../src/schema/entity.ts","../src/schema/room.ts","../src/schema/worldTable.ts","../src/schema/cache.ts","../src/schema/component.ts","../src/schema/goal.ts","../src/schema/log.ts","../src/schema/participant.ts","../src/schema/relationship.ts","../src/schema/tasks.ts","../src/pg/adapter.ts"],"sourceRoot":"./","sourcesContent":["import {\n\ttype IAgentRuntime,\n\ttype IDatabaseAdapter,\n\ttype Plugin,\n\ttype UUID,\n\tlogger,\n} from \"@elizaos/core\";\nimport { PgliteDatabaseAdapter } from \"./pg-lite/adapter\";\nimport { PGliteClientManager } from \"./pg-lite/manager\";\nimport { PgDatabaseAdapter } from \"./pg/adapter\";\nimport { PostgresConnectionManager } from \"./pg/manager\";\n\n// Singleton connection managers\nlet pgLiteClientManager: PGliteClientManager;\nlet postgresConnectionManager: PostgresConnectionManager;\n\n/**\n * Creates a database adapter based on the provided configuration.\n * If a postgresUrl is provided in the config, a PgDatabaseAdapter is initialized using the PostgresConnectionManager.\n * If no postgresUrl is provided, a PgliteDatabaseAdapter is initialized using PGliteClientManager with the dataDir from the config.\n *\n * @param {object} config - The configuration object.\n * @param {string} [config.dataDir] - The directory where data is stored. Defaults to \"./elizadb\".\n * @param {string} [config.postgresUrl] - The URL for the PostgreSQL database.\n * @param {UUID} agentId - The unique identifier for the agent.\n * @returns {IDatabaseAdapter} The created database adapter.\n */\nexport function createDatabaseAdapter(\n\tconfig: {\n\t\tdataDir?: string;\n\t\tpostgresUrl?: string;\n\t},\n\tagentId: UUID,\n): IDatabaseAdapter {\n\tconsole.log(\"*** postgresUrl\", config.postgresUrl);\n\tif (config.postgresUrl) {\n\t\tif (!postgresConnectionManager) {\n\t\t\tpostgresConnectionManager = new PostgresConnectionManager(\n\t\t\t\tconfig.postgresUrl,\n\t\t\t);\n\t\t}\n\t\treturn new PgDatabaseAdapter(agentId, postgresConnectionManager);\n\t}\n\n\tconst dataDir = config.dataDir ?? \"./elizadb\";\n\n\tif (!pgLiteClientManager) {\n\t\tpgLiteClientManager = new PGliteClientManager({ dataDir });\n\t}\n\treturn new PgliteDatabaseAdapter(agentId, pgLiteClientManager);\n}\n\n/**\n * Drizzle plugin for database adapter using Drizzle ORM\n *\n * @typedef {Object} Plugin\n * @property {string} name - The name of the plugin\n * @property {string} description - The description of the plugin\n * @property {Function} init - The initialization function for the plugin\n * @param {any} _ - Input parameter\n * @param {IAgentRuntime} runtime - The runtime environment for the agent\n */\nconst drizzlePlugin: Plugin = {\n\tname: \"drizzle\",\n\tdescription: \"Database adapter plugin using Drizzle ORM\",\n\tinit: async (_, runtime: IAgentRuntime) => {\n\t\tconsole.log(\"*** drizzlePlugin init\");\n\t\tconst config = {\n\t\t\tdataDir: runtime.getSetting(\"PGLITE_DATA_DIR\") ?? \"./pglite\",\n\t\t\tpostgresUrl: runtime.getSetting(\"POSTGRES_URL\"),\n\t\t};\n\n\t\ttry {\n\t\t\tconst db = createDatabaseAdapter(config, runtime.agentId);\n\t\t\tlogger.success(\"Database connection established successfully\");\n\t\t\truntime.registerDatabaseAdapter(db);\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Failed to initialize database:\", error);\n\t\t\tthrow error;\n\t\t}\n\t},\n};\n\nexport default drizzlePlugin;\n","import { type UUID, logger } from \"@elizaos/core\";\nimport { type PgliteDatabase, drizzle } from \"drizzle-orm/pglite\";\nimport { BaseDrizzleAdapter } from \"../base\";\nimport {\n\tDIMENSION_MAP,\n\ttype EmbeddingDimensionColumn,\n} from \"../schema/embedding\";\nimport type { PGliteClientManager } from \"./manager\";\n\n/**\n * PgliteDatabaseAdapter class represents an adapter for interacting with a PgliteDatabase.\n * Extends BaseDrizzleAdapter<PgliteDatabase>.\n *\n * @constructor\n * @param {UUID} agentId - The ID of the agent.\n * @param {PGliteClientManager} manager - The manager for the PgliteDatabase.\n *\n * @method withDatabase\n * @param {() => Promise<T>} operation - The operation to perform on the database.\n * @return {Promise<T>} - The result of the operation.\n *\n * @method init\n * @return {Promise<void>} - A Promise that resolves when the initialization is complete.\n *\n * @method close\n * @return {void} - A Promise that resolves when the database is closed.\n */\nexport class PgliteDatabaseAdapter extends BaseDrizzleAdapter<PgliteDatabase> {\n\tprivate manager: PGliteClientManager;\n\tprotected embeddingDimension: EmbeddingDimensionColumn = DIMENSION_MAP[384];\n\n\t/**\n\t * Constructor for creating an instance of a class.\n\t * @param {UUID} agentId - The unique identifier for the agent.\n\t * @param {PGliteClientManager} manager - The manager for the PGlite client.\n\t */\n\tconstructor(agentId: UUID, manager: PGliteClientManager) {\n\t\tsuper(agentId);\n\t\tthis.manager = manager;\n\t\tthis.db = drizzle(this.manager.getConnection());\n\t}\n\n\t/**\n\t * Asynchronously runs the provided database operation while checking if the database manager is currently shutting down.\n\t * If the database manager is shutting down, a warning is logged and null is returned.\n\t *\n\t * @param {Function} operation - The database operation to be performed.\n\t * @returns {Promise<T>} A promise that resolves with the result of the database operation.\n\t */\n\tprotected async withDatabase<T>(operation: () => Promise<T>): Promise<T> {\n\t\tif (this.manager.isShuttingDown()) {\n\t\t\tlogger.warn(\"Database is shutting down\");\n\t\t\treturn null as unknown as T;\n\t\t}\n\t\treturn operation();\n\t}\n\n\t/**\n\t * Asynchronously initializes the database by running migrations using the manager.\n\t *\n\t * @returns {Promise<void>} A Promise that resolves when the database initialization is complete.\n\t */\n\tasync init(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.manager.runMigrations();\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Failed to initialize database:\", error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Asynchronously closes the manager.\n\t */\n\tasync close() {\n\t\tawait this.manager.close();\n\t}\n}\n","import {\n\ttype Agent,\n\ttype Component,\n\tDatabaseAdapter,\n\ttype Entity,\n\ttype Goal,\n\ttype GoalStatus,\n\ttype Memory,\n\ttype Participant,\n\ttype Relationship,\n\ttype Room,\n\ttype Task,\n\ttype UUID,\n\ttype World,\n\tlogger,\n} from \"@elizaos/core\";\nimport {\n\tand,\n\tcosineDistance,\n\tcount,\n\tdesc,\n\teq,\n\tgte,\n\tinArray,\n\tlte,\n\tor,\n\tsql,\n} from \"drizzle-orm\";\nimport { v4 } from \"uuid\";\nimport {\n\tDIMENSION_MAP,\n\ttype EmbeddingDimensionColumn,\n} from \"./schema/embedding\";\nimport {\n\tagentTable,\n\tcacheTable,\n\tcomponentTable,\n\tembeddingTable,\n\tentityTable,\n\tgoalTable,\n\tlogTable,\n\tmemoryTable,\n\tparticipantTable,\n\trelationshipTable,\n\troomTable,\n\ttaskTable,\n\tworldTable,\n} from \"./schema/index\";\nimport type { DrizzleOperations } from \"./types\";\n\n// Define the metadata type inline since we can't import it\n/**\n * Represents metadata information about memory.\n * @typedef {Object} MemoryMetadata\n * @property {string} type - The type of memory.\n * @property {string} [source] - The source of the memory.\n * @property {UUID} [sourceId] - The ID of the source.\n * @property {string} [scope] - The scope of the memory.\n * @property {number} [timestamp] - The timestamp of the memory.\n * @property {string[]} [tags] - The tags associated with the memory.\n * @property {UUID} [documentId] - The ID of the document associated with the memory.\n * @property {number} [position] - The position of the memory.\n */\n\ntype MemoryMetadata = {\n\ttype: string;\n\tsource?: string;\n\tsourceId?: UUID;\n\tscope?: string;\n\ttimestamp?: number;\n\ttags?: string[];\n\tdocumentId?: UUID;\n\tposition?: number;\n};\n\n/**\n * Abstract class representing a base Drizzle adapter for working with databases.\n * @template TDatabase - The type of Drizzle operations supported by the adapter.\n */\nexport abstract class BaseDrizzleAdapter<\n\tTDatabase extends DrizzleOperations,\n> extends DatabaseAdapter<TDatabase> {\n\tprotected readonly maxRetries: number = 3;\n\tprotected readonly baseDelay: number = 1000;\n\tprotected readonly maxDelay: number = 10000;\n\tprotected readonly jitterMax: number = 1000;\n\tprotected embeddingDimension: EmbeddingDimensionColumn = DIMENSION_MAP[384];\n\n\tprotected abstract withDatabase<T>(operation: () => Promise<T>): Promise<T>;\n\tpublic abstract init(): Promise<void>;\n\tpublic abstract close(): Promise<void>;\n\n\tprotected agentId: UUID;\n\n\t/**\n\t * Constructor for creating a new instance of Agent with the specified agentId.\n\t *\n\t * @param {UUID} agentId - The unique identifier for the agent.\n\t */\n\tconstructor(agentId: UUID) {\n\t\tsuper();\n\t\tthis.agentId = agentId;\n\t}\n\n\t/**\n\t * Executes the given operation with retry logic.\n\t * @template T\n\t * @param {() => Promise<T>} operation - The operation to be executed.\n\t * @returns {Promise<T>} A promise that resolves with the result of the operation.\n\t */\n\tprotected async withRetry<T>(operation: () => Promise<T>): Promise<T> {\n\t\tlet lastError: Error = new Error(\"Unknown error\");\n\n\t\tfor (let attempt = 1; attempt <= this.maxRetries; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn await operation();\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error as Error;\n\n\t\t\t\tif (attempt < this.maxRetries) {\n\t\t\t\t\tconst backoffDelay = Math.min(\n\t\t\t\t\t\tthis.baseDelay * 2 ** (attempt - 1),\n\t\t\t\t\t\tthis.maxDelay,\n\t\t\t\t\t);\n\n\t\t\t\t\tconst jitter = Math.random() * this.jitterMax;\n\t\t\t\t\tconst delay = backoffDelay + jitter;\n\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t`Database operation failed (attempt ${attempt}/${this.maxRetries}):`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\tnextRetryIn: `${(delay / 1000).toFixed(1)}s`,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\tconsole.trace(\"****** Database operation failure source\");\n\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, delay));\n\t\t\t\t} else {\n\t\t\t\t\tlogger.error(\"Max retry attempts reached:\", {\n\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\ttotalAttempts: attempt,\n\t\t\t\t\t});\n\t\t\t\t\tthrow error instanceof Error ? error : new Error(String(error));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow lastError;\n\t}\n\n\t/**\n\t * Ensure that an agent exists by checking if an agent with the same name already exists in the system.\n\t * If the agent does not exist, it will be created with the provided data.\n\t *\n\t * @param {Partial<Agent>} agent - The partial data of the agent to ensure its existence.\n\t * @returns {Promise<void>} - A promise that resolves when the agent is successfully ensured.\n\t * @throws {Error} - If the agent name is not provided or if there is an issue creating the agent.\n\t */\n\tasync ensureAgentExists(agent: Partial<Agent>): Promise<void> {\n\t\tif (!agent.name) {\n\t\t\tthrow new Error(\"Agent name is required\");\n\t\t}\n\n\t\tconst agents = await this.getAgents();\n\t\tconst existingAgent = agents.find(\n\t\t\t(a: Partial<Agent & { status: string }>) => a.name === agent.name,\n\t\t);\n\n\t\tif (!existingAgent) {\n\t\t\tawait this.createAgent(agent);\n\t\t}\n\t}\n\n\t/**\n\t * Ensure that the given embedding dimension is valid for the agent.\n\t *\n\t * @param {number} dimension - The dimension to ensure for the embedding.\n\t * @returns {Promise<void>} - Resolves once the embedding dimension is ensured.\n\t */\n\tasync ensureEmbeddingDimension(dimension: number) {\n\t\tconst existingMemory = await this.db\n\t\t\t.select({\n\t\t\t\tembedding: embeddingTable,\n\t\t\t})\n\t\t\t.from(memoryTable)\n\t\t\t.innerJoin(embeddingTable, eq(embeddingTable.memoryId, memoryTable.id))\n\t\t\t.where(eq(memoryTable.agentId, this.agentId))\n\t\t\t.limit(1);\n\n\t\tif (existingMemory.length > 0) {\n\t\t\tconst usedDimension = Object.entries(DIMENSION_MAP).find(\n\t\t\t\t([_, colName]) => existingMemory[0].embedding[colName] !== null,\n\t\t\t);\n\n\t\t\tif (usedDimension && usedDimension[1] !== DIMENSION_MAP[dimension]) {\n\t\t\t\tthrow new Error(\"Cannot change embedding dimension for agent\");\n\t\t\t}\n\t\t}\n\n\t\tthis.embeddingDimension = DIMENSION_MAP[dimension];\n\t}\n\n\t/**\n\t * Asynchronously retrieves an agent by their ID from the database.\n\t * @param {UUID} agentId - The ID of the agent to retrieve.\n\t * @returns {Promise<Agent | null>} A promise that resolves to the retrieved agent or null if not found.\n\t */\n\tasync getAgent(agentId: UUID): Promise<Agent | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select()\n\t\t\t\t.from(agentTable)\n\t\t\t\t.where(eq(agentTable.id, agentId))\n\t\t\t\t.limit(1);\n\n\t\t\tif (result.length === 0) return null;\n\t\t\treturn result[0];\n\t\t});\n\t}\n\n\t/**\n\t * Asynchronously retrieves a list of agents from the database.\n\t *\n\t * @returns {Promise<Agent[]>} A Promise that resolves to an array of Agent objects.\n\t */\n\tasync getAgents(): Promise<Agent[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db.select().from(agentTable);\n\n\t\t\treturn result;\n\t\t});\n\t}\n\n\t/**\n\t * Asynchronously creates a new agent record in the database.\n\t *\n\t * @param {Partial<Agent>} agent The agent object to be created.\n\t * @returns {Promise<boolean>} A promise that resolves to a boolean indicating the success of the operation.\n\t */\n\tasync createAgent(agent: Partial<Agent>): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx.insert(agentTable).values({\n\t\t\t\t\t\t...agent,\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tlogger.debug(\"Agent created successfully:\", {\n\t\t\t\t\tagentId: agent.id,\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error creating agent:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tagentId: agent.id,\n\t\t\t\t\tagent,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Updates an agent in the database with the provided agent ID and data.\n\t * @param {UUID} agentId - The unique identifier of the agent to update.\n\t * @param {Partial<Agent>} agent - The partial agent object containing the fields to update.\n\t * @returns {Promise<boolean>} - A boolean indicating if the agent was successfully updated.\n\t */\n\tasync updateAgent(agentId: UUID, agent: Partial<Agent>): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tif (!agent.id) {\n\t\t\t\t\tthrow new Error(\"Agent ID is required for update\");\n\t\t\t\t}\n\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.update(agentTable)\n\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\t...agent,\n\t\t\t\t\t\t\tupdatedAt: Date.now(),\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.where(eq(agentTable.id, agentId));\n\t\t\t\t});\n\n\t\t\t\tlogger.debug(\"Agent updated successfully:\", {\n\t\t\t\t\tagentId,\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error updating agent:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tagentId,\n\t\t\t\t\tagent,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Asynchronously deletes an agent with the specified UUID and all related entries.\n\t *\n\t * @param {UUID} agentId - The UUID of the agent to be deleted.\n\t * @returns {Promise<boolean>} - A boolean indicating if the deletion was successful.\n\t */\n\tasync deleteAgent(agentId: UUID): Promise<boolean> {\n\t\t// casacade delete all related for the agent\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\tawait tx.delete(agentTable).where(eq(agentTable.id, agentId));\n\t\t\t});\n\t\t\treturn true;\n\t\t});\n\t}\n\n\t/**\n\t * Count all agents in the database\n\t * Used primarily for maintenance and cleanup operations\n\t */\n\t/**\n\t * Asynchronously counts the number of agents in the database.\n\t * @returns {Promise<number>} A Promise that resolves to the number of agents in the database.\n\t */\n\tasync countAgents(): Promise<number> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.select({ count: count() })\n\t\t\t\t\t.from(agentTable);\n\n\t\t\t\treturn result[0]?.count || 0;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error counting agents:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Clean up the agents table by removing all agents\n\t * This is used during server startup to ensure no orphaned agents exist\n\t * from previous crashes or improper shutdowns\n\t */\n\tasync cleanupAgents(): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.delete(agentTable);\n\t\t\t\tlogger.success(\"Successfully cleaned up agent table\");\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error cleaning up agent table:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync getEntityById(entityId: UUID): Promise<Entity | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tentity: entityTable,\n\t\t\t\t\tcomponents: componentTable,\n\t\t\t\t})\n\t\t\t\t.from(entityTable)\n\t\t\t\t.leftJoin(componentTable, eq(componentTable.entityId, entityTable.id))\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(entityTable.id, entityId),\n\t\t\t\t\t\teq(entityTable.agentId, this.agentId),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\tif (result.length === 0) return null;\n\n\t\t\t// Group components by entity\n\t\t\tconst entity = result[0].entity;\n\t\t\tentity.components = result\n\t\t\t\t.filter((row) => row.components)\n\t\t\t\t.map((row) => row.components);\n\n\t\t\treturn entity;\n\t\t});\n\t}\n\n\tasync getEntitiesForRoom(\n\t\troomId: UUID,\n\t\tincludeComponents?: boolean,\n\t): Promise<Entity[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst query = this.db\n\t\t\t\t.select({\n\t\t\t\t\tentity: entityTable,\n\t\t\t\t\t...(includeComponents && { components: componentTable }),\n\t\t\t\t})\n\t\t\t\t.from(participantTable)\n\t\t\t\t.leftJoin(\n\t\t\t\t\tentityTable,\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(participantTable.entityId, entityTable.id),\n\t\t\t\t\t\teq(entityTable.agentId, this.agentId),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\tif (includeComponents) {\n\t\t\t\tquery.leftJoin(\n\t\t\t\t\tcomponentTable,\n\t\t\t\t\teq(componentTable.entityId, entityTable.id),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst result = await query.where(eq(participantTable.roomId, roomId));\n\n\t\t\t// Group components by entity if includeComponents is true\n\t\t\tconst entitiesByIdMap = new Map<UUID, Entity>();\n\n\t\t\tfor (const row of result) {\n\t\t\t\tif (!row.entity) continue;\n\n\t\t\t\tconst entityId = row.entity.id as UUID;\n\t\t\t\tif (!entitiesByIdMap.has(entityId)) {\n\t\t\t\t\tconst entity: Entity = {\n\t\t\t\t\t\t...row.entity,\n\t\t\t\t\t\tcomponents: includeComponents ? [] : undefined,\n\t\t\t\t\t};\n\t\t\t\t\tentitiesByIdMap.set(entityId, entity);\n\t\t\t\t}\n\n\t\t\t\tif (includeComponents && row.components) {\n\t\t\t\t\tconst entity = entitiesByIdMap.get(entityId);\n\t\t\t\t\tif (entity) {\n\t\t\t\t\t\tif (!entity.components) {\n\t\t\t\t\t\t\tentity.components = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tentity.components.push(row.components);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Array.from(entitiesByIdMap.values());\n\t\t});\n\t}\n\n\tasync createEntity(entity: Entity): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\treturn await this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx.insert(entityTable).values(entity);\n\n\t\t\t\t\tlogger.debug(\"Entity created successfully:\", {\n\t\t\t\t\t\tentity,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error creating entity:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tentityId: entity.id,\n\t\t\t\t\tname: entity.metadata?.name,\n\t\t\t\t});\n\t\t\t\t// trace the error\n\t\t\t\tconsole.trace(error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Ensures an entity exists, creating it if it doesn't\n\t * @param entity The entity to ensure exists\n\t * @returns Promise resolving to boolean indicating success\n\t */\n\tprotected async ensureEntityExists(entity: Entity): Promise<boolean> {\n\t\tif (!entity.id) {\n\t\t\tlogger.error(\"Entity ID is required for ensureEntityExists\");\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tconst existingEntity = await this.getEntityById(entity.id);\n\n\t\t\tif (!existingEntity) {\n\t\t\t\treturn await this.createEntity(entity);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Error ensuring entity exists:\", {\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\tentityId: entity.id,\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync updateEntity(entity: Entity): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db\n\t\t\t\t.update(entityTable)\n\t\t\t\t.set(entity)\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(entityTable.id, entity.id as UUID),\n\t\t\t\t\t\teq(entityTable.agentId, entity.agentId),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t});\n\t}\n\n\tasync getComponent(\n\t\tentityId: UUID,\n\t\ttype: string,\n\t\tworldId?: UUID,\n\t\tsourceEntityId?: UUID,\n\t): Promise<Component | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst conditions = [\n\t\t\t\teq(componentTable.entityId, entityId),\n\t\t\t\teq(componentTable.type, type),\n\t\t\t];\n\n\t\t\tif (worldId) {\n\t\t\t\tconditions.push(eq(componentTable.worldId, worldId));\n\t\t\t}\n\n\t\t\tif (sourceEntityId) {\n\t\t\t\tconditions.push(eq(componentTable.sourceEntityId, sourceEntityId));\n\t\t\t}\n\n\t\t\tconst result = await this.db\n\t\t\t\t.select()\n\t\t\t\t.from(componentTable)\n\t\t\t\t.where(and(...conditions));\n\t\t\treturn result.length > 0 ? result[0] : null;\n\t\t});\n\t}\n\n\tasync getComponents(\n\t\tentityId: UUID,\n\t\tworldId?: UUID,\n\t\tsourceEntityId?: UUID,\n\t): Promise<Component[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst conditions = [eq(componentTable.entityId, entityId)];\n\n\t\t\tif (worldId) {\n\t\t\t\tconditions.push(eq(componentTable.worldId, worldId));\n\t\t\t}\n\n\t\t\tif (sourceEntityId) {\n\t\t\t\tconditions.push(eq(componentTable.sourceEntityId, sourceEntityId));\n\t\t\t}\n\n\t\t\tconst result = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tid: componentTable.id,\n\t\t\t\t\tentityId: componentTable.entityId,\n\t\t\t\t\ttype: componentTable.type,\n\t\t\t\t\tdata: componentTable.data,\n\t\t\t\t\tworldId: componentTable.worldId,\n\t\t\t\t\tsourceEntityId: componentTable.sourceEntityId,\n\t\t\t\t\tcreatedAt: componentTable.createdAt,\n\t\t\t\t})\n\t\t\t\t.from(componentTable)\n\t\t\t\t.where(and(...conditions));\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tasync createComponent(component: Component): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.insert(componentTable).values(component);\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tasync updateComponent(component: Component): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db\n\t\t\t\t.update(componentTable)\n\t\t\t\t.set(component)\n\t\t\t\t.where(eq(componentTable.id, component.id));\n\t\t});\n\t}\n\n\tasync deleteComponent(componentId: UUID): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db\n\t\t\t\t.delete(componentTable)\n\t\t\t\t.where(eq(componentTable.id, componentId));\n\t\t});\n\t}\n\n\tasync getMemories(params: {\n\t\troomId: UUID;\n\t\tcount?: number;\n\t\tunique?: boolean;\n\t\ttableName: string;\n\t\tstart?: number;\n\t\tend?: number;\n\t}): Promise<Memory[]> {\n\t\tif (!params.tableName) throw new Error(\"tableName is required\");\n\t\tif (!params.roomId) throw new Error(\"roomId is required\");\n\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst conditions = [\n\t\t\t\teq(memoryTable.type, params.tableName),\n\t\t\t\teq(memoryTable.roomId, params.roomId),\n\t\t\t];\n\n\t\t\tif (params.start) {\n\t\t\t\tconditions.push(gte(memoryTable.createdAt, params.start));\n\t\t\t}\n\n\t\t\tif (params.end) {\n\t\t\t\tconditions.push(lte(memoryTable.createdAt, params.end));\n\t\t\t}\n\n\t\t\tif (params.unique) {\n\t\t\t\tconditions.push(eq(memoryTable.unique, true));\n\t\t\t}\n\n\t\t\tconditions.push(eq(memoryTable.agentId, this.agentId));\n\n\t\t\tconst query = this.db\n\t\t\t\t.select({\n\t\t\t\t\tmemory: {\n\t\t\t\t\t\tid: memoryTable.id,\n\t\t\t\t\t\ttype: memoryTable.type,\n\t\t\t\t\t\tcreatedAt: memoryTable.createdAt,\n\t\t\t\t\t\tcontent: memoryTable.content,\n\t\t\t\t\t\tentityId: memoryTable.entityId,\n\t\t\t\t\t\tagentId: memoryTable.agentId,\n\t\t\t\t\t\troomId: memoryTable.roomId,\n\t\t\t\t\t\tunique: memoryTable.unique,\n\t\t\t\t\t},\n\t\t\t\t\tembedding: embeddingTable[this.embeddingDimension],\n\t\t\t\t})\n\t\t\t\t.from(memoryTable)\n\t\t\t\t.leftJoin(embeddingTable, eq(embeddingTable.memoryId, memoryTable.id))\n\t\t\t\t.where(and(...conditions))\n\t\t\t\t.orderBy(desc(memoryTable.createdAt));\n\n\t\t\tconst rows = params.count ? await query.limit(params.count) : await query;\n\n\t\t\treturn rows.map((row) => ({\n\t\t\t\tid: row.memory.id as UUID,\n\t\t\t\ttype: row.memory.type,\n\t\t\t\tcreatedAt: row.memory.createdAt,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof row.memory.content === \"string\"\n\t\t\t\t\t\t? JSON.parse(row.memory.content)\n\t\t\t\t\t\t: row.memory.content,\n\t\t\t\tentityId: row.memory.entityId as UUID,\n\t\t\t\tagentId: row.memory.agentId as UUID,\n\t\t\t\troomId: row.memory.roomId as UUID,\n\t\t\t\tunique: row.memory.unique,\n\t\t\t\tembedding: row.embedding ? Array.from(row.embedding) : undefined,\n\t\t\t}));\n\t\t});\n\t}\n\n\tasync getMemoriesByRoomIds(params: {\n\t\troomIds: UUID[];\n\t\ttableName: string;\n\t\tlimit?: number;\n\t}): Promise<Memory[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tif (params.roomIds.length === 0) return [];\n\n\t\t\tconst conditions = [\n\t\t\t\teq(memoryTable.type, params.tableName),\n\t\t\t\tinArray(memoryTable.roomId, params.roomIds),\n\t\t\t];\n\n\t\t\tconditions.push(eq(memoryTable.agentId, this.agentId));\n\n\t\t\tconst query = this.db\n\t\t\t\t.select({\n\t\t\t\t\tid: memoryTable.id,\n\t\t\t\t\ttype: memoryTable.type,\n\t\t\t\t\tcreatedAt: memoryTable.createdAt,\n\t\t\t\t\tcontent: memoryTable.content,\n\t\t\t\t\tentityId: memoryTable.entityId,\n\t\t\t\t\tagentId: memoryTable.agentId,\n\t\t\t\t\troomId: memoryTable.roomId,\n\t\t\t\t\tunique: memoryTable.unique,\n\t\t\t\t})\n\t\t\t\t.from(memoryTable)\n\t\t\t\t.where(and(...conditions))\n\t\t\t\t.orderBy(desc(memoryTable.createdAt));\n\n\t\t\tconst rows = params.limit ? await query.limit(params.limit) : await query;\n\n\t\t\treturn rows.map((row) => ({\n\t\t\t\tid: row.id as UUID,\n\t\t\t\tcreatedAt: row.createdAt,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof row.content === \"string\"\n\t\t\t\t\t\t? JSON.parse(row.content)\n\t\t\t\t\t\t: row.content,\n\t\t\t\tentityId: row.entityId as UUID,\n\t\t\t\tagentId: row.agentId as UUID,\n\t\t\t\troomId: row.roomId as UUID,\n\t\t\t\tunique: row.unique,\n\t\t\t})) as Memory[];\n\t\t});\n\t}\n\n\tasync getMemoryById(id: UUID): Promise<Memory | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tmemory: memoryTable,\n\t\t\t\t\tembedding: embeddingTable[this.embeddingDimension],\n\t\t\t\t})\n\t\t\t\t.from(memoryTable)\n\t\t\t\t.leftJoin(embeddingTable, eq(memoryTable.id, embeddingTable.memoryId))\n\t\t\t\t.where(eq(memoryTable.id, id))\n\t\t\t\t.limit(1);\n\n\t\t\tif (result.length === 0) return null;\n\n\t\t\tconst row = result[0];\n\t\t\treturn {\n\t\t\t\tid: row.memory.id as UUID,\n\t\t\t\tcreatedAt: row.memory.createdAt,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof row.memory.content === \"string\"\n\t\t\t\t\t\t? JSON.parse(row.memory.content)\n\t\t\t\t\t\t: row.memory.content,\n\t\t\t\tentityId: row.memory.entityId as UUID,\n\t\t\t\tagentId: row.memory.agentId as UUID,\n\t\t\t\troomId: row.memory.roomId as UUID,\n\t\t\t\tunique: row.memory.unique,\n\t\t\t\tembedding: row.embedding ?? undefined,\n\t\t\t};\n\t\t});\n\t}\n\n\tasync getMemoriesByIds(\n\t\tmemoryIds: UUID[],\n\t\ttableName?: string,\n\t): Promise<Memory[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tif (memoryIds.length === 0) return [];\n\n\t\t\tconst conditions = [inArray(memoryTable.id, memoryIds)];\n\n\t\t\tif (tableName) {\n\t\t\t\tconditions.push(eq(memoryTable.type, tableName));\n\t\t\t}\n\n\t\t\tconst rows = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tmemory: memoryTable,\n\t\t\t\t\tembedding: embeddingTable[this.embeddingDimension],\n\t\t\t\t})\n\t\t\t\t.from(memoryTable)\n\t\t\t\t.leftJoin(embeddingTable, eq(embeddingTable.memoryId, memoryTable.id))\n\t\t\t\t.where(and(...conditions))\n\t\t\t\t.orderBy(desc(memoryTable.createdAt));\n\n\t\t\treturn rows.map((row) => ({\n\t\t\t\tid: row.memory.id as UUID,\n\t\t\t\tcreatedAt: row.memory.createdAt,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof row.memory.content === \"string\"\n\t\t\t\t\t\t? JSON.parse(row.memory.content)\n\t\t\t\t\t\t: row.memory.content,\n\t\t\t\tentityId: row.memory.entityId as UUID,\n\t\t\t\tagentId: row.memory.agentId as UUID,\n\t\t\t\troomId: row.memory.roomId as UUID,\n\t\t\t\tunique: row.memory.unique,\n\t\t\t\tembedding: row.embedding ?? undefined,\n\t\t\t}));\n\t\t});\n\t}\n\n\tasync getCachedEmbeddings(opts: {\n\t\tquery_table_name: string;\n\t\tquery_threshold: number;\n\t\tquery_input: string;\n\t\tquery_field_name: string;\n\t\tquery_field_sub_name: string;\n\t\tquery_match_count: number;\n\t}): Promise<{ embedding: number[]; levenshtein_score: number }[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tconst results = await this.db.execute<{\n\t\t\t\t\tembedding: number[];\n\t\t\t\t\tlevenshtein_score: number;\n\t\t\t\t}>(sql`\n WITH content_text AS (\n SELECT\n m.id,\n COALESCE(\n m.content->>${opts.query_field_sub_name},\n ''\n ) as content_text\n FROM memories m\n WHERE m.type = ${opts.query_table_name}\n AND m.content->>${opts.query_field_sub_name} IS NOT NULL\n ),\n embedded_text AS (\n SELECT \n ct.content_text,\n COALESCE(\n e.dim_384,\n e.dim_512,\n e.dim_768,\n e.dim_1024,\n e.dim_1536,\n e.dim_3072\n ) as embedding\n FROM content_text ct\n LEFT JOIN embeddings e ON e.memory_id = ct.id\n WHERE e.memory_id IS NOT NULL\n )\n SELECT\n embedding,\n levenshtein(${opts.query_input}, content_text) as levenshtein_score\n FROM embedded_text\n WHERE levenshtein(${opts.query_input}, content_text) <= ${opts.query_threshold}\n ORDER BY levenshtein_score\n LIMIT ${opts.query_match_count}\n `);\n\n\t\t\t\treturn results.rows\n\t\t\t\t\t.map((row) => ({\n\t\t\t\t\t\tembedding: Array.isArray(row.embedding)\n\t\t\t\t\t\t\t? row.embedding\n\t\t\t\t\t\t\t: typeof row.embedding === \"string\"\n\t\t\t\t\t\t\t\t? JSON.parse(row.embedding)\n\t\t\t\t\t\t\t\t: [],\n\t\t\t\t\t\tlevenshtein_score: Number(row.levenshtein_score),\n\t\t\t\t\t}))\n\t\t\t\t\t.filter((row) => Array.isArray(row.embedding));\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error in getCachedEmbeddings:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\ttableName: opts.query_table_name,\n\t\t\t\t\tfieldName: opts.query_field_name,\n\t\t\t\t});\n\t\t\t\tif (\n\t\t\t\t\terror instanceof Error &&\n\t\t\t\t\terror.message ===\n\t\t\t\t\t\t\"levenshtein argument exceeds maximum length of 255 characters\"\n\t\t\t\t) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync log(params: {\n\t\tbody: { [key: string]: unknown };\n\t\tentityId: UUID;\n\t\troomId: UUID;\n\t\ttype: string;\n\t}): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx.insert(logTable).values({\n\t\t\t\t\t\tbody: sql`${params.body}::jsonb`,\n\t\t\t\t\t\tentityId: params.entityId,\n\t\t\t\t\t\troomId: params.roomId,\n\t\t\t\t\t\ttype: params.type,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to create log entry:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\ttype: params.type,\n\t\t\t\t\troomId: params.roomId,\n\t\t\t\t\tentityId: params.entityId,\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync searchMemories(params: {\n\t\ttableName: string;\n\t\troomId: UUID;\n\t\tembedding: number[];\n\t\tmatch_threshold: number;\n\t\tcount: number;\n\t\tunique: boolean;\n\t}): Promise<Memory[]> {\n\t\treturn await this.searchMemoriesByEmbedding(params.embedding, {\n\t\t\tmatch_threshold: params.match_threshold,\n\t\t\tcount: params.count,\n\t\t\troomId: params.roomId,\n\t\t\tunique: params.unique,\n\t\t\ttableName: params.tableName,\n\t\t});\n\t}\n\n\tasync updateGoalStatus(params: {\n\t\tgoalId: UUID;\n\t\tstatus: GoalStatus;\n\t}): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.update(goalTable)\n\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\tstatus: params.status as string,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.where(eq(goalTable.id, params.goalId));\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to update goal status:\", {\n\t\t\t\t\tgoalId: params.goalId,\n\t\t\t\t\tstatus: params.status,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync searchMemoriesByEmbedding(\n\t\tembedding: number[],\n\t\tparams: {\n\t\t\tmatch_threshold?: number;\n\t\t\tcount?: number;\n\t\t\troomId?: UUID;\n\t\t\tunique?: boolean;\n\t\t\ttableName: string;\n\t\t},\n\t): Promise<Memory[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst cleanVector = embedding.map((n) =>\n\t\t\t\tNumber.isFinite(n) ? Number(n.toFixed(6)) : 0,\n\t\t\t);\n\n\t\t\tconst similarity = sql<number>`1 - (${cosineDistance(\n\t\t\t\tembeddingTable[this.embeddingDimension],\n\t\t\t\tcleanVector,\n\t\t\t)})`;\n\n\t\t\tconst conditions = [eq(memoryTable.type, params.tableName)];\n\n\t\t\tif (params.unique) {\n\t\t\t\tconditions.push(eq(memoryTable.unique, true));\n\t\t\t}\n\n\t\t\tconditions.push(eq(memoryTable.agentId, this.agentId));\n\n\t\t\tif (params.roomId) {\n\t\t\t\tconditions.push(eq(memoryTable.roomId, params.roomId));\n\t\t\t}\n\n\t\t\tif (params.match_threshold) {\n\t\t\t\tconditions.push(gte(similarity, params.match_threshold));\n\t\t\t}\n\n\t\t\tconst results = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tmemory: memoryTable,\n\t\t\t\t\tsimilarity,\n\t\t\t\t\tembedding: embeddingTable[this.embeddingDimension],\n\t\t\t\t})\n\t\t\t\t.from(embeddingTable)\n\t\t\t\t.innerJoin(memoryTable, eq(memoryTable.id, embeddingTable.memoryId))\n\t\t\t\t.where(and(...conditions))\n\t\t\t\t.orderBy(desc(similarity))\n\t\t\t\t.limit(params.count ?? 10);\n\n\t\t\treturn results.map((row) => ({\n\t\t\t\tid: row.memory.id as UUID,\n\t\t\t\ttype: row.memory.type,\n\t\t\t\tcreatedAt: row.memory.createdAt,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof row.memory.content === \"string\"\n\t\t\t\t\t\t? JSON.parse(row.memory.content)\n\t\t\t\t\t\t: row.memory.content,\n\t\t\t\tentityId: row.memory.entityId as UUID,\n\t\t\t\tagentId: row.memory.agentId as UUID,\n\t\t\t\troomId: row.memory.roomId as UUID,\n\t\t\t\tunique: row.memory.unique,\n\t\t\t\tembedding: row.embedding ?? undefined,\n\t\t\t\tsimilarity: row.similarity,\n\t\t\t}));\n\t\t});\n\t}\n\n\tasync createMemory(\n\t\tmemory: Memory & { metadata?: MemoryMetadata },\n\t\ttableName: string,\n\t): Promise<UUID> {\n\t\tlogger.debug(\"DrizzleAdapter createMemory:\", {\n\t\t\tmemoryId: memory.id,\n\t\t\tembeddingLength: memory.embedding?.length,\n\t\t\tcontentLength: memory.content?.text?.length,\n\t\t});\n\n\t\tlet isUnique = true;\n\t\tif (memory.embedding && Array.isArray(memory.embedding)) {\n\t\t\tconst similarMemories = await this.searchMemoriesByEmbedding(\n\t\t\t\tmemory.embedding,\n\t\t\t\t{\n\t\t\t\t\ttableName,\n\t\t\t\t\troomId: memory.roomId,\n\t\t\t\t\tmatch_threshold: 0.95,\n\t\t\t\t\tcount: 1,\n\t\t\t\t},\n\t\t\t);\n\t\t\tisUnique = similarMemories.length === 0;\n\t\t}\n\n\t\tconst contentToInsert =\n\t\t\ttypeof memory.content === \"string\"\n\t\t\t\t? JSON.parse(memory.content)\n\t\t\t\t: memory.content;\n\n\t\tconst memoryId = memory.id ?? (v4() as UUID);\n\n\t\tawait this.db.transaction(async (tx) => {\n\t\t\tawait tx.insert(memoryTable).values([\n\t\t\t\t{\n\t\t\t\t\tid: memoryId,\n\t\t\t\t\ttype: tableName,\n\t\t\t\t\tcontent: sql`${contentToInsert}::jsonb`,\n\t\t\t\t\tmetadata: sql`${memory.metadata || {}}::jsonb`,\n\t\t\t\t\tentityId: memory.entityId,\n\t\t\t\t\troomId: memory.roomId,\n\t\t\t\t\tagentId: memory.agentId,\n\t\t\t\t\tunique: memory.unique ?? isUnique,\n\t\t\t\t\tcreatedAt: memory.createdAt,\n\t\t\t\t},\n\t\t\t]);\n\n\t\t\tif (memory.embedding && Array.isArray(memory.embedding)) {\n\t\t\t\tconst embeddingValues: Record<string, unknown> = {\n\t\t\t\t\tid: v4(),\n\t\t\t\t\tmemoryId: memoryId,\n\t\t\t\t\tcreatedAt: memory.createdAt,\n\t\t\t\t};\n\n\t\t\t\tconst cleanVector = memory.embedding.map((n) =>\n\t\t\t\t\tNumber.isFinite(n) ? Number(n.toFixed(6)) : 0,\n\t\t\t\t);\n\n\t\t\t\tembeddingValues[this.embeddingDimension] = cleanVector;\n\n\t\t\t\tawait tx.insert(embeddingTable).values([embeddingValues]);\n\t\t\t}\n\t\t});\n\n\t\treturn memoryId;\n\t}\n\n\tasync removeMemory(memoryId: UUID, tableName: string): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\tawait tx\n\t\t\t\t\t.delete(embeddingTable)\n\t\t\t\t\t.where(eq(embeddingTable.memoryId, memoryId));\n\n\t\t\t\tawait tx\n\t\t\t\t\t.delete(memoryTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(eq(memoryTable.id, memoryId), eq(memoryTable.type, tableName)),\n\t\t\t\t\t);\n\t\t\t});\n\n\t\t\tlogger.debug(\"Memory removed successfully:\", {\n\t\t\t\tmemoryId,\n\t\t\t\ttableName,\n\t\t\t});\n\t\t});\n\t}\n\n\tasync removeAllMemories(roomId: UUID, tableName: string): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\tconst memoryIds = await tx\n\t\t\t\t\t.select({ id: memoryTable.id })\n\t\t\t\t\t.from(memoryTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(\n\t\t\t\t\t\t\teq(memoryTable.roomId, roomId),\n\t\t\t\t\t\t\teq(memoryTable.type, tableName),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\tif (memoryIds.length > 0) {\n\t\t\t\t\tawait tx.delete(embeddingTable).where(\n\t\t\t\t\t\tinArray(\n\t\t\t\t\t\t\tembeddingTable.memoryId,\n\t\t\t\t\t\t\tmemoryIds.map((m) => m.id),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.delete(memoryTable)\n\t\t\t\t\t\t.where(\n\t\t\t\t\t\t\tand(\n\t\t\t\t\t\t\t\teq(memoryTable.roomId, roomId),\n\t\t\t\t\t\t\t\teq(memoryTable.type, tableName),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlogger.debug(\"All memories removed successfully:\", {\n\t\t\t\troomId,\n\t\t\t\ttableName,\n\t\t\t});\n\t\t});\n\t}\n\n\tasync countMemories(\n\t\troomId: UUID,\n\t\tunique = true,\n\t\ttableName = \"\",\n\t): Promise<number> {\n\t\tif (!tableName) throw new Error(\"tableName is required\");\n\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst conditions = [\n\t\t\t\teq(memoryTable.roomId, roomId),\n\t\t\t\teq(memoryTable.type, tableName),\n\t\t\t];\n\n\t\t\tif (unique) {\n\t\t\t\tconditions.push(eq(memoryTable.unique, true));\n\t\t\t}\n\n\t\t\tconst result = await this.db\n\t\t\t\t.select({ count: sql<number>`count(*)` })\n\t\t\t\t.from(memoryTable)\n\t\t\t\t.where(and(...conditions));\n\n\t\t\treturn Number(result[0]?.count ?? 0);\n\t\t});\n\t}\n\n\tasync getGoals(params: {\n\t\troomId: UUID;\n\t\tentityId?: UUID | null;\n\t\tonlyInProgress?: boolean;\n\t\tcount?: number;\n\t}): Promise<Goal[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst conditions = [eq(goalTable.roomId, params.roomId)];\n\n\t\t\tif (params.entityId) {\n\t\t\t\tconditions.push(eq(goalTable.entityId, params.entityId));\n\t\t\t}\n\n\t\t\tif (params.onlyInProgress) {\n\t\t\t\tconditions.push(eq(goalTable.status, \"IN_PROGRESS\" as GoalStatus));\n\t\t\t}\n\n\t\t\tconst query = this.db\n\t\t\t\t.select()\n\t\t\t\t.from(goalTable)\n\t\t\t\t.where(and(...conditions))\n\t\t\t\t.orderBy(desc(goalTable.createdAt));\n\n\t\t\tconst result = await (params.count ? query.limit(params.count) : query);\n\n\t\t\treturn result.map((row) => ({\n\t\t\t\tid: row.id as UUID,\n\t\t\t\troomId: row.roomId as UUID,\n\t\t\t\tentityId: row.entityId as UUID,\n\t\t\t\tname: row.name ?? \"\",\n\t\t\t\tstatus: (row.status ?? \"NOT_STARTED\") as GoalStatus,\n\t\t\t\tdescription: row.description ?? \"\",\n\t\t\t\tobjectives: row.objectives as unknown[],\n\t\t\t\tcreatedAt: row.createdAt,\n\t\t\t}));\n\t\t});\n\t}\n\n\tasync updateGoal(goal: Goal): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.update(goalTable)\n\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\tname: goal.name,\n\t\t\t\t\t\t\tstatus: goal.status,\n\t\t\t\t\t\t\tobjectives: goal.objectives,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.where(eq(goalTable.id, goal.id as string));\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to update goal:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tgoalId: goal.id,\n\t\t\t\t\tstatus: goal.status,\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync createGoal(goal: Goal): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx.insert(goalTable).values({\n\t\t\t\t\t\tid: goal.id ?? v4(),\n\t\t\t\t\t\troomId: goal.roomId,\n\t\t\t\t\t\tentityId: goal.entityId,\n\t\t\t\t\t\tname: goal.name,\n\t\t\t\t\t\tstatus: goal.status,\n\t\t\t\t\t\tobjectives: sql`${goal.objectives}::jsonb`,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to update goal:\", {\n\t\t\t\t\tgoalId: goal.id,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tstatus: goal.status,\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync removeGoal(goalId: UUID): Promise<void> {\n\t\tif (!goalId) throw new Error(\"Goal ID is required\");\n\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx.delete(goalTable).where(eq(goalTable.id, goalId));\n\t\t\t\t});\n\n\t\t\t\tlogger.debug(\"Goal removal attempt:\", {\n\t\t\t\t\tgoalId,\n\t\t\t\t\tremoved: true,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to remove goal:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tgoalId,\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync removeAllGoals(roomId: UUID): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\tawait tx.delete(goalTable).where(eq(goalTable.roomId, roomId));\n\t\t\t});\n\t\t});\n\t}\n\n\tasync getRoom(roomId: UUID): Promise<Room | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tid: roomTable.id,\n\t\t\t\t\tchannelId: roomTable.channelId,\n\t\t\t\t\tagentId: roomTable.agentId,\n\t\t\t\t\tserverId: roomTable.serverId,\n\t\t\t\t\tworldId: roomTable.worldId,\n\t\t\t\t\ttype: roomTable.type,\n\t\t\t\t\tsource: roomTable.source,\n\t\t\t\t})\n\t\t\t\t.from(roomTable)\n\t\t\t\t.where(\n\t\t\t\t\tand(eq(roomTable.id, roomId), eq(roomTable.agentId, this.agentId)),\n\t\t\t\t)\n\t\t\t\t.limit(1);\n\t\t\tif (result.length === 0) return null;\n\t\t\treturn result[0];\n\t\t});\n\t}\n\n\tasync getRooms(worldId: UUID): Promise<Room[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select()\n\t\t\t\t.from(roomTable)\n\t\t\t\t.where(eq(roomTable.worldId, worldId));\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tasync updateRoom(room: Room): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db\n\t\t\t\t.update(roomTable)\n\t\t\t\t.set({ ...room, agentId: this.agentId })\n\t\t\t\t.where(eq(roomTable.id, room.id));\n\t\t});\n\t}\n\n\tasync createRoom({\n\t\tid,\n\t\tname,\n\t\tsource,\n\t\ttype,\n\t\tchannelId,\n\t\tserverId,\n\t\tworldId,\n\t}: Room): Promise<UUID> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst newRoomId = id || v4();\n\t\t\tawait this.db\n\t\t\t\t.insert(roomTable)\n\t\t\t\t.values({\n\t\t\t\t\tid: newRoomId,\n\t\t\t\t\tname,\n\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t\tsource,\n\t\t\t\t\ttype,\n\t\t\t\t\tchannelId,\n\t\t\t\t\tserverId,\n\t\t\t\t\tworldId,\n\t\t\t\t})\n\t\t\t\t.onConflictDoNothing({ target: roomTable.id });\n\t\t\treturn newRoomId as UUID;\n\t\t});\n\t}\n\n\tasync deleteRoom(roomId: UUID): Promise<void> {\n\t\tif (!roomId) throw new Error(\"Room ID is required\");\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\tawait tx.delete(roomTable).where(eq(roomTable.id, roomId));\n\t\t\t});\n\t\t});\n\t}\n\n\tasync getRoomsForParticipant(entityId: UUID): Promise<UUID[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({ roomId: participantTable.roomId })\n\t\t\t\t.from(participantTable)\n\t\t\t\t.innerJoin(roomTable, eq(participantTable.roomId, roomTable.id))\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(participantTable.entityId, entityId),\n\t\t\t\t\t\teq(roomTable.agentId, this.agentId),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\treturn result.map((row) => row.roomId as UUID);\n\t\t});\n\t}\n\n\tasync getRoomsForParticipants(entityIds: UUID[]): Promise<UUID[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.selectDistinct({ roomId: participantTable.roomId })\n\t\t\t\t.from(participantTable)\n\t\t\t\t.innerJoin(roomTable, eq(participantTable.roomId, roomTable.id))\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\tinArray(participantTable.entityId, entityIds),\n\t\t\t\t\t\teq(roomTable.agentId, this.agentId),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\treturn result.map((row) => row.roomId as UUID);\n\t\t});\n\t}\n\n\tasync addParticipant(entityId: UUID, roomId: UUID): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db\n\t\t\t\t\t.insert(participantTable)\n\t\t\t\t\t.values({\n\t\t\t\t\t\tentityId,\n\t\t\t\t\t\troomId,\n\t\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t\t})\n\t\t\t\t\t.onConflictDoNothing();\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error adding participant\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tentityId,\n\t\t\t\t\troomId,\n\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync removeParticipant(entityId: UUID, roomId: UUID): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await this.db.transaction(async (tx) => {\n\t\t\t\t\treturn await tx\n\t\t\t\t\t\t.delete(participantTable)\n\t\t\t\t\t\t.where(\n\t\t\t\t\t\t\tand(\n\t\t\t\t\t\t\t\teq(participantTable.entityId, entityId),\n\t\t\t\t\t\t\t\teq(participantTable.roomId, roomId),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.returning();\n\t\t\t\t});\n\n\t\t\t\tconst removed = result.length > 0;\n\t\t\t\tlogger.debug(`Participant ${removed ? \"removed\" : \"not found\"}:`, {\n\t\t\t\t\tentityId,\n\t\t\t\t\troomId,\n\t\t\t\t\tremoved,\n\t\t\t\t});\n\n\t\t\t\treturn removed;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to remove participant:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tentityId,\n\t\t\t\t\troomId,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync getParticipantsForEntity(entityId: UUID): Promise<Participant[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tid: participantTable.id,\n\t\t\t\t\tentityId: participantTable.entityId,\n\t\t\t\t\troomId: participantTable.roomId,\n\t\t\t\t})\n\t\t\t\t.from(participantTable)\n\t\t\t\t.where(eq(participantTable.entityId, entityId));\n\n\t\t\tconst entity = await this.getEntityById(entityId);\n\n\t\t\tif (!entity) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn result.map((row) => ({\n\t\t\t\tid: row.id as UUID,\n\t\t\t\tentity: entity,\n\t\t\t}));\n\t\t});\n\t}\n\n\tasync getParticipantsForRoom(roomId: UUID): Promise<UUID[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({ entityId: participantTable.entityId })\n\t\t\t\t.from(participantTable)\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(participantTable.roomId, roomId),\n\t\t\t\t\t\teq(participantTable.agentId, this.agentId),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\treturn result.map((row) => row.entityId as UUID);\n\t\t});\n\t}\n\n\tasync getParticipantUserState(\n\t\troomId: UUID,\n\t\tentityId: UUID,\n\t): Promise<\"FOLLOWED\" | \"MUTED\" | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({ roomState: participantTable.roomState })\n\t\t\t\t.from(participantTable)\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(participantTable.roomId, roomId),\n\t\t\t\t\t\teq(participantTable.entityId, entityId),\n\t\t\t\t\t\teq(participantTable.agentId, this.agentId),\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.limit(1);\n\n\t\t\treturn (result[0]?.roomState as \"FOLLOWED\" | \"MUTED\" | null) ?? null;\n\t\t});\n\t}\n\n\tasync setParticipantUserState(\n\t\troomId: UUID,\n\t\tentityId: UUID,\n\t\tstate: \"FOLLOWED\" | \"MUTED\" | null,\n\t): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.update(participantTable)\n\t\t\t\t\t\t.set({ roomState: state })\n\t\t\t\t\t\t.where(\n\t\t\t\t\t\t\tand(\n\t\t\t\t\t\t\t\teq(participantTable.roomId, roomId),\n\t\t\t\t\t\t\t\teq(participantTable.entityId, entityId),\n\t\t\t\t\t\t\t\teq(participantTable.agentId, this.agentId),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to set participant user state:\", {\n\t\t\t\t\troomId,\n\t\t\t\t\tentityId,\n\t\t\t\t\tstate,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync createRelationship(params: {\n\t\tsourceEntityId: UUID;\n\t\ttargetEntityId: UUID;\n\t\ttags?: string[];\n\t\tmetadata?: { [key: string]: unknown };\n\t}): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst id = v4();\n\t\t\tconst saveParams = {\n\t\t\t\tid,\n\t\t\t\tsourceEntityId: params.sourceEntityId,\n\t\t\t\ttargetEntityId: params.targetEntityId,\n\t\t\t\tagentId: this.agentId,\n\t\t\t\ttags: params.tags || [],\n\t\t\t\tmetadata: params.metadata || {},\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tawait this.db.insert(relationshipTable).values(saveParams);\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error creating relationship:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tsaveParams,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync updateRelationship(relationship: Relationship): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db\n\t\t\t\t\t.update(relationshipTable)\n\t\t\t\t\t.set({\n\t\t\t\t\t\ttags: relationship.tags || [],\n\t\t\t\t\t\tmetadata: relationship.metadata || {},\n\t\t\t\t\t})\n\t\t\t\t\t.where(eq(relationshipTable.id, relationship.id));\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error updating relationship:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\trelationship,\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync getRelationship(params: {\n\t\tsourceEntityId: UUID;\n\t\ttargetEntityId: UUID;\n\t}): Promise<Relationship | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.select()\n\t\t\t\t\t.from(relationshipTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(\n\t\t\t\t\t\t\teq(relationshipTable.sourceEntityId, params.sourceEntityId),\n\t\t\t\t\t\t\teq(relationshipTable.targetEntityId, params.targetEntityId),\n\t\t\t\t\t\t\teq(relationshipTable.agentId, this.agentId),\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\t.limit(1);\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tid: result[0].id,\n\t\t\t\t\tsourceEntityId: result[0].sourceEntityId,\n\t\t\t\t\ttargetEntityId: result[0].targetEntityId,\n\t\t\t\t\tagentId: result[0].agentId,\n\t\t\t\t\ttags: result[0].tags || [],\n\t\t\t\t\tmetadata: result[0].metadata || {},\n\t\t\t\t\tcreatedAt: result[0].createdAt?.toString(),\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error getting relationship:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tparams,\n\t\t\t\t});\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync getRelationships(params: {\n\t\tentityId: UUID;\n\t\ttags?: string[];\n\t}): Promise<Relationship[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tlet query = this.db\n\t\t\t\t\t.select()\n\t\t\t\t\t.from(relationshipTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(\n\t\t\t\t\t\t\tor(\n\t\t\t\t\t\t\t\teq(relationshipTable.sourceEntityId, params.entityId),\n\t\t\t\t\t\t\t\teq(relationshipTable.targetEntityId, params.entityId),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\teq(relationshipTable.agentId, this.agentId),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t// Filter by tags if provided\n\t\t\t\tif (params.tags && params.tags.length > 0) {\n\t\t\t\t\t// Filter by tags - find tasks that have ALL of the specified tags\n\t\t\t\t\t// Using @> operator which checks if left array contains all elements from right array\n\t\t\t\t\tconst tagParams = params.tags\n\t\t\t\t\t\t.map((tag) => `'${tag.replace(/'/g, \"''\")}'`)\n\t\t\t\t\t\t.join(\", \");\n\t\t\t\t\tquery = query.where(\n\t\t\t\t\t\tsql`${relationshipTable.tags} @> ARRAY[${sql.raw(\n\t\t\t\t\t\t\ttagParams,\n\t\t\t\t\t\t)}]::text[]`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst results = await query;\n\n\t\t\t\treturn results.map((result) => ({\n\t\t\t\t\tid: result.id,\n\t\t\t\t\tsourceEntityId: result.sourceEntityId,\n\t\t\t\t\ttargetEntityId: result.targetEntityId,\n\t\t\t\t\tagentId: result.agentId,\n\t\t\t\t\ttags: result.tags || [],\n\t\t\t\t\tmetadata: result.metadata || {},\n\t\t\t\t\tcreatedAt: result.createdAt?.toString(),\n\t\t\t\t}));\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error getting relationships:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tparams,\n\t\t\t\t});\n\t\t\t\treturn [];\n\t\t\t}\n\t\t});\n\t}\n\n\tasync getCache<T>(key: string): Promise<T | undefined> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.select()\n\t\t\t\t\t.from(cacheTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(eq(cacheTable.agentId, this.agentId), eq(cacheTable.key, key)),\n\t\t\t\t\t);\n\n\t\t\t\treturn result[0]?.value as T | undefined;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error fetching cache\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tkey: key,\n\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t});\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync setCache<T>(key: string, value: T): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.insert(cacheTable)\n\t\t\t\t\t\t.values({\n\t\t\t\t\t\t\tkey: key,\n\t\t\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.onConflictDoUpdate({\n\t\t\t\t\t\t\ttarget: [cacheTable.key, cacheTable.agentId],\n\t\t\t\t\t\t\tset: {\n\t\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error setting cache\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tkey: key,\n\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync deleteCache(key: string): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.delete(cacheTable)\n\t\t\t\t\t\t.where(\n\t\t\t\t\t\t\tand(\n\t\t\t\t\t\t\t\teq(cacheTable.agentId, this.agentId),\n\t\t\t\t\t\t\t\teq(cacheTable.key, key),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error deleting cache\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tkey: key,\n\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync createWorld(world: World): Promise<UUID> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst newWorldId = world.id || v4();\n\t\t\tawait this.db.insert(worldTable).values({\n\t\t\t\t...world,\n\t\t\t\tid: newWorldId,\n\t\t\t});\n\t\t\treturn newWorldId;\n\t\t});\n\t}\n\n\tasync getWorld(id: UUID): Promise<World | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select()\n\t\t\t\t.from(worldTable)\n\t\t\t\t.where(eq(worldTable.id, id));\n\t\t\treturn result[0] as World | null;\n\t\t});\n\t}\n\n\tasync getAllWorlds(): Promise<World[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select()\n\t\t\t\t.from(worldTable)\n\t\t\t\t.where(eq(worldTable.agentId, this.agentId));\n\t\t\treturn result as World[];\n\t\t});\n\t}\n\n\tasync updateWorld(world: World): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db\n\t\t\t\t.update(worldTable)\n\t\t\t\t.set(world)\n\t\t\t\t.where(eq(worldTable.id, world.id));\n\t\t});\n\t}\n\n\tasync removeWorld(id: UUID): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.delete(worldTable).where(eq(worldTable.id, id));\n\t\t});\n\t}\n\n\t/**\n\t * Creates a new task in the database.\n\t * @param task The task object to create\n\t * @returns Promise resolving to the UUID of the created task\n\t */\n\tasync createTask(task: Task): Promise<UUID> {\n\t\treturn this.withRetry(async () => {\n\t\t\treturn this.withDatabase(async () => {\n\t\t\t\tconst now = new Date();\n\t\t\t\tconst metadata = task.metadata || {};\n\n\t\t\t\tconst values = {\n\t\t\t\t\tid: task.id as UUID,\n\t\t\t\t\tname: task.name,\n\t\t\t\t\tdescription: task.description,\n\t\t\t\t\troomId: task.roomId,\n\t\t\t\t\tworldId: task.worldId,\n\t\t\t\t\ttags: task.tags,\n\t\t\t\t\tmetadata: metadata,\n\t\t\t\t\tcreatedAt: now,\n\t\t\t\t\tupdatedAt: now,\n\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t};\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.insert(taskTable)\n\t\t\t\t\t.values(values)\n\t\t\t\t\t.returning({ id: taskTable.id });\n\n\t\t\t\treturn result[0].id;\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves tasks based on specified parameters.\n\t * @param params Object containing optional roomId and tags to filter tasks\n\t * @returns Promise resolving to an array of Task objects\n\t */\n\tasync getTasks(params: { roomId?: UUID; tags?: string[] }): Promise<Task[]> {\n\t\treturn this.withRetry(async () => {\n\t\t\treturn this.withDatabase(async () => {\n\t\t\t\tlet query = this.db\n\t\t\t\t\t.select()\n\t\t\t\t\t.from(taskTable)\n\t\t\t\t\t.where(eq(taskTable.agentId, this.agentId));\n\n\t\t\t\t// Apply filters if provided\n\t\t\t\tif (params.roomId) {\n\t\t\t\t\tquery = query.where(eq(taskTable.roomId, params.roomId));\n\t\t\t\t}\n\n\t\t\t\tif (params.tags && params.tags.length > 0) {\n\t\t\t\t\t// Filter by tags - find tasks that have ALL of the specified tags\n\t\t\t\t\t// Using @> operator which checks if left array contains all elements from right array\n\t\t\t\t\tconst tagParams = params.tags\n\t\t\t\t\t\t.map((tag) => `'${tag.replace(/'/g, \"''\")}'`)\n\t\t\t\t\t\t.join(\", \");\n\t\t\t\t\tquery = query.where(\n\t\t\t\t\t\tsql`${taskTable.tags} @> ARRAY[${sql.raw(tagParams)}]::text[]`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst result = await query;\n\n\t\t\t\treturn result.map((row) => ({\n\t\t\t\t\tid: row.id,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tdescription: row.description,\n\t\t\t\t\troomId: row.roomId,\n\t\t\t\t\tworldId: row.worldId,\n\t\t\t\t\ttags: row.tags,\n\t\t\t\t\tmetadata: row.metadata,\n\t\t\t\t}));\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves a specific task by its name.\n\t * @param name The name of the task to retrieve\n\t * @returns Promise resolving to the Task object if found, null otherwise\n\t */\n\tasync getTasksByName(name: string): Promise<Task[]> {\n\t\treturn this.withRetry(async () => {\n\t\t\treturn this.withDatabase(async () => {\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.select()\n\t\t\t\t\t.from(taskTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(eq(taskTable.name, name), eq(taskTable.agentId, this.agentId)),\n\t\t\t\t\t);\n\n\t\t\t\treturn result.map((row) => ({\n\t\t\t\t\tid: row.id,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tdescription: row.description,\n\t\t\t\t\troomId: row.roomId,\n\t\t\t\t\tworldId: row.worldId,\n\t\t\t\t\ttags: row.tags || [],\n\t\t\t\t\tmetadata: row.metadata || {},\n\t\t\t\t}));\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves a specific task by its ID.\n\t * @param id The UUID of the task to retrieve\n\t * @returns Promise resolving to the Task object if found, null otherwise\n\t */\n\tasync getTask(id: UUID): Promise<Task | null> {\n\t\treturn this.withRetry(async () => {\n\t\t\treturn this.withDatabase(async () => {\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.select()\n\t\t\t\t\t.from(taskTable)\n\t\t\t\t\t.where(and(eq(taskTable.id, id), eq(taskTable.agentId, this.agentId)))\n\t\t\t\t\t.limit(1);\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst row = result[0];\n\t\t\t\treturn {\n\t\t\t\t\tid: row.id,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tdescription: row.description,\n\t\t\t\t\troomId: row.roomId,\n\t\t\t\t\tworldId: row.worldId,\n\t\t\t\t\ttags: row.tags || [],\n\t\t\t\t\tmetadata: row.metadata || {},\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Updates an existing task in the database.\n\t * @param id The UUID of the task to update\n\t * @param task Partial Task object containing the fields to update\n\t * @returns Promise resolving when the update is complete\n\t */\n\tasync updateTask(id: UUID, task: Partial<Task>): Promise<void> {\n\t\tawait this.withRetry(async () => {\n\t\t\tawait this.withDatabase(async () => {\n\t\t\t\tconst updateValues: Partial<Task> = {};\n\n\t\t\t\t// Add fields to update if they exist in the partial task object\n\t\t\t\tif (task.name !== undefined) updateValues.name = task.name;\n\t\t\t\tif (task.description !== undefined)\n\t\t\t\t\tupdateValues.description = task.description;\n\t\t\t\tif (task.roomId !== undefined) updateValues.roomId = task.roomId;\n\t\t\t\tif (task.worldId !== undefined) updateValues.worldId = task.worldId;\n\t\t\t\tif (task.tags !== undefined) updateValues.tags = task.tags;\n\n\t\t\t\ttask.updatedAt = Date.now();\n\n\t\t\t\t// Handle metadata updates\n\t\t\t\tif (task.metadata) {\n\t\t\t\t\t// Get current task to merge metadata\n\t\t\t\t\tconst currentTask = await this.getTask(id);\n\t\t\t\t\tif (currentTask) {\n\t\t\t\t\t\tconst currentMetadata = currentTask.metadata || {};\n\t\t\t\t\t\tconst newMetadata = {\n\t\t\t\t\t\t\t...currentMetadata,\n\t\t\t\t\t\t\t...task.metadata,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tupdateValues.metadata = newMetadata;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tupdateValues.metadata = {\n\t\t\t\t\t\t\t...task.metadata,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tawait this.db\n\t\t\t\t\t.update(taskTable)\n\t\t\t\t\t.set(updateValues)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(eq(taskTable.id, id), eq(taskTable.agentId, this.agentId)),\n\t\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Deletes a task from the database.\n\t * @param id The UUID of the task to delete\n\t * @returns Promise resolving when the deletion is complete\n\t */\n\tasync deleteTask(id: UUID): Promise<void> {\n\t\tawait this.withRetry(async () => {\n\t\t\tawait this.withDatabase(async () => {\n\t\t\t\tawait this.db\n\t\t\t\t\t.delete(taskTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(eq(taskTable.id, id), eq(taskTable.agentId, this.agentId)),\n\t\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n}\n","import { sql } from \"drizzle-orm\";\nimport {\n\tcheck,\n\tforeignKey,\n\tindex,\n\tpgTable,\n\tuuid,\n\tvector,\n} from \"drizzle-orm/pg-core\";\nimport { memoryTable } from \"./memory\";\nimport { numberTimestamp } from \"./types\";\n\nexport const VECTOR_DIMS = {\n\tSMALL: 384,\n\tMEDIUM: 512,\n\tLARGE: 768,\n\tXL: 1024,\n\tXXL: 1536,\n\tXXXL: 3072,\n} as const;\n\nexport const DIMENSION_MAP = {\n\t[VECTOR_DIMS.SMALL]: \"dim384\",\n\t[VECTOR_DIMS.MEDIUM]: \"dim512\",\n\t[VECTOR_DIMS.LARGE]: \"dim768\",\n\t[VECTOR_DIMS.XL]: \"dim1024\",\n\t[VECTOR_DIMS.XXL]: \"dim1536\",\n\t[VECTOR_DIMS.XXXL]: \"dim3072\",\n} as const;\n\n/**\n * Definition of the embeddings table in the database.\n * Contains columns for ID, Memory ID, Creation Timestamp, and multiple vector dimensions.\n */\nexport const embeddingTable = pgTable(\n\t\"embeddings\",\n\t{\n\t\tid: uuid(\"id\").primaryKey().defaultRandom().notNull(),\n\t\tmemoryId: uuid(\"memory_id\").references(() => memoryTable.id),\n\t\tcreatedAt: numberTimestamp(\"created_at\").default(sql`now()`).notNull(),\n\t\tdim384: vector(\"dim_384\", { dimensions: VECTOR_DIMS.SMALL }),\n\t\tdim512: vector(\"dim_512\", { dimensions: VECTOR_DIMS.MEDIUM }),\n\t\tdim768: vector(\"dim_768\", { dimensions: VECTOR_DIMS.LARGE }),\n\t\tdim1024: vector(\"dim_1024\", { dimensions: VECTOR_DIMS.XL }),\n\t\tdim1536: vector(\"dim_1536\", { dimensions: VECTOR_DIMS.XXL }),\n\t\tdim3072: vector(\"dim_3072\", { dimensions: VECTOR_DIMS.XXXL }),\n\t},\n\t(table) => [\n\t\tcheck(\"embedding_source_check\", sql`\"memory_id\" IS NOT NULL`),\n\t\tindex(\"idx_embedding_memory\").on(table.memoryId),\n\t\tforeignKey({\n\t\t\tname: \"fk_embedding_memory\",\n\t\t\tcolumns: [table.memoryId],\n\t\t\tforeignColumns: [memoryTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t],\n);\n\n/**\n * Defines the possible values for the Embedding Dimension Column.\n * It can be \"dim384\", \"dim512\", \"dim768\", \"dim1024\", \"dim1536\", or \"dim3072\".\n */\nexport type EmbeddingDimensionColumn =\n\t| \"dim384\"\n\t| \"dim512\"\n\t| \"dim768\"\n\t| \"dim1024\"\n\t| \"dim1536\"\n\t| \"dim3072\";\n\n/**\n * Retrieve the type of a specific column in the EmbeddingTable based on the EmbeddingDimensionColumn key.\n */\nexport type EmbeddingTableColumn =\n\t(typeof embeddingTable._.columns)[EmbeddingDimensionColumn];\n","import { relations, sql } from \"drizzle-orm\";\nimport {\n\tboolean,\n\tcheck,\n\tforeignKey,\n\tindex,\n\tjsonb,\n\tpgTable,\n\ttext,\n\tunique,\n\tuuid,\n\tvector,\n} from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { embeddingTable } from \"./embedding\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Definition of the memory table in the database.\n *\n * @param {string} tableName - The name of the table.\n * @param {object} columns - An object containing the column definitions.\n * @param {function} indexes - A function that defines the indexes for the table.\n * @returns {object} - The memory table object.\n */\nexport const memoryTable = pgTable(\n\t\"memories\",\n\t{\n\t\tid: uuid(\"id\").primaryKey().notNull(),\n\t\ttype: text(\"type\").notNull(),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\tcontent: jsonb(\"content\").notNull(),\n\t\tentityId: uuid(\"entityId\").references(() => entityTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\tagentId: uuid(\"agentId\").references(() => agentTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\troomId: uuid(\"roomId\").references(() => roomTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\tunique: boolean(\"unique\").default(true).notNull(),\n\t\tmetadata: jsonb(\"metadata\").default({}).notNull(),\n\t},\n\t(table) => [\n\t\tindex(\"idx_memories_type_room\").on(table.type, table.roomId),\n\t\tforeignKey({\n\t\t\tname: \"fk_room\",\n\t\t\tcolumns: [table.roomId],\n\t\t\tforeignColumns: [roomTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tname: \"fk_user\",\n\t\t\tcolumns: [table.entityId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tname: \"fk_agent\",\n\t\t\tcolumns: [table.agentId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tindex(\"idx_memories_metadata_type\").on(sql`((metadata->>'type'))`),\n\t\tindex(\"idx_memories_document_id\").on(sql`((metadata->>'documentId'))`),\n\t\tindex(\"idx_fragments_order\").on(\n\t\t\tsql`((metadata->>'documentId'))`,\n\t\t\tsql`((metadata->>'position'))`,\n\t\t),\n\t\tcheck(\n\t\t\t\"fragment_metadata_check\",\n\t\t\tsql`\n CASE \n WHEN metadata->>'type' = 'fragment' THEN\n metadata ? 'documentId' AND \n metadata ? 'position'\n ELSE true\n END\n `,\n\t\t),\n\t\tcheck(\n\t\t\t\"document_metadata_check\",\n\t\t\tsql`\n CASE \n WHEN metadata->>'type' = 'document' THEN\n metadata ? 'timestamp'\n ELSE true\n END\n `,\n\t\t),\n\t],\n);\n\nexport const memoryRelations = relations(memoryTable, ({ one }) => ({\n\tembedding: one(embeddingTable),\n}));\n","import type { MessageExample } from \"@elizaos/core\";\nimport { sql } from \"drizzle-orm\";\nimport {\n\tboolean,\n\tjsonb,\n\tpgTable,\n\ttext,\n\tunique,\n\tuuid,\n} from \"drizzle-orm/pg-core\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Represents a table for storing agent data.\n *\n * @type {Table}\n */\nexport const agentTable = pgTable(\n\t\"agents\",\n\t{\n\t\tid: uuid(\"id\").primaryKey().defaultRandom(),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\n\t\tupdatedAt: numberTimestamp(\"updatedAt\").default(sql`now()`).notNull(),\n\n\t\tenabled: boolean(\"enabled\").default(true).notNull(),\n\n\t\t// Character\n\t\tname: text(\"name\"),\n\t\tusername: text(\"username\"),\n\t\tsystem: text(\"system\"),\n\t\tbio: jsonb(\"bio\").$type<string | string[]>().notNull(),\n\t\tmessageExamples: jsonb(\"message_examples\")\n\t\t\t.$type<MessageExample[][]>()\n\t\t\t.default(sql`'[]'::jsonb`),\n\t\tpostExamples: jsonb(\"post_examples\")\n\t\t\t.$type<string[]>()\n\t\t\t.default(sql`'[]'::jsonb`),\n\t\ttopics: jsonb(\"topics\").$type<string[]>().default(sql`'[]'::jsonb`),\n\t\tadjectives: jsonb(\"adjectives\").$type<string[]>().default(sql`'[]'::jsonb`),\n\t\tknowledge: jsonb(\"knowledge\")\n\t\t\t.$type<(string | { path: string; shared?: boolean })[]>()\n\t\t\t.default(sql`'[]'::jsonb`),\n\t\tplugins: jsonb(\"plugins\").$type<string[]>().default(sql`'[]'::jsonb`),\n\t\tsettings: jsonb(\"settings\")\n\t\t\t.$type<{\n\t\t\t\tsecrets?: { [key: string]: string | boolean | number };\n\t\t\t\t[key: string]: unknown;\n\t\t\t}>()\n\t\t\t.default(sql`'{}'::jsonb`),\n\t\tstyle: jsonb(\"style\")\n\t\t\t.$type<{\n\t\t\t\tall?: string[];\n\t\t\t\tchat?: string[];\n\t\t\t\tpost?: string[];\n\t\t\t}>()\n\t\t\t.default(sql`'{}'::jsonb`),\n\t},\n\t(table) => {\n\t\treturn {\n\t\t\tnameUnique: unique(\"name_unique\").on(table.name),\n\t\t};\n\t},\n);\n","import { customType } from \"drizzle-orm/pg-core\";\n\nexport const stringJsonb = customType<{ data: string; driverData: string }>({\n\tdataType() {\n\t\treturn \"jsonb\";\n\t},\n\ttoDriver(value: string): string {\n\t\treturn JSON.stringify(value);\n\t},\n\tfromDriver(value: string): string {\n\t\treturn JSON.stringify(value);\n\t},\n});\n\n/**\n * Represents a custom type for converting a number to a timestamp string and vice versa.\n * @param {Object} options - The options for the custom type.\n * @param {Function} options.dataType - A function that returns the data type as \"timestamptz\".\n * @param {Function} options.toDriver - A function that converts a number to a timestamp string using the Date object's toISOString method.\n * @param {Function} options.fromDriver - A function that converts a timestamp string to a number using the Date object's getTime method.\n * @returns {Object} - The custom type for number to timestamp conversion.\n */\nexport const numberTimestamp = customType<{ data: number; driverData: string }>(\n\t{\n\t\tdataType() {\n\t\t\treturn \"timestamptz\";\n\t\t},\n\t\ttoDriver(value: number): string {\n\t\t\treturn new Date(value).toISOString();\n\t\t},\n\t\tfromDriver(value: string): number {\n\t\t\treturn new Date(value).getTime();\n\t\t},\n\t},\n);\n","import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, unique, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Represents an entity table in the database.\n * Includes columns for id, agentId, createdAt, names, and metadata.\n */\nexport const entityTable = pgTable(\n\t\"entities\",\n\t{\n\t\tid: uuid(\"id\").notNull().primaryKey(),\n\t\tagentId: uuid(\"agentId\")\n\t\t\t.notNull()\n\t\t\t.references(() => agentTable.id, {\n\t\t\t\tonDelete: \"cascade\",\n\t\t\t}),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\tnames: text(\"names\").array().default(sql`'{}'::text[]`),\n\t\tmetadata: jsonb(\"metadata\").default(sql`'{}'::jsonb`),\n\t},\n\t(table) => {\n\t\treturn {\n\t\t\tidAgentIdUnique: unique(\"id_agent_id_unique\").on(table.id, table.agentId),\n\t\t};\n\t},\n);\n","import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { numberTimestamp } from \"./types\";\nimport { worldTable } from \"./worldTable\";\n\n/**\n * Defines a table schema for 'rooms' in the database.\n *\n * @typedef {object} RoomTable\n * @property {string} id - The unique identifier for the room.\n * @property {string} agentId - The UUID of the agent associated with the room.\n * @property {string} source - The source of the room.\n * @property {string} type - The type of the room.\n * @property {string} serverId - The server ID of the room.\n * @property {string} worldId - The UUID of the world associated with the room.\n * @property {string} name - The name of the room.\n * @property {object} metadata - Additional metadata for the room in JSON format.\n * @property {string} channelId - The channel ID of the room.\n * @property {number} createdAt - The timestamp of when the room was created.\n */\nexport const roomTable = pgTable(\"rooms\", {\n\tid: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n\tagentId: uuid(\"agentId\").references(() => agentTable.id, {\n\t\tonDelete: \"cascade\",\n\t}),\n\tsource: text(\"source\").notNull(),\n\ttype: text(\"type\").notNull(),\n\tserverId: text(\"serverId\"),\n\tworldId: uuid(\"worldId\").references(() => worldTable.id, {\n\t\tonDelete: \"cascade\",\n\t}),\n\tname: text(\"name\"),\n\tmetadata: jsonb(\"metadata\"),\n\tchannelId: text(\"channelId\"),\n\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n});\n","import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { numberTimestamp } from \"./types\";\n\nexport const worldTable = pgTable(\"worlds\", {\n\tid: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n\tagentId: uuid(\"agentId\")\n\t\t.notNull()\n\t\t.references(() => agentTable.id, { onDelete: \"cascade\" }),\n\tname: text(\"name\").notNull(),\n\tmetadata: jsonb(\"metadata\"),\n\tserverId: text(\"serverId\").notNull(),\n\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n});\n","import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, unique, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Represents a PostgreSQL table for caching data.\n *\n * @type {pgTable}\n */\nexport const cacheTable = pgTable(\n\t\"cache\",\n\t{\n\t\tid: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n\t\tkey: text(\"key\").notNull(),\n\t\tagentId: uuid(\"agentId\")\n\t\t\t.notNull()\n\t\t\t.references(() => agentTable.id, { onDelete: \"cascade\" }),\n\t\tvalue: jsonb(\"value\").notNull(),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\texpiresAt: numberTimestamp(\"expiresAt\"),\n\t},\n\t(table) => [unique(\"cache_key_agent_unique\").on(table.key, table.agentId)],\n);\n","import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { numberTimestamp } from \"./types\";\nimport { worldTable } from \"./worldTable\";\n\n/**\n * Definition of a table representing components in the database.\n *\n * @type {Table}\n */\nexport const componentTable = pgTable(\"components\", {\n\tid: uuid(\"id\").primaryKey().defaultRandom(),\n\tentityId: uuid(\"entityId\")\n\t\t.notNull()\n\t\t.references(() => entityTable.id, { onDelete: \"cascade\" }),\n\tagentId: uuid(\"agentId\")\n\t\t.notNull()\n\t\t.references(() => agentTable.id, { onDelete: \"cascade\" }),\n\troomId: uuid(\"roomId\")\n\t\t.notNull()\n\t\t.references(() => roomTable.id, { onDelete: \"cascade\" }),\n\tworldId: uuid(\"worldId\").references(() => worldTable.id, {\n\t\tonDelete: \"cascade\",\n\t}),\n\tsourceEntityId: uuid(\"sourceEntityId\").references(() => entityTable.id, {\n\t\tonDelete: \"cascade\",\n\t}),\n\ttype: text(\"type\").notNull(),\n\tdata: jsonb(\"data\").default(sql`'{}'::jsonb`),\n\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n});\n","import { sql } from \"drizzle-orm\";\nimport { foreignKey, jsonb, pgTable, text, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Represents a table in the database for storing goals.\n *\n * @type {Table}\n */\nexport const goalTable = pgTable(\n\t\"goals\",\n\t{\n\t\tid: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\tentityId: uuid(\"entityId\").references(() => entityTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\tagentId: uuid(\"agentId\").references(() => agentTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\tname: text(\"name\"),\n\t\tstatus: text(\"status\"),\n\t\tdescription: text(\"description\"),\n\t\troomId: uuid(\"roomId\").references(() => roomTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\tobjectives: jsonb(\"objectives\").default(\"[]\").notNull(),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tname: \"fk_room\",\n\t\t\tcolumns: [table.roomId],\n\t\t\tforeignColumns: [roomTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tname: \"fk_user\",\n\t\t\tcolumns: [table.entityId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t],\n);\n","import { sql } from \"drizzle-orm\";\nimport { foreignKey, jsonb, pgTable, text, uuid } from \"drizzle-orm/pg-core\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Represents a PostgreSQL table for storing logs.\n *\n * @type {Table}\n */\n\nexport const logTable = pgTable(\n\t\"logs\",\n\t{\n\t\tid: uuid(\"id\").defaultRandom().notNull(),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\tentityId: uuid(\"entityId\")\n\t\t\t.notNull()\n\t\t\t.references(() => entityTable.id),\n\t\tbody: jsonb(\"body\").notNull(),\n\t\ttype: text(\"type\").notNull(),\n\t\troomId: uuid(\"roomId\")\n\t\t\t.notNull()\n\t\t\t.references(() => roomTable.id),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tname: \"fk_room\",\n\t\t\tcolumns: [table.roomId],\n\t\t\tforeignColumns: [roomTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tname: \"fk_user\",\n\t\t\tcolumns: [table.entityId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t],\n);\n","import { sql } from \"drizzle-orm\";\nimport {\n\tforeignKey,\n\tindex,\n\tpgTable,\n\ttext,\n\tunique,\n\tuuid,\n} from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Defines the schema for the \"participants\" table in the database.\n *\n * @type {import('knex').TableBuilder}\n */\nexport const participantTable = pgTable(\n\t\"participants\",\n\t{\n\t\tid: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\tentityId: uuid(\"entityId\").references(() => entityTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\troomId: uuid(\"roomId\").references(() => roomTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\tagentId: uuid(\"agentId\").references(() => agentTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\troomState: text(\"roomState\"),\n\t},\n\t(table) => [\n\t\t// unique(\"participants_user_room_agent_unique\").on(table.entityId, table.roomId, table.agentId),\n\t\tindex(\"idx_participants_user\").on(table.entityId),\n\t\tindex(\"idx_participants_room\").on(table.roomId),\n\t\tforeignKey({\n\t\t\tname: \"fk_room\",\n\t\t\tcolumns: [table.roomId],\n\t\t\tforeignColumns: [roomTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tname: \"fk_user\",\n\t\t\tcolumns: [table.entityId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t],\n);\n","import { sql } from \"drizzle-orm\";\nimport {\n\tforeignKey,\n\tindex,\n\tjsonb,\n\tpgTable,\n\ttext,\n\tunique,\n\tuuid,\n} from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { entityTable } from \"./entity\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Defines the relationshipTable containing information about relationships between entities and agents.\n * @type {import('knex').TableBuilder}\n */\nexport const relationshipTable = pgTable(\n\t\"relationships\",\n\t{\n\t\tid: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\tsourceEntityId: uuid(\"sourceEntityId\")\n\t\t\t.notNull()\n\t\t\t.references(() => entityTable.id, { onDelete: \"cascade\" }),\n\t\ttargetEntityId: uuid(\"targetEntityId\")\n\t\t\t.notNull()\n\t\t\t.references(() => entityTable.id, { onDelete: \"cascade\" }),\n\t\tagentId: uuid(\"agentId\")\n\t\t\t.notNull()\n\t\t\t.references(() => agentTable.id, { onDelete: \"cascade\" }),\n\t\ttags: text(\"tags\").array(),\n\t\tmetadata: jsonb(\"metadata\"),\n\t},\n\t(table) => [\n\t\tindex(\"idx_relationships_users\").on(\n\t\t\ttable.sourceEntityId,\n\t\t\ttable.targetEntityId,\n\t\t),\n\t\tunique(\"unique_relationship\").on(\n\t\t\ttable.sourceEntityId,\n\t\t\ttable.targetEntityId,\n\t\t\ttable.agentId,\n\t\t),\n\t\tforeignKey({\n\t\t\tname: \"fk_user_a\",\n\t\t\tcolumns: [table.sourceEntityId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tname: \"fk_user_b\",\n\t\t\tcolumns: [table.targetEntityId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t],\n);\n","import { jsonb, pgTable, text, timestamp, uuid } from \"drizzle-orm/pg-core\";\n\n/**\n * Represents a table schema for tasks in the database.\n *\n * @type {PgTable}\n */\nexport const taskTable = pgTable(\"tasks\", {\n\tid: uuid(\"id\").primaryKey().defaultRandom(),\n\tname: text(\"name\").notNull(),\n\tdescription: text(\"description\").notNull(),\n\troomId: uuid(\"room_id\"),\n\tworldId: uuid(\"world_id\"),\n\tagentId: uuid(\"agent_id\").notNull(),\n\ttags: text(\"tags\").array(),\n\tmetadata: jsonb(\"metadata\"),\n\tcreatedAt: timestamp(\"created_at\").defaultNow(),\n\tupdatedAt: timestamp(\"updated_at\").defaultNow(),\n});\n","import { type UUID, logger } from \"@elizaos/core\";\nimport { type NodePgDatabase, drizzle } from \"drizzle-orm/node-postgres\";\nimport { BaseDrizzleAdapter } from \"../base\";\nimport {\n\tDIMENSION_MAP,\n\ttype EmbeddingDimensionColumn,\n} from \"../schema/embedding\";\nimport type { PostgresConnectionManager } from \"./manager\";\n\n/**\n * Adapter class for interacting with a PostgreSQL database.\n * Extends BaseDrizzleAdapter<NodePgDatabase>.\n */\nexport class PgDatabaseAdapter extends BaseDrizzleAdapter<NodePgDatabase> {\n\tprotected embeddingDimension: EmbeddingDimensionColumn = DIMENSION_MAP[384];\n\n\t/**\n\t * Constructor for creating a new instance of a class.\n\t * @param {UUID} agentId - The unique identifier for the agent.\n\t * @param {PostgresConnectionManager} manager - The Postgres connection manager for the instance.\n\t */\n\tconstructor(\n\t\tagentId: UUID,\n\t\tprivate manager: PostgresConnectionManager,\n\t) {\n\t\tsuper(agentId);\n\t\tthis.manager = manager;\n\t}\n\n\t/**\n\t * Executes the provided operation with a database connection.\n\t *\n\t * @template T\n\t * @param {() => Promise<T>} operation - The operation to be executed with the database connection.\n\t * @returns {Promise<T>} A promise that resolves with the result of the operation.\n\t */\n\tprotected async withDatabase<T>(operation: () => Promise<T>): Promise<T> {\n\t\treturn await this.withRetry(async () => {\n\t\t\tconst client = await this.manager.getClient();\n\t\t\ttry {\n\t\t\t\tconst db = drizzle(client);\n\t\t\t\tthis.db = db;\n\n\t\t\t\treturn await operation();\n\t\t\t} finally {\n\t\t\t\tclient.release();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Asynchronously initializes the PgDatabaseAdapter by running migrations using the manager.\n\t * Logs a success message if initialization is successful, otherwise logs an error message.\n\t *\n\t * @returns {Promise<void>} A promise that resolves when initialization is complete.\n\t */\n\tasync init(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.manager.runMigrations();\n\t\t\tlogger.info(\"PgDatabaseAdapter initialized successfully\");\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Failed to initialize PgDatabaseAdapter:\", error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Asynchronously closes the manager associated with this instance.\n\t *\n\t * @returns A Promise that resolves once the manager is closed.\n\t */\n\tasync close(): Promise<void> {\n\t\tawait this.manager.close();\n\t}\n}\n"],"mappings":"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","names":["logger","logger","sql","sql","check","foreignKey","index","pgTable","uuid","vector","sql","boolean","jsonb","pgTable","text","uuid","sql","jsonb","pgTable","text","unique","uuid","pgTable","uuid","sql","text","jsonb","unique","sql","jsonb","pgTable","text","uuid","sql","jsonb","pgTable","text","uuid","pgTable","uuid","sql","text","jsonb","pgTable","uuid","sql","text","jsonb","pgTable","uuid","text","sql","jsonb","boolean","pgTable","uuid","sql","vector","check","index","foreignKey","sql","jsonb","pgTable","text","unique","uuid","pgTable","uuid","sql","text","jsonb","unique","sql","jsonb","pgTable","text","uuid","pgTable","uuid","text","jsonb","sql","sql","foreignKey","jsonb","pgTable","text","uuid","pgTable","uuid","sql","text","jsonb","foreignKey","sql","foreignKey","jsonb","pgTable","text","uuid","pgTable","uuid","sql","jsonb","text","foreignKey","sql","foreignKey","index","pgTable","text","uuid","pgTable","uuid","sql","text","index","foreignKey","sql","foreignKey","index","jsonb","pgTable","text","unique","uuid","pgTable","uuid","sql","text","jsonb","index","unique","foreignKey","jsonb","pgTable","text","uuid","sql","unique","logger","logger","drizzle","drizzle","logger","logger"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/pg-lite/adapter.ts","../src/base.ts","../src/schema/embedding.ts","../src/schema/memory.ts","../src/schema/agent.ts","../src/schema/types.ts","../src/schema/entity.ts","../src/schema/room.ts","../src/schema/worldTable.ts","../src/schema/cache.ts","../src/schema/component.ts","../src/schema/goal.ts","../src/schema/log.ts","../src/schema/participant.ts","../src/schema/relationship.ts","../src/schema/tasks.ts","../src/pg/adapter.ts"],"sourceRoot":"./","sourcesContent":["import {\n\ttype IAgentRuntime,\n\ttype IDatabaseAdapter,\n\ttype Plugin,\n\ttype UUID,\n\tlogger,\n} from \"@elizaos/core\";\nimport { PgliteDatabaseAdapter } from \"./pg-lite/adapter\";\nimport { PGliteClientManager } from \"./pg-lite/manager\";\nimport { PgDatabaseAdapter } from \"./pg/adapter\";\nimport { PostgresConnectionManager } from \"./pg/manager\";\n\n// Singleton connection managers\nlet pgLiteClientManager: PGliteClientManager;\nlet postgresConnectionManager: PostgresConnectionManager;\n\n/**\n * Creates a database adapter based on the provided configuration.\n * If a postgresUrl is provided in the config, a PgDatabaseAdapter is initialized using the PostgresConnectionManager.\n * If no postgresUrl is provided, a PgliteDatabaseAdapter is initialized using PGliteClientManager with the dataDir from the config.\n *\n * @param {object} config - The configuration object.\n * @param {string} [config.dataDir] - The directory where data is stored. Defaults to \"./elizadb\".\n * @param {string} [config.postgresUrl] - The URL for the PostgreSQL database.\n * @param {UUID} agentId - The unique identifier for the agent.\n * @returns {IDatabaseAdapter} The created database adapter.\n */\nexport function createDatabaseAdapter(\n\tconfig: {\n\t\tdataDir?: string;\n\t\tpostgresUrl?: string;\n\t},\n\tagentId: UUID,\n): IDatabaseAdapter {\n\tif (config.postgresUrl) {\n\t\tif (!postgresConnectionManager) {\n\t\t\tpostgresConnectionManager = new PostgresConnectionManager(\n\t\t\t\tconfig.postgresUrl,\n\t\t\t);\n\t\t}\n\t\treturn new PgDatabaseAdapter(agentId, postgresConnectionManager);\n\t}\n\n\tconst dataDir = config.dataDir ?? \"./elizadb\";\n\n\tif (!pgLiteClientManager) {\n\t\tpgLiteClientManager = new PGliteClientManager({ dataDir });\n\t}\n\treturn new PgliteDatabaseAdapter(agentId, pgLiteClientManager);\n}\n\n/**\n * Drizzle plugin for database adapter using Drizzle ORM\n *\n * @typedef {Object} Plugin\n * @property {string} name - The name of the plugin\n * @property {string} description - The description of the plugin\n * @property {Function} init - The initialization function for the plugin\n * @param {any} _ - Input parameter\n * @param {IAgentRuntime} runtime - The runtime environment for the agent\n */\nconst drizzlePlugin: Plugin = {\n\tname: \"drizzle\",\n\tdescription: \"Database adapter plugin using Drizzle ORM\",\n\tinit: async (_, runtime: IAgentRuntime) => {\n\t\tconst config = {\n\t\t\tdataDir: runtime.getSetting(\"PGLITE_DATA_DIR\") ?? \"./pglite\",\n\t\t\tpostgresUrl: runtime.getSetting(\"POSTGRES_URL\"),\n\t\t};\n\n\t\ttry {\n\t\t\tconst db = createDatabaseAdapter(config, runtime.agentId);\n\t\t\tlogger.success(\"Database connection established successfully\");\n\t\t\truntime.registerDatabaseAdapter(db);\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Failed to initialize database:\", error);\n\t\t\tthrow error;\n\t\t}\n\t},\n};\n\nexport default drizzlePlugin;\n","import { type UUID, logger } from \"@elizaos/core\";\nimport { type PgliteDatabase, drizzle } from \"drizzle-orm/pglite\";\nimport { BaseDrizzleAdapter } from \"../base\";\nimport {\n\tDIMENSION_MAP,\n\ttype EmbeddingDimensionColumn,\n} from \"../schema/embedding\";\nimport type { PGliteClientManager } from \"./manager\";\n\n/**\n * PgliteDatabaseAdapter class represents an adapter for interacting with a PgliteDatabase.\n * Extends BaseDrizzleAdapter<PgliteDatabase>.\n *\n * @constructor\n * @param {UUID} agentId - The ID of the agent.\n * @param {PGliteClientManager} manager - The manager for the PgliteDatabase.\n *\n * @method withDatabase\n * @param {() => Promise<T>} operation - The operation to perform on the database.\n * @return {Promise<T>} - The result of the operation.\n *\n * @method init\n * @return {Promise<void>} - A Promise that resolves when the initialization is complete.\n *\n * @method close\n * @return {void} - A Promise that resolves when the database is closed.\n */\nexport class PgliteDatabaseAdapter extends BaseDrizzleAdapter<PgliteDatabase> {\n\tprivate manager: PGliteClientManager;\n\tprotected embeddingDimension: EmbeddingDimensionColumn = DIMENSION_MAP[384];\n\n\t/**\n\t * Constructor for creating an instance of a class.\n\t * @param {UUID} agentId - The unique identifier for the agent.\n\t * @param {PGliteClientManager} manager - The manager for the PGlite client.\n\t */\n\tconstructor(agentId: UUID, manager: PGliteClientManager) {\n\t\tsuper(agentId);\n\t\tthis.manager = manager;\n\t\tthis.db = drizzle(this.manager.getConnection());\n\t}\n\n\t/**\n\t * Asynchronously runs the provided database operation while checking if the database manager is currently shutting down.\n\t * If the database manager is shutting down, a warning is logged and null is returned.\n\t *\n\t * @param {Function} operation - The database operation to be performed.\n\t * @returns {Promise<T>} A promise that resolves with the result of the database operation.\n\t */\n\tprotected async withDatabase<T>(operation: () => Promise<T>): Promise<T> {\n\t\tif (this.manager.isShuttingDown()) {\n\t\t\tlogger.warn(\"Database is shutting down\");\n\t\t\treturn null as unknown as T;\n\t\t}\n\t\treturn operation();\n\t}\n\n\t/**\n\t * Asynchronously initializes the database by running migrations using the manager.\n\t *\n\t * @returns {Promise<void>} A Promise that resolves when the database initialization is complete.\n\t */\n\tasync init(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.manager.runMigrations();\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Failed to initialize database:\", error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Asynchronously closes the manager.\n\t */\n\tasync close() {\n\t\tawait this.manager.close();\n\t}\n}\n","import {\n\ttype Agent,\n\ttype Component,\n\tDatabaseAdapter,\n\ttype Entity,\n\ttype Goal,\n\ttype GoalStatus,\n\ttype Memory,\n\ttype Participant,\n\ttype Relationship,\n\ttype Room,\n\ttype Task,\n\ttype UUID,\n\ttype World,\n\tlogger,\n} from \"@elizaos/core\";\nimport {\n\tand,\n\tcosineDistance,\n\tcount,\n\tdesc,\n\teq,\n\tgte,\n\tinArray,\n\tlte,\n\tor,\n\tsql,\n} from \"drizzle-orm\";\nimport { v4 } from \"uuid\";\nimport {\n\tDIMENSION_MAP,\n\ttype EmbeddingDimensionColumn,\n} from \"./schema/embedding\";\nimport {\n\tagentTable,\n\tcacheTable,\n\tcomponentTable,\n\tembeddingTable,\n\tentityTable,\n\tgoalTable,\n\tlogTable,\n\tmemoryTable,\n\tparticipantTable,\n\trelationshipTable,\n\troomTable,\n\ttaskTable,\n\tworldTable,\n} from \"./schema/index\";\nimport type { DrizzleOperations } from \"./types\";\n\n// Define the metadata type inline since we can't import it\n/**\n * Represents metadata information about memory.\n * @typedef {Object} MemoryMetadata\n * @property {string} type - The type of memory.\n * @property {string} [source] - The source of the memory.\n * @property {UUID} [sourceId] - The ID of the source.\n * @property {string} [scope] - The scope of the memory.\n * @property {number} [timestamp] - The timestamp of the memory.\n * @property {string[]} [tags] - The tags associated with the memory.\n * @property {UUID} [documentId] - The ID of the document associated with the memory.\n * @property {number} [position] - The position of the memory.\n */\n\ntype MemoryMetadata = {\n\ttype: string;\n\tsource?: string;\n\tsourceId?: UUID;\n\tscope?: string;\n\ttimestamp?: number;\n\ttags?: string[];\n\tdocumentId?: UUID;\n\tposition?: number;\n};\n\n/**\n * Abstract class representing a base Drizzle adapter for working with databases.\n * @template TDatabase - The type of Drizzle operations supported by the adapter.\n */\nexport abstract class BaseDrizzleAdapter<\n\tTDatabase extends DrizzleOperations,\n> extends DatabaseAdapter<TDatabase> {\n\tprotected readonly maxRetries: number = 3;\n\tprotected readonly baseDelay: number = 1000;\n\tprotected readonly maxDelay: number = 10000;\n\tprotected readonly jitterMax: number = 1000;\n\tprotected embeddingDimension: EmbeddingDimensionColumn = DIMENSION_MAP[384];\n\n\tprotected abstract withDatabase<T>(operation: () => Promise<T>): Promise<T>;\n\tpublic abstract init(): Promise<void>;\n\tpublic abstract close(): Promise<void>;\n\n\tprotected agentId: UUID;\n\n\t/**\n\t * Constructor for creating a new instance of Agent with the specified agentId.\n\t *\n\t * @param {UUID} agentId - The unique identifier for the agent.\n\t */\n\tconstructor(agentId: UUID) {\n\t\tsuper();\n\t\tthis.agentId = agentId;\n\t}\n\n\t/**\n\t * Executes the given operation with retry logic.\n\t * @template T\n\t * @param {() => Promise<T>} operation - The operation to be executed.\n\t * @returns {Promise<T>} A promise that resolves with the result of the operation.\n\t */\n\tprotected async withRetry<T>(operation: () => Promise<T>): Promise<T> {\n\t\tlet lastError: Error = new Error(\"Unknown error\");\n\n\t\tfor (let attempt = 1; attempt <= this.maxRetries; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn await operation();\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error as Error;\n\n\t\t\t\tif (attempt < this.maxRetries) {\n\t\t\t\t\tconst backoffDelay = Math.min(\n\t\t\t\t\t\tthis.baseDelay * 2 ** (attempt - 1),\n\t\t\t\t\t\tthis.maxDelay,\n\t\t\t\t\t);\n\n\t\t\t\t\tconst jitter = Math.random() * this.jitterMax;\n\t\t\t\t\tconst delay = backoffDelay + jitter;\n\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t`Database operation failed (attempt ${attempt}/${this.maxRetries}):`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\tnextRetryIn: `${(delay / 1000).toFixed(1)}s`,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, delay));\n\t\t\t\t} else {\n\t\t\t\t\tlogger.error(\"Max retry attempts reached:\", {\n\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\ttotalAttempts: attempt,\n\t\t\t\t\t});\n\t\t\t\t\tthrow error instanceof Error ? error : new Error(String(error));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow lastError;\n\t}\n\n\t/**\n\t * Ensure that an agent exists by checking if an agent with the same name already exists in the system.\n\t * If the agent does not exist, it will be created with the provided data.\n\t *\n\t * @param {Partial<Agent>} agent - The partial data of the agent to ensure its existence.\n\t * @returns {Promise<void>} - A promise that resolves when the agent is successfully ensured.\n\t * @throws {Error} - If the agent name is not provided or if there is an issue creating the agent.\n\t */\n\tasync ensureAgentExists(agent: Partial<Agent>): Promise<void> {\n\t\tif (!agent.name) {\n\t\t\tthrow new Error(\"Agent name is required\");\n\t\t}\n\n\t\tconst agents = await this.getAgents();\n\t\tconst existingAgent = agents.find(\n\t\t\t(a: Partial<Agent & { status: string }>) => a.name === agent.name,\n\t\t);\n\n\t\tif (!existingAgent) {\n\t\t\tawait this.createAgent(agent);\n\t\t}\n\t}\n\n\t/**\n\t * Ensure that the given embedding dimension is valid for the agent.\n\t *\n\t * @param {number} dimension - The dimension to ensure for the embedding.\n\t * @returns {Promise<void>} - Resolves once the embedding dimension is ensured.\n\t */\n\tasync ensureEmbeddingDimension(dimension: number) {\n\t\tconst existingMemory = await this.db\n\t\t\t.select({\n\t\t\t\tembedding: embeddingTable,\n\t\t\t})\n\t\t\t.from(memoryTable)\n\t\t\t.innerJoin(embeddingTable, eq(embeddingTable.memoryId, memoryTable.id))\n\t\t\t.where(eq(memoryTable.agentId, this.agentId))\n\t\t\t.limit(1);\n\n\t\tif (existingMemory.length > 0) {\n\t\t\tconst usedDimension = Object.entries(DIMENSION_MAP).find(\n\t\t\t\t([_, colName]) => existingMemory[0].embedding[colName] !== null,\n\t\t\t);\n\n\t\t\tif (usedDimension && usedDimension[1] !== DIMENSION_MAP[dimension]) {\n\t\t\t\tthrow new Error(\"Cannot change embedding dimension for agent\");\n\t\t\t}\n\t\t}\n\n\t\tthis.embeddingDimension = DIMENSION_MAP[dimension];\n\t}\n\n\t/**\n\t * Asynchronously retrieves an agent by their ID from the database.\n\t * @param {UUID} agentId - The ID of the agent to retrieve.\n\t * @returns {Promise<Agent | null>} A promise that resolves to the retrieved agent or null if not found.\n\t */\n\tasync getAgent(agentId: UUID): Promise<Agent | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select()\n\t\t\t\t.from(agentTable)\n\t\t\t\t.where(eq(agentTable.id, agentId))\n\t\t\t\t.limit(1);\n\n\t\t\tif (result.length === 0) return null;\n\t\t\treturn result[0];\n\t\t});\n\t}\n\n\t/**\n\t * Asynchronously retrieves a list of agents from the database.\n\t *\n\t * @returns {Promise<Agent[]>} A Promise that resolves to an array of Agent objects.\n\t */\n\tasync getAgents(): Promise<Agent[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db.select().from(agentTable);\n\n\t\t\treturn result;\n\t\t});\n\t}\n\n\t/**\n\t * Asynchronously creates a new agent record in the database.\n\t *\n\t * @param {Partial<Agent>} agent The agent object to be created.\n\t * @returns {Promise<boolean>} A promise that resolves to a boolean indicating the success of the operation.\n\t */\n\tasync createAgent(agent: Partial<Agent>): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx.insert(agentTable).values({\n\t\t\t\t\t\t...agent,\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tlogger.debug(\"Agent created successfully:\", {\n\t\t\t\t\tagentId: agent.id,\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error creating agent:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tagentId: agent.id,\n\t\t\t\t\tagent,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Updates an agent in the database with the provided agent ID and data.\n\t * @param {UUID} agentId - The unique identifier of the agent to update.\n\t * @param {Partial<Agent>} agent - The partial agent object containing the fields to update.\n\t * @returns {Promise<boolean>} - A boolean indicating if the agent was successfully updated.\n\t */\n\tasync updateAgent(agentId: UUID, agent: Partial<Agent>): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tif (!agent.id) {\n\t\t\t\t\tthrow new Error(\"Agent ID is required for update\");\n\t\t\t\t}\n\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.update(agentTable)\n\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\t...agent,\n\t\t\t\t\t\t\tupdatedAt: Date.now(),\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.where(eq(agentTable.id, agentId));\n\t\t\t\t});\n\n\t\t\t\tlogger.debug(\"Agent updated successfully:\", {\n\t\t\t\t\tagentId,\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error updating agent:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tagentId,\n\t\t\t\t\tagent,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Asynchronously deletes an agent with the specified UUID and all related entries.\n\t *\n\t * @param {UUID} agentId - The UUID of the agent to be deleted.\n\t * @returns {Promise<boolean>} - A boolean indicating if the deletion was successful.\n\t */\n\tasync deleteAgent(agentId: UUID): Promise<boolean> {\n\t\t// casacade delete all related for the agent\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\tawait tx.delete(agentTable).where(eq(agentTable.id, agentId));\n\t\t\t});\n\t\t\treturn true;\n\t\t});\n\t}\n\n\t/**\n\t * Count all agents in the database\n\t * Used primarily for maintenance and cleanup operations\n\t */\n\t/**\n\t * Asynchronously counts the number of agents in the database.\n\t * @returns {Promise<number>} A Promise that resolves to the number of agents in the database.\n\t */\n\tasync countAgents(): Promise<number> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.select({ count: count() })\n\t\t\t\t\t.from(agentTable);\n\n\t\t\t\treturn result[0]?.count || 0;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error counting agents:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Clean up the agents table by removing all agents\n\t * This is used during server startup to ensure no orphaned agents exist\n\t * from previous crashes or improper shutdowns\n\t */\n\tasync cleanupAgents(): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.delete(agentTable);\n\t\t\t\tlogger.success(\"Successfully cleaned up agent table\");\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error cleaning up agent table:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync getEntityById(entityId: UUID): Promise<Entity | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tentity: entityTable,\n\t\t\t\t\tcomponents: componentTable,\n\t\t\t\t})\n\t\t\t\t.from(entityTable)\n\t\t\t\t.leftJoin(componentTable, eq(componentTable.entityId, entityTable.id))\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(entityTable.id, entityId),\n\t\t\t\t\t\teq(entityTable.agentId, this.agentId),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\tif (result.length === 0) return null;\n\n\t\t\t// Group components by entity\n\t\t\tconst entity = result[0].entity;\n\t\t\tentity.components = result\n\t\t\t\t.filter((row) => row.components)\n\t\t\t\t.map((row) => row.components);\n\n\t\t\treturn entity;\n\t\t});\n\t}\n\n\tasync getEntitiesForRoom(\n\t\troomId: UUID,\n\t\tincludeComponents?: boolean,\n\t): Promise<Entity[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst query = this.db\n\t\t\t\t.select({\n\t\t\t\t\tentity: entityTable,\n\t\t\t\t\t...(includeComponents && { components: componentTable }),\n\t\t\t\t})\n\t\t\t\t.from(participantTable)\n\t\t\t\t.leftJoin(\n\t\t\t\t\tentityTable,\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(participantTable.entityId, entityTable.id),\n\t\t\t\t\t\teq(entityTable.agentId, this.agentId),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\tif (includeComponents) {\n\t\t\t\tquery.leftJoin(\n\t\t\t\t\tcomponentTable,\n\t\t\t\t\teq(componentTable.entityId, entityTable.id),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst result = await query.where(eq(participantTable.roomId, roomId));\n\n\t\t\t// Group components by entity if includeComponents is true\n\t\t\tconst entitiesByIdMap = new Map<UUID, Entity>();\n\n\t\t\tfor (const row of result) {\n\t\t\t\tif (!row.entity) continue;\n\n\t\t\t\tconst entityId = row.entity.id as UUID;\n\t\t\t\tif (!entitiesByIdMap.has(entityId)) {\n\t\t\t\t\tconst entity: Entity = {\n\t\t\t\t\t\t...row.entity,\n\t\t\t\t\t\tcomponents: includeComponents ? [] : undefined,\n\t\t\t\t\t};\n\t\t\t\t\tentitiesByIdMap.set(entityId, entity);\n\t\t\t\t}\n\n\t\t\t\tif (includeComponents && row.components) {\n\t\t\t\t\tconst entity = entitiesByIdMap.get(entityId);\n\t\t\t\t\tif (entity) {\n\t\t\t\t\t\tif (!entity.components) {\n\t\t\t\t\t\t\tentity.components = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tentity.components.push(row.components);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Array.from(entitiesByIdMap.values());\n\t\t});\n\t}\n\n\tasync createEntity(entity: Entity): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\treturn await this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx.insert(entityTable).values(entity);\n\n\t\t\t\t\tlogger.debug(\"Entity created successfully:\", {\n\t\t\t\t\t\tentity,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error creating entity:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tentityId: entity.id,\n\t\t\t\t\tname: entity.metadata?.name,\n\t\t\t\t});\n\t\t\t\t// trace the error\n\t\t\t\tconsole.trace(error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Ensures an entity exists, creating it if it doesn't\n\t * @param entity The entity to ensure exists\n\t * @returns Promise resolving to boolean indicating success\n\t */\n\tprotected async ensureEntityExists(entity: Entity): Promise<boolean> {\n\t\tif (!entity.id) {\n\t\t\tlogger.error(\"Entity ID is required for ensureEntityExists\");\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tconst existingEntity = await this.getEntityById(entity.id);\n\n\t\t\tif (!existingEntity) {\n\t\t\t\treturn await this.createEntity(entity);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Error ensuring entity exists:\", {\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\tentityId: entity.id,\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync updateEntity(entity: Entity): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db\n\t\t\t\t.update(entityTable)\n\t\t\t\t.set(entity)\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(entityTable.id, entity.id as UUID),\n\t\t\t\t\t\teq(entityTable.agentId, entity.agentId),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t});\n\t}\n\n\tasync getComponent(\n\t\tentityId: UUID,\n\t\ttype: string,\n\t\tworldId?: UUID,\n\t\tsourceEntityId?: UUID,\n\t): Promise<Component | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst conditions = [\n\t\t\t\teq(componentTable.entityId, entityId),\n\t\t\t\teq(componentTable.type, type),\n\t\t\t];\n\n\t\t\tif (worldId) {\n\t\t\t\tconditions.push(eq(componentTable.worldId, worldId));\n\t\t\t}\n\n\t\t\tif (sourceEntityId) {\n\t\t\t\tconditions.push(eq(componentTable.sourceEntityId, sourceEntityId));\n\t\t\t}\n\n\t\t\tconst result = await this.db\n\t\t\t\t.select()\n\t\t\t\t.from(componentTable)\n\t\t\t\t.where(and(...conditions));\n\t\t\treturn result.length > 0 ? result[0] : null;\n\t\t});\n\t}\n\n\tasync getComponents(\n\t\tentityId: UUID,\n\t\tworldId?: UUID,\n\t\tsourceEntityId?: UUID,\n\t): Promise<Component[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst conditions = [eq(componentTable.entityId, entityId)];\n\n\t\t\tif (worldId) {\n\t\t\t\tconditions.push(eq(componentTable.worldId, worldId));\n\t\t\t}\n\n\t\t\tif (sourceEntityId) {\n\t\t\t\tconditions.push(eq(componentTable.sourceEntityId, sourceEntityId));\n\t\t\t}\n\n\t\t\tconst result = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tid: componentTable.id,\n\t\t\t\t\tentityId: componentTable.entityId,\n\t\t\t\t\ttype: componentTable.type,\n\t\t\t\t\tdata: componentTable.data,\n\t\t\t\t\tworldId: componentTable.worldId,\n\t\t\t\t\tsourceEntityId: componentTable.sourceEntityId,\n\t\t\t\t\tcreatedAt: componentTable.createdAt,\n\t\t\t\t})\n\t\t\t\t.from(componentTable)\n\t\t\t\t.where(and(...conditions));\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tasync createComponent(component: Component): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.insert(componentTable).values(component);\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tasync updateComponent(component: Component): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db\n\t\t\t\t.update(componentTable)\n\t\t\t\t.set(component)\n\t\t\t\t.where(eq(componentTable.id, component.id));\n\t\t});\n\t}\n\n\tasync deleteComponent(componentId: UUID): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db\n\t\t\t\t.delete(componentTable)\n\t\t\t\t.where(eq(componentTable.id, componentId));\n\t\t});\n\t}\n\n\tasync getMemories(params: {\n\t\troomId: UUID;\n\t\tcount?: number;\n\t\tunique?: boolean;\n\t\ttableName: string;\n\t\tstart?: number;\n\t\tend?: number;\n\t}): Promise<Memory[]> {\n\t\tif (!params.tableName) throw new Error(\"tableName is required\");\n\t\tif (!params.roomId) throw new Error(\"roomId is required\");\n\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst conditions = [\n\t\t\t\teq(memoryTable.type, params.tableName),\n\t\t\t\teq(memoryTable.roomId, params.roomId),\n\t\t\t];\n\n\t\t\tif (params.start) {\n\t\t\t\tconditions.push(gte(memoryTable.createdAt, params.start));\n\t\t\t}\n\n\t\t\tif (params.end) {\n\t\t\t\tconditions.push(lte(memoryTable.createdAt, params.end));\n\t\t\t}\n\n\t\t\tif (params.unique) {\n\t\t\t\tconditions.push(eq(memoryTable.unique, true));\n\t\t\t}\n\n\t\t\tconditions.push(eq(memoryTable.agentId, this.agentId));\n\n\t\t\tconst query = this.db\n\t\t\t\t.select({\n\t\t\t\t\tmemory: {\n\t\t\t\t\t\tid: memoryTable.id,\n\t\t\t\t\t\ttype: memoryTable.type,\n\t\t\t\t\t\tcreatedAt: memoryTable.createdAt,\n\t\t\t\t\t\tcontent: memoryTable.content,\n\t\t\t\t\t\tentityId: memoryTable.entityId,\n\t\t\t\t\t\tagentId: memoryTable.agentId,\n\t\t\t\t\t\troomId: memoryTable.roomId,\n\t\t\t\t\t\tunique: memoryTable.unique,\n\t\t\t\t\t},\n\t\t\t\t\tembedding: embeddingTable[this.embeddingDimension],\n\t\t\t\t})\n\t\t\t\t.from(memoryTable)\n\t\t\t\t.leftJoin(embeddingTable, eq(embeddingTable.memoryId, memoryTable.id))\n\t\t\t\t.where(and(...conditions))\n\t\t\t\t.orderBy(desc(memoryTable.createdAt));\n\n\t\t\tconst rows = params.count ? await query.limit(params.count) : await query;\n\n\t\t\treturn rows.map((row) => ({\n\t\t\t\tid: row.memory.id as UUID,\n\t\t\t\ttype: row.memory.type,\n\t\t\t\tcreatedAt: row.memory.createdAt,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof row.memory.content === \"string\"\n\t\t\t\t\t\t? JSON.parse(row.memory.content)\n\t\t\t\t\t\t: row.memory.content,\n\t\t\t\tentityId: row.memory.entityId as UUID,\n\t\t\t\tagentId: row.memory.agentId as UUID,\n\t\t\t\troomId: row.memory.roomId as UUID,\n\t\t\t\tunique: row.memory.unique,\n\t\t\t\tembedding: row.embedding ? Array.from(row.embedding) : undefined,\n\t\t\t}));\n\t\t});\n\t}\n\n\tasync getMemoriesByRoomIds(params: {\n\t\troomIds: UUID[];\n\t\ttableName: string;\n\t\tlimit?: number;\n\t}): Promise<Memory[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tif (params.roomIds.length === 0) return [];\n\n\t\t\tconst conditions = [\n\t\t\t\teq(memoryTable.type, params.tableName),\n\t\t\t\tinArray(memoryTable.roomId, params.roomIds),\n\t\t\t];\n\n\t\t\tconditions.push(eq(memoryTable.agentId, this.agentId));\n\n\t\t\tconst query = this.db\n\t\t\t\t.select({\n\t\t\t\t\tid: memoryTable.id,\n\t\t\t\t\ttype: memoryTable.type,\n\t\t\t\t\tcreatedAt: memoryTable.createdAt,\n\t\t\t\t\tcontent: memoryTable.content,\n\t\t\t\t\tentityId: memoryTable.entityId,\n\t\t\t\t\tagentId: memoryTable.agentId,\n\t\t\t\t\troomId: memoryTable.roomId,\n\t\t\t\t\tunique: memoryTable.unique,\n\t\t\t\t})\n\t\t\t\t.from(memoryTable)\n\t\t\t\t.where(and(...conditions))\n\t\t\t\t.orderBy(desc(memoryTable.createdAt));\n\n\t\t\tconst rows = params.limit ? await query.limit(params.limit) : await query;\n\n\t\t\treturn rows.map((row) => ({\n\t\t\t\tid: row.id as UUID,\n\t\t\t\tcreatedAt: row.createdAt,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof row.content === \"string\"\n\t\t\t\t\t\t? JSON.parse(row.content)\n\t\t\t\t\t\t: row.content,\n\t\t\t\tentityId: row.entityId as UUID,\n\t\t\t\tagentId: row.agentId as UUID,\n\t\t\t\troomId: row.roomId as UUID,\n\t\t\t\tunique: row.unique,\n\t\t\t})) as Memory[];\n\t\t});\n\t}\n\n\tasync getMemoryById(id: UUID): Promise<Memory | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tmemory: memoryTable,\n\t\t\t\t\tembedding: embeddingTable[this.embeddingDimension],\n\t\t\t\t})\n\t\t\t\t.from(memoryTable)\n\t\t\t\t.leftJoin(embeddingTable, eq(memoryTable.id, embeddingTable.memoryId))\n\t\t\t\t.where(eq(memoryTable.id, id))\n\t\t\t\t.limit(1);\n\n\t\t\tif (result.length === 0) return null;\n\n\t\t\tconst row = result[0];\n\t\t\treturn {\n\t\t\t\tid: row.memory.id as UUID,\n\t\t\t\tcreatedAt: row.memory.createdAt,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof row.memory.content === \"string\"\n\t\t\t\t\t\t? JSON.parse(row.memory.content)\n\t\t\t\t\t\t: row.memory.content,\n\t\t\t\tentityId: row.memory.entityId as UUID,\n\t\t\t\tagentId: row.memory.agentId as UUID,\n\t\t\t\troomId: row.memory.roomId as UUID,\n\t\t\t\tunique: row.memory.unique,\n\t\t\t\tembedding: row.embedding ?? undefined,\n\t\t\t};\n\t\t});\n\t}\n\n\tasync getMemoriesByIds(\n\t\tmemoryIds: UUID[],\n\t\ttableName?: string,\n\t): Promise<Memory[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tif (memoryIds.length === 0) return [];\n\n\t\t\tconst conditions = [inArray(memoryTable.id, memoryIds)];\n\n\t\t\tif (tableName) {\n\t\t\t\tconditions.push(eq(memoryTable.type, tableName));\n\t\t\t}\n\n\t\t\tconst rows = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tmemory: memoryTable,\n\t\t\t\t\tembedding: embeddingTable[this.embeddingDimension],\n\t\t\t\t})\n\t\t\t\t.from(memoryTable)\n\t\t\t\t.leftJoin(embeddingTable, eq(embeddingTable.memoryId, memoryTable.id))\n\t\t\t\t.where(and(...conditions))\n\t\t\t\t.orderBy(desc(memoryTable.createdAt));\n\n\t\t\treturn rows.map((row) => ({\n\t\t\t\tid: row.memory.id as UUID,\n\t\t\t\tcreatedAt: row.memory.createdAt,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof row.memory.content === \"string\"\n\t\t\t\t\t\t? JSON.parse(row.memory.content)\n\t\t\t\t\t\t: row.memory.content,\n\t\t\t\tentityId: row.memory.entityId as UUID,\n\t\t\t\tagentId: row.memory.agentId as UUID,\n\t\t\t\troomId: row.memory.roomId as UUID,\n\t\t\t\tunique: row.memory.unique,\n\t\t\t\tembedding: row.embedding ?? undefined,\n\t\t\t}));\n\t\t});\n\t}\n\n\tasync getCachedEmbeddings(opts: {\n\t\tquery_table_name: string;\n\t\tquery_threshold: number;\n\t\tquery_input: string;\n\t\tquery_field_name: string;\n\t\tquery_field_sub_name: string;\n\t\tquery_match_count: number;\n\t}): Promise<{ embedding: number[]; levenshtein_score: number }[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tconst results = await this.db.execute<{\n\t\t\t\t\tembedding: number[];\n\t\t\t\t\tlevenshtein_score: number;\n\t\t\t\t}>(sql`\n WITH content_text AS (\n SELECT\n m.id,\n COALESCE(\n m.content->>${opts.query_field_sub_name},\n ''\n ) as content_text\n FROM memories m\n WHERE m.type = ${opts.query_table_name}\n AND m.content->>${opts.query_field_sub_name} IS NOT NULL\n ),\n embedded_text AS (\n SELECT \n ct.content_text,\n COALESCE(\n e.dim_384,\n e.dim_512,\n e.dim_768,\n e.dim_1024,\n e.dim_1536,\n e.dim_3072\n ) as embedding\n FROM content_text ct\n LEFT JOIN embeddings e ON e.memory_id = ct.id\n WHERE e.memory_id IS NOT NULL\n )\n SELECT\n embedding,\n levenshtein(${opts.query_input}, content_text) as levenshtein_score\n FROM embedded_text\n WHERE levenshtein(${opts.query_input}, content_text) <= ${opts.query_threshold}\n ORDER BY levenshtein_score\n LIMIT ${opts.query_match_count}\n `);\n\n\t\t\t\treturn results.rows\n\t\t\t\t\t.map((row) => ({\n\t\t\t\t\t\tembedding: Array.isArray(row.embedding)\n\t\t\t\t\t\t\t? row.embedding\n\t\t\t\t\t\t\t: typeof row.embedding === \"string\"\n\t\t\t\t\t\t\t\t? JSON.parse(row.embedding)\n\t\t\t\t\t\t\t\t: [],\n\t\t\t\t\t\tlevenshtein_score: Number(row.levenshtein_score),\n\t\t\t\t\t}))\n\t\t\t\t\t.filter((row) => Array.isArray(row.embedding));\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error in getCachedEmbeddings:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\ttableName: opts.query_table_name,\n\t\t\t\t\tfieldName: opts.query_field_name,\n\t\t\t\t});\n\t\t\t\tif (\n\t\t\t\t\terror instanceof Error &&\n\t\t\t\t\terror.message ===\n\t\t\t\t\t\t\"levenshtein argument exceeds maximum length of 255 characters\"\n\t\t\t\t) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync log(params: {\n\t\tbody: { [key: string]: unknown };\n\t\tentityId: UUID;\n\t\troomId: UUID;\n\t\ttype: string;\n\t}): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx.insert(logTable).values({\n\t\t\t\t\t\tbody: sql`${params.body}::jsonb`,\n\t\t\t\t\t\tentityId: params.entityId,\n\t\t\t\t\t\troomId: params.roomId,\n\t\t\t\t\t\ttype: params.type,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to create log entry:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\ttype: params.type,\n\t\t\t\t\troomId: params.roomId,\n\t\t\t\t\tentityId: params.entityId,\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync searchMemories(params: {\n\t\ttableName: string;\n\t\troomId: UUID;\n\t\tembedding: number[];\n\t\tmatch_threshold: number;\n\t\tcount: number;\n\t\tunique: boolean;\n\t}): Promise<Memory[]> {\n\t\treturn await this.searchMemoriesByEmbedding(params.embedding, {\n\t\t\tmatch_threshold: params.match_threshold,\n\t\t\tcount: params.count,\n\t\t\troomId: params.roomId,\n\t\t\tunique: params.unique,\n\t\t\ttableName: params.tableName,\n\t\t});\n\t}\n\n\tasync updateGoalStatus(params: {\n\t\tgoalId: UUID;\n\t\tstatus: GoalStatus;\n\t}): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.update(goalTable)\n\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\tstatus: params.status as string,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.where(eq(goalTable.id, params.goalId));\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to update goal status:\", {\n\t\t\t\t\tgoalId: params.goalId,\n\t\t\t\t\tstatus: params.status,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync searchMemoriesByEmbedding(\n\t\tembedding: number[],\n\t\tparams: {\n\t\t\tmatch_threshold?: number;\n\t\t\tcount?: number;\n\t\t\troomId?: UUID;\n\t\t\tunique?: boolean;\n\t\t\ttableName: string;\n\t\t},\n\t): Promise<Memory[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst cleanVector = embedding.map((n) =>\n\t\t\t\tNumber.isFinite(n) ? Number(n.toFixed(6)) : 0,\n\t\t\t);\n\n\t\t\tconst similarity = sql<number>`1 - (${cosineDistance(\n\t\t\t\tembeddingTable[this.embeddingDimension],\n\t\t\t\tcleanVector,\n\t\t\t)})`;\n\n\t\t\tconst conditions = [eq(memoryTable.type, params.tableName)];\n\n\t\t\tif (params.unique) {\n\t\t\t\tconditions.push(eq(memoryTable.unique, true));\n\t\t\t}\n\n\t\t\tconditions.push(eq(memoryTable.agentId, this.agentId));\n\n\t\t\tif (params.roomId) {\n\t\t\t\tconditions.push(eq(memoryTable.roomId, params.roomId));\n\t\t\t}\n\n\t\t\tif (params.match_threshold) {\n\t\t\t\tconditions.push(gte(similarity, params.match_threshold));\n\t\t\t}\n\n\t\t\tconst results = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tmemory: memoryTable,\n\t\t\t\t\tsimilarity,\n\t\t\t\t\tembedding: embeddingTable[this.embeddingDimension],\n\t\t\t\t})\n\t\t\t\t.from(embeddingTable)\n\t\t\t\t.innerJoin(memoryTable, eq(memoryTable.id, embeddingTable.memoryId))\n\t\t\t\t.where(and(...conditions))\n\t\t\t\t.orderBy(desc(similarity))\n\t\t\t\t.limit(params.count ?? 10);\n\n\t\t\treturn results.map((row) => ({\n\t\t\t\tid: row.memory.id as UUID,\n\t\t\t\ttype: row.memory.type,\n\t\t\t\tcreatedAt: row.memory.createdAt,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof row.memory.content === \"string\"\n\t\t\t\t\t\t? JSON.parse(row.memory.content)\n\t\t\t\t\t\t: row.memory.content,\n\t\t\t\tentityId: row.memory.entityId as UUID,\n\t\t\t\tagentId: row.memory.agentId as UUID,\n\t\t\t\troomId: row.memory.roomId as UUID,\n\t\t\t\tunique: row.memory.unique,\n\t\t\t\tembedding: row.embedding ?? undefined,\n\t\t\t\tsimilarity: row.similarity,\n\t\t\t}));\n\t\t});\n\t}\n\n\tasync createMemory(\n\t\tmemory: Memory & { metadata?: MemoryMetadata },\n\t\ttableName: string,\n\t): Promise<UUID> {\n\t\tlogger.debug(\"DrizzleAdapter createMemory:\", {\n\t\t\tmemoryId: memory.id,\n\t\t\tembeddingLength: memory.embedding?.length,\n\t\t\tcontentLength: memory.content?.text?.length,\n\t\t});\n\n\t\tlet isUnique = true;\n\t\tif (memory.embedding && Array.isArray(memory.embedding)) {\n\t\t\tconst similarMemories = await this.searchMemoriesByEmbedding(\n\t\t\t\tmemory.embedding,\n\t\t\t\t{\n\t\t\t\t\ttableName,\n\t\t\t\t\troomId: memory.roomId,\n\t\t\t\t\tmatch_threshold: 0.95,\n\t\t\t\t\tcount: 1,\n\t\t\t\t},\n\t\t\t);\n\t\t\tisUnique = similarMemories.length === 0;\n\t\t}\n\n\t\tconst contentToInsert =\n\t\t\ttypeof memory.content === \"string\"\n\t\t\t\t? JSON.parse(memory.content)\n\t\t\t\t: memory.content;\n\n\t\tconst memoryId = memory.id ?? (v4() as UUID);\n\n\t\tawait this.db.transaction(async (tx) => {\n\t\t\tawait tx.insert(memoryTable).values([\n\t\t\t\t{\n\t\t\t\t\tid: memoryId,\n\t\t\t\t\ttype: tableName,\n\t\t\t\t\tcontent: sql`${contentToInsert}::jsonb`,\n\t\t\t\t\tmetadata: sql`${memory.metadata || {}}::jsonb`,\n\t\t\t\t\tentityId: memory.entityId,\n\t\t\t\t\troomId: memory.roomId,\n\t\t\t\t\tagentId: memory.agentId,\n\t\t\t\t\tunique: memory.unique ?? isUnique,\n\t\t\t\t\tcreatedAt: memory.createdAt,\n\t\t\t\t},\n\t\t\t]);\n\n\t\t\tif (memory.embedding && Array.isArray(memory.embedding)) {\n\t\t\t\tconst embeddingValues: Record<string, unknown> = {\n\t\t\t\t\tid: v4(),\n\t\t\t\t\tmemoryId: memoryId,\n\t\t\t\t\tcreatedAt: memory.createdAt,\n\t\t\t\t};\n\n\t\t\t\tconst cleanVector = memory.embedding.map((n) =>\n\t\t\t\t\tNumber.isFinite(n) ? Number(n.toFixed(6)) : 0,\n\t\t\t\t);\n\n\t\t\t\tembeddingValues[this.embeddingDimension] = cleanVector;\n\n\t\t\t\tawait tx.insert(embeddingTable).values([embeddingValues]);\n\t\t\t}\n\t\t});\n\n\t\treturn memoryId;\n\t}\n\n\tasync removeMemory(memoryId: UUID, tableName: string): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\tawait tx\n\t\t\t\t\t.delete(embeddingTable)\n\t\t\t\t\t.where(eq(embeddingTable.memoryId, memoryId));\n\n\t\t\t\tawait tx\n\t\t\t\t\t.delete(memoryTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(eq(memoryTable.id, memoryId), eq(memoryTable.type, tableName)),\n\t\t\t\t\t);\n\t\t\t});\n\n\t\t\tlogger.debug(\"Memory removed successfully:\", {\n\t\t\t\tmemoryId,\n\t\t\t\ttableName,\n\t\t\t});\n\t\t});\n\t}\n\n\tasync removeAllMemories(roomId: UUID, tableName: string): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\tconst memoryIds = await tx\n\t\t\t\t\t.select({ id: memoryTable.id })\n\t\t\t\t\t.from(memoryTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(\n\t\t\t\t\t\t\teq(memoryTable.roomId, roomId),\n\t\t\t\t\t\t\teq(memoryTable.type, tableName),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\tif (memoryIds.length > 0) {\n\t\t\t\t\tawait tx.delete(embeddingTable).where(\n\t\t\t\t\t\tinArray(\n\t\t\t\t\t\t\tembeddingTable.memoryId,\n\t\t\t\t\t\t\tmemoryIds.map((m) => m.id),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.delete(memoryTable)\n\t\t\t\t\t\t.where(\n\t\t\t\t\t\t\tand(\n\t\t\t\t\t\t\t\teq(memoryTable.roomId, roomId),\n\t\t\t\t\t\t\t\teq(memoryTable.type, tableName),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlogger.debug(\"All memories removed successfully:\", {\n\t\t\t\troomId,\n\t\t\t\ttableName,\n\t\t\t});\n\t\t});\n\t}\n\n\tasync countMemories(\n\t\troomId: UUID,\n\t\tunique = true,\n\t\ttableName = \"\",\n\t): Promise<number> {\n\t\tif (!tableName) throw new Error(\"tableName is required\");\n\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst conditions = [\n\t\t\t\teq(memoryTable.roomId, roomId),\n\t\t\t\teq(memoryTable.type, tableName),\n\t\t\t];\n\n\t\t\tif (unique) {\n\t\t\t\tconditions.push(eq(memoryTable.unique, true));\n\t\t\t}\n\n\t\t\tconst result = await this.db\n\t\t\t\t.select({ count: sql<number>`count(*)` })\n\t\t\t\t.from(memoryTable)\n\t\t\t\t.where(and(...conditions));\n\n\t\t\treturn Number(result[0]?.count ?? 0);\n\t\t});\n\t}\n\n\tasync getGoals(params: {\n\t\troomId: UUID;\n\t\tentityId?: UUID | null;\n\t\tonlyInProgress?: boolean;\n\t\tcount?: number;\n\t}): Promise<Goal[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst conditions = [eq(goalTable.roomId, params.roomId)];\n\n\t\t\tif (params.entityId) {\n\t\t\t\tconditions.push(eq(goalTable.entityId, params.entityId));\n\t\t\t}\n\n\t\t\tif (params.onlyInProgress) {\n\t\t\t\tconditions.push(eq(goalTable.status, \"IN_PROGRESS\" as GoalStatus));\n\t\t\t}\n\n\t\t\tconst query = this.db\n\t\t\t\t.select()\n\t\t\t\t.from(goalTable)\n\t\t\t\t.where(and(...conditions))\n\t\t\t\t.orderBy(desc(goalTable.createdAt));\n\n\t\t\tconst result = await (params.count ? query.limit(params.count) : query);\n\n\t\t\treturn result.map((row) => ({\n\t\t\t\tid: row.id as UUID,\n\t\t\t\troomId: row.roomId as UUID,\n\t\t\t\tentityId: row.entityId as UUID,\n\t\t\t\tname: row.name ?? \"\",\n\t\t\t\tstatus: (row.status ?? \"NOT_STARTED\") as GoalStatus,\n\t\t\t\tdescription: row.description ?? \"\",\n\t\t\t\tobjectives: row.objectives as unknown[],\n\t\t\t\tcreatedAt: row.createdAt,\n\t\t\t}));\n\t\t});\n\t}\n\n\tasync updateGoal(goal: Goal): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.update(goalTable)\n\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\tname: goal.name,\n\t\t\t\t\t\t\tstatus: goal.status,\n\t\t\t\t\t\t\tobjectives: goal.objectives,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.where(eq(goalTable.id, goal.id as string));\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to update goal:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tgoalId: goal.id,\n\t\t\t\t\tstatus: goal.status,\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync createGoal(goal: Goal): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx.insert(goalTable).values({\n\t\t\t\t\t\tid: goal.id ?? v4(),\n\t\t\t\t\t\troomId: goal.roomId,\n\t\t\t\t\t\tentityId: goal.entityId,\n\t\t\t\t\t\tname: goal.name,\n\t\t\t\t\t\tstatus: goal.status,\n\t\t\t\t\t\tobjectives: sql`${goal.objectives}::jsonb`,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to update goal:\", {\n\t\t\t\t\tgoalId: goal.id,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tstatus: goal.status,\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync removeGoal(goalId: UUID): Promise<void> {\n\t\tif (!goalId) throw new Error(\"Goal ID is required\");\n\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx.delete(goalTable).where(eq(goalTable.id, goalId));\n\t\t\t\t});\n\n\t\t\t\tlogger.debug(\"Goal removal attempt:\", {\n\t\t\t\t\tgoalId,\n\t\t\t\t\tremoved: true,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to remove goal:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tgoalId,\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync removeAllGoals(roomId: UUID): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\tawait tx.delete(goalTable).where(eq(goalTable.roomId, roomId));\n\t\t\t});\n\t\t});\n\t}\n\n\tasync getRoom(roomId: UUID): Promise<Room | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tid: roomTable.id,\n\t\t\t\t\tchannelId: roomTable.channelId,\n\t\t\t\t\tagentId: roomTable.agentId,\n\t\t\t\t\tserverId: roomTable.serverId,\n\t\t\t\t\tworldId: roomTable.worldId,\n\t\t\t\t\ttype: roomTable.type,\n\t\t\t\t\tsource: roomTable.source,\n\t\t\t\t})\n\t\t\t\t.from(roomTable)\n\t\t\t\t.where(\n\t\t\t\t\tand(eq(roomTable.id, roomId), eq(roomTable.agentId, this.agentId)),\n\t\t\t\t)\n\t\t\t\t.limit(1);\n\t\t\tif (result.length === 0) return null;\n\t\t\treturn result[0];\n\t\t});\n\t}\n\n\tasync getRooms(worldId: UUID): Promise<Room[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select()\n\t\t\t\t.from(roomTable)\n\t\t\t\t.where(eq(roomTable.worldId, worldId));\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tasync updateRoom(room: Room): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db\n\t\t\t\t.update(roomTable)\n\t\t\t\t.set({ ...room, agentId: this.agentId })\n\t\t\t\t.where(eq(roomTable.id, room.id));\n\t\t});\n\t}\n\n\tasync createRoom({\n\t\tid,\n\t\tname,\n\t\tsource,\n\t\ttype,\n\t\tchannelId,\n\t\tserverId,\n\t\tworldId,\n\t}: Room): Promise<UUID> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst newRoomId = id || v4();\n\t\t\tawait this.db\n\t\t\t\t.insert(roomTable)\n\t\t\t\t.values({\n\t\t\t\t\tid: newRoomId,\n\t\t\t\t\tname,\n\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t\tsource,\n\t\t\t\t\ttype,\n\t\t\t\t\tchannelId,\n\t\t\t\t\tserverId,\n\t\t\t\t\tworldId,\n\t\t\t\t})\n\t\t\t\t.onConflictDoNothing({ target: roomTable.id });\n\t\t\treturn newRoomId as UUID;\n\t\t});\n\t}\n\n\tasync deleteRoom(roomId: UUID): Promise<void> {\n\t\tif (!roomId) throw new Error(\"Room ID is required\");\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\tawait tx.delete(roomTable).where(eq(roomTable.id, roomId));\n\t\t\t});\n\t\t});\n\t}\n\n\tasync getRoomsForParticipant(entityId: UUID): Promise<UUID[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({ roomId: participantTable.roomId })\n\t\t\t\t.from(participantTable)\n\t\t\t\t.innerJoin(roomTable, eq(participantTable.roomId, roomTable.id))\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(participantTable.entityId, entityId),\n\t\t\t\t\t\teq(roomTable.agentId, this.agentId),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\treturn result.map((row) => row.roomId as UUID);\n\t\t});\n\t}\n\n\tasync getRoomsForParticipants(entityIds: UUID[]): Promise<UUID[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.selectDistinct({ roomId: participantTable.roomId })\n\t\t\t\t.from(participantTable)\n\t\t\t\t.innerJoin(roomTable, eq(participantTable.roomId, roomTable.id))\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\tinArray(participantTable.entityId, entityIds),\n\t\t\t\t\t\teq(roomTable.agentId, this.agentId),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\treturn result.map((row) => row.roomId as UUID);\n\t\t});\n\t}\n\n\tasync addParticipant(entityId: UUID, roomId: UUID): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db\n\t\t\t\t\t.insert(participantTable)\n\t\t\t\t\t.values({\n\t\t\t\t\t\tentityId,\n\t\t\t\t\t\troomId,\n\t\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t\t})\n\t\t\t\t\t.onConflictDoNothing();\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error adding participant\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tentityId,\n\t\t\t\t\troomId,\n\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync removeParticipant(entityId: UUID, roomId: UUID): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await this.db.transaction(async (tx) => {\n\t\t\t\t\treturn await tx\n\t\t\t\t\t\t.delete(participantTable)\n\t\t\t\t\t\t.where(\n\t\t\t\t\t\t\tand(\n\t\t\t\t\t\t\t\teq(participantTable.entityId, entityId),\n\t\t\t\t\t\t\t\teq(participantTable.roomId, roomId),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.returning();\n\t\t\t\t});\n\n\t\t\t\tconst removed = result.length > 0;\n\t\t\t\tlogger.debug(`Participant ${removed ? \"removed\" : \"not found\"}:`, {\n\t\t\t\t\tentityId,\n\t\t\t\t\troomId,\n\t\t\t\t\tremoved,\n\t\t\t\t});\n\n\t\t\t\treturn removed;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to remove participant:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tentityId,\n\t\t\t\t\troomId,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync getParticipantsForEntity(entityId: UUID): Promise<Participant[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({\n\t\t\t\t\tid: participantTable.id,\n\t\t\t\t\tentityId: participantTable.entityId,\n\t\t\t\t\troomId: participantTable.roomId,\n\t\t\t\t})\n\t\t\t\t.from(participantTable)\n\t\t\t\t.where(eq(participantTable.entityId, entityId));\n\n\t\t\tconst entity = await this.getEntityById(entityId);\n\n\t\t\tif (!entity) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn result.map((row) => ({\n\t\t\t\tid: row.id as UUID,\n\t\t\t\tentity: entity,\n\t\t\t}));\n\t\t});\n\t}\n\n\tasync getParticipantsForRoom(roomId: UUID): Promise<UUID[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({ entityId: participantTable.entityId })\n\t\t\t\t.from(participantTable)\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(participantTable.roomId, roomId),\n\t\t\t\t\t\teq(participantTable.agentId, this.agentId),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\treturn result.map((row) => row.entityId as UUID);\n\t\t});\n\t}\n\n\tasync getParticipantUserState(\n\t\troomId: UUID,\n\t\tentityId: UUID,\n\t): Promise<\"FOLLOWED\" | \"MUTED\" | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select({ roomState: participantTable.roomState })\n\t\t\t\t.from(participantTable)\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(participantTable.roomId, roomId),\n\t\t\t\t\t\teq(participantTable.entityId, entityId),\n\t\t\t\t\t\teq(participantTable.agentId, this.agentId),\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.limit(1);\n\n\t\t\treturn (result[0]?.roomState as \"FOLLOWED\" | \"MUTED\" | null) ?? null;\n\t\t});\n\t}\n\n\tasync setParticipantUserState(\n\t\troomId: UUID,\n\t\tentityId: UUID,\n\t\tstate: \"FOLLOWED\" | \"MUTED\" | null,\n\t): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.update(participantTable)\n\t\t\t\t\t\t.set({ roomState: state })\n\t\t\t\t\t\t.where(\n\t\t\t\t\t\t\tand(\n\t\t\t\t\t\t\t\teq(participantTable.roomId, roomId),\n\t\t\t\t\t\t\t\teq(participantTable.entityId, entityId),\n\t\t\t\t\t\t\t\teq(participantTable.agentId, this.agentId),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to set participant user state:\", {\n\t\t\t\t\troomId,\n\t\t\t\t\tentityId,\n\t\t\t\t\tstate,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync createRelationship(params: {\n\t\tsourceEntityId: UUID;\n\t\ttargetEntityId: UUID;\n\t\ttags?: string[];\n\t\tmetadata?: { [key: string]: unknown };\n\t}): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst id = v4();\n\t\t\tconst saveParams = {\n\t\t\t\tid,\n\t\t\t\tsourceEntityId: params.sourceEntityId,\n\t\t\t\ttargetEntityId: params.targetEntityId,\n\t\t\t\tagentId: this.agentId,\n\t\t\t\ttags: params.tags || [],\n\t\t\t\tmetadata: params.metadata || {},\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tawait this.db.insert(relationshipTable).values(saveParams);\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error creating relationship:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tsaveParams,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync updateRelationship(relationship: Relationship): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db\n\t\t\t\t\t.update(relationshipTable)\n\t\t\t\t\t.set({\n\t\t\t\t\t\ttags: relationship.tags || [],\n\t\t\t\t\t\tmetadata: relationship.metadata || {},\n\t\t\t\t\t})\n\t\t\t\t\t.where(eq(relationshipTable.id, relationship.id));\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error updating relationship:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\trelationship,\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync getRelationship(params: {\n\t\tsourceEntityId: UUID;\n\t\ttargetEntityId: UUID;\n\t}): Promise<Relationship | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.select()\n\t\t\t\t\t.from(relationshipTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(\n\t\t\t\t\t\t\teq(relationshipTable.sourceEntityId, params.sourceEntityId),\n\t\t\t\t\t\t\teq(relationshipTable.targetEntityId, params.targetEntityId),\n\t\t\t\t\t\t\teq(relationshipTable.agentId, this.agentId),\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\t.limit(1);\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tid: result[0].id,\n\t\t\t\t\tsourceEntityId: result[0].sourceEntityId,\n\t\t\t\t\ttargetEntityId: result[0].targetEntityId,\n\t\t\t\t\tagentId: result[0].agentId,\n\t\t\t\t\ttags: result[0].tags || [],\n\t\t\t\t\tmetadata: result[0].metadata || {},\n\t\t\t\t\tcreatedAt: result[0].createdAt?.toString(),\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error getting relationship:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tparams,\n\t\t\t\t});\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync getRelationships(params: {\n\t\tentityId: UUID;\n\t\ttags?: string[];\n\t}): Promise<Relationship[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tlet query = this.db\n\t\t\t\t\t.select()\n\t\t\t\t\t.from(relationshipTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(\n\t\t\t\t\t\t\tor(\n\t\t\t\t\t\t\t\teq(relationshipTable.sourceEntityId, params.entityId),\n\t\t\t\t\t\t\t\teq(relationshipTable.targetEntityId, params.entityId),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\teq(relationshipTable.agentId, this.agentId),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t// Filter by tags if provided\n\t\t\t\tif (params.tags && params.tags.length > 0) {\n\t\t\t\t\t// Filter by tags - find tasks that have ALL of the specified tags\n\t\t\t\t\t// Using @> operator which checks if left array contains all elements from right array\n\t\t\t\t\tconst tagParams = params.tags\n\t\t\t\t\t\t.map((tag) => `'${tag.replace(/'/g, \"''\")}'`)\n\t\t\t\t\t\t.join(\", \");\n\t\t\t\t\tquery = query.where(\n\t\t\t\t\t\tsql`${relationshipTable.tags} @> ARRAY[${sql.raw(\n\t\t\t\t\t\t\ttagParams,\n\t\t\t\t\t\t)}]::text[]`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst results = await query;\n\n\t\t\t\treturn results.map((result) => ({\n\t\t\t\t\tid: result.id,\n\t\t\t\t\tsourceEntityId: result.sourceEntityId,\n\t\t\t\t\ttargetEntityId: result.targetEntityId,\n\t\t\t\t\tagentId: result.agentId,\n\t\t\t\t\ttags: result.tags || [],\n\t\t\t\t\tmetadata: result.metadata || {},\n\t\t\t\t\tcreatedAt: result.createdAt?.toString(),\n\t\t\t\t}));\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error getting relationships:\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tparams,\n\t\t\t\t});\n\t\t\t\treturn [];\n\t\t\t}\n\t\t});\n\t}\n\n\tasync getCache<T>(key: string): Promise<T | undefined> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.select()\n\t\t\t\t\t.from(cacheTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(eq(cacheTable.agentId, this.agentId), eq(cacheTable.key, key)),\n\t\t\t\t\t);\n\n\t\t\t\treturn result[0]?.value as T | undefined;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error fetching cache\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tkey: key,\n\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t});\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync setCache<T>(key: string, value: T): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.insert(cacheTable)\n\t\t\t\t\t\t.values({\n\t\t\t\t\t\t\tkey: key,\n\t\t\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.onConflictDoUpdate({\n\t\t\t\t\t\t\ttarget: [cacheTable.key, cacheTable.agentId],\n\t\t\t\t\t\t\tset: {\n\t\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error setting cache\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tkey: key,\n\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync deleteCache(key: string): Promise<boolean> {\n\t\treturn this.withDatabase(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.db.transaction(async (tx) => {\n\t\t\t\t\tawait tx\n\t\t\t\t\t\t.delete(cacheTable)\n\t\t\t\t\t\t.where(\n\t\t\t\t\t\t\tand(\n\t\t\t\t\t\t\t\teq(cacheTable.agentId, this.agentId),\n\t\t\t\t\t\t\t\teq(cacheTable.key, key),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error deleting cache\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tkey: key,\n\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tasync createWorld(world: World): Promise<UUID> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst newWorldId = world.id || v4();\n\t\t\tawait this.db.insert(worldTable).values({\n\t\t\t\t...world,\n\t\t\t\tid: newWorldId,\n\t\t\t});\n\t\t\treturn newWorldId;\n\t\t});\n\t}\n\n\tasync getWorld(id: UUID): Promise<World | null> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select()\n\t\t\t\t.from(worldTable)\n\t\t\t\t.where(eq(worldTable.id, id));\n\t\t\treturn result[0] as World | null;\n\t\t});\n\t}\n\n\tasync getAllWorlds(): Promise<World[]> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tconst result = await this.db\n\t\t\t\t.select()\n\t\t\t\t.from(worldTable)\n\t\t\t\t.where(eq(worldTable.agentId, this.agentId));\n\t\t\treturn result as World[];\n\t\t});\n\t}\n\n\tasync updateWorld(world: World): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db\n\t\t\t\t.update(worldTable)\n\t\t\t\t.set(world)\n\t\t\t\t.where(eq(worldTable.id, world.id));\n\t\t});\n\t}\n\n\tasync removeWorld(id: UUID): Promise<void> {\n\t\treturn this.withDatabase(async () => {\n\t\t\tawait this.db.delete(worldTable).where(eq(worldTable.id, id));\n\t\t});\n\t}\n\n\t/**\n\t * Creates a new task in the database.\n\t * @param task The task object to create\n\t * @returns Promise resolving to the UUID of the created task\n\t */\n\tasync createTask(task: Task): Promise<UUID> {\n\t\treturn this.withRetry(async () => {\n\t\t\treturn this.withDatabase(async () => {\n\t\t\t\tconst now = new Date();\n\t\t\t\tconst metadata = task.metadata || {};\n\n\t\t\t\tconst values = {\n\t\t\t\t\tid: task.id as UUID,\n\t\t\t\t\tname: task.name,\n\t\t\t\t\tdescription: task.description,\n\t\t\t\t\troomId: task.roomId,\n\t\t\t\t\tworldId: task.worldId,\n\t\t\t\t\ttags: task.tags,\n\t\t\t\t\tmetadata: metadata,\n\t\t\t\t\tcreatedAt: now,\n\t\t\t\t\tupdatedAt: now,\n\t\t\t\t\tagentId: this.agentId,\n\t\t\t\t};\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.insert(taskTable)\n\t\t\t\t\t.values(values)\n\t\t\t\t\t.returning({ id: taskTable.id });\n\n\t\t\t\treturn result[0].id;\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves tasks based on specified parameters.\n\t * @param params Object containing optional roomId and tags to filter tasks\n\t * @returns Promise resolving to an array of Task objects\n\t */\n\tasync getTasks(params: { roomId?: UUID; tags?: string[] }): Promise<Task[]> {\n\t\treturn this.withRetry(async () => {\n\t\t\treturn this.withDatabase(async () => {\n\t\t\t\tlet query = this.db\n\t\t\t\t\t.select()\n\t\t\t\t\t.from(taskTable)\n\t\t\t\t\t.where(eq(taskTable.agentId, this.agentId));\n\n\t\t\t\t// Apply filters if provided\n\t\t\t\tif (params.roomId) {\n\t\t\t\t\tquery = query.where(eq(taskTable.roomId, params.roomId));\n\t\t\t\t}\n\n\t\t\t\tif (params.tags && params.tags.length > 0) {\n\t\t\t\t\t// Filter by tags - find tasks that have ALL of the specified tags\n\t\t\t\t\t// Using @> operator which checks if left array contains all elements from right array\n\t\t\t\t\tconst tagParams = params.tags\n\t\t\t\t\t\t.map((tag) => `'${tag.replace(/'/g, \"''\")}'`)\n\t\t\t\t\t\t.join(\", \");\n\t\t\t\t\tquery = query.where(\n\t\t\t\t\t\tsql`${taskTable.tags} @> ARRAY[${sql.raw(tagParams)}]::text[]`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst result = await query;\n\n\t\t\t\treturn result.map((row) => ({\n\t\t\t\t\tid: row.id,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tdescription: row.description,\n\t\t\t\t\troomId: row.roomId,\n\t\t\t\t\tworldId: row.worldId,\n\t\t\t\t\ttags: row.tags,\n\t\t\t\t\tmetadata: row.metadata,\n\t\t\t\t}));\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves a specific task by its name.\n\t * @param name The name of the task to retrieve\n\t * @returns Promise resolving to the Task object if found, null otherwise\n\t */\n\tasync getTasksByName(name: string): Promise<Task[]> {\n\t\treturn this.withRetry(async () => {\n\t\t\treturn this.withDatabase(async () => {\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.select()\n\t\t\t\t\t.from(taskTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(eq(taskTable.name, name), eq(taskTable.agentId, this.agentId)),\n\t\t\t\t\t);\n\n\t\t\t\treturn result.map((row) => ({\n\t\t\t\t\tid: row.id,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tdescription: row.description,\n\t\t\t\t\troomId: row.roomId,\n\t\t\t\t\tworldId: row.worldId,\n\t\t\t\t\ttags: row.tags || [],\n\t\t\t\t\tmetadata: row.metadata || {},\n\t\t\t\t}));\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves a specific task by its ID.\n\t * @param id The UUID of the task to retrieve\n\t * @returns Promise resolving to the Task object if found, null otherwise\n\t */\n\tasync getTask(id: UUID): Promise<Task | null> {\n\t\treturn this.withRetry(async () => {\n\t\t\treturn this.withDatabase(async () => {\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.select()\n\t\t\t\t\t.from(taskTable)\n\t\t\t\t\t.where(and(eq(taskTable.id, id), eq(taskTable.agentId, this.agentId)))\n\t\t\t\t\t.limit(1);\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst row = result[0];\n\t\t\t\treturn {\n\t\t\t\t\tid: row.id,\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tdescription: row.description,\n\t\t\t\t\troomId: row.roomId,\n\t\t\t\t\tworldId: row.worldId,\n\t\t\t\t\ttags: row.tags || [],\n\t\t\t\t\tmetadata: row.metadata || {},\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Updates an existing task in the database.\n\t * @param id The UUID of the task to update\n\t * @param task Partial Task object containing the fields to update\n\t * @returns Promise resolving when the update is complete\n\t */\n\tasync updateTask(id: UUID, task: Partial<Task>): Promise<void> {\n\t\tawait this.withRetry(async () => {\n\t\t\tawait this.withDatabase(async () => {\n\t\t\t\tconst updateValues: Partial<Task> = {};\n\n\t\t\t\t// Add fields to update if they exist in the partial task object\n\t\t\t\tif (task.name !== undefined) updateValues.name = task.name;\n\t\t\t\tif (task.description !== undefined)\n\t\t\t\t\tupdateValues.description = task.description;\n\t\t\t\tif (task.roomId !== undefined) updateValues.roomId = task.roomId;\n\t\t\t\tif (task.worldId !== undefined) updateValues.worldId = task.worldId;\n\t\t\t\tif (task.tags !== undefined) updateValues.tags = task.tags;\n\n\t\t\t\ttask.updatedAt = Date.now();\n\n\t\t\t\t// Handle metadata updates\n\t\t\t\tif (task.metadata) {\n\t\t\t\t\t// Get current task to merge metadata\n\t\t\t\t\tconst currentTask = await this.getTask(id);\n\t\t\t\t\tif (currentTask) {\n\t\t\t\t\t\tconst currentMetadata = currentTask.metadata || {};\n\t\t\t\t\t\tconst newMetadata = {\n\t\t\t\t\t\t\t...currentMetadata,\n\t\t\t\t\t\t\t...task.metadata,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tupdateValues.metadata = newMetadata;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tupdateValues.metadata = {\n\t\t\t\t\t\t\t...task.metadata,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tawait this.db\n\t\t\t\t\t.update(taskTable)\n\t\t\t\t\t.set(updateValues)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(eq(taskTable.id, id), eq(taskTable.agentId, this.agentId)),\n\t\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Deletes a task from the database.\n\t * @param id The UUID of the task to delete\n\t * @returns Promise resolving when the deletion is complete\n\t */\n\tasync deleteTask(id: UUID): Promise<void> {\n\t\tawait this.withRetry(async () => {\n\t\t\tawait this.withDatabase(async () => {\n\t\t\t\tawait this.db\n\t\t\t\t\t.delete(taskTable)\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(eq(taskTable.id, id), eq(taskTable.agentId, this.agentId)),\n\t\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n}\n","import { sql } from \"drizzle-orm\";\nimport {\n\tcheck,\n\tforeignKey,\n\tindex,\n\tpgTable,\n\tuuid,\n\tvector,\n} from \"drizzle-orm/pg-core\";\nimport { memoryTable } from \"./memory\";\nimport { numberTimestamp } from \"./types\";\n\nexport const VECTOR_DIMS = {\n\tSMALL: 384,\n\tMEDIUM: 512,\n\tLARGE: 768,\n\tXL: 1024,\n\tXXL: 1536,\n\tXXXL: 3072,\n} as const;\n\nexport const DIMENSION_MAP = {\n\t[VECTOR_DIMS.SMALL]: \"dim384\",\n\t[VECTOR_DIMS.MEDIUM]: \"dim512\",\n\t[VECTOR_DIMS.LARGE]: \"dim768\",\n\t[VECTOR_DIMS.XL]: \"dim1024\",\n\t[VECTOR_DIMS.XXL]: \"dim1536\",\n\t[VECTOR_DIMS.XXXL]: \"dim3072\",\n} as const;\n\n/**\n * Definition of the embeddings table in the database.\n * Contains columns for ID, Memory ID, Creation Timestamp, and multiple vector dimensions.\n */\nexport const embeddingTable = pgTable(\n\t\"embeddings\",\n\t{\n\t\tid: uuid(\"id\").primaryKey().defaultRandom().notNull(),\n\t\tmemoryId: uuid(\"memory_id\").references(() => memoryTable.id),\n\t\tcreatedAt: numberTimestamp(\"created_at\").default(sql`now()`).notNull(),\n\t\tdim384: vector(\"dim_384\", { dimensions: VECTOR_DIMS.SMALL }),\n\t\tdim512: vector(\"dim_512\", { dimensions: VECTOR_DIMS.MEDIUM }),\n\t\tdim768: vector(\"dim_768\", { dimensions: VECTOR_DIMS.LARGE }),\n\t\tdim1024: vector(\"dim_1024\", { dimensions: VECTOR_DIMS.XL }),\n\t\tdim1536: vector(\"dim_1536\", { dimensions: VECTOR_DIMS.XXL }),\n\t\tdim3072: vector(\"dim_3072\", { dimensions: VECTOR_DIMS.XXXL }),\n\t},\n\t(table) => [\n\t\tcheck(\"embedding_source_check\", sql`\"memory_id\" IS NOT NULL`),\n\t\tindex(\"idx_embedding_memory\").on(table.memoryId),\n\t\tforeignKey({\n\t\t\tname: \"fk_embedding_memory\",\n\t\t\tcolumns: [table.memoryId],\n\t\t\tforeignColumns: [memoryTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t],\n);\n\n/**\n * Defines the possible values for the Embedding Dimension Column.\n * It can be \"dim384\", \"dim512\", \"dim768\", \"dim1024\", \"dim1536\", or \"dim3072\".\n */\nexport type EmbeddingDimensionColumn =\n\t| \"dim384\"\n\t| \"dim512\"\n\t| \"dim768\"\n\t| \"dim1024\"\n\t| \"dim1536\"\n\t| \"dim3072\";\n\n/**\n * Retrieve the type of a specific column in the EmbeddingTable based on the EmbeddingDimensionColumn key.\n */\nexport type EmbeddingTableColumn =\n\t(typeof embeddingTable._.columns)[EmbeddingDimensionColumn];\n","import { relations, sql } from \"drizzle-orm\";\nimport {\n\tboolean,\n\tcheck,\n\tforeignKey,\n\tindex,\n\tjsonb,\n\tpgTable,\n\ttext,\n\tunique,\n\tuuid,\n\tvector,\n} from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { embeddingTable } from \"./embedding\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Definition of the memory table in the database.\n *\n * @param {string} tableName - The name of the table.\n * @param {object} columns - An object containing the column definitions.\n * @param {function} indexes - A function that defines the indexes for the table.\n * @returns {object} - The memory table object.\n */\nexport const memoryTable = pgTable(\n\t\"memories\",\n\t{\n\t\tid: uuid(\"id\").primaryKey().notNull(),\n\t\ttype: text(\"type\").notNull(),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\tcontent: jsonb(\"content\").notNull(),\n\t\tentityId: uuid(\"entityId\").references(() => entityTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\tagentId: uuid(\"agentId\").references(() => agentTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\troomId: uuid(\"roomId\").references(() => roomTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\tunique: boolean(\"unique\").default(true).notNull(),\n\t\tmetadata: jsonb(\"metadata\").default({}).notNull(),\n\t},\n\t(table) => [\n\t\tindex(\"idx_memories_type_room\").on(table.type, table.roomId),\n\t\tforeignKey({\n\t\t\tname: \"fk_room\",\n\t\t\tcolumns: [table.roomId],\n\t\t\tforeignColumns: [roomTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tname: \"fk_user\",\n\t\t\tcolumns: [table.entityId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tname: \"fk_agent\",\n\t\t\tcolumns: [table.agentId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tindex(\"idx_memories_metadata_type\").on(sql`((metadata->>'type'))`),\n\t\tindex(\"idx_memories_document_id\").on(sql`((metadata->>'documentId'))`),\n\t\tindex(\"idx_fragments_order\").on(\n\t\t\tsql`((metadata->>'documentId'))`,\n\t\t\tsql`((metadata->>'position'))`,\n\t\t),\n\t\tcheck(\n\t\t\t\"fragment_metadata_check\",\n\t\t\tsql`\n CASE \n WHEN metadata->>'type' = 'fragment' THEN\n metadata ? 'documentId' AND \n metadata ? 'position'\n ELSE true\n END\n `,\n\t\t),\n\t\tcheck(\n\t\t\t\"document_metadata_check\",\n\t\t\tsql`\n CASE \n WHEN metadata->>'type' = 'document' THEN\n metadata ? 'timestamp'\n ELSE true\n END\n `,\n\t\t),\n\t],\n);\n\nexport const memoryRelations = relations(memoryTable, ({ one }) => ({\n\tembedding: one(embeddingTable),\n}));\n","import type { MessageExample } from \"@elizaos/core\";\nimport { sql } from \"drizzle-orm\";\nimport {\n\tboolean,\n\tjsonb,\n\tpgTable,\n\ttext,\n\tunique,\n\tuuid,\n} from \"drizzle-orm/pg-core\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Represents a table for storing agent data.\n *\n * @type {Table}\n */\nexport const agentTable = pgTable(\n\t\"agents\",\n\t{\n\t\tid: uuid(\"id\").primaryKey().defaultRandom(),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\n\t\tupdatedAt: numberTimestamp(\"updatedAt\").default(sql`now()`).notNull(),\n\n\t\tenabled: boolean(\"enabled\").default(true).notNull(),\n\n\t\t// Character\n\t\tname: text(\"name\"),\n\t\tusername: text(\"username\"),\n\t\tsystem: text(\"system\"),\n\t\tbio: jsonb(\"bio\").$type<string | string[]>().notNull(),\n\t\tmessageExamples: jsonb(\"message_examples\")\n\t\t\t.$type<MessageExample[][]>()\n\t\t\t.default(sql`'[]'::jsonb`),\n\t\tpostExamples: jsonb(\"post_examples\")\n\t\t\t.$type<string[]>()\n\t\t\t.default(sql`'[]'::jsonb`),\n\t\ttopics: jsonb(\"topics\").$type<string[]>().default(sql`'[]'::jsonb`),\n\t\tadjectives: jsonb(\"adjectives\").$type<string[]>().default(sql`'[]'::jsonb`),\n\t\tknowledge: jsonb(\"knowledge\")\n\t\t\t.$type<(string | { path: string; shared?: boolean })[]>()\n\t\t\t.default(sql`'[]'::jsonb`),\n\t\tplugins: jsonb(\"plugins\").$type<string[]>().default(sql`'[]'::jsonb`),\n\t\tsettings: jsonb(\"settings\")\n\t\t\t.$type<{\n\t\t\t\tsecrets?: { [key: string]: string | boolean | number };\n\t\t\t\t[key: string]: unknown;\n\t\t\t}>()\n\t\t\t.default(sql`'{}'::jsonb`),\n\t\tstyle: jsonb(\"style\")\n\t\t\t.$type<{\n\t\t\t\tall?: string[];\n\t\t\t\tchat?: string[];\n\t\t\t\tpost?: string[];\n\t\t\t}>()\n\t\t\t.default(sql`'{}'::jsonb`),\n\t},\n\t(table) => {\n\t\treturn {\n\t\t\tnameUnique: unique(\"name_unique\").on(table.name),\n\t\t};\n\t},\n);\n","import { customType } from \"drizzle-orm/pg-core\";\n\nexport const stringJsonb = customType<{ data: string; driverData: string }>({\n\tdataType() {\n\t\treturn \"jsonb\";\n\t},\n\ttoDriver(value: string): string {\n\t\treturn JSON.stringify(value);\n\t},\n\tfromDriver(value: string): string {\n\t\treturn JSON.stringify(value);\n\t},\n});\n\n/**\n * Represents a custom type for converting a number to a timestamp string and vice versa.\n * @param {Object} options - The options for the custom type.\n * @param {Function} options.dataType - A function that returns the data type as \"timestamptz\".\n * @param {Function} options.toDriver - A function that converts a number to a timestamp string using the Date object's toISOString method.\n * @param {Function} options.fromDriver - A function that converts a timestamp string to a number using the Date object's getTime method.\n * @returns {Object} - The custom type for number to timestamp conversion.\n */\nexport const numberTimestamp = customType<{ data: number; driverData: string }>(\n\t{\n\t\tdataType() {\n\t\t\treturn \"timestamptz\";\n\t\t},\n\t\ttoDriver(value: number): string {\n\t\t\treturn new Date(value).toISOString();\n\t\t},\n\t\tfromDriver(value: string): number {\n\t\t\treturn new Date(value).getTime();\n\t\t},\n\t},\n);\n","import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, unique, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Represents an entity table in the database.\n * Includes columns for id, agentId, createdAt, names, and metadata.\n */\nexport const entityTable = pgTable(\n\t\"entities\",\n\t{\n\t\tid: uuid(\"id\").notNull().primaryKey(),\n\t\tagentId: uuid(\"agentId\")\n\t\t\t.notNull()\n\t\t\t.references(() => agentTable.id, {\n\t\t\t\tonDelete: \"cascade\",\n\t\t\t}),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\tnames: text(\"names\").array().default(sql`'{}'::text[]`),\n\t\tmetadata: jsonb(\"metadata\").default(sql`'{}'::jsonb`),\n\t},\n\t(table) => {\n\t\treturn {\n\t\t\tidAgentIdUnique: unique(\"id_agent_id_unique\").on(table.id, table.agentId),\n\t\t};\n\t},\n);\n","import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { numberTimestamp } from \"./types\";\nimport { worldTable } from \"./worldTable\";\n\n/**\n * Defines a table schema for 'rooms' in the database.\n *\n * @typedef {object} RoomTable\n * @property {string} id - The unique identifier for the room.\n * @property {string} agentId - The UUID of the agent associated with the room.\n * @property {string} source - The source of the room.\n * @property {string} type - The type of the room.\n * @property {string} serverId - The server ID of the room.\n * @property {string} worldId - The UUID of the world associated with the room.\n * @property {string} name - The name of the room.\n * @property {object} metadata - Additional metadata for the room in JSON format.\n * @property {string} channelId - The channel ID of the room.\n * @property {number} createdAt - The timestamp of when the room was created.\n */\nexport const roomTable = pgTable(\"rooms\", {\n\tid: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n\tagentId: uuid(\"agentId\").references(() => agentTable.id, {\n\t\tonDelete: \"cascade\",\n\t}),\n\tsource: text(\"source\").notNull(),\n\ttype: text(\"type\").notNull(),\n\tserverId: text(\"serverId\"),\n\tworldId: uuid(\"worldId\").references(() => worldTable.id, {\n\t\tonDelete: \"cascade\",\n\t}),\n\tname: text(\"name\"),\n\tmetadata: jsonb(\"metadata\"),\n\tchannelId: text(\"channelId\"),\n\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n});\n","import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { numberTimestamp } from \"./types\";\n\nexport const worldTable = pgTable(\"worlds\", {\n\tid: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n\tagentId: uuid(\"agentId\")\n\t\t.notNull()\n\t\t.references(() => agentTable.id, { onDelete: \"cascade\" }),\n\tname: text(\"name\").notNull(),\n\tmetadata: jsonb(\"metadata\"),\n\tserverId: text(\"serverId\").notNull(),\n\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n});\n","import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, unique, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Represents a PostgreSQL table for caching data.\n *\n * @type {pgTable}\n */\nexport const cacheTable = pgTable(\n\t\"cache\",\n\t{\n\t\tid: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n\t\tkey: text(\"key\").notNull(),\n\t\tagentId: uuid(\"agentId\")\n\t\t\t.notNull()\n\t\t\t.references(() => agentTable.id, { onDelete: \"cascade\" }),\n\t\tvalue: jsonb(\"value\").notNull(),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\texpiresAt: numberTimestamp(\"expiresAt\"),\n\t},\n\t(table) => [unique(\"cache_key_agent_unique\").on(table.key, table.agentId)],\n);\n","import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { numberTimestamp } from \"./types\";\nimport { worldTable } from \"./worldTable\";\n\n/**\n * Definition of a table representing components in the database.\n *\n * @type {Table}\n */\nexport const componentTable = pgTable(\"components\", {\n\tid: uuid(\"id\").primaryKey().defaultRandom(),\n\tentityId: uuid(\"entityId\")\n\t\t.notNull()\n\t\t.references(() => entityTable.id, { onDelete: \"cascade\" }),\n\tagentId: uuid(\"agentId\")\n\t\t.notNull()\n\t\t.references(() => agentTable.id, { onDelete: \"cascade\" }),\n\troomId: uuid(\"roomId\")\n\t\t.notNull()\n\t\t.references(() => roomTable.id, { onDelete: \"cascade\" }),\n\tworldId: uuid(\"worldId\").references(() => worldTable.id, {\n\t\tonDelete: \"cascade\",\n\t}),\n\tsourceEntityId: uuid(\"sourceEntityId\").references(() => entityTable.id, {\n\t\tonDelete: \"cascade\",\n\t}),\n\ttype: text(\"type\").notNull(),\n\tdata: jsonb(\"data\").default(sql`'{}'::jsonb`),\n\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n});\n","import { sql } from \"drizzle-orm\";\nimport { foreignKey, jsonb, pgTable, text, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Represents a table in the database for storing goals.\n *\n * @type {Table}\n */\nexport const goalTable = pgTable(\n\t\"goals\",\n\t{\n\t\tid: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\tentityId: uuid(\"entityId\").references(() => entityTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\tagentId: uuid(\"agentId\").references(() => agentTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\tname: text(\"name\"),\n\t\tstatus: text(\"status\"),\n\t\tdescription: text(\"description\"),\n\t\troomId: uuid(\"roomId\").references(() => roomTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\tobjectives: jsonb(\"objectives\").default(\"[]\").notNull(),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tname: \"fk_room\",\n\t\t\tcolumns: [table.roomId],\n\t\t\tforeignColumns: [roomTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tname: \"fk_user\",\n\t\t\tcolumns: [table.entityId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t],\n);\n","import { sql } from \"drizzle-orm\";\nimport { foreignKey, jsonb, pgTable, text, uuid } from \"drizzle-orm/pg-core\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Represents a PostgreSQL table for storing logs.\n *\n * @type {Table}\n */\n\nexport const logTable = pgTable(\n\t\"logs\",\n\t{\n\t\tid: uuid(\"id\").defaultRandom().notNull(),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\tentityId: uuid(\"entityId\")\n\t\t\t.notNull()\n\t\t\t.references(() => entityTable.id),\n\t\tbody: jsonb(\"body\").notNull(),\n\t\ttype: text(\"type\").notNull(),\n\t\troomId: uuid(\"roomId\")\n\t\t\t.notNull()\n\t\t\t.references(() => roomTable.id),\n\t},\n\t(table) => [\n\t\tforeignKey({\n\t\t\tname: \"fk_room\",\n\t\t\tcolumns: [table.roomId],\n\t\t\tforeignColumns: [roomTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tname: \"fk_user\",\n\t\t\tcolumns: [table.entityId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t],\n);\n","import { sql } from \"drizzle-orm\";\nimport {\n\tforeignKey,\n\tindex,\n\tpgTable,\n\ttext,\n\tunique,\n\tuuid,\n} from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Defines the schema for the \"participants\" table in the database.\n *\n * @type {import('knex').TableBuilder}\n */\nexport const participantTable = pgTable(\n\t\"participants\",\n\t{\n\t\tid: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\tentityId: uuid(\"entityId\").references(() => entityTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\troomId: uuid(\"roomId\").references(() => roomTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\tagentId: uuid(\"agentId\").references(() => agentTable.id, {\n\t\t\tonDelete: \"cascade\",\n\t\t}),\n\t\troomState: text(\"roomState\"),\n\t},\n\t(table) => [\n\t\t// unique(\"participants_user_room_agent_unique\").on(table.entityId, table.roomId, table.agentId),\n\t\tindex(\"idx_participants_user\").on(table.entityId),\n\t\tindex(\"idx_participants_room\").on(table.roomId),\n\t\tforeignKey({\n\t\t\tname: \"fk_room\",\n\t\t\tcolumns: [table.roomId],\n\t\t\tforeignColumns: [roomTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tname: \"fk_user\",\n\t\t\tcolumns: [table.entityId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t],\n);\n","import { sql } from \"drizzle-orm\";\nimport {\n\tforeignKey,\n\tindex,\n\tjsonb,\n\tpgTable,\n\ttext,\n\tunique,\n\tuuid,\n} from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { entityTable } from \"./entity\";\nimport { numberTimestamp } from \"./types\";\n\n/**\n * Defines the relationshipTable containing information about relationships between entities and agents.\n * @type {import('knex').TableBuilder}\n */\nexport const relationshipTable = pgTable(\n\t\"relationships\",\n\t{\n\t\tid: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n\t\tcreatedAt: numberTimestamp(\"createdAt\").default(sql`now()`).notNull(),\n\t\tsourceEntityId: uuid(\"sourceEntityId\")\n\t\t\t.notNull()\n\t\t\t.references(() => entityTable.id, { onDelete: \"cascade\" }),\n\t\ttargetEntityId: uuid(\"targetEntityId\")\n\t\t\t.notNull()\n\t\t\t.references(() => entityTable.id, { onDelete: \"cascade\" }),\n\t\tagentId: uuid(\"agentId\")\n\t\t\t.notNull()\n\t\t\t.references(() => agentTable.id, { onDelete: \"cascade\" }),\n\t\ttags: text(\"tags\").array(),\n\t\tmetadata: jsonb(\"metadata\"),\n\t},\n\t(table) => [\n\t\tindex(\"idx_relationships_users\").on(\n\t\t\ttable.sourceEntityId,\n\t\t\ttable.targetEntityId,\n\t\t),\n\t\tunique(\"unique_relationship\").on(\n\t\t\ttable.sourceEntityId,\n\t\t\ttable.targetEntityId,\n\t\t\ttable.agentId,\n\t\t),\n\t\tforeignKey({\n\t\t\tname: \"fk_user_a\",\n\t\t\tcolumns: [table.sourceEntityId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t\tforeignKey({\n\t\t\tname: \"fk_user_b\",\n\t\t\tcolumns: [table.targetEntityId],\n\t\t\tforeignColumns: [entityTable.id],\n\t\t}).onDelete(\"cascade\"),\n\t],\n);\n","import { jsonb, pgTable, text, timestamp, uuid } from \"drizzle-orm/pg-core\";\n\n/**\n * Represents a table schema for tasks in the database.\n *\n * @type {PgTable}\n */\nexport const taskTable = pgTable(\"tasks\", {\n\tid: uuid(\"id\").primaryKey().defaultRandom(),\n\tname: text(\"name\").notNull(),\n\tdescription: text(\"description\").notNull(),\n\troomId: uuid(\"room_id\"),\n\tworldId: uuid(\"world_id\"),\n\tagentId: uuid(\"agent_id\").notNull(),\n\ttags: text(\"tags\").array(),\n\tmetadata: jsonb(\"metadata\"),\n\tcreatedAt: timestamp(\"created_at\").defaultNow(),\n\tupdatedAt: timestamp(\"updated_at\").defaultNow(),\n});\n","import { type UUID, logger } from \"@elizaos/core\";\nimport { type NodePgDatabase, drizzle } from \"drizzle-orm/node-postgres\";\nimport { BaseDrizzleAdapter } from \"../base\";\nimport {\n\tDIMENSION_MAP,\n\ttype EmbeddingDimensionColumn,\n} from \"../schema/embedding\";\nimport type { PostgresConnectionManager } from \"./manager\";\n\n/**\n * Adapter class for interacting with a PostgreSQL database.\n * Extends BaseDrizzleAdapter<NodePgDatabase>.\n */\nexport class PgDatabaseAdapter extends BaseDrizzleAdapter<NodePgDatabase> {\n\tprotected embeddingDimension: EmbeddingDimensionColumn = DIMENSION_MAP[384];\n\n\t/**\n\t * Constructor for creating a new instance of a class.\n\t * @param {UUID} agentId - The unique identifier for the agent.\n\t * @param {PostgresConnectionManager} manager - The Postgres connection manager for the instance.\n\t */\n\tconstructor(\n\t\tagentId: UUID,\n\t\tprivate manager: PostgresConnectionManager,\n\t) {\n\t\tsuper(agentId);\n\t\tthis.manager = manager;\n\t}\n\n\t/**\n\t * Executes the provided operation with a database connection.\n\t *\n\t * @template T\n\t * @param {() => Promise<T>} operation - The operation to be executed with the database connection.\n\t * @returns {Promise<T>} A promise that resolves with the result of the operation.\n\t */\n\tprotected async withDatabase<T>(operation: () => Promise<T>): Promise<T> {\n\t\treturn await this.withRetry(async () => {\n\t\t\tconst client = await this.manager.getClient();\n\t\t\ttry {\n\t\t\t\tconst db = drizzle(client);\n\t\t\t\tthis.db = db;\n\n\t\t\t\treturn await operation();\n\t\t\t} finally {\n\t\t\t\tclient.release();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Asynchronously initializes the PgDatabaseAdapter by running migrations using the manager.\n\t * Logs a success message if initialization is successful, otherwise logs an error message.\n\t *\n\t * @returns {Promise<void>} A promise that resolves when initialization is complete.\n\t */\n\tasync init(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.manager.runMigrations();\n\t\t\tlogger.info(\"PgDatabaseAdapter initialized successfully\");\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Failed to initialize PgDatabaseAdapter:\", error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Asynchronously closes the manager associated with this instance.\n\t *\n\t * @returns A Promise that resolves once the manager is closed.\n\t */\n\tasync close(): Promise<void> {\n\t\tawait this.manager.close();\n\t}\n}\n"],"mappings":"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","names":["logger","logger","sql","sql","check","foreignKey","index","pgTable","uuid","vector","sql","boolean","jsonb","pgTable","text","uuid","sql","jsonb","pgTable","text","unique","uuid","pgTable","uuid","sql","text","jsonb","unique","sql","jsonb","pgTable","text","uuid","sql","jsonb","pgTable","text","uuid","pgTable","uuid","sql","text","jsonb","pgTable","uuid","sql","text","jsonb","pgTable","uuid","text","sql","jsonb","boolean","pgTable","uuid","sql","vector","check","index","foreignKey","sql","jsonb","pgTable","text","unique","uuid","pgTable","uuid","sql","text","jsonb","unique","sql","jsonb","pgTable","text","uuid","pgTable","uuid","text","jsonb","sql","sql","foreignKey","jsonb","pgTable","text","uuid","pgTable","uuid","sql","text","jsonb","foreignKey","sql","foreignKey","jsonb","pgTable","text","uuid","pgTable","uuid","sql","jsonb","text","foreignKey","sql","foreignKey","index","pgTable","text","uuid","pgTable","uuid","sql","text","index","foreignKey","sql","foreignKey","index","jsonb","pgTable","text","unique","uuid","pgTable","uuid","sql","text","jsonb","index","unique","foreignKey","jsonb","pgTable","text","uuid","sql","unique","logger","logger","drizzle","drizzle","logger","logger"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-sql",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.17",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@electric-sql/pglite": "^0.2.17",
|
|
26
|
-
"@elizaos/core": "^1.0.0-alpha.
|
|
26
|
+
"@elizaos/core": "^1.0.0-alpha.17",
|
|
27
27
|
"@types/pg": "8.11.10",
|
|
28
28
|
"drizzle-kit": "^0.30.4",
|
|
29
29
|
"drizzle-orm": "^0.39.1",
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"typescript": "5.8.2"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "0b3edd086c288fba8fe2bc29e191a55614b8e48c"
|
|
47
47
|
}
|