@elizaos/plugin-sql 2.0.0-alpha.1 → 2.0.0-alpha.11
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/browser/index.browser.js +6641 -4812
- package/dist/browser/index.browser.js.map +9 -7
- package/dist/node/index.node.js +13668 -10651
- package/dist/node/index.node.js.map +47 -45
- package/package.json +15 -3
- package/dist/node/index.d.ts +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../schema/agent.ts", "../../schema/server.ts", "../../types.ts", "../../migrations.ts", "../../rls.ts", "../../runtime-migrator/drizzle-adapters/diff-calculator.ts", "../../runtime-migrator/crypto-utils.ts", "../../runtime-migrator/drizzle-adapters/snapshot-generator.ts", "../../runtime-migrator/drizzle-adapters/sql-generator.ts", "../../runtime-migrator/drizzle-adapters/database-introspector.ts", "../../runtime-migrator/extension-manager.ts", "../../runtime-migrator/schema-transformer.ts", "../../runtime-migrator/storage/journal-storage.ts", "../../runtime-migrator/storage/migration-tracker.ts", "../../runtime-migrator/storage/snapshot-storage.ts", "../../runtime-migrator/runtime-migrator.ts", "../../runtime-migrator/index.ts", "../../migration-service.ts", "../../index.browser.ts", "../../pglite/adapter.ts", "../../base.ts", "
|
|
3
|
+
"sources": ["../../schema/agent.ts", "../../schema/server.ts", "../../types.ts", "../../migrations.ts", "../../rls.ts", "../../runtime-migrator/drizzle-adapters/diff-calculator.ts", "../../runtime-migrator/crypto-utils.ts", "../../runtime-migrator/drizzle-adapters/snapshot-generator.ts", "../../runtime-migrator/drizzle-adapters/sql-generator.ts", "../../runtime-migrator/drizzle-adapters/database-introspector.ts", "../../runtime-migrator/extension-manager.ts", "../../runtime-migrator/schema-transformer.ts", "../../runtime-migrator/storage/journal-storage.ts", "../../runtime-migrator/storage/migration-tracker.ts", "../../runtime-migrator/storage/snapshot-storage.ts", "../../runtime-migrator/runtime-migrator.ts", "../../runtime-migrator/index.ts", "../../migration-service.ts", "../../index.browser.ts", "../../pglite/adapter.ts", "../../base.ts", "../../node_modules/uuid/dist/stringify.js", "../../node_modules/uuid/dist/rng.js", "../../node_modules/uuid/dist/native.js", "../../node_modules/uuid/dist/v4.js", "../../schema/embedding.ts", "../../schema/memory.ts", "../../schema/entity.ts", "../../schema/room.ts", "../../schema/index.ts", "../../schema/cache.ts", "../../schema/channel.ts", "../../schema/messageServer.ts", "../../schema/channelParticipant.ts", "../../schema/component.ts", "../../schema/world.ts", "../../schema/log.ts", "../../schema/message.ts", "../../schema/messageServerAgent.ts", "../../schema/pairingAllowlist.ts", "../../schema/pairingRequest.ts", "../../schema/participant.ts", "../../schema/relationship.ts", "../../schema/tasks.ts", "../../pglite/manager.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { MessageExample } from \"@elizaos/core\";\nimport { sql } from \"drizzle-orm\";\nimport { boolean, jsonb, pgTable, text, timestamp, uuid } from \"drizzle-orm/pg-core\";\n\n/**\n * Represents a table for storing agent data.\n *\n * @type {Table}\n */\nexport const agentTable = pgTable(\"agents\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n enabled: boolean(\"enabled\").default(true).notNull(),\n server_id: uuid(\"server_id\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).default(sql`now()`).notNull(),\n\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).default(sql`now()`).notNull(),\n\n // Character\n name: text(\"name\").notNull(),\n username: text(\"username\"),\n system: text(\"system\").default(\"\"),\n bio: jsonb(\"bio\").$type<string | string[]>().default(sql`'[]'::jsonb`),\n messageExamples: jsonb(\"message_examples\")\n .$type<MessageExample[][]>()\n .default(sql`'[]'::jsonb`)\n .notNull(),\n postExamples: jsonb(\"post_examples\").$type<string[]>().default(sql`'[]'::jsonb`).notNull(),\n topics: jsonb(\"topics\").$type<string[]>().default(sql`'[]'::jsonb`).notNull(),\n adjectives: jsonb(\"adjectives\").$type<string[]>().default(sql`'[]'::jsonb`).notNull(),\n knowledge: jsonb(\"knowledge\")\n .$type<(string | { path: string; shared?: boolean })[]>()\n .default(sql`'[]'::jsonb`)\n .notNull(),\n plugins: jsonb(\"plugins\").$type<string[]>().default(sql`'[]'::jsonb`).notNull(),\n settings: jsonb(\"settings\")\n .$type<{\n secrets?: { [key: string]: string | boolean | number };\n [key: string]: string | boolean | number | Record<string, unknown> | undefined;\n }>()\n .default(sql`'{}'::jsonb`)\n .notNull(),\n style: jsonb(\"style\")\n .$type<{\n all?: string[];\n chat?: string[];\n post?: string[];\n }>()\n .default(sql`'{}'::jsonb`)\n .notNull(),\n});\n",
|
|
6
6
|
"import { sql } from \"drizzle-orm\";\nimport { pgTable, timestamp, uuid } from \"drizzle-orm/pg-core\";\n\n/**\n * Represents a table for storing server data for RLS multi-tenant isolation.\n * Each server represents one elizaOS instance in a multi-tenant deployment.\n *\n * @type {Table}\n */\nexport const serverTable = pgTable(\"servers\", {\n id: uuid(\"id\").primaryKey(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).default(sql`now()`).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).default(sql`now()`).notNull(),\n});\n",
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"export {\n calculateDiff,\n hasDiffChanges,\n type SchemaDiff,\n} from \"./drizzle-adapters/diff-calculator\";\n// Drizzle adapter exports (if needed for extensions)\nexport {\n createEmptySnapshot,\n generateSnapshot,\n hasChanges,\n hashSnapshot,\n} from \"./drizzle-adapters/snapshot-generator\";\nexport {\n generateMigrationSQL,\n generateRenameColumnSQL,\n generateRenameTableSQL,\n} from \"./drizzle-adapters/sql-generator\";\nexport { RuntimeMigrator } from \"./runtime-migrator\";\nexport { JournalStorage } from \"./storage/journal-storage\";\n// Storage exports (if needed for advanced usage)\nexport { MigrationTracker } from \"./storage/migration-tracker\";\nexport { SnapshotStorage } from \"./storage/snapshot-storage\";\nexport * from \"./types\";\n",
|
|
22
22
|
"import { type IDatabaseAdapter, logger, type Plugin } from \"@elizaos/core\";\nimport { migrateToEntityRLS } from \"./migrations\";\nimport { applyEntityRLSToAllTables, applyRLSToNewTables, installRLSFunctions } from \"./rls\";\nimport { RuntimeMigrator } from \"./runtime-migrator\";\nimport type { DrizzleDatabase } from \"./types\";\n\nexport class DatabaseMigrationService {\n private db: DrizzleDatabase | null = null;\n private registeredSchemas = new Map<string, Record<string, unknown>>();\n private migrator: RuntimeMigrator | null = null;\n\n async initializeWithDatabase(db: DrizzleDatabase): Promise<void> {\n this.db = db;\n\n interface AdapterWrapper extends IDatabaseAdapter {\n db: DrizzleDatabase;\n }\n const adapterWrapper: AdapterWrapper = { db } as AdapterWrapper;\n await migrateToEntityRLS(adapterWrapper);\n\n this.migrator = new RuntimeMigrator(db);\n await this.migrator.initialize();\n logger.info({ src: \"plugin:sql\" }, \"DatabaseMigrationService initialized\");\n }\n\n discoverAndRegisterPluginSchemas(plugins: Plugin[]): void {\n for (const plugin of plugins) {\n type PluginWithSchema = Plugin & {\n schema?: Record<string, unknown>;\n };\n const pluginWithSchema = plugin as PluginWithSchema;\n if (pluginWithSchema.schema) {\n this.registeredSchemas.set(plugin.name, pluginWithSchema.schema);\n }\n }\n logger.info(\n {\n src: \"plugin:sql\",\n schemasDiscovered: this.registeredSchemas.size,\n totalPlugins: plugins.length,\n },\n \"Plugin schemas discovered\"\n );\n }\n\n registerSchema(pluginName: string, schema: Record<string, unknown>): void {\n this.registeredSchemas.set(pluginName, schema);\n logger.debug({ src: \"plugin:sql\", pluginName }, \"Schema registered\");\n }\n\n async runAllPluginMigrations(options?: {\n verbose?: boolean;\n force?: boolean;\n dryRun?: boolean;\n }): Promise<void> {\n if (!this.db || !this.migrator) {\n throw new Error(\"Database or migrator not initialized in DatabaseMigrationService\");\n }\n\n const isProduction = process.env.NODE_ENV === \"production\";\n\n const migrationOptions = {\n verbose: options?.verbose ?? !isProduction,\n force: options?.force ?? false,\n dryRun: options?.dryRun ?? false,\n };\n\n logger.info(\n {\n src: \"plugin:sql\",\n environment: isProduction ? \"PRODUCTION\" : \"DEVELOPMENT\",\n pluginCount: this.registeredSchemas.size,\n dryRun: migrationOptions.dryRun,\n },\n \"Starting migrations\"\n );\n\n let successCount = 0;\n let failureCount = 0;\n const errors: Array<{ pluginName: string; error: Error }> = [];\n\n for (const [pluginName, schema] of this.registeredSchemas) {\n try {\n await this.migrator.migrate(pluginName, schema, migrationOptions);\n successCount++;\n logger.info({ src: \"plugin:sql\", pluginName }, \"Migration completed\");\n } catch (error) {\n failureCount++;\n const errorMessage = (error as Error).message;\n\n errors.push({ pluginName, error: error as Error });\n\n if (errorMessage.includes(\"Destructive migration blocked\")) {\n logger.error(\n { src: \"plugin:sql\", pluginName },\n \"Migration blocked - destructive changes detected. Set ELIZA_ALLOW_DESTRUCTIVE_MIGRATIONS=true or use force option\"\n );\n } else {\n logger.error({ src: \"plugin:sql\", pluginName, error: errorMessage }, \"Migration failed\");\n }\n }\n }\n\n if (failureCount === 0) {\n logger.info({ src: \"plugin:sql\", successCount }, \"All migrations completed successfully\");\n\n const dataIsolationEnabled = process.env.ENABLE_DATA_ISOLATION === \"true\";\n\n if (dataIsolationEnabled) {\n try {\n logger.info({ src: \"plugin:sql\" }, \"Re-applying Row Level Security...\");\n interface AdapterWrapper extends IDatabaseAdapter {\n db: DrizzleDatabase;\n }\n const adapterWrapper: AdapterWrapper = {\n db: this.db,\n } as AdapterWrapper;\n await installRLSFunctions(adapterWrapper);\n await applyRLSToNewTables(adapterWrapper);\n await applyEntityRLSToAllTables(adapterWrapper);\n logger.info({ src: \"plugin:sql\" }, \"RLS re-applied successfully\");\n } catch (rlsError) {\n const errorMsg = rlsError instanceof Error ? rlsError.message : String(rlsError);\n logger.warn(\n { src: \"plugin:sql\", error: errorMsg },\n \"Failed to re-apply RLS (this is OK if server_id columns are not yet in schemas)\"\n );\n }\n } else {\n logger.info(\n { src: \"plugin:sql\" },\n \"Skipping RLS re-application (ENABLE_DATA_ISOLATION is not true)\"\n );\n }\n } else {\n logger.error({ src: \"plugin:sql\", failureCount, successCount }, \"Some migrations failed\");\n\n const errorSummary = errors.map((e) => `${e.pluginName}: ${e.error.message}`).join(\"\\n \");\n throw new Error(`${failureCount} migration(s) failed:\\n ${errorSummary}`);\n }\n }\n\n getMigrator(): RuntimeMigrator | null {\n return this.migrator;\n }\n}\n",
|
|
23
23
|
"import {\n type IAgentRuntime,\n type IDatabaseAdapter,\n logger,\n type Plugin,\n type UUID,\n} from \"@elizaos/core\";\nimport { PgliteDatabaseAdapter } from \"./pglite/adapter\";\nimport { PGliteClientManager } from \"./pglite/manager\";\nimport * as schema from \"./schema\";\n\nconst GLOBAL_SINGLETONS = Symbol.for(\"@elizaos/plugin-sql/global-singletons\");\n\ninterface GlobalSingletons {\n pgLiteClientManager?: PGliteClientManager;\n}\n\nconst globalSymbols = globalThis as typeof globalThis & Record<symbol, GlobalSingletons>;\nif (!globalSymbols[GLOBAL_SINGLETONS]) {\n globalSymbols[GLOBAL_SINGLETONS] = {};\n}\nconst globalSingletons = globalSymbols[GLOBAL_SINGLETONS];\n\nexport function createDatabaseAdapter(\n _config: { dataDir?: string },\n agentId: UUID\n): IDatabaseAdapter {\n if (!globalSingletons.pgLiteClientManager) {\n globalSingletons.pgLiteClientManager = new PGliteClientManager({});\n }\n return new PgliteDatabaseAdapter(agentId, globalSingletons.pgLiteClientManager);\n}\n\nexport const plugin: Plugin = {\n name: \"@elizaos/plugin-sql\",\n description: \"A plugin for SQL database access (PGlite WASM in browser).\",\n priority: 0,\n schema: schema,\n init: async (_config, runtime: IAgentRuntime) => {\n logger.info({ src: \"plugin:sql\" }, \"plugin-sql (browser) init starting\");\n\n try {\n const isReady = await runtime.isReady();\n if (isReady) {\n logger.info(\n { src: \"plugin:sql\" },\n \"Database adapter already registered, skipping creation\"\n );\n return;\n }\n } catch (_error) {}\n\n const dbAdapter = createDatabaseAdapter({}, runtime.agentId);\n runtime.registerDatabaseAdapter(dbAdapter);\n logger.info({ src: \"plugin:sql\" }, \"Browser database adapter (PGlite) created and registered\");\n },\n};\n\nexport default plugin;\n\nexport { DatabaseMigrationService } from \"./migration-service\";\n",
|
|
24
|
-
"import { type Agent, type Entity, logger, type Memory, type UUID } from \"@elizaos/core\";\nimport { drizzle, type PgliteDatabase } from \"drizzle-orm/pglite\";\nimport { BaseDrizzleAdapter } from \"../base\";\nimport { DIMENSION_MAP, type EmbeddingDimensionColumn } from \"../schema/embedding\";\nimport type { PGliteClientManager } from \"./manager\";\n\nexport class PgliteDatabaseAdapter extends BaseDrizzleAdapter {\n private manager: PGliteClientManager;\n protected embeddingDimension: EmbeddingDimensionColumn = DIMENSION_MAP[384];\n\n constructor(agentId: UUID, manager: PGliteClientManager) {\n super(agentId);\n this.manager = manager;\n this.db = drizzle(this.manager.getConnection());\n }\n\n public async withEntityContext<T>(\n _entityId: UUID | null,\n callback: (tx: PgliteDatabase) => Promise<T>\n ): Promise<T> {\n return this.db.transaction(callback);\n }\n\n async getEntityByIds(entityIds: UUID[]): Promise<Entity[] | null> {\n return this.getEntitiesByIds(entityIds);\n }\n\n async getMemoriesByServerId(_params: { serverId: UUID; count?: number }): Promise<Memory[]> {\n logger.warn({ src: \"plugin:sql\" }, \"getMemoriesByServerId called but not implemented\");\n return [];\n }\n\n async ensureAgentExists(agent: Partial<Agent>): Promise<Agent> {\n const existingAgent = await this.getAgent(this.agentId);\n if (existingAgent) {\n return existingAgent;\n }\n\n const newAgent: Agent = {\n id: this.agentId,\n name: agent.name || \"Unknown Agent\",\n username: agent.username,\n bio: (Array.isArray(agent.bio)\n ? agent.bio\n : agent.bio\n ? [agent.bio]\n : [\"An AI agent\"]) as string[],\n createdAt: agent.createdAt || Date.now(),\n updatedAt: agent.updatedAt || Date.now(),\n };\n\n await this.createAgent(newAgent);\n const createdAgent = await this.getAgent(this.agentId);\n if (!createdAgent) {\n throw new Error(\"Failed to create agent\");\n }\n return createdAgent;\n }\n\n protected async withDatabase<T>(operation: () => Promise<T>): Promise<T> {\n if (this.manager.isShuttingDown()) {\n const error = new Error(\"Database is shutting down - operation rejected\");\n logger.warn(\n { src: \"plugin:sql\", error: error.message },\n \"Database operation rejected during shutdown\"\n );\n throw error;\n }\n return operation();\n }\n\n async init(): Promise<void> {\n logger.debug({ src: \"plugin:sql\" }, \"PGliteDatabaseAdapter initialized\");\n }\n\n async isReady(): Promise<boolean> {\n return !this.manager.isShuttingDown();\n }\n\n async close() {\n await this.manager.close();\n }\n\n async getConnection(): Promise<PgliteDatabase> {\n return this.db as PgliteDatabase;\n }\n\n getRawConnection() {\n return this.manager.getConnection();\n }\n}\n",
|
|
25
|
-
"import {\n type Agent,\n type AgentRunCounts,\n type AgentRunSummary,\n type AgentRunSummaryResult,\n ChannelType,\n type Component,\n DatabaseAdapter,\n type Entity,\n type Log,\n type LogBody,\n logger,\n type Memory,\n type MemoryMetadata,\n type Metadata,\n type Participant,\n type Relationship,\n type Room,\n type RunStatus,\n type Task,\n type TaskMetadata,\n type UUID,\n type World,\n} from \"@elizaos/core\";\n\n// JSON-serializable value type for metadata\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\nimport {\n and,\n cosineDistance,\n count,\n desc,\n eq,\n gte,\n inArray,\n lt,\n lte,\n or,\n type SQL,\n sql,\n} from \"drizzle-orm\";\nimport { v4 } from \"uuid\";\nimport type { DatabaseMigrationService } from \"./migration-service\";\nimport { DIMENSION_MAP, type EmbeddingDimensionColumn } from \"./schema/embedding\";\nimport {\n agentTable,\n cacheTable,\n channelParticipantsTable,\n channelTable,\n componentTable,\n embeddingTable,\n entityTable,\n logTable,\n memoryTable,\n messageServerAgentsTable,\n messageServerTable,\n messageTable,\n participantTable,\n relationshipTable,\n roomTable,\n taskTable,\n worldTable,\n} from \"./schema/index\";\nimport type { DrizzleDatabase } from \"./types\";\n\nexport abstract class BaseDrizzleAdapter extends DatabaseAdapter<DrizzleDatabase> {\n protected readonly maxRetries: number = 3;\n protected readonly baseDelay: number = 1000;\n protected readonly maxDelay: number = 10000;\n protected readonly jitterMax: number = 1000;\n protected embeddingDimension: EmbeddingDimensionColumn = DIMENSION_MAP[384];\n protected migrationService?: DatabaseMigrationService;\n\n protected abstract withDatabase<T>(operation: () => Promise<T>): Promise<T>;\n\n public abstract withEntityContext<T>(\n entityId: UUID | null,\n callback: (tx: DrizzleDatabase) => Promise<T>\n ): Promise<T>;\n\n public abstract init(): Promise<void>;\n public abstract close(): Promise<void>;\n\n public async initialize(): Promise<void> {\n await this.init();\n }\n\n public async runPluginMigrations(\n plugins: Array<{ name: string; schema?: Record<string, unknown> }>,\n options?: {\n verbose?: boolean;\n force?: boolean;\n dryRun?: boolean;\n }\n ): Promise<void> {\n if (!this.migrationService) {\n const { DatabaseMigrationService } = await import(\"./migration-service\");\n this.migrationService = new DatabaseMigrationService();\n await this.migrationService.initializeWithDatabase(this.db as DrizzleDatabase);\n }\n\n for (const plugin of plugins) {\n if (plugin.schema) {\n this.migrationService.registerSchema(plugin.name, plugin.schema);\n }\n }\n\n await this.migrationService.runAllPluginMigrations(options);\n }\n\n public getDatabase(): unknown {\n return this.db;\n }\n\n protected agentId: UUID;\n\n constructor(agentId: UUID) {\n super();\n this.agentId = agentId;\n }\n\n private normalizeEntityNames(names: unknown): string[] {\n if (names == null) {\n return [];\n }\n\n if (typeof names === \"string\") {\n return [names];\n }\n\n if (Array.isArray(names)) {\n return names.map(String);\n }\n\n if (names instanceof Set) {\n return Array.from(names).map(String);\n }\n\n if (typeof names === \"object\" && typeof names[Symbol.iterator] === \"function\") {\n return Array.from(names as Iterable<unknown>).map(String);\n }\n\n return [String(names)];\n }\n\n /**\n * Executes the given operation with retry logic.\n * @template T\n * @param {() => Promise<T>} operation - The operation to be executed.\n * @returns {Promise<T>} A promise that resolves with the result of the operation.\n */\n protected async withRetry<T>(operation: () => Promise<T>): Promise<T> {\n let lastError: Error = new Error(\"Unknown error\");\n\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\n try {\n return await operation();\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < this.maxRetries) {\n const backoffDelay = Math.min(this.baseDelay * 2 ** (attempt - 1), this.maxDelay);\n\n const jitter = Math.random() * this.jitterMax;\n const delay = backoffDelay + jitter;\n\n logger.warn(\n {\n src: \"plugin:sql\",\n attempt,\n maxRetries: this.maxRetries,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Database operation failed, retrying\"\n );\n\n await new Promise((resolve) => setTimeout(resolve, delay));\n } else {\n logger.error(\n {\n src: \"plugin:sql\",\n totalAttempts: attempt,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Max retry attempts reached\"\n );\n throw error instanceof Error ? error : new Error(String(error));\n }\n }\n }\n\n throw lastError;\n }\n\n /**\n * Asynchronously ensures that the given embedding dimension is valid for the agent.\n *\n * @param {number} dimension - The dimension to ensure for the embedding.\n * @returns {Promise<void>} - Resolves once the embedding dimension is ensured.\n */\n async ensureEmbeddingDimension(dimension: number) {\n return this.withDatabase(async () => {\n const existingMemory = await this.db\n .select()\n .from(memoryTable)\n .innerJoin(embeddingTable, eq(embeddingTable.memoryId, memoryTable.id))\n .where(eq(memoryTable.agentId, this.agentId))\n .limit(1);\n\n if (existingMemory.length > 0) {\n // The join result includes both memoryTable and embeddingTable columns\n // Access embedding columns directly from the joined result\n interface JoinedMemoryResult {\n memories: typeof memoryTable.$inferSelect;\n embeddings: typeof embeddingTable.$inferSelect;\n }\n const joinedResult = existingMemory[0] as JoinedMemoryResult;\n Object.entries(DIMENSION_MAP).find(([_, colName]) => {\n const embeddingCol = colName as keyof typeof embeddingTable.$inferSelect;\n return joinedResult.embeddings[embeddingCol] !== null;\n });\n // We don't actually need to use usedDimension for now, but it's good to know it's there.\n }\n\n this.embeddingDimension = DIMENSION_MAP[dimension as keyof typeof DIMENSION_MAP];\n });\n }\n\n /**\n * Asynchronously retrieves an agent by their ID from the database.\n * @param {UUID} agentId - The ID of the agent to retrieve.\n * @returns {Promise<Agent | null>} A promise that resolves to the retrieved agent or null if not found.\n */\n async getAgent(agentId: UUID): Promise<Agent | null> {\n return this.withDatabase(async () => {\n const rows = await this.db\n .select()\n .from(agentTable)\n .where(eq(agentTable.id, agentId))\n .limit(1);\n\n if (rows.length === 0) return null;\n\n const row = rows[0];\n const bioValue = !row.bio ? \"\" : Array.isArray(row.bio) ? row.bio : row.bio;\n return {\n ...row,\n username: row.username || \"\",\n id: row.id as UUID,\n system: !row.system ? undefined : row.system,\n bio: bioValue as string | string[],\n createdAt: row.createdAt.getTime(),\n updatedAt: row.updatedAt.getTime(),\n } as unknown as Agent;\n });\n }\n\n /**\n * Asynchronously retrieves a list of agents from the database.\n *\n * @returns {Promise<Partial<Agent>[]>} A Promise that resolves to an array of Agent objects.\n */\n async getAgents(): Promise<Partial<Agent>[]> {\n const result = await this.withDatabase(async () => {\n const rows = await this.db\n .select({\n id: agentTable.id,\n name: agentTable.name,\n bio: agentTable.bio,\n })\n .from(agentTable);\n return rows.map(\n (row) =>\n ({\n ...row,\n id: row.id as UUID,\n bio: (row.bio === null ? \"\" : Array.isArray(row.bio) ? row.bio : row.bio) as\n | string\n | string[],\n }) as Partial<Agent>\n );\n });\n // Guard against null return\n return result || [];\n }\n /**\n * Asynchronously creates a new agent record in the database.\n *\n * @param {Partial<Agent>} agent The agent object to be created.\n * @returns {Promise<boolean>} A promise that resolves to a boolean indicating the success of the operation.\n */\n async createAgent(agent: Agent): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n // Check for existing agent with the same ID only (names can be duplicated)\n if (agent.id) {\n const existing = await this.db\n .select({ id: agentTable.id })\n .from(agentTable)\n .where(eq(agentTable.id, agent.id))\n .limit(1);\n\n if (existing.length > 0) {\n logger.warn(\n { src: \"plugin:sql\", agentId: agent.id },\n \"Attempted to create agent with duplicate ID\"\n );\n return false;\n }\n }\n\n await this.db.transaction(async (tx) => {\n const agentData = {\n ...agent,\n createdAt: new Date(\n typeof agent.createdAt === \"bigint\"\n ? Number(agent.createdAt)\n : agent.createdAt || Date.now()\n ),\n updatedAt: new Date(\n typeof agent.updatedAt === \"bigint\"\n ? Number(agent.updatedAt)\n : agent.updatedAt || Date.now()\n ),\n };\n await tx\n .insert(agentTable)\n .values(agentData as unknown as typeof agentTable.$inferInsert);\n });\n\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId: agent.id,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to create agent\"\n );\n return false;\n }\n });\n }\n\n /**\n * Updates an agent in the database with the provided agent ID and data.\n * @param {UUID} agentId - The unique identifier of the agent to update.\n * @param {Partial<Agent>} agent - The partial agent object containing the fields to update.\n * @returns {Promise<boolean>} - A boolean indicating if the agent was successfully updated.\n */\n async updateAgent(agentId: UUID, agent: Partial<Agent>): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n if (!agentId) {\n throw new Error(\"Agent ID is required for update\");\n }\n\n await this.db.transaction(async (tx) => {\n // Handle settings update if present\n if (agent?.settings) {\n agent.settings = await this.mergeAgentSettings(tx, agentId, agent.settings);\n }\n\n // Convert numeric timestamps to Date objects for database storage\n // The Agent interface uses numbers, but the database schema expects Date objects\n const updateData: Record<string, unknown> = { ...agent };\n\n if (updateData.createdAt) {\n if (typeof updateData.createdAt === \"number\") {\n updateData.createdAt = new Date(updateData.createdAt);\n } else {\n delete updateData.createdAt; // Don't update createdAt if it's not a valid timestamp\n }\n }\n if (updateData.updatedAt) {\n if (typeof updateData.updatedAt === \"number\") {\n updateData.updatedAt = new Date(updateData.updatedAt);\n } else {\n updateData.updatedAt = new Date(); // Use current time if invalid\n }\n } else {\n updateData.updatedAt = new Date(); // Always set updatedAt to current time\n }\n\n await tx.update(agentTable).set(updateData).where(eq(agentTable.id, agentId));\n });\n\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to update agent\"\n );\n return false;\n }\n });\n }\n\n /**\n * Merges updated agent settings with existing settings in the database,\n * with special handling for nested objects like secrets.\n * @param tx - The database transaction\n * @param agentId - The ID of the agent\n * @param updatedSettings - The settings object with updates\n * @returns The merged settings object\n * @private\n */\n private async mergeAgentSettings<T extends Record<string, unknown>>(\n tx: DrizzleDatabase,\n agentId: UUID,\n updatedSettings: T\n ): Promise<T> {\n // First get the current agent data\n const currentAgent = await tx\n .select({ settings: agentTable.settings })\n .from(agentTable)\n .where(eq(agentTable.id, agentId))\n .limit(1);\n\n const currentSettings =\n currentAgent.length > 0 && currentAgent[0].settings ? currentAgent[0].settings : {};\n\n const deepMerge = (\n target: Record<string, unknown> | unknown,\n source: Record<string, unknown>\n ): Record<string, unknown> | undefined => {\n // If source is explicitly null, it means the intention is to set this entire branch to null (or delete if top-level handled by caller).\n // For recursive calls, if a sub-object in source is null, it effectively means \"remove this sub-object from target\".\n // However, our primary deletion signal is a *property value* being null within an object.\n if (source === null) {\n // If the entire source for a given key is null, we treat it as \"delete this key from target\"\n // by returning undefined, which the caller can use to delete the key.\n return undefined;\n }\n\n // If source is an array or a primitive, it replaces the target value.\n if (Array.isArray(source) || typeof source !== \"object\") {\n return source;\n }\n\n // Initialize output. If target is not an object, start with an empty one to merge source into.\n const output =\n typeof target === \"object\" && target !== null && !Array.isArray(target)\n ? { ...target }\n : {};\n\n for (const key of Object.keys(source)) {\n // Iterate over source keys\n const sourceValue = source[key];\n\n if (sourceValue === null) {\n // If a value in source is null, delete the corresponding key from output.\n delete output[key];\n } else if (typeof sourceValue === \"object\" && !Array.isArray(sourceValue)) {\n // If value is an object, recurse.\n const nestedMergeResult = deepMerge(output[key], sourceValue as Record<string, unknown>);\n if (nestedMergeResult === undefined) {\n // If recursive merge resulted in undefined (meaning the nested object should be deleted)\n delete output[key];\n } else {\n output[key] = nestedMergeResult;\n }\n } else {\n // Primitive or array value from source, assign it.\n output[key] = sourceValue;\n }\n }\n\n // After processing all keys from source, check if output became empty.\n // An object is empty if all its keys were deleted or resulted in undefined.\n // This is a more direct check than iterating 'output' after building it.\n if (Object.keys(output).length === 0) {\n // If the source itself was not an explicitly empty object,\n // and the merge resulted in an empty object, signal deletion.\n if (!(typeof source === \"object\" && source !== null && Object.keys(source).length === 0)) {\n return undefined; // Signal to delete this (parent) key if it became empty.\n }\n }\n\n return output;\n }; // End of deepMerge\n\n const finalSettings = deepMerge(currentSettings, updatedSettings);\n // If the entire settings object becomes undefined (e.g. all keys removed),\n // return an empty object instead of undefined/null to keep the settings field present.\n return (finalSettings ?? {}) as T;\n }\n\n /**\n * Asynchronously deletes an agent with the specified UUID and all related entries.\n *\n * @param {UUID} agentId - The UUID of the agent to be deleted.\n * @returns {Promise<boolean>} - A boolean indicating if the deletion was successful.\n */\n async deleteAgent(agentId: UUID): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n // Simply delete the agent - all related data will be cascade deleted\n const result = await this.db\n .delete(agentTable)\n .where(eq(agentTable.id, agentId))\n .returning();\n\n if (result.length === 0) {\n logger.warn({ src: \"plugin:sql\", agentId }, \"Agent not found for deletion\");\n return false;\n }\n\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to delete agent\"\n );\n throw error;\n }\n });\n }\n\n /**\n * Count all agents in the database\n * Used primarily for maintenance and cleanup operations\n */\n /**\n * Asynchronously counts the number of agents in the database.\n * @returns {Promise<number>} A Promise that resolves to the number of agents in the database.\n */\n async countAgents(): Promise<number> {\n return this.withDatabase(async () => {\n try {\n const result = await this.db.select({ count: count() }).from(agentTable);\n\n const result0 = result[0];\n return result0?.count || 0;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to count agents\"\n );\n return 0;\n }\n });\n }\n\n /**\n * Clean up the agents table by removing all agents\n * This is used during server startup to ensure no orphaned agents exist\n * from previous crashes or improper shutdowns\n */\n async cleanupAgents(): Promise<void> {\n return this.withDatabase(async () => {\n try {\n await this.db.delete(agentTable);\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to clean up agent table\"\n );\n throw error;\n }\n });\n }\n\n /**\n * Asynchronously retrieves an entity and its components by entity IDs.\n * @param {UUID[]} entityIds - The unique identifiers of the entities to retrieve.\n * @returns {Promise<Entity[] | null>} A Promise that resolves to the entity with its components if found, null otherwise.\n */\n async getEntitiesByIds(entityIds: UUID[]): Promise<Entity[] | null> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({\n entity: entityTable,\n components: componentTable,\n })\n .from(entityTable)\n .leftJoin(componentTable, eq(componentTable.entityId, entityTable.id))\n .where(inArray(entityTable.id, entityIds));\n\n if (result.length === 0) return [];\n\n // Group components by entity\n const entities: Record<UUID, Entity> = {};\n const entityComponents: Record<UUID, Entity[\"components\"]> = {};\n for (const e of result) {\n const key = e.entity.id;\n entities[key] = e.entity;\n if (entityComponents[key] === undefined) entityComponents[key] = [];\n if (e.components) {\n // Handle both single component and array of components\n const componentsArray = Array.isArray(e.components) ? e.components : [e.components];\n entityComponents[key] = [...entityComponents[key], ...componentsArray];\n }\n }\n for (const k of Object.keys(entityComponents)) {\n entities[k].components = entityComponents[k];\n }\n\n return Object.values(entities);\n });\n }\n\n /**\n * Asynchronously retrieves all entities for a given room, optionally including their components.\n * @param {UUID} roomId - The unique identifier of the room to get entities for\n * @param {boolean} [includeComponents] - Whether to include component data for each entity\n * @returns {Promise<Entity[]>} A Promise that resolves to an array of entities in the room\n */\n async getEntitiesForRoom(roomId: UUID, includeComponents?: boolean): Promise<Entity[]> {\n return this.withDatabase(async () => {\n const query = this.db\n .select({\n entity: entityTable,\n ...(includeComponents && { components: componentTable }),\n })\n .from(participantTable)\n .leftJoin(\n entityTable,\n and(eq(participantTable.entityId, entityTable.id), eq(entityTable.agentId, this.agentId))\n );\n\n if (includeComponents) {\n query.leftJoin(componentTable, eq(componentTable.entityId, entityTable.id));\n }\n\n const result = await query.where(eq(participantTable.roomId, roomId));\n\n // Group components by entity if includeComponents is true\n const entitiesByIdMap = new Map<UUID, Entity>();\n\n for (const row of result) {\n if (!row.entity) continue;\n\n const entityId = row.entity.id as UUID;\n if (!entitiesByIdMap.has(entityId)) {\n const entity: Entity = {\n ...row.entity,\n id: entityId,\n agentId: row.entity.agentId as UUID,\n metadata: (row.entity.metadata || {}) as Metadata,\n components: includeComponents ? [] : undefined,\n };\n entitiesByIdMap.set(entityId, entity);\n }\n\n if (includeComponents && row.components) {\n const entity = entitiesByIdMap.get(entityId);\n if (entity) {\n if (!entity.components) {\n entity.components = [];\n }\n entity.components.push(row.components);\n }\n }\n }\n\n return Array.from(entitiesByIdMap.values());\n });\n }\n\n /**\n * Asynchronously creates new entities in the database.\n * @param {Entity[]} entities - The entity objects to be created.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating the success of the operation.\n */\n async createEntities(entities: Entity[]): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n return await this.db.transaction(async (tx) => {\n // Normalize entity data to ensure names is a proper array\n const normalizedEntities = entities.map((entity) => ({\n ...entity,\n names: this.normalizeEntityNames(entity.names),\n metadata: entity.metadata || {},\n }));\n\n await tx.insert(entityTable).values(normalizedEntities);\n\n return true;\n });\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n entityId: entities[0]?.id,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to create entities\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously ensures an entity exists, creating it if it doesn't\n * @param entity The entity to ensure exists\n * @returns Promise resolving to boolean indicating success\n */\n protected async ensureEntityExists(entity: Entity): Promise<boolean> {\n if (!entity.id) {\n logger.error({ src: \"plugin:sql\" }, \"Entity ID is required for ensureEntityExists\");\n return false;\n }\n\n try {\n const existingEntities = await this.getEntitiesByIds([entity.id]);\n\n if (!existingEntities || !existingEntities.length) {\n return await this.createEntities([entity]);\n }\n\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n entityId: entity.id,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to ensure entity exists\"\n );\n return false;\n }\n }\n\n /**\n * Asynchronously updates an entity in the database.\n * @param {Entity} entity - The entity object to be updated.\n * @returns {Promise<void>} A Promise that resolves when the entity is updated.\n */\n async updateEntity(entity: Entity): Promise<void> {\n if (!entity.id) {\n throw new Error(\"Entity ID is required for update\");\n }\n return this.withDatabase(async () => {\n // Normalize entity data to ensure names is a proper array\n const normalizedEntity = {\n ...entity,\n names: this.normalizeEntityNames(entity.names),\n metadata: entity.metadata || {},\n };\n\n await this.db\n .update(entityTable)\n .set(normalizedEntity)\n .where(eq(entityTable.id, entity.id as string));\n });\n }\n\n /**\n * Asynchronously deletes an entity from the database based on the provided ID.\n * @param {UUID} entityId - The ID of the entity to delete.\n * @returns {Promise<void>} A Promise that resolves when the entity is deleted.\n */\n async deleteEntity(entityId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.transaction(async (tx) => {\n // Delete related components first\n await tx\n .delete(componentTable)\n .where(\n or(eq(componentTable.entityId, entityId), eq(componentTable.sourceEntityId, entityId))\n );\n\n // Delete the entity\n await tx.delete(entityTable).where(eq(entityTable.id, entityId));\n });\n });\n }\n\n /**\n * Asynchronously retrieves entities by their names and agentId.\n * @param {Object} params - The parameters for retrieving entities.\n * @param {string[]} params.names - The names to search for.\n * @param {UUID} params.agentId - The agent ID to filter by.\n * @returns {Promise<Entity[]>} A Promise that resolves to an array of entities.\n */\n async getEntitiesByNames(params: { names: string[]; agentId: UUID }): Promise<Entity[]> {\n return this.withDatabase(async () => {\n const { names, agentId } = params;\n\n // Build a condition to match any of the names\n const nameConditions = names.map((name) => sql`${name} = ANY(${entityTable.names})`);\n\n const query = sql`\n SELECT * FROM ${entityTable}\n WHERE ${entityTable.agentId} = ${agentId}\n AND (${sql.join(nameConditions, sql` OR `)})\n `;\n\n const result = await this.db.execute(query);\n\n return result.rows.map((row: Record<string, unknown>) => ({\n id: row.id as UUID,\n agentId: row.agentId as UUID,\n names: (row.names || []) as string[],\n metadata: (row.metadata || {}) as Metadata,\n }));\n });\n }\n\n /**\n * Asynchronously searches for entities by name with fuzzy matching.\n * @param {Object} params - The parameters for searching entities.\n * @param {string} params.query - The search query.\n * @param {UUID} params.agentId - The agent ID to filter by.\n * @param {number} params.limit - The maximum number of results to return.\n * @returns {Promise<Entity[]>} A Promise that resolves to an array of entities.\n */\n async searchEntitiesByName(params: {\n query: string;\n agentId: UUID;\n limit?: number;\n }): Promise<Entity[]> {\n return this.withDatabase(async () => {\n const { query, agentId, limit = 10 } = params;\n\n // If query is empty, return all entities up to limit\n if (!query || query.trim() === \"\") {\n const result = await this.db\n .select()\n .from(entityTable)\n .where(eq(entityTable.agentId, agentId))\n .limit(limit);\n\n return result.map((row: Record<string, unknown>) => ({\n id: row.id as UUID,\n agentId: row.agentId as UUID,\n names: (row.names || []) as string[],\n metadata: (row.metadata || {}) as Metadata,\n }));\n }\n\n // Otherwise, search for entities with names containing the query (case-insensitive)\n const searchQuery = sql`\n SELECT * FROM ${entityTable}\n WHERE ${entityTable.agentId} = ${agentId}\n AND EXISTS (\n SELECT 1 FROM unnest(${entityTable.names}) AS name\n WHERE LOWER(name) LIKE LOWER(${`%${query}%`})\n )\n LIMIT ${limit}\n `;\n\n const result = await this.db.execute(searchQuery);\n\n return result.rows.map((row: Record<string, unknown>) => ({\n id: row.id as UUID,\n agentId: row.agentId as UUID,\n names: (row.names || []) as string[],\n metadata: (row.metadata || {}) as Metadata,\n }));\n });\n }\n\n async getComponent(\n entityId: UUID,\n type: string,\n worldId?: UUID,\n sourceEntityId?: UUID\n ): Promise<Component | null> {\n return this.withDatabase(async () => {\n const conditions = [eq(componentTable.entityId, entityId), eq(componentTable.type, type)];\n\n if (worldId) {\n conditions.push(eq(componentTable.worldId, worldId));\n }\n\n if (sourceEntityId) {\n conditions.push(eq(componentTable.sourceEntityId, sourceEntityId));\n }\n\n const result = await this.db\n .select()\n .from(componentTable)\n .where(and(...conditions));\n\n if (result.length === 0) return null;\n\n const component = result[0];\n\n return {\n ...component,\n id: component.id as UUID,\n entityId: component.entityId as UUID,\n agentId: component.agentId as UUID,\n roomId: component.roomId as UUID,\n worldId: (component.worldId ?? \"\") as UUID,\n sourceEntityId: (component.sourceEntityId ?? \"\") as UUID,\n data: component.data as Metadata,\n createdAt: component.createdAt.getTime(),\n };\n });\n }\n\n /**\n * Asynchronously retrieves all components for a given entity, optionally filtered by world and source entity.\n * @param {UUID} entityId - The unique identifier of the entity to retrieve components for\n * @param {UUID} [worldId] - Optional world ID to filter components by\n * @param {UUID} [sourceEntityId] - Optional source entity ID to filter components by\n * @returns {Promise<Component[]>} A Promise that resolves to an array of components\n */\n async getComponents(entityId: UUID, worldId?: UUID, sourceEntityId?: UUID): Promise<Component[]> {\n return this.withDatabase(async () => {\n const conditions = [eq(componentTable.entityId, entityId)];\n\n if (worldId) {\n conditions.push(eq(componentTable.worldId, worldId));\n }\n\n if (sourceEntityId) {\n conditions.push(eq(componentTable.sourceEntityId, sourceEntityId));\n }\n\n const result = await this.db\n .select({\n id: componentTable.id,\n entityId: componentTable.entityId,\n type: componentTable.type,\n data: componentTable.data,\n worldId: componentTable.worldId,\n agentId: componentTable.agentId,\n roomId: componentTable.roomId,\n sourceEntityId: componentTable.sourceEntityId,\n createdAt: componentTable.createdAt,\n })\n .from(componentTable)\n .where(and(...conditions));\n\n if (result.length === 0) return [];\n\n const components = result.map((component) => ({\n ...component,\n id: component.id as UUID,\n entityId: component.entityId as UUID,\n agentId: component.agentId as UUID,\n roomId: component.roomId as UUID,\n worldId: (component.worldId ?? \"\") as UUID,\n sourceEntityId: (component.sourceEntityId ?? \"\") as UUID,\n data: component.data as Metadata,\n createdAt: component.createdAt.getTime(),\n }));\n\n return components;\n });\n }\n\n /**\n * Asynchronously creates a new component in the database.\n * @param {Component} component - The component object to be created.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating the success of the operation.\n */\n async createComponent(component: Component): Promise<boolean> {\n return this.withDatabase(async () => {\n await this.db.insert(componentTable).values({\n ...component,\n createdAt: new Date(),\n });\n return true;\n });\n }\n\n /**\n * Asynchronously updates an existing component in the database.\n * @param {Component} component - The component object to be updated.\n * @returns {Promise<void>} A Promise that resolves when the component is updated.\n */\n async updateComponent(component: Component): Promise<void> {\n return this.withDatabase(async () => {\n try {\n // Convert createdAt from number to Date for database compatibility\n const { createdAt, ...rest } = component;\n await this.db\n .update(componentTable)\n .set({\n ...rest,\n createdAt: new Date(createdAt),\n })\n .where(eq(componentTable.id, component.id));\n } catch (e) {\n console.error(\"updateComponent error\", e);\n }\n });\n }\n\n /**\n * Asynchronously deletes a component from the database.\n * @param {UUID} componentId - The unique identifier of the component to delete.\n * @returns {Promise<void>} A Promise that resolves when the component is deleted.\n */\n async deleteComponent(componentId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.delete(componentTable).where(eq(componentTable.id, componentId));\n });\n }\n\n /**\n * Asynchronously retrieves memories from the database based on the provided parameters.\n * @param {Object} params - The parameters for retrieving memories.\n * @param {UUID} params.roomId - The ID of the room to retrieve memories for.\n * @param {number} [params.count] - The maximum number of memories to retrieve.\n * @param {number} [params.offset] - The offset for pagination.\n * @param {boolean} [params.unique] - Whether to retrieve unique memories only.\n * @param {string} [params.tableName] - The name of the table to retrieve memories from.\n * @param {number} [params.start] - The start date to retrieve memories from.\n * @param {number} [params.end] - The end date to retrieve memories from.\n * @returns {Promise<Memory[]>} A Promise that resolves to an array of memories.\n */\n async getMemories(params: {\n entityId?: UUID;\n agentId?: UUID;\n count?: number;\n offset?: number;\n unique?: boolean;\n tableName: string;\n start?: number;\n end?: number;\n roomId?: UUID;\n worldId?: UUID;\n }): Promise<Memory[]> {\n const { entityId, agentId, roomId, worldId, tableName, unique, start, end, offset } = params;\n\n if (!tableName) throw new Error(\"tableName is required\");\n if (offset !== undefined && offset < 0) {\n throw new Error(\"offset must be a non-negative number\");\n }\n\n return this.withEntityContext(entityId ?? null, async (tx) => {\n const conditions = [eq(memoryTable.type, tableName)];\n\n if (start) {\n conditions.push(gte(memoryTable.createdAt, new Date(start)));\n }\n\n // RLS handles access control - no explicit entityId filter needed\n\n if (roomId) {\n conditions.push(eq(memoryTable.roomId, roomId));\n }\n\n // Add worldId condition\n if (worldId) {\n conditions.push(eq(memoryTable.worldId, worldId));\n }\n\n if (end) {\n conditions.push(lte(memoryTable.createdAt, new Date(end)));\n }\n\n if (unique) {\n conditions.push(eq(memoryTable.unique, true));\n }\n\n if (agentId) {\n conditions.push(eq(memoryTable.agentId, agentId));\n }\n\n const baseQuery = tx\n .select({\n memory: {\n id: memoryTable.id,\n type: memoryTable.type,\n createdAt: memoryTable.createdAt,\n content: memoryTable.content,\n entityId: memoryTable.entityId,\n agentId: memoryTable.agentId,\n roomId: memoryTable.roomId,\n unique: memoryTable.unique,\n metadata: memoryTable.metadata,\n },\n embedding: embeddingTable[this.embeddingDimension],\n })\n .from(memoryTable)\n .leftJoin(embeddingTable, eq(embeddingTable.memoryId, memoryTable.id))\n .where(and(...conditions))\n .orderBy(desc(memoryTable.createdAt));\n\n // Apply limit and offset for pagination\n // Build query conditionally to maintain proper types\n const rows = await (async () => {\n if (params.count && offset !== undefined && offset > 0) {\n return baseQuery.limit(params.count).offset(offset);\n } else if (params.count) {\n return baseQuery.limit(params.count);\n } else if (offset !== undefined && offset > 0) {\n return baseQuery.offset(offset);\n } else {\n return baseQuery;\n }\n })();\n\n return rows.map((row) => ({\n id: row.memory.id as UUID,\n type: row.memory.type,\n createdAt: row.memory.createdAt.getTime(),\n content:\n typeof row.memory.content === \"string\"\n ? JSON.parse(row.memory.content)\n : row.memory.content,\n entityId: row.memory.entityId as UUID,\n agentId: row.memory.agentId as UUID,\n roomId: row.memory.roomId as UUID,\n unique: row.memory.unique,\n metadata: row.memory.metadata as MemoryMetadata,\n embedding: row.embedding ? Array.from(row.embedding) : undefined,\n }));\n });\n }\n\n /**\n * Asynchronously retrieves memories from the database based on the provided parameters.\n * @param {Object} params - The parameters for retrieving memories.\n * @param {UUID[]} params.roomIds - The IDs of the rooms to retrieve memories for.\n * @param {string} params.tableName - The name of the table to retrieve memories from.\n * @param {number} [params.limit] - The maximum number of memories to retrieve.\n * @returns {Promise<Memory[]>} A Promise that resolves to an array of memories.\n */\n async getMemoriesByRoomIds(params: {\n roomIds: UUID[];\n tableName: string;\n limit?: number;\n }): Promise<Memory[]> {\n return this.withDatabase(async () => {\n if (params.roomIds.length === 0) return [];\n\n const conditions = [\n eq(memoryTable.type, params.tableName),\n inArray(memoryTable.roomId, params.roomIds),\n ];\n\n conditions.push(eq(memoryTable.agentId, this.agentId));\n\n const query = this.db\n .select({\n id: memoryTable.id,\n type: memoryTable.type,\n createdAt: memoryTable.createdAt,\n content: memoryTable.content,\n entityId: memoryTable.entityId,\n agentId: memoryTable.agentId,\n roomId: memoryTable.roomId,\n unique: memoryTable.unique,\n metadata: memoryTable.metadata,\n })\n .from(memoryTable)\n .where(and(...conditions))\n .orderBy(desc(memoryTable.createdAt));\n\n const rows = params.limit ? await query.limit(params.limit) : await query;\n\n return rows.map((row) => ({\n id: row.id as UUID,\n createdAt: row.createdAt.getTime(),\n content: typeof row.content === \"string\" ? JSON.parse(row.content) : row.content,\n entityId: row.entityId as UUID,\n agentId: row.agentId as UUID,\n roomId: row.roomId as UUID,\n unique: row.unique,\n metadata: row.metadata,\n })) as Memory[];\n });\n }\n\n /**\n * Asynchronously retrieves a memory by its unique identifier.\n * @param {UUID} id - The unique identifier of the memory to retrieve.\n * @returns {Promise<Memory | null>} A Promise that resolves to the memory if found, null otherwise.\n */\n async getMemoryById(id: UUID): Promise<Memory | null> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({\n memory: memoryTable,\n embedding: embeddingTable[this.embeddingDimension],\n })\n .from(memoryTable)\n .leftJoin(embeddingTable, eq(memoryTable.id, embeddingTable.memoryId))\n .where(eq(memoryTable.id, id))\n .limit(1);\n\n if (result.length === 0) return null;\n\n const row = result[0];\n return {\n id: row.memory.id as UUID,\n createdAt: row.memory.createdAt.getTime(),\n content:\n typeof row.memory.content === \"string\"\n ? JSON.parse(row.memory.content)\n : row.memory.content,\n entityId: row.memory.entityId as UUID,\n agentId: row.memory.agentId as UUID,\n roomId: row.memory.roomId as UUID,\n unique: row.memory.unique,\n metadata: row.memory.metadata as MemoryMetadata,\n embedding: row.embedding ?? undefined,\n };\n });\n }\n\n /**\n * Asynchronously retrieves memories from the database based on the provided parameters.\n * @param {Object} params - The parameters for retrieving memories.\n * @param {UUID[]} params.memoryIds - The IDs of the memories to retrieve.\n * @param {string} [params.tableName] - The name of the table to retrieve memories from.\n * @returns {Promise<Memory[]>} A Promise that resolves to an array of memories.\n */\n async getMemoriesByIds(memoryIds: UUID[], tableName?: string): Promise<Memory[]> {\n return this.withDatabase(async () => {\n if (memoryIds.length === 0) return [];\n\n const conditions = [inArray(memoryTable.id, memoryIds)];\n\n if (tableName) {\n conditions.push(eq(memoryTable.type, tableName));\n }\n\n const rows = await this.db\n .select({\n memory: memoryTable,\n embedding: embeddingTable[this.embeddingDimension],\n })\n .from(memoryTable)\n .leftJoin(embeddingTable, eq(embeddingTable.memoryId, memoryTable.id))\n .where(and(...conditions))\n .orderBy(desc(memoryTable.createdAt));\n\n return rows.map((row) => ({\n id: row.memory.id as UUID,\n createdAt: row.memory.createdAt.getTime(),\n content:\n typeof row.memory.content === \"string\"\n ? JSON.parse(row.memory.content)\n : row.memory.content,\n entityId: row.memory.entityId as UUID,\n agentId: row.memory.agentId as UUID,\n roomId: row.memory.roomId as UUID,\n unique: row.memory.unique,\n metadata: row.memory.metadata as MemoryMetadata,\n embedding: row.embedding ?? undefined,\n }));\n });\n }\n\n /**\n * Asynchronously retrieves cached embeddings from the database based on the provided parameters.\n * @param {Object} opts - The parameters for retrieving cached embeddings.\n * @param {string} opts.query_table_name - The name of the table to retrieve embeddings from.\n * @param {number} opts.query_threshold - The threshold for the levenshtein distance.\n * @param {string} opts.query_input - The input string to search for.\n * @param {string} opts.query_field_name - The name of the field to retrieve embeddings from.\n * @param {string} opts.query_field_sub_name - The name of the sub-field to retrieve embeddings from.\n * @param {number} opts.query_match_count - The maximum number of matches to retrieve.\n * @returns {Promise<{ embedding: number[]; levenshtein_score: number }[]>} A Promise that resolves to an array of cached embeddings.\n */\n async getCachedEmbeddings(opts: {\n query_table_name: string;\n query_threshold: number;\n query_input: string;\n query_field_name: string;\n query_field_sub_name: string;\n query_match_count: number;\n }): Promise<{ embedding: number[]; levenshtein_score: number }[]> {\n return this.withDatabase(async () => {\n try {\n // Drizzle database has execute method for raw SQL\n interface DrizzleDatabaseWithExecute {\n execute: (query: ReturnType<typeof sql>) => Promise<{ rows: Record<string, unknown>[] }>;\n }\n const results = await (this.db as DrizzleDatabaseWithExecute).execute(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 return results.rows\n .map((row) => ({\n embedding: Array.isArray(row.embedding)\n ? row.embedding\n : typeof row.embedding === \"string\"\n ? JSON.parse(row.embedding)\n : [],\n levenshtein_score: Number(row.levenshtein_score),\n }))\n .filter((row) => Array.isArray(row.embedding));\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n tableName: opts.query_table_name,\n fieldName: opts.query_field_name,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to get cached embeddings\"\n );\n if (\n error instanceof Error &&\n error.message === \"levenshtein argument exceeds maximum length of 255 characters\"\n ) {\n return [];\n }\n throw error;\n }\n });\n }\n\n /**\n * Asynchronously logs an event in the database.\n * @param {Object} params - The parameters for logging an event.\n * @param {Object} params.body - The body of the event to log.\n * @param {UUID} params.entityId - The ID of the entity associated with the event.\n * @param {UUID} params.roomId - The ID of the room associated with the event.\n * @param {string} params.type - The type of the event to log.\n * @returns {Promise<void>} A Promise that resolves when the event is logged.\n */\n async log(params: {\n body: { [key: string]: unknown };\n entityId: UUID;\n roomId: UUID;\n type: string;\n }): Promise<void> {\n return this.withDatabase(async () => {\n try {\n // Sanitize JSON body to prevent Unicode escape sequence errors\n const sanitizedBody = this.sanitizeJsonObject(params.body);\n\n // Serialize to JSON string first for an additional layer of protection\n // This ensures any problematic characters are properly escaped during JSON serialization\n const jsonString = JSON.stringify(sanitizedBody);\n\n // Use withEntityContext to set Entity RLS context before inserting\n // This ensures the log entry passes STRICT Entity RLS policy\n await this.withEntityContext(params.entityId, async (tx) => {\n await tx.insert(logTable).values({\n body: sql`${jsonString}::jsonb`,\n entityId: params.entityId,\n roomId: params.roomId,\n type: params.type,\n });\n });\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n type: params.type,\n roomId: params.roomId,\n entityId: params.entityId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to create log entry\"\n );\n throw error;\n }\n });\n }\n\n /**\n * Sanitizes a JSON object by replacing problematic Unicode escape sequences\n * that could cause errors during JSON serialization/storage\n *\n * @param value - The value to sanitize\n * @returns The sanitized value\n */\n private sanitizeJsonObject(value: unknown, seen: WeakSet<object> = new WeakSet()): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === \"string\") {\n // Handle multiple cases that can cause PostgreSQL/PgLite JSON parsing errors:\n // 1. Remove null bytes (U+0000) which are not allowed in PostgreSQL text fields\n // 2. Escape single backslashes that might be interpreted as escape sequences\n // 3. Fix broken Unicode escape sequences (\\u not followed by 4 hex digits)\n const nullChar = String.fromCharCode(0);\n const nullCharRegex = new RegExp(nullChar, \"g\");\n return value\n .replace(nullCharRegex, \"\") // Remove null bytes\n .replace(/\\\\(?![\"\\\\/bfnrtu])/g, \"\\\\\\\\\") // Escape single backslashes not part of valid escape sequences\n .replace(/\\\\u(?![0-9a-fA-F]{4})/g, \"\\\\\\\\u\"); // Fix malformed Unicode escape sequences\n }\n\n if (typeof value === \"object\") {\n if (seen.has(value as object)) {\n return null;\n } else {\n seen.add(value as object);\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => this.sanitizeJsonObject(item, seen));\n } else {\n const result: Record<string, unknown> = {};\n const nullChar = String.fromCharCode(0);\n const nullCharRegex = new RegExp(nullChar, \"g\");\n for (const [key, val] of Object.entries(value)) {\n // Also sanitize object keys\n const sanitizedKey =\n typeof key === \"string\"\n ? key.replace(nullCharRegex, \"\").replace(/\\\\u(?![0-9a-fA-F]{4})/g, \"\\\\\\\\u\")\n : key;\n result[sanitizedKey] = this.sanitizeJsonObject(val, seen);\n }\n return result;\n }\n }\n\n return value;\n }\n\n /**\n * Asynchronously retrieves logs from the database based on the provided parameters.\n * @param {Object} params - The parameters for retrieving logs.\n * @param {UUID} params.entityId - The ID of the entity associated with the logs.\n * @param {UUID} [params.roomId] - The ID of the room associated with the logs.\n * @param {string} [params.type] - The type of the logs to retrieve.\n * @param {number} [params.count] - The maximum number of logs to retrieve.\n * @param {number} [params.offset] - The offset to retrieve logs from.\n * @returns {Promise<Log[]>} A Promise that resolves to an array of logs.\n */\n async getLogs(params: {\n entityId?: UUID;\n roomId?: UUID;\n type?: string;\n count?: number;\n offset?: number;\n }): Promise<Log[]> {\n const { entityId, roomId, type, count, offset } = params;\n\n // Use withEntityContext for RLS only when entityId is provided\n // Without entityId, bypass RLS to see all logs (for non-RLS mode)\n return this.withEntityContext(entityId ?? null, async (tx) => {\n const result = await tx\n .select()\n .from(logTable)\n .where(\n and(\n roomId ? eq(logTable.roomId, roomId) : undefined,\n type ? eq(logTable.type, type) : undefined\n )\n )\n .orderBy(desc(logTable.createdAt))\n .limit(count ?? 10)\n .offset(offset ?? 0);\n\n const logs = result.map((log) => ({\n ...log,\n id: log.id as UUID,\n entityId: log.entityId as UUID,\n roomId: log.roomId as UUID,\n type: log.type as string,\n body: log.body as LogBody,\n createdAt: new Date(log.createdAt as string | number | Date),\n }));\n\n if (logs.length === 0) return [];\n\n return logs;\n });\n }\n\n async getAgentRunSummaries(\n params: {\n limit?: number;\n roomId?: UUID;\n status?: RunStatus | \"all\";\n from?: number;\n to?: number;\n entityId?: UUID;\n } = {}\n ): Promise<AgentRunSummaryResult> {\n const limit = Math.min(Math.max(params.limit ?? 20, 1), 100);\n const fromDate = typeof params.from === \"number\" ? new Date(params.from) : undefined;\n const toDate = typeof params.to === \"number\" ? new Date(params.to) : undefined;\n\n // Use withEntityContext for RLS when entityId is provided\n return this.withEntityContext(params.entityId ?? null, async (tx) => {\n const runMap = new Map<string, AgentRunSummary>();\n\n const conditions: SQL<unknown>[] = [\n eq(logTable.type, \"run_event\"),\n sql`${logTable.body} ? 'runId'`,\n eq(roomTable.agentId, this.agentId),\n ];\n\n if (params.roomId) {\n conditions.push(eq(logTable.roomId, params.roomId));\n }\n if (fromDate) {\n conditions.push(gte(logTable.createdAt, fromDate));\n }\n if (toDate) {\n conditions.push(lte(logTable.createdAt, toDate));\n }\n\n const whereClause = and(...conditions);\n\n const eventLimit = Math.max(limit * 20, 200);\n\n const runEventRows = await tx\n .select({\n runId: sql<string>`(${logTable.body} ->> 'runId')`,\n status: sql<string | null>`(${logTable.body} ->> 'status')`,\n messageId: sql<string | null>`(${logTable.body} ->> 'messageId')`,\n rawBody: logTable.body,\n createdAt: logTable.createdAt,\n roomId: logTable.roomId,\n entityId: logTable.entityId,\n })\n .from(logTable)\n .innerJoin(roomTable, eq(roomTable.id, logTable.roomId))\n .where(whereClause)\n .orderBy(desc(logTable.createdAt))\n .limit(eventLimit);\n\n for (const row of runEventRows) {\n const runId = row.runId;\n if (!runId) continue;\n\n const summary: AgentRunSummary = runMap.get(runId) ?? {\n runId,\n status: \"started\",\n startedAt: null,\n endedAt: null,\n durationMs: null,\n messageId: undefined,\n roomId: undefined,\n entityId: undefined,\n metadata: {},\n };\n\n if (!summary.messageId && row.messageId) {\n summary.messageId = row.messageId as UUID;\n }\n if (!summary.roomId && row.roomId) {\n summary.roomId = row.roomId as UUID;\n }\n if (!summary.entityId && row.entityId) {\n summary.entityId = row.entityId as UUID;\n }\n\n const body = row.rawBody as Record<string, unknown> | undefined;\n if (body && typeof body === \"object\") {\n if (!summary.roomId && typeof body.roomId === \"string\") {\n summary.roomId = body.roomId as UUID;\n }\n if (!summary.entityId && typeof body.entityId === \"string\") {\n summary.entityId = body.entityId as UUID;\n }\n if (!summary.messageId && typeof body.messageId === \"string\") {\n summary.messageId = body.messageId as UUID;\n }\n if (!summary.metadata || Object.keys(summary.metadata).length === 0) {\n const metadata = (body.metadata as Record<string, unknown> | undefined) ?? undefined;\n summary.metadata = metadata ? ({ ...metadata } as Record<string, JsonValue>) : {};\n }\n }\n\n const createdAt = row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt);\n const timestamp = createdAt.getTime();\n const bodyStatus = body?.status;\n const eventStatus =\n (row.status as RunStatus | undefined) ?? (bodyStatus as RunStatus | undefined);\n\n if (eventStatus === \"started\") {\n const currentStartedAt =\n summary.startedAt === null\n ? null\n : typeof summary.startedAt === \"bigint\"\n ? Number(summary.startedAt)\n : summary.startedAt;\n summary.startedAt =\n currentStartedAt === null ? timestamp : Math.min(currentStartedAt, timestamp);\n } else if (\n eventStatus === \"completed\" ||\n eventStatus === \"timeout\" ||\n eventStatus === \"error\"\n ) {\n summary.status = eventStatus;\n summary.endedAt = timestamp;\n if (summary.startedAt !== null) {\n const startedAtNum =\n typeof summary.startedAt === \"bigint\" ? Number(summary.startedAt) : summary.startedAt;\n summary.durationMs = Math.max(timestamp - startedAtNum, 0);\n }\n }\n\n runMap.set(runId, summary);\n }\n\n let runs = Array.from(runMap.values());\n if (params.status && params.status !== \"all\") {\n runs = runs.filter((run) => run.status === params.status);\n }\n\n runs.sort((a, b) => {\n const aStarted =\n a.startedAt === null\n ? 0\n : typeof a.startedAt === \"bigint\"\n ? Number(a.startedAt)\n : a.startedAt;\n const bStarted =\n b.startedAt === null\n ? 0\n : typeof b.startedAt === \"bigint\"\n ? Number(b.startedAt)\n : b.startedAt;\n return bStarted - aStarted;\n });\n\n const total = runs.length;\n const limitedRuns = runs.slice(0, limit);\n const hasMore = total > limit;\n\n const runCounts = new Map<string, AgentRunCounts>();\n for (const run of limitedRuns) {\n runCounts.set(run.runId, {\n actions: 0,\n modelCalls: 0,\n errors: 0,\n evaluators: 0,\n });\n }\n\n const runIds = limitedRuns.map((run) => run.runId).filter(Boolean);\n\n if (runIds.length > 0) {\n const runIdArray = sql`array[${sql.join(\n runIds.map((id) => sql`${id}`),\n sql`, `\n )}]::text[]`;\n\n const actionSummary = await this.db.execute(sql`\n SELECT\n body->>'runId' as \"runId\",\n COUNT(*)::int as \"actions\",\n SUM(CASE WHEN COALESCE(body->'result'->>'success', 'true') = 'false' THEN 1 ELSE 0 END)::int as \"errors\",\n SUM(COALESCE((body->>'promptCount')::int, 0))::int as \"modelCalls\"\n FROM ${logTable}\n WHERE type = 'action'\n AND body->>'runId' = ANY(${runIdArray})\n GROUP BY body->>'runId'\n `);\n\n const actionRows = (actionSummary.rows ?? []) as Array<{\n runId: string;\n actions: number | string;\n errors: number | string;\n modelCalls: number | string;\n }>;\n\n for (const row of actionRows) {\n const counts = runCounts.get(row.runId);\n if (!counts) continue;\n counts.actions += Number(row.actions ?? 0);\n counts.errors += Number(row.errors ?? 0);\n counts.modelCalls += Number(row.modelCalls ?? 0);\n }\n\n const evaluatorSummary = await this.db.execute(sql`\n SELECT\n body->>'runId' as \"runId\",\n COUNT(*)::int as \"evaluators\"\n FROM ${logTable}\n WHERE type = 'evaluator'\n AND body->>'runId' = ANY(${runIdArray})\n GROUP BY body->>'runId'\n `);\n\n const evaluatorRows = (evaluatorSummary.rows ?? []) as Array<{\n runId: string;\n evaluators: number | string;\n }>;\n\n for (const row of evaluatorRows) {\n const counts = runCounts.get(row.runId);\n if (!counts) continue;\n counts.evaluators += Number(row.evaluators ?? 0);\n }\n\n const genericSummary = await this.db.execute(sql`\n SELECT\n body->>'runId' as \"runId\",\n COUNT(*) FILTER (WHERE type LIKE 'useModel:%')::int as \"modelLogs\",\n COUNT(*) FILTER (WHERE type = 'embedding_event' AND body->>'status' = 'failed')::int as \"embeddingErrors\"\n FROM ${logTable}\n WHERE (type LIKE 'useModel:%' OR type = 'embedding_event')\n AND body->>'runId' = ANY(${runIdArray})\n GROUP BY body->>'runId'\n `);\n\n const genericRows = (genericSummary.rows ?? []) as Array<{\n runId: string;\n modelLogs: number | string;\n embeddingErrors: number | string;\n }>;\n\n for (const row of genericRows) {\n const counts = runCounts.get(row.runId);\n if (!counts) continue;\n counts.modelCalls += Number(row.modelLogs ?? 0);\n counts.errors += Number(row.embeddingErrors ?? 0);\n }\n }\n\n for (const run of limitedRuns) {\n const counts = runCounts.get(run.runId) ?? {\n actions: 0,\n modelCalls: 0,\n errors: 0,\n evaluators: 0,\n };\n // Cast through unknown to bridge the core type (without $typeName) to proto type (with $typeName)\n run.counts = counts as unknown as typeof run.counts;\n }\n\n return {\n runs: limitedRuns as unknown as import(\"@elizaos/core\").AgentRunSummary[],\n total,\n hasMore,\n } as AgentRunSummaryResult;\n });\n }\n\n /**\n * Asynchronously deletes a log from the database based on the provided parameters.\n * @param {UUID} logId - The ID of the log to delete.\n * @returns {Promise<void>} A Promise that resolves when the log is deleted.\n */\n async deleteLog(logId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.delete(logTable).where(eq(logTable.id, logId));\n });\n }\n\n /**\n * Asynchronously searches for memories in the database based on the provided parameters.\n * @param {Object} params - The parameters for searching for memories.\n * @param {string} params.tableName - The name of the table to search for memories in.\n * @param {number[]} params.embedding - The embedding to search for.\n * @param {number} [params.match_threshold] - The threshold for the cosine distance.\n * @param {number} [params.count] - The maximum number of memories to retrieve.\n * @param {boolean} [params.unique] - Whether to retrieve unique memories only.\n * @param {string} [params.query] - Optional query string for potential reranking.\n * @param {UUID} [params.roomId] - Optional room ID to filter by.\n * @param {UUID} [params.worldId] - Optional world ID to filter by.\n * @param {UUID} [params.entityId] - Optional entity ID to filter by.\n * @returns {Promise<Memory[]>} A Promise that resolves to an array of memories.\n */\n async searchMemories(params: {\n tableName: string;\n embedding: number[];\n match_threshold?: number;\n count?: number;\n unique?: boolean;\n query?: string;\n roomId?: UUID;\n worldId?: UUID;\n entityId?: UUID;\n }): Promise<Memory[]> {\n return await this.searchMemoriesByEmbedding(params.embedding, {\n match_threshold: params.match_threshold,\n count: params.count,\n // Pass direct scope fields down\n roomId: params.roomId,\n worldId: params.worldId,\n entityId: params.entityId,\n unique: params.unique,\n tableName: params.tableName,\n });\n }\n\n /**\n * Asynchronously searches for memories in the database based on the provided parameters.\n * @param {number[]} embedding - The embedding to search for.\n * @param {Object} params - The parameters for searching for memories.\n * @param {number} [params.match_threshold] - The threshold for the cosine distance.\n * @param {number} [params.count] - The maximum number of memories to retrieve.\n * @param {UUID} [params.roomId] - Optional room ID to filter by.\n * @param {UUID} [params.worldId] - Optional world ID to filter by.\n * @param {UUID} [params.entityId] - Optional entity ID to filter by.\n * @param {boolean} [params.unique] - Whether to retrieve unique memories only.\n * @param {string} [params.tableName] - The name of the table to search for memories in.\n * @returns {Promise<Memory[]>} A Promise that resolves to an array of memories.\n */\n async searchMemoriesByEmbedding(\n embedding: number[],\n params: {\n match_threshold?: number;\n count?: number;\n roomId?: UUID;\n worldId?: UUID;\n entityId?: UUID;\n unique?: boolean;\n tableName: string;\n }\n ): Promise<Memory[]> {\n return this.withDatabase(async () => {\n const cleanVector = embedding.map((n) => (Number.isFinite(n) ? Number(n.toFixed(6)) : 0));\n\n const similarity = sql<number>`1 - (${cosineDistance(\n embeddingTable[this.embeddingDimension],\n cleanVector\n )})`;\n\n const conditions = [eq(memoryTable.type, params.tableName)];\n\n if (params.unique) {\n conditions.push(eq(memoryTable.unique, true));\n }\n\n conditions.push(eq(memoryTable.agentId, this.agentId));\n\n // Add filters based on direct params\n if (params.roomId) {\n conditions.push(eq(memoryTable.roomId, params.roomId));\n }\n if (params.worldId) {\n conditions.push(eq(memoryTable.worldId, params.worldId));\n }\n if (params.entityId) {\n conditions.push(eq(memoryTable.entityId, params.entityId));\n }\n\n if (params.match_threshold) {\n conditions.push(gte(similarity, params.match_threshold));\n }\n\n const results = await this.db\n .select({\n memory: memoryTable,\n similarity,\n embedding: embeddingTable[this.embeddingDimension],\n })\n .from(embeddingTable)\n .innerJoin(memoryTable, eq(memoryTable.id, embeddingTable.memoryId))\n .where(and(...conditions))\n .orderBy(desc(similarity))\n .limit(params.count ?? 10);\n\n return results.map((row) => ({\n id: row.memory.id as UUID,\n type: row.memory.type,\n createdAt: row.memory.createdAt.getTime(),\n content:\n typeof row.memory.content === \"string\"\n ? JSON.parse(row.memory.content)\n : row.memory.content,\n entityId: row.memory.entityId as UUID,\n agentId: row.memory.agentId as UUID,\n roomId: row.memory.roomId as UUID,\n worldId: row.memory.worldId as UUID | undefined, // Include worldId\n unique: row.memory.unique,\n metadata: row.memory.metadata as MemoryMetadata,\n embedding: row.embedding ?? undefined,\n similarity: row.similarity,\n }));\n });\n }\n\n /**\n * Asynchronously creates a new memory in the database.\n * @param {Memory & { metadata?: MemoryMetadata }} memory - The memory object to create.\n * @param {string} tableName - The name of the table to create the memory in.\n * @returns {Promise<UUID>} A Promise that resolves to the ID of the created memory.\n */\n async createMemory(\n memory: Memory & { metadata?: MemoryMetadata },\n tableName: string\n ): Promise<UUID> {\n const memoryId = memory.id ?? (v4() as UUID);\n\n const existing = await this.getMemoryById(memoryId);\n if (existing) {\n return memoryId;\n }\n\n // only do costly check if we need to\n if (memory.unique === undefined) {\n memory.unique = true; // set default\n if (memory.embedding && Array.isArray(memory.embedding)) {\n const similarMemories = await this.searchMemoriesByEmbedding(memory.embedding, {\n tableName,\n // Use the scope fields from the memory object for similarity check\n roomId: memory.roomId,\n worldId: memory.worldId,\n entityId: memory.entityId,\n match_threshold: 0.95,\n count: 1,\n });\n memory.unique = similarMemories.length === 0;\n }\n }\n\n // Ensure we always pass a JSON string to the SQL placeholder – if we pass an\n // object directly PG sees `[object Object]` and fails the `::jsonb` cast.\n const contentToInsert =\n typeof memory.content === \"string\" ? memory.content : JSON.stringify(memory.content ?? {});\n\n const metadataToInsert =\n typeof memory.metadata === \"string\" ? memory.metadata : JSON.stringify(memory.metadata ?? {});\n\n // Use withEntityContext to set Entity RLS context if needed\n // This delegates to the concrete adapter implementation (PostgreSQL or PGLite)\n await this.withEntityContext(memory.entityId, async (tx) => {\n await tx.insert(memoryTable).values([\n {\n id: memoryId,\n type: tableName,\n content: sql`${contentToInsert}::jsonb`,\n metadata: sql`${metadataToInsert}::jsonb`,\n entityId: memory.entityId,\n roomId: memory.roomId,\n worldId: memory.worldId, // Include worldId\n agentId: memory.agentId || this.agentId,\n unique: memory.unique,\n createdAt: memory.createdAt ? new Date(memory.createdAt) : new Date(),\n },\n ]);\n\n if (memory.embedding && Array.isArray(memory.embedding)) {\n const embeddingValues: Record<string, unknown> = {\n id: v4(),\n memoryId: memoryId,\n createdAt: memory.createdAt ? new Date(memory.createdAt) : new Date(),\n };\n\n const cleanVector = memory.embedding.map((n) =>\n Number.isFinite(n) ? Number(n.toFixed(6)) : 0\n );\n\n embeddingValues[this.embeddingDimension] = cleanVector;\n\n await tx.insert(embeddingTable).values([embeddingValues]);\n }\n });\n\n return memoryId;\n }\n\n /**\n * Updates an existing memory in the database.\n * @param memory The memory object with updated content and optional embedding\n * @returns Promise resolving to boolean indicating success\n */\n async updateMemory(\n memory: Partial<Memory> & { id: UUID; metadata?: MemoryMetadata }\n ): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n await this.db.transaction(async (tx) => {\n // Update memory content if provided\n if (memory.content) {\n const contentToUpdate =\n typeof memory.content === \"string\"\n ? memory.content\n : JSON.stringify(memory.content ?? {});\n\n const metadataToUpdate =\n typeof memory.metadata === \"string\"\n ? memory.metadata\n : JSON.stringify(memory.metadata ?? {});\n\n await tx\n .update(memoryTable)\n .set({\n content: sql`${contentToUpdate}::jsonb`,\n ...(memory.metadata && {\n metadata: sql`${metadataToUpdate}::jsonb`,\n }),\n })\n .where(eq(memoryTable.id, memory.id));\n } else if (memory.metadata) {\n // Update only metadata if content is not provided\n const metadataToUpdate =\n typeof memory.metadata === \"string\"\n ? memory.metadata\n : JSON.stringify(memory.metadata ?? {});\n\n await tx\n .update(memoryTable)\n .set({\n metadata: sql`${metadataToUpdate}::jsonb`,\n })\n .where(eq(memoryTable.id, memory.id));\n }\n\n // Update embedding if provided\n if (memory.embedding && Array.isArray(memory.embedding)) {\n const cleanVector = memory.embedding.map((n) =>\n Number.isFinite(n) ? Number(n.toFixed(6)) : 0\n );\n\n // Check if embedding exists\n const existingEmbedding = await tx\n .select({ id: embeddingTable.id })\n .from(embeddingTable)\n .where(eq(embeddingTable.memoryId, memory.id))\n .limit(1);\n\n if (existingEmbedding.length > 0) {\n // Update existing embedding\n const updateValues: Record<string, unknown> = {};\n updateValues[this.embeddingDimension] = cleanVector;\n\n await tx\n .update(embeddingTable)\n .set(updateValues)\n .where(eq(embeddingTable.memoryId, memory.id));\n } else {\n // Create new embedding\n const embeddingValues: Record<string, unknown> = {\n id: v4(),\n memoryId: memory.id,\n };\n embeddingValues[this.embeddingDimension] = cleanVector;\n\n await tx.insert(embeddingTable).values([embeddingValues]);\n }\n }\n });\n\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n memoryId: memory.id,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to update memory\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously deletes a memory from the database based on the provided parameters.\n * @param {UUID} memoryId - The ID of the memory to delete.\n * @returns {Promise<void>} A Promise that resolves when the memory is deleted.\n */\n async deleteMemory(memoryId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.transaction(async (tx) => {\n // See if there are any fragments that we need to delete\n await this.deleteMemoryFragments(tx, memoryId);\n\n // Then delete the embedding for the main memory\n await tx.delete(embeddingTable).where(eq(embeddingTable.memoryId, memoryId));\n\n // Finally delete the memory itself\n await tx.delete(memoryTable).where(eq(memoryTable.id, memoryId));\n });\n });\n }\n\n /**\n * Asynchronously deletes multiple memories from the database in a single batch operation.\n * @param {UUID[]} memoryIds - An array of UUIDs of the memories to delete.\n * @returns {Promise<void>} A Promise that resolves when all memories are deleted.\n */\n async deleteManyMemories(memoryIds: UUID[]): Promise<void> {\n if (memoryIds.length === 0) {\n return;\n }\n\n return this.withDatabase(async () => {\n await this.db.transaction(async (tx) => {\n // Process in smaller batches to avoid query size limits\n const BATCH_SIZE = 100;\n for (let i = 0; i < memoryIds.length; i += BATCH_SIZE) {\n const batch = memoryIds.slice(i, i + BATCH_SIZE);\n\n // Delete any fragments for document memories in this batch\n await Promise.all(\n batch.map(async (memoryId) => {\n await this.deleteMemoryFragments(tx, memoryId);\n })\n );\n\n // Delete embeddings for the batch\n await tx.delete(embeddingTable).where(inArray(embeddingTable.memoryId, batch));\n\n // Delete the memories themselves\n await tx.delete(memoryTable).where(inArray(memoryTable.id, batch));\n }\n });\n });\n }\n\n /**\n * Deletes all memory fragments that reference a specific document memory\n * @param tx The database transaction\n * @param documentId The UUID of the document memory whose fragments should be deleted\n * @private\n */\n private async deleteMemoryFragments(tx: DrizzleDatabase, documentId: UUID): Promise<void> {\n const fragmentsToDelete = await this.getMemoryFragments(tx, documentId);\n\n if (fragmentsToDelete.length > 0) {\n const fragmentIds = fragmentsToDelete.map((f) => f.id) as UUID[];\n\n // Delete embeddings for fragments\n await tx.delete(embeddingTable).where(inArray(embeddingTable.memoryId, fragmentIds));\n\n // Delete the fragments\n await tx.delete(memoryTable).where(inArray(memoryTable.id, fragmentIds));\n }\n }\n\n /**\n * Retrieves all memory fragments that reference a specific document memory\n * @param tx The database transaction\n * @param documentId The UUID of the document memory whose fragments should be retrieved\n * @returns An array of memory fragments\n * @private\n */\n private async getMemoryFragments(tx: DrizzleDatabase, documentId: UUID): Promise<{ id: UUID }[]> {\n const fragments = await tx\n .select({ id: memoryTable.id })\n .from(memoryTable)\n .where(\n and(\n eq(memoryTable.agentId, this.agentId),\n sql`${memoryTable.metadata}->>'documentId' = ${documentId}`\n )\n );\n\n return fragments.map((f) => ({ id: f.id as UUID }));\n }\n\n /**\n * Asynchronously deletes all memories from the database based on the provided parameters.\n * @param {UUID} roomId - The ID of the room to delete memories from.\n * @param {string} tableName - The name of the table to delete memories from.\n * @returns {Promise<void>} A Promise that resolves when the memories are deleted.\n */\n async deleteAllMemories(roomId: UUID, tableName: string): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.transaction(async (tx) => {\n // 1) fetch all memory IDs for this room + table\n const rows = await tx\n .select({ id: memoryTable.id })\n .from(memoryTable)\n .where(and(eq(memoryTable.roomId, roomId), eq(memoryTable.type, tableName)));\n\n const ids = rows.map((r) => r.id);\n logger.debug(\n { src: \"plugin:sql\", roomId, tableName, memoryCount: ids.length },\n \"Deleting all memories\"\n );\n\n if (ids.length === 0) {\n return;\n }\n\n // 2) delete any fragments for \"document\" memories & their embeddings\n await Promise.all(\n ids.map(async (memoryId) => {\n await this.deleteMemoryFragments(tx, memoryId);\n await tx.delete(embeddingTable).where(eq(embeddingTable.memoryId, memoryId));\n })\n );\n\n // 3) delete the memories themselves\n await tx\n .delete(memoryTable)\n .where(and(eq(memoryTable.roomId, roomId), eq(memoryTable.type, tableName)));\n });\n });\n }\n\n /**\n * Asynchronously counts the number of memories in the database based on the provided parameters.\n * @param {UUID} roomId - The ID of the room to count memories in.\n * @param {boolean} [unique] - Whether to count unique memories only.\n * @param {string} [tableName] - The name of the table to count memories in.\n * @returns {Promise<number>} A Promise that resolves to the number of memories.\n */\n async countMemories(roomId: UUID, unique = true, tableName = \"\"): Promise<number> {\n if (!tableName) throw new Error(\"tableName is required\");\n\n return this.withDatabase(async () => {\n const conditions = [eq(memoryTable.roomId, roomId), eq(memoryTable.type, tableName)];\n\n if (unique) {\n conditions.push(eq(memoryTable.unique, true));\n }\n\n const result = await this.db\n .select({ count: sql<number>`count(*)` })\n .from(memoryTable)\n .where(and(...conditions));\n\n const result0 = result[0];\n return Number(result0?.count ?? 0);\n });\n }\n\n /**\n * Asynchronously retrieves rooms from the database based on the provided parameters.\n * @param {UUID[]} roomIds - The IDs of the rooms to retrieve.\n * @returns {Promise<Room[] | null>} A Promise that resolves to the rooms if found, null otherwise.\n */\n async getRoomsByIds(roomIds: UUID[]): Promise<Room[] | null> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({\n id: roomTable.id,\n name: roomTable.name, // Added name\n channelId: roomTable.channelId,\n agentId: roomTable.agentId,\n messageServerId: roomTable.messageServerId,\n worldId: roomTable.worldId,\n type: roomTable.type,\n source: roomTable.source,\n metadata: roomTable.metadata, // Added metadata\n })\n .from(roomTable)\n .where(and(inArray(roomTable.id, roomIds), eq(roomTable.agentId, this.agentId)));\n\n // Map the result to properly typed Room objects\n const rooms = result.map((room) => ({\n ...room,\n id: room.id as UUID,\n name: room.name ?? undefined,\n agentId: room.agentId as UUID,\n messageServerId: room.messageServerId as UUID,\n serverId: room.messageServerId as UUID, // Backward compatibility alias\n worldId: room.worldId as UUID,\n channelId: room.channelId as UUID,\n type: room.type as ChannelType,\n metadata: room.metadata as Metadata,\n }));\n\n return rooms;\n });\n }\n\n /**\n * Asynchronously retrieves all rooms from the database based on the provided parameters.\n * @param {UUID} worldId - The ID of the world to retrieve rooms from.\n * @returns {Promise<Room[]>} A Promise that resolves to an array of rooms.\n */\n async getRoomsByWorld(worldId: UUID): Promise<Room[]> {\n return this.withDatabase(async () => {\n const result = await this.db.select().from(roomTable).where(eq(roomTable.worldId, worldId));\n const rooms = result.map((room) => ({\n ...room,\n id: room.id as UUID,\n name: room.name ?? undefined,\n agentId: room.agentId as UUID,\n messageServerId: room.messageServerId as UUID,\n serverId: room.messageServerId as UUID, // Backward compatibility alias\n worldId: room.worldId as UUID,\n channelId: room.channelId as UUID,\n type: room.type as ChannelType,\n metadata: room.metadata as Metadata,\n }));\n return rooms;\n });\n }\n\n /**\n * Asynchronously updates a room in the database based on the provided parameters.\n * @param {Room} room - The room object to update.\n * @returns {Promise<void>} A Promise that resolves when the room is updated.\n */\n async updateRoom(room: Room): Promise<void> {\n return this.withDatabase(async () => {\n await this.db\n .update(roomTable)\n .set({ ...room, agentId: this.agentId })\n .where(eq(roomTable.id, room.id));\n });\n }\n\n /**\n * Asynchronously creates a new room in the database based on the provided parameters.\n * @param {Room} room - The room object to create.\n * @returns {Promise<UUID>} A Promise that resolves to the ID of the created room.\n */\n async createRooms(rooms: Room[]): Promise<UUID[]> {\n return this.withDatabase(async () => {\n const roomsWithIds = rooms.map((room) => ({\n ...room,\n agentId: this.agentId,\n id: room.id || v4(), // ensure each room has a unique ID\n }));\n\n const insertedRooms = await this.db\n .insert(roomTable)\n .values(roomsWithIds)\n .onConflictDoNothing()\n .returning();\n const insertedIds = insertedRooms.map((r) => r.id as UUID);\n return insertedIds;\n });\n }\n\n /**\n * Asynchronously deletes a room from the database based on the provided parameters.\n * @param {UUID} roomId - The ID of the room to delete.\n * @returns {Promise<void>} A Promise that resolves when the room is deleted.\n */\n async deleteRoom(roomId: UUID): Promise<void> {\n if (!roomId) throw new Error(\"Room ID is required\");\n return this.withDatabase(async () => {\n await this.db.transaction(async (tx) => {\n await tx.delete(roomTable).where(eq(roomTable.id, roomId));\n });\n });\n }\n\n /**\n * Asynchronously retrieves all rooms for a participant from the database based on the provided parameters.\n * @param {UUID} entityId - The ID of the entity to retrieve rooms for.\n * @returns {Promise<UUID[]>} A Promise that resolves to an array of room IDs.\n */\n async getRoomsForParticipant(entityId: UUID): Promise<UUID[]> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({ roomId: participantTable.roomId })\n .from(participantTable)\n .innerJoin(roomTable, eq(participantTable.roomId, roomTable.id))\n .where(and(eq(participantTable.entityId, entityId), eq(roomTable.agentId, this.agentId)));\n\n return result.map((row) => row.roomId as UUID);\n });\n }\n\n /**\n * Asynchronously retrieves all rooms for a list of participants from the database based on the provided parameters.\n * @param {UUID[]} entityIds - The IDs of the entities to retrieve rooms for.\n * @returns {Promise<UUID[]>} A Promise that resolves to an array of room IDs.\n */\n async getRoomsForParticipants(entityIds: UUID[]): Promise<UUID[]> {\n return this.withDatabase(async () => {\n const result = await this.db\n .selectDistinct({ roomId: participantTable.roomId })\n .from(participantTable)\n .innerJoin(roomTable, eq(participantTable.roomId, roomTable.id))\n .where(\n and(inArray(participantTable.entityId, entityIds), eq(roomTable.agentId, this.agentId))\n );\n\n return result.map((row) => row.roomId as UUID);\n });\n }\n\n /**\n * Asynchronously adds a participant to a room in the database based on the provided parameters.\n * @param {UUID} entityId - The ID of the entity to add to the room.\n * @param {UUID} roomId - The ID of the room to add the entity to.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating whether the participant was added successfully.\n */\n async addParticipant(entityId: UUID, roomId: UUID): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n await this.db\n .insert(participantTable)\n .values({\n entityId,\n roomId,\n agentId: this.agentId,\n })\n .onConflictDoNothing();\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n entityId,\n roomId,\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to add participant to room\"\n );\n return false;\n }\n });\n }\n\n async addParticipantsRoom(entityIds: UUID[], roomId: UUID): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n const values = entityIds.map((id) => ({\n entityId: id,\n roomId,\n agentId: this.agentId,\n }));\n await this.db.insert(participantTable).values(values).onConflictDoNothing().execute();\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n roomId,\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to add participants to room\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously removes a participant from a room in the database based on the provided parameters.\n * @param {UUID} entityId - The ID of the entity to remove from the room.\n * @param {UUID} roomId - The ID of the room to remove the entity from.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating whether the participant was removed successfully.\n */\n async removeParticipant(entityId: UUID, roomId: UUID): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n const result = await this.db.transaction(async (tx) => {\n return await tx\n .delete(participantTable)\n .where(\n and(eq(participantTable.entityId, entityId), eq(participantTable.roomId, roomId))\n )\n .returning();\n });\n\n const removed = result.length > 0;\n return removed;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n entityId,\n roomId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to remove participant from room\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously retrieves all participants for an entity from the database based on the provided parameters.\n * @param {UUID} entityId - The ID of the entity to retrieve participants for.\n * @returns {Promise<Participant[]>} A Promise that resolves to an array of participants.\n */\n async getParticipantsForEntity(entityId: UUID): Promise<Participant[]> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({\n id: participantTable.id,\n entityId: participantTable.entityId,\n roomId: participantTable.roomId,\n })\n .from(participantTable)\n .where(eq(participantTable.entityId, entityId));\n\n const entities = await this.getEntitiesByIds([entityId]);\n\n if (!entities || !entities.length) {\n return [];\n }\n\n return result.map((row) => ({\n id: row.id as UUID,\n entity: entities[0],\n }));\n });\n }\n\n /**\n * Asynchronously retrieves all participants for a room from the database based on the provided parameters.\n * @param {UUID} roomId - The ID of the room to retrieve participants for.\n * @returns {Promise<UUID[]>} A Promise that resolves to an array of entity IDs.\n */\n async getParticipantsForRoom(roomId: UUID): Promise<UUID[]> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({ entityId: participantTable.entityId })\n .from(participantTable)\n .where(eq(participantTable.roomId, roomId));\n\n return result.map((row) => row.entityId as UUID);\n });\n }\n\n /**\n * Check if an entity is a participant in a specific room/channel.\n * More efficient than getParticipantsForRoom when only checking membership.\n * @param {UUID} roomId - The ID of the room to check.\n * @param {UUID} entityId - The ID of the entity to check.\n * @returns {Promise<boolean>} A Promise that resolves to true if entity is a participant.\n */\n async isRoomParticipant(roomId: UUID, entityId: UUID): Promise<boolean> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select()\n .from(participantTable)\n .where(and(eq(participantTable.roomId, roomId), eq(participantTable.entityId, entityId)))\n .limit(1);\n\n return result.length > 0;\n });\n }\n\n /**\n * Asynchronously retrieves the user state for a participant in a room from the database based on the provided parameters.\n * @param {UUID} roomId - The ID of the room to retrieve the participant's user state for.\n * @param {UUID} entityId - The ID of the entity to retrieve the user state for.\n * @returns {Promise<\"FOLLOWED\" | \"MUTED\" | null>} A Promise that resolves to the participant's user state.\n */\n async getParticipantUserState(\n roomId: UUID,\n entityId: UUID\n ): Promise<\"FOLLOWED\" | \"MUTED\" | null> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({ roomState: participantTable.roomState })\n .from(participantTable)\n .where(\n and(\n eq(participantTable.roomId, roomId),\n eq(participantTable.entityId, entityId),\n eq(participantTable.agentId, this.agentId)\n )\n )\n .limit(1);\n\n const result0 = result[0];\n return (result0?.roomState as \"FOLLOWED\" | \"MUTED\" | null) ?? null;\n });\n }\n\n /**\n * Asynchronously sets the user state for a participant in a room in the database based on the provided parameters.\n * @param {UUID} roomId - The ID of the room to set the participant's user state for.\n * @param {UUID} entityId - The ID of the entity to set the user state for.\n * @param {string} state - The state to set the participant's user state to.\n * @returns {Promise<void>} A Promise that resolves when the participant's user state is set.\n */\n async setParticipantUserState(\n roomId: UUID,\n entityId: UUID,\n state: \"FOLLOWED\" | \"MUTED\" | null\n ): Promise<void> {\n return this.withDatabase(async () => {\n try {\n await this.db.transaction(async (tx) => {\n await tx\n .update(participantTable)\n .set({ roomState: state })\n .where(\n and(\n eq(participantTable.roomId, roomId),\n eq(participantTable.entityId, entityId),\n eq(participantTable.agentId, this.agentId)\n )\n );\n });\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n roomId,\n entityId,\n state,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to set participant follow state\"\n );\n throw error;\n }\n });\n }\n\n /**\n * Asynchronously creates a new relationship in the database based on the provided parameters.\n * @param {Object} params - The parameters for creating a new relationship.\n * @param {UUID} params.sourceEntityId - The ID of the source entity.\n * @param {UUID} params.targetEntityId - The ID of the target entity.\n * @param {string[]} [params.tags] - The tags for the relationship.\n * @param {Object} [params.metadata] - The metadata for the relationship.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating whether the relationship was created successfully.\n */\n async createRelationship(params: {\n sourceEntityId: UUID;\n targetEntityId: UUID;\n tags?: string[];\n metadata?: { [key: string]: unknown };\n }): Promise<boolean> {\n return this.withDatabase(async () => {\n const id = v4();\n const saveParams = {\n id,\n sourceEntityId: params.sourceEntityId,\n targetEntityId: params.targetEntityId,\n agentId: this.agentId,\n tags: params.tags || [],\n metadata: params.metadata || {},\n };\n try {\n await this.db.insert(relationshipTable).values(saveParams);\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n saveParams,\n },\n \"Error creating relationship\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously updates an existing relationship in the database based on the provided parameters.\n * @param {Relationship} relationship - The relationship object to update.\n * @returns {Promise<void>} A Promise that resolves when the relationship is updated.\n */\n async updateRelationship(relationship: Relationship): Promise<void> {\n return this.withDatabase(async () => {\n try {\n await this.db\n .update(relationshipTable)\n .set({\n tags: relationship.tags || [],\n metadata: relationship.metadata || {},\n })\n .where(eq(relationshipTable.id, relationship.id));\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n relationshipId: relationship.id,\n },\n \"Error updating relationship\"\n );\n throw error;\n }\n });\n }\n\n /**\n * Asynchronously retrieves a relationship from the database based on the provided parameters.\n * @param {Object} params - The parameters for retrieving a relationship.\n * @param {UUID} params.sourceEntityId - The ID of the source entity.\n * @param {UUID} params.targetEntityId - The ID of the target entity.\n * @returns {Promise<Relationship | null>} A Promise that resolves to the relationship if found, null otherwise.\n */\n async getRelationship(params: {\n sourceEntityId: UUID;\n targetEntityId: UUID;\n }): Promise<Relationship | null> {\n return this.withDatabase(async () => {\n const { sourceEntityId, targetEntityId } = params;\n const result = await this.db\n .select()\n .from(relationshipTable)\n .where(\n and(\n eq(relationshipTable.sourceEntityId, sourceEntityId),\n eq(relationshipTable.targetEntityId, targetEntityId)\n )\n );\n if (result.length === 0) return null;\n const relationship = result[0];\n return {\n ...relationship,\n id: relationship.id as UUID,\n sourceEntityId: relationship.sourceEntityId as UUID,\n targetEntityId: relationship.targetEntityId as UUID,\n agentId: relationship.agentId as UUID,\n tags: (relationship.tags ?? []) as string[],\n metadata: (relationship.metadata ?? {}) as Metadata,\n createdAt: relationship.createdAt.toISOString(),\n };\n });\n }\n\n /**\n * Asynchronously retrieves relationships from the database based on the provided parameters.\n * @param {Object} params - The parameters for retrieving relationships.\n * @param {UUID} params.entityId - The ID of the entity to retrieve relationships for.\n * @param {string[]} [params.tags] - The tags to filter relationships by.\n * @returns {Promise<Relationship[]>} A Promise that resolves to an array of relationships.\n */\n async getRelationships(params: { entityId: UUID; tags?: string[] }): Promise<Relationship[]> {\n return this.withDatabase(async () => {\n const { entityId, tags } = params;\n\n let query: SQL;\n\n if (tags && tags.length > 0) {\n query = sql`\n SELECT * FROM ${relationshipTable}\n WHERE (${relationshipTable.sourceEntityId} = ${entityId} OR ${relationshipTable.targetEntityId} = ${entityId})\n AND ${relationshipTable.tags} && CAST(ARRAY[${sql.join(tags, sql`, `)}] AS text[])\n `;\n } else {\n query = sql`\n SELECT * FROM ${relationshipTable}\n WHERE ${relationshipTable.sourceEntityId} = ${entityId} OR ${relationshipTable.targetEntityId} = ${entityId}\n `;\n }\n\n const result = await this.db.execute(query);\n\n return result.rows.map((relationship: Record<string, unknown>) => ({\n ...relationship,\n id: relationship.id as UUID,\n sourceEntityId: (relationship.source_entity_id || relationship.sourceEntityId) as UUID,\n targetEntityId: (relationship.target_entity_id || relationship.targetEntityId) as UUID,\n agentId: (relationship.agent_id || relationship.agentId) as UUID,\n tags: (relationship.tags ?? []) as string[],\n metadata: (relationship.metadata ?? {}) as Metadata,\n createdAt:\n relationship.created_at || relationship.createdAt\n ? (relationship.created_at || relationship.createdAt) instanceof Date\n ? ((relationship.created_at || relationship.createdAt) as Date).toISOString()\n : new Date(\n (relationship.created_at as string) || (relationship.createdAt as string)\n ).toISOString()\n : new Date().toISOString(),\n }));\n });\n }\n\n /**\n * Asynchronously retrieves a cache value from the database based on the provided key.\n * @param {string} key - The key to retrieve the cache value for.\n * @returns {Promise<T | undefined>} A Promise that resolves to the cache value if found, undefined otherwise.\n */\n async getCache<T>(key: string): Promise<T | undefined> {\n return this.withDatabase(async () => {\n try {\n const result = await this.db\n .select({ value: cacheTable.value })\n .from(cacheTable)\n .where(and(eq(cacheTable.agentId, this.agentId), eq(cacheTable.key, key)))\n .limit(1);\n\n if (result && result.length > 0 && result[0]) {\n return result[0].value as T | undefined;\n }\n\n return undefined;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n key,\n },\n \"Error fetching cache\"\n );\n return undefined;\n }\n });\n }\n\n /**\n * Asynchronously sets a cache value in the database based on the provided key and value.\n * @param {string} key - The key to set the cache value for.\n * @param {T} value - The value to set in the cache.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating whether the cache value was set successfully.\n */\n async setCache<T>(key: string, value: T): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n await this.db\n .insert(cacheTable)\n .values({\n key: key,\n agentId: this.agentId,\n value: value,\n })\n .onConflictDoUpdate({\n target: [cacheTable.key, cacheTable.agentId],\n set: {\n value: value,\n },\n });\n\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n key,\n },\n \"Error setting cache\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously deletes a cache value from the database based on the provided key.\n * @param {string} key - The key to delete the cache value for.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating whether the cache value was deleted successfully.\n */\n async deleteCache(key: string): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n await this.db.transaction(async (tx) => {\n await tx\n .delete(cacheTable)\n .where(and(eq(cacheTable.agentId, this.agentId), eq(cacheTable.key, key)));\n });\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n key,\n },\n \"Error deleting cache\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously creates a new world in the database based on the provided parameters.\n * @param {World} world - The world object to create.\n * @returns {Promise<UUID>} A Promise that resolves to the ID of the created world.\n */\n async createWorld(world: World): Promise<UUID> {\n return this.withDatabase(async () => {\n const newWorldId = world.id || (v4() as UUID);\n await this.db.insert(worldTable).values({\n ...world,\n id: newWorldId,\n name: world.name || \"\",\n });\n return newWorldId;\n });\n }\n\n /**\n * Asynchronously retrieves a world from the database based on the provided parameters.\n * @param {UUID} id - The ID of the world to retrieve.\n * @returns {Promise<World | null>} A Promise that resolves to the world if found, null otherwise.\n */\n async getWorld(id: UUID): Promise<World | null> {\n return this.withDatabase(async () => {\n const result = await this.db.select().from(worldTable).where(eq(worldTable.id, id));\n return result.length > 0 ? (result[0] as World) : null;\n });\n }\n\n /**\n * Asynchronously retrieves all worlds from the database based on the provided parameters.\n * @returns {Promise<World[]>} A Promise that resolves to an array of worlds.\n */\n async getAllWorlds(): Promise<World[]> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select()\n .from(worldTable)\n .where(eq(worldTable.agentId, this.agentId));\n return result as World[];\n });\n }\n\n /**\n * Asynchronously updates an existing world in the database based on the provided parameters.\n * @param {World} world - The world object to update.\n * @returns {Promise<void>} A Promise that resolves when the world is updated.\n */\n async updateWorld(world: World): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.update(worldTable).set(world).where(eq(worldTable.id, world.id));\n });\n }\n\n /**\n * Asynchronously removes a world from the database based on the provided parameters.\n * @param {UUID} id - The ID of the world to remove.\n * @returns {Promise<void>} A Promise that resolves when the world is removed.\n */\n async removeWorld(id: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.delete(worldTable).where(eq(worldTable.id, id));\n });\n }\n\n /**\n * Asynchronously creates a new task in the database based on the provided parameters.\n * @param {Task} task - The task object to create.\n * @returns {Promise<UUID>} A Promise that resolves to the ID of the created task.\n */\n async createTask(task: Task): Promise<UUID> {\n if (!task.worldId) {\n throw new Error(\"worldId is required\");\n }\n return this.withRetry(async () => {\n return this.withDatabase(async () => {\n const now = new Date();\n const metadata = task.metadata || {};\n\n const values = {\n id: task.id as UUID,\n name: task.name,\n description: task.description,\n roomId: task.roomId as UUID,\n worldId: task.worldId as UUID,\n tags: task.tags,\n metadata: metadata,\n createdAt: now,\n updatedAt: now,\n agentId: this.agentId as UUID,\n };\n\n const result = await this.db.insert(taskTable).values(values).returning();\n\n return result[0].id as UUID;\n });\n });\n }\n\n /**\n * Asynchronously retrieves tasks based on specified parameters.\n * @param params Object containing optional roomId, tags, and entityId to filter tasks\n * @returns Promise resolving to an array of Task objects\n */\n async getTasks(params: {\n roomId?: UUID;\n tags?: string[];\n entityId?: UUID; // Added entityId parameter\n }): Promise<Task[]> {\n return this.withRetry(async () => {\n return this.withDatabase(async () => {\n const result = await this.db\n .select()\n .from(taskTable)\n .where(\n and(\n eq(taskTable.agentId, this.agentId),\n ...(params.roomId ? [eq(taskTable.roomId, params.roomId)] : []),\n ...(params.tags && params.tags.length > 0\n ? [\n sql`${taskTable.tags} @> ARRAY[${sql.join(\n params.tags.map((t) => sql`${t}`),\n sql`, `\n )}]::text[]`,\n ]\n : [])\n )\n );\n\n return result.map((row) => ({\n id: row.id as UUID,\n name: row.name,\n description: row.description ?? \"\",\n roomId: row.roomId as UUID,\n worldId: row.worldId as UUID,\n tags: row.tags || [],\n metadata: row.metadata as TaskMetadata,\n }));\n });\n });\n }\n\n /**\n * Asynchronously retrieves a specific task by its name.\n * @param name The name of the task to retrieve\n * @returns Promise resolving to the Task object if found, null otherwise\n */\n async getTasksByName(name: string): Promise<Task[]> {\n return this.withRetry(async () => {\n return this.withDatabase(async () => {\n const result = await this.db\n .select()\n .from(taskTable)\n .where(and(eq(taskTable.name, name), eq(taskTable.agentId, this.agentId)));\n\n return result.map((row) => ({\n id: row.id as UUID,\n name: row.name,\n description: row.description ?? \"\",\n roomId: row.roomId as UUID,\n worldId: row.worldId as UUID,\n tags: row.tags || [],\n metadata: (row.metadata || {}) as TaskMetadata,\n }));\n });\n });\n }\n\n /**\n * Asynchronously retrieves a specific task by its ID.\n * @param id The UUID of the task to retrieve\n * @returns Promise resolving to the Task object if found, null otherwise\n */\n async getTask(id: UUID): Promise<Task | null> {\n return this.withRetry(async () => {\n return this.withDatabase(async () => {\n const result = await this.db\n .select()\n .from(taskTable)\n .where(and(eq(taskTable.id, id), eq(taskTable.agentId, this.agentId)))\n .limit(1);\n\n if (result.length === 0) {\n return null;\n }\n\n const row = result[0];\n return {\n id: row.id as UUID,\n name: row.name,\n description: row.description ?? \"\",\n roomId: row.roomId as UUID,\n worldId: row.worldId as UUID,\n tags: row.tags || [],\n metadata: (row.metadata || {}) as TaskMetadata,\n };\n });\n });\n }\n\n /**\n * Asynchronously updates an existing task in the database.\n * @param id The UUID of the task to update\n * @param task Partial Task object containing the fields to update\n * @returns Promise resolving when the update is complete\n */\n async updateTask(id: UUID, task: Partial<Task>): Promise<void> {\n await this.withRetry(async () => {\n await this.withDatabase(async () => {\n const updateValues: Partial<typeof taskTable.$inferInsert> = {};\n\n // Add fields to update if they exist in the partial task object\n if (task.name !== undefined) updateValues.name = task.name;\n if (task.description !== undefined) updateValues.description = task.description;\n if (task.roomId !== undefined) updateValues.roomId = task.roomId;\n if (task.worldId !== undefined) updateValues.worldId = task.worldId;\n if (task.tags !== undefined) updateValues.tags = task.tags;\n if (task.metadata !== undefined)\n updateValues.metadata = task.metadata as typeof taskTable.$inferInsert.metadata;\n // Handle createdAt if present in the task object (using type assertion for compatibility)\n const taskWithCreatedAt = task as { createdAt?: number | bigint | null };\n if (taskWithCreatedAt.createdAt !== undefined && taskWithCreatedAt.createdAt !== null) {\n const createdAtValue = taskWithCreatedAt.createdAt;\n updateValues.createdAt = new Date(\n typeof createdAtValue === \"bigint\" ? Number(createdAtValue) : createdAtValue\n );\n }\n\n // Always update the updatedAt timestamp as a Date (schema uses Date, not number)\n const dbUpdateValues: Partial<typeof taskTable.$inferInsert> = {\n ...updateValues,\n updatedAt: new Date(),\n };\n\n // Handle metadata updates - just set it directly without merging\n if (task.metadata !== undefined) {\n dbUpdateValues.metadata = task.metadata;\n }\n\n await this.db\n .update(taskTable)\n // createdAt is hella borked, number / Date\n .set(dbUpdateValues)\n .where(and(eq(taskTable.id, id), eq(taskTable.agentId, this.agentId)));\n });\n });\n }\n\n /**\n * Asynchronously deletes a task from the database.\n * @param id The UUID of the task to delete\n * @returns Promise resolving when the deletion is complete\n */\n async deleteTask(id: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.delete(taskTable).where(eq(taskTable.id, id));\n });\n }\n\n async getMemoriesByWorldId(params: {\n worldId: UUID;\n count?: number;\n tableName?: string;\n }): Promise<Memory[]> {\n return this.withDatabase(async () => {\n // First, get all rooms for the given worldId\n const rooms = await this.db\n .select({ id: roomTable.id })\n .from(roomTable)\n .where(and(eq(roomTable.worldId, params.worldId), eq(roomTable.agentId, this.agentId)));\n\n if (rooms.length === 0) {\n return [];\n }\n\n const roomIds = rooms.map((room) => room.id as UUID);\n\n const memories = await this.getMemoriesByRoomIds({\n roomIds,\n tableName: params.tableName || \"messages\",\n limit: params.count,\n });\n\n return memories;\n });\n }\n\n async deleteRoomsByWorldId(worldId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n const rooms = await this.db\n .select({ id: roomTable.id })\n .from(roomTable)\n .where(and(eq(roomTable.worldId, worldId), eq(roomTable.agentId, this.agentId)));\n\n if (rooms.length === 0) {\n return;\n }\n\n const roomIds = rooms.map((room) => room.id as UUID);\n\n if (roomIds.length > 0) {\n await this.db.delete(logTable).where(inArray(logTable.roomId, roomIds));\n await this.db.delete(participantTable).where(inArray(participantTable.roomId, roomIds));\n\n const memoriesInRooms = await this.db\n .select({ id: memoryTable.id })\n .from(memoryTable)\n .where(inArray(memoryTable.roomId, roomIds));\n const memoryIdsInRooms = memoriesInRooms.map((m) => m.id as UUID);\n\n if (memoryIdsInRooms.length > 0) {\n await this.db\n .delete(embeddingTable)\n .where(inArray(embeddingTable.memoryId, memoryIdsInRooms));\n await this.db.delete(memoryTable).where(inArray(memoryTable.id, memoryIdsInRooms));\n }\n\n await this.db.delete(roomTable).where(inArray(roomTable.id, roomIds));\n\n logger.debug(\n {\n src: \"plugin:sql\",\n worldId,\n roomsDeleted: roomIds.length,\n memoriesDeleted: memoryIdsInRooms.length,\n },\n \"World cleanup completed\"\n );\n }\n });\n }\n\n // Message Server Database Operations\n\n /**\n * Creates a new message server in the central database\n */\n async createMessageServer(data: {\n id?: UUID; // Allow passing a specific ID\n name: string;\n sourceType: string;\n sourceId?: string;\n metadata?: Metadata;\n }): Promise<{\n id: UUID;\n name: string;\n sourceType: string;\n sourceId?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n }> {\n return this.withDatabase(async () => {\n const newId = data.id || (v4() as UUID);\n const now = new Date();\n const serverToInsert = {\n id: newId,\n name: data.name,\n sourceType: data.sourceType,\n sourceId: data.sourceId,\n metadata: data.metadata,\n createdAt: now,\n updatedAt: now,\n };\n\n await this.db.insert(messageServerTable).values(serverToInsert).onConflictDoNothing(); // In case the ID already exists\n\n // If server already existed, fetch it\n if (data.id) {\n const existing = await this.db\n .select()\n .from(messageServerTable)\n .where(eq(messageServerTable.id, data.id))\n .limit(1);\n if (existing.length > 0) {\n return {\n id: existing[0].id as UUID,\n name: existing[0].name,\n sourceType: existing[0].sourceType,\n sourceId: existing[0].sourceId || undefined,\n metadata: (existing[0].metadata || undefined) as Metadata | undefined,\n createdAt: existing[0].createdAt,\n updatedAt: existing[0].updatedAt,\n };\n }\n }\n\n return serverToInsert;\n });\n }\n\n /**\n * Gets all message servers\n */\n async getMessageServers(): Promise<\n Array<{\n id: UUID;\n name: string;\n sourceType: string;\n sourceId?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n }>\n > {\n const result = await this.withDatabase(async () => {\n const results = await this.db.select().from(messageServerTable);\n return results.map((r) => ({\n id: r.id as UUID,\n name: r.name,\n sourceType: r.sourceType,\n sourceId: r.sourceId || undefined,\n metadata: (r.metadata || undefined) as Metadata | undefined,\n createdAt: r.createdAt,\n updatedAt: r.updatedAt,\n }));\n });\n // Guard against null return\n return result || [];\n }\n\n /**\n * Gets a message server by ID\n */\n async getMessageServerById(serverId: UUID): Promise<{\n id: UUID;\n name: string;\n sourceType: string;\n sourceId?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n return this.withDatabase(async () => {\n const results = await this.db\n .select()\n .from(messageServerTable)\n .where(eq(messageServerTable.id, serverId))\n .limit(1);\n return results.length > 0\n ? {\n id: results[0].id as UUID,\n name: results[0].name,\n sourceType: results[0].sourceType,\n sourceId: results[0].sourceId || undefined,\n metadata: (results[0].metadata || undefined) as Metadata | undefined,\n createdAt: results[0].createdAt,\n updatedAt: results[0].updatedAt,\n }\n : null;\n });\n }\n\n /**\n * Gets a message server by RLS server_id.\n * The server_id column is added dynamically when RLS is enabled.\n */\n async getMessageServerByRlsServerId(rlsServerId: UUID): Promise<{\n id: UUID;\n name: string;\n sourceType: string;\n sourceId?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n return this.withDatabase(async () => {\n // Use raw SQL since server_id column is dynamically added by RLS and not in Drizzle schema\n const results = await this.db.execute(sql`\n SELECT id, name, source_type, source_id, metadata, created_at, updated_at\n FROM message_servers\n WHERE server_id = ${rlsServerId}\n LIMIT 1\n `);\n\n const rows = results.rows || results;\n return (rows as Record<string, unknown>[]).length > 0\n ? {\n id: (rows as Record<string, unknown>[])[0].id as UUID,\n name: (rows as Record<string, unknown>[])[0].name as string,\n sourceType: (rows as Record<string, unknown>[])[0].source_type as string,\n sourceId: ((rows as Record<string, unknown>[])[0].source_id || undefined) as\n | string\n | undefined,\n metadata: ((rows as Record<string, unknown>[])[0].metadata || undefined) as\n | Metadata\n | undefined,\n createdAt: new Date((rows as Record<string, unknown>[])[0].created_at as string),\n updatedAt: new Date((rows as Record<string, unknown>[])[0].updated_at as string),\n }\n : null;\n });\n }\n\n /**\n * Creates a new channel\n */\n async createChannel(\n data: {\n id?: UUID; // Allow passing a specific ID\n messageServerId: UUID;\n name: string;\n type: string;\n sourceType?: string;\n sourceId?: string;\n topic?: string;\n metadata?: Metadata;\n },\n participantIds?: UUID[]\n ): Promise<{\n id: UUID;\n messageServerId: UUID;\n name: string;\n type: string;\n sourceType?: string;\n sourceId?: string;\n topic?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n }> {\n return this.withDatabase(async () => {\n const newId = data.id || (v4() as UUID);\n const now = new Date();\n const channelToInsert = {\n id: newId,\n messageServerId: data.messageServerId,\n name: data.name,\n type: data.type,\n sourceType: data.sourceType,\n sourceId: data.sourceId,\n topic: data.topic,\n metadata: data.metadata,\n createdAt: now,\n updatedAt: now,\n };\n\n await this.db.transaction(async (tx) => {\n await tx.insert(channelTable).values(channelToInsert);\n\n if (participantIds && participantIds.length > 0) {\n const participantValues = participantIds.map((entityId) => ({\n channelId: newId,\n entityId: entityId,\n }));\n await tx.insert(channelParticipantsTable).values(participantValues).onConflictDoNothing();\n }\n });\n\n return channelToInsert;\n });\n }\n\n /**\n * Gets channels for a message server\n */\n async getChannelsForMessageServer(messageServerId: UUID): Promise<\n Array<{\n id: UUID;\n messageServerId: UUID;\n name: string;\n type: string;\n sourceType?: string;\n sourceId?: string;\n topic?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n }>\n > {\n return this.withDatabase(async () => {\n const results = await this.db\n .select()\n .from(channelTable)\n .where(eq(channelTable.messageServerId, messageServerId));\n return results.map((r) => ({\n id: r.id as UUID,\n messageServerId: r.messageServerId as UUID,\n name: r.name,\n type: r.type,\n sourceType: r.sourceType || undefined,\n sourceId: r.sourceId || undefined,\n topic: r.topic || undefined,\n metadata: (r.metadata || undefined) as Metadata | undefined,\n createdAt: r.createdAt,\n updatedAt: r.updatedAt,\n }));\n });\n }\n\n /**\n * Gets channel details\n */\n async getChannelDetails(channelId: UUID): Promise<{\n id: UUID;\n messageServerId: UUID;\n name: string;\n type: string;\n sourceType?: string;\n sourceId?: string;\n topic?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n return this.withDatabase(async () => {\n const results = await this.db\n .select()\n .from(channelTable)\n .where(eq(channelTable.id, channelId))\n .limit(1);\n return results.length > 0\n ? {\n id: results[0].id as UUID,\n messageServerId: results[0].messageServerId as UUID,\n name: results[0].name,\n type: results[0].type,\n sourceType: results[0].sourceType || undefined,\n sourceId: results[0].sourceId || undefined,\n topic: results[0].topic || undefined,\n metadata: (results[0].metadata || undefined) as Metadata | undefined,\n createdAt: results[0].createdAt,\n updatedAt: results[0].updatedAt,\n }\n : null;\n });\n }\n\n /**\n * Creates a message\n */\n async createMessage(data: {\n channelId: UUID;\n authorId: UUID;\n content: string;\n rawMessage?: Record<string, unknown>;\n sourceType?: string;\n sourceId?: string;\n metadata?: Metadata;\n inReplyToRootMessageId?: UUID;\n messageId?: UUID;\n }): Promise<{\n id: UUID;\n channelId: UUID;\n authorId: UUID;\n content: string;\n rawMessage?: Record<string, unknown>;\n sourceType?: string;\n sourceId?: string;\n metadata?: Metadata;\n inReplyToRootMessageId?: UUID;\n createdAt: Date;\n updatedAt: Date;\n }> {\n return this.withDatabase(async () => {\n const newId = data.messageId || (v4() as UUID);\n const now = new Date();\n const messageToInsert = {\n id: newId,\n channelId: data.channelId,\n authorId: data.authorId,\n content: data.content,\n rawMessage: data.rawMessage,\n sourceType: data.sourceType,\n sourceId: data.sourceId,\n metadata: data.metadata,\n inReplyToRootMessageId: data.inReplyToRootMessageId,\n createdAt: now,\n updatedAt: now,\n };\n\n await this.db.insert(messageTable).values(messageToInsert);\n return messageToInsert;\n });\n }\n\n async getMessageById(id: UUID): Promise<{\n id: UUID;\n channelId: UUID;\n authorId: UUID;\n content: string;\n rawMessage?: Record<string, unknown>;\n sourceType?: string;\n sourceId?: string;\n metadata?: Metadata;\n inReplyToRootMessageId?: UUID;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n return this.withDatabase(async () => {\n const rows = await this.db\n .select()\n .from(messageTable)\n .where(eq(messageTable.id, id))\n .limit(1);\n if (!rows || rows.length === 0) return null;\n const row = rows[0];\n return {\n id: row.id as UUID,\n channelId: row.channelId as UUID,\n authorId: row.authorId as UUID,\n content: row.content,\n rawMessage: row.rawMessage || undefined,\n sourceType: row.sourceType || undefined,\n sourceId: row.sourceId || undefined,\n metadata: (row.metadata || undefined) as Metadata | undefined,\n inReplyToRootMessageId: (row.inReplyToRootMessageId || undefined) as UUID | undefined,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n });\n }\n\n async updateMessage(\n id: UUID,\n patch: {\n content?: string;\n rawMessage?: Record<string, unknown>;\n sourceType?: string;\n sourceId?: string;\n metadata?: Metadata;\n inReplyToRootMessageId?: UUID;\n }\n ): Promise<{\n id: UUID;\n channelId: UUID;\n authorId: UUID;\n content: string;\n rawMessage?: Record<string, unknown>;\n sourceType?: string;\n sourceId?: string;\n metadata?: Metadata;\n inReplyToRootMessageId?: UUID;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n return this.withDatabase(async () => {\n const existing = await this.getMessageById(id);\n if (!existing) return null;\n\n const updatedAt = new Date();\n const next = {\n content: patch.content ?? existing.content,\n rawMessage: patch.rawMessage ?? existing.rawMessage,\n sourceType: patch.sourceType ?? existing.sourceType,\n sourceId: patch.sourceId ?? existing.sourceId,\n metadata: patch.metadata ?? existing.metadata,\n inReplyToRootMessageId: patch.inReplyToRootMessageId ?? existing.inReplyToRootMessageId,\n updatedAt,\n };\n\n await this.db.update(messageTable).set(next).where(eq(messageTable.id, id));\n\n // Return merged object\n return {\n ...existing,\n ...next,\n };\n });\n }\n\n /**\n * Gets messages for a channel\n */\n async getMessagesForChannel(\n channelId: UUID,\n limit: number = 50,\n beforeTimestamp?: Date\n ): Promise<\n Array<{\n id: UUID;\n channelId: UUID;\n authorId: UUID;\n content: string;\n rawMessage?: Record<string, unknown>;\n sourceType?: string;\n sourceId?: string;\n metadata?: Metadata;\n inReplyToRootMessageId?: UUID;\n createdAt: Date;\n updatedAt: Date;\n }>\n > {\n return this.withDatabase(async () => {\n const conditions = [eq(messageTable.channelId, channelId)];\n if (beforeTimestamp) {\n conditions.push(lt(messageTable.createdAt, beforeTimestamp));\n }\n\n const query = this.db\n .select()\n .from(messageTable)\n .where(and(...conditions))\n .orderBy(desc(messageTable.createdAt))\n .limit(limit);\n\n const results = await query;\n return results.map((r) => ({\n id: r.id as UUID,\n channelId: r.channelId as UUID,\n authorId: r.authorId as UUID,\n content: r.content,\n rawMessage: r.rawMessage || undefined,\n sourceType: r.sourceType || undefined,\n sourceId: r.sourceId || undefined,\n metadata: r.metadata || undefined,\n inReplyToRootMessageId: r.inReplyToRootMessageId as UUID | undefined,\n createdAt: r.createdAt,\n updatedAt: r.updatedAt,\n }));\n });\n }\n\n /**\n * Deletes a message\n */\n async deleteMessage(messageId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.delete(messageTable).where(eq(messageTable.id, messageId));\n });\n }\n\n /**\n * Updates a channel\n */\n async updateChannel(\n channelId: UUID,\n updates: {\n name?: string;\n participantCentralUserIds?: UUID[];\n metadata?: Metadata;\n }\n ): Promise<{\n id: UUID;\n messageServerId: UUID;\n name: string;\n type: string;\n sourceType?: string;\n sourceId?: string;\n topic?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n }> {\n return this.withDatabase(async () => {\n const now = new Date();\n\n await this.db.transaction(async (tx) => {\n // Update channel details\n const updateData: Record<string, unknown> = { updatedAt: now };\n if (updates.name !== undefined) updateData.name = updates.name;\n if (updates.metadata !== undefined) updateData.metadata = updates.metadata;\n\n await tx.update(channelTable).set(updateData).where(eq(channelTable.id, channelId));\n\n // Update participants if provided\n if (updates.participantCentralUserIds !== undefined) {\n // Remove existing participants\n await tx\n .delete(channelParticipantsTable)\n .where(eq(channelParticipantsTable.channelId, channelId));\n\n // Add new participants\n if (updates.participantCentralUserIds.length > 0) {\n const participantValues = updates.participantCentralUserIds.map((entityId) => ({\n channelId: channelId,\n entityId: entityId,\n }));\n await tx\n .insert(channelParticipantsTable)\n .values(participantValues)\n .onConflictDoNothing();\n }\n }\n });\n\n // Return updated channel details\n const updatedChannel = await this.getChannelDetails(channelId);\n if (!updatedChannel) {\n throw new Error(`Channel ${channelId} not found after update`);\n }\n return updatedChannel;\n });\n }\n\n /**\n * Deletes a channel and all its associated data\n */\n async deleteChannel(channelId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.transaction(async (tx) => {\n // Delete all messages in the channel (cascade delete will handle this, but explicit is better)\n await tx.delete(messageTable).where(eq(messageTable.channelId, channelId));\n\n // Delete all participants (cascade delete will handle this, but explicit is better)\n await tx\n .delete(channelParticipantsTable)\n .where(eq(channelParticipantsTable.channelId, channelId));\n\n // Delete the channel itself\n await tx.delete(channelTable).where(eq(channelTable.id, channelId));\n });\n });\n }\n\n /**\n * Adds participants to a channel\n */\n async addChannelParticipants(channelId: UUID, entityIds: UUID[]): Promise<void> {\n return this.withDatabase(async () => {\n if (!entityIds || entityIds.length === 0) return;\n\n const participantValues = entityIds.map((entityId) => ({\n channelId: channelId,\n entityId: entityId,\n }));\n\n await this.db\n .insert(channelParticipantsTable)\n .values(participantValues)\n .onConflictDoNothing();\n });\n }\n\n /**\n * Gets participants for a channel\n */\n async getChannelParticipants(channelId: UUID): Promise<UUID[]> {\n return this.withDatabase(async () => {\n const results = await this.db\n .select({ entityId: channelParticipantsTable.entityId })\n .from(channelParticipantsTable)\n .where(eq(channelParticipantsTable.channelId, channelId));\n\n return results.map((r) => r.entityId as UUID);\n });\n }\n\n /**\n * Check if an entity is a participant in a specific messaging channel.\n * @param {UUID} channelId - The ID of the channel to check.\n * @param {UUID} entityId - The ID of the entity to check.\n * @returns {Promise<boolean>} A Promise that resolves to true if entity is a participant.\n */\n async isChannelParticipant(channelId: UUID, entityId: UUID): Promise<boolean> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select()\n .from(channelParticipantsTable)\n .where(\n and(\n eq(channelParticipantsTable.channelId, channelId),\n eq(channelParticipantsTable.entityId, entityId)\n )\n )\n .limit(1);\n\n return result.length > 0;\n });\n }\n\n /**\n * Adds an agent to a message server (Discord/Telegram server)\n */\n async addAgentToMessageServer(messageServerId: UUID, agentId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db\n .insert(messageServerAgentsTable)\n .values({\n messageServerId,\n agentId,\n })\n .onConflictDoNothing();\n });\n }\n\n /**\n * Gets agents for a message server (Discord/Telegram server)\n */\n async getAgentsForMessageServer(messageServerId: UUID): Promise<UUID[]> {\n return this.withDatabase(async () => {\n const results = await this.db\n .select({ agentId: messageServerAgentsTable.agentId })\n .from(messageServerAgentsTable)\n .where(eq(messageServerAgentsTable.messageServerId, messageServerId));\n\n return results.map((r) => r.agentId as UUID);\n });\n }\n\n /**\n * Removes an agent from a message server (Discord/Telegram server)\n */\n async removeAgentFromMessageServer(messageServerId: UUID, agentId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db\n .delete(messageServerAgentsTable)\n .where(\n and(\n eq(messageServerAgentsTable.messageServerId, messageServerId),\n eq(messageServerAgentsTable.agentId, agentId)\n )\n );\n });\n }\n\n /**\n * Finds or creates a DM channel between two users\n */\n async findOrCreateDmChannel(\n user1Id: UUID,\n user2Id: UUID,\n messageServerId: UUID\n ): Promise<{\n id: UUID;\n messageServerId: UUID;\n name: string;\n type: string;\n sourceType?: string;\n sourceId?: string;\n topic?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n }> {\n return this.withDatabase(async () => {\n const ids = [user1Id, user2Id].sort();\n const dmChannelName = `DM-${ids[0]}-${ids[1]}`;\n\n const existingChannels = await this.db\n .select()\n .from(channelTable)\n .where(\n and(\n eq(channelTable.type, ChannelType.DM),\n eq(channelTable.name, dmChannelName),\n eq(channelTable.messageServerId, messageServerId)\n )\n )\n .limit(1);\n\n if (existingChannels.length > 0) {\n return {\n id: existingChannels[0].id as UUID,\n messageServerId: existingChannels[0].messageServerId as UUID,\n name: existingChannels[0].name,\n type: existingChannels[0].type,\n sourceType: existingChannels[0].sourceType || undefined,\n sourceId: existingChannels[0].sourceId || undefined,\n topic: existingChannels[0].topic || undefined,\n metadata: (existingChannels[0].metadata || undefined) as Metadata | undefined,\n createdAt: existingChannels[0].createdAt,\n updatedAt: existingChannels[0].updatedAt,\n };\n }\n\n // Create new DM channel\n return this.createChannel(\n {\n messageServerId,\n name: dmChannelName,\n type: ChannelType.DM,\n metadata: { user1: ids[0], user2: ids[1] },\n },\n ids\n );\n });\n }\n}\n\n// Import tables at the end to avoid circular dependencies\n",
|
|
24
|
+
"import { type Agent, type Entity, logger, type Memory, type UUID } from \"@elizaos/core\";\nimport { drizzle, type PgliteDatabase } from \"drizzle-orm/pglite\";\nimport { BaseDrizzleAdapter } from \"../base\";\nimport { DIMENSION_MAP, type EmbeddingDimensionColumn } from \"../schema/embedding\";\nimport type { PGliteClientManager } from \"./manager\";\n\nexport class PgliteDatabaseAdapter extends BaseDrizzleAdapter {\n private manager: PGliteClientManager;\n protected embeddingDimension: EmbeddingDimensionColumn = DIMENSION_MAP[384];\n\n constructor(agentId: UUID, manager: PGliteClientManager) {\n super(agentId);\n this.manager = manager;\n this.db = drizzle(this.manager.getConnection());\n }\n\n public async withEntityContext<T>(\n _entityId: UUID | null,\n callback: (tx: PgliteDatabase) => Promise<T>\n ): Promise<T> {\n return this.db.transaction(callback);\n }\n\n async getEntityByIds(entityIds: UUID[]): Promise<Entity[] | null> {\n return this.getEntitiesByIds(entityIds);\n }\n\n async getMemoriesByServerId(_params: { serverId: UUID; count?: number }): Promise<Memory[]> {\n logger.warn({ src: \"plugin:sql\" }, \"getMemoriesByServerId called but not implemented\");\n return [];\n }\n\n async ensureAgentExists(agent: Partial<Agent>): Promise<Agent> {\n const existingAgent = await this.getAgent(this.agentId);\n if (existingAgent) {\n return existingAgent;\n }\n\n const newAgent: Agent = {\n id: this.agentId,\n name: agent.name || \"Unknown Agent\",\n username: agent.username,\n bio: (Array.isArray(agent.bio)\n ? agent.bio\n : agent.bio\n ? [agent.bio]\n : [\"An AI agent\"]) as string[],\n createdAt: agent.createdAt || Date.now(),\n updatedAt: agent.updatedAt || Date.now(),\n };\n\n await this.createAgent(newAgent);\n const createdAgent = await this.getAgent(this.agentId);\n if (!createdAgent) {\n throw new Error(\"Failed to create agent\");\n }\n return createdAgent;\n }\n\n protected async withDatabase<T>(operation: () => Promise<T>): Promise<T> {\n if (this.manager.isShuttingDown()) {\n const error = new Error(\"Database is shutting down - operation rejected\");\n logger.warn(\n { src: \"plugin:sql\", error: error.message },\n \"Database operation rejected during shutdown\"\n );\n throw error;\n }\n return operation();\n }\n\n async init(): Promise<void> {\n const managerWithInit = this.manager as PGliteClientManager & {\n initialize?: () => Promise<void>;\n };\n await managerWithInit.initialize?.();\n logger.debug({ src: \"plugin:sql\" }, \"PGliteDatabaseAdapter initialized\");\n }\n\n async isReady(): Promise<boolean> {\n return !this.manager.isShuttingDown();\n }\n\n async close() {\n await this.manager.close();\n }\n\n async getConnection(): Promise<PgliteDatabase> {\n const managerWithInit = this.manager as PGliteClientManager & {\n initialize?: () => Promise<void>;\n };\n await managerWithInit.initialize?.();\n return this.db as PgliteDatabase;\n }\n\n getRawConnection() {\n return this.manager.getConnection();\n }\n}\n",
|
|
25
|
+
"import {\n type Agent,\n type AgentRunCounts,\n type AgentRunSummary,\n type AgentRunSummaryResult,\n ChannelType,\n type Component,\n DatabaseAdapter,\n type Entity,\n type Log,\n type LogBody,\n logger,\n type Memory,\n type MemoryMetadata,\n type Metadata,\n type PairingAllowlistEntry,\n type PairingChannel,\n type PairingRequest,\n type Participant,\n type Relationship,\n type Room,\n type RunStatus,\n type Task,\n type TaskMetadata,\n type UUID,\n type World,\n} from \"@elizaos/core\";\n\n// JSON-serializable value type for metadata\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\nimport {\n and,\n cosineDistance,\n count,\n desc,\n eq,\n gte,\n inArray,\n lt,\n lte,\n or,\n type SQL,\n sql,\n} from \"drizzle-orm\";\nimport { v4 } from \"uuid\";\nimport type { DatabaseMigrationService } from \"./migration-service\";\nimport { DIMENSION_MAP, type EmbeddingDimensionColumn } from \"./schema/embedding\";\nimport {\n agentTable,\n cacheTable,\n channelParticipantsTable,\n channelTable,\n componentTable,\n embeddingTable,\n entityTable,\n logTable,\n memoryTable,\n messageServerAgentsTable,\n messageServerTable,\n messageTable,\n pairingAllowlistTable,\n pairingRequestTable,\n participantTable,\n relationshipTable,\n roomTable,\n taskTable,\n worldTable,\n} from \"./schema/index\";\nimport type { DrizzleDatabase } from \"./types\";\n\nexport abstract class BaseDrizzleAdapter extends DatabaseAdapter<DrizzleDatabase> {\n protected readonly maxRetries: number = 3;\n protected readonly baseDelay: number = 1000;\n protected readonly maxDelay: number = 10000;\n protected readonly jitterMax: number = 1000;\n protected embeddingDimension: EmbeddingDimensionColumn = DIMENSION_MAP[384];\n protected migrationService?: DatabaseMigrationService;\n\n protected abstract withDatabase<T>(operation: () => Promise<T>): Promise<T>;\n\n public abstract withEntityContext<T>(\n entityId: UUID | null,\n callback: (tx: DrizzleDatabase) => Promise<T>\n ): Promise<T>;\n\n public abstract init(): Promise<void>;\n public abstract close(): Promise<void>;\n\n public async initialize(): Promise<void> {\n await this.init();\n }\n\n public async runPluginMigrations(\n plugins: Array<{ name: string; schema?: Record<string, unknown> }>,\n options?: {\n verbose?: boolean;\n force?: boolean;\n dryRun?: boolean;\n }\n ): Promise<void> {\n if (!this.migrationService) {\n const { DatabaseMigrationService } = await import(\"./migration-service\");\n this.migrationService = new DatabaseMigrationService();\n await this.migrationService.initializeWithDatabase(this.db as DrizzleDatabase);\n }\n\n for (const plugin of plugins) {\n if (plugin.schema) {\n this.migrationService.registerSchema(plugin.name, plugin.schema);\n }\n }\n\n await this.migrationService.runAllPluginMigrations(options);\n }\n\n public getDatabase(): unknown {\n return this.db;\n }\n\n protected agentId: UUID;\n\n constructor(agentId: UUID) {\n super();\n this.agentId = agentId;\n }\n\n private normalizeEntityNames(names: unknown): string[] {\n if (names == null) {\n return [];\n }\n\n if (typeof names === \"string\") {\n return [names];\n }\n\n if (Array.isArray(names)) {\n return names.map(String);\n }\n\n if (names instanceof Set) {\n return Array.from(names).map(String);\n }\n\n if (typeof names === \"object\" && typeof names[Symbol.iterator] === \"function\") {\n return Array.from(names as Iterable<unknown>).map(String);\n }\n\n return [String(names)];\n }\n\n /**\n * Executes the given operation with retry logic.\n * @template T\n * @param {() => Promise<T>} operation - The operation to be executed.\n * @returns {Promise<T>} A promise that resolves with the result of the operation.\n */\n protected async withRetry<T>(operation: () => Promise<T>): Promise<T> {\n let lastError: Error = new Error(\"Unknown error\");\n\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\n try {\n return await operation();\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < this.maxRetries) {\n const backoffDelay = Math.min(this.baseDelay * 2 ** (attempt - 1), this.maxDelay);\n\n const jitter = Math.random() * this.jitterMax;\n const delay = backoffDelay + jitter;\n\n logger.warn(\n {\n src: \"plugin:sql\",\n attempt,\n maxRetries: this.maxRetries,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Database operation failed, retrying\"\n );\n\n await new Promise((resolve) => setTimeout(resolve, delay));\n } else {\n logger.error(\n {\n src: \"plugin:sql\",\n totalAttempts: attempt,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Max retry attempts reached\"\n );\n throw error instanceof Error ? error : new Error(String(error));\n }\n }\n }\n\n throw lastError;\n }\n\n /**\n * Asynchronously ensures that the given embedding dimension is valid for the agent.\n *\n * @param {number} dimension - The dimension to ensure for the embedding.\n * @returns {Promise<void>} - Resolves once the embedding dimension is ensured.\n */\n async ensureEmbeddingDimension(dimension: number) {\n return this.withDatabase(async () => {\n const existingMemory = await this.db\n .select()\n .from(memoryTable)\n .innerJoin(embeddingTable, eq(embeddingTable.memoryId, memoryTable.id))\n .where(eq(memoryTable.agentId, this.agentId))\n .limit(1);\n\n if (existingMemory.length > 0) {\n // The join result includes both memoryTable and embeddingTable columns\n // Access embedding columns directly from the joined result\n interface JoinedMemoryResult {\n memories: typeof memoryTable.$inferSelect;\n embeddings: typeof embeddingTable.$inferSelect;\n }\n const joinedResult = existingMemory[0] as JoinedMemoryResult;\n Object.entries(DIMENSION_MAP).find(([_, colName]) => {\n const embeddingCol = colName as keyof typeof embeddingTable.$inferSelect;\n return joinedResult.embeddings[embeddingCol] !== null;\n });\n // We don't actually need to use usedDimension for now, but it's good to know it's there.\n }\n\n this.embeddingDimension = DIMENSION_MAP[dimension as keyof typeof DIMENSION_MAP];\n });\n }\n\n /**\n * Asynchronously retrieves an agent by their ID from the database.\n * @param {UUID} agentId - The ID of the agent to retrieve.\n * @returns {Promise<Agent | null>} A promise that resolves to the retrieved agent or null if not found.\n */\n async getAgent(agentId: UUID): Promise<Agent | null> {\n return this.withDatabase(async () => {\n const rows = await this.db\n .select()\n .from(agentTable)\n .where(eq(agentTable.id, agentId))\n .limit(1);\n\n if (rows.length === 0) return null;\n\n const row = rows[0];\n const bioValue = !row.bio ? \"\" : Array.isArray(row.bio) ? row.bio : row.bio;\n return {\n ...row,\n username: row.username || \"\",\n id: row.id as UUID,\n system: !row.system ? undefined : row.system,\n bio: bioValue as string | string[],\n createdAt: row.createdAt.getTime(),\n updatedAt: row.updatedAt.getTime(),\n } as unknown as Agent;\n });\n }\n\n /**\n * Asynchronously retrieves a list of agents from the database.\n *\n * @returns {Promise<Partial<Agent>[]>} A Promise that resolves to an array of Agent objects.\n */\n async getAgents(): Promise<Partial<Agent>[]> {\n const result = await this.withDatabase(async () => {\n const rows = await this.db\n .select({\n id: agentTable.id,\n name: agentTable.name,\n bio: agentTable.bio,\n })\n .from(agentTable);\n return rows.map(\n (row) =>\n ({\n ...row,\n id: row.id as UUID,\n bio: (row.bio === null ? \"\" : Array.isArray(row.bio) ? row.bio : row.bio) as\n | string\n | string[],\n }) as Partial<Agent>\n );\n });\n // Guard against null return\n return result || [];\n }\n /**\n * Asynchronously creates a new agent record in the database.\n *\n * @param {Partial<Agent>} agent The agent object to be created.\n * @returns {Promise<boolean>} A promise that resolves to a boolean indicating the success of the operation.\n */\n async createAgent(agent: Agent): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n // Check for existing agent with the same ID only (names can be duplicated)\n if (agent.id) {\n const existing = await this.db\n .select({ id: agentTable.id })\n .from(agentTable)\n .where(eq(agentTable.id, agent.id))\n .limit(1);\n\n if (existing.length > 0) {\n logger.warn(\n { src: \"plugin:sql\", agentId: agent.id },\n \"Attempted to create agent with duplicate ID\"\n );\n return false;\n }\n }\n\n await this.db.transaction(async (tx) => {\n const agentData = {\n ...agent,\n createdAt: new Date(\n typeof agent.createdAt === \"bigint\"\n ? Number(agent.createdAt)\n : agent.createdAt || Date.now()\n ),\n updatedAt: new Date(\n typeof agent.updatedAt === \"bigint\"\n ? Number(agent.updatedAt)\n : agent.updatedAt || Date.now()\n ),\n };\n await tx\n .insert(agentTable)\n .values(agentData as unknown as typeof agentTable.$inferInsert);\n });\n\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId: agent.id,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to create agent\"\n );\n return false;\n }\n });\n }\n\n /**\n * Updates an agent in the database with the provided agent ID and data.\n * @param {UUID} agentId - The unique identifier of the agent to update.\n * @param {Partial<Agent>} agent - The partial agent object containing the fields to update.\n * @returns {Promise<boolean>} - A boolean indicating if the agent was successfully updated.\n */\n async updateAgent(agentId: UUID, agent: Partial<Agent>): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n if (!agentId) {\n throw new Error(\"Agent ID is required for update\");\n }\n\n await this.db.transaction(async (tx) => {\n // Handle settings update if present\n if (agent?.settings) {\n agent.settings = await this.mergeAgentSettings(tx, agentId, agent.settings);\n }\n\n // Convert numeric timestamps to Date objects for database storage\n // The Agent interface uses numbers, but the database schema expects Date objects\n const updateData: Record<string, unknown> = { ...agent };\n\n if (updateData.createdAt) {\n if (typeof updateData.createdAt === \"number\") {\n updateData.createdAt = new Date(updateData.createdAt);\n } else {\n delete updateData.createdAt; // Don't update createdAt if it's not a valid timestamp\n }\n }\n if (updateData.updatedAt) {\n if (typeof updateData.updatedAt === \"number\") {\n updateData.updatedAt = new Date(updateData.updatedAt);\n } else {\n updateData.updatedAt = new Date(); // Use current time if invalid\n }\n } else {\n updateData.updatedAt = new Date(); // Always set updatedAt to current time\n }\n\n await tx.update(agentTable).set(updateData).where(eq(agentTable.id, agentId));\n });\n\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to update agent\"\n );\n return false;\n }\n });\n }\n\n /**\n * Merges updated agent settings with existing settings in the database,\n * with special handling for nested objects like secrets.\n * @param tx - The database transaction\n * @param agentId - The ID of the agent\n * @param updatedSettings - The settings object with updates\n * @returns The merged settings object\n * @private\n */\n private async mergeAgentSettings<T extends Record<string, unknown>>(\n tx: DrizzleDatabase,\n agentId: UUID,\n updatedSettings: T\n ): Promise<T> {\n // First get the current agent data\n const currentAgent = await tx\n .select({ settings: agentTable.settings })\n .from(agentTable)\n .where(eq(agentTable.id, agentId))\n .limit(1);\n\n const currentSettings =\n currentAgent.length > 0 && currentAgent[0].settings ? currentAgent[0].settings : {};\n\n const deepMerge = (\n target: Record<string, unknown> | unknown,\n source: Record<string, unknown>\n ): Record<string, unknown> | undefined => {\n // If source is explicitly null, it means the intention is to set this entire branch to null (or delete if top-level handled by caller).\n // For recursive calls, if a sub-object in source is null, it effectively means \"remove this sub-object from target\".\n // However, our primary deletion signal is a *property value* being null within an object.\n if (source === null) {\n // If the entire source for a given key is null, we treat it as \"delete this key from target\"\n // by returning undefined, which the caller can use to delete the key.\n return undefined;\n }\n\n // If source is an array or a primitive, it replaces the target value.\n if (Array.isArray(source) || typeof source !== \"object\") {\n return source;\n }\n\n // Initialize output. If target is not an object, start with an empty one to merge source into.\n const output =\n typeof target === \"object\" && target !== null && !Array.isArray(target)\n ? { ...target }\n : {};\n\n for (const key of Object.keys(source)) {\n // Iterate over source keys\n const sourceValue = source[key];\n\n if (sourceValue === null) {\n // If a value in source is null, delete the corresponding key from output.\n delete output[key];\n } else if (typeof sourceValue === \"object\" && !Array.isArray(sourceValue)) {\n // If value is an object, recurse.\n const nestedMergeResult = deepMerge(output[key], sourceValue as Record<string, unknown>);\n if (nestedMergeResult === undefined) {\n // If recursive merge resulted in undefined (meaning the nested object should be deleted)\n delete output[key];\n } else {\n output[key] = nestedMergeResult;\n }\n } else {\n // Primitive or array value from source, assign it.\n output[key] = sourceValue;\n }\n }\n\n // After processing all keys from source, check if output became empty.\n // An object is empty if all its keys were deleted or resulted in undefined.\n // This is a more direct check than iterating 'output' after building it.\n if (Object.keys(output).length === 0) {\n // If the source itself was not an explicitly empty object,\n // and the merge resulted in an empty object, signal deletion.\n if (!(typeof source === \"object\" && source !== null && Object.keys(source).length === 0)) {\n return undefined; // Signal to delete this (parent) key if it became empty.\n }\n }\n\n return output;\n }; // End of deepMerge\n\n const finalSettings = deepMerge(currentSettings, updatedSettings);\n // If the entire settings object becomes undefined (e.g. all keys removed),\n // return an empty object instead of undefined/null to keep the settings field present.\n return (finalSettings ?? {}) as T;\n }\n\n /**\n * Asynchronously deletes an agent with the specified UUID and all related entries.\n *\n * @param {UUID} agentId - The UUID of the agent to be deleted.\n * @returns {Promise<boolean>} - A boolean indicating if the deletion was successful.\n */\n async deleteAgent(agentId: UUID): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n // Simply delete the agent - all related data will be cascade deleted\n const result = await this.db\n .delete(agentTable)\n .where(eq(agentTable.id, agentId))\n .returning();\n\n if (result.length === 0) {\n logger.warn({ src: \"plugin:sql\", agentId }, \"Agent not found for deletion\");\n return false;\n }\n\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to delete agent\"\n );\n throw error;\n }\n });\n }\n\n /**\n * Count all agents in the database\n * Used primarily for maintenance and cleanup operations\n */\n /**\n * Asynchronously counts the number of agents in the database.\n * @returns {Promise<number>} A Promise that resolves to the number of agents in the database.\n */\n async countAgents(): Promise<number> {\n return this.withDatabase(async () => {\n try {\n const result = await this.db.select({ count: count() }).from(agentTable);\n\n const result0 = result[0];\n return result0?.count || 0;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to count agents\"\n );\n return 0;\n }\n });\n }\n\n /**\n * Clean up the agents table by removing all agents\n * This is used during server startup to ensure no orphaned agents exist\n * from previous crashes or improper shutdowns\n */\n async cleanupAgents(): Promise<void> {\n return this.withDatabase(async () => {\n try {\n await this.db.delete(agentTable);\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to clean up agent table\"\n );\n throw error;\n }\n });\n }\n\n /**\n * Asynchronously retrieves an entity and its components by entity IDs.\n * @param {UUID[]} entityIds - The unique identifiers of the entities to retrieve.\n * @returns {Promise<Entity[] | null>} A Promise that resolves to the entity with its components if found, null otherwise.\n */\n async getEntitiesByIds(entityIds: UUID[]): Promise<Entity[] | null> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({\n entity: entityTable,\n components: componentTable,\n })\n .from(entityTable)\n .leftJoin(componentTable, eq(componentTable.entityId, entityTable.id))\n .where(inArray(entityTable.id, entityIds));\n\n if (result.length === 0) return [];\n\n // Group components by entity\n const entities: Record<UUID, Entity> = {};\n const entityComponents: Record<UUID, Entity[\"components\"]> = {};\n for (const e of result) {\n const key = e.entity.id;\n entities[key] = e.entity;\n if (entityComponents[key] === undefined) entityComponents[key] = [];\n if (e.components) {\n // Handle both single component and array of components\n const componentsArray = Array.isArray(e.components) ? e.components : [e.components];\n entityComponents[key] = [...entityComponents[key], ...componentsArray];\n }\n }\n for (const k of Object.keys(entityComponents)) {\n entities[k].components = entityComponents[k];\n }\n\n return Object.values(entities);\n });\n }\n\n /**\n * Asynchronously retrieves all entities for a given room, optionally including their components.\n * @param {UUID} roomId - The unique identifier of the room to get entities for\n * @param {boolean} [includeComponents] - Whether to include component data for each entity\n * @returns {Promise<Entity[]>} A Promise that resolves to an array of entities in the room\n */\n async getEntitiesForRoom(roomId: UUID, includeComponents?: boolean): Promise<Entity[]> {\n return this.withDatabase(async () => {\n const query = this.db\n .select({\n entity: entityTable,\n ...(includeComponents && { components: componentTable }),\n })\n .from(participantTable)\n .leftJoin(\n entityTable,\n and(eq(participantTable.entityId, entityTable.id), eq(entityTable.agentId, this.agentId))\n );\n\n if (includeComponents) {\n query.leftJoin(componentTable, eq(componentTable.entityId, entityTable.id));\n }\n\n const result = await query.where(eq(participantTable.roomId, roomId));\n\n // Group components by entity if includeComponents is true\n const entitiesByIdMap = new Map<UUID, Entity>();\n\n for (const row of result) {\n if (!row.entity) continue;\n\n const entityId = row.entity.id as UUID;\n if (!entitiesByIdMap.has(entityId)) {\n const entity: Entity = {\n ...row.entity,\n id: entityId,\n agentId: row.entity.agentId as UUID,\n metadata: (row.entity.metadata || {}) as Metadata,\n components: includeComponents ? [] : undefined,\n };\n entitiesByIdMap.set(entityId, entity);\n }\n\n if (includeComponents && row.components) {\n const entity = entitiesByIdMap.get(entityId);\n if (entity) {\n if (!entity.components) {\n entity.components = [];\n }\n entity.components.push(row.components);\n }\n }\n }\n\n return Array.from(entitiesByIdMap.values());\n });\n }\n\n /**\n * Asynchronously creates new entities in the database.\n * @param {Entity[]} entities - The entity objects to be created.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating the success of the operation.\n */\n async createEntities(entities: Entity[]): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n return await this.db.transaction(async (tx) => {\n // Normalize entity data to ensure names is a proper array\n const normalizedEntities = entities.map((entity) => ({\n ...entity,\n names: this.normalizeEntityNames(entity.names),\n metadata: entity.metadata || {},\n }));\n\n await tx.insert(entityTable).values(normalizedEntities);\n\n return true;\n });\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n entityId: entities[0]?.id,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to create entities\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously ensures an entity exists, creating it if it doesn't\n * @param entity The entity to ensure exists\n * @returns Promise resolving to boolean indicating success\n */\n protected async ensureEntityExists(entity: Entity): Promise<boolean> {\n if (!entity.id) {\n logger.error({ src: \"plugin:sql\" }, \"Entity ID is required for ensureEntityExists\");\n return false;\n }\n\n try {\n const existingEntities = await this.getEntitiesByIds([entity.id]);\n\n if (!existingEntities || !existingEntities.length) {\n return await this.createEntities([entity]);\n }\n\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n entityId: entity.id,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to ensure entity exists\"\n );\n return false;\n }\n }\n\n /**\n * Asynchronously updates an entity in the database.\n * @param {Entity} entity - The entity object to be updated.\n * @returns {Promise<void>} A Promise that resolves when the entity is updated.\n */\n async updateEntity(entity: Entity): Promise<void> {\n if (!entity.id) {\n throw new Error(\"Entity ID is required for update\");\n }\n return this.withDatabase(async () => {\n // Normalize entity data to ensure names is a proper array\n const normalizedEntity = {\n ...entity,\n names: this.normalizeEntityNames(entity.names),\n metadata: entity.metadata || {},\n };\n\n await this.db\n .update(entityTable)\n .set(normalizedEntity)\n .where(eq(entityTable.id, entity.id as string));\n });\n }\n\n /**\n * Asynchronously deletes an entity from the database based on the provided ID.\n * @param {UUID} entityId - The ID of the entity to delete.\n * @returns {Promise<void>} A Promise that resolves when the entity is deleted.\n */\n async deleteEntity(entityId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.transaction(async (tx) => {\n // Delete related components first\n await tx\n .delete(componentTable)\n .where(\n or(eq(componentTable.entityId, entityId), eq(componentTable.sourceEntityId, entityId))\n );\n\n // Delete the entity\n await tx.delete(entityTable).where(eq(entityTable.id, entityId));\n });\n });\n }\n\n /**\n * Asynchronously retrieves entities by their names and agentId.\n * @param {Object} params - The parameters for retrieving entities.\n * @param {string[]} params.names - The names to search for.\n * @param {UUID} params.agentId - The agent ID to filter by.\n * @returns {Promise<Entity[]>} A Promise that resolves to an array of entities.\n */\n async getEntitiesByNames(params: { names: string[]; agentId: UUID }): Promise<Entity[]> {\n return this.withDatabase(async () => {\n const { names, agentId } = params;\n\n // Build a condition to match any of the names\n const nameConditions = names.map((name) => sql`${name} = ANY(${entityTable.names})`);\n\n const query = sql`\n SELECT * FROM ${entityTable}\n WHERE ${entityTable.agentId} = ${agentId}\n AND (${sql.join(nameConditions, sql` OR `)})\n `;\n\n const result = await this.db.execute(query);\n\n return result.rows.map((row: Record<string, unknown>) => ({\n id: row.id as UUID,\n agentId: row.agentId as UUID,\n names: (row.names || []) as string[],\n metadata: (row.metadata || {}) as Metadata,\n }));\n });\n }\n\n /**\n * Asynchronously searches for entities by name with fuzzy matching.\n * @param {Object} params - The parameters for searching entities.\n * @param {string} params.query - The search query.\n * @param {UUID} params.agentId - The agent ID to filter by.\n * @param {number} params.limit - The maximum number of results to return.\n * @returns {Promise<Entity[]>} A Promise that resolves to an array of entities.\n */\n async searchEntitiesByName(params: {\n query: string;\n agentId: UUID;\n limit?: number;\n }): Promise<Entity[]> {\n return this.withDatabase(async () => {\n const { query, agentId, limit = 10 } = params;\n\n // If query is empty, return all entities up to limit\n if (!query || query.trim() === \"\") {\n const result = await this.db\n .select()\n .from(entityTable)\n .where(eq(entityTable.agentId, agentId))\n .limit(limit);\n\n return result.map((row: Record<string, unknown>) => ({\n id: row.id as UUID,\n agentId: row.agentId as UUID,\n names: (row.names || []) as string[],\n metadata: (row.metadata || {}) as Metadata,\n }));\n }\n\n // Otherwise, search for entities with names containing the query (case-insensitive)\n const searchQuery = sql`\n SELECT * FROM ${entityTable}\n WHERE ${entityTable.agentId} = ${agentId}\n AND EXISTS (\n SELECT 1 FROM unnest(${entityTable.names}) AS name\n WHERE LOWER(name) LIKE LOWER(${`%${query}%`})\n )\n LIMIT ${limit}\n `;\n\n const result = await this.db.execute(searchQuery);\n\n return result.rows.map((row: Record<string, unknown>) => ({\n id: row.id as UUID,\n agentId: row.agentId as UUID,\n names: (row.names || []) as string[],\n metadata: (row.metadata || {}) as Metadata,\n }));\n });\n }\n\n async getComponent(\n entityId: UUID,\n type: string,\n worldId?: UUID,\n sourceEntityId?: UUID\n ): Promise<Component | null> {\n return this.withDatabase(async () => {\n const conditions = [eq(componentTable.entityId, entityId), eq(componentTable.type, type)];\n\n if (worldId) {\n conditions.push(eq(componentTable.worldId, worldId));\n }\n\n if (sourceEntityId) {\n conditions.push(eq(componentTable.sourceEntityId, sourceEntityId));\n }\n\n const result = await this.db\n .select()\n .from(componentTable)\n .where(and(...conditions));\n\n if (result.length === 0) return null;\n\n const component = result[0];\n\n return {\n ...component,\n id: component.id as UUID,\n entityId: component.entityId as UUID,\n agentId: component.agentId as UUID,\n roomId: component.roomId as UUID,\n worldId: (component.worldId ?? \"\") as UUID,\n sourceEntityId: (component.sourceEntityId ?? \"\") as UUID,\n data: component.data as Metadata,\n createdAt: component.createdAt.getTime(),\n };\n });\n }\n\n /**\n * Asynchronously retrieves all components for a given entity, optionally filtered by world and source entity.\n * @param {UUID} entityId - The unique identifier of the entity to retrieve components for\n * @param {UUID} [worldId] - Optional world ID to filter components by\n * @param {UUID} [sourceEntityId] - Optional source entity ID to filter components by\n * @returns {Promise<Component[]>} A Promise that resolves to an array of components\n */\n async getComponents(entityId: UUID, worldId?: UUID, sourceEntityId?: UUID): Promise<Component[]> {\n return this.withDatabase(async () => {\n const conditions = [eq(componentTable.entityId, entityId)];\n\n if (worldId) {\n conditions.push(eq(componentTable.worldId, worldId));\n }\n\n if (sourceEntityId) {\n conditions.push(eq(componentTable.sourceEntityId, sourceEntityId));\n }\n\n const result = await this.db\n .select({\n id: componentTable.id,\n entityId: componentTable.entityId,\n type: componentTable.type,\n data: componentTable.data,\n worldId: componentTable.worldId,\n agentId: componentTable.agentId,\n roomId: componentTable.roomId,\n sourceEntityId: componentTable.sourceEntityId,\n createdAt: componentTable.createdAt,\n })\n .from(componentTable)\n .where(and(...conditions));\n\n if (result.length === 0) return [];\n\n const components = result.map((component) => ({\n ...component,\n id: component.id as UUID,\n entityId: component.entityId as UUID,\n agentId: component.agentId as UUID,\n roomId: component.roomId as UUID,\n worldId: (component.worldId ?? \"\") as UUID,\n sourceEntityId: (component.sourceEntityId ?? \"\") as UUID,\n data: component.data as Metadata,\n createdAt: component.createdAt.getTime(),\n }));\n\n return components;\n });\n }\n\n /**\n * Asynchronously creates a new component in the database.\n * @param {Component} component - The component object to be created.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating the success of the operation.\n */\n async createComponent(component: Component): Promise<boolean> {\n return this.withDatabase(async () => {\n await this.db.insert(componentTable).values({\n ...component,\n createdAt: new Date(),\n });\n return true;\n });\n }\n\n /**\n * Asynchronously updates an existing component in the database.\n * @param {Component} component - The component object to be updated.\n * @returns {Promise<void>} A Promise that resolves when the component is updated.\n */\n async updateComponent(component: Component): Promise<void> {\n return this.withDatabase(async () => {\n try {\n // Convert createdAt from number to Date for database compatibility\n const { createdAt, ...rest } = component;\n await this.db\n .update(componentTable)\n .set({\n ...rest,\n createdAt: new Date(createdAt),\n })\n .where(eq(componentTable.id, component.id));\n } catch (e) {\n console.error(\"updateComponent error\", e);\n }\n });\n }\n\n /**\n * Asynchronously deletes a component from the database.\n * @param {UUID} componentId - The unique identifier of the component to delete.\n * @returns {Promise<void>} A Promise that resolves when the component is deleted.\n */\n async deleteComponent(componentId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.delete(componentTable).where(eq(componentTable.id, componentId));\n });\n }\n\n /**\n * Asynchronously retrieves memories from the database based on the provided parameters.\n * @param {Object} params - The parameters for retrieving memories.\n * @param {UUID} params.roomId - The ID of the room to retrieve memories for.\n * @param {number} [params.count] - The maximum number of memories to retrieve.\n * @param {number} [params.offset] - The offset for pagination.\n * @param {boolean} [params.unique] - Whether to retrieve unique memories only.\n * @param {string} [params.tableName] - The name of the table to retrieve memories from.\n * @param {number} [params.start] - The start date to retrieve memories from.\n * @param {number} [params.end] - The end date to retrieve memories from.\n * @returns {Promise<Memory[]>} A Promise that resolves to an array of memories.\n */\n async getMemories(params: {\n entityId?: UUID;\n agentId?: UUID;\n count?: number;\n offset?: number;\n unique?: boolean;\n tableName: string;\n start?: number;\n end?: number;\n roomId?: UUID;\n worldId?: UUID;\n }): Promise<Memory[]> {\n const { entityId, agentId, roomId, worldId, tableName, unique, start, end, offset } = params;\n\n if (!tableName) throw new Error(\"tableName is required\");\n if (offset !== undefined && offset < 0) {\n throw new Error(\"offset must be a non-negative number\");\n }\n\n return this.withEntityContext(entityId ?? null, async (tx) => {\n const conditions = [eq(memoryTable.type, tableName)];\n\n if (start) {\n conditions.push(gte(memoryTable.createdAt, new Date(start)));\n }\n\n // RLS handles access control - no explicit entityId filter needed\n\n if (roomId) {\n conditions.push(eq(memoryTable.roomId, roomId));\n }\n\n // Add worldId condition\n if (worldId) {\n conditions.push(eq(memoryTable.worldId, worldId));\n }\n\n if (end) {\n conditions.push(lte(memoryTable.createdAt, new Date(end)));\n }\n\n if (unique) {\n conditions.push(eq(memoryTable.unique, true));\n }\n\n if (agentId) {\n conditions.push(eq(memoryTable.agentId, agentId));\n }\n\n const baseQuery = tx\n .select({\n memory: {\n id: memoryTable.id,\n type: memoryTable.type,\n createdAt: memoryTable.createdAt,\n content: memoryTable.content,\n entityId: memoryTable.entityId,\n agentId: memoryTable.agentId,\n roomId: memoryTable.roomId,\n unique: memoryTable.unique,\n metadata: memoryTable.metadata,\n },\n embedding: embeddingTable[this.embeddingDimension],\n })\n .from(memoryTable)\n .leftJoin(embeddingTable, eq(embeddingTable.memoryId, memoryTable.id))\n .where(and(...conditions))\n .orderBy(desc(memoryTable.createdAt));\n\n // Apply limit and offset for pagination\n // Build query conditionally to maintain proper types\n const rows = await (async () => {\n if (params.count && offset !== undefined && offset > 0) {\n return baseQuery.limit(params.count).offset(offset);\n } else if (params.count) {\n return baseQuery.limit(params.count);\n } else if (offset !== undefined && offset > 0) {\n return baseQuery.offset(offset);\n } else {\n return baseQuery;\n }\n })();\n\n return rows.map((row) => ({\n id: row.memory.id as UUID,\n type: row.memory.type,\n createdAt: row.memory.createdAt.getTime(),\n content:\n typeof row.memory.content === \"string\"\n ? JSON.parse(row.memory.content)\n : row.memory.content,\n entityId: row.memory.entityId as UUID,\n agentId: row.memory.agentId as UUID,\n roomId: row.memory.roomId as UUID,\n unique: row.memory.unique,\n metadata: row.memory.metadata as MemoryMetadata,\n embedding: row.embedding ? Array.from(row.embedding) : undefined,\n }));\n });\n }\n\n /**\n * Asynchronously retrieves memories from the database based on the provided parameters.\n * @param {Object} params - The parameters for retrieving memories.\n * @param {UUID[]} params.roomIds - The IDs of the rooms to retrieve memories for.\n * @param {string} params.tableName - The name of the table to retrieve memories from.\n * @param {number} [params.limit] - The maximum number of memories to retrieve.\n * @returns {Promise<Memory[]>} A Promise that resolves to an array of memories.\n */\n async getMemoriesByRoomIds(params: {\n roomIds: UUID[];\n tableName: string;\n limit?: number;\n }): Promise<Memory[]> {\n return this.withDatabase(async () => {\n if (params.roomIds.length === 0) return [];\n\n const conditions = [\n eq(memoryTable.type, params.tableName),\n inArray(memoryTable.roomId, params.roomIds),\n ];\n\n conditions.push(eq(memoryTable.agentId, this.agentId));\n\n const query = this.db\n .select({\n id: memoryTable.id,\n type: memoryTable.type,\n createdAt: memoryTable.createdAt,\n content: memoryTable.content,\n entityId: memoryTable.entityId,\n agentId: memoryTable.agentId,\n roomId: memoryTable.roomId,\n unique: memoryTable.unique,\n metadata: memoryTable.metadata,\n })\n .from(memoryTable)\n .where(and(...conditions))\n .orderBy(desc(memoryTable.createdAt));\n\n const rows = params.limit ? await query.limit(params.limit) : await query;\n\n return rows.map((row) => ({\n id: row.id as UUID,\n createdAt: row.createdAt.getTime(),\n content: typeof row.content === \"string\" ? JSON.parse(row.content) : row.content,\n entityId: row.entityId as UUID,\n agentId: row.agentId as UUID,\n roomId: row.roomId as UUID,\n unique: row.unique,\n metadata: row.metadata,\n })) as Memory[];\n });\n }\n\n /**\n * Asynchronously retrieves a memory by its unique identifier.\n * @param {UUID} id - The unique identifier of the memory to retrieve.\n * @returns {Promise<Memory | null>} A Promise that resolves to the memory if found, null otherwise.\n */\n async getMemoryById(id: UUID): Promise<Memory | null> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({\n memory: memoryTable,\n embedding: embeddingTable[this.embeddingDimension],\n })\n .from(memoryTable)\n .leftJoin(embeddingTable, eq(memoryTable.id, embeddingTable.memoryId))\n .where(eq(memoryTable.id, id))\n .limit(1);\n\n if (result.length === 0) return null;\n\n const row = result[0];\n return {\n id: row.memory.id as UUID,\n createdAt: row.memory.createdAt.getTime(),\n content:\n typeof row.memory.content === \"string\"\n ? JSON.parse(row.memory.content)\n : row.memory.content,\n entityId: row.memory.entityId as UUID,\n agentId: row.memory.agentId as UUID,\n roomId: row.memory.roomId as UUID,\n unique: row.memory.unique,\n metadata: row.memory.metadata as MemoryMetadata,\n embedding: row.embedding ?? undefined,\n };\n });\n }\n\n /**\n * Asynchronously retrieves memories from the database based on the provided parameters.\n * @param {Object} params - The parameters for retrieving memories.\n * @param {UUID[]} params.memoryIds - The IDs of the memories to retrieve.\n * @param {string} [params.tableName] - The name of the table to retrieve memories from.\n * @returns {Promise<Memory[]>} A Promise that resolves to an array of memories.\n */\n async getMemoriesByIds(memoryIds: UUID[], tableName?: string): Promise<Memory[]> {\n return this.withDatabase(async () => {\n if (memoryIds.length === 0) return [];\n\n const conditions = [inArray(memoryTable.id, memoryIds)];\n\n if (tableName) {\n conditions.push(eq(memoryTable.type, tableName));\n }\n\n const rows = await this.db\n .select({\n memory: memoryTable,\n embedding: embeddingTable[this.embeddingDimension],\n })\n .from(memoryTable)\n .leftJoin(embeddingTable, eq(embeddingTable.memoryId, memoryTable.id))\n .where(and(...conditions))\n .orderBy(desc(memoryTable.createdAt));\n\n return rows.map((row) => ({\n id: row.memory.id as UUID,\n createdAt: row.memory.createdAt.getTime(),\n content:\n typeof row.memory.content === \"string\"\n ? JSON.parse(row.memory.content)\n : row.memory.content,\n entityId: row.memory.entityId as UUID,\n agentId: row.memory.agentId as UUID,\n roomId: row.memory.roomId as UUID,\n unique: row.memory.unique,\n metadata: row.memory.metadata as MemoryMetadata,\n embedding: row.embedding ?? undefined,\n }));\n });\n }\n\n /**\n * Asynchronously retrieves cached embeddings from the database based on the provided parameters.\n * @param {Object} opts - The parameters for retrieving cached embeddings.\n * @param {string} opts.query_table_name - The name of the table to retrieve embeddings from.\n * @param {number} opts.query_threshold - The threshold for the levenshtein distance.\n * @param {string} opts.query_input - The input string to search for.\n * @param {string} opts.query_field_name - The name of the field to retrieve embeddings from.\n * @param {string} opts.query_field_sub_name - The name of the sub-field to retrieve embeddings from.\n * @param {number} opts.query_match_count - The maximum number of matches to retrieve.\n * @returns {Promise<{ embedding: number[]; levenshtein_score: number }[]>} A Promise that resolves to an array of cached embeddings.\n */\n async getCachedEmbeddings(opts: {\n query_table_name: string;\n query_threshold: number;\n query_input: string;\n query_field_name: string;\n query_field_sub_name: string;\n query_match_count: number;\n }): Promise<{ embedding: number[]; levenshtein_score: number }[]> {\n return this.withDatabase(async () => {\n try {\n // Drizzle database has execute method for raw SQL\n interface DrizzleDatabaseWithExecute {\n execute: (query: ReturnType<typeof sql>) => Promise<{ rows: Record<string, unknown>[] }>;\n }\n const results = await (this.db as DrizzleDatabaseWithExecute).execute(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 return results.rows\n .map((row) => ({\n embedding: Array.isArray(row.embedding)\n ? row.embedding\n : typeof row.embedding === \"string\"\n ? JSON.parse(row.embedding)\n : [],\n levenshtein_score: Number(row.levenshtein_score),\n }))\n .filter((row) => Array.isArray(row.embedding));\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n tableName: opts.query_table_name,\n fieldName: opts.query_field_name,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to get cached embeddings\"\n );\n if (\n error instanceof Error &&\n error.message === \"levenshtein argument exceeds maximum length of 255 characters\"\n ) {\n return [];\n }\n throw error;\n }\n });\n }\n\n /**\n * Asynchronously logs an event in the database.\n * @param {Object} params - The parameters for logging an event.\n * @param {Object} params.body - The body of the event to log.\n * @param {UUID} params.entityId - The ID of the entity associated with the event.\n * @param {UUID} params.roomId - The ID of the room associated with the event.\n * @param {string} params.type - The type of the event to log.\n * @returns {Promise<void>} A Promise that resolves when the event is logged.\n */\n async log(params: {\n body: { [key: string]: unknown };\n entityId: UUID;\n roomId: UUID;\n type: string;\n }): Promise<void> {\n return this.withDatabase(async () => {\n try {\n // Sanitize JSON body to prevent Unicode escape sequence errors\n const sanitizedBody = this.sanitizeJsonObject(params.body);\n\n // Serialize to JSON string first for an additional layer of protection\n // This ensures any problematic characters are properly escaped during JSON serialization\n const jsonString = JSON.stringify(sanitizedBody);\n\n // Use withEntityContext to set Entity RLS context before inserting\n // This ensures the log entry passes STRICT Entity RLS policy\n await this.withEntityContext(params.entityId, async (tx) => {\n await tx.insert(logTable).values({\n body: sql`${jsonString}::jsonb`,\n entityId: params.entityId,\n roomId: params.roomId,\n type: params.type,\n });\n });\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n type: params.type,\n roomId: params.roomId,\n entityId: params.entityId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to create log entry\"\n );\n throw error;\n }\n });\n }\n\n /**\n * Sanitizes a JSON object by replacing problematic Unicode escape sequences\n * that could cause errors during JSON serialization/storage\n *\n * @param value - The value to sanitize\n * @returns The sanitized value\n */\n private sanitizeJsonObject(value: unknown, seen: WeakSet<object> = new WeakSet()): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === \"string\") {\n // Handle multiple cases that can cause PostgreSQL/PgLite JSON parsing errors:\n // 1. Remove null bytes (U+0000) which are not allowed in PostgreSQL text fields\n // 2. Escape single backslashes that might be interpreted as escape sequences\n // 3. Fix broken Unicode escape sequences (\\u not followed by 4 hex digits)\n const nullChar = String.fromCharCode(0);\n const nullCharRegex = new RegExp(nullChar, \"g\");\n return value\n .replace(nullCharRegex, \"\") // Remove null bytes\n .replace(/\\\\(?![\"\\\\/bfnrtu])/g, \"\\\\\\\\\") // Escape single backslashes not part of valid escape sequences\n .replace(/\\\\u(?![0-9a-fA-F]{4})/g, \"\\\\\\\\u\"); // Fix malformed Unicode escape sequences\n }\n\n if (typeof value === \"object\") {\n if (seen.has(value as object)) {\n return null;\n } else {\n seen.add(value as object);\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => this.sanitizeJsonObject(item, seen));\n } else {\n const result: Record<string, unknown> = {};\n const nullChar = String.fromCharCode(0);\n const nullCharRegex = new RegExp(nullChar, \"g\");\n for (const [key, val] of Object.entries(value)) {\n // Also sanitize object keys\n const sanitizedKey =\n typeof key === \"string\"\n ? key.replace(nullCharRegex, \"\").replace(/\\\\u(?![0-9a-fA-F]{4})/g, \"\\\\\\\\u\")\n : key;\n result[sanitizedKey] = this.sanitizeJsonObject(val, seen);\n }\n return result;\n }\n }\n\n return value;\n }\n\n /**\n * Asynchronously retrieves logs from the database based on the provided parameters.\n * @param {Object} params - The parameters for retrieving logs.\n * @param {UUID} params.entityId - The ID of the entity associated with the logs.\n * @param {UUID} [params.roomId] - The ID of the room associated with the logs.\n * @param {string} [params.type] - The type of the logs to retrieve.\n * @param {number} [params.count] - The maximum number of logs to retrieve.\n * @param {number} [params.offset] - The offset to retrieve logs from.\n * @returns {Promise<Log[]>} A Promise that resolves to an array of logs.\n */\n async getLogs(params: {\n entityId?: UUID;\n roomId?: UUID;\n type?: string;\n count?: number;\n offset?: number;\n }): Promise<Log[]> {\n const { entityId, roomId, type, count, offset } = params;\n\n // Use withEntityContext for RLS only when entityId is provided\n // Without entityId, bypass RLS to see all logs (for non-RLS mode)\n return this.withEntityContext(entityId ?? null, async (tx) => {\n const result = await tx\n .select()\n .from(logTable)\n .where(\n and(\n roomId ? eq(logTable.roomId, roomId) : undefined,\n type ? eq(logTable.type, type) : undefined\n )\n )\n .orderBy(desc(logTable.createdAt))\n .limit(count ?? 10)\n .offset(offset ?? 0);\n\n const logs = result.map((log) => ({\n ...log,\n id: log.id as UUID,\n entityId: log.entityId as UUID,\n roomId: log.roomId as UUID,\n type: log.type as string,\n body: log.body as LogBody,\n createdAt: new Date(log.createdAt as string | number | Date),\n }));\n\n if (logs.length === 0) return [];\n\n return logs;\n });\n }\n\n async getAgentRunSummaries(\n params: {\n limit?: number;\n roomId?: UUID;\n status?: RunStatus | \"all\";\n from?: number;\n to?: number;\n entityId?: UUID;\n } = {}\n ): Promise<AgentRunSummaryResult> {\n const limit = Math.min(Math.max(params.limit ?? 20, 1), 100);\n const fromDate = typeof params.from === \"number\" ? new Date(params.from) : undefined;\n const toDate = typeof params.to === \"number\" ? new Date(params.to) : undefined;\n\n // Use withEntityContext for RLS when entityId is provided\n return this.withEntityContext(params.entityId ?? null, async (tx) => {\n const runMap = new Map<string, AgentRunSummary>();\n\n const conditions: SQL<unknown>[] = [\n eq(logTable.type, \"run_event\"),\n sql`${logTable.body} ? 'runId'`,\n eq(roomTable.agentId, this.agentId),\n ];\n\n if (params.roomId) {\n conditions.push(eq(logTable.roomId, params.roomId));\n }\n if (fromDate) {\n conditions.push(gte(logTable.createdAt, fromDate));\n }\n if (toDate) {\n conditions.push(lte(logTable.createdAt, toDate));\n }\n\n const whereClause = and(...conditions);\n\n const eventLimit = Math.max(limit * 20, 200);\n\n const runEventRows = await tx\n .select({\n runId: sql<string>`(${logTable.body} ->> 'runId')`,\n status: sql<string | null>`(${logTable.body} ->> 'status')`,\n messageId: sql<string | null>`(${logTable.body} ->> 'messageId')`,\n rawBody: logTable.body,\n createdAt: logTable.createdAt,\n roomId: logTable.roomId,\n entityId: logTable.entityId,\n })\n .from(logTable)\n .innerJoin(roomTable, eq(roomTable.id, logTable.roomId))\n .where(whereClause)\n .orderBy(desc(logTable.createdAt))\n .limit(eventLimit);\n\n for (const row of runEventRows) {\n const runId = row.runId;\n if (!runId) continue;\n\n const summary: AgentRunSummary = runMap.get(runId) ?? {\n runId,\n status: \"started\",\n startedAt: null,\n endedAt: null,\n durationMs: null,\n messageId: undefined,\n roomId: undefined,\n entityId: undefined,\n metadata: {},\n };\n\n if (!summary.messageId && row.messageId) {\n summary.messageId = row.messageId as UUID;\n }\n if (!summary.roomId && row.roomId) {\n summary.roomId = row.roomId as UUID;\n }\n if (!summary.entityId && row.entityId) {\n summary.entityId = row.entityId as UUID;\n }\n\n const body = row.rawBody as Record<string, unknown> | undefined;\n if (body && typeof body === \"object\") {\n if (!summary.roomId && typeof body.roomId === \"string\") {\n summary.roomId = body.roomId as UUID;\n }\n if (!summary.entityId && typeof body.entityId === \"string\") {\n summary.entityId = body.entityId as UUID;\n }\n if (!summary.messageId && typeof body.messageId === \"string\") {\n summary.messageId = body.messageId as UUID;\n }\n if (!summary.metadata || Object.keys(summary.metadata).length === 0) {\n const metadata = (body.metadata as Record<string, unknown> | undefined) ?? undefined;\n summary.metadata = metadata ? ({ ...metadata } as Record<string, JsonValue>) : {};\n }\n }\n\n const createdAt = row.createdAt instanceof Date ? row.createdAt : new Date(row.createdAt);\n const timestamp = createdAt.getTime();\n const bodyStatus = body?.status;\n const eventStatus =\n (row.status as RunStatus | undefined) ?? (bodyStatus as RunStatus | undefined);\n\n if (eventStatus === \"started\") {\n const currentStartedAt =\n summary.startedAt === null\n ? null\n : typeof summary.startedAt === \"bigint\"\n ? Number(summary.startedAt)\n : summary.startedAt;\n summary.startedAt =\n currentStartedAt === null ? timestamp : Math.min(currentStartedAt, timestamp);\n } else if (\n eventStatus === \"completed\" ||\n eventStatus === \"timeout\" ||\n eventStatus === \"error\"\n ) {\n summary.status = eventStatus;\n summary.endedAt = timestamp;\n if (summary.startedAt !== null) {\n const startedAtNum =\n typeof summary.startedAt === \"bigint\" ? Number(summary.startedAt) : summary.startedAt;\n summary.durationMs = Math.max(timestamp - startedAtNum, 0);\n }\n }\n\n runMap.set(runId, summary);\n }\n\n let runs = Array.from(runMap.values());\n if (params.status && params.status !== \"all\") {\n runs = runs.filter((run) => run.status === params.status);\n }\n\n runs.sort((a, b) => {\n const aStarted =\n a.startedAt === null\n ? 0\n : typeof a.startedAt === \"bigint\"\n ? Number(a.startedAt)\n : a.startedAt;\n const bStarted =\n b.startedAt === null\n ? 0\n : typeof b.startedAt === \"bigint\"\n ? Number(b.startedAt)\n : b.startedAt;\n return bStarted - aStarted;\n });\n\n const total = runs.length;\n const limitedRuns = runs.slice(0, limit);\n const hasMore = total > limit;\n\n const runCounts = new Map<string, AgentRunCounts>();\n for (const run of limitedRuns) {\n runCounts.set(run.runId, {\n actions: 0,\n modelCalls: 0,\n errors: 0,\n evaluators: 0,\n });\n }\n\n const runIds = limitedRuns.map((run) => run.runId).filter(Boolean);\n\n if (runIds.length > 0) {\n const runIdArray = sql`array[${sql.join(\n runIds.map((id) => sql`${id}`),\n sql`, `\n )}]::text[]`;\n\n const actionSummary = await this.db.execute(sql`\n SELECT\n body->>'runId' as \"runId\",\n COUNT(*)::int as \"actions\",\n SUM(CASE WHEN COALESCE(body->'result'->>'success', 'true') = 'false' THEN 1 ELSE 0 END)::int as \"errors\",\n SUM(COALESCE((body->>'promptCount')::int, 0))::int as \"modelCalls\"\n FROM ${logTable}\n WHERE type = 'action'\n AND body->>'runId' = ANY(${runIdArray})\n GROUP BY body->>'runId'\n `);\n\n const actionRows = (actionSummary.rows ?? []) as Array<{\n runId: string;\n actions: number | string;\n errors: number | string;\n modelCalls: number | string;\n }>;\n\n for (const row of actionRows) {\n const counts = runCounts.get(row.runId);\n if (!counts) continue;\n counts.actions += Number(row.actions ?? 0);\n counts.errors += Number(row.errors ?? 0);\n counts.modelCalls += Number(row.modelCalls ?? 0);\n }\n\n const evaluatorSummary = await this.db.execute(sql`\n SELECT\n body->>'runId' as \"runId\",\n COUNT(*)::int as \"evaluators\"\n FROM ${logTable}\n WHERE type = 'evaluator'\n AND body->>'runId' = ANY(${runIdArray})\n GROUP BY body->>'runId'\n `);\n\n const evaluatorRows = (evaluatorSummary.rows ?? []) as Array<{\n runId: string;\n evaluators: number | string;\n }>;\n\n for (const row of evaluatorRows) {\n const counts = runCounts.get(row.runId);\n if (!counts) continue;\n counts.evaluators += Number(row.evaluators ?? 0);\n }\n\n const genericSummary = await this.db.execute(sql`\n SELECT\n body->>'runId' as \"runId\",\n COUNT(*) FILTER (WHERE type LIKE 'useModel:%')::int as \"modelLogs\",\n COUNT(*) FILTER (WHERE type = 'embedding_event' AND body->>'status' = 'failed')::int as \"embeddingErrors\"\n FROM ${logTable}\n WHERE (type LIKE 'useModel:%' OR type = 'embedding_event')\n AND body->>'runId' = ANY(${runIdArray})\n GROUP BY body->>'runId'\n `);\n\n const genericRows = (genericSummary.rows ?? []) as Array<{\n runId: string;\n modelLogs: number | string;\n embeddingErrors: number | string;\n }>;\n\n for (const row of genericRows) {\n const counts = runCounts.get(row.runId);\n if (!counts) continue;\n counts.modelCalls += Number(row.modelLogs ?? 0);\n counts.errors += Number(row.embeddingErrors ?? 0);\n }\n }\n\n for (const run of limitedRuns) {\n const counts = runCounts.get(run.runId) ?? {\n actions: 0,\n modelCalls: 0,\n errors: 0,\n evaluators: 0,\n };\n // Cast through unknown to bridge the core type (without $typeName) to proto type (with $typeName)\n run.counts = counts as unknown as typeof run.counts;\n }\n\n return {\n runs: limitedRuns as unknown as import(\"@elizaos/core\").AgentRunSummary[],\n total,\n hasMore,\n } as AgentRunSummaryResult;\n });\n }\n\n /**\n * Asynchronously deletes a log from the database based on the provided parameters.\n * @param {UUID} logId - The ID of the log to delete.\n * @returns {Promise<void>} A Promise that resolves when the log is deleted.\n */\n async deleteLog(logId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.delete(logTable).where(eq(logTable.id, logId));\n });\n }\n\n /**\n * Asynchronously searches for memories in the database based on the provided parameters.\n * @param {Object} params - The parameters for searching for memories.\n * @param {string} params.tableName - The name of the table to search for memories in.\n * @param {number[]} params.embedding - The embedding to search for.\n * @param {number} [params.match_threshold] - The threshold for the cosine distance.\n * @param {number} [params.count] - The maximum number of memories to retrieve.\n * @param {boolean} [params.unique] - Whether to retrieve unique memories only.\n * @param {string} [params.query] - Optional query string for potential reranking.\n * @param {UUID} [params.roomId] - Optional room ID to filter by.\n * @param {UUID} [params.worldId] - Optional world ID to filter by.\n * @param {UUID} [params.entityId] - Optional entity ID to filter by.\n * @returns {Promise<Memory[]>} A Promise that resolves to an array of memories.\n */\n async searchMemories(params: {\n tableName: string;\n embedding: number[];\n match_threshold?: number;\n count?: number;\n unique?: boolean;\n query?: string;\n roomId?: UUID;\n worldId?: UUID;\n entityId?: UUID;\n }): Promise<Memory[]> {\n return await this.searchMemoriesByEmbedding(params.embedding, {\n match_threshold: params.match_threshold,\n count: params.count,\n // Pass direct scope fields down\n roomId: params.roomId,\n worldId: params.worldId,\n entityId: params.entityId,\n unique: params.unique,\n tableName: params.tableName,\n });\n }\n\n /**\n * Asynchronously searches for memories in the database based on the provided parameters.\n * @param {number[]} embedding - The embedding to search for.\n * @param {Object} params - The parameters for searching for memories.\n * @param {number} [params.match_threshold] - The threshold for the cosine distance.\n * @param {number} [params.count] - The maximum number of memories to retrieve.\n * @param {UUID} [params.roomId] - Optional room ID to filter by.\n * @param {UUID} [params.worldId] - Optional world ID to filter by.\n * @param {UUID} [params.entityId] - Optional entity ID to filter by.\n * @param {boolean} [params.unique] - Whether to retrieve unique memories only.\n * @param {string} [params.tableName] - The name of the table to search for memories in.\n * @returns {Promise<Memory[]>} A Promise that resolves to an array of memories.\n */\n async searchMemoriesByEmbedding(\n embedding: number[],\n params: {\n match_threshold?: number;\n count?: number;\n roomId?: UUID;\n worldId?: UUID;\n entityId?: UUID;\n unique?: boolean;\n tableName: string;\n }\n ): Promise<Memory[]> {\n return this.withDatabase(async () => {\n const cleanVector = embedding.map((n) => (Number.isFinite(n) ? Number(n.toFixed(6)) : 0));\n\n const similarity = sql<number>`1 - (${cosineDistance(\n embeddingTable[this.embeddingDimension],\n cleanVector\n )})`;\n\n const conditions = [eq(memoryTable.type, params.tableName)];\n\n if (params.unique) {\n conditions.push(eq(memoryTable.unique, true));\n }\n\n conditions.push(eq(memoryTable.agentId, this.agentId));\n\n // Add filters based on direct params\n if (params.roomId) {\n conditions.push(eq(memoryTable.roomId, params.roomId));\n }\n if (params.worldId) {\n conditions.push(eq(memoryTable.worldId, params.worldId));\n }\n if (params.entityId) {\n conditions.push(eq(memoryTable.entityId, params.entityId));\n }\n\n if (params.match_threshold) {\n conditions.push(gte(similarity, params.match_threshold));\n }\n\n const results = await this.db\n .select({\n memory: memoryTable,\n similarity,\n embedding: embeddingTable[this.embeddingDimension],\n })\n .from(embeddingTable)\n .innerJoin(memoryTable, eq(memoryTable.id, embeddingTable.memoryId))\n .where(and(...conditions))\n .orderBy(desc(similarity))\n .limit(params.count ?? 10);\n\n return results.map((row) => ({\n id: row.memory.id as UUID,\n type: row.memory.type,\n createdAt: row.memory.createdAt.getTime(),\n content:\n typeof row.memory.content === \"string\"\n ? JSON.parse(row.memory.content)\n : row.memory.content,\n entityId: row.memory.entityId as UUID,\n agentId: row.memory.agentId as UUID,\n roomId: row.memory.roomId as UUID,\n worldId: row.memory.worldId as UUID | undefined, // Include worldId\n unique: row.memory.unique,\n metadata: row.memory.metadata as MemoryMetadata,\n embedding: row.embedding ?? undefined,\n similarity: row.similarity,\n }));\n });\n }\n\n /**\n * Asynchronously creates a new memory in the database.\n * @param {Memory & { metadata?: MemoryMetadata }} memory - The memory object to create.\n * @param {string} tableName - The name of the table to create the memory in.\n * @returns {Promise<UUID>} A Promise that resolves to the ID of the created memory.\n */\n async createMemory(\n memory: Memory & { metadata?: MemoryMetadata },\n tableName: string\n ): Promise<UUID> {\n const memoryId = memory.id ?? (v4() as UUID);\n\n const existing = await this.getMemoryById(memoryId);\n if (existing) {\n return memoryId;\n }\n\n // only do costly check if we need to\n if (memory.unique === undefined) {\n memory.unique = true; // set default\n if (memory.embedding && Array.isArray(memory.embedding)) {\n const similarMemories = await this.searchMemoriesByEmbedding(memory.embedding, {\n tableName,\n // Use the scope fields from the memory object for similarity check\n roomId: memory.roomId,\n worldId: memory.worldId,\n entityId: memory.entityId,\n match_threshold: 0.95,\n count: 1,\n });\n memory.unique = similarMemories.length === 0;\n }\n }\n\n // Ensure we always pass a JSON string to the SQL placeholder – if we pass an\n // object directly PG sees `[object Object]` and fails the `::jsonb` cast.\n const contentToInsert =\n typeof memory.content === \"string\" ? memory.content : JSON.stringify(memory.content ?? {});\n\n const metadataToInsert =\n typeof memory.metadata === \"string\" ? memory.metadata : JSON.stringify(memory.metadata ?? {});\n\n // Use withEntityContext to set Entity RLS context if needed\n // This delegates to the concrete adapter implementation (PostgreSQL or PGLite)\n await this.withEntityContext(memory.entityId, async (tx) => {\n await tx.insert(memoryTable).values([\n {\n id: memoryId,\n type: tableName,\n content: sql`${contentToInsert}::jsonb`,\n metadata: sql`${metadataToInsert}::jsonb`,\n entityId: memory.entityId,\n roomId: memory.roomId,\n worldId: memory.worldId, // Include worldId\n agentId: memory.agentId || this.agentId,\n unique: memory.unique,\n createdAt: memory.createdAt ? new Date(memory.createdAt) : new Date(),\n },\n ]);\n\n if (memory.embedding && Array.isArray(memory.embedding)) {\n const embeddingValues: Record<string, unknown> = {\n id: v4(),\n memoryId: memoryId,\n createdAt: memory.createdAt ? new Date(memory.createdAt) : new Date(),\n };\n\n const cleanVector = memory.embedding.map((n) =>\n Number.isFinite(n) ? Number(n.toFixed(6)) : 0\n );\n\n embeddingValues[this.embeddingDimension] = cleanVector;\n\n await tx.insert(embeddingTable).values([embeddingValues]);\n }\n });\n\n return memoryId;\n }\n\n /**\n * Updates an existing memory in the database.\n * @param memory The memory object with updated content and optional embedding\n * @returns Promise resolving to boolean indicating success\n */\n async updateMemory(\n memory: Partial<Memory> & { id: UUID; metadata?: MemoryMetadata }\n ): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n await this.db.transaction(async (tx) => {\n // Update memory content if provided\n if (memory.content) {\n const contentToUpdate =\n typeof memory.content === \"string\"\n ? memory.content\n : JSON.stringify(memory.content ?? {});\n\n const metadataToUpdate =\n typeof memory.metadata === \"string\"\n ? memory.metadata\n : JSON.stringify(memory.metadata ?? {});\n\n await tx\n .update(memoryTable)\n .set({\n content: sql`${contentToUpdate}::jsonb`,\n ...(memory.metadata && {\n metadata: sql`${metadataToUpdate}::jsonb`,\n }),\n })\n .where(eq(memoryTable.id, memory.id));\n } else if (memory.metadata) {\n // Update only metadata if content is not provided\n const metadataToUpdate =\n typeof memory.metadata === \"string\"\n ? memory.metadata\n : JSON.stringify(memory.metadata ?? {});\n\n await tx\n .update(memoryTable)\n .set({\n metadata: sql`${metadataToUpdate}::jsonb`,\n })\n .where(eq(memoryTable.id, memory.id));\n }\n\n // Update embedding if provided\n if (memory.embedding && Array.isArray(memory.embedding)) {\n const cleanVector = memory.embedding.map((n) =>\n Number.isFinite(n) ? Number(n.toFixed(6)) : 0\n );\n\n // Check if embedding exists\n const existingEmbedding = await tx\n .select({ id: embeddingTable.id })\n .from(embeddingTable)\n .where(eq(embeddingTable.memoryId, memory.id))\n .limit(1);\n\n if (existingEmbedding.length > 0) {\n // Update existing embedding\n const updateValues: Record<string, unknown> = {};\n updateValues[this.embeddingDimension] = cleanVector;\n\n await tx\n .update(embeddingTable)\n .set(updateValues)\n .where(eq(embeddingTable.memoryId, memory.id));\n } else {\n // Create new embedding\n const embeddingValues: Record<string, unknown> = {\n id: v4(),\n memoryId: memory.id,\n };\n embeddingValues[this.embeddingDimension] = cleanVector;\n\n await tx.insert(embeddingTable).values([embeddingValues]);\n }\n }\n });\n\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n memoryId: memory.id,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to update memory\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously deletes a memory from the database based on the provided parameters.\n * @param {UUID} memoryId - The ID of the memory to delete.\n * @returns {Promise<void>} A Promise that resolves when the memory is deleted.\n */\n async deleteMemory(memoryId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.transaction(async (tx) => {\n // See if there are any fragments that we need to delete\n await this.deleteMemoryFragments(tx, memoryId);\n\n // Then delete the embedding for the main memory\n await tx.delete(embeddingTable).where(eq(embeddingTable.memoryId, memoryId));\n\n // Finally delete the memory itself\n await tx.delete(memoryTable).where(eq(memoryTable.id, memoryId));\n });\n });\n }\n\n /**\n * Asynchronously deletes multiple memories from the database in a single batch operation.\n * @param {UUID[]} memoryIds - An array of UUIDs of the memories to delete.\n * @returns {Promise<void>} A Promise that resolves when all memories are deleted.\n */\n async deleteManyMemories(memoryIds: UUID[]): Promise<void> {\n if (memoryIds.length === 0) {\n return;\n }\n\n return this.withDatabase(async () => {\n await this.db.transaction(async (tx) => {\n // Process in smaller batches to avoid query size limits\n const BATCH_SIZE = 100;\n for (let i = 0; i < memoryIds.length; i += BATCH_SIZE) {\n const batch = memoryIds.slice(i, i + BATCH_SIZE);\n\n // Delete any fragments for document memories in this batch\n await Promise.all(\n batch.map(async (memoryId) => {\n await this.deleteMemoryFragments(tx, memoryId);\n })\n );\n\n // Delete embeddings for the batch\n await tx.delete(embeddingTable).where(inArray(embeddingTable.memoryId, batch));\n\n // Delete the memories themselves\n await tx.delete(memoryTable).where(inArray(memoryTable.id, batch));\n }\n });\n });\n }\n\n /**\n * Deletes all memory fragments that reference a specific document memory\n * @param tx The database transaction\n * @param documentId The UUID of the document memory whose fragments should be deleted\n * @private\n */\n private async deleteMemoryFragments(tx: DrizzleDatabase, documentId: UUID): Promise<void> {\n const fragmentsToDelete = await this.getMemoryFragments(tx, documentId);\n\n if (fragmentsToDelete.length > 0) {\n const fragmentIds = fragmentsToDelete.map((f) => f.id) as UUID[];\n\n // Delete embeddings for fragments\n await tx.delete(embeddingTable).where(inArray(embeddingTable.memoryId, fragmentIds));\n\n // Delete the fragments\n await tx.delete(memoryTable).where(inArray(memoryTable.id, fragmentIds));\n }\n }\n\n /**\n * Retrieves all memory fragments that reference a specific document memory\n * @param tx The database transaction\n * @param documentId The UUID of the document memory whose fragments should be retrieved\n * @returns An array of memory fragments\n * @private\n */\n private async getMemoryFragments(tx: DrizzleDatabase, documentId: UUID): Promise<{ id: UUID }[]> {\n const fragments = await tx\n .select({ id: memoryTable.id })\n .from(memoryTable)\n .where(\n and(\n eq(memoryTable.agentId, this.agentId),\n sql`${memoryTable.metadata}->>'documentId' = ${documentId}`\n )\n );\n\n return fragments.map((f) => ({ id: f.id as UUID }));\n }\n\n /**\n * Asynchronously deletes all memories from the database based on the provided parameters.\n * @param {UUID} roomId - The ID of the room to delete memories from.\n * @param {string} tableName - The name of the table to delete memories from.\n * @returns {Promise<void>} A Promise that resolves when the memories are deleted.\n */\n async deleteAllMemories(roomId: UUID, tableName: string): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.transaction(async (tx) => {\n // 1) fetch all memory IDs for this room + table\n const rows = await tx\n .select({ id: memoryTable.id })\n .from(memoryTable)\n .where(and(eq(memoryTable.roomId, roomId), eq(memoryTable.type, tableName)));\n\n const ids = rows.map((r) => r.id);\n logger.debug(\n { src: \"plugin:sql\", roomId, tableName, memoryCount: ids.length },\n \"Deleting all memories\"\n );\n\n if (ids.length === 0) {\n return;\n }\n\n // 2) delete any fragments for \"document\" memories & their embeddings\n await Promise.all(\n ids.map(async (memoryId) => {\n await this.deleteMemoryFragments(tx, memoryId);\n await tx.delete(embeddingTable).where(eq(embeddingTable.memoryId, memoryId));\n })\n );\n\n // 3) delete the memories themselves\n await tx\n .delete(memoryTable)\n .where(and(eq(memoryTable.roomId, roomId), eq(memoryTable.type, tableName)));\n });\n });\n }\n\n /**\n * Asynchronously counts the number of memories in the database based on the provided parameters.\n * @param {UUID} roomId - The ID of the room to count memories in.\n * @param {boolean} [unique] - Whether to count unique memories only.\n * @param {string} [tableName] - The name of the table to count memories in.\n * @returns {Promise<number>} A Promise that resolves to the number of memories.\n */\n async countMemories(roomId: UUID, unique = true, tableName = \"\"): Promise<number> {\n if (!tableName) throw new Error(\"tableName is required\");\n\n return this.withDatabase(async () => {\n const conditions = [eq(memoryTable.roomId, roomId), eq(memoryTable.type, tableName)];\n\n if (unique) {\n conditions.push(eq(memoryTable.unique, true));\n }\n\n const result = await this.db\n .select({ count: sql<number>`count(*)` })\n .from(memoryTable)\n .where(and(...conditions));\n\n const result0 = result[0];\n return Number(result0?.count ?? 0);\n });\n }\n\n /**\n * Asynchronously retrieves rooms from the database based on the provided parameters.\n * @param {UUID[]} roomIds - The IDs of the rooms to retrieve.\n * @returns {Promise<Room[] | null>} A Promise that resolves to the rooms if found, null otherwise.\n */\n async getRoomsByIds(roomIds: UUID[]): Promise<Room[] | null> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({\n id: roomTable.id,\n name: roomTable.name, // Added name\n channelId: roomTable.channelId,\n agentId: roomTable.agentId,\n messageServerId: roomTable.messageServerId,\n worldId: roomTable.worldId,\n type: roomTable.type,\n source: roomTable.source,\n metadata: roomTable.metadata, // Added metadata\n })\n .from(roomTable)\n .where(and(inArray(roomTable.id, roomIds), eq(roomTable.agentId, this.agentId)));\n\n // Map the result to properly typed Room objects\n const rooms = result.map((room) => ({\n ...room,\n id: room.id as UUID,\n name: room.name ?? undefined,\n agentId: room.agentId as UUID,\n messageServerId: room.messageServerId as UUID,\n serverId: room.messageServerId as UUID, // Backward compatibility alias\n worldId: room.worldId as UUID,\n channelId: room.channelId as UUID,\n type: room.type as ChannelType,\n metadata: room.metadata as Metadata,\n }));\n\n return rooms;\n });\n }\n\n /**\n * Asynchronously retrieves all rooms from the database based on the provided parameters.\n * @param {UUID} worldId - The ID of the world to retrieve rooms from.\n * @returns {Promise<Room[]>} A Promise that resolves to an array of rooms.\n */\n async getRoomsByWorld(worldId: UUID): Promise<Room[]> {\n return this.withDatabase(async () => {\n const result = await this.db.select().from(roomTable).where(eq(roomTable.worldId, worldId));\n const rooms = result.map((room) => ({\n ...room,\n id: room.id as UUID,\n name: room.name ?? undefined,\n agentId: room.agentId as UUID,\n messageServerId: room.messageServerId as UUID,\n serverId: room.messageServerId as UUID, // Backward compatibility alias\n worldId: room.worldId as UUID,\n channelId: room.channelId as UUID,\n type: room.type as ChannelType,\n metadata: room.metadata as Metadata,\n }));\n return rooms;\n });\n }\n\n /**\n * Asynchronously updates a room in the database based on the provided parameters.\n * @param {Room} room - The room object to update.\n * @returns {Promise<void>} A Promise that resolves when the room is updated.\n */\n async updateRoom(room: Room): Promise<void> {\n return this.withDatabase(async () => {\n await this.db\n .update(roomTable)\n .set({ ...room, agentId: this.agentId })\n .where(eq(roomTable.id, room.id));\n });\n }\n\n /**\n * Asynchronously creates a new room in the database based on the provided parameters.\n * @param {Room} room - The room object to create.\n * @returns {Promise<UUID>} A Promise that resolves to the ID of the created room.\n */\n async createRooms(rooms: Room[]): Promise<UUID[]> {\n return this.withDatabase(async () => {\n const roomsWithIds = rooms.map((room) => ({\n ...room,\n agentId: this.agentId,\n id: room.id || v4(), // ensure each room has a unique ID\n }));\n\n const insertedRooms = await this.db\n .insert(roomTable)\n .values(roomsWithIds)\n .onConflictDoNothing()\n .returning();\n const insertedIds = insertedRooms.map((r) => r.id as UUID);\n return insertedIds;\n });\n }\n\n /**\n * Asynchronously deletes a room from the database based on the provided parameters.\n * @param {UUID} roomId - The ID of the room to delete.\n * @returns {Promise<void>} A Promise that resolves when the room is deleted.\n */\n async deleteRoom(roomId: UUID): Promise<void> {\n if (!roomId) throw new Error(\"Room ID is required\");\n return this.withDatabase(async () => {\n await this.db.transaction(async (tx) => {\n await tx.delete(roomTable).where(eq(roomTable.id, roomId));\n });\n });\n }\n\n /**\n * Asynchronously retrieves all rooms for a participant from the database based on the provided parameters.\n * @param {UUID} entityId - The ID of the entity to retrieve rooms for.\n * @returns {Promise<UUID[]>} A Promise that resolves to an array of room IDs.\n */\n async getRoomsForParticipant(entityId: UUID): Promise<UUID[]> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({ roomId: participantTable.roomId })\n .from(participantTable)\n .innerJoin(roomTable, eq(participantTable.roomId, roomTable.id))\n .where(and(eq(participantTable.entityId, entityId), eq(roomTable.agentId, this.agentId)));\n\n return result.map((row) => row.roomId as UUID);\n });\n }\n\n /**\n * Asynchronously retrieves all rooms for a list of participants from the database based on the provided parameters.\n * @param {UUID[]} entityIds - The IDs of the entities to retrieve rooms for.\n * @returns {Promise<UUID[]>} A Promise that resolves to an array of room IDs.\n */\n async getRoomsForParticipants(entityIds: UUID[]): Promise<UUID[]> {\n return this.withDatabase(async () => {\n const result = await this.db\n .selectDistinct({ roomId: participantTable.roomId })\n .from(participantTable)\n .innerJoin(roomTable, eq(participantTable.roomId, roomTable.id))\n .where(\n and(inArray(participantTable.entityId, entityIds), eq(roomTable.agentId, this.agentId))\n );\n\n return result.map((row) => row.roomId as UUID);\n });\n }\n\n /**\n * Asynchronously adds a participant to a room in the database based on the provided parameters.\n * @param {UUID} entityId - The ID of the entity to add to the room.\n * @param {UUID} roomId - The ID of the room to add the entity to.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating whether the participant was added successfully.\n */\n async addParticipant(entityId: UUID, roomId: UUID): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n await this.db\n .insert(participantTable)\n .values({\n entityId,\n roomId,\n agentId: this.agentId,\n })\n .onConflictDoNothing();\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n entityId,\n roomId,\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to add participant to room\"\n );\n return false;\n }\n });\n }\n\n async addParticipantsRoom(entityIds: UUID[], roomId: UUID): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n const values = entityIds.map((id) => ({\n entityId: id,\n roomId,\n agentId: this.agentId,\n }));\n await this.db.insert(participantTable).values(values).onConflictDoNothing().execute();\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n roomId,\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to add participants to room\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously removes a participant from a room in the database based on the provided parameters.\n * @param {UUID} entityId - The ID of the entity to remove from the room.\n * @param {UUID} roomId - The ID of the room to remove the entity from.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating whether the participant was removed successfully.\n */\n async removeParticipant(entityId: UUID, roomId: UUID): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n const result = await this.db.transaction(async (tx) => {\n return await tx\n .delete(participantTable)\n .where(\n and(eq(participantTable.entityId, entityId), eq(participantTable.roomId, roomId))\n )\n .returning();\n });\n\n const removed = result.length > 0;\n return removed;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n entityId,\n roomId,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to remove participant from room\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously retrieves all participants for an entity from the database based on the provided parameters.\n * @param {UUID} entityId - The ID of the entity to retrieve participants for.\n * @returns {Promise<Participant[]>} A Promise that resolves to an array of participants.\n */\n async getParticipantsForEntity(entityId: UUID): Promise<Participant[]> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({\n id: participantTable.id,\n entityId: participantTable.entityId,\n roomId: participantTable.roomId,\n })\n .from(participantTable)\n .where(eq(participantTable.entityId, entityId));\n\n const entities = await this.getEntitiesByIds([entityId]);\n\n if (!entities || !entities.length) {\n return [];\n }\n\n return result.map((row) => ({\n id: row.id as UUID,\n entity: entities[0],\n }));\n });\n }\n\n /**\n * Asynchronously retrieves all participants for a room from the database based on the provided parameters.\n * @param {UUID} roomId - The ID of the room to retrieve participants for.\n * @returns {Promise<UUID[]>} A Promise that resolves to an array of entity IDs.\n */\n async getParticipantsForRoom(roomId: UUID): Promise<UUID[]> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({ entityId: participantTable.entityId })\n .from(participantTable)\n .where(eq(participantTable.roomId, roomId));\n\n return result.map((row) => row.entityId as UUID);\n });\n }\n\n /**\n * Check if an entity is a participant in a specific room/channel.\n * More efficient than getParticipantsForRoom when only checking membership.\n * @param {UUID} roomId - The ID of the room to check.\n * @param {UUID} entityId - The ID of the entity to check.\n * @returns {Promise<boolean>} A Promise that resolves to true if entity is a participant.\n */\n async isRoomParticipant(roomId: UUID, entityId: UUID): Promise<boolean> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select()\n .from(participantTable)\n .where(and(eq(participantTable.roomId, roomId), eq(participantTable.entityId, entityId)))\n .limit(1);\n\n return result.length > 0;\n });\n }\n\n /**\n * Asynchronously retrieves the user state for a participant in a room from the database based on the provided parameters.\n * @param {UUID} roomId - The ID of the room to retrieve the participant's user state for.\n * @param {UUID} entityId - The ID of the entity to retrieve the user state for.\n * @returns {Promise<\"FOLLOWED\" | \"MUTED\" | null>} A Promise that resolves to the participant's user state.\n */\n async getParticipantUserState(\n roomId: UUID,\n entityId: UUID\n ): Promise<\"FOLLOWED\" | \"MUTED\" | null> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select({ roomState: participantTable.roomState })\n .from(participantTable)\n .where(\n and(\n eq(participantTable.roomId, roomId),\n eq(participantTable.entityId, entityId),\n eq(participantTable.agentId, this.agentId)\n )\n )\n .limit(1);\n\n const result0 = result[0];\n return (result0?.roomState as \"FOLLOWED\" | \"MUTED\" | null) ?? null;\n });\n }\n\n /**\n * Asynchronously sets the user state for a participant in a room in the database based on the provided parameters.\n * @param {UUID} roomId - The ID of the room to set the participant's user state for.\n * @param {UUID} entityId - The ID of the entity to set the user state for.\n * @param {string} state - The state to set the participant's user state to.\n * @returns {Promise<void>} A Promise that resolves when the participant's user state is set.\n */\n async setParticipantUserState(\n roomId: UUID,\n entityId: UUID,\n state: \"FOLLOWED\" | \"MUTED\" | null\n ): Promise<void> {\n return this.withDatabase(async () => {\n try {\n await this.db.transaction(async (tx) => {\n await tx\n .update(participantTable)\n .set({ roomState: state })\n .where(\n and(\n eq(participantTable.roomId, roomId),\n eq(participantTable.entityId, entityId),\n eq(participantTable.agentId, this.agentId)\n )\n );\n });\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n roomId,\n entityId,\n state,\n error: error instanceof Error ? error.message : String(error),\n },\n \"Failed to set participant follow state\"\n );\n throw error;\n }\n });\n }\n\n /**\n * Asynchronously creates a new relationship in the database based on the provided parameters.\n * @param {Object} params - The parameters for creating a new relationship.\n * @param {UUID} params.sourceEntityId - The ID of the source entity.\n * @param {UUID} params.targetEntityId - The ID of the target entity.\n * @param {string[]} [params.tags] - The tags for the relationship.\n * @param {Object} [params.metadata] - The metadata for the relationship.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating whether the relationship was created successfully.\n */\n async createRelationship(params: {\n sourceEntityId: UUID;\n targetEntityId: UUID;\n tags?: string[];\n metadata?: { [key: string]: unknown };\n }): Promise<boolean> {\n return this.withDatabase(async () => {\n const id = v4();\n const saveParams = {\n id,\n sourceEntityId: params.sourceEntityId,\n targetEntityId: params.targetEntityId,\n agentId: this.agentId,\n tags: params.tags || [],\n metadata: params.metadata || {},\n };\n try {\n await this.db.insert(relationshipTable).values(saveParams);\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n saveParams,\n },\n \"Error creating relationship\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously updates an existing relationship in the database based on the provided parameters.\n * @param {Relationship} relationship - The relationship object to update.\n * @returns {Promise<void>} A Promise that resolves when the relationship is updated.\n */\n async updateRelationship(relationship: Relationship): Promise<void> {\n return this.withDatabase(async () => {\n try {\n await this.db\n .update(relationshipTable)\n .set({\n tags: relationship.tags || [],\n metadata: relationship.metadata || {},\n })\n .where(eq(relationshipTable.id, relationship.id));\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n relationshipId: relationship.id,\n },\n \"Error updating relationship\"\n );\n throw error;\n }\n });\n }\n\n /**\n * Asynchronously retrieves a relationship from the database based on the provided parameters.\n * @param {Object} params - The parameters for retrieving a relationship.\n * @param {UUID} params.sourceEntityId - The ID of the source entity.\n * @param {UUID} params.targetEntityId - The ID of the target entity.\n * @returns {Promise<Relationship | null>} A Promise that resolves to the relationship if found, null otherwise.\n */\n async getRelationship(params: {\n sourceEntityId: UUID;\n targetEntityId: UUID;\n }): Promise<Relationship | null> {\n return this.withDatabase(async () => {\n const { sourceEntityId, targetEntityId } = params;\n const result = await this.db\n .select()\n .from(relationshipTable)\n .where(\n and(\n eq(relationshipTable.sourceEntityId, sourceEntityId),\n eq(relationshipTable.targetEntityId, targetEntityId)\n )\n );\n if (result.length === 0) return null;\n const relationship = result[0];\n return {\n ...relationship,\n id: relationship.id as UUID,\n sourceEntityId: relationship.sourceEntityId as UUID,\n targetEntityId: relationship.targetEntityId as UUID,\n agentId: relationship.agentId as UUID,\n tags: (relationship.tags ?? []) as string[],\n metadata: (relationship.metadata ?? {}) as Metadata,\n createdAt: relationship.createdAt.toISOString(),\n };\n });\n }\n\n /**\n * Asynchronously retrieves relationships from the database based on the provided parameters.\n * @param {Object} params - The parameters for retrieving relationships.\n * @param {UUID} params.entityId - The ID of the entity to retrieve relationships for.\n * @param {string[]} [params.tags] - The tags to filter relationships by.\n * @returns {Promise<Relationship[]>} A Promise that resolves to an array of relationships.\n */\n async getRelationships(params: { entityId: UUID; tags?: string[] }): Promise<Relationship[]> {\n return this.withDatabase(async () => {\n const { entityId, tags } = params;\n\n let query: SQL;\n\n if (tags && tags.length > 0) {\n query = sql`\n SELECT * FROM ${relationshipTable}\n WHERE (${relationshipTable.sourceEntityId} = ${entityId} OR ${relationshipTable.targetEntityId} = ${entityId})\n AND ${relationshipTable.tags} && CAST(ARRAY[${sql.join(tags, sql`, `)}] AS text[])\n `;\n } else {\n query = sql`\n SELECT * FROM ${relationshipTable}\n WHERE ${relationshipTable.sourceEntityId} = ${entityId} OR ${relationshipTable.targetEntityId} = ${entityId}\n `;\n }\n\n const result = await this.db.execute(query);\n\n return result.rows.map((relationship: Record<string, unknown>) => ({\n ...relationship,\n id: relationship.id as UUID,\n sourceEntityId: (relationship.source_entity_id || relationship.sourceEntityId) as UUID,\n targetEntityId: (relationship.target_entity_id || relationship.targetEntityId) as UUID,\n agentId: (relationship.agent_id || relationship.agentId) as UUID,\n tags: (relationship.tags ?? []) as string[],\n metadata: (relationship.metadata ?? {}) as Metadata,\n createdAt:\n relationship.created_at || relationship.createdAt\n ? (relationship.created_at || relationship.createdAt) instanceof Date\n ? ((relationship.created_at || relationship.createdAt) as Date).toISOString()\n : new Date(\n (relationship.created_at as string) || (relationship.createdAt as string)\n ).toISOString()\n : new Date().toISOString(),\n }));\n });\n }\n\n /**\n * Asynchronously retrieves a cache value from the database based on the provided key.\n * @param {string} key - The key to retrieve the cache value for.\n * @returns {Promise<T | undefined>} A Promise that resolves to the cache value if found, undefined otherwise.\n */\n async getCache<T>(key: string): Promise<T | undefined> {\n return this.withDatabase(async () => {\n try {\n const result = await this.db\n .select({ value: cacheTable.value })\n .from(cacheTable)\n .where(and(eq(cacheTable.agentId, this.agentId), eq(cacheTable.key, key)))\n .limit(1);\n\n if (result && result.length > 0 && result[0]) {\n return result[0].value as T | undefined;\n }\n\n return undefined;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n key,\n },\n \"Error fetching cache\"\n );\n return undefined;\n }\n });\n }\n\n /**\n * Asynchronously sets a cache value in the database based on the provided key and value.\n * @param {string} key - The key to set the cache value for.\n * @param {T} value - The value to set in the cache.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating whether the cache value was set successfully.\n */\n async setCache<T>(key: string, value: T): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n await this.db\n .insert(cacheTable)\n .values({\n key: key,\n agentId: this.agentId,\n value: value,\n })\n .onConflictDoUpdate({\n target: [cacheTable.key, cacheTable.agentId],\n set: {\n value: value,\n },\n });\n\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n key,\n },\n \"Error setting cache\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously deletes a cache value from the database based on the provided key.\n * @param {string} key - The key to delete the cache value for.\n * @returns {Promise<boolean>} A Promise that resolves to a boolean indicating whether the cache value was deleted successfully.\n */\n async deleteCache(key: string): Promise<boolean> {\n return this.withDatabase(async () => {\n try {\n await this.db.transaction(async (tx) => {\n await tx\n .delete(cacheTable)\n .where(and(eq(cacheTable.agentId, this.agentId), eq(cacheTable.key, key)));\n });\n return true;\n } catch (error) {\n logger.error(\n {\n src: \"plugin:sql\",\n agentId: this.agentId,\n error: error instanceof Error ? error.message : String(error),\n key,\n },\n \"Error deleting cache\"\n );\n return false;\n }\n });\n }\n\n /**\n * Asynchronously creates a new world in the database based on the provided parameters.\n * @param {World} world - The world object to create.\n * @returns {Promise<UUID>} A Promise that resolves to the ID of the created world.\n */\n async createWorld(world: World): Promise<UUID> {\n return this.withDatabase(async () => {\n const newWorldId = world.id || (v4() as UUID);\n await this.db.insert(worldTable).values({\n ...world,\n id: newWorldId,\n name: world.name || \"\",\n });\n return newWorldId;\n });\n }\n\n /**\n * Asynchronously retrieves a world from the database based on the provided parameters.\n * @param {UUID} id - The ID of the world to retrieve.\n * @returns {Promise<World | null>} A Promise that resolves to the world if found, null otherwise.\n */\n async getWorld(id: UUID): Promise<World | null> {\n return this.withDatabase(async () => {\n const result = await this.db.select().from(worldTable).where(eq(worldTable.id, id));\n return result.length > 0 ? (result[0] as World) : null;\n });\n }\n\n /**\n * Asynchronously retrieves all worlds from the database based on the provided parameters.\n * @returns {Promise<World[]>} A Promise that resolves to an array of worlds.\n */\n async getAllWorlds(): Promise<World[]> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select()\n .from(worldTable)\n .where(eq(worldTable.agentId, this.agentId));\n return result as World[];\n });\n }\n\n /**\n * Asynchronously updates an existing world in the database based on the provided parameters.\n * @param {World} world - The world object to update.\n * @returns {Promise<void>} A Promise that resolves when the world is updated.\n */\n async updateWorld(world: World): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.update(worldTable).set(world).where(eq(worldTable.id, world.id));\n });\n }\n\n /**\n * Asynchronously removes a world from the database based on the provided parameters.\n * @param {UUID} id - The ID of the world to remove.\n * @returns {Promise<void>} A Promise that resolves when the world is removed.\n */\n async removeWorld(id: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.delete(worldTable).where(eq(worldTable.id, id));\n });\n }\n\n /**\n * Asynchronously creates a new task in the database based on the provided parameters.\n * @param {Task} task - The task object to create.\n * @returns {Promise<UUID>} A Promise that resolves to the ID of the created task.\n */\n async createTask(task: Task): Promise<UUID> {\n // Default worldId to agentId for agent-internal tasks\n if (!task.worldId) {\n task = { ...task, worldId: this.agentId as UUID };\n }\n return this.withRetry(async () => {\n return this.withDatabase(async () => {\n const now = new Date();\n const metadata = task.metadata || {};\n\n const values = {\n id: task.id as UUID,\n name: task.name,\n description: task.description,\n roomId: task.roomId as UUID,\n worldId: task.worldId as UUID,\n tags: task.tags,\n metadata: metadata,\n createdAt: now,\n updatedAt: now,\n agentId: this.agentId as UUID,\n };\n\n const result = await this.db.insert(taskTable).values(values).returning();\n\n return result[0].id as UUID;\n });\n });\n }\n\n /**\n * Asynchronously retrieves tasks based on specified parameters.\n * @param params Object containing optional roomId, tags, and entityId to filter tasks\n * @returns Promise resolving to an array of Task objects\n */\n async getTasks(params: {\n roomId?: UUID;\n tags?: string[];\n entityId?: UUID; // Added entityId parameter\n }): Promise<Task[]> {\n return this.withRetry(async () => {\n return this.withDatabase(async () => {\n const result = await this.db\n .select()\n .from(taskTable)\n .where(\n and(\n eq(taskTable.agentId, this.agentId),\n ...(params.roomId ? [eq(taskTable.roomId, params.roomId)] : []),\n ...(params.tags && params.tags.length > 0\n ? [\n sql`${taskTable.tags} @> ARRAY[${sql.join(\n params.tags.map((t) => sql`${t}`),\n sql`, `\n )}]::text[]`,\n ]\n : [])\n )\n );\n\n return result.map((row) => ({\n id: row.id as UUID,\n name: row.name,\n description: row.description ?? \"\",\n roomId: row.roomId as UUID,\n worldId: row.worldId as UUID,\n tags: row.tags || [],\n metadata: row.metadata as TaskMetadata,\n }));\n });\n });\n }\n\n /**\n * Asynchronously retrieves a specific task by its name.\n * @param name The name of the task to retrieve\n * @returns Promise resolving to the Task object if found, null otherwise\n */\n async getTasksByName(name: string): Promise<Task[]> {\n return this.withRetry(async () => {\n return this.withDatabase(async () => {\n const result = await this.db\n .select()\n .from(taskTable)\n .where(and(eq(taskTable.name, name), eq(taskTable.agentId, this.agentId)));\n\n return result.map((row) => ({\n id: row.id as UUID,\n name: row.name,\n description: row.description ?? \"\",\n roomId: row.roomId as UUID,\n worldId: row.worldId as UUID,\n tags: row.tags || [],\n metadata: (row.metadata || {}) as TaskMetadata,\n }));\n });\n });\n }\n\n /**\n * Asynchronously retrieves a specific task by its ID.\n * @param id The UUID of the task to retrieve\n * @returns Promise resolving to the Task object if found, null otherwise\n */\n async getTask(id: UUID): Promise<Task | null> {\n return this.withRetry(async () => {\n return this.withDatabase(async () => {\n const result = await this.db\n .select()\n .from(taskTable)\n .where(and(eq(taskTable.id, id), eq(taskTable.agentId, this.agentId)))\n .limit(1);\n\n if (result.length === 0) {\n return null;\n }\n\n const row = result[0];\n return {\n id: row.id as UUID,\n name: row.name,\n description: row.description ?? \"\",\n roomId: row.roomId as UUID,\n worldId: row.worldId as UUID,\n tags: row.tags || [],\n metadata: (row.metadata || {}) as TaskMetadata,\n };\n });\n });\n }\n\n /**\n * Asynchronously updates an existing task in the database.\n * @param id The UUID of the task to update\n * @param task Partial Task object containing the fields to update\n * @returns Promise resolving when the update is complete\n */\n async updateTask(id: UUID, task: Partial<Task>): Promise<void> {\n await this.withRetry(async () => {\n await this.withDatabase(async () => {\n const updateValues: Partial<typeof taskTable.$inferInsert> = {};\n\n // Add fields to update if they exist in the partial task object\n if (task.name !== undefined) updateValues.name = task.name;\n if (task.description !== undefined) updateValues.description = task.description;\n if (task.roomId !== undefined) updateValues.roomId = task.roomId;\n if (task.worldId !== undefined) updateValues.worldId = task.worldId;\n if (task.tags !== undefined) updateValues.tags = task.tags;\n if (task.metadata !== undefined)\n updateValues.metadata = task.metadata as typeof taskTable.$inferInsert.metadata;\n // Handle createdAt if present in the task object (using type assertion for compatibility)\n const taskWithCreatedAt = task as { createdAt?: number | bigint | null };\n if (taskWithCreatedAt.createdAt !== undefined && taskWithCreatedAt.createdAt !== null) {\n const createdAtValue = taskWithCreatedAt.createdAt;\n updateValues.createdAt = new Date(\n typeof createdAtValue === \"bigint\" ? Number(createdAtValue) : createdAtValue\n );\n }\n\n // Always update the updatedAt timestamp as a Date (schema uses Date, not number)\n const dbUpdateValues: Partial<typeof taskTable.$inferInsert> = {\n ...updateValues,\n updatedAt: new Date(),\n };\n\n // Handle metadata updates - just set it directly without merging\n if (task.metadata !== undefined) {\n dbUpdateValues.metadata = task.metadata;\n }\n\n await this.db\n .update(taskTable)\n // createdAt is hella borked, number / Date\n .set(dbUpdateValues)\n .where(and(eq(taskTable.id, id), eq(taskTable.agentId, this.agentId)));\n });\n });\n }\n\n /**\n * Asynchronously deletes a task from the database.\n * @param id The UUID of the task to delete\n * @returns Promise resolving when the deletion is complete\n */\n async deleteTask(id: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.delete(taskTable).where(eq(taskTable.id, id));\n });\n }\n\n async getMemoriesByWorldId(params: {\n worldId: UUID;\n count?: number;\n tableName?: string;\n }): Promise<Memory[]> {\n return this.withDatabase(async () => {\n // First, get all rooms for the given worldId\n const rooms = await this.db\n .select({ id: roomTable.id })\n .from(roomTable)\n .where(and(eq(roomTable.worldId, params.worldId), eq(roomTable.agentId, this.agentId)));\n\n if (rooms.length === 0) {\n return [];\n }\n\n const roomIds = rooms.map((room) => room.id as UUID);\n\n const memories = await this.getMemoriesByRoomIds({\n roomIds,\n tableName: params.tableName || \"messages\",\n limit: params.count,\n });\n\n return memories;\n });\n }\n\n async deleteRoomsByWorldId(worldId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n const rooms = await this.db\n .select({ id: roomTable.id })\n .from(roomTable)\n .where(and(eq(roomTable.worldId, worldId), eq(roomTable.agentId, this.agentId)));\n\n if (rooms.length === 0) {\n return;\n }\n\n const roomIds = rooms.map((room) => room.id as UUID);\n\n if (roomIds.length > 0) {\n await this.db.delete(logTable).where(inArray(logTable.roomId, roomIds));\n await this.db.delete(participantTable).where(inArray(participantTable.roomId, roomIds));\n\n const memoriesInRooms = await this.db\n .select({ id: memoryTable.id })\n .from(memoryTable)\n .where(inArray(memoryTable.roomId, roomIds));\n const memoryIdsInRooms = memoriesInRooms.map((m) => m.id as UUID);\n\n if (memoryIdsInRooms.length > 0) {\n await this.db\n .delete(embeddingTable)\n .where(inArray(embeddingTable.memoryId, memoryIdsInRooms));\n await this.db.delete(memoryTable).where(inArray(memoryTable.id, memoryIdsInRooms));\n }\n\n await this.db.delete(roomTable).where(inArray(roomTable.id, roomIds));\n\n logger.debug(\n {\n src: \"plugin:sql\",\n worldId,\n roomsDeleted: roomIds.length,\n memoriesDeleted: memoryIdsInRooms.length,\n },\n \"World cleanup completed\"\n );\n }\n });\n }\n\n // Message Server Database Operations\n\n /**\n * Creates a new message server in the central database\n */\n async createMessageServer(data: {\n id?: UUID; // Allow passing a specific ID\n name: string;\n sourceType: string;\n sourceId?: string;\n metadata?: Metadata;\n }): Promise<{\n id: UUID;\n name: string;\n sourceType: string;\n sourceId?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n }> {\n return this.withDatabase(async () => {\n const newId = data.id || (v4() as UUID);\n const now = new Date();\n const serverToInsert = {\n id: newId,\n name: data.name,\n sourceType: data.sourceType,\n sourceId: data.sourceId,\n metadata: data.metadata,\n createdAt: now,\n updatedAt: now,\n };\n\n await this.db.insert(messageServerTable).values(serverToInsert).onConflictDoNothing(); // In case the ID already exists\n\n // If server already existed, fetch it\n if (data.id) {\n const existing = await this.db\n .select()\n .from(messageServerTable)\n .where(eq(messageServerTable.id, data.id))\n .limit(1);\n if (existing.length > 0) {\n return {\n id: existing[0].id as UUID,\n name: existing[0].name,\n sourceType: existing[0].sourceType,\n sourceId: existing[0].sourceId || undefined,\n metadata: (existing[0].metadata || undefined) as Metadata | undefined,\n createdAt: existing[0].createdAt,\n updatedAt: existing[0].updatedAt,\n };\n }\n }\n\n return serverToInsert;\n });\n }\n\n /**\n * Gets all message servers\n */\n async getMessageServers(): Promise<\n Array<{\n id: UUID;\n name: string;\n sourceType: string;\n sourceId?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n }>\n > {\n const result = await this.withDatabase(async () => {\n const results = await this.db.select().from(messageServerTable);\n return results.map((r) => ({\n id: r.id as UUID,\n name: r.name,\n sourceType: r.sourceType,\n sourceId: r.sourceId || undefined,\n metadata: (r.metadata || undefined) as Metadata | undefined,\n createdAt: r.createdAt,\n updatedAt: r.updatedAt,\n }));\n });\n // Guard against null return\n return result || [];\n }\n\n /**\n * Gets a message server by ID\n */\n async getMessageServerById(serverId: UUID): Promise<{\n id: UUID;\n name: string;\n sourceType: string;\n sourceId?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n return this.withDatabase(async () => {\n const results = await this.db\n .select()\n .from(messageServerTable)\n .where(eq(messageServerTable.id, serverId))\n .limit(1);\n return results.length > 0\n ? {\n id: results[0].id as UUID,\n name: results[0].name,\n sourceType: results[0].sourceType,\n sourceId: results[0].sourceId || undefined,\n metadata: (results[0].metadata || undefined) as Metadata | undefined,\n createdAt: results[0].createdAt,\n updatedAt: results[0].updatedAt,\n }\n : null;\n });\n }\n\n /**\n * Gets a message server by RLS server_id.\n * The server_id column is added dynamically when RLS is enabled.\n */\n async getMessageServerByRlsServerId(rlsServerId: UUID): Promise<{\n id: UUID;\n name: string;\n sourceType: string;\n sourceId?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n return this.withDatabase(async () => {\n // Use raw SQL since server_id column is dynamically added by RLS and not in Drizzle schema\n const results = await this.db.execute(sql`\n SELECT id, name, source_type, source_id, metadata, created_at, updated_at\n FROM message_servers\n WHERE server_id = ${rlsServerId}\n LIMIT 1\n `);\n\n const rows = results.rows || results;\n return (rows as Record<string, unknown>[]).length > 0\n ? {\n id: (rows as Record<string, unknown>[])[0].id as UUID,\n name: (rows as Record<string, unknown>[])[0].name as string,\n sourceType: (rows as Record<string, unknown>[])[0].source_type as string,\n sourceId: ((rows as Record<string, unknown>[])[0].source_id || undefined) as\n | string\n | undefined,\n metadata: ((rows as Record<string, unknown>[])[0].metadata || undefined) as\n | Metadata\n | undefined,\n createdAt: new Date((rows as Record<string, unknown>[])[0].created_at as string),\n updatedAt: new Date((rows as Record<string, unknown>[])[0].updated_at as string),\n }\n : null;\n });\n }\n\n /**\n * Creates a new channel\n */\n async createChannel(\n data: {\n id?: UUID; // Allow passing a specific ID\n messageServerId: UUID;\n name: string;\n type: string;\n sourceType?: string;\n sourceId?: string;\n topic?: string;\n metadata?: Metadata;\n },\n participantIds?: UUID[]\n ): Promise<{\n id: UUID;\n messageServerId: UUID;\n name: string;\n type: string;\n sourceType?: string;\n sourceId?: string;\n topic?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n }> {\n return this.withDatabase(async () => {\n const newId = data.id || (v4() as UUID);\n const now = new Date();\n const channelToInsert = {\n id: newId,\n messageServerId: data.messageServerId,\n name: data.name,\n type: data.type,\n sourceType: data.sourceType,\n sourceId: data.sourceId,\n topic: data.topic,\n metadata: data.metadata,\n createdAt: now,\n updatedAt: now,\n };\n\n await this.db.transaction(async (tx) => {\n await tx.insert(channelTable).values(channelToInsert);\n\n if (participantIds && participantIds.length > 0) {\n const participantValues = participantIds.map((entityId) => ({\n channelId: newId,\n entityId: entityId,\n }));\n await tx.insert(channelParticipantsTable).values(participantValues).onConflictDoNothing();\n }\n });\n\n return channelToInsert;\n });\n }\n\n /**\n * Gets channels for a message server\n */\n async getChannelsForMessageServer(messageServerId: UUID): Promise<\n Array<{\n id: UUID;\n messageServerId: UUID;\n name: string;\n type: string;\n sourceType?: string;\n sourceId?: string;\n topic?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n }>\n > {\n return this.withDatabase(async () => {\n const results = await this.db\n .select()\n .from(channelTable)\n .where(eq(channelTable.messageServerId, messageServerId));\n return results.map((r) => ({\n id: r.id as UUID,\n messageServerId: r.messageServerId as UUID,\n name: r.name,\n type: r.type,\n sourceType: r.sourceType || undefined,\n sourceId: r.sourceId || undefined,\n topic: r.topic || undefined,\n metadata: (r.metadata || undefined) as Metadata | undefined,\n createdAt: r.createdAt,\n updatedAt: r.updatedAt,\n }));\n });\n }\n\n /**\n * Gets channel details\n */\n async getChannelDetails(channelId: UUID): Promise<{\n id: UUID;\n messageServerId: UUID;\n name: string;\n type: string;\n sourceType?: string;\n sourceId?: string;\n topic?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n return this.withDatabase(async () => {\n const results = await this.db\n .select()\n .from(channelTable)\n .where(eq(channelTable.id, channelId))\n .limit(1);\n return results.length > 0\n ? {\n id: results[0].id as UUID,\n messageServerId: results[0].messageServerId as UUID,\n name: results[0].name,\n type: results[0].type,\n sourceType: results[0].sourceType || undefined,\n sourceId: results[0].sourceId || undefined,\n topic: results[0].topic || undefined,\n metadata: (results[0].metadata || undefined) as Metadata | undefined,\n createdAt: results[0].createdAt,\n updatedAt: results[0].updatedAt,\n }\n : null;\n });\n }\n\n /**\n * Creates a message\n */\n async createMessage(data: {\n channelId: UUID;\n authorId: UUID;\n content: string;\n rawMessage?: Record<string, unknown>;\n sourceType?: string;\n sourceId?: string;\n metadata?: Metadata;\n inReplyToRootMessageId?: UUID;\n messageId?: UUID;\n }): Promise<{\n id: UUID;\n channelId: UUID;\n authorId: UUID;\n content: string;\n rawMessage?: Record<string, unknown>;\n sourceType?: string;\n sourceId?: string;\n metadata?: Metadata;\n inReplyToRootMessageId?: UUID;\n createdAt: Date;\n updatedAt: Date;\n }> {\n return this.withDatabase(async () => {\n const newId = data.messageId || (v4() as UUID);\n const now = new Date();\n const messageToInsert = {\n id: newId,\n channelId: data.channelId,\n authorId: data.authorId,\n content: data.content,\n rawMessage: data.rawMessage,\n sourceType: data.sourceType,\n sourceId: data.sourceId,\n metadata: data.metadata,\n inReplyToRootMessageId: data.inReplyToRootMessageId,\n createdAt: now,\n updatedAt: now,\n };\n\n await this.db.insert(messageTable).values(messageToInsert);\n return messageToInsert;\n });\n }\n\n async getMessageById(id: UUID): Promise<{\n id: UUID;\n channelId: UUID;\n authorId: UUID;\n content: string;\n rawMessage?: Record<string, unknown>;\n sourceType?: string;\n sourceId?: string;\n metadata?: Metadata;\n inReplyToRootMessageId?: UUID;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n return this.withDatabase(async () => {\n const rows = await this.db\n .select()\n .from(messageTable)\n .where(eq(messageTable.id, id))\n .limit(1);\n if (!rows || rows.length === 0) return null;\n const row = rows[0];\n return {\n id: row.id as UUID,\n channelId: row.channelId as UUID,\n authorId: row.authorId as UUID,\n content: row.content,\n rawMessage: row.rawMessage || undefined,\n sourceType: row.sourceType || undefined,\n sourceId: row.sourceId || undefined,\n metadata: (row.metadata || undefined) as Metadata | undefined,\n inReplyToRootMessageId: (row.inReplyToRootMessageId || undefined) as UUID | undefined,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n });\n }\n\n async updateMessage(\n id: UUID,\n patch: {\n content?: string;\n rawMessage?: Record<string, unknown>;\n sourceType?: string;\n sourceId?: string;\n metadata?: Metadata;\n inReplyToRootMessageId?: UUID;\n }\n ): Promise<{\n id: UUID;\n channelId: UUID;\n authorId: UUID;\n content: string;\n rawMessage?: Record<string, unknown>;\n sourceType?: string;\n sourceId?: string;\n metadata?: Metadata;\n inReplyToRootMessageId?: UUID;\n createdAt: Date;\n updatedAt: Date;\n } | null> {\n return this.withDatabase(async () => {\n const existing = await this.getMessageById(id);\n if (!existing) return null;\n\n const updatedAt = new Date();\n const next = {\n content: patch.content ?? existing.content,\n rawMessage: patch.rawMessage ?? existing.rawMessage,\n sourceType: patch.sourceType ?? existing.sourceType,\n sourceId: patch.sourceId ?? existing.sourceId,\n metadata: patch.metadata ?? existing.metadata,\n inReplyToRootMessageId: patch.inReplyToRootMessageId ?? existing.inReplyToRootMessageId,\n updatedAt,\n };\n\n await this.db.update(messageTable).set(next).where(eq(messageTable.id, id));\n\n // Return merged object\n return {\n ...existing,\n ...next,\n };\n });\n }\n\n /**\n * Gets messages for a channel\n */\n async getMessagesForChannel(\n channelId: UUID,\n limit: number = 50,\n beforeTimestamp?: Date\n ): Promise<\n Array<{\n id: UUID;\n channelId: UUID;\n authorId: UUID;\n content: string;\n rawMessage?: Record<string, unknown>;\n sourceType?: string;\n sourceId?: string;\n metadata?: Metadata;\n inReplyToRootMessageId?: UUID;\n createdAt: Date;\n updatedAt: Date;\n }>\n > {\n return this.withDatabase(async () => {\n const conditions = [eq(messageTable.channelId, channelId)];\n if (beforeTimestamp) {\n conditions.push(lt(messageTable.createdAt, beforeTimestamp));\n }\n\n const query = this.db\n .select()\n .from(messageTable)\n .where(and(...conditions))\n .orderBy(desc(messageTable.createdAt))\n .limit(limit);\n\n const results = await query;\n return results.map((r) => ({\n id: r.id as UUID,\n channelId: r.channelId as UUID,\n authorId: r.authorId as UUID,\n content: r.content,\n rawMessage: r.rawMessage || undefined,\n sourceType: r.sourceType || undefined,\n sourceId: r.sourceId || undefined,\n metadata: r.metadata || undefined,\n inReplyToRootMessageId: r.inReplyToRootMessageId as UUID | undefined,\n createdAt: r.createdAt,\n updatedAt: r.updatedAt,\n }));\n });\n }\n\n /**\n * Deletes a message\n */\n async deleteMessage(messageId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.delete(messageTable).where(eq(messageTable.id, messageId));\n });\n }\n\n /**\n * Updates a channel\n */\n async updateChannel(\n channelId: UUID,\n updates: {\n name?: string;\n participantCentralUserIds?: UUID[];\n metadata?: Metadata;\n }\n ): Promise<{\n id: UUID;\n messageServerId: UUID;\n name: string;\n type: string;\n sourceType?: string;\n sourceId?: string;\n topic?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n }> {\n return this.withDatabase(async () => {\n const now = new Date();\n\n await this.db.transaction(async (tx) => {\n // Update channel details\n const updateData: Record<string, unknown> = { updatedAt: now };\n if (updates.name !== undefined) updateData.name = updates.name;\n if (updates.metadata !== undefined) updateData.metadata = updates.metadata;\n\n await tx.update(channelTable).set(updateData).where(eq(channelTable.id, channelId));\n\n // Update participants if provided\n if (updates.participantCentralUserIds !== undefined) {\n // Remove existing participants\n await tx\n .delete(channelParticipantsTable)\n .where(eq(channelParticipantsTable.channelId, channelId));\n\n // Add new participants\n if (updates.participantCentralUserIds.length > 0) {\n const participantValues = updates.participantCentralUserIds.map((entityId) => ({\n channelId: channelId,\n entityId: entityId,\n }));\n await tx\n .insert(channelParticipantsTable)\n .values(participantValues)\n .onConflictDoNothing();\n }\n }\n });\n\n // Return updated channel details\n const updatedChannel = await this.getChannelDetails(channelId);\n if (!updatedChannel) {\n throw new Error(`Channel ${channelId} not found after update`);\n }\n return updatedChannel;\n });\n }\n\n /**\n * Deletes a channel and all its associated data\n */\n async deleteChannel(channelId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.transaction(async (tx) => {\n // Delete all messages in the channel (cascade delete will handle this, but explicit is better)\n await tx.delete(messageTable).where(eq(messageTable.channelId, channelId));\n\n // Delete all participants (cascade delete will handle this, but explicit is better)\n await tx\n .delete(channelParticipantsTable)\n .where(eq(channelParticipantsTable.channelId, channelId));\n\n // Delete the channel itself\n await tx.delete(channelTable).where(eq(channelTable.id, channelId));\n });\n });\n }\n\n /**\n * Adds participants to a channel\n */\n async addChannelParticipants(channelId: UUID, entityIds: UUID[]): Promise<void> {\n return this.withDatabase(async () => {\n if (!entityIds || entityIds.length === 0) return;\n\n const participantValues = entityIds.map((entityId) => ({\n channelId: channelId,\n entityId: entityId,\n }));\n\n await this.db\n .insert(channelParticipantsTable)\n .values(participantValues)\n .onConflictDoNothing();\n });\n }\n\n /**\n * Gets participants for a channel\n */\n async getChannelParticipants(channelId: UUID): Promise<UUID[]> {\n return this.withDatabase(async () => {\n const results = await this.db\n .select({ entityId: channelParticipantsTable.entityId })\n .from(channelParticipantsTable)\n .where(eq(channelParticipantsTable.channelId, channelId));\n\n return results.map((r) => r.entityId as UUID);\n });\n }\n\n /**\n * Check if an entity is a participant in a specific messaging channel.\n * @param {UUID} channelId - The ID of the channel to check.\n * @param {UUID} entityId - The ID of the entity to check.\n * @returns {Promise<boolean>} A Promise that resolves to true if entity is a participant.\n */\n async isChannelParticipant(channelId: UUID, entityId: UUID): Promise<boolean> {\n return this.withDatabase(async () => {\n const result = await this.db\n .select()\n .from(channelParticipantsTable)\n .where(\n and(\n eq(channelParticipantsTable.channelId, channelId),\n eq(channelParticipantsTable.entityId, entityId)\n )\n )\n .limit(1);\n\n return result.length > 0;\n });\n }\n\n /**\n * Adds an agent to a message server (Discord/Telegram server)\n */\n async addAgentToMessageServer(messageServerId: UUID, agentId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db\n .insert(messageServerAgentsTable)\n .values({\n messageServerId,\n agentId,\n })\n .onConflictDoNothing();\n });\n }\n\n /**\n * Gets agents for a message server (Discord/Telegram server)\n */\n async getAgentsForMessageServer(messageServerId: UUID): Promise<UUID[]> {\n return this.withDatabase(async () => {\n const results = await this.db\n .select({ agentId: messageServerAgentsTable.agentId })\n .from(messageServerAgentsTable)\n .where(eq(messageServerAgentsTable.messageServerId, messageServerId));\n\n return results.map((r) => r.agentId as UUID);\n });\n }\n\n /**\n * Removes an agent from a message server (Discord/Telegram server)\n */\n async removeAgentFromMessageServer(messageServerId: UUID, agentId: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db\n .delete(messageServerAgentsTable)\n .where(\n and(\n eq(messageServerAgentsTable.messageServerId, messageServerId),\n eq(messageServerAgentsTable.agentId, agentId)\n )\n );\n });\n }\n\n /**\n * Finds or creates a DM channel between two users\n */\n async findOrCreateDmChannel(\n user1Id: UUID,\n user2Id: UUID,\n messageServerId: UUID\n ): Promise<{\n id: UUID;\n messageServerId: UUID;\n name: string;\n type: string;\n sourceType?: string;\n sourceId?: string;\n topic?: string;\n metadata?: Metadata;\n createdAt: Date;\n updatedAt: Date;\n }> {\n return this.withDatabase(async () => {\n const ids = [user1Id, user2Id].sort();\n const dmChannelName = `DM-${ids[0]}-${ids[1]}`;\n\n const existingChannels = await this.db\n .select()\n .from(channelTable)\n .where(\n and(\n eq(channelTable.type, ChannelType.DM),\n eq(channelTable.name, dmChannelName),\n eq(channelTable.messageServerId, messageServerId)\n )\n )\n .limit(1);\n\n if (existingChannels.length > 0) {\n return {\n id: existingChannels[0].id as UUID,\n messageServerId: existingChannels[0].messageServerId as UUID,\n name: existingChannels[0].name,\n type: existingChannels[0].type,\n sourceType: existingChannels[0].sourceType || undefined,\n sourceId: existingChannels[0].sourceId || undefined,\n topic: existingChannels[0].topic || undefined,\n metadata: (existingChannels[0].metadata || undefined) as Metadata | undefined,\n createdAt: existingChannels[0].createdAt,\n updatedAt: existingChannels[0].updatedAt,\n };\n }\n\n // Create new DM channel\n return this.createChannel(\n {\n messageServerId,\n name: dmChannelName,\n type: ChannelType.DM,\n metadata: { user1: ids[0], user2: ids[1] },\n },\n ids\n );\n });\n }\n\n // ===============================\n // Pairing Methods\n // ===============================\n\n /**\n * Get all pending pairing requests for a channel and agent.\n */\n async getPairingRequests(channel: PairingChannel, agentId: UUID): Promise<PairingRequest[]> {\n return this.withDatabase(async () => {\n const results = await this.db\n .select()\n .from(pairingRequestTable)\n .where(\n and(eq(pairingRequestTable.channel, channel), eq(pairingRequestTable.agentId, agentId))\n )\n .orderBy(pairingRequestTable.createdAt);\n\n return results.map((row) => ({\n id: row.id as UUID,\n channel: row.channel as PairingChannel,\n senderId: row.senderId,\n code: row.code,\n createdAt: row.createdAt,\n lastSeenAt: row.lastSeenAt,\n metadata: (row.metadata as Record<string, string>) || undefined,\n agentId: row.agentId as UUID,\n }));\n });\n }\n\n /**\n * Create a new pairing request.\n */\n async createPairingRequest(request: PairingRequest): Promise<UUID> {\n return this.withDatabase(async () => {\n const id = request.id || (v4() as UUID);\n await this.db.insert(pairingRequestTable).values({\n id,\n channel: request.channel,\n senderId: request.senderId,\n code: request.code,\n createdAt: request.createdAt,\n lastSeenAt: request.lastSeenAt,\n metadata: request.metadata || {},\n agentId: request.agentId,\n });\n return id;\n });\n }\n\n /**\n * Update an existing pairing request.\n */\n async updatePairingRequest(request: PairingRequest): Promise<void> {\n return this.withDatabase(async () => {\n await this.db\n .update(pairingRequestTable)\n .set({\n lastSeenAt: request.lastSeenAt,\n metadata: request.metadata || {},\n })\n .where(eq(pairingRequestTable.id, request.id));\n });\n }\n\n /**\n * Delete a pairing request by ID.\n */\n async deletePairingRequest(id: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.delete(pairingRequestTable).where(eq(pairingRequestTable.id, id));\n });\n }\n\n /**\n * Get the allowlist for a channel and agent.\n */\n async getPairingAllowlist(\n channel: PairingChannel,\n agentId: UUID\n ): Promise<PairingAllowlistEntry[]> {\n return this.withDatabase(async () => {\n const results = await this.db\n .select()\n .from(pairingAllowlistTable)\n .where(\n and(\n eq(pairingAllowlistTable.channel, channel),\n eq(pairingAllowlistTable.agentId, agentId)\n )\n )\n .orderBy(pairingAllowlistTable.createdAt);\n\n return results.map((row) => ({\n id: row.id as UUID,\n channel: row.channel as PairingChannel,\n senderId: row.senderId,\n createdAt: row.createdAt,\n metadata: (row.metadata as Record<string, string>) || undefined,\n agentId: row.agentId as UUID,\n }));\n });\n }\n\n /**\n * Create a new allowlist entry.\n */\n async createPairingAllowlistEntry(entry: PairingAllowlistEntry): Promise<UUID> {\n return this.withDatabase(async () => {\n const id = entry.id || (v4() as UUID);\n await this.db\n .insert(pairingAllowlistTable)\n .values({\n id,\n channel: entry.channel,\n senderId: entry.senderId,\n createdAt: entry.createdAt,\n metadata: entry.metadata || {},\n agentId: entry.agentId,\n })\n .onConflictDoNothing();\n return id;\n });\n }\n\n /**\n * Delete an allowlist entry by ID.\n */\n async deletePairingAllowlistEntry(id: UUID): Promise<void> {\n return this.withDatabase(async () => {\n await this.db.delete(pairingAllowlistTable).where(eq(pairingAllowlistTable.id, id));\n });\n }\n}\n\n// Import tables at the end to avoid circular dependencies\n",
|
|
26
26
|
"import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n",
|
|
27
27
|
"let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n",
|
|
28
28
|
"const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"import { sql } from \"drizzle-orm\";\nimport {\n boolean,\n check,\n foreignKey,\n index,\n jsonb,\n pgTable,\n text,\n timestamp,\n uuid,\n} from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\n\n/**\n * Definition of the memory table in the database.\n *\n * @param {string} tableName - The name of the table.\n * @param {object} columns - An object containing the column definitions.\n * @param {function} indexes - A function that defines the indexes for the table.\n * @returns {object} - The memory table object.\n */\nexport const memoryTable = pgTable(\n \"memories\",\n {\n id: uuid(\"id\").primaryKey().notNull(),\n type: text(\"type\").notNull(),\n createdAt: timestamp(\"created_at\").default(sql`now()`).notNull(),\n content: jsonb(\"content\").notNull(),\n entityId: uuid(\"entity_id\").references(() => entityTable.id, {\n onDelete: \"cascade\",\n }),\n agentId: uuid(\"agent_id\")\n .references(() => agentTable.id, {\n onDelete: \"cascade\",\n })\n .notNull(),\n roomId: uuid(\"room_id\").references(() => roomTable.id, {\n onDelete: \"cascade\",\n }),\n worldId: uuid(\"world_id\"),\n // .references(() => worldTable.id, {\n // onDelete: 'set null',\n // }),\n unique: boolean(\"unique\").default(true).notNull(),\n metadata: jsonb(\"metadata\").default({}).notNull(),\n },\n (table) => [\n index(\"idx_memories_type_room\").on(table.type, table.roomId),\n index(\"idx_memories_world_id\").on(table.worldId),\n foreignKey({\n name: \"fk_room\",\n columns: [table.roomId],\n foreignColumns: [roomTable.id],\n }).onDelete(\"cascade\"),\n foreignKey({\n name: \"fk_user\",\n columns: [table.entityId],\n foreignColumns: [entityTable.id],\n }).onDelete(\"cascade\"),\n foreignKey({\n name: \"fk_agent\",\n columns: [table.agentId],\n foreignColumns: [agentTable.id],\n }).onDelete(\"cascade\"),\n // foreignKey({\n // name: 'fk_world',\n // columns: [table.worldId],\n // foreignColumns: [worldTable.id],\n // }).onDelete('set null'),\n index(\"idx_memories_metadata_type\").on(sql`((metadata->>'type'))`),\n index(\"idx_memories_document_id\").on(sql`((metadata->>'documentId'))`),\n index(\"idx_fragments_order\").on(\n sql`((metadata->>'documentId'))`,\n sql`((metadata->>'position'))`\n ),\n check(\n \"fragment_metadata_check\",\n sql`\n CASE \n WHEN metadata->>'type' = 'fragment' THEN\n metadata ? 'documentId' AND \n metadata ? 'position'\n ELSE true\n END\n `\n ),\n check(\n \"document_metadata_check\",\n sql`\n CASE \n WHEN metadata->>'type' = 'document' THEN\n metadata ? 'timestamp'\n ELSE true\n END\n `\n ),\n ]\n);\n\n// Relations are defined in embedding.ts to avoid circular dependency\n",
|
|
32
32
|
"import type { Metadata } from \"@elizaos/core\";\nimport { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, timestamp, unique, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\n\n/**\n * Represents an entity table in the database.\n * Includes columns for id, agentId, createdAt, names, and metadata.\n */\nexport const entityTable = pgTable(\n \"entities\",\n {\n id: uuid(\"id\").notNull().primaryKey(),\n agentId: uuid(\"agent_id\")\n .notNull()\n .references(() => agentTable.id, {\n onDelete: \"cascade\",\n }),\n createdAt: timestamp(\"created_at\").default(sql`now()`).notNull(),\n names: text(\"names\").array().default(sql`'{}'::text[]`).notNull(),\n metadata: jsonb(\"metadata\").$type<Metadata>().default(sql`'{}'::jsonb`).notNull(),\n },\n (table) => {\n return {\n idAgentIdUnique: unique(\"id_agent_id_unique\").on(table.id, table.agentId),\n };\n }\n);\n",
|
|
33
33
|
"import type { Metadata } from \"@elizaos/core\";\nimport { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, timestamp, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\n\n/**\n * Defines a table schema for 'rooms' in the database.\n *\n * @typedef {object} RoomTable\n * @property {string} id - The unique identifier for the room.\n * @property {string} agentId - The UUID of the agent associated with the room.\n * @property {string} source - The source of the room.\n * @property {string} type - The type of the room.\n * @property {string} messageServerId - The message server ID of the room.\n * @property {string} worldId - The UUID of the world associated with the room.\n * @property {string} name - The name of the room.\n * @property {object} metadata - Additional metadata for the room in JSON format.\n * @property {string} channelId - The channel ID of the room.\n * @property {number} createdAt - The timestamp of when the room was created.\n */\nexport const roomTable = pgTable(\"rooms\", {\n id: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n agentId: uuid(\"agent_id\").references(() => agentTable.id, {\n onDelete: \"cascade\",\n }),\n source: text(\"source\").notNull(),\n type: text(\"type\").notNull(),\n messageServerId: uuid(\"message_server_id\"),\n worldId: uuid(\"world_id\"), // no guarantee that world exists, it is optional for now\n // .references(() => worldTable.id, {\n // onDelete: 'cascade',\n // }),\n name: text(\"name\"),\n metadata: jsonb(\"metadata\").$type<Metadata>(),\n channelId: text(\"channel_id\"),\n createdAt: timestamp(\"created_at\").default(sql`now()`).notNull(),\n});\n",
|
|
34
|
-
"export { agentTable } from \"./agent\";\nexport { cacheTable } from \"./cache\";\nexport { channelTable } from \"./channel\";\nexport { channelParticipantsTable } from \"./channelParticipant\";\nexport { componentTable } from \"./component\";\nexport { embeddingTable } from \"./embedding\";\nexport { entityTable } from \"./entity\";\nexport { logTable } from \"./log\";\nexport { memoryTable } from \"./memory\";\nexport { messageTable } from \"./message\";\nexport { messageServerTable } from \"./messageServer\";\nexport { messageServerAgentsTable } from \"./messageServerAgent\";\nexport { participantTable } from \"./participant\";\nexport { relationshipTable } from \"./relationship\";\nexport { roomTable } from \"./room\";\nexport { serverTable } from \"./server\";\nexport { taskTable } from \"./tasks\";\nexport { worldTable } from \"./world\";\n",
|
|
34
|
+
"export { agentTable } from \"./agent\";\nexport { cacheTable } from \"./cache\";\nexport { channelTable } from \"./channel\";\nexport { channelParticipantsTable } from \"./channelParticipant\";\nexport { componentTable } from \"./component\";\nexport { embeddingTable } from \"./embedding\";\nexport { entityTable } from \"./entity\";\nexport { logTable } from \"./log\";\nexport { memoryTable } from \"./memory\";\nexport { messageTable } from \"./message\";\nexport { messageServerTable } from \"./messageServer\";\nexport { messageServerAgentsTable } from \"./messageServerAgent\";\nexport { pairingAllowlistTable } from \"./pairingAllowlist\";\nexport { pairingRequestTable } from \"./pairingRequest\";\nexport { participantTable } from \"./participant\";\nexport { relationshipTable } from \"./relationship\";\nexport { roomTable } from \"./room\";\nexport { serverTable } from \"./server\";\nexport { taskTable } from \"./tasks\";\nexport { worldTable } from \"./world\";\n",
|
|
35
35
|
"import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, primaryKey, text, timestamp, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\n\n/**\n * Represents a PostgreSQL table for caching data.\n *\n * @type {pgTable}\n */\nexport const cacheTable = pgTable(\n \"cache\",\n {\n key: text(\"key\").notNull(),\n agentId: uuid(\"agent_id\")\n .notNull()\n .references(() => agentTable.id, { onDelete: \"cascade\" }),\n value: jsonb(\"value\").notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).default(sql`now()`).notNull(),\n expiresAt: timestamp(\"expires_at\", { withTimezone: true }),\n },\n (table) => [primaryKey({ columns: [table.key, table.agentId] })]\n);\n",
|
|
36
36
|
"import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, timestamp, uuid } from \"drizzle-orm/pg-core\";\nimport { messageServerTable } from \"./messageServer\";\n\nexport const channelTable = pgTable(\"channels\", {\n id: text(\"id\").primaryKey(), // UUID stored as text\n messageServerId: uuid(\"message_server_id\")\n .notNull()\n .references(() => messageServerTable.id, { onDelete: \"cascade\" }),\n name: text(\"name\").notNull(),\n type: text(\"type\").notNull(), // Store ChannelType enum values as text\n sourceType: text(\"source_type\"),\n sourceId: text(\"source_id\"),\n topic: text(\"topic\"),\n metadata: jsonb(\"metadata\"),\n // server_id is added dynamically by RLS setup\n createdAt: timestamp(\"created_at\", { mode: \"date\" }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n updatedAt: timestamp(\"updated_at\", { mode: \"date\" }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n});\n",
|
|
37
37
|
"import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, timestamp, uuid } from \"drizzle-orm/pg-core\";\n\nexport const messageServerTable = pgTable(\"message_servers\", {\n id: uuid(\"id\").primaryKey(),\n name: text(\"name\").notNull(),\n sourceType: text(\"source_type\").notNull(),\n sourceId: text(\"source_id\"),\n metadata: jsonb(\"metadata\"),\n createdAt: timestamp(\"created_at\", { mode: \"date\" }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n updatedAt: timestamp(\"updated_at\", { mode: \"date\" }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n});\n",
|
|
@@ -41,12 +41,14 @@
|
|
|
41
41
|
"import { sql } from \"drizzle-orm\";\nimport { foreignKey, jsonb, pgTable, text, timestamp, uuid } from \"drizzle-orm/pg-core\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\n\n/**\n * Represents a PostgreSQL table for storing logs.\n *\n * @type {Table}\n */\n\nexport const logTable = pgTable(\n \"logs\",\n {\n id: uuid(\"id\").defaultRandom().notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).default(sql`now()`).notNull(),\n entityId: uuid(\"entity_id\")\n .notNull()\n .references(() => entityTable.id, { onDelete: \"cascade\" }),\n body: jsonb(\"body\").notNull(),\n type: text(\"type\").notNull(),\n roomId: uuid(\"room_id\")\n .notNull()\n .references(() => roomTable.id, { onDelete: \"cascade\" }),\n },\n (table) => [\n foreignKey({\n name: \"fk_room\",\n columns: [table.roomId],\n foreignColumns: [roomTable.id],\n }).onDelete(\"cascade\"),\n foreignKey({\n name: \"fk_user\",\n columns: [table.entityId],\n foreignColumns: [entityTable.id],\n }).onDelete(\"cascade\"),\n ]\n);\n",
|
|
42
42
|
"import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, timestamp } from \"drizzle-orm/pg-core\";\nimport { channelTable } from \"./channel\";\n\nexport const messageTable = pgTable(\"central_messages\", {\n id: text(\"id\").primaryKey(), // UUID stored as text\n channelId: text(\"channel_id\")\n .notNull()\n .references(() => channelTable.id, { onDelete: \"cascade\" }),\n authorId: text(\"author_id\").notNull(),\n content: text(\"content\").notNull(),\n rawMessage: jsonb(\"raw_message\"),\n inReplyToRootMessageId: text(\"in_reply_to_root_message_id\").references(() => messageTable.id, {\n onDelete: \"set null\",\n }),\n sourceType: text(\"source_type\"),\n sourceId: text(\"source_id\"),\n metadata: jsonb(\"metadata\"),\n createdAt: timestamp(\"created_at\", { mode: \"date\" }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n updatedAt: timestamp(\"updated_at\", { mode: \"date\" }).default(sql`CURRENT_TIMESTAMP`).notNull(),\n});\n",
|
|
43
43
|
"import { pgTable, primaryKey, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { messageServerTable } from \"./messageServer\";\n\nexport const messageServerAgentsTable = pgTable(\n \"message_server_agents\",\n {\n messageServerId: uuid(\"message_server_id\")\n .notNull()\n .references(() => messageServerTable.id, { onDelete: \"cascade\" }),\n agentId: uuid(\"agent_id\")\n .notNull()\n .references(() => agentTable.id, { onDelete: \"cascade\" }),\n },\n (table) => [primaryKey({ columns: [table.messageServerId, table.agentId] })]\n);\n",
|
|
44
|
+
"import { sql } from \"drizzle-orm\";\nimport { index, jsonb, pgTable, text, timestamp, uniqueIndex, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\n\n/**\n * Represents the allowlist of approved senders for each channel.\n * Senders in this list are permitted to send DMs to the bot.\n */\nexport const pairingAllowlistTable = pgTable(\n \"pairing_allowlist\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n /** The messaging channel (telegram, discord, whatsapp, etc.) */\n channel: text(\"channel\").notNull(),\n /** Approved sender identifier */\n senderId: text(\"sender_id\").notNull(),\n /** When the entry was added */\n createdAt: timestamp(\"created_at\", { withTimezone: true }).default(sql`now()`).notNull(),\n /** Optional metadata about the approved sender */\n metadata: jsonb(\"metadata\").default(sql`'{}'::jsonb`),\n /** Agent ID this allowlist belongs to */\n agentId: uuid(\"agent_id\")\n .notNull()\n .references(() => agentTable.id, { onDelete: \"cascade\" }),\n },\n (table) => [\n // Index for looking up allowlist by channel and agent\n index(\"pairing_allowlist_channel_agent_idx\").on(table.channel, table.agentId),\n // Unique constraint to prevent duplicate entries\n uniqueIndex(\"pairing_allowlist_sender_channel_agent_idx\").on(\n table.senderId,\n table.channel,\n table.agentId\n ),\n ]\n);\n",
|
|
45
|
+
"import { sql } from \"drizzle-orm\";\nimport { index, jsonb, pgTable, text, timestamp, uniqueIndex, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\n\n/**\n * Represents pending pairing requests from users trying to access the bot via DM.\n * Requests are stored temporarily until approved or expired.\n */\nexport const pairingRequestTable = pgTable(\n \"pairing_requests\",\n {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n /** The messaging channel (telegram, discord, whatsapp, etc.) */\n channel: text(\"channel\").notNull(),\n /** User identifier on the channel (userId, phoneNumber, etc.) */\n senderId: text(\"sender_id\").notNull(),\n /** Human-friendly pairing code */\n code: text(\"code\").notNull(),\n /** When the request was created */\n createdAt: timestamp(\"created_at\", { withTimezone: true }).default(sql`now()`).notNull(),\n /** When the request was last seen/updated */\n lastSeenAt: timestamp(\"last_seen_at\", { withTimezone: true }).default(sql`now()`).notNull(),\n /** Optional metadata about the requester */\n metadata: jsonb(\"metadata\").default(sql`'{}'::jsonb`),\n /** Agent ID that received this request */\n agentId: uuid(\"agent_id\")\n .notNull()\n .references(() => agentTable.id, { onDelete: \"cascade\" }),\n },\n (table) => [\n // Index for looking up requests by channel and agent\n index(\"pairing_requests_channel_agent_idx\").on(table.channel, table.agentId),\n // Unique constraint on code per channel/agent to prevent duplicates\n uniqueIndex(\"pairing_requests_code_channel_agent_idx\").on(\n table.code,\n table.channel,\n table.agentId\n ),\n // Unique constraint on sender per channel/agent (one request per user)\n uniqueIndex(\"pairing_requests_sender_channel_agent_idx\").on(\n table.senderId,\n table.channel,\n table.agentId\n ),\n ]\n);\n",
|
|
44
46
|
"import { sql } from \"drizzle-orm\";\nimport { foreignKey, index, pgTable, text, timestamp, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { entityTable } from \"./entity\";\nimport { roomTable } from \"./room\";\n\n/**\n * Defines the schema for the \"participants\" table in the database.\n *\n * @type {import('knex').TableBuilder}\n */\nexport const participantTable = pgTable(\n \"participants\",\n {\n id: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).default(sql`now()`).notNull(),\n entityId: uuid(\"entity_id\").references(() => entityTable.id, {\n onDelete: \"cascade\",\n }),\n roomId: uuid(\"room_id\").references(() => roomTable.id, {\n onDelete: \"cascade\",\n }),\n agentId: uuid(\"agent_id\").references(() => agentTable.id, {\n onDelete: \"cascade\",\n }),\n roomState: text(\"room_state\"),\n },\n (table) => [\n // unique(\"participants_user_room_agent_unique\").on(table.entityId, table.roomId, table.agentId),\n index(\"idx_participants_user\").on(table.entityId),\n index(\"idx_participants_room\").on(table.roomId),\n foreignKey({\n name: \"fk_room\",\n columns: [table.roomId],\n foreignColumns: [roomTable.id],\n }).onDelete(\"cascade\"),\n foreignKey({\n name: \"fk_user\",\n columns: [table.entityId],\n foreignColumns: [entityTable.id],\n }).onDelete(\"cascade\"),\n ]\n);\n",
|
|
45
47
|
"import { sql } from \"drizzle-orm\";\nimport {\n foreignKey,\n index,\n jsonb,\n pgTable,\n text,\n timestamp,\n unique,\n uuid,\n} from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\nimport { entityTable } from \"./entity\";\n\n/**\n * Defines the relationshipTable containing information about relationships between entities and agents.\n * @type {import('knex').TableBuilder}\n */\nexport const relationshipTable = pgTable(\n \"relationships\",\n {\n id: uuid(\"id\").notNull().primaryKey().default(sql`gen_random_uuid()`),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).default(sql`now()`).notNull(),\n sourceEntityId: uuid(\"source_entity_id\")\n .notNull()\n .references(() => entityTable.id, { onDelete: \"cascade\" }),\n targetEntityId: uuid(\"target_entity_id\")\n .notNull()\n .references(() => entityTable.id, { onDelete: \"cascade\" }),\n agentId: uuid(\"agent_id\")\n .notNull()\n .references(() => agentTable.id, { onDelete: \"cascade\" }),\n tags: text(\"tags\").array(),\n metadata: jsonb(\"metadata\"),\n },\n (table) => [\n index(\"idx_relationships_users\").on(table.sourceEntityId, table.targetEntityId),\n unique(\"unique_relationship\").on(table.sourceEntityId, table.targetEntityId, table.agentId),\n foreignKey({\n name: \"fk_user_a\",\n columns: [table.sourceEntityId],\n foreignColumns: [entityTable.id],\n }).onDelete(\"cascade\"),\n foreignKey({\n name: \"fk_user_b\",\n columns: [table.targetEntityId],\n foreignColumns: [entityTable.id],\n }).onDelete(\"cascade\"),\n ]\n);\n",
|
|
46
48
|
"import { sql } from \"drizzle-orm\";\nimport { jsonb, pgTable, text, timestamp, uuid } from \"drizzle-orm/pg-core\";\nimport { agentTable } from \"./agent\";\n\n/**\n * Represents a table schema for tasks in the database.\n *\n * @type {PgTable}\n */\nexport const taskTable = pgTable(\"tasks\", {\n id: uuid(\"id\").primaryKey().defaultRandom(),\n name: text(\"name\").notNull(),\n description: text(\"description\"),\n roomId: uuid(\"room_id\"),\n worldId: uuid(\"world_id\"),\n entityId: uuid(\"entity_id\"),\n agentId: uuid(\"agent_id\")\n .notNull()\n .references(() => agentTable.id, { onDelete: \"cascade\" }),\n tags: text(\"tags\").array().default(sql`'{}'::text[]`),\n metadata: jsonb(\"metadata\").default(sql`'{}'::jsonb`),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).defaultNow(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true }).defaultNow(),\n});\n",
|
|
47
|
-
"import { PGlite, type PGliteOptions } from \"@electric-sql/pglite\";\nimport { fuzzystrmatch } from \"@electric-sql/pglite/contrib/fuzzystrmatch\";\nimport { vector } from \"@electric-sql/pglite/vector\";\nimport type { IDatabaseClientManager } from \"../types\";\n\nexport class PGliteClientManager implements IDatabaseClientManager<PGlite> {\n private client: PGlite;\n private shuttingDown = false;\n\n constructor(options: PGliteOptions) {\n this.client =
|
|
49
|
+
"import { existsSync, mkdirSync, renameSync } from \"node:fs\";\nimport { PGlite, type PGliteOptions } from \"@electric-sql/pglite\";\nimport { fuzzystrmatch } from \"@electric-sql/pglite/contrib/fuzzystrmatch\";\nimport { vector } from \"@electric-sql/pglite/vector\";\nimport { logger } from \"@elizaos/core\";\nimport type { IDatabaseClientManager } from \"../types\";\n\nexport class PGliteClientManager implements IDatabaseClientManager<PGlite> {\n private client: PGlite;\n private options: PGliteOptions;\n private shuttingDown = false;\n private initialized = false;\n private initializePromise: Promise<void> | null = null;\n\n constructor(options: PGliteOptions) {\n this.options = options;\n this.client = this.createClient(options);\n this.setupShutdownHandlers();\n }\n\n public getConnection(): PGlite {\n return this.client;\n }\n\n public isShuttingDown(): boolean {\n return this.shuttingDown;\n }\n\n public async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n if (!this.initializePromise) {\n this.initializePromise = this.initializeInternal().finally(() => {\n this.initializePromise = null;\n });\n }\n\n await this.initializePromise;\n }\n\n public async close(): Promise<void> {\n this.shuttingDown = true;\n if (this.client) {\n try {\n await this.client.close();\n } catch {}\n }\n }\n\n private setupShutdownHandlers() {}\n\n private createClient(options: PGliteOptions): PGlite {\n return new PGlite({\n ...options,\n extensions: {\n ...(options.extensions ?? {}),\n vector,\n fuzzystrmatch,\n },\n });\n }\n\n private getDataDir(): string | null {\n const optionsWithDataDir = this.options as PGliteOptions & {\n dataDir?: unknown;\n dataPath?: unknown;\n };\n\n const dataDir = optionsWithDataDir.dataDir ?? optionsWithDataDir.dataPath;\n return typeof dataDir === \"string\" ? dataDir : null;\n }\n\n private isFileBackedDataDir(dataDir: string | null): dataDir is string {\n if (!dataDir) {\n return false;\n }\n\n if (dataDir.includes(\"://\")) {\n return false;\n }\n\n if (dataDir === \":memory:\") {\n return false;\n }\n\n return true;\n }\n\n private getErrorText(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n }\n\n private async initializeInternal(): Promise<void> {\n try {\n await this.client.query(\"CREATE SCHEMA IF NOT EXISTS migrations\");\n this.initialized = true;\n return;\n } catch (initialError) {\n const dataDir = this.getDataDir();\n if (!this.isFileBackedDataDir(dataDir)) {\n throw initialError;\n }\n\n const errorText = this.getErrorText(initialError);\n const backupDir = `${dataDir}.corrupt-${Date.now()}`;\n\n logger.error(\n {\n src: \"plugin:sql\",\n dataDir,\n backupDir,\n error: errorText,\n },\n \"PGlite initialization failed; attempting recovery with a clean data directory\"\n );\n\n try {\n await this.client.close();\n } catch {}\n\n if (existsSync(dataDir)) {\n renameSync(dataDir, backupDir);\n }\n mkdirSync(dataDir, { recursive: true });\n\n this.client = this.createClient(this.options);\n\n try {\n await this.client.query(\"CREATE SCHEMA IF NOT EXISTS migrations\");\n this.initialized = true;\n logger.warn(\n {\n src: \"plugin:sql\",\n dataDir,\n backupDir,\n },\n \"Recovered from corrupted PGlite database directory\"\n );\n } catch (recoveryError) {\n throw new Error(\n `PGlite recovery failed for ${dataDir}: ${this.getErrorText(recoveryError)}`\n );\n }\n }\n }\n}\n"
|
|
48
50
|
],
|
|
49
|
-
"mappings": "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",
|
|
50
|
-
"debugId": "
|
|
51
|
+
"mappings": "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",
|
|
52
|
+
"debugId": "BDBC19CE72BA2E5964756E2164756E21",
|
|
51
53
|
"names": []
|
|
52
54
|
}
|