@elizaos/plugin-sql 1.0.0-alpha.2 → 1.0.0-alpha.21
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/README.md +4 -20
- package/dist/chunk-2FOOMI3E.js +372 -0
- package/dist/chunk-2FOOMI3E.js.map +1 -0
- package/dist/index.js +241 -485
- package/dist/index.js.map +1 -1
- package/dist/migrate.js +53 -0
- package/dist/migrate.js.map +1 -0
- package/package.json +9 -7
- package/dist/index.d.ts +0 -9
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/types.ts","../src/schema/memory.ts","../src/schema/entity.ts","../src/schema/agent.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-lite/manager.ts","../src/pg/adapter.ts","../src/pg/manager.ts"],"sourcesContent":["import {\n\ttype DatabaseAdapter,\n\ttype IAgentRuntime,\n\ttype IDatabaseAdapter,\n\tlogger,\n\ttype Plugin,\n\ttype UUID,\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\nlet pgLiteClientManager: PGliteClientManager;\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\tconst manager = new PostgresConnectionManager(config.postgresUrl);\n\t\treturn new PgDatabaseAdapter(agentId, manager);\n\t}\n\n\tconst dataDir = config.dataDir ?? \"../../pgLite\";\n\n\tif (!pgLiteClientManager) {\n\t\tpgLiteClientManager = new PGliteClientManager({ dataDir });\n\t}\n\treturn new PgliteDatabaseAdapter(agentId, pgLiteClientManager);\n}\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\"),\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 { logger, type UUID } from \"@elizaos/core\";\nimport { drizzle, type PgliteDatabase } 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\nexport class PgliteDatabaseAdapter extends BaseDrizzleAdapter<PgliteDatabase> {\n\tprivate manager: PGliteClientManager;\n\tprotected embeddingDimension: EmbeddingDimensionColumn = DIMENSION_MAP[384];\n\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\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\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\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\tlogger,\n\ttype Memory,\n\ttype Participant,\n\ttype Relationship,\n\ttype Room,\n\ttype Task,\n\ttype UUID,\n\ttype World,\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\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\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\tconstructor(agentId: UUID) {\n\t\tsuper();\n\t\tthis.agentId = agentId;\n\t}\n\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\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\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\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\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\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\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\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\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 account:\", {\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\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(tagParams)}]::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 {\n\tpgTable,\n\tuuid,\n\tvector,\n\tindex,\n\tforeignKey,\n\tcheck,\n} from \"drizzle-orm/pg-core\";\nimport { sql } from \"drizzle-orm\";\nimport { numberTimestamp } from \"./types\";\nimport { memoryTable } from \"./memory\";\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\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\nexport type EmbeddingDimensionColumn =\n\t| \"dim384\"\n\t| \"dim512\"\n\t| \"dim768\"\n\t| \"dim1024\"\n\t| \"dim1536\"\n\t| \"dim3072\";\n\nexport type EmbeddingTableColumn =\n\t(typeof embeddingTable._.columns)[EmbeddingDimensionColumn];\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\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 {\n\tpgTable,\n\tuuid,\n\ttext,\n\tjsonb,\n\tvector,\n\tindex,\n\tboolean,\n\tforeignKey,\n\tunique,\n\tcheck,\n} from \"drizzle-orm/pg-core\";\nimport { relations, sql } from \"drizzle-orm\";\nimport { numberTimestamp } from \"./types\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { embeddingTable } from \"./embedding\";\nimport { agentTable } from \"./agent\";\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 { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, unique, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { numberTimestamp } from \"./types\";\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 {\n\tboolean,\n\tjsonb,\n\tpgTable,\n\ttext,\n\tuuid,\n\tunique,\n} from \"drizzle-orm/pg-core\";\nimport { sql } from \"drizzle-orm\";\nimport { numberTimestamp } from \"./types\";\nimport type { MessageExample } from \"@elizaos/core\";\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 { 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\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 { jsonb, pgTable, text, uuid } from \"drizzle-orm/pg-core\";\nimport { sql } from \"drizzle-orm\";\nimport { numberTimestamp } from \"./types\";\nimport { agentTable } from \"./agent\";\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\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 { pgTable, uuid, jsonb, text } from \"drizzle-orm/pg-core\";\nimport { sql } from \"drizzle-orm\";\nimport { entityTable } from \"./entity\";\nimport { numberTimestamp } from \"./types\";\nimport { agentTable } from \"./agent\";\nimport { roomTable } from \"./room\";\nimport { worldTable } from \"./worldTable\";\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 { pgTable, uuid, text, jsonb, foreignKey } from \"drizzle-orm/pg-core\";\nimport { sql } from \"drizzle-orm\";\nimport { numberTimestamp } from \"./types\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { agentTable } from \"./agent\";\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 { pgTable, uuid, text, jsonb, foreignKey } from \"drizzle-orm/pg-core\";\nimport { sql } from \"drizzle-orm\";\nimport { numberTimestamp } from \"./types\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\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 {\n\tpgTable,\n\tuuid,\n\ttext,\n\tindex,\n\tforeignKey,\n\tunique,\n} from \"drizzle-orm/pg-core\";\nimport { sql } from \"drizzle-orm\";\nimport { numberTimestamp } from \"./types\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\nimport { agentTable } from \"./agent\";\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\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\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 { PGlite, type PGliteOptions } from \"@electric-sql/pglite\";\nimport { vector } from \"@electric-sql/pglite/vector\";\nimport { fuzzystrmatch } from \"@electric-sql/pglite/contrib/fuzzystrmatch\";\nimport { logger } from \"@elizaos/core\";\nimport type { IDatabaseClientManager } from \"../types\";\nimport { migrate } from \"drizzle-orm/pglite/migrator\";\nimport { fileURLToPath } from \"node:url\";\nimport path from \"node:path\";\nimport { drizzle } from \"drizzle-orm/pglite\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport class PGliteClientManager implements IDatabaseClientManager<PGlite> {\n\tprivate client: PGlite;\n\tprivate shuttingDown = false;\n\tprivate readonly shutdownTimeout = 800;\n\n\tconstructor(options: PGliteOptions) {\n\t\tthis.client = new PGlite({\n\t\t\t...options,\n\t\t\textensions: {\n\t\t\t\tvector,\n\t\t\t\tfuzzystrmatch,\n\t\t\t},\n\t\t});\n\t\tthis.setupShutdownHandlers();\n\t}\n\n\tpublic getConnection(): PGlite {\n\t\tif (this.shuttingDown) {\n\t\t\tthrow new Error(\"Client manager is shutting down\");\n\t\t}\n\t\treturn this.client;\n\t}\n\n\tprivate async gracefulShutdown() {\n\t\tif (this.shuttingDown) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.shuttingDown = true;\n\t\tlogger.info(\"Starting graceful shutdown of PGlite client...\");\n\n\t\tconst timeout = setTimeout(() => {\n\t\t\tlogger.warn(\n\t\t\t\t\"Shutdown timeout reached, forcing database connection closure...\",\n\t\t\t);\n\t\t\tthis.client.close().finally(() => {\n\t\t\t\tprocess.exit(1);\n\t\t\t});\n\t\t}, this.shutdownTimeout);\n\n\t\ttry {\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, this.shutdownTimeout));\n\t\t\tawait this.client.close();\n\t\t\tclearTimeout(timeout);\n\t\t\tlogger.info(\"PGlite client shutdown completed successfully\");\n\t\t\tprocess.exit(0);\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Error during graceful shutdown:\", error);\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\n\tprivate setupShutdownHandlers() {\n\t\tprocess.on(\"SIGINT\", async () => {\n\t\t\tawait this.gracefulShutdown();\n\t\t});\n\n\t\tprocess.on(\"SIGTERM\", async () => {\n\t\t\tawait this.gracefulShutdown();\n\t\t});\n\n\t\tprocess.on(\"beforeExit\", async () => {\n\t\t\tawait this.gracefulShutdown();\n\t\t});\n\t}\n\n\tpublic async initialize(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.client.waitReady;\n\t\t\tlogger.info(\"PGlite client initialized successfully\");\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Failed to initialize PGlite client:\", error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tpublic async close(): Promise<void> {\n\t\tif (!this.shuttingDown) {\n\t\t\tawait this.gracefulShutdown();\n\t\t}\n\t}\n\n\tpublic isShuttingDown(): boolean {\n\t\treturn this.shuttingDown;\n\t}\n\n\tasync runMigrations(): Promise<void> {\n\t\ttry {\n\t\t\tconst db = drizzle(this.client);\n\t\t\tawait migrate(db, {\n\t\t\t\tmigrationsFolder: path.resolve(__dirname, \"../drizzle/migrations\"),\n\t\t\t});\n\t\t\tlogger.info(\"Migrations completed successfully!\");\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Failed to run database migrations:\", error);\n\t\t\t// throw error;\n\t\t}\n\t}\n}\n","import { logger, type UUID } from \"@elizaos/core\";\nimport { drizzle, type NodePgDatabase } 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\nexport class PgDatabaseAdapter extends BaseDrizzleAdapter<NodePgDatabase> {\n\tprotected embeddingDimension: EmbeddingDimensionColumn = DIMENSION_MAP[384];\n\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\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\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\tasync close(): Promise<void> {\n\t\tawait this.manager.close();\n\t}\n}\n","import pkg, { type Pool as PgPool } from \"pg\";\nimport type { IDatabaseClientManager } from \"../types\";\nimport { logger } from \"@elizaos/core\";\nimport { migrate } from \"drizzle-orm/node-postgres/migrator\";\nimport { fileURLToPath } from \"node:url\";\nimport path from \"node:path\";\nimport { drizzle } from \"drizzle-orm/node-postgres\";\n\nconst { Pool } = pkg;\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport class PostgresConnectionManager\n\timplements IDatabaseClientManager<PgPool>\n{\n\tprivate pool: PgPool;\n\tprivate isShuttingDown = false;\n\tprivate readonly connectionTimeout: number = 5000;\n\n\tconstructor(connectionString: string) {\n\t\tconst defaultConfig = {\n\t\t\tmax: 20,\n\t\t\tidleTimeoutMillis: 30000,\n\t\t\tconnectionTimeoutMillis: this.connectionTimeout,\n\t\t};\n\n\t\tthis.pool = new Pool({\n\t\t\t...defaultConfig,\n\t\t\tconnectionString,\n\t\t});\n\n\t\tthis.pool.on(\"error\", (err) => {\n\t\t\tlogger.error(\"Unexpected pool error\", err);\n\t\t\tthis.handlePoolError(err);\n\t\t});\n\n\t\tthis.setupPoolErrorHandling();\n\t\tthis.testConnection();\n\t}\n\n\tprivate async handlePoolError(error: Error) {\n\t\tlogger.error(\"Pool error occurred, attempting to reconnect\", {\n\t\t\terror: error.message,\n\t\t});\n\n\t\ttry {\n\t\t\tawait this.pool.end();\n\n\t\t\tthis.pool = new Pool({\n\t\t\t\t...this.pool.options,\n\t\t\t\tconnectionTimeoutMillis: this.connectionTimeout,\n\t\t\t});\n\n\t\t\tawait this.testConnection();\n\t\t\tlogger.success(\"Pool reconnection successful\");\n\t\t} catch (reconnectError) {\n\t\t\tlogger.error(\"Failed to reconnect pool\", {\n\t\t\t\terror:\n\t\t\t\t\treconnectError instanceof Error\n\t\t\t\t\t\t? reconnectError.message\n\t\t\t\t\t\t: String(reconnectError),\n\t\t\t});\n\t\t\tthrow reconnectError;\n\t\t}\n\t}\n\n\tasync testConnection(): Promise<boolean> {\n\t\tlet client;\n\t\ttry {\n\t\t\tclient = await this.pool.connect();\n\t\t\tconst result = await client.query(\"SELECT NOW()\");\n\t\t\tlogger.success(\"Database connection test successful:\", result.rows[0]);\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Database connection test failed:\", error);\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to connect to database: ${(error as Error).message}`,\n\t\t\t);\n\t\t} finally {\n\t\t\tif (client) client.release();\n\t\t}\n\t}\n\n\tprivate setupPoolErrorHandling() {\n\t\tprocess.on(\"SIGINT\", async () => {\n\t\t\tawait this.cleanup();\n\t\t\tprocess.exit(0);\n\t\t});\n\n\t\tprocess.on(\"SIGTERM\", async () => {\n\t\t\tawait this.cleanup();\n\t\t\tprocess.exit(0);\n\t\t});\n\n\t\tprocess.on(\"beforeExit\", async () => {\n\t\t\tawait this.cleanup();\n\t\t});\n\t}\n\n\tpublic getConnection(): PgPool {\n\t\tif (this.isShuttingDown) {\n\t\t\tthrow new Error(\"Connection manager is shutting down\");\n\t\t}\n\n\t\ttry {\n\t\t\treturn this.pool;\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Failed to get connection from pool:\", error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tpublic async getClient(): Promise<pkg.PoolClient> {\n\t\ttry {\n\t\t\treturn await this.pool.connect();\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Failed to acquire a database client:\", error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tpublic async initialize(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.testConnection();\n\t\t\tlogger.info(\"PostgreSQL connection manager initialized successfully\");\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Failed to initialize connection manager:\", error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tpublic async close(): Promise<void> {\n\t\tawait this.cleanup();\n\t}\n\n\tasync cleanup(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.pool.end();\n\t\t\tlogger.info(\"Database pool closed\");\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Error closing database pool:\", error);\n\t\t}\n\t}\n\n\tasync runMigrations(): Promise<void> {\n\t\ttry {\n\t\t\tconst db = drizzle(this.pool);\n\t\t\tawait migrate(db, {\n\t\t\t\tmigrationsFolder: path.resolve(__dirname, \"../drizzle/migrations\"),\n\t\t\t});\n\t\t\tlogger.info(\"Migrations completed successfully!\");\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Failed to run database migrations:\", error);\n\t\t\t// throw error;\n\t\t}\n\t}\n}\n"],"mappings":"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","names":["logger","logger","sql","pgTable","uuid","vector","index","foreignKey","check","sql","pgTable","uuid","text","jsonb","boolean","sql","sql","jsonb","pgTable","text","unique","uuid","pgTable","uuid","sql","text","jsonb","unique","sql","jsonb","pgTable","text","uuid","jsonb","pgTable","text","uuid","sql","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","pgTable","uuid","jsonb","text","sql","pgTable","uuid","text","jsonb","sql","pgTable","uuid","text","jsonb","foreignKey","sql","pgTable","uuid","sql","text","jsonb","foreignKey","pgTable","uuid","text","jsonb","foreignKey","sql","pgTable","uuid","sql","jsonb","text","foreignKey","pgTable","uuid","text","index","foreignKey","sql","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","vector","logger","drizzle","logger","drizzle","drizzle","logger","logger","migrate","fileURLToPath","path","drizzle","__filename","__dirname","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/log.ts","../src/schema/participant.ts","../src/schema/relationship.ts","../src/schema/tasks.ts","../src/pg/adapter.ts"],"sourceRoot":"./","sourcesContent":["import * as os from \"node:os\";\nimport type { IDatabaseAdapter, UUID } from \"@elizaos/core\";\nimport {\n\ttype IAgentRuntime,\n\ttype Plugin,\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 * Helper function to expand tilde in paths\n */\nfunction expandTildePath(filepath: string): string {\n\tif (filepath && typeof filepath === \"string\" && filepath.startsWith(\"~\")) {\n\t\treturn filepath.replace(/^~/, os.homedir());\n\t}\n\treturn filepath;\n}\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\t// Expand tilde in database directory path if provided\n\tif (config.dataDir) {\n\t\tconfig.dataDir = expandTildePath(config.dataDir);\n\t}\n\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 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\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\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 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 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 { 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","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"]}
|