@elizaos/plugin-sql 1.0.0-alpha.2 → 1.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2145,7 +2145,7 @@ function createDatabaseAdapter(config, agentId) {
2145
2145
  const manager = new PostgresConnectionManager(config.postgresUrl);
2146
2146
  return new PgDatabaseAdapter(agentId, manager);
2147
2147
  }
2148
- const dataDir = config.dataDir ?? "../../pgLite";
2148
+ const dataDir = config.dataDir ?? "./elizadb";
2149
2149
  if (!pgLiteClientManager) {
2150
2150
  pgLiteClientManager = new PGliteClientManager({ dataDir });
2151
2151
  }
@@ -2156,7 +2156,7 @@ var drizzlePlugin = {
2156
2156
  description: "Database adapter plugin using Drizzle ORM",
2157
2157
  init: async (_, runtime) => {
2158
2158
  const config = {
2159
- dataDir: runtime.getSetting("PGLITE_DATA_DIR"),
2159
+ dataDir: runtime.getSetting("PGLITE_DATA_DIR") ?? "./pglite",
2160
2160
  postgresUrl: runtime.getSetting("POSTGRES_URL")
2161
2161
  };
2162
2162
  try {
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/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 ?? \"./elizadb\";\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\") ?? \"./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 { 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elizaos/plugin-sql",
3
- "version": "1.0.0-alpha.2",
3
+ "version": "1.0.0-alpha.4",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -23,7 +23,7 @@
23
23
  ],
24
24
  "dependencies": {
25
25
  "@electric-sql/pglite": "^0.2.17",
26
- "@elizaos/core": "^1.0.0-alpha.2",
26
+ "@elizaos/core": "1.0.0-alpha.4",
27
27
  "@types/pg": "8.11.10",
28
28
  "drizzle-kit": "^0.30.4",
29
29
  "drizzle-orm": "^0.39.1",
@@ -42,5 +42,5 @@
42
42
  "peerDependencies": {
43
43
  "typescript": "5.8.2"
44
44
  },
45
- "gitHead": "e638f35197577f1b0c6adc6ae5b019b40610ad26"
45
+ "gitHead": "65645c851e88ecd0bda300478edb950098a9a1d6"
46
46
  }