@elizaos/test-utils 1.6.5 → 1.7.0
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/DatabaseTestRegistry.d.ts.map +1 -1
- package/dist/TestInfrastructure.d.ts +2 -2
- package/dist/TestInfrastructure.d.ts.map +1 -1
- package/dist/index.js +123 -42
- package/dist/index.js.map +11 -11
- package/dist/mocks/database.d.ts +4 -0
- package/dist/mocks/database.d.ts.map +1 -1
- package/dist/mocks/mockUtils.d.ts.map +1 -1
- package/dist/mocks/runtime.d.ts.map +1 -1
- package/dist/mocks/services.d.ts.map +1 -1
- package/dist/mocks/state.d.ts.map +1 -1
- package/dist/realRuntime.d.ts.map +1 -1
- package/dist/templates.d.ts.map +1 -1
- package/dist/testDatabase.d.ts.map +1 -1
- package/dist/testModels.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -2,24 +2,24 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/realRuntime.ts", "../../../node_modules/uuid/dist-node/stringify.js", "../../../node_modules/uuid/dist-node/rng.js", "../../../node_modules/uuid/dist-node/native.js", "../../../node_modules/uuid/dist-node/v4.js", "../src/testDatabase.ts", "../src/testModels.ts", "../src/templates.ts", "../src/mocks/mockUtils.ts", "../src/mocks/runtime.ts", "../src/mocks/memory.ts", "../src/mocks/state.ts", "../src/mocks/character.ts", "../src/factories.ts", "../src/mocks/database.ts", "../src/mocks/services.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"// Note: AgentRuntime is imported dynamically to avoid circular dependencies\nimport type { Character, IAgentRuntime, Memory, Plugin, UUID } from '@elizaos/core';\nimport { AgentRuntime, logger, stringToUuid } from '@elizaos/core';\nimport { v4 as uuidv4 } from 'uuid';\nimport { TestDatabaseManager } from './testDatabase';\nimport {\n TestModelProvider,\n createSpecializedModelProvider,\n createTestModelProvider,\n scenarios,\n} from './testModels';\n\nexport interface RuntimeConfig {\n character: Character;\n plugins: Array<Plugin | string>;\n databaseUrl?: string;\n apiKeys: Record<string, string>;\n modelProviders?: Record<string, any>;\n isolated?: boolean;\n}\n\nexport interface RealRuntimeTestResult {\n scenarioName: string;\n passed: boolean;\n errors: string[];\n executedActions: string[];\n createdMemories: number;\n responseTime: number;\n memoryUsage?: number;\n}\n\n/**\n * Runtime Test Harness - Creates actual AgentRuntime instances for testing\n * Uses the standard AgentRuntime without any mocks or proxies\n */\nexport class RuntimeTestHarness {\n private runtimes: Map<string, IAgentRuntime> = new Map();\n private databaseManager: TestDatabaseManager;\n private testId: string;\n\n constructor(testId?: string) {\n this.testId = testId || `test-${uuidv4().slice(0, 8)}`;\n this.databaseManager = new TestDatabaseManager();\n }\n\n /**\n * Creates an AgentRuntime instance for testing\n * This uses the standard AgentRuntime - it will actually execute all functionality\n */\n async createTestRuntime(config: RuntimeConfig): Promise<IAgentRuntime> {\n try {\n logger.info(`Creating real test runtime for ${this.testId}`);\n\n // Create isolated test database\n const databaseAdapter = await this.databaseManager.createIsolatedDatabase(\n `${this.testId}-${Date.now()}`\n );\n\n // Create real AgentRuntime with actual configuration\n // Dynamic import to avoid circular dependencies\n const runtime = new AgentRuntime({\n character: config.character,\n adapter: databaseAdapter,\n });\n\n // Register plugins - these are REAL plugins, not mocks\n for (const plugin of config.plugins) {\n if (typeof plugin === 'string') {\n // Load plugin by name\n const loadedPlugin = await this.loadPlugin(plugin);\n await runtime.registerPlugin(loadedPlugin);\n } else {\n // Direct plugin object\n await runtime.registerPlugin(plugin);\n }\n }\n\n // Initialize runtime - this executes real initialization logic\n await runtime.initialize();\n\n // Store for cleanup\n this.runtimes.set(runtime.agentId, runtime);\n\n logger.info(`Successfully created real runtime ${runtime.agentId}`);\n return runtime;\n } catch (error) {\n logger.error(\n `Failed to create test runtime: ${error instanceof Error ? error.message : String(error)}`\n );\n throw new Error(\n `Test runtime creation failed: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Loads a plugin by name from the ElizaOS ecosystem\n * Uses dynamic imports to avoid circular dependencies during build\n */\n private async loadPlugin(pluginName: string): Promise<Plugin> {\n try {\n // Dynamic plugin loading for testing\n logger.info(`Attempting to load plugin: ${pluginName}`);\n\n // Try to dynamically import the plugin\n let pluginModule;\n try {\n pluginModule = await import(pluginName);\n } catch (importError) {\n logger.warn(\n `Could not import ${pluginName}: ${importError instanceof Error ? importError.message : String(importError)}`\n );\n throw importError;\n }\n\n // Extract the default export (plugin definition)\n const plugin = pluginModule.default || pluginModule[Object.keys(pluginModule)[0]];\n\n if (!plugin || typeof plugin !== 'object') {\n throw new Error(`Invalid plugin export from ${pluginName}`);\n }\n\n logger.info(`Successfully loaded plugin: ${pluginName}`);\n return plugin as Plugin;\n } catch (error) {\n logger.error(\n `Failed to load plugin ${pluginName}: ${error instanceof Error ? error.message : String(error)}`\n );\n\n // Don't return a fake plugin - throw error to ensure tests use real plugins\n throw new Error(\n `Plugin ${pluginName} must be available for testing. Install it before running tests. Error: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Creates a test model provider that gives realistic responses\n */\n createRealisticModelProvider(\n scenarios?: Array<{\n prompt: RegExp;\n response: string;\n }>\n ): TestModelProvider {\n const defaultScenarios = [\n {\n prompt: /hello|hi|hey/i,\n response: 'Hello! How can I help you today?',\n },\n {\n prompt: /create.*todo|add.*task/i,\n response: \"I'll create that todo item for you right away.\",\n },\n {\n prompt: /search|find|look/i,\n response: 'Let me search for that information.',\n },\n {\n prompt: /analyze|review/i,\n response: \"I'll analyze this carefully and provide my assessment.\",\n },\n ];\n\n return createTestModelProvider(scenarios || defaultScenarios);\n }\n\n /**\n * Executes a real message processing test\n */\n async processTestMessage(\n runtime: IAgentRuntime,\n messageText: string,\n options: {\n roomId?: string;\n entityId?: string;\n expectedActions?: string[];\n timeoutMs?: number;\n } = {}\n ): Promise<RealRuntimeTestResult> {\n const startTime = Date.now();\n const roomId = options.roomId || stringToUuid(`test-room-${uuidv4()}`);\n const entityId = options.entityId || stringToUuid(`test-user-${uuidv4()}`);\n\n try {\n // Create real memory object\n const memory: Memory = {\n id: stringToUuid(`message-${uuidv4()}`),\n entityId: entityId as UUID,\n roomId: roomId as UUID,\n content: {\n text: messageText,\n source: 'test',\n },\n createdAt: Date.now(),\n };\n\n const _messageId = await runtime.createMemory(memory, 'messages');\n\n // Process message with real runtime - this executes actual logic\n const responses = await runtime.processActions(memory, [], undefined, undefined);\n\n const responseTime = Date.now() - startTime;\n\n // Validate results against expectations\n const result: RealRuntimeTestResult = {\n scenarioName: `Process: \"${messageText}\"`,\n passed: true,\n errors: [],\n executedActions: [],\n createdMemories: Array.isArray(responses) ? responses.length : 0,\n responseTime,\n };\n\n // Check if expected actions were executed\n if (options.expectedActions && options.expectedActions.length > 0) {\n const executedActions = await this.getExecutedActions(runtime, roomId);\n const missingActions = options.expectedActions.filter(\n (action) => !executedActions.includes(action)\n );\n\n if (missingActions.length > 0) {\n result.passed = false;\n result.errors.push(`Missing expected actions: ${missingActions.join(', ')}`);\n }\n\n result.executedActions = executedActions;\n }\n\n // Check timeout\n if (options.timeoutMs && responseTime > options.timeoutMs) {\n result.passed = false;\n result.errors.push(\n `Response time ${responseTime}ms exceeded timeout ${options.timeoutMs}ms`\n );\n }\n\n return result;\n } catch (error) {\n return {\n scenarioName: `Process: \"${messageText}\"`,\n passed: false,\n errors: [`Runtime error: ${error instanceof Error ? error.message : String(error)}`],\n executedActions: [],\n createdMemories: 0,\n responseTime: Date.now() - startTime,\n };\n }\n }\n\n /**\n * Gets actions that were actually executed (not mocked)\n */\n private async getExecutedActions(runtime: IAgentRuntime, roomId: string): Promise<string[]> {\n try {\n // Query real database for executed actions\n const memories = await runtime.getMemories({\n roomId: roomId as UUID,\n count: 10,\n tableName: 'messages',\n });\n\n const actions: string[] = [];\n for (const memory of memories) {\n if (memory.content.actions && Array.isArray(memory.content.actions)) {\n actions.push(...memory.content.actions);\n }\n }\n\n return [...new Set(actions)]; // Remove duplicates\n } catch (error) {\n logger.warn(\n `Could not retrieve executed actions: ${error instanceof Error ? error.message : String(error)}`\n );\n return [];\n }\n }\n\n /**\n * Validates that a runtime is actually functional\n */\n async validateRuntimeHealth(runtime: IAgentRuntime): Promise<{\n healthy: boolean;\n issues: string[];\n services: string[];\n plugins: string[];\n }> {\n const issues: string[] = [];\n const services: string[] = [];\n const plugins: string[] = [];\n\n try {\n // Check basic functionality\n if (!runtime.agentId) {\n issues.push('Runtime missing agentId');\n }\n\n if (!runtime.character) {\n issues.push('Runtime missing character');\n }\n\n // Check database connectivity\n try {\n const healthMemory: Memory = {\n id: stringToUuid('health-check-message'),\n entityId: stringToUuid('health-check-entity'),\n roomId: stringToUuid('health-check-room'),\n content: { text: 'Health check', source: 'test' },\n createdAt: Date.now(),\n };\n await runtime.createMemory(healthMemory, 'test');\n } catch (error) {\n issues.push(\n `Database not functional: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n // Check services\n try {\n const serviceMap = runtime.services || new Map();\n for (const [name, service] of serviceMap) {\n services.push(name);\n if (!service) {\n issues.push(`Service ${name} is null/undefined`);\n }\n }\n } catch (error) {\n issues.push(\n `Services not accessible: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n // Check plugins\n try {\n plugins.push(...(runtime.plugins?.map((p) => p.name) || []));\n } catch (error) {\n issues.push(\n `Plugins not accessible: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n return {\n healthy: issues.length === 0,\n issues,\n services,\n plugins,\n };\n } catch (error) {\n return {\n healthy: false,\n issues: [\n `Runtime health check failed: ${error instanceof Error ? error.message : String(error)}`,\n ],\n services,\n plugins,\n };\n }\n }\n\n /**\n * Cleanup all test resources\n */\n async cleanup(): Promise<void> {\n try {\n logger.info(`Cleaning up test harness ${this.testId}`);\n\n // Stop all runtimes\n for (const [runtimeId, runtime] of this.runtimes) {\n try {\n await runtime.stop();\n logger.debug(`Stopped runtime ${runtimeId}`);\n } catch (error) {\n logger.warn(\n `Error stopping runtime ${runtimeId}: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n // Clear runtime references\n this.runtimes.clear();\n\n // Cleanup databases\n await this.databaseManager.cleanup();\n\n logger.info(`Successfully cleaned up test harness ${this.testId}`);\n } catch (error) {\n logger.error(\n `Error during cleanup: ${error instanceof Error ? error.message : String(error)}`\n );\n throw error;\n }\n }\n}\n\n/**\n * Convenience function to create and configure a test runtime\n */\nexport async function createTestRuntime(config: Partial<RuntimeConfig> = {}): Promise<{\n runtime: IAgentRuntime;\n harness: RuntimeTestHarness;\n}> {\n const harness = new RuntimeTestHarness();\n\n const defaultCharacter: Character = {\n name: 'TestAgent',\n system: 'You are a helpful test agent.',\n bio: ['I am a test agent used for integration testing.'],\n messageExamples: [],\n postExamples: [],\n topics: ['testing'],\n knowledge: [],\n plugins: [],\n };\n\n const runtime = await harness.createTestRuntime({\n character: defaultCharacter,\n plugins: [],\n apiKeys: { OPENAI_API_KEY: 'test-key' },\n ...config,\n });\n\n return { runtime, harness };\n}\n\n/**\n * Helper to run a quick integration test\n */\nexport async function runIntegrationTest(\n testName: string,\n testFn: (runtime: IAgentRuntime) => Promise<void>,\n config?: Partial<RuntimeConfig>\n): Promise<RealRuntimeTestResult> {\n const startTime = Date.now();\n let harness: RuntimeTestHarness | undefined;\n\n try {\n const { runtime, harness: testHarness } = await createTestRuntime(config);\n harness = testHarness;\n\n await testFn(runtime);\n\n return {\n scenarioName: testName,\n passed: true,\n errors: [],\n executedActions: [],\n createdMemories: 0,\n responseTime: Date.now() - startTime,\n };\n } catch (error) {\n return {\n scenarioName: testName,\n passed: false,\n errors: [error instanceof Error ? error.message : String(error)],\n executedActions: [],\n createdMemories: 0,\n responseTime: Date.now() - startTime,\n };\n } finally {\n if (harness) {\n await harness.cleanup();\n }\n }\n}\n\n// Re-export helper functions from test-models\nexport { createSpecializedModelProvider, scenarios };\n",
|
|
5
|
+
"// Note: AgentRuntime is imported dynamically to avoid circular dependencies\nimport type { Character, IAgentRuntime, Memory, Plugin, UUID } from '@elizaos/core';\nimport { AgentRuntime, logger, stringToUuid } from '@elizaos/core';\nimport { v4 as uuidv4 } from 'uuid';\nimport { TestDatabaseManager } from './testDatabase';\nimport {\n TestModelProvider,\n createSpecializedModelProvider,\n createTestModelProvider,\n scenarios,\n} from './testModels';\n\nexport interface RuntimeConfig {\n character: Character;\n plugins: Array<Plugin | string>;\n databaseUrl?: string;\n apiKeys: Record<string, string>;\n modelProviders?: Record<string, any>;\n isolated?: boolean;\n}\n\nexport interface RealRuntimeTestResult {\n scenarioName: string;\n passed: boolean;\n errors: string[];\n executedActions: string[];\n createdMemories: number;\n responseTime: number;\n memoryUsage?: number;\n}\n\n/**\n * Runtime Test Harness - Creates actual AgentRuntime instances for testing\n * Uses the standard AgentRuntime without any mocks or proxies\n */\nexport class RuntimeTestHarness {\n private runtimes: Map<string, IAgentRuntime> = new Map();\n private databaseManager: TestDatabaseManager;\n private testId: string;\n\n constructor(testId?: string) {\n this.testId = testId || `test-${uuidv4().slice(0, 8)}`;\n this.databaseManager = new TestDatabaseManager();\n }\n\n /**\n * Creates an AgentRuntime instance for testing\n * This uses the standard AgentRuntime - it will actually execute all functionality\n */\n async createTestRuntime(config: RuntimeConfig): Promise<IAgentRuntime> {\n try {\n logger.info(\n { src: 'test-utils:real-runtime', testId: this.testId },\n `Creating real test runtime for ${this.testId}`\n );\n\n // Create isolated test database\n const databaseAdapter = await this.databaseManager.createIsolatedDatabase(\n `${this.testId}-${Date.now()}`\n );\n\n // Create real AgentRuntime with actual configuration\n // Dynamic import to avoid circular dependencies\n const runtime = new AgentRuntime({\n character: config.character,\n adapter: databaseAdapter,\n });\n\n // Register plugins - these are REAL plugins, not mocks\n for (const plugin of config.plugins) {\n if (typeof plugin === 'string') {\n // Load plugin by name\n const loadedPlugin = await this.loadPlugin(plugin);\n await runtime.registerPlugin(loadedPlugin);\n } else {\n // Direct plugin object\n await runtime.registerPlugin(plugin);\n }\n }\n\n // Initialize runtime - this executes real initialization logic\n await runtime.initialize();\n\n // Store for cleanup\n this.runtimes.set(runtime.agentId, runtime);\n\n logger.info(\n { src: 'test-utils:real-runtime', agentId: runtime.agentId },\n `Successfully created real runtime ${runtime.agentId}`\n );\n return runtime;\n } catch (error) {\n logger.error(\n {\n src: 'test-utils:real-runtime',\n error: error instanceof Error ? error.message : String(error),\n },\n `Failed to create test runtime: ${error instanceof Error ? error.message : String(error)}`\n );\n throw new Error(\n `Test runtime creation failed: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Loads a plugin by name from the ElizaOS ecosystem\n * Uses dynamic imports to avoid circular dependencies during build\n */\n private async loadPlugin(pluginName: string): Promise<Plugin> {\n try {\n // Dynamic plugin loading for testing\n logger.info(\n { src: 'test-utils:real-runtime', pluginName },\n `Attempting to load plugin: ${pluginName}`\n );\n\n // Try to dynamically import the plugin\n let pluginModule;\n try {\n pluginModule = await import(pluginName);\n } catch (importError) {\n logger.warn(\n {\n src: 'test-utils:real-runtime',\n pluginName,\n error: importError instanceof Error ? importError.message : String(importError),\n },\n `Could not import ${pluginName}: ${importError instanceof Error ? importError.message : String(importError)}`\n );\n throw importError;\n }\n\n // Extract the default export (plugin definition)\n const plugin = pluginModule.default || pluginModule[Object.keys(pluginModule)[0]];\n\n if (!plugin || typeof plugin !== 'object') {\n throw new Error(`Invalid plugin export from ${pluginName}`);\n }\n\n logger.info(\n { src: 'test-utils:real-runtime', pluginName },\n `Successfully loaded plugin: ${pluginName}`\n );\n return plugin as Plugin;\n } catch (error) {\n logger.error(\n {\n src: 'test-utils:real-runtime',\n pluginName,\n error: error instanceof Error ? error.message : String(error),\n },\n `Failed to load plugin ${pluginName}: ${error instanceof Error ? error.message : String(error)}`\n );\n\n // Don't return a fake plugin - throw error to ensure tests use real plugins\n throw new Error(\n `Plugin ${pluginName} must be available for testing. Install it before running tests. Error: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Creates a test model provider that gives realistic responses\n */\n createRealisticModelProvider(\n scenarios?: Array<{\n prompt: RegExp;\n response: string;\n }>\n ): TestModelProvider {\n const defaultScenarios = [\n {\n prompt: /hello|hi|hey/i,\n response: 'Hello! How can I help you today?',\n },\n {\n prompt: /create.*todo|add.*task/i,\n response: \"I'll create that todo item for you right away.\",\n },\n {\n prompt: /search|find|look/i,\n response: 'Let me search for that information.',\n },\n {\n prompt: /analyze|review/i,\n response: \"I'll analyze this carefully and provide my assessment.\",\n },\n ];\n\n return createTestModelProvider(scenarios || defaultScenarios);\n }\n\n /**\n * Executes a real message processing test\n */\n async processTestMessage(\n runtime: IAgentRuntime,\n messageText: string,\n options: {\n roomId?: string;\n entityId?: string;\n expectedActions?: string[];\n timeoutMs?: number;\n } = {}\n ): Promise<RealRuntimeTestResult> {\n const startTime = Date.now();\n const roomId = options.roomId || stringToUuid(`test-room-${uuidv4()}`);\n const entityId = options.entityId || stringToUuid(`test-user-${uuidv4()}`);\n\n try {\n // Create real memory object\n const memory: Memory = {\n id: stringToUuid(`message-${uuidv4()}`),\n entityId: entityId as UUID,\n roomId: roomId as UUID,\n content: {\n text: messageText,\n source: 'test',\n },\n createdAt: Date.now(),\n };\n\n const _messageId = await runtime.createMemory(memory, 'messages');\n\n // Process message with real runtime - this executes actual logic\n const responses = await runtime.processActions(memory, [], undefined, undefined);\n\n const responseTime = Date.now() - startTime;\n\n // Validate results against expectations\n const result: RealRuntimeTestResult = {\n scenarioName: `Process: \"${messageText}\"`,\n passed: true,\n errors: [],\n executedActions: [],\n createdMemories: Array.isArray(responses) ? responses.length : 0,\n responseTime,\n };\n\n // Check if expected actions were executed\n if (options.expectedActions && options.expectedActions.length > 0) {\n const executedActions = await this.getExecutedActions(runtime, roomId);\n const missingActions = options.expectedActions.filter(\n (action) => !executedActions.includes(action)\n );\n\n if (missingActions.length > 0) {\n result.passed = false;\n result.errors.push(`Missing expected actions: ${missingActions.join(', ')}`);\n }\n\n result.executedActions = executedActions;\n }\n\n // Check timeout\n if (options.timeoutMs && responseTime > options.timeoutMs) {\n result.passed = false;\n result.errors.push(\n `Response time ${responseTime}ms exceeded timeout ${options.timeoutMs}ms`\n );\n }\n\n return result;\n } catch (error) {\n return {\n scenarioName: `Process: \"${messageText}\"`,\n passed: false,\n errors: [`Runtime error: ${error instanceof Error ? error.message : String(error)}`],\n executedActions: [],\n createdMemories: 0,\n responseTime: Date.now() - startTime,\n };\n }\n }\n\n /**\n * Gets actions that were actually executed (not mocked)\n */\n private async getExecutedActions(runtime: IAgentRuntime, roomId: string): Promise<string[]> {\n try {\n // Query real database for executed actions\n const memories = await runtime.getMemories({\n roomId: roomId as UUID,\n count: 10,\n tableName: 'messages',\n });\n\n const actions: string[] = [];\n for (const memory of memories) {\n if (memory.content.actions && Array.isArray(memory.content.actions)) {\n actions.push(...memory.content.actions);\n }\n }\n\n return [...new Set(actions)]; // Remove duplicates\n } catch (error) {\n logger.warn(\n {\n src: 'test-utils:real-runtime',\n error: error instanceof Error ? error.message : String(error),\n },\n `Could not retrieve executed actions: ${error instanceof Error ? error.message : String(error)}`\n );\n return [];\n }\n }\n\n /**\n * Validates that a runtime is actually functional\n */\n async validateRuntimeHealth(runtime: IAgentRuntime): Promise<{\n healthy: boolean;\n issues: string[];\n services: string[];\n plugins: string[];\n }> {\n const issues: string[] = [];\n const services: string[] = [];\n const plugins: string[] = [];\n\n try {\n // Check basic functionality\n if (!runtime.agentId) {\n issues.push('Runtime missing agentId');\n }\n\n if (!runtime.character) {\n issues.push('Runtime missing character');\n }\n\n // Check database connectivity\n try {\n const healthMemory: Memory = {\n id: stringToUuid('health-check-message'),\n entityId: stringToUuid('health-check-entity'),\n roomId: stringToUuid('health-check-room'),\n content: { text: 'Health check', source: 'test' },\n createdAt: Date.now(),\n };\n await runtime.createMemory(healthMemory, 'test');\n } catch (error) {\n issues.push(\n `Database not functional: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n // Check services\n try {\n const serviceMap = runtime.services || new Map();\n for (const [name, service] of serviceMap) {\n services.push(name);\n if (!service) {\n issues.push(`Service ${name} is null/undefined`);\n }\n }\n } catch (error) {\n issues.push(\n `Services not accessible: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n // Check plugins\n try {\n plugins.push(...(runtime.plugins?.map((p) => p.name) || []));\n } catch (error) {\n issues.push(\n `Plugins not accessible: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n\n return {\n healthy: issues.length === 0,\n issues,\n services,\n plugins,\n };\n } catch (error) {\n return {\n healthy: false,\n issues: [\n `Runtime health check failed: ${error instanceof Error ? error.message : String(error)}`,\n ],\n services,\n plugins,\n };\n }\n }\n\n /**\n * Cleanup all test resources\n */\n async cleanup(): Promise<void> {\n try {\n logger.info(\n { src: 'test-utils:real-runtime', testId: this.testId },\n `Cleaning up test harness ${this.testId}`\n );\n\n // Stop all runtimes\n for (const [runtimeId, runtime] of this.runtimes) {\n try {\n await runtime.stop();\n logger.debug(\n { src: 'test-utils:real-runtime', runtimeId },\n `Stopped runtime ${runtimeId}`\n );\n } catch (error) {\n logger.warn(\n {\n src: 'test-utils:real-runtime',\n runtimeId,\n error: error instanceof Error ? error.message : String(error),\n },\n `Error stopping runtime ${runtimeId}: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n // Clear runtime references\n this.runtimes.clear();\n\n // Cleanup databases\n await this.databaseManager.cleanup();\n\n logger.info(\n { src: 'test-utils:real-runtime', testId: this.testId },\n `Successfully cleaned up test harness ${this.testId}`\n );\n } catch (error) {\n logger.error(\n {\n src: 'test-utils:real-runtime',\n error: error instanceof Error ? error.message : String(error),\n },\n `Error during cleanup: ${error instanceof Error ? error.message : String(error)}`\n );\n throw error;\n }\n }\n}\n\n/**\n * Convenience function to create and configure a test runtime\n */\nexport async function createTestRuntime(config: Partial<RuntimeConfig> = {}): Promise<{\n runtime: IAgentRuntime;\n harness: RuntimeTestHarness;\n}> {\n const harness = new RuntimeTestHarness();\n\n const defaultCharacter: Character = {\n name: 'TestAgent',\n system: 'You are a helpful test agent.',\n bio: ['I am a test agent used for integration testing.'],\n messageExamples: [],\n postExamples: [],\n topics: ['testing'],\n knowledge: [],\n plugins: [],\n };\n\n const runtime = await harness.createTestRuntime({\n character: defaultCharacter,\n plugins: [],\n apiKeys: { OPENAI_API_KEY: 'test-key' },\n ...config,\n });\n\n return { runtime, harness };\n}\n\n/**\n * Helper to run a quick integration test\n */\nexport async function runIntegrationTest(\n testName: string,\n testFn: (runtime: IAgentRuntime) => Promise<void>,\n config?: Partial<RuntimeConfig>\n): Promise<RealRuntimeTestResult> {\n const startTime = Date.now();\n let harness: RuntimeTestHarness | undefined;\n\n try {\n const { runtime, harness: testHarness } = await createTestRuntime(config);\n harness = testHarness;\n\n await testFn(runtime);\n\n return {\n scenarioName: testName,\n passed: true,\n errors: [],\n executedActions: [],\n createdMemories: 0,\n responseTime: Date.now() - startTime,\n };\n } catch (error) {\n return {\n scenarioName: testName,\n passed: false,\n errors: [error instanceof Error ? error.message : String(error)],\n executedActions: [],\n createdMemories: 0,\n responseTime: Date.now() - startTime,\n };\n } finally {\n if (harness) {\n await harness.cleanup();\n }\n }\n}\n\n// Re-export helper functions from test-models\nexport { createSpecializedModelProvider, scenarios };\n",
|
|
6
6
|
"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",
|
|
7
7
|
"import { randomFillSync } from 'node:crypto';\nconst rnds8Pool = new Uint8Array(256);\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n return rnds8Pool.slice(poolPtr, (poolPtr += 16));\n}\n",
|
|
8
8
|
"import { randomUUID } from 'node:crypto';\nexport default { randomUUID };\n",
|
|
9
9
|
"import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n",
|
|
10
|
-
"import type { IDatabaseAdapter, UUID } from '@elizaos/core';\nimport { logger } from '@elizaos/core';\nimport { v4 as uuidv4 } from 'uuid';\n\n/**\n * Test Database Manager - Creates isolated database instances for testing\n * Each test gets its own database to prevent interference and ensure isolation\n */\nexport class TestDatabaseManager {\n private testDatabases: Map<string, IDatabaseAdapter> = new Map();\n private tempPaths: Set<string> = new Set();\n\n /**\n * Creates an isolated database for testing\n * Uses PostgreSQL for testing when available, falls back to mock database\n */\n async createIsolatedDatabase(testId: string): Promise<IDatabaseAdapter> {\n try {\n logger.debug(`Creating isolated test database for ${testId}`);\n\n // Use dynamic import to avoid breaking if PostgreSQL not available\n let adapter: IDatabaseAdapter;\n\n try {\n // Try to use PostgreSQL for testing\n logger.debug(`Attempting to load PostgreSQL adapter for ${testId}`);\n\n // Try to use real database for proper testing, but fallback to mock if unavailable\n if (process.env.FORCE_MOCK_DB === 'true') {\n logger.warn('FORCE_MOCK_DB is set - using mock database');\n adapter = this.createMockDatabase(testId);\n } else {\n // Check if SQL plugin is available in the build\n try {\n // Don't import plugin-sql directly to avoid circular dependency\n // Instead, use global registration if available\n const sqlPlugin = (globalThis as any).__elizaOS_sqlPlugin;\n\n if (!sqlPlugin?.createDatabaseAdapter) {\n throw new Error('SQL plugin not available - falling back to mock database');\n }\n\n // Use PostgreSQL test database if available\n const postgresUrl = process.env.TEST_POSTGRES_URL || process.env.POSTGRES_URL;\n if (!postgresUrl) {\n throw new Error('PostgreSQL URL not available - falling back to mock database');\n }\n\n adapter = await sqlPlugin.createDatabaseAdapter(\n {\n postgresUrl,\n },\n '11111111-2222-3333-4444-555555555555' as UUID\n );\n\n logger.debug(`Successfully created PostgreSQL adapter for ${testId}`);\n } catch (importError) {\n logger.warn(\n `SQL plugin not available: ${importError instanceof Error ? importError.message : String(importError)} - falling back to mock database`\n );\n adapter = this.createMockDatabase(testId);\n }\n }\n } catch (postgresError) {\n logger.warn(\n `Failed to create PostgreSQL database: ${postgresError instanceof Error ? postgresError.message : String(postgresError)} - falling back to mock database`\n );\n\n // Fall back to mock database for basic testing\n adapter = this.createMockDatabase(testId);\n }\n\n // Initialize the database\n await adapter.init();\n\n // Store for cleanup\n this.testDatabases.set(testId, adapter);\n\n logger.debug(`Successfully created isolated database for ${testId}`);\n return adapter;\n } catch (error) {\n logger.error(\n `Failed to create test database for ${testId}: ${error instanceof Error ? error.message : String(error)}`\n );\n throw new Error(\n `Test database creation failed: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Creates a minimal mock database adapter for testing when real database unavailable\n * This is a FUNCTIONAL mock that actually stores data in memory\n */\n private createMockDatabase(testId: string): IDatabaseAdapter {\n // In-memory storage for this test instance\n const storage = {\n agents: new Map(),\n entities: new Map(),\n memories: new Map(),\n relationships: new Map(),\n rooms: new Map(),\n participants: new Map(),\n cache: new Map(),\n worlds: new Map(),\n tasks: new Map(),\n logs: new Map(),\n };\n\n const adapter = {\n db: null, // Mock database instance\n\n async initialize() {\n logger.debug(`Initialized mock database for ${testId}`);\n },\n\n async init() {\n logger.debug(`Initialized mock database for ${testId}`);\n },\n\n async runMigrations() {\n // No-op for mock\n },\n\n async isReady() {\n return true;\n },\n\n async close() {\n storage.agents.clear();\n storage.entities.clear();\n storage.memories.clear();\n storage.relationships.clear();\n storage.rooms.clear();\n storage.participants.clear();\n storage.cache.clear();\n storage.worlds.clear();\n storage.tasks.clear();\n },\n\n async getConnection() {\n return null;\n },\n\n async ensureEmbeddingDimension() {\n // No-op for mock\n },\n\n async getAgent(agentId: any) {\n return storage.agents.get(agentId) || null;\n },\n\n async getAgents() {\n return Array.from(storage.agents.values());\n },\n\n async createAgent(agent: any) {\n const id = agent.id || uuidv4();\n const fullAgent = { ...agent, id };\n storage.agents.set(id, fullAgent);\n return true;\n },\n\n async updateAgent(agentId: any, agent: any) {\n if (storage.agents.has(agentId)) {\n storage.agents.set(agentId, { ...agent, id: agentId });\n return true;\n }\n return false;\n },\n\n async deleteAgent(agentId: any) {\n return storage.agents.delete(agentId);\n },\n\n // Entity operations\n async createEntity(entity: any) {\n const id = entity.id || uuidv4();\n const fullEntity = { ...entity, id };\n storage.entities.set(id, fullEntity);\n return fullEntity;\n },\n\n async createEntities(entities: any[]) {\n for (const entity of entities) {\n const id = entity.id || uuidv4();\n const fullEntity = { ...entity, id };\n storage.entities.set(id, fullEntity);\n }\n return true;\n },\n\n async getEntityById(id: any) {\n return storage.entities.get(id) || null;\n },\n\n async updateEntity(entity: any) {\n if (!entity.id || !storage.entities.has(entity.id)) {\n throw new Error('Entity not found');\n }\n storage.entities.set(entity.id, entity);\n },\n\n async getEntitiesForRoom(roomId: any) {\n const participants = Array.from(storage.participants.values()).filter(\n (p: any) => p.roomId === roomId\n );\n\n const entities = [];\n for (const participant of participants) {\n const entity = storage.entities.get(participant.entityId);\n if (entity) {\n entities.push(entity);\n }\n }\n return entities;\n },\n\n // Memory operations\n async createMemory(memory: any, tableName = 'messages', _unique = false) {\n const id = memory.id || uuidv4();\n const fullMemory = {\n ...memory,\n id,\n createdAt: memory.createdAt || Date.now(),\n };\n\n if (!storage.memories.has(tableName)) {\n storage.memories.set(tableName, new Map());\n }\n\n storage.memories.get(tableName).set(id, fullMemory);\n return id as `${string}-${string}-${string}-${string}-${string}`;\n },\n\n async getMemories(params: any) {\n const tableName = params.tableName || 'messages';\n const tableData = storage.memories.get(tableName);\n\n if (!tableData) {\n return [];\n }\n\n let memories = Array.from(tableData.values()) as any[];\n\n // Apply filters\n if (params.roomId) {\n memories = memories.filter((m: any) => m.roomId === params.roomId);\n }\n\n if (params.entityId) {\n memories = memories.filter((m: any) => m.entityId === params.entityId);\n }\n\n // Sort by creation time (newest first)\n memories.sort((a: any, b: any) => (b.createdAt || 0) - (a.createdAt || 0));\n\n // Apply limit\n if (params.count) {\n memories = memories.slice(0, params.count);\n }\n\n return memories;\n },\n\n async searchMemories(params: any) {\n // Simple text search for testing\n const tableName = params.tableName || 'messages';\n const tableData = storage.memories.get(tableName);\n\n if (!tableData) {\n return [];\n }\n\n let memories = Array.from(tableData.values()) as any[];\n\n if (params.roomId) {\n memories = memories.filter((m: any) => m.roomId === params.roomId);\n }\n\n // Simple text matching instead of vector search\n if (params.query) {\n memories = memories.filter((m: any) =>\n m.content?.text?.toLowerCase().includes(params.query.toLowerCase())\n );\n }\n\n return memories.slice(0, params.count || 10);\n },\n\n async getMemoryById(id: any) {\n for (const [_tableName, tableData] of storage.memories) {\n const memory = tableData.get(id);\n if (memory) {\n return memory;\n }\n }\n return null;\n },\n\n async getMemoriesByIds(ids: any, tableName = 'messages') {\n const tableData = storage.memories.get(tableName);\n if (!tableData) {\n return [];\n }\n\n const memories = [];\n for (const id of ids) {\n const memory = tableData.get(id);\n if (memory) {\n memories.push(memory);\n }\n }\n return memories;\n },\n\n async getMemoriesByRoomIds(params: any): Promise<any[]> {\n const tableData = storage.memories.get(params.tableName);\n if (!tableData) {\n return [];\n }\n\n let memories = Array.from(tableData.values()).filter((m: any) =>\n params.roomIds.includes(m.roomId)\n );\n\n if (params.limit) {\n memories = memories.slice(0, params.limit);\n }\n\n return memories as any[];\n },\n\n async getCachedEmbeddings() {\n return []; // Not implemented for basic mock\n },\n\n async log(params: any) {\n // Simple log storage\n if (!storage.logs) {\n storage.logs = new Map();\n }\n const logId = uuidv4();\n storage.logs.set(logId, {\n id: logId,\n ...params,\n createdAt: new Date(),\n });\n },\n\n async getLogs() {\n if (!storage.logs) {\n return [];\n }\n return Array.from(storage.logs.values());\n },\n\n async deleteMemory(memoryId: any, tableName = 'messages') {\n const tableData = storage.memories.get(tableName);\n if (tableData) {\n return tableData.delete(memoryId);\n }\n return false;\n },\n\n // Room operations\n async createRoom(room: any) {\n const id = room.id || uuidv4();\n const fullRoom = { ...room, id };\n storage.rooms.set(id, fullRoom);\n },\n\n async getRoom(roomId: any) {\n return storage.rooms.get(roomId) || null;\n },\n\n async getRooms(worldId: any) {\n return Array.from(storage.rooms.values()).filter(\n (room) => !worldId || room.worldId === worldId\n );\n },\n\n // Participant operations\n async addParticipant(entityId: any, roomId: any) {\n const participantId = `${entityId}-${roomId}`;\n storage.participants.set(participantId, { entityId, roomId });\n return true;\n },\n\n async removeParticipant(entityId: any, roomId: any) {\n const participantId = `${entityId}-${roomId}`;\n return storage.participants.delete(participantId);\n },\n\n async getParticipantsForRoom(roomId: any) {\n return Array.from(storage.participants.values())\n .filter((p: any) => p.roomId === roomId)\n .map((p: any) => p.entityId);\n },\n\n // Cache operations\n async setCache(key: any, value: any) {\n storage.cache.set(key, {\n value,\n createdAt: Date.now(),\n });\n return true;\n },\n\n async getCache(key: any) {\n const cached = storage.cache.get(key);\n return cached ? cached.value : null;\n },\n\n async deleteCache(key: any) {\n return storage.cache.delete(key);\n },\n\n // World operations\n async createWorld(world: any) {\n const id = world.id || uuidv4();\n const fullWorld = { ...world, id };\n storage.worlds.set(id, fullWorld);\n return id as `${string}-${string}-${string}-${string}-${string}`;\n },\n\n async getWorld(worldId: any) {\n return storage.worlds.get(worldId) || null;\n },\n\n async getAllWorlds() {\n return Array.from(storage.worlds.values());\n },\n\n // Task operations\n async createTask(task: any) {\n const id = task.id || uuidv4();\n const fullTask = {\n ...task,\n id,\n updatedAt: task.updatedAt || Date.now(),\n };\n storage.tasks.set(id, fullTask);\n return id as `${string}-${string}-${string}-${string}-${string}`;\n },\n\n async getTasks(params: any) {\n let tasks = Array.from(storage.tasks.values());\n\n if (params.roomId) {\n tasks = tasks.filter((task) => task.roomId === params.roomId);\n }\n\n if (params.tags) {\n tasks = tasks.filter((task: any) =>\n params.tags.some((tag: any) => task.tags.includes(tag))\n );\n }\n\n return tasks;\n },\n\n async deleteTask(taskId: any) {\n storage.tasks.delete(taskId);\n },\n\n // Relationship operations\n async createRelationship(relationship: any) {\n const id = uuidv4();\n const fullRelationship = { ...relationship, id };\n storage.relationships.set(id, fullRelationship);\n return true;\n },\n\n async getRelationships(params: any) {\n let relationships = Array.from(storage.relationships.values());\n\n if (params.entityId) {\n relationships = relationships.filter(\n (rel) =>\n rel.sourceEntityId === params.entityId || rel.targetEntityId === params.entityId\n );\n }\n\n return relationships;\n },\n\n async getEntitiesByIds(ids: any) {\n const entities = [];\n for (const id of ids) {\n const entity = storage.entities.get(id);\n if (entity) {\n entities.push(entity);\n }\n }\n return entities;\n },\n\n async updateMemory(memory: any) {\n const tableName = 'messages'; // Default table\n const tableData = storage.memories.get(tableName);\n if (tableData && tableData.has(memory.id)) {\n const existing = tableData.get(memory.id);\n const updated = { ...existing, ...memory };\n tableData.set(memory.id, updated);\n return updated;\n }\n return null;\n },\n\n async countMemories(roomId: any, tableName = 'messages') {\n const tableData = storage.memories.get(tableName);\n if (!tableData) {\n return 0;\n }\n\n if (!roomId) {\n return tableData.size;\n }\n\n return Array.from(tableData.values()).filter((m: any) => m.roomId === roomId).length;\n },\n\n async getMemoriesByEntityIds(entityIds: any, tableName = 'messages') {\n const tableData = storage.memories.get(tableName);\n if (!tableData) {\n return [];\n }\n\n return Array.from(tableData.values()).filter((m: any) => entityIds.includes(m.entityId));\n },\n\n async removeAllMemories(roomId: any, tableName = 'messages') {\n const tableData = storage.memories.get(tableName);\n if (!tableData) {\n return;\n }\n\n const toDelete = [];\n for (const [id, memory] of tableData) {\n if (memory.roomId === roomId) {\n toDelete.push(id);\n }\n }\n\n for (const id of toDelete) {\n tableData.delete(id);\n }\n },\n\n async updateRoom(room: any) {\n if (!room.id || !storage.rooms.has(room.id)) {\n throw new Error('Room not found');\n }\n storage.rooms.set(room.id, room);\n },\n\n async deleteRoom(roomId: any) {\n storage.rooms.delete(roomId);\n },\n\n async getRoomsByIds(roomIds: any) {\n const rooms = [];\n for (const id of roomIds) {\n const room = storage.rooms.get(id);\n if (room) {\n rooms.push(room);\n }\n }\n return rooms;\n },\n\n async createRooms(rooms: any[]) {\n const ids = [];\n for (const room of rooms) {\n const id = room.id || uuidv4();\n const fullRoom = { ...room, id };\n storage.rooms.set(id, fullRoom);\n ids.push(id);\n }\n return ids;\n },\n\n async getRoomsByWorld(worldId: any) {\n return Array.from(storage.rooms.values()).filter((room) => room.worldId === worldId);\n },\n\n async deleteRoomsByWorldId(worldId: any) {\n const toDelete = [];\n for (const [id, room] of storage.rooms) {\n if (room.worldId === worldId) {\n toDelete.push(id);\n }\n }\n for (const id of toDelete) {\n storage.rooms.delete(id);\n }\n },\n\n async getWorlds(params: any) {\n let worlds = Array.from(storage.worlds.values());\n if (params?.agentId) {\n worlds = worlds.filter((w: any) => w.agentId === params.agentId);\n }\n return worlds;\n },\n\n async removeWorld(worldId: any) {\n storage.worlds.delete(worldId);\n },\n\n async updateWorld(world: any) {\n if (!world.id || !storage.worlds.has(world.id)) {\n throw new Error('World not found');\n }\n storage.worlds.set(world.id, world);\n },\n\n async createComponent(component: any) {\n // Store in a components map within the entity\n const entityComponents = storage.entities.get(component.entityId)?.components || [];\n entityComponents.push(component);\n\n const entity = storage.entities.get(component.entityId);\n if (entity) {\n entity.components = entityComponents;\n storage.entities.set(component.entityId, entity);\n }\n\n return true;\n },\n\n async getComponents(entityId: any) {\n const entity = storage.entities.get(entityId);\n return entity?.components || [];\n },\n\n async updateComponent(component: any) {\n const entity = storage.entities.get(component.entityId);\n if (entity && entity.components) {\n const index = entity.components.findIndex((c: any) => c.id === component.id);\n if (index >= 0) {\n entity.components[index] = component;\n storage.entities.set(component.entityId, entity);\n return;\n }\n }\n throw new Error('Component not found');\n },\n\n async deleteComponent(componentId: any) {\n for (const entity of storage.entities.values()) {\n if (entity.components) {\n const index = entity.components.findIndex((c: any) => c.id === componentId);\n if (index >= 0) {\n entity.components.splice(index, 1);\n storage.entities.set(entity.id, entity);\n return;\n }\n }\n }\n },\n\n async getComponent(entityId: any, type: any, worldId?: any, sourceEntityId?: any) {\n const entity = storage.entities.get(entityId);\n if (!entity?.components) {\n return null;\n }\n\n return (\n entity.components.find(\n (c: any) =>\n c.type === type &&\n (!worldId || c.worldId === worldId) &&\n (!sourceEntityId || c.sourceEntityId === sourceEntityId)\n ) || null\n );\n },\n\n async getParticipantsForEntity(entityId: any) {\n return Array.from(storage.participants.values()).filter(\n (p: any) => p.entityId === entityId\n );\n },\n\n async getRoomsForParticipant(entityId: any) {\n return Array.from(storage.participants.values())\n .filter((p: any) => p.entityId === entityId)\n .map((p: any) => p.roomId);\n },\n\n async getRoomsForParticipants(userIds: any[]) {\n const roomIds = new Set();\n for (const participant of storage.participants.values()) {\n if (userIds.includes(participant.entityId)) {\n roomIds.add(participant.roomId);\n }\n }\n return Array.from(roomIds);\n },\n\n async getParticipantUserState(_roomId: any, _entityId: any) {\n // Simple implementation - always return null (no special state)\n return null;\n },\n\n async setParticipantUserState(_roomId: any, _entityId: any, _state: any) {\n // No-op for mock\n },\n\n async getRelationship(params: any) {\n const relationships = Array.from(storage.relationships.values());\n return (\n relationships.find(\n (r: any) =>\n r.sourceEntityId === params.sourceEntityId &&\n r.targetEntityId === params.targetEntityId\n ) || null\n );\n },\n\n async updateRelationship(relationship: any) {\n if (!relationship.id || !storage.relationships.has(relationship.id)) {\n throw new Error('Relationship not found');\n }\n storage.relationships.set(relationship.id, relationship);\n },\n\n async getTask(id: any) {\n return storage.tasks.get(id) || null;\n },\n\n async getTasksByName(name: any) {\n return Array.from(storage.tasks.values()).filter((task: any) => task.name === name);\n },\n\n async updateTask(id: any, updates: any) {\n const task = storage.tasks.get(id);\n if (!task) {\n throw new Error('Task not found');\n }\n const updated = { ...task, ...updates, updatedAt: Date.now() };\n storage.tasks.set(id, updated);\n },\n\n async deleteLog(logId: any) {\n if (storage.logs) {\n storage.logs.delete(logId);\n }\n },\n\n async getMemoriesByWorldId(params: any) {\n const tableName = params.tableName || 'messages';\n const tableData = storage.memories.get(tableName);\n if (!tableData) {\n return [];\n }\n\n let memories = Array.from(tableData.values()).filter(\n (m: any) => m.worldId === params.worldId\n );\n\n if (params.count) {\n memories = memories.slice(0, params.count);\n }\n\n return memories;\n },\n\n async deleteManyMemories(memoryIds: any[]) {\n for (const [_tableName, tableData] of storage.memories) {\n for (const id of memoryIds) {\n tableData.delete(id);\n }\n }\n },\n\n async deleteAllMemories(roomId: any, _tableName: string) {\n const tableData = storage.memories.get(_tableName);\n if (!tableData) {\n return;\n }\n\n const toDelete = [];\n for (const [id, memory] of tableData) {\n if (memory.roomId === roomId) {\n toDelete.push(id);\n }\n }\n\n for (const id of toDelete) {\n tableData.delete(id);\n }\n },\n\n async addParticipantsRoom(entityIds: any[], roomId: any) {\n for (const entityId of entityIds) {\n const participantId = `${entityId}-${roomId}`;\n storage.participants.set(participantId, { entityId, roomId });\n }\n return true;\n },\n };\n\n return adapter as unknown as IDatabaseAdapter;\n }\n\n /**\n * Cleanup a specific test database\n */\n async cleanupDatabase(testId: string): Promise<void> {\n try {\n const adapter = this.testDatabases.get(testId);\n if (adapter) {\n await adapter.close();\n this.testDatabases.delete(testId);\n logger.debug(`Cleaned up database for ${testId}`);\n }\n } catch (error) {\n logger.warn(\n `Error cleaning up database ${testId}: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Cleanup all test databases\n */\n async cleanup(): Promise<void> {\n logger.debug('Cleaning up all test databases');\n\n const cleanupPromises = Array.from(this.testDatabases.keys()).map((testId) =>\n this.cleanupDatabase(testId)\n );\n\n await Promise.all(cleanupPromises);\n\n // Clear tracking sets\n this.tempPaths.clear();\n this.testDatabases.clear();\n\n logger.debug('Successfully cleaned up all test databases');\n }\n\n /**\n * Get statistics about test databases\n */\n getStats(): {\n activeDatabases: number;\n tempPaths: string[];\n memoryUsage: string;\n } {\n return {\n activeDatabases: this.testDatabases.size,\n tempPaths: Array.from(this.tempPaths),\n memoryUsage: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)}MB`,\n };\n }\n}\n\n/**\n * Convenience function to create an isolated test database\n */\nexport async function createTestDatabase(testId?: string): Promise<{\n adapter: IDatabaseAdapter;\n manager: TestDatabaseManager;\n testId: string;\n}> {\n const actualTestId = testId || `test-${uuidv4().slice(0, 8)}`;\n const manager = new TestDatabaseManager();\n const adapter = await manager.createIsolatedDatabase(actualTestId);\n\n return { adapter, manager, testId: actualTestId };\n}\n",
|
|
11
|
-
"import type { IAgentRuntime, GenerateTextParams, TextEmbeddingParams } from '@elizaos/core';\nimport { logger } from '@elizaos/core';\n\n/**\n * Realistic Test Model Provider - Provides configurable but realistic AI model responses\n * Replaces hardcoded mock responses with intelligent, context-aware responses\n */\nexport class TestModelProvider {\n private responses: Map<string, string> = new Map();\n private patterns: Array<{ pattern: RegExp; response: string }> = [];\n private defaultResponse: string;\n private contextHistory: Array<{ prompt: string; response: string }> = [];\n\n constructor(\n defaultResponse: string = 'I understand and will help with that.',\n _options: {\n enableContextMemory?: boolean;\n maxContextHistory?: number;\n } = {}\n ) {\n this.defaultResponse = defaultResponse;\n\n // Add some intelligent default patterns\n this.addDefaultPatterns();\n }\n\n /**\n * Add realistic default response patterns\n */\n private addDefaultPatterns(): void {\n const defaultPatterns = [\n // Greeting patterns\n {\n pattern: /^(hello|hi|hey|greetings)/i,\n response: 'Hello! How can I help you today?',\n },\n {\n pattern: /(good morning|good afternoon|good evening)/i,\n response: 'Good day! What can I assist you with?',\n },\n\n // Task creation patterns\n {\n pattern: /(create|add|make).*?(todo|task|reminder)/i,\n response: \"I'll create that task for you right away. Let me add it to your todo list.\",\n },\n {\n pattern: /(schedule|plan|organize)/i,\n response: \"I'll help you schedule that. Let me organize this for you.\",\n },\n\n // Information requests\n {\n pattern: /(search|find|look|query).*?(for|about)/i,\n response: \"Let me search for that information. I'll look into it right away.\",\n },\n {\n pattern: /(what|how|when|where|why)/i,\n response: \"Let me find that information for you. I'll provide a detailed answer.\",\n },\n\n // Analysis and review\n {\n pattern: /(analyze|review|examine|check)/i,\n response: \"I'll analyze this carefully and provide my assessment with detailed insights.\",\n },\n {\n pattern: /(explain|describe|tell me about)/i,\n response: \"I'll explain that in detail for you. Here's what you need to know.\",\n },\n\n // Action requests\n {\n pattern: /(send|email|message|notify)/i,\n response: \"I'll send that message for you. Let me take care of the communication.\",\n },\n {\n pattern: /(delete|remove|cancel)/i,\n response: \"I'll remove that for you. Let me handle the deletion safely.\",\n },\n\n // File and data operations\n {\n pattern: /(save|store|backup)/i,\n response: \"I'll save that information securely. Your data will be stored properly.\",\n },\n {\n pattern: /(load|open|access)/i,\n response: \"I'll access that resource for you. Let me retrieve the information.\",\n },\n\n // Problem solving\n {\n pattern: /(fix|repair|solve|troubleshoot)/i,\n response:\n \"I'll help troubleshoot this issue. Let me analyze the problem and find a solution.\",\n },\n {\n pattern: /(help|assist|support)/i,\n response: \"I'm here to help! Let me assist you with whatever you need.\",\n },\n\n // Decision making\n {\n pattern: /(should|recommend|suggest|advise)/i,\n response: \"Based on the information provided, I'd recommend the following approach.\",\n },\n {\n pattern: /(choose|select|decide)/i,\n response: 'Let me help you make that decision. Here are the key factors to consider.',\n },\n\n // Confirmation and acknowledgment\n {\n pattern: /(yes|ok|okay|sure|agreed)/i,\n response: \"Understood! I'll proceed with that as requested.\",\n },\n {\n pattern: /(no|stop|cancel|abort)/i,\n response: \"Alright, I'll stop that process. Is there anything else I can help with?\",\n },\n\n // Complex reasoning patterns\n {\n pattern: /(if.*then|because|therefore|since)/i,\n response: 'I understand the logic. Let me work through this step by step.',\n },\n {\n pattern: /(compare|contrast|difference|similar)/i,\n response: \"I'll compare these options and highlight the key differences and similarities.\",\n },\n\n // Error handling\n {\n pattern: /(error|problem|issue|broken|failed)/i,\n response: \"I see there's an issue. Let me investigate the problem and find a solution.\",\n },\n ];\n\n this.patterns.push(...defaultPatterns);\n }\n\n /**\n * Generate text response based on prompt\n */\n async generateText(params: GenerateTextParams): Promise<string> {\n const prompt = params.prompt;\n\n try {\n // Check for exact matches first\n const exactMatch = this.responses.get(prompt);\n if (exactMatch) {\n this.addToHistory(prompt, exactMatch);\n return exactMatch;\n }\n\n // Check pattern matches\n for (const { pattern, response } of this.patterns) {\n if (pattern.test(prompt)) {\n const contextualResponse = this.makeContextual(response, prompt);\n this.addToHistory(prompt, contextualResponse);\n return contextualResponse;\n }\n }\n\n // Generate intelligent default response\n const intelligentResponse = this.generateIntelligentDefault(prompt);\n this.addToHistory(prompt, intelligentResponse);\n return intelligentResponse;\n } catch (error) {\n logger.warn(\n `Error in test model provider: ${error instanceof Error ? error.message : String(error)}`\n );\n return this.defaultResponse;\n }\n }\n\n /**\n * Generate embeddings for text (mock implementation with consistent vectors)\n */\n async generateEmbedding(params: TextEmbeddingParams): Promise<number[]> {\n const text = params.text;\n\n // Create deterministic but realistic embeddings based on text content\n const hash = this.simpleHash(text);\n const embedding = [];\n\n // Generate 1536-dimensional embedding (OpenAI standard)\n for (let i = 0; i < 1536; i++) {\n const value = Math.sin(hash + i) * 0.5; // Values between -0.5 and 0.5\n embedding.push(value);\n }\n\n return embedding;\n }\n\n /**\n * Generate object-structured responses\n */\n async generateObject(params: any): Promise<Record<string, any>> {\n const prompt = params.prompt;\n\n // Parse the prompt to determine what kind of object to return\n if (prompt.includes('thought') || prompt.includes('reasoning')) {\n return {\n thought: 'I need to think about this carefully and provide a helpful response.',\n reasoning: \"Based on the context provided, here's my analysis.\",\n confidence: 0.85,\n };\n }\n\n if (prompt.includes('action') || prompt.includes('execute')) {\n return {\n action: 'RESPOND',\n parameters: {},\n confidence: 0.9,\n };\n }\n\n if (prompt.includes('memory') || prompt.includes('remember')) {\n return {\n shouldStore: true,\n importance: 0.7,\n category: 'conversation',\n };\n }\n\n // Default structured response\n return {\n response: await this.generateText({ prompt, ...params }),\n confidence: 0.8,\n metadata: {\n timestamp: Date.now(),\n model: 'test-model',\n },\n };\n }\n\n /**\n * Make response more contextual based on prompt content\n */\n private makeContextual(response: string, prompt: string): string {\n // Extract key terms from prompt to make response more specific\n const keyTerms = this.extractKeyTerms(prompt);\n\n if (keyTerms.length > 0) {\n // Add specific reference to what was requested\n const term = keyTerms[0];\n return response.replace(\n /that|this|it/g,\n term.length > 20 ? `that ${term.substring(0, 20)}...` : `that ${term}`\n );\n }\n\n return response;\n }\n\n /**\n * Generate intelligent default response based on prompt analysis\n */\n private generateIntelligentDefault(prompt: string): string {\n const lowerPrompt = prompt.toLowerCase();\n\n // Detect question type\n if (lowerPrompt.includes('?')) {\n return \"That's a great question. Let me provide you with a comprehensive answer based on the available information.\";\n }\n\n // Detect command/request\n if (lowerPrompt.match(/^(please|can you|could you|would you)/)) {\n return \"Of course! I'll take care of that for you right away.\";\n }\n\n // Detect complex reasoning\n if (lowerPrompt.length > 200) {\n return 'I understand this is a complex request. Let me work through this systematically and provide you with a detailed response.';\n }\n\n // Detect emotional content\n if (lowerPrompt.match(/(angry|sad|frustrated|excited|happy|worried)/)) {\n return \"I understand how you're feeling. Let me help you work through this thoughtfully.\";\n }\n\n return this.defaultResponse;\n }\n\n /**\n * Extract key terms from prompt for contextualization\n */\n private extractKeyTerms(prompt: string): string[] {\n // Simple keyword extraction - remove common words and extract meaningful terms\n const commonWords = new Set([\n 'the',\n 'a',\n 'an',\n 'and',\n 'or',\n 'but',\n 'in',\n 'on',\n 'at',\n 'to',\n 'for',\n 'of',\n 'with',\n 'by',\n 'i',\n 'you',\n 'he',\n 'she',\n 'it',\n 'we',\n 'they',\n 'this',\n 'that',\n 'these',\n 'those',\n 'is',\n 'are',\n 'was',\n 'were',\n 'be',\n 'been',\n 'being',\n 'have',\n 'has',\n 'had',\n 'do',\n 'does',\n 'did',\n 'will',\n 'would',\n 'could',\n 'should',\n 'can',\n 'may',\n 'might',\n 'must',\n ]);\n\n const words = prompt\n .toLowerCase()\n .replace(/[^\\w\\s]/g, ' ')\n .split(/\\s+/)\n .filter((word) => word.length > 2 && !commonWords.has(word));\n\n return [...new Set(words)].slice(0, 3); // Return unique terms, max 3\n }\n\n /**\n * Simple hash function for deterministic embeddings\n */\n private simpleHash(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return Math.abs(hash);\n }\n\n /**\n * Add interaction to context history\n */\n private addToHistory(prompt: string, response: string): void {\n this.contextHistory.push({ prompt, response });\n\n // Keep only recent history\n if (this.contextHistory.length > 10) {\n this.contextHistory.shift();\n }\n }\n\n /**\n * Set a specific response for a prompt\n */\n setResponse(prompt: string, response: string): void {\n this.responses.set(prompt, response);\n }\n\n /**\n * Add a pattern-based response\n */\n addPattern(pattern: RegExp, response: string): void {\n this.patterns.unshift({ pattern, response }); // Add to beginning for priority\n }\n\n /**\n * Set the default response\n */\n setDefaultResponse(response: string): void {\n this.defaultResponse = response;\n }\n\n /**\n * Clear all custom responses and patterns\n */\n clear(): void {\n this.responses.clear();\n this.patterns.length = 0;\n this.contextHistory.length = 0;\n this.addDefaultPatterns(); // Re-add defaults\n }\n\n /**\n * Get conversation history\n */\n getHistory(): Array<{ prompt: string; response: string }> {\n return [...this.contextHistory];\n }\n}\n\n/**\n * Create a test model provider with specific scenarios\n */\nexport function createTestModelProvider(\n scenarios: Array<{ prompt: RegExp | string; response: string }> = [],\n defaultResponse?: string\n): TestModelProvider {\n const provider = new TestModelProvider(defaultResponse);\n\n for (const scenario of scenarios) {\n if (scenario.prompt instanceof RegExp) {\n provider.addPattern(scenario.prompt, scenario.response);\n } else {\n provider.setResponse(scenario.prompt, scenario.response);\n }\n }\n\n return provider;\n}\n\n/**\n * Create specialized model provider for different types of testing\n */\nexport function createSpecializedModelProvider(\n type: 'conversational' | 'analytical' | 'creative' | 'factual'\n): TestModelProvider {\n const provider = new TestModelProvider();\n\n switch (type) {\n case 'conversational':\n provider.addPattern(\n /.*/,\n \"That's interesting! Let me respond thoughtfully to what you've shared.\"\n );\n break;\n\n case 'analytical':\n provider.addPattern(\n /.*/,\n \"Let me analyze this systematically. Based on the data and context provided, here's my assessment.\"\n );\n break;\n\n case 'creative':\n provider.addPattern(\n /.*/,\n 'What a creative challenge! Let me think outside the box and explore innovative possibilities.'\n );\n break;\n\n case 'factual':\n provider.addPattern(\n /.*/,\n \"Based on factual information and established knowledge, here's an accurate response.\"\n );\n break;\n }\n\n return provider;\n}\n\n/**\n * Model handler wrapper that integrates with ElizaOS runtime\n */\nexport function createModelHandler(provider: TestModelProvider) {\n return async (runtime: IAgentRuntime, params: any): Promise<any> => {\n const modelType = params.modelType || 'TEXT_LARGE';\n\n switch (modelType) {\n case 'TEXT_SMALL':\n case 'TEXT_LARGE':\n return await provider.generateText(params);\n\n case 'TEXT_EMBEDDING':\n return await provider.generateEmbedding(params);\n\n case 'OBJECT_SMALL':\n case 'OBJECT_LARGE':\n return await provider.generateObject(params);\n\n default:\n return await provider.generateText(params);\n }\n };\n}\n\n/**\n * Test scenario builder for common testing patterns\n */\nexport class TestScenarioBuilder {\n private scenarios: Array<{ prompt: RegExp | string; response: string }> = [];\n\n addGreeting(response: string = 'Hello! How can I help you?'): this {\n this.scenarios.push({\n prompt: /^(hello|hi|hey)/i,\n response,\n });\n return this;\n }\n\n addTaskCreation(response: string = \"I'll create that task for you.\"): this {\n this.scenarios.push({\n prompt: /(create|add|make).*?(todo|task)/i,\n response,\n });\n return this;\n }\n\n addSearch(response: string = 'Let me search for that information.'): this {\n this.scenarios.push({\n prompt: /(search|find|look)/i,\n response,\n });\n return this;\n }\n\n addCustom(prompt: RegExp | string, response: string): this {\n this.scenarios.push({ prompt, response });\n return this;\n }\n\n build(defaultResponse?: string): TestModelProvider {\n return createTestModelProvider(this.scenarios, defaultResponse);\n }\n}\n\n/**\n * Convenience function to quickly create test scenarios\n */\nexport function scenarios(): TestScenarioBuilder {\n return new TestScenarioBuilder();\n}\n",
|
|
12
|
-
"/**\n * Standardized testing templates and patterns for ElizaOS\n *\n * This module provides consistent testing patterns, templates, and utilities\n * to ensure testing consistency across all packages.\n */\n\nimport { Character, Content, IAgentRuntime, logger, Memory, Plugin } from '@elizaos/core';\nimport { createTestRuntime } from './realRuntime';\n\n/**\n * Standard test configuration interface\n */\nexport interface TestConfig {\n name: string;\n timeout?: number;\n retries?: number;\n skipCondition?: () => boolean;\n setup?: () => Promise<void>;\n teardown?: () => Promise<void>;\n expectedErrors?: unknown[];\n}\n\n/**\n * Template test result interface\n */\nexport interface TemplateTestResult {\n name: string;\n passed: boolean;\n duration: number;\n error?: Error;\n warnings?: string[];\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Base test template class\n */\nexport abstract class TestTemplate {\n protected config: TestConfig;\n protected runtime?: IAgentRuntime;\n\n constructor(config: TestConfig) {\n this.config = config;\n }\n\n abstract execute(): Promise<TemplateTestResult>;\n\n protected async setup(): Promise<void> {\n if (this.config.setup) {\n await this.config.setup();\n }\n }\n\n protected async teardown(): Promise<void> {\n if (this.config.teardown) {\n await this.config.teardown();\n }\n }\n\n protected shouldSkip(): boolean {\n return this.config.skipCondition?.() ?? false;\n }\n\n public getConfig(): TestConfig {\n return this.config;\n }\n}\n\n/**\n * Unit test template for isolated component testing\n */\nexport class UnitTestTemplate extends TestTemplate {\n private testFunction: () => Promise<void>;\n\n constructor(config: TestConfig, testFunction: () => Promise<void>) {\n super(config);\n this.testFunction = testFunction;\n }\n\n async execute(): Promise<TemplateTestResult> {\n const startTime = Date.now();\n\n if (this.shouldSkip()) {\n return {\n name: this.config.name,\n passed: true,\n duration: 0,\n warnings: ['Test skipped due to skip condition'],\n };\n }\n\n try {\n await this.setup();\n await this.testFunction();\n return {\n name: this.config.name,\n passed: true,\n duration: Date.now() - startTime,\n };\n } catch (error) {\n return {\n name: this.config.name,\n passed: false,\n duration: Date.now() - startTime,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n } finally {\n await this.teardown();\n }\n }\n}\n\n/**\n * Integration test template for real runtime testing\n */\nexport class IntegrationTestTemplate extends TestTemplate {\n private testFunction: (runtime: IAgentRuntime) => Promise<void>;\n private character?: Character;\n\n constructor(\n config: TestConfig,\n testFunction: (runtime: IAgentRuntime) => Promise<void>,\n character?: Character\n ) {\n super(config);\n this.testFunction = testFunction;\n this.character = character;\n }\n\n async execute(): Promise<TemplateTestResult> {\n const startTime = Date.now();\n\n if (this.shouldSkip()) {\n return {\n name: this.config.name,\n passed: true,\n duration: 0,\n warnings: ['Test skipped due to skip condition'],\n };\n }\n\n try {\n await this.setup();\n\n const { runtime } = await createTestRuntime({\n character: this.character,\n });\n this.runtime = runtime;\n\n await this.testFunction(runtime);\n\n return {\n name: this.config.name,\n passed: true,\n duration: Date.now() - startTime,\n };\n } catch (error) {\n return {\n name: this.config.name,\n passed: false,\n duration: Date.now() - startTime,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n } finally {\n await this.teardown();\n }\n }\n}\n\n/**\n * Plugin test template for plugin-specific testing\n */\nexport class PluginTestTemplate extends TestTemplate {\n private plugin: Plugin;\n private testFunction: (runtime: IAgentRuntime, plugin: Plugin) => Promise<void>;\n\n constructor(\n config: TestConfig,\n plugin: Plugin,\n testFunction: (runtime: IAgentRuntime, plugin: Plugin) => Promise<void>\n ) {\n super(config);\n this.plugin = plugin;\n this.testFunction = testFunction;\n }\n\n async execute(): Promise<TemplateTestResult> {\n const startTime = Date.now();\n\n if (this.shouldSkip()) {\n return {\n name: this.config.name,\n passed: true,\n duration: 0,\n warnings: ['Test skipped due to skip condition'],\n };\n }\n\n try {\n await this.setup();\n\n const { runtime } = await createTestRuntime({\n character: {\n name: 'Test Agent',\n bio: 'Test agent for plugin testing',\n plugins: [this.plugin.name],\n },\n plugins: [this.plugin],\n });\n\n await this.testFunction(runtime, this.plugin);\n\n return {\n name: this.config.name,\n passed: true,\n duration: Date.now() - startTime,\n };\n } catch (error) {\n return {\n name: this.config.name,\n passed: false,\n duration: Date.now() - startTime,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n } finally {\n await this.teardown();\n }\n }\n}\n\n/**\n * Error handling test template\n */\nexport class ErrorTestTemplate extends TestTemplate {\n private testFunction: () => Promise<void>;\n private expectedError: string;\n\n constructor(config: TestConfig, testFunction: () => Promise<void>, expectedError: string) {\n super(config);\n this.testFunction = testFunction;\n this.expectedError = expectedError;\n }\n\n async execute(): Promise<TemplateTestResult> {\n const startTime = Date.now();\n\n if (this.shouldSkip()) {\n return {\n name: this.config.name,\n passed: true,\n duration: 0,\n warnings: ['Test skipped due to skip condition'],\n };\n }\n\n try {\n await this.setup();\n await this.testFunction();\n\n // If we reach here, the test should have thrown but didn't\n return {\n name: this.config.name,\n passed: false,\n duration: Date.now() - startTime,\n error: new Error(`Expected ${this.expectedError} error but test completed successfully`),\n };\n } catch (error) {\n const passed = error.category === this.expectedError;\n\n return {\n name: this.config.name,\n passed,\n duration: Date.now() - startTime,\n error: passed ? undefined : error instanceof Error ? error : new Error(String(error)),\n };\n } finally {\n await this.teardown();\n }\n }\n}\n\n/**\n * Performance test template\n */\nexport class PerformanceTestTemplate extends TestTemplate {\n private testFunction: () => Promise<void>;\n private maxDuration: number;\n private maxMemoryMB: number;\n\n constructor(\n config: TestConfig,\n testFunction: () => Promise<void>,\n maxDuration: number,\n maxMemoryMB: number\n ) {\n super(config);\n this.testFunction = testFunction;\n this.maxDuration = maxDuration;\n this.maxMemoryMB = maxMemoryMB;\n }\n\n async execute(): Promise<TemplateTestResult> {\n const startTime = Date.now();\n const startMemory = process.memoryUsage().heapUsed;\n\n if (this.shouldSkip()) {\n return {\n name: this.config.name,\n passed: true,\n duration: 0,\n warnings: ['Test skipped due to skip condition'],\n };\n }\n\n try {\n await this.setup();\n await this.testFunction();\n\n const duration = Date.now() - startTime;\n const memoryUsed = (process.memoryUsage().heapUsed - startMemory) / (1024 * 1024);\n\n const warnings: string[] = [];\n let passed = true;\n\n if (duration > this.maxDuration) {\n warnings.push(`Test exceeded max duration: ${duration}ms > ${this.maxDuration}ms`);\n passed = false;\n }\n\n if (memoryUsed > this.maxMemoryMB) {\n warnings.push(\n `Test exceeded max memory: ${memoryUsed.toFixed(2)}MB > ${this.maxMemoryMB}MB`\n );\n passed = false;\n }\n\n return {\n name: this.config.name,\n passed,\n duration,\n warnings,\n metadata: {\n memoryUsedMB: memoryUsed,\n maxDurationMs: this.maxDuration,\n maxMemoryMB: this.maxMemoryMB,\n },\n };\n } catch (error) {\n return {\n name: this.config.name,\n passed: false,\n duration: Date.now() - startTime,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n } finally {\n await this.teardown();\n }\n }\n}\n\n/**\n * Test suite for organizing related tests\n */\nexport class TestSuite {\n private tests: TestTemplate[] = [];\n private name: string;\n\n constructor(name: string) {\n this.name = name;\n }\n\n addTest(test: TestTemplate): void {\n this.tests.push(test);\n }\n\n async run(): Promise<{\n suiteName: string;\n totalTests: number;\n passed: number;\n failed: number;\n duration: number;\n results: TemplateTestResult[];\n }> {\n const startTime = Date.now();\n const results: TemplateTestResult[] = [];\n\n logger.info(`Running test suite: ${this.name}`);\n\n for (const test of this.tests) {\n try {\n const result = await test.execute();\n results.push(result);\n\n if (result.passed) {\n logger.info(`✓ ${result.name} (${result.duration}ms)`);\n } else {\n logger.error(`✗ ${result.name} (${result.duration}ms): ${result.error?.message}`);\n }\n } catch (error) {\n const errorResult: TemplateTestResult = {\n name: `${test.getConfig().name} (execution error)`,\n passed: false,\n duration: 0,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n results.push(errorResult);\n logger.error(`✗ ${errorResult.name}: ${errorResult.error?.message}`);\n }\n }\n\n const passed = results.filter((r) => r.passed).length;\n const failed = results.length - passed;\n const duration = Date.now() - startTime;\n\n logger.info(\n `Test suite ${this.name} completed: ${passed}/${results.length} passed (${duration}ms)`\n );\n\n return {\n suiteName: this.name,\n totalTests: results.length,\n passed,\n failed,\n duration,\n results,\n };\n }\n}\n\n/**\n * Factory functions for creating common test scenarios\n */\n\nexport function createUnitTest(\n name: string,\n testFunction: () => Promise<void>,\n options: Partial<TestConfig> = {}\n): UnitTestTemplate {\n return new UnitTestTemplate({ name, timeout: 5000, ...options }, testFunction);\n}\n\nexport function createIntegrationTest(\n name: string,\n testFunction: (runtime: IAgentRuntime) => Promise<void>,\n character?: Character,\n options: Partial<TestConfig> = {}\n): IntegrationTestTemplate {\n return new IntegrationTestTemplate({ name, timeout: 30000, ...options }, testFunction, character);\n}\n\nexport function createPluginTest(\n name: string,\n plugin: Plugin,\n testFunction: (runtime: IAgentRuntime, plugin: Plugin) => Promise<void>,\n options: Partial<TestConfig> = {}\n): PluginTestTemplate {\n return new PluginTestTemplate({ name, timeout: 30000, ...options }, plugin, testFunction);\n}\n\nexport function createErrorTest(\n name: string,\n testFunction: () => Promise<void>,\n expectedError: any,\n options: Partial<TestConfig> = {}\n): ErrorTestTemplate {\n return new ErrorTestTemplate({ name, timeout: 5000, ...options }, testFunction, expectedError);\n}\n\nexport function createPerformanceTest(\n name: string,\n testFunction: () => Promise<void>,\n maxDurationMs: number,\n maxMemoryMB: number,\n options: Partial<TestConfig> = {}\n): PerformanceTestTemplate {\n return new PerformanceTestTemplate(\n { name, timeout: maxDurationMs * 2, ...options },\n testFunction,\n maxDurationMs,\n maxMemoryMB\n );\n}\n\n/**\n * Standard test data generators\n */\nexport class TestDataGenerator {\n static generateUUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n static generateMemory(overrides: Partial<Memory> = {}): Memory {\n return {\n id: this.generateUUID(),\n entityId: this.generateUUID(),\n agentId: this.generateUUID(),\n roomId: this.generateUUID(),\n content: {\n text: 'Test message content',\n source: 'test',\n },\n ...overrides,\n } as Memory;\n }\n\n static generateCharacter(overrides: Partial<Character> = {}): Character {\n return {\n name: 'Test Agent',\n bio: 'A test agent for automated testing',\n ...overrides,\n };\n }\n\n static generateContent(overrides: Partial<Content> = {}): Content {\n return {\n text: 'Test content',\n source: 'test',\n ...overrides,\n };\n }\n}\n",
|
|
13
|
-
"/**\n * Simple mock utility for test utils that doesn't depend on bun:test\n */\n\nexport interface MockFunction<T = any> {\n (...args: any[]): T;\n mockReturnValue: (value: T) => MockFunction<T>;\n mockResolvedValue: (value: T) => MockFunction<T>;\n mockRejectedValue: (error: any) => MockFunction<T>;\n mockImplementation: (fn: (...args: any[]) => T) => MockFunction<T>;\n calls: any[][];\n\n // Bun:test compatibility properties\n mock: {\n calls: any[][];\n results: any[];\n };\n}\n\nexport function mock<T = any>(implementation?: (...args: any[]) => T): MockFunction<T> {\n const calls: any[][] = [];\n let mockImplementationFn: ((...args: any[]) => T) | undefined = implementation;\n let mockReturnValueValue: T | undefined;\n let mockResolvedValueValue: T | undefined;\n let mockRejectedValueValue: any | undefined;\n let shouldResolve = false;\n let shouldReject = false;\n\n const fn = function (...args: any[]): T {\n calls.push(args);\n\n if (mockImplementationFn) {\n return mockImplementationFn(...args);\n }\n\n if (shouldReject) {\n return Promise.reject(mockRejectedValueValue) as
|
|
14
|
-
"/**\n * @fileoverview Mock implementations for IAgentRuntime and related interfaces\n *\n * This module provides comprehensive mock implementations for the core runtime interfaces,\n * designed to support both unit testing and integration testing scenarios.\n */\n\nimport type {\n Character,\n IAgentRuntime,\n IDatabaseAdapter,\n Memory,\n State,\n ActionResult,\n UUID,\n} from '@elizaos/core';\nimport { mock } from './mockUtils';\n\n/**\n * Type representing overrides for IAgentRuntime mock creation\n */\nexport type MockRuntimeOverrides = Partial<IAgentRuntime & IDatabaseAdapter>;\n\n/**\n * Create a comprehensive mock of IAgentRuntime with intelligent defaults\n *\n * This function provides a fully-featured mock that implements both IAgentRuntime\n * and IDatabaseAdapter interfaces, ensuring compatibility with all test scenarios.\n *\n * @param overrides - Partial object to override specific methods or properties\n * @returns Complete mock implementation of IAgentRuntime\n *\n * @deprecated Use real runtime testing instead: import { createTestRuntime } from '@elizaos/core/test-utils'\n *\n * @example Legacy Mock Testing (Deprecated)\n * ```typescript\n * import { createMockRuntime } from '@elizaos/core/test-utils';\n *\n * const mockRuntime = createMockRuntime({\n * getSetting: () => 'test-api-key',\n * useModel: () => Promise.resolve('mock response')\n * });\n * ```\n */\nexport function createMockRuntime(overrides: MockRuntimeOverrides = {}): IAgentRuntime {\n // Mock character with sensible defaults\n const defaultCharacter: Character = {\n id: 'test-character-id' as UUID,\n name: 'Test Character',\n username: 'test_character',\n system: 'You are a helpful test assistant.',\n bio: ['A character designed for testing purposes'],\n messageExamples: [],\n postExamples: [],\n topics: ['testing', 'development'],\n knowledge: [],\n plugins: [],\n settings: {\n model: 'gpt-4',\n secrets: {},\n },\n style: {\n all: ['be helpful', 'be concise'],\n chat: ['respond quickly'],\n post: ['be engaging'],\n },\n };\n\n // Mock database connection\n const mockDb = {\n execute: mock().mockResolvedValue([]),\n query: mock().mockResolvedValue([]),\n run: mock().mockResolvedValue({ changes: 1 }),\n all: mock().mockResolvedValue([]),\n get: mock().mockResolvedValue(null),\n };\n\n // Shared state cache reference for methods that read from cache\n const stateCache: Map<string, any> = (overrides.stateCache as Map<string, any>) || new Map();\n\n // Create base runtime mock\n const baseRuntime: IAgentRuntime = {\n // Core Properties\n agentId: 'test-agent-id' as UUID,\n character: overrides.character || defaultCharacter,\n messageService: overrides.messageService ?? null,\n providers: overrides.providers || [],\n actions: overrides.actions || [],\n evaluators: overrides.evaluators || [],\n plugins: overrides.plugins || [],\n services: overrides.services || new Map(),\n events: overrides.events || {},\n fetch: overrides.fetch || null,\n routes: overrides.routes || [],\n logger: overrides.logger || {\n level: 'info',\n trace: () => {},\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n fatal: () => {},\n success: () => {},\n progress: () => {},\n log: () => {},\n clear: () => {},\n child: () => ({}) as any,\n },\n stateCache,\n\n // Database Properties\n db: overrides.db || mockDb,\n\n // Core Runtime Methods\n registerPlugin: mock().mockResolvedValue(undefined),\n initialize: mock().mockResolvedValue(undefined),\n getConnection: mock().mockResolvedValue(mockDb),\n getService: mock().mockReturnValue(null),\n getServicesByType: mock().mockReturnValue([]),\n getAllServices: mock().mockReturnValue(new Map()),\n registerService: mock().mockResolvedValue(undefined),\n getServiceLoadPromise: mock().mockResolvedValue(null),\n getRegisteredServiceTypes: mock().mockReturnValue([]),\n hasService: mock().mockReturnValue(false),\n hasElizaOS(): this is IAgentRuntime & { elizaOS: any } {\n return false;\n },\n registerDatabaseAdapter: mock(),\n setSetting: mock(),\n getSetting: mock((key: string) => {\n const defaultSettings: Record<string, any> = {\n TEST_API_KEY: 'test-api-key',\n ...overrides.character?.settings,\n };\n return defaultSettings[key];\n }),\n getConversationLength: mock().mockReturnValue(10),\n getActionResults: (messageId: UUID): ActionResult[] => {\n const cachedState = stateCache?.get(`${messageId}_action_results`);\n return (cachedState?.data?.actionResults as ActionResult[]) || [];\n },\n processActions: mock().mockResolvedValue(undefined),\n evaluate: mock().mockResolvedValue([]),\n registerProvider: mock(),\n registerAction: mock(),\n registerEvaluator: mock(),\n ensureConnection: mock().mockResolvedValue(undefined),\n ensureConnections: mock().mockResolvedValue(undefined),\n ensureParticipantInRoom: mock().mockResolvedValue(undefined),\n ensureWorldExists: mock().mockResolvedValue(undefined),\n ensureRoomExists: mock().mockResolvedValue(undefined),\n composeState: mock().mockResolvedValue({\n values: {},\n data: {},\n text: '',\n } as State),\n useModel: mock().mockResolvedValue('Mock response') as any,\n registerModel: mock(),\n getModel: mock().mockReturnValue(undefined),\n registerEvent: mock(),\n getEvent: mock().mockReturnValue(undefined),\n emitEvent: mock().mockResolvedValue(undefined),\n registerTaskWorker: mock(),\n getTaskWorker: mock().mockReturnValue(undefined),\n stop: mock().mockResolvedValue(undefined),\n addEmbeddingToMemory: mock().mockImplementation((memory: Memory) => Promise.resolve(memory)),\n queueEmbeddingGeneration: mock().mockResolvedValue(undefined),\n createRunId: mock().mockReturnValue('test-run-id' as UUID),\n startRun: mock().mockReturnValue('test-run-id' as UUID),\n endRun: mock(),\n getCurrentRunId: mock().mockReturnValue('test-run-id' as UUID),\n registerSendHandler: mock(),\n sendMessageToTarget: mock().mockResolvedValue(undefined),\n\n // Database Adapter Methods - Agent Management\n init: mock().mockResolvedValue(undefined),\n isReady: mock().mockResolvedValue(true),\n close: mock().mockResolvedValue(undefined),\n getAgent: mock().mockResolvedValue(null),\n getAgents: mock().mockResolvedValue([]),\n createAgent: mock().mockResolvedValue(true),\n updateAgent: mock().mockResolvedValue(true),\n deleteAgent: mock().mockResolvedValue(true),\n\n // Entity Management\n getEntityById: mock().mockResolvedValue(null),\n getEntitiesByIds: mock().mockResolvedValue([]),\n getEntitiesForRoom: mock().mockResolvedValue([]),\n createEntity: mock().mockResolvedValue('test-entity-id' as UUID),\n createEntities: mock().mockResolvedValue(true),\n updateEntity: mock().mockResolvedValue(undefined),\n\n // Component Management\n getComponent: mock().mockResolvedValue(null),\n getComponents: mock().mockResolvedValue([]),\n createComponent: mock().mockResolvedValue('test-component-id' as UUID),\n updateComponent: mock().mockResolvedValue(undefined),\n deleteComponent: mock().mockResolvedValue(undefined),\n\n // Memory Management\n getMemories: mock().mockResolvedValue([]),\n getAllMemories: overrides.getAllMemories || mock().mockResolvedValue([]),\n clearAllAgentMemories: mock().mockResolvedValue(undefined),\n getMemoryById: mock().mockResolvedValue(null),\n getMemoriesByIds: mock().mockResolvedValue([]),\n getMemoriesByRoomIds: mock().mockResolvedValue([]),\n getMemoriesByWorldId: mock().mockResolvedValue([]),\n getCachedEmbeddings: mock().mockResolvedValue([]),\n log: mock().mockResolvedValue(undefined),\n getLogs: mock().mockResolvedValue([]),\n deleteLog: mock().mockResolvedValue(undefined),\n searchMemories: mock().mockResolvedValue([]),\n createMemory: mock().mockResolvedValue('test-memory-id' as UUID),\n updateMemory: mock().mockResolvedValue(true),\n deleteMemory: mock().mockResolvedValue(undefined),\n deleteManyMemories: mock().mockResolvedValue(undefined),\n deleteAllMemories: mock().mockResolvedValue(undefined),\n countMemories: mock().mockResolvedValue(0),\n ensureEmbeddingDimension: mock().mockResolvedValue(undefined),\n\n // World Management\n createWorld: mock().mockResolvedValue('test-world-id' as UUID),\n getWorld: mock().mockResolvedValue(null),\n removeWorld: mock().mockResolvedValue(undefined),\n getAllWorlds: mock().mockResolvedValue([]),\n updateWorld: mock().mockResolvedValue(undefined),\n\n // Room Management\n getRoom: mock().mockResolvedValue(null),\n getRooms: mock().mockResolvedValue([]),\n getRoomsByIds: mock().mockResolvedValue([]),\n createRoom: mock().mockResolvedValue('test-room-id' as UUID),\n createRooms: mock().mockResolvedValue([]),\n deleteRoom: mock().mockResolvedValue(undefined),\n deleteRoomsByWorldId: mock().mockResolvedValue(undefined),\n updateRoom: mock().mockResolvedValue(undefined),\n getRoomsForParticipant: mock().mockResolvedValue([]),\n getRoomsForParticipants: mock().mockResolvedValue([]),\n getRoomsByWorld: mock().mockResolvedValue([]),\n\n // Participant Management\n addParticipant: mock().mockResolvedValue(true),\n removeParticipant: mock().mockResolvedValue(true),\n addParticipantsRoom: mock().mockResolvedValue(true),\n getParticipantsForEntity: mock().mockResolvedValue([]),\n getParticipantsForRoom: mock().mockResolvedValue([]),\n getParticipantUserState: mock().mockResolvedValue(null),\n setParticipantUserState: mock().mockResolvedValue(undefined),\n\n // Relationship Management\n createRelationship: mock().mockResolvedValue(true),\n updateRelationship: mock().mockResolvedValue(undefined),\n getRelationship: mock().mockResolvedValue(null),\n getRelationships: mock().mockResolvedValue([]),\n\n // Cache Management\n getCache: mock().mockResolvedValue(undefined),\n setCache: mock().mockResolvedValue(true),\n deleteCache: mock().mockResolvedValue(true),\n\n // Task Management\n createTask: mock().mockResolvedValue('test-task-id' as UUID),\n getTasks: mock().mockResolvedValue([]),\n getTask: mock().mockResolvedValue(null),\n getTasksByName: mock().mockResolvedValue([]),\n updateTask: mock().mockResolvedValue(undefined),\n deleteTask: mock().mockResolvedValue(undefined),\n\n // Text Generation (required by IAgentRuntime)\n generateText: mock().mockResolvedValue('Mock generated text'),\n\n // Room Participant Checks\n isRoomParticipant: mock().mockResolvedValue(false),\n\n // Apply overrides\n ...overrides,\n };\n\n return baseRuntime;\n}\n",
|
|
10
|
+
"import type { IDatabaseAdapter, UUID, Memory } from '@elizaos/core';\nimport { logger } from '@elizaos/core';\nimport { v4 as uuidv4 } from 'uuid';\n\n/**\n * Test Database Manager - Creates isolated database instances for testing\n * Each test gets its own database to prevent interference and ensure isolation\n */\nexport class TestDatabaseManager {\n private testDatabases: Map<string, IDatabaseAdapter> = new Map();\n private tempPaths: Set<string> = new Set();\n\n /**\n * Creates an isolated database for testing\n * Uses PostgreSQL for testing when available, falls back to mock database\n */\n async createIsolatedDatabase(testId: string): Promise<IDatabaseAdapter> {\n try {\n logger.debug(\n { src: 'test-utils:test-database', testId },\n `Creating isolated test database for ${testId}`\n );\n\n // Use dynamic import to avoid breaking if PostgreSQL not available\n let adapter: IDatabaseAdapter;\n\n try {\n // Try to use PostgreSQL for testing\n logger.debug(\n { src: 'test-utils:test-database', testId },\n `Attempting to load PostgreSQL adapter for ${testId}`\n );\n\n // Try to use real database for proper testing, but fallback to mock if unavailable\n if (process.env.FORCE_MOCK_DB === 'true') {\n logger.warn(\n { src: 'test-utils:test-database' },\n 'FORCE_MOCK_DB is set - using mock database'\n );\n adapter = this.createMockDatabase(testId);\n } else {\n // Check if SQL plugin is available in the build\n try {\n // Don't import plugin-sql directly to avoid circular dependency\n // Instead, use global registration if available\n interface GlobalWithSqlPlugin {\n __elizaOS_sqlPlugin?: {\n createDatabaseAdapter?: (config: unknown, agentId: UUID) => IDatabaseAdapter;\n };\n }\n const sqlPlugin = (globalThis as GlobalWithSqlPlugin).__elizaOS_sqlPlugin;\n\n if (!sqlPlugin?.createDatabaseAdapter) {\n throw new Error('SQL plugin not available - falling back to mock database');\n }\n\n // Use PostgreSQL test database if available\n const postgresUrl = process.env.TEST_POSTGRES_URL || process.env.POSTGRES_URL;\n if (!postgresUrl) {\n throw new Error('PostgreSQL URL not available - falling back to mock database');\n }\n\n adapter = await sqlPlugin.createDatabaseAdapter(\n {\n postgresUrl,\n },\n '11111111-2222-3333-4444-555555555555' as UUID\n );\n\n logger.debug(\n { src: 'test-utils:test-database', testId },\n `Successfully created PostgreSQL adapter for ${testId}`\n );\n } catch (importError) {\n logger.warn(\n {\n src: 'test-utils:test-database',\n error: importError instanceof Error ? importError.message : String(importError),\n },\n `SQL plugin not available: ${importError instanceof Error ? importError.message : String(importError)} - falling back to mock database`\n );\n adapter = this.createMockDatabase(testId);\n }\n }\n } catch (postgresError) {\n logger.warn(\n {\n src: 'test-utils:test-database',\n error: postgresError instanceof Error ? postgresError.message : String(postgresError),\n },\n `Failed to create PostgreSQL database: ${postgresError instanceof Error ? postgresError.message : String(postgresError)} - falling back to mock database`\n );\n\n // Fall back to mock database for basic testing\n adapter = this.createMockDatabase(testId);\n }\n\n // Initialize the database\n await adapter.init();\n\n // Store for cleanup\n this.testDatabases.set(testId, adapter);\n\n logger.debug(\n { src: 'test-utils:test-database', testId },\n `Successfully created isolated database for ${testId}`\n );\n return adapter;\n } catch (error) {\n logger.error(\n {\n src: 'test-utils:test-database',\n testId,\n error: error instanceof Error ? error.message : String(error),\n },\n `Failed to create test database for ${testId}: ${error instanceof Error ? error.message : String(error)}`\n );\n throw new Error(\n `Test database creation failed: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Creates a minimal mock database adapter for testing when real database unavailable\n * This is a FUNCTIONAL mock that actually stores data in memory\n */\n private createMockDatabase(testId: string): IDatabaseAdapter {\n // In-memory storage for this test instance\n const storage = {\n agents: new Map(),\n entities: new Map(),\n memories: new Map(),\n relationships: new Map(),\n rooms: new Map(),\n participants: new Map(),\n cache: new Map(),\n worlds: new Map(),\n tasks: new Map(),\n logs: new Map(),\n };\n\n const adapter = {\n db: null, // Mock database instance\n\n async initialize() {\n logger.debug(\n { src: 'test-utils:test-database', testId },\n `Initialized mock database for ${testId}`\n );\n },\n\n async init() {\n logger.debug(\n { src: 'test-utils:test-database', testId },\n `Initialized mock database for ${testId}`\n );\n },\n\n async runMigrations() {\n // No-op for mock\n },\n\n async isReady() {\n return true;\n },\n\n async close() {\n storage.agents.clear();\n storage.entities.clear();\n storage.memories.clear();\n storage.relationships.clear();\n storage.rooms.clear();\n storage.participants.clear();\n storage.cache.clear();\n storage.worlds.clear();\n storage.tasks.clear();\n },\n\n async getConnection() {\n return null;\n },\n\n async ensureEmbeddingDimension() {\n // No-op for mock\n },\n\n async getAgent(agentId: any) {\n return storage.agents.get(agentId) || null;\n },\n\n async getAgents() {\n return Array.from(storage.agents.values());\n },\n\n async createAgent(agent: any) {\n const id = agent.id || uuidv4();\n const fullAgent = { ...agent, id };\n storage.agents.set(id, fullAgent);\n return true;\n },\n\n async updateAgent(agentId: any, agent: any) {\n if (storage.agents.has(agentId)) {\n storage.agents.set(agentId, { ...agent, id: agentId });\n return true;\n }\n return false;\n },\n\n async deleteAgent(agentId: any) {\n return storage.agents.delete(agentId);\n },\n\n // Entity operations\n async createEntity(entity: any) {\n const id = entity.id || uuidv4();\n const fullEntity = { ...entity, id };\n storage.entities.set(id, fullEntity);\n return fullEntity;\n },\n\n async createEntities(entities: any[]) {\n for (const entity of entities) {\n const id = entity.id || uuidv4();\n const fullEntity = { ...entity, id };\n storage.entities.set(id, fullEntity);\n }\n return true;\n },\n\n async getEntityById(id: any) {\n return storage.entities.get(id) || null;\n },\n\n async updateEntity(entity: any) {\n if (!entity.id || !storage.entities.has(entity.id)) {\n throw new Error('Entity not found');\n }\n storage.entities.set(entity.id, entity);\n },\n\n async getEntitiesForRoom(roomId: any) {\n const participants = Array.from(storage.participants.values()).filter(\n (p: any) => p.roomId === roomId\n );\n\n const entities = [];\n for (const participant of participants) {\n const entity = storage.entities.get(participant.entityId);\n if (entity) {\n entities.push(entity);\n }\n }\n return entities;\n },\n\n // Memory operations\n async createMemory(memory: any, tableName = 'messages', _unique = false) {\n const id = memory.id || uuidv4();\n const fullMemory = {\n ...memory,\n id,\n createdAt: memory.createdAt || Date.now(),\n };\n\n if (!storage.memories.has(tableName)) {\n storage.memories.set(tableName, new Map());\n }\n\n storage.memories.get(tableName).set(id, fullMemory);\n return id as `${string}-${string}-${string}-${string}-${string}`;\n },\n\n async getMemories(params: any) {\n const tableName = params.tableName || 'messages';\n const tableData = storage.memories.get(tableName);\n\n if (!tableData) {\n return [];\n }\n\n let memories = Array.from(tableData.values()) as Memory[];\n\n // Apply filters\n if (params.roomId) {\n memories = memories.filter((m) => m.roomId === params.roomId);\n }\n\n if (params.entityId) {\n memories = memories.filter((m: any) => m.entityId === params.entityId);\n }\n\n // Sort by creation time (newest first)\n memories.sort((a, b) => (b.createdAt || 0) - (a.createdAt || 0));\n\n // Apply limit\n if (params.count) {\n memories = memories.slice(0, params.count);\n }\n\n return memories;\n },\n\n async searchMemories(params: any) {\n // Simple text search for testing\n const tableName = params.tableName || 'messages';\n const tableData = storage.memories.get(tableName);\n\n if (!tableData) {\n return [];\n }\n\n let memories = Array.from(tableData.values()) as Memory[];\n\n if (params.roomId) {\n memories = memories.filter((m) => m.roomId === params.roomId);\n }\n\n // Simple text matching instead of vector search\n if (params.query) {\n memories = memories.filter((m) =>\n typeof m.content === 'object' &&\n m.content !== null &&\n 'text' in m.content &&\n typeof m.content.text === 'string'\n ? m.content.text.toLowerCase().includes(params.query.toLowerCase())\n : false\n );\n }\n\n return memories.slice(0, params.count || 10);\n },\n\n async getMemoryById(id: any) {\n for (const [_tableName, tableData] of storage.memories) {\n const memory = tableData.get(id);\n if (memory) {\n return memory;\n }\n }\n return null;\n },\n\n async getMemoriesByIds(ids: any, tableName = 'messages') {\n const tableData = storage.memories.get(tableName);\n if (!tableData) {\n return [];\n }\n\n const memories = [];\n for (const id of ids) {\n const memory = tableData.get(id);\n if (memory) {\n memories.push(memory);\n }\n }\n return memories;\n },\n\n async getMemoriesByRoomIds(params: any): Promise<any[]> {\n const tableData = storage.memories.get(params.tableName);\n if (!tableData) {\n return [];\n }\n\n let memories = Array.from(tableData.values()).filter((m: any) =>\n params.roomIds.includes(m.roomId)\n );\n\n if (params.limit) {\n memories = memories.slice(0, params.limit);\n }\n\n return memories;\n },\n\n async getCachedEmbeddings() {\n return []; // Not implemented for basic mock\n },\n\n async log(params: any) {\n // Simple log storage\n if (!storage.logs) {\n storage.logs = new Map();\n }\n const logId = uuidv4();\n storage.logs.set(logId, {\n id: logId,\n ...params,\n createdAt: new Date(),\n });\n },\n\n async getLogs() {\n if (!storage.logs) {\n return [];\n }\n return Array.from(storage.logs.values());\n },\n\n async deleteMemory(memoryId: any, tableName = 'messages') {\n const tableData = storage.memories.get(tableName);\n if (tableData) {\n return tableData.delete(memoryId);\n }\n return false;\n },\n\n // Room operations\n async createRoom(room: any) {\n const id = room.id || uuidv4();\n const fullRoom = { ...room, id };\n storage.rooms.set(id, fullRoom);\n },\n\n async getRoom(roomId: any) {\n return storage.rooms.get(roomId) || null;\n },\n\n async getRooms(worldId: any) {\n return Array.from(storage.rooms.values()).filter(\n (room) => !worldId || room.worldId === worldId\n );\n },\n\n // Participant operations\n async addParticipant(entityId: any, roomId: any) {\n const participantId = `${entityId}-${roomId}`;\n storage.participants.set(participantId, { entityId, roomId });\n return true;\n },\n\n async removeParticipant(entityId: any, roomId: any) {\n const participantId = `${entityId}-${roomId}`;\n return storage.participants.delete(participantId);\n },\n\n async getParticipantsForRoom(roomId: any) {\n return Array.from(storage.participants.values())\n .filter((p: any) => p.roomId === roomId)\n .map((p: any) => p.entityId);\n },\n\n // Cache operations\n async setCache(key: any, value: any) {\n storage.cache.set(key, {\n value,\n createdAt: Date.now(),\n });\n return true;\n },\n\n async getCache(key: any) {\n const cached = storage.cache.get(key);\n return cached ? cached.value : null;\n },\n\n async deleteCache(key: any) {\n return storage.cache.delete(key);\n },\n\n // World operations\n async createWorld(world: any) {\n const id = world.id || uuidv4();\n const fullWorld = { ...world, id };\n storage.worlds.set(id, fullWorld);\n return id as `${string}-${string}-${string}-${string}-${string}`;\n },\n\n async getWorld(worldId: any) {\n return storage.worlds.get(worldId) || null;\n },\n\n async getAllWorlds() {\n return Array.from(storage.worlds.values());\n },\n\n // Task operations\n async createTask(task: any) {\n const id = task.id || uuidv4();\n const fullTask = {\n ...task,\n id,\n updatedAt: task.updatedAt || Date.now(),\n };\n storage.tasks.set(id, fullTask);\n return id as `${string}-${string}-${string}-${string}-${string}`;\n },\n\n async getTasks(params: any) {\n let tasks = Array.from(storage.tasks.values());\n\n if (params.roomId) {\n tasks = tasks.filter((task) => task.roomId === params.roomId);\n }\n\n if (params.tags) {\n tasks = tasks.filter((task: any) =>\n params.tags.some((tag: any) => task.tags.includes(tag))\n );\n }\n\n return tasks;\n },\n\n async deleteTask(taskId: any) {\n storage.tasks.delete(taskId);\n },\n\n // Relationship operations\n async createRelationship(relationship: any) {\n const id = uuidv4();\n const fullRelationship = { ...relationship, id };\n storage.relationships.set(id, fullRelationship);\n return true;\n },\n\n async getRelationships(params: any) {\n let relationships = Array.from(storage.relationships.values());\n\n if (params.entityId) {\n relationships = relationships.filter(\n (rel) =>\n rel.sourceEntityId === params.entityId || rel.targetEntityId === params.entityId\n );\n }\n\n return relationships;\n },\n\n async getEntitiesByIds(ids: any) {\n const entities = [];\n for (const id of ids) {\n const entity = storage.entities.get(id);\n if (entity) {\n entities.push(entity);\n }\n }\n return entities;\n },\n\n async updateMemory(memory: any) {\n const tableName = 'messages'; // Default table\n const tableData = storage.memories.get(tableName);\n if (tableData && tableData.has(memory.id)) {\n const existing = tableData.get(memory.id);\n const updated = { ...existing, ...memory };\n tableData.set(memory.id, updated);\n return updated;\n }\n return null;\n },\n\n async countMemories(roomId: UUID, unique?: boolean, tableName = 'messages') {\n const tableData = storage.memories.get(tableName);\n if (!tableData) {\n return 0;\n }\n\n if (!roomId) {\n return tableData.size;\n }\n\n let memories = Array.from(tableData.values()).filter((m: any) => m.roomId === roomId);\n if (unique) {\n memories = memories.filter((m: any) => m.unique === true);\n }\n return memories.length;\n },\n\n async getMemoriesByEntityIds(entityIds: any, tableName = 'messages') {\n const tableData = storage.memories.get(tableName);\n if (!tableData) {\n return [];\n }\n\n return Array.from(tableData.values()).filter((m: any) => entityIds.includes(m.entityId));\n },\n\n async removeAllMemories(roomId: any, tableName = 'messages') {\n const tableData = storage.memories.get(tableName);\n if (!tableData) {\n return;\n }\n\n const toDelete = [];\n for (const [id, memory] of tableData) {\n if (memory.roomId === roomId) {\n toDelete.push(id);\n }\n }\n\n for (const id of toDelete) {\n tableData.delete(id);\n }\n },\n\n async updateRoom(room: any) {\n if (!room.id || !storage.rooms.has(room.id)) {\n throw new Error('Room not found');\n }\n storage.rooms.set(room.id, room);\n },\n\n async deleteRoom(roomId: any) {\n storage.rooms.delete(roomId);\n },\n\n async getRoomsByIds(roomIds: any) {\n const rooms = [];\n for (const id of roomIds) {\n const room = storage.rooms.get(id);\n if (room) {\n rooms.push(room);\n }\n }\n return rooms;\n },\n\n async createRooms(rooms: any[]) {\n const ids = [];\n for (const room of rooms) {\n const id = room.id || uuidv4();\n const fullRoom = { ...room, id };\n storage.rooms.set(id, fullRoom);\n ids.push(id);\n }\n return ids;\n },\n\n async getRoomsByWorld(worldId: any) {\n return Array.from(storage.rooms.values()).filter((room) => room.worldId === worldId);\n },\n\n async deleteRoomsByWorldId(worldId: any) {\n const toDelete = [];\n for (const [id, room] of storage.rooms) {\n if (room.worldId === worldId) {\n toDelete.push(id);\n }\n }\n for (const id of toDelete) {\n storage.rooms.delete(id);\n }\n },\n\n async getWorlds(params: any) {\n let worlds = Array.from(storage.worlds.values());\n if (params?.agentId) {\n worlds = worlds.filter((w: any) => w.agentId === params.agentId);\n }\n return worlds;\n },\n\n async removeWorld(worldId: any) {\n storage.worlds.delete(worldId);\n },\n\n async updateWorld(world: any) {\n if (!world.id || !storage.worlds.has(world.id)) {\n throw new Error('World not found');\n }\n storage.worlds.set(world.id, world);\n },\n\n async createComponent(component: any) {\n // Store in a components map within the entity\n const entityComponents = storage.entities.get(component.entityId)?.components || [];\n entityComponents.push(component);\n\n const entity = storage.entities.get(component.entityId);\n if (entity) {\n entity.components = entityComponents;\n storage.entities.set(component.entityId, entity);\n }\n\n return true;\n },\n\n async getComponents(entityId: any) {\n const entity = storage.entities.get(entityId);\n return entity?.components || [];\n },\n\n async updateComponent(component: any) {\n const entity = storage.entities.get(component.entityId);\n if (entity && entity.components) {\n const index = entity.components.findIndex((c: any) => c.id === component.id);\n if (index >= 0) {\n entity.components[index] = component;\n storage.entities.set(component.entityId, entity);\n return;\n }\n }\n throw new Error('Component not found');\n },\n\n async deleteComponent(componentId: any) {\n for (const entity of storage.entities.values()) {\n if (entity.components) {\n const index = entity.components.findIndex((c: any) => c.id === componentId);\n if (index >= 0) {\n entity.components.splice(index, 1);\n storage.entities.set(entity.id, entity);\n return;\n }\n }\n }\n },\n\n async getComponent(entityId: any, type: any, worldId?: any, sourceEntityId?: any) {\n const entity = storage.entities.get(entityId);\n if (!entity?.components) {\n return null;\n }\n\n return (\n entity.components.find(\n (c: any) =>\n c.type === type &&\n (!worldId || c.worldId === worldId) &&\n (!sourceEntityId || c.sourceEntityId === sourceEntityId)\n ) || null\n );\n },\n\n async getParticipantsForEntity(entityId: any) {\n return Array.from(storage.participants.values()).filter(\n (p: any) => p.entityId === entityId\n );\n },\n\n async getRoomsForParticipant(entityId: any) {\n return Array.from(storage.participants.values())\n .filter((p: any) => p.entityId === entityId)\n .map((p: any) => p.roomId);\n },\n\n async getRoomsForParticipants(userIds: any[]) {\n const roomIds = new Set();\n for (const participant of storage.participants.values()) {\n if (userIds.includes(participant.entityId)) {\n roomIds.add(participant.roomId);\n }\n }\n return Array.from(roomIds);\n },\n\n async getParticipantUserState(_roomId: any, _entityId: any) {\n // Simple implementation - always return null (no special state)\n return null;\n },\n\n async setParticipantUserState(_roomId: any, _entityId: any, _state: any) {\n // No-op for mock\n },\n\n async getRelationship(params: any) {\n const relationships = Array.from(storage.relationships.values());\n return (\n relationships.find(\n (r: any) =>\n r.sourceEntityId === params.sourceEntityId &&\n r.targetEntityId === params.targetEntityId\n ) || null\n );\n },\n\n async updateRelationship(relationship: any) {\n if (!relationship.id || !storage.relationships.has(relationship.id)) {\n throw new Error('Relationship not found');\n }\n storage.relationships.set(relationship.id, relationship);\n },\n\n async getTask(id: any) {\n return storage.tasks.get(id) || null;\n },\n\n async getTasksByName(name: any) {\n return Array.from(storage.tasks.values()).filter((task: any) => task.name === name);\n },\n\n async updateTask(id: any, updates: any) {\n const task = storage.tasks.get(id);\n if (!task) {\n throw new Error('Task not found');\n }\n const updated = { ...task, ...updates, updatedAt: Date.now() };\n storage.tasks.set(id, updated);\n },\n\n async deleteLog(logId: any) {\n if (storage.logs) {\n storage.logs.delete(logId);\n }\n },\n\n async getMemoriesByWorldId(params: any) {\n const tableName = params.tableName || 'messages';\n const tableData = storage.memories.get(tableName);\n if (!tableData) {\n return [];\n }\n\n let memories = Array.from(tableData.values()).filter(\n (m: any) => m.worldId === params.worldId\n );\n\n if (params.count) {\n memories = memories.slice(0, params.count);\n }\n\n return memories;\n },\n\n async deleteManyMemories(memoryIds: any[]) {\n for (const [_tableName, tableData] of storage.memories) {\n for (const id of memoryIds) {\n tableData.delete(id);\n }\n }\n },\n\n async deleteAllMemories(roomId: any, _tableName: string) {\n const tableData = storage.memories.get(_tableName);\n if (!tableData) {\n return;\n }\n\n const toDelete = [];\n for (const [id, memory] of tableData) {\n if (memory.roomId === roomId) {\n toDelete.push(id);\n }\n }\n\n for (const id of toDelete) {\n tableData.delete(id);\n }\n },\n\n async addParticipantsRoom(entityIds: any[], roomId: any) {\n for (const entityId of entityIds) {\n const participantId = `${entityId}-${roomId}`;\n storage.participants.set(participantId, { entityId, roomId });\n }\n return true;\n },\n\n async isRoomParticipant(roomId: UUID, entityId: UUID) {\n const participantId = `${entityId}-${roomId}`;\n return storage.participants.has(participantId);\n },\n };\n\n // Mock adapter implements IDatabaseAdapter interface\n return adapter as IDatabaseAdapter;\n }\n\n /**\n * Cleanup a specific test database\n */\n async cleanupDatabase(testId: string): Promise<void> {\n try {\n const adapter = this.testDatabases.get(testId);\n if (adapter) {\n await adapter.close();\n this.testDatabases.delete(testId);\n logger.debug(\n { src: 'test-utils:test-database', testId },\n `Cleaned up database for ${testId}`\n );\n }\n } catch (error) {\n logger.warn(\n {\n src: 'test-utils:test-database',\n testId,\n error: error instanceof Error ? error.message : String(error),\n },\n `Error cleaning up database ${testId}: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Cleanup all test databases\n */\n async cleanup(): Promise<void> {\n logger.debug({ src: 'test-utils:test-database' }, 'Cleaning up all test databases');\n\n const cleanupPromises = Array.from(this.testDatabases.keys()).map((testId) =>\n this.cleanupDatabase(testId)\n );\n\n await Promise.all(cleanupPromises);\n\n // Clear tracking sets\n this.tempPaths.clear();\n this.testDatabases.clear();\n\n logger.debug({ src: 'test-utils:test-database' }, 'Successfully cleaned up all test databases');\n }\n\n /**\n * Get statistics about test databases\n */\n getStats(): {\n activeDatabases: number;\n tempPaths: string[];\n memoryUsage: string;\n } {\n return {\n activeDatabases: this.testDatabases.size,\n tempPaths: Array.from(this.tempPaths),\n memoryUsage: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)}MB`,\n };\n }\n}\n\n/**\n * Convenience function to create an isolated test database\n */\nexport async function createTestDatabase(testId?: string): Promise<{\n adapter: IDatabaseAdapter;\n manager: TestDatabaseManager;\n testId: string;\n}> {\n const actualTestId = testId || `test-${uuidv4().slice(0, 8)}`;\n const manager = new TestDatabaseManager();\n const adapter = await manager.createIsolatedDatabase(actualTestId);\n\n return { adapter, manager, testId: actualTestId };\n}\n",
|
|
11
|
+
"import type { IAgentRuntime, GenerateTextParams, TextEmbeddingParams } from '@elizaos/core';\nimport { logger } from '@elizaos/core';\n\n/**\n * Realistic Test Model Provider - Provides configurable but realistic AI model responses\n * Replaces hardcoded mock responses with intelligent, context-aware responses\n */\nexport class TestModelProvider {\n private responses: Map<string, string> = new Map();\n private patterns: Array<{ pattern: RegExp; response: string }> = [];\n private defaultResponse: string;\n private contextHistory: Array<{ prompt: string; response: string }> = [];\n\n constructor(\n defaultResponse: string = 'I understand and will help with that.',\n _options: {\n enableContextMemory?: boolean;\n maxContextHistory?: number;\n } = {}\n ) {\n this.defaultResponse = defaultResponse;\n\n // Add some intelligent default patterns\n this.addDefaultPatterns();\n }\n\n /**\n * Add realistic default response patterns\n */\n private addDefaultPatterns(): void {\n const defaultPatterns = [\n // Greeting patterns\n {\n pattern: /^(hello|hi|hey|greetings)/i,\n response: 'Hello! How can I help you today?',\n },\n {\n pattern: /(good morning|good afternoon|good evening)/i,\n response: 'Good day! What can I assist you with?',\n },\n\n // Task creation patterns\n {\n pattern: /(create|add|make).*?(todo|task|reminder)/i,\n response: \"I'll create that task for you right away. Let me add it to your todo list.\",\n },\n {\n pattern: /(schedule|plan|organize)/i,\n response: \"I'll help you schedule that. Let me organize this for you.\",\n },\n\n // Information requests\n {\n pattern: /(search|find|look|query).*?(for|about)/i,\n response: \"Let me search for that information. I'll look into it right away.\",\n },\n {\n pattern: /(what|how|when|where|why)/i,\n response: \"Let me find that information for you. I'll provide a detailed answer.\",\n },\n\n // Analysis and review\n {\n pattern: /(analyze|review|examine|check)/i,\n response: \"I'll analyze this carefully and provide my assessment with detailed insights.\",\n },\n {\n pattern: /(explain|describe|tell me about)/i,\n response: \"I'll explain that in detail for you. Here's what you need to know.\",\n },\n\n // Action requests\n {\n pattern: /(send|email|message|notify)/i,\n response: \"I'll send that message for you. Let me take care of the communication.\",\n },\n {\n pattern: /(delete|remove|cancel)/i,\n response: \"I'll remove that for you. Let me handle the deletion safely.\",\n },\n\n // File and data operations\n {\n pattern: /(save|store|backup)/i,\n response: \"I'll save that information securely. Your data will be stored properly.\",\n },\n {\n pattern: /(load|open|access)/i,\n response: \"I'll access that resource for you. Let me retrieve the information.\",\n },\n\n // Problem solving\n {\n pattern: /(fix|repair|solve|troubleshoot)/i,\n response:\n \"I'll help troubleshoot this issue. Let me analyze the problem and find a solution.\",\n },\n {\n pattern: /(help|assist|support)/i,\n response: \"I'm here to help! Let me assist you with whatever you need.\",\n },\n\n // Decision making\n {\n pattern: /(should|recommend|suggest|advise)/i,\n response: \"Based on the information provided, I'd recommend the following approach.\",\n },\n {\n pattern: /(choose|select|decide)/i,\n response: 'Let me help you make that decision. Here are the key factors to consider.',\n },\n\n // Confirmation and acknowledgment\n {\n pattern: /(yes|ok|okay|sure|agreed)/i,\n response: \"Understood! I'll proceed with that as requested.\",\n },\n {\n pattern: /(no|stop|cancel|abort)/i,\n response: \"Alright, I'll stop that process. Is there anything else I can help with?\",\n },\n\n // Complex reasoning patterns\n {\n pattern: /(if.*then|because|therefore|since)/i,\n response: 'I understand the logic. Let me work through this step by step.',\n },\n {\n pattern: /(compare|contrast|difference|similar)/i,\n response: \"I'll compare these options and highlight the key differences and similarities.\",\n },\n\n // Error handling\n {\n pattern: /(error|problem|issue|broken|failed)/i,\n response: \"I see there's an issue. Let me investigate the problem and find a solution.\",\n },\n ];\n\n this.patterns.push(...defaultPatterns);\n }\n\n /**\n * Generate text response based on prompt\n */\n async generateText(params: GenerateTextParams): Promise<string> {\n const prompt = params.prompt;\n\n try {\n // Check for exact matches first\n const exactMatch = this.responses.get(prompt);\n if (exactMatch) {\n this.addToHistory(prompt, exactMatch);\n return exactMatch;\n }\n\n // Check pattern matches\n for (const { pattern, response } of this.patterns) {\n if (pattern.test(prompt)) {\n const contextualResponse = this.makeContextual(response, prompt);\n this.addToHistory(prompt, contextualResponse);\n return contextualResponse;\n }\n }\n\n // Generate intelligent default response\n const intelligentResponse = this.generateIntelligentDefault(prompt);\n this.addToHistory(prompt, intelligentResponse);\n return intelligentResponse;\n } catch (error) {\n logger.warn(\n {\n src: 'test-utils:test-models',\n error: error instanceof Error ? error.message : String(error),\n },\n `Error in test model provider: ${error instanceof Error ? error.message : String(error)}`\n );\n return this.defaultResponse;\n }\n }\n\n /**\n * Generate embeddings for text (mock implementation with consistent vectors)\n */\n async generateEmbedding(params: TextEmbeddingParams): Promise<number[]> {\n const text = params.text;\n\n // Create deterministic but realistic embeddings based on text content\n const hash = this.simpleHash(text);\n const embedding = [];\n\n // Generate 1536-dimensional embedding (OpenAI standard)\n for (let i = 0; i < 1536; i++) {\n const value = Math.sin(hash + i) * 0.5; // Values between -0.5 and 0.5\n embedding.push(value);\n }\n\n return embedding;\n }\n\n /**\n * Generate object-structured responses\n */\n async generateObject(params: any): Promise<Record<string, any>> {\n const prompt = params.prompt;\n\n // Parse the prompt to determine what kind of object to return\n if (prompt.includes('thought') || prompt.includes('reasoning')) {\n return {\n thought: 'I need to think about this carefully and provide a helpful response.',\n reasoning: \"Based on the context provided, here's my analysis.\",\n confidence: 0.85,\n };\n }\n\n if (prompt.includes('action') || prompt.includes('execute')) {\n return {\n action: 'RESPOND',\n parameters: {},\n confidence: 0.9,\n };\n }\n\n if (prompt.includes('memory') || prompt.includes('remember')) {\n return {\n shouldStore: true,\n importance: 0.7,\n category: 'conversation',\n };\n }\n\n // Default structured response\n return {\n response: await this.generateText({ prompt, ...params }),\n confidence: 0.8,\n metadata: {\n timestamp: Date.now(),\n model: 'test-model',\n },\n };\n }\n\n /**\n * Make response more contextual based on prompt content\n */\n private makeContextual(response: string, prompt: string): string {\n // Extract key terms from prompt to make response more specific\n const keyTerms = this.extractKeyTerms(prompt);\n\n if (keyTerms.length > 0) {\n // Add specific reference to what was requested\n const term = keyTerms[0];\n return response.replace(\n /that|this|it/g,\n term.length > 20 ? `that ${term.substring(0, 20)}...` : `that ${term}`\n );\n }\n\n return response;\n }\n\n /**\n * Generate intelligent default response based on prompt analysis\n */\n private generateIntelligentDefault(prompt: string): string {\n const lowerPrompt = prompt.toLowerCase();\n\n // Detect question type\n if (lowerPrompt.includes('?')) {\n return \"That's a great question. Let me provide you with a comprehensive answer based on the available information.\";\n }\n\n // Detect command/request\n if (lowerPrompt.match(/^(please|can you|could you|would you)/)) {\n return \"Of course! I'll take care of that for you right away.\";\n }\n\n // Detect complex reasoning\n if (lowerPrompt.length > 200) {\n return 'I understand this is a complex request. Let me work through this systematically and provide you with a detailed response.';\n }\n\n // Detect emotional content\n if (lowerPrompt.match(/(angry|sad|frustrated|excited|happy|worried)/)) {\n return \"I understand how you're feeling. Let me help you work through this thoughtfully.\";\n }\n\n return this.defaultResponse;\n }\n\n /**\n * Extract key terms from prompt for contextualization\n */\n private extractKeyTerms(prompt: string): string[] {\n // Simple keyword extraction - remove common words and extract meaningful terms\n const commonWords = new Set([\n 'the',\n 'a',\n 'an',\n 'and',\n 'or',\n 'but',\n 'in',\n 'on',\n 'at',\n 'to',\n 'for',\n 'of',\n 'with',\n 'by',\n 'i',\n 'you',\n 'he',\n 'she',\n 'it',\n 'we',\n 'they',\n 'this',\n 'that',\n 'these',\n 'those',\n 'is',\n 'are',\n 'was',\n 'were',\n 'be',\n 'been',\n 'being',\n 'have',\n 'has',\n 'had',\n 'do',\n 'does',\n 'did',\n 'will',\n 'would',\n 'could',\n 'should',\n 'can',\n 'may',\n 'might',\n 'must',\n ]);\n\n const words = prompt\n .toLowerCase()\n .replace(/[^\\w\\s]/g, ' ')\n .split(/\\s+/)\n .filter((word) => word.length > 2 && !commonWords.has(word));\n\n return [...new Set(words)].slice(0, 3); // Return unique terms, max 3\n }\n\n /**\n * Simple hash function for deterministic embeddings\n */\n private simpleHash(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return Math.abs(hash);\n }\n\n /**\n * Add interaction to context history\n */\n private addToHistory(prompt: string, response: string): void {\n this.contextHistory.push({ prompt, response });\n\n // Keep only recent history\n if (this.contextHistory.length > 10) {\n this.contextHistory.shift();\n }\n }\n\n /**\n * Set a specific response for a prompt\n */\n setResponse(prompt: string, response: string): void {\n this.responses.set(prompt, response);\n }\n\n /**\n * Add a pattern-based response\n */\n addPattern(pattern: RegExp, response: string): void {\n this.patterns.unshift({ pattern, response }); // Add to beginning for priority\n }\n\n /**\n * Set the default response\n */\n setDefaultResponse(response: string): void {\n this.defaultResponse = response;\n }\n\n /**\n * Clear all custom responses and patterns\n */\n clear(): void {\n this.responses.clear();\n this.patterns.length = 0;\n this.contextHistory.length = 0;\n this.addDefaultPatterns(); // Re-add defaults\n }\n\n /**\n * Get conversation history\n */\n getHistory(): Array<{ prompt: string; response: string }> {\n return [...this.contextHistory];\n }\n}\n\n/**\n * Create a test model provider with specific scenarios\n */\nexport function createTestModelProvider(\n scenarios: Array<{ prompt: RegExp | string; response: string }> = [],\n defaultResponse?: string\n): TestModelProvider {\n const provider = new TestModelProvider(defaultResponse);\n\n for (const scenario of scenarios) {\n if (scenario.prompt instanceof RegExp) {\n provider.addPattern(scenario.prompt, scenario.response);\n } else {\n provider.setResponse(scenario.prompt, scenario.response);\n }\n }\n\n return provider;\n}\n\n/**\n * Create specialized model provider for different types of testing\n */\nexport function createSpecializedModelProvider(\n type: 'conversational' | 'analytical' | 'creative' | 'factual'\n): TestModelProvider {\n const provider = new TestModelProvider();\n\n switch (type) {\n case 'conversational':\n provider.addPattern(\n /.*/,\n \"That's interesting! Let me respond thoughtfully to what you've shared.\"\n );\n break;\n\n case 'analytical':\n provider.addPattern(\n /.*/,\n \"Let me analyze this systematically. Based on the data and context provided, here's my assessment.\"\n );\n break;\n\n case 'creative':\n provider.addPattern(\n /.*/,\n 'What a creative challenge! Let me think outside the box and explore innovative possibilities.'\n );\n break;\n\n case 'factual':\n provider.addPattern(\n /.*/,\n \"Based on factual information and established knowledge, here's an accurate response.\"\n );\n break;\n }\n\n return provider;\n}\n\n/**\n * Model handler wrapper that integrates with ElizaOS runtime\n */\nexport function createModelHandler(provider: TestModelProvider) {\n return async (runtime: IAgentRuntime, params: any): Promise<any> => {\n const modelType = params.modelType || 'TEXT_LARGE';\n\n switch (modelType) {\n case 'TEXT_SMALL':\n case 'TEXT_LARGE':\n return await provider.generateText(params);\n\n case 'TEXT_EMBEDDING':\n return await provider.generateEmbedding(params);\n\n case 'OBJECT_SMALL':\n case 'OBJECT_LARGE':\n return await provider.generateObject(params);\n\n default:\n return await provider.generateText(params);\n }\n };\n}\n\n/**\n * Test scenario builder for common testing patterns\n */\nexport class TestScenarioBuilder {\n private scenarios: Array<{ prompt: RegExp | string; response: string }> = [];\n\n addGreeting(response: string = 'Hello! How can I help you?'): this {\n this.scenarios.push({\n prompt: /^(hello|hi|hey)/i,\n response,\n });\n return this;\n }\n\n addTaskCreation(response: string = \"I'll create that task for you.\"): this {\n this.scenarios.push({\n prompt: /(create|add|make).*?(todo|task)/i,\n response,\n });\n return this;\n }\n\n addSearch(response: string = 'Let me search for that information.'): this {\n this.scenarios.push({\n prompt: /(search|find|look)/i,\n response,\n });\n return this;\n }\n\n addCustom(prompt: RegExp | string, response: string): this {\n this.scenarios.push({ prompt, response });\n return this;\n }\n\n build(defaultResponse?: string): TestModelProvider {\n return createTestModelProvider(this.scenarios, defaultResponse);\n }\n}\n\n/**\n * Convenience function to quickly create test scenarios\n */\nexport function scenarios(): TestScenarioBuilder {\n return new TestScenarioBuilder();\n}\n",
|
|
12
|
+
"/**\n * Standardized testing templates and patterns for ElizaOS\n *\n * This module provides consistent testing patterns, templates, and utilities\n * to ensure testing consistency across all packages.\n */\n\nimport { Character, Content, IAgentRuntime, logger, Memory, Plugin } from '@elizaos/core';\nimport { createTestRuntime } from './realRuntime';\n\n/**\n * Standard test configuration interface\n */\nexport interface TestConfig {\n name: string;\n timeout?: number;\n retries?: number;\n skipCondition?: () => boolean;\n setup?: () => Promise<void>;\n teardown?: () => Promise<void>;\n expectedErrors?: unknown[];\n}\n\n/**\n * Template test result interface\n */\nexport interface TemplateTestResult {\n name: string;\n passed: boolean;\n duration: number;\n error?: Error;\n warnings?: string[];\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Base test template class\n */\nexport abstract class TestTemplate {\n protected config: TestConfig;\n protected runtime?: IAgentRuntime;\n\n constructor(config: TestConfig) {\n this.config = config;\n }\n\n abstract execute(): Promise<TemplateTestResult>;\n\n protected async setup(): Promise<void> {\n if (this.config.setup) {\n await this.config.setup();\n }\n }\n\n protected async teardown(): Promise<void> {\n if (this.config.teardown) {\n await this.config.teardown();\n }\n }\n\n protected shouldSkip(): boolean {\n return this.config.skipCondition?.() ?? false;\n }\n\n public getConfig(): TestConfig {\n return this.config;\n }\n}\n\n/**\n * Unit test template for isolated component testing\n */\nexport class UnitTestTemplate extends TestTemplate {\n private testFunction: () => Promise<void>;\n\n constructor(config: TestConfig, testFunction: () => Promise<void>) {\n super(config);\n this.testFunction = testFunction;\n }\n\n async execute(): Promise<TemplateTestResult> {\n const startTime = Date.now();\n\n if (this.shouldSkip()) {\n return {\n name: this.config.name,\n passed: true,\n duration: 0,\n warnings: ['Test skipped due to skip condition'],\n };\n }\n\n try {\n await this.setup();\n await this.testFunction();\n return {\n name: this.config.name,\n passed: true,\n duration: Date.now() - startTime,\n };\n } catch (error) {\n return {\n name: this.config.name,\n passed: false,\n duration: Date.now() - startTime,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n } finally {\n await this.teardown();\n }\n }\n}\n\n/**\n * Integration test template for real runtime testing\n */\nexport class IntegrationTestTemplate extends TestTemplate {\n private testFunction: (runtime: IAgentRuntime) => Promise<void>;\n private character?: Character;\n\n constructor(\n config: TestConfig,\n testFunction: (runtime: IAgentRuntime) => Promise<void>,\n character?: Character\n ) {\n super(config);\n this.testFunction = testFunction;\n this.character = character;\n }\n\n async execute(): Promise<TemplateTestResult> {\n const startTime = Date.now();\n\n if (this.shouldSkip()) {\n return {\n name: this.config.name,\n passed: true,\n duration: 0,\n warnings: ['Test skipped due to skip condition'],\n };\n }\n\n try {\n await this.setup();\n\n const { runtime } = await createTestRuntime({\n character: this.character,\n });\n this.runtime = runtime;\n\n await this.testFunction(runtime);\n\n return {\n name: this.config.name,\n passed: true,\n duration: Date.now() - startTime,\n };\n } catch (error) {\n return {\n name: this.config.name,\n passed: false,\n duration: Date.now() - startTime,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n } finally {\n await this.teardown();\n }\n }\n}\n\n/**\n * Plugin test template for plugin-specific testing\n */\nexport class PluginTestTemplate extends TestTemplate {\n private plugin: Plugin;\n private testFunction: (runtime: IAgentRuntime, plugin: Plugin) => Promise<void>;\n\n constructor(\n config: TestConfig,\n plugin: Plugin,\n testFunction: (runtime: IAgentRuntime, plugin: Plugin) => Promise<void>\n ) {\n super(config);\n this.plugin = plugin;\n this.testFunction = testFunction;\n }\n\n async execute(): Promise<TemplateTestResult> {\n const startTime = Date.now();\n\n if (this.shouldSkip()) {\n return {\n name: this.config.name,\n passed: true,\n duration: 0,\n warnings: ['Test skipped due to skip condition'],\n };\n }\n\n try {\n await this.setup();\n\n const { runtime } = await createTestRuntime({\n character: {\n name: 'Test Agent',\n bio: 'Test agent for plugin testing',\n plugins: [this.plugin.name],\n },\n plugins: [this.plugin],\n });\n\n await this.testFunction(runtime, this.plugin);\n\n return {\n name: this.config.name,\n passed: true,\n duration: Date.now() - startTime,\n };\n } catch (error) {\n return {\n name: this.config.name,\n passed: false,\n duration: Date.now() - startTime,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n } finally {\n await this.teardown();\n }\n }\n}\n\n/**\n * Error handling test template\n */\nexport class ErrorTestTemplate extends TestTemplate {\n private testFunction: () => Promise<void>;\n private expectedError: string;\n\n constructor(config: TestConfig, testFunction: () => Promise<void>, expectedError: string) {\n super(config);\n this.testFunction = testFunction;\n this.expectedError = expectedError;\n }\n\n async execute(): Promise<TemplateTestResult> {\n const startTime = Date.now();\n\n if (this.shouldSkip()) {\n return {\n name: this.config.name,\n passed: true,\n duration: 0,\n warnings: ['Test skipped due to skip condition'],\n };\n }\n\n try {\n await this.setup();\n await this.testFunction();\n\n // If we reach here, the test should have thrown but didn't\n return {\n name: this.config.name,\n passed: false,\n duration: Date.now() - startTime,\n error: new Error(`Expected ${this.expectedError} error but test completed successfully`),\n };\n } catch (error) {\n const passed = error.category === this.expectedError;\n\n return {\n name: this.config.name,\n passed,\n duration: Date.now() - startTime,\n error: passed ? undefined : error instanceof Error ? error : new Error(String(error)),\n };\n } finally {\n await this.teardown();\n }\n }\n}\n\n/**\n * Performance test template\n */\nexport class PerformanceTestTemplate extends TestTemplate {\n private testFunction: () => Promise<void>;\n private maxDuration: number;\n private maxMemoryMB: number;\n\n constructor(\n config: TestConfig,\n testFunction: () => Promise<void>,\n maxDuration: number,\n maxMemoryMB: number\n ) {\n super(config);\n this.testFunction = testFunction;\n this.maxDuration = maxDuration;\n this.maxMemoryMB = maxMemoryMB;\n }\n\n async execute(): Promise<TemplateTestResult> {\n const startTime = Date.now();\n const startMemory = process.memoryUsage().heapUsed;\n\n if (this.shouldSkip()) {\n return {\n name: this.config.name,\n passed: true,\n duration: 0,\n warnings: ['Test skipped due to skip condition'],\n };\n }\n\n try {\n await this.setup();\n await this.testFunction();\n\n const duration = Date.now() - startTime;\n const memoryUsed = (process.memoryUsage().heapUsed - startMemory) / (1024 * 1024);\n\n const warnings: string[] = [];\n let passed = true;\n\n if (duration > this.maxDuration) {\n warnings.push(`Test exceeded max duration: ${duration}ms > ${this.maxDuration}ms`);\n passed = false;\n }\n\n if (memoryUsed > this.maxMemoryMB) {\n warnings.push(\n `Test exceeded max memory: ${memoryUsed.toFixed(2)}MB > ${this.maxMemoryMB}MB`\n );\n passed = false;\n }\n\n return {\n name: this.config.name,\n passed,\n duration,\n warnings,\n metadata: {\n memoryUsedMB: memoryUsed,\n maxDurationMs: this.maxDuration,\n maxMemoryMB: this.maxMemoryMB,\n },\n };\n } catch (error) {\n return {\n name: this.config.name,\n passed: false,\n duration: Date.now() - startTime,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n } finally {\n await this.teardown();\n }\n }\n}\n\n/**\n * Test suite for organizing related tests\n */\nexport class TestSuite {\n private tests: TestTemplate[] = [];\n private name: string;\n\n constructor(name: string) {\n this.name = name;\n }\n\n addTest(test: TestTemplate): void {\n this.tests.push(test);\n }\n\n async run(): Promise<{\n suiteName: string;\n totalTests: number;\n passed: number;\n failed: number;\n duration: number;\n results: TemplateTestResult[];\n }> {\n const startTime = Date.now();\n const results: TemplateTestResult[] = [];\n\n logger.info(\n { src: 'test-utils:templates', suiteName: this.name },\n `Running test suite: ${this.name}`\n );\n\n for (const test of this.tests) {\n try {\n const result = await test.execute();\n results.push(result);\n\n if (result.passed) {\n logger.info(\n { src: 'test-utils:templates', testName: result.name, duration: result.duration },\n `✓ ${result.name} (${result.duration}ms)`\n );\n } else {\n logger.error(\n {\n src: 'test-utils:templates',\n testName: result.name,\n duration: result.duration,\n error: result.error?.message,\n },\n `✗ ${result.name} (${result.duration}ms): ${result.error?.message}`\n );\n }\n } catch (error) {\n const errorResult: TemplateTestResult = {\n name: `${test.getConfig().name} (execution error)`,\n passed: false,\n duration: 0,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n results.push(errorResult);\n logger.error(\n {\n src: 'test-utils:templates',\n testName: errorResult.name,\n error: errorResult.error?.message,\n },\n `✗ ${errorResult.name}: ${errorResult.error?.message}`\n );\n }\n }\n\n const passed = results.filter((r) => r.passed).length;\n const failed = results.length - passed;\n const duration = Date.now() - startTime;\n\n logger.info(\n {\n src: 'test-utils:templates',\n suiteName: this.name,\n passed,\n total: results.length,\n duration,\n },\n `Test suite ${this.name} completed: ${passed}/${results.length} passed (${duration}ms)`\n );\n\n return {\n suiteName: this.name,\n totalTests: results.length,\n passed,\n failed,\n duration,\n results,\n };\n }\n}\n\n/**\n * Factory functions for creating common test scenarios\n */\n\nexport function createUnitTest(\n name: string,\n testFunction: () => Promise<void>,\n options: Partial<TestConfig> = {}\n): UnitTestTemplate {\n return new UnitTestTemplate({ name, timeout: 5000, ...options }, testFunction);\n}\n\nexport function createIntegrationTest(\n name: string,\n testFunction: (runtime: IAgentRuntime) => Promise<void>,\n character?: Character,\n options: Partial<TestConfig> = {}\n): IntegrationTestTemplate {\n return new IntegrationTestTemplate({ name, timeout: 30000, ...options }, testFunction, character);\n}\n\nexport function createPluginTest(\n name: string,\n plugin: Plugin,\n testFunction: (runtime: IAgentRuntime, plugin: Plugin) => Promise<void>,\n options: Partial<TestConfig> = {}\n): PluginTestTemplate {\n return new PluginTestTemplate({ name, timeout: 30000, ...options }, plugin, testFunction);\n}\n\nexport function createErrorTest(\n name: string,\n testFunction: () => Promise<void>,\n expectedError: any,\n options: Partial<TestConfig> = {}\n): ErrorTestTemplate {\n return new ErrorTestTemplate({ name, timeout: 5000, ...options }, testFunction, expectedError);\n}\n\nexport function createPerformanceTest(\n name: string,\n testFunction: () => Promise<void>,\n maxDurationMs: number,\n maxMemoryMB: number,\n options: Partial<TestConfig> = {}\n): PerformanceTestTemplate {\n return new PerformanceTestTemplate(\n { name, timeout: maxDurationMs * 2, ...options },\n testFunction,\n maxDurationMs,\n maxMemoryMB\n );\n}\n\n/**\n * Standard test data generators\n */\nexport class TestDataGenerator {\n static generateUUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n static generateMemory(overrides: Partial<Memory> = {}): Memory {\n return {\n id: this.generateUUID(),\n entityId: this.generateUUID(),\n agentId: this.generateUUID(),\n roomId: this.generateUUID(),\n content: {\n text: 'Test message content',\n source: 'test',\n },\n ...overrides,\n } as Memory;\n }\n\n static generateCharacter(overrides: Partial<Character> = {}): Character {\n return {\n name: 'Test Agent',\n bio: 'A test agent for automated testing',\n ...overrides,\n };\n }\n\n static generateContent(overrides: Partial<Content> = {}): Content {\n return {\n text: 'Test content',\n source: 'test',\n ...overrides,\n };\n }\n}\n",
|
|
13
|
+
"/**\n * Simple mock utility for test utils that doesn't depend on bun:test\n */\n\nexport interface MockFunction<T = any> {\n (...args: any[]): T;\n mockReturnValue: (value: T) => MockFunction<T>;\n mockResolvedValue: (value: T) => MockFunction<T>;\n mockRejectedValue: (error: any) => MockFunction<T>;\n mockImplementation: (fn: (...args: any[]) => T) => MockFunction<T>;\n calls: any[][];\n\n // Bun:test compatibility properties\n mock: {\n calls: any[][];\n results: any[];\n };\n}\n\nexport function mock<T = any>(implementation?: (...args: any[]) => T): MockFunction<T> {\n const calls: any[][] = [];\n let mockImplementationFn: ((...args: any[]) => T) | undefined = implementation;\n let mockReturnValueValue: T | undefined;\n let mockResolvedValueValue: T | undefined;\n let mockRejectedValueValue: any | undefined;\n let shouldResolve = false;\n let shouldReject = false;\n\n const fn = function (...args: any[]): T {\n calls.push(args);\n\n if (mockImplementationFn) {\n return mockImplementationFn(...args);\n }\n\n if (shouldReject) {\n // When mockRejectedValue is used, T is expected to be a Promise type\n // Cast Promise.reject directly to T (caller knows T is Promise<Something>)\n return Promise.reject(mockRejectedValueValue) as T;\n }\n\n if (shouldResolve) {\n // When mockResolvedValue is used, T is expected to be a Promise type\n // Cast Promise.resolve directly to T (caller knows T is Promise<Something>)\n return Promise.resolve(mockResolvedValueValue) as T;\n }\n\n return mockReturnValueValue as T;\n } as MockFunction<T>;\n\n fn.calls = calls;\n\n // Add bun:test compatibility\n fn.mock = {\n calls,\n results: [],\n };\n\n fn.mockReturnValue = (value: T) => {\n mockReturnValueValue = value;\n shouldResolve = false;\n shouldReject = false;\n return fn;\n };\n\n fn.mockResolvedValue = (value: T) => {\n mockResolvedValueValue = value;\n shouldResolve = true;\n shouldReject = false;\n return fn;\n };\n\n fn.mockRejectedValue = (error: any) => {\n mockRejectedValueValue = error;\n shouldReject = true;\n shouldResolve = false;\n return fn;\n };\n\n fn.mockImplementation = (implementation: (...args: any[]) => T) => {\n mockImplementationFn = implementation;\n return fn;\n };\n\n return fn;\n}\n",
|
|
14
|
+
"/**\n * @fileoverview Mock implementations for IAgentRuntime and related interfaces\n *\n * This module provides comprehensive mock implementations for the core runtime interfaces,\n * designed to support both unit testing and integration testing scenarios.\n */\n\nimport type {\n Character,\n IAgentRuntime,\n IDatabaseAdapter,\n Memory,\n State,\n ActionResult,\n UUID,\n Logger,\n} from '@elizaos/core';\nimport { mock } from './mockUtils';\n\n/**\n * Type representing overrides for IAgentRuntime mock creation\n */\nexport type MockRuntimeOverrides = Partial<IAgentRuntime & IDatabaseAdapter>;\n\n/**\n * Create a comprehensive mock of IAgentRuntime with intelligent defaults\n *\n * This function provides a fully-featured mock that implements both IAgentRuntime\n * and IDatabaseAdapter interfaces, ensuring compatibility with all test scenarios.\n *\n * @param overrides - Partial object to override specific methods or properties\n * @returns Complete mock implementation of IAgentRuntime\n *\n * @deprecated Use real runtime testing instead: import { createTestRuntime } from '@elizaos/core/test-utils'\n *\n * @example Legacy Mock Testing (Deprecated)\n * ```typescript\n * import { createMockRuntime } from '@elizaos/core/test-utils';\n *\n * const mockRuntime = createMockRuntime({\n * getSetting: () => 'test-api-key',\n * useModel: () => Promise.resolve('mock response')\n * });\n * ```\n */\nexport function createMockRuntime(overrides: MockRuntimeOverrides = {}): IAgentRuntime {\n // Mock character with sensible defaults\n const defaultCharacter: Character = {\n id: 'test-character-id' as UUID,\n name: 'Test Character',\n username: 'test_character',\n system: 'You are a helpful test assistant.',\n bio: ['A character designed for testing purposes'],\n messageExamples: [],\n postExamples: [],\n topics: ['testing', 'development'],\n knowledge: [],\n plugins: [],\n settings: {\n model: 'gpt-4',\n secrets: {},\n },\n style: {\n all: ['be helpful', 'be concise'],\n chat: ['respond quickly'],\n post: ['be engaging'],\n },\n };\n\n // Mock database connection\n const mockDb = {\n execute: mock().mockResolvedValue([]),\n query: mock().mockResolvedValue([]),\n run: mock().mockResolvedValue({ changes: 1 }),\n all: mock().mockResolvedValue([]),\n get: mock().mockResolvedValue(null),\n };\n\n // Shared state cache reference for methods that read from cache\n const stateCache: Map<string, any> = (overrides.stateCache as Map<string, any>) || new Map();\n\n // Create base runtime mock\n const baseRuntime: IAgentRuntime = {\n // Core Properties\n agentId: 'test-agent-id' as UUID,\n initPromise: overrides.initPromise || Promise.resolve(),\n character: overrides.character || defaultCharacter,\n messageService: overrides.messageService ?? null,\n providers: overrides.providers || [],\n actions: overrides.actions || [],\n evaluators: overrides.evaluators || [],\n plugins: overrides.plugins || [],\n services: overrides.services || new Map(),\n events: overrides.events || {},\n fetch: overrides.fetch || null,\n routes: overrides.routes || [],\n logger: overrides.logger || {\n level: 'info',\n trace: () => {},\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n fatal: () => {},\n success: () => {},\n progress: () => {},\n log: () => {},\n clear: () => {},\n child: () =>\n ({\n level: 'info',\n trace: () => {},\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n fatal: () => {},\n success: () => {},\n progress: () => {},\n log: () => {},\n clear: () => {},\n child: () => ({}) as Logger,\n }) as Logger,\n },\n stateCache,\n\n // Database Properties\n db: overrides.db || mockDb,\n\n // Core Runtime Methods\n registerPlugin: mock().mockResolvedValue(undefined),\n initialize: mock().mockResolvedValue(undefined),\n getConnection: mock().mockResolvedValue(mockDb),\n getService: mock().mockReturnValue(null),\n getServicesByType: mock().mockReturnValue([]),\n getAllServices: mock().mockReturnValue(new Map()),\n registerService: mock().mockResolvedValue(undefined),\n getServiceLoadPromise: mock().mockResolvedValue(null),\n getRegisteredServiceTypes: mock().mockReturnValue([]),\n hasService: mock().mockReturnValue(false),\n hasElizaOS(): this is IAgentRuntime & { elizaOS: any } {\n return false;\n },\n registerDatabaseAdapter: mock(),\n setSetting: mock(),\n getSetting: mock((key: string) => {\n const defaultSettings: Record<string, any> = {\n TEST_API_KEY: 'test-api-key',\n ...overrides.character?.settings,\n };\n return defaultSettings[key];\n }),\n getConversationLength: mock().mockReturnValue(10),\n getActionResults: (messageId: UUID): ActionResult[] => {\n const cachedState = stateCache?.get(`${messageId}_action_results`);\n return (cachedState?.data?.actionResults as ActionResult[]) || [];\n },\n processActions: mock().mockResolvedValue(undefined),\n evaluate: mock().mockResolvedValue([]),\n registerProvider: mock(),\n registerAction: mock(),\n registerEvaluator: mock(),\n ensureConnection: mock().mockResolvedValue(undefined),\n ensureConnections: mock().mockResolvedValue(undefined),\n ensureParticipantInRoom: mock().mockResolvedValue(undefined),\n ensureWorldExists: mock().mockResolvedValue(undefined),\n ensureRoomExists: mock().mockResolvedValue(undefined),\n composeState: mock().mockResolvedValue({\n values: {},\n data: {},\n text: '',\n } as State),\n useModel: mock().mockResolvedValue('Mock response') as IAgentRuntime['useModel'],\n registerModel: mock(),\n getModel: mock().mockReturnValue(undefined),\n registerEvent: mock(),\n getEvent: mock().mockReturnValue(undefined),\n emitEvent: mock().mockResolvedValue(undefined),\n registerTaskWorker: mock(),\n getTaskWorker: mock().mockReturnValue(undefined),\n stop: mock().mockResolvedValue(undefined),\n addEmbeddingToMemory: mock().mockImplementation((memory: Memory) => Promise.resolve(memory)),\n queueEmbeddingGeneration: mock().mockResolvedValue(undefined),\n createRunId: mock().mockReturnValue('test-run-id' as UUID),\n startRun: mock().mockReturnValue('test-run-id' as UUID),\n endRun: mock(),\n getCurrentRunId: mock().mockReturnValue('test-run-id' as UUID),\n registerSendHandler: mock(),\n sendMessageToTarget: mock().mockResolvedValue(undefined),\n\n // Database Adapter Methods - Agent Management\n init: mock().mockResolvedValue(undefined),\n isReady: mock().mockResolvedValue(true),\n close: mock().mockResolvedValue(undefined),\n getAgent: mock().mockResolvedValue(null),\n getAgents: mock().mockResolvedValue([]),\n createAgent: mock().mockResolvedValue(true),\n updateAgent: mock().mockResolvedValue(true),\n deleteAgent: mock().mockResolvedValue(true),\n\n // Entity Management\n getEntityById: mock().mockResolvedValue(null),\n getEntitiesByIds: mock().mockResolvedValue([]),\n getEntitiesForRoom: mock().mockResolvedValue([]),\n createEntity: mock().mockResolvedValue('test-entity-id' as UUID),\n createEntities: mock().mockResolvedValue(true),\n updateEntity: mock().mockResolvedValue(undefined),\n\n // Component Management\n getComponent: mock().mockResolvedValue(null),\n getComponents: mock().mockResolvedValue([]),\n createComponent: mock().mockResolvedValue('test-component-id' as UUID),\n updateComponent: mock().mockResolvedValue(undefined),\n deleteComponent: mock().mockResolvedValue(undefined),\n\n // Memory Management\n getMemories: mock().mockResolvedValue([]),\n getAllMemories: overrides.getAllMemories || mock().mockResolvedValue([]),\n clearAllAgentMemories: mock().mockResolvedValue(undefined),\n getMemoryById: mock().mockResolvedValue(null),\n getMemoriesByIds: mock().mockResolvedValue([]),\n getMemoriesByRoomIds: mock().mockResolvedValue([]),\n getMemoriesByWorldId: mock().mockResolvedValue([]),\n getCachedEmbeddings: mock().mockResolvedValue([]),\n log: mock().mockResolvedValue(undefined),\n getLogs: mock().mockResolvedValue([]),\n deleteLog: mock().mockResolvedValue(undefined),\n searchMemories: mock().mockResolvedValue([]),\n createMemory: mock().mockResolvedValue('test-memory-id' as UUID),\n updateMemory: mock().mockResolvedValue(true),\n deleteMemory: mock().mockResolvedValue(undefined),\n deleteManyMemories: mock().mockResolvedValue(undefined),\n deleteAllMemories: mock().mockResolvedValue(undefined),\n countMemories: mock().mockResolvedValue(0),\n ensureEmbeddingDimension: mock().mockResolvedValue(undefined),\n\n // World Management\n createWorld: mock().mockResolvedValue('test-world-id' as UUID),\n getWorld: mock().mockResolvedValue(null),\n removeWorld: mock().mockResolvedValue(undefined),\n getAllWorlds: mock().mockResolvedValue([]),\n updateWorld: mock().mockResolvedValue(undefined),\n\n // Room Management\n getRoom: mock().mockResolvedValue(null),\n getRooms: mock().mockResolvedValue([]),\n getRoomsByIds: mock().mockResolvedValue([]),\n createRoom: mock().mockResolvedValue('test-room-id' as UUID),\n createRooms: mock().mockResolvedValue([]),\n deleteRoom: mock().mockResolvedValue(undefined),\n deleteRoomsByWorldId: mock().mockResolvedValue(undefined),\n updateRoom: mock().mockResolvedValue(undefined),\n getRoomsForParticipant: mock().mockResolvedValue([]),\n getRoomsForParticipants: mock().mockResolvedValue([]),\n getRoomsByWorld: mock().mockResolvedValue([]),\n\n // Participant Management\n addParticipant: mock().mockResolvedValue(true),\n removeParticipant: mock().mockResolvedValue(true),\n addParticipantsRoom: mock().mockResolvedValue(true),\n getParticipantsForEntity: mock().mockResolvedValue([]),\n getParticipantsForRoom: mock().mockResolvedValue([]),\n getParticipantUserState: mock().mockResolvedValue(null),\n setParticipantUserState: mock().mockResolvedValue(undefined),\n\n // Relationship Management\n createRelationship: mock().mockResolvedValue(true),\n updateRelationship: mock().mockResolvedValue(undefined),\n getRelationship: mock().mockResolvedValue(null),\n getRelationships: mock().mockResolvedValue([]),\n\n // Cache Management\n getCache: mock().mockResolvedValue(undefined),\n setCache: mock().mockResolvedValue(true),\n deleteCache: mock().mockResolvedValue(true),\n\n // Task Management\n createTask: mock().mockResolvedValue('test-task-id' as UUID),\n getTasks: mock().mockResolvedValue([]),\n getTask: mock().mockResolvedValue(null),\n getTasksByName: mock().mockResolvedValue([]),\n updateTask: mock().mockResolvedValue(undefined),\n deleteTask: mock().mockResolvedValue(undefined),\n\n // Text Generation (required by IAgentRuntime)\n generateText: mock().mockResolvedValue('Mock generated text'),\n\n // Room Participant Checks\n isRoomParticipant: mock().mockResolvedValue(false),\n\n // Apply overrides\n ...overrides,\n };\n\n return baseRuntime;\n}\n",
|
|
15
15
|
"/**\n * @fileoverview Mock implementations for Memory and related interfaces\n *\n * This module provides comprehensive mock implementations for memory objects,\n * content structures, and memory-related operations.\n */\n\nimport type {\n ChannelType,\n Content,\n Media,\n Memory,\n MemoryMetadata,\n MemoryType,\n UUID,\n} from '@elizaos/core';\nimport { ContentType } from '@elizaos/core';\n\n/**\n * Type representing overrides for Memory mock creation\n */\nexport type MockMemoryOverrides = Partial<Memory>;\n\n/**\n * Type representing overrides for Content mock creation\n */\nexport type MockContentOverrides = Partial<Content>;\n\n/**\n * Create a comprehensive mock Memory object with intelligent defaults\n *\n * This function provides a fully-featured memory mock that includes\n * realistic content, metadata, and proper typing.\n *\n * @param overrides - Partial object to override specific properties\n * @returns Complete mock Memory object\n *\n * @example\n * ```typescript\n * import { createMockMemory } from '@elizaos/core/test-utils';\n *\n * const mockMessage = createMockMemory({\n * content: { text: 'Hello, world!' },\n * entityId: 'user-123'\n * });\n * ```\n */\nexport function createMockMemory(overrides: MockMemoryOverrides = {}): Memory {\n const defaultContent: Content = {\n text: 'Test message content',\n source: 'test',\n ...overrides.content,\n };\n\n const defaultMetadata: MemoryMetadata = {\n type: 'message' as MemoryType,\n source: 'test',\n timestamp: Date.now(),\n ...overrides.metadata,\n };\n\n const baseMemory: Memory = {\n id: 'test-memory-id' as UUID,\n entityId: 'test-entity-id' as UUID,\n agentId: 'test-agent-id' as UUID,\n roomId: 'test-room-id' as UUID,\n worldId: 'test-world-id' as UUID,\n content: defaultContent,\n embedding: undefined,\n createdAt: Date.now(),\n unique: true,\n similarity: 1.0,\n metadata: defaultMetadata,\n ...overrides,\n };\n\n return baseMemory;\n}\n\n/**\n * Create a mock Content object with intelligent defaults\n *\n * @param overrides - Partial object to override specific properties\n * @returns Complete mock Content object\n *\n * @example\n * ```typescript\n * import { createMockContent } from '@elizaos/core/test-utils';\n *\n * const mockContent = createMockContent({\n * text: 'Custom message',\n * actions: ['SEND_MESSAGE']\n * });\n * ```\n */\nexport function createMockContent(overrides: MockContentOverrides = {}): Content {\n const baseContent: Content = {\n text: 'Mock content text',\n thought: 'Mock internal thought',\n actions: [],\n providers: [],\n source: 'test',\n target: undefined,\n url: undefined,\n inReplyTo: undefined,\n attachments: [],\n channelType: 'DM' as ChannelType,\n ...overrides,\n };\n\n return baseContent;\n}\n\n/**\n * Create a mock conversation memory (user message)\n *\n * @param text - The message text\n * @param overrides - Additional overrides\n * @returns Mock user message memory\n */\nexport function createMockUserMessage(text: string, overrides: MockMemoryOverrides = {}): Memory {\n return createMockMemory({\n content: {\n text,\n source: 'user',\n },\n metadata: {\n type: 'message' as MemoryType,\n source: 'user',\n },\n ...overrides,\n });\n}\n\n/**\n * Create a mock agent response memory\n *\n * @param text - The response text\n * @param thought - Optional internal thought\n * @param actions - Optional actions executed\n * @param overrides - Additional overrides\n * @returns Mock agent response memory\n */\nexport function createMockAgentResponse(\n text: string,\n thought?: string,\n actions: string[] = [],\n overrides: MockMemoryOverrides = {}\n): Memory {\n return createMockMemory({\n entityId: 'test-agent-id' as UUID,\n content: {\n text,\n thought,\n actions,\n source: 'agent',\n },\n metadata: {\n type: 'message' as MemoryType,\n source: 'agent',\n },\n ...overrides,\n });\n}\n\n/**\n * Create a mock fact memory for knowledge storage\n *\n * @param fact - The factual claim\n * @param confidence - Confidence level (0-1)\n * @param overrides - Additional overrides\n * @returns Mock fact memory\n */\nexport function createMockFact(\n fact: string,\n confidence: number = 0.9,\n overrides: MockMemoryOverrides = {}\n): Memory {\n return createMockMemory({\n content: {\n text: fact,\n source: 'fact_extraction',\n },\n metadata: {\n type: 'fact' as MemoryType,\n confidence,\n source: 'evaluator',\n },\n ...overrides,\n });\n}\n\n/**\n * Create a mock memory with embedding vector\n *\n * @param text - The text content\n * @param dimension - Embedding dimension (default: 1536 for OpenAI)\n * @param overrides - Additional overrides\n * @returns Mock memory with embedding\n */\nexport function createMockMemoryWithEmbedding(\n text: string,\n dimension: number = 1536,\n overrides: MockMemoryOverrides = {}\n): Memory {\n const embedding = new Array(dimension).fill(0).map(() => Math.random());\n\n return createMockMemory({\n content: { text },\n embedding,\n ...overrides,\n });\n}\n\n/**\n * Create a batch of mock conversation memories\n *\n * @param count - Number of memories to create\n * @param roomId - Room ID for all memories\n * @returns Array of mock conversation memories\n */\nexport function createMockConversation(count: number = 5, roomId?: UUID): Memory[] {\n const memories: Memory[] = [];\n const actualRoomId = roomId || ('test-room-id' as UUID);\n\n for (let i = 0; i < count; i++) {\n const isUserMessage = i % 2 === 0;\n const memory = isUserMessage\n ? createMockUserMessage(`User message ${i + 1}`, { roomId: actualRoomId })\n : createMockAgentResponse(`Agent response ${i + 1}`, `Thinking about response ${i + 1}`, [], {\n roomId: actualRoomId,\n });\n\n // Make timestamps sequential\n memory.createdAt = Date.now() - (count - i) * 1000;\n memories.push(memory);\n }\n\n return memories;\n}\n\n/**\n * Create a mock Media attachment\n *\n * @param type - Media type\n * @param url - Media URL\n * @param overrides - Additional overrides\n * @returns Mock Media object\n */\nexport function createMockMedia(\n type: 'image' | 'video' | 'audio' | 'document' = 'image',\n url: string = 'https://example.com/test.jpg',\n overrides: Partial<Media> = {}\n): Media {\n const baseContentTypes = {\n image: ContentType.IMAGE,\n video: ContentType.VIDEO,\n audio: ContentType.AUDIO,\n document: ContentType.DOCUMENT,\n };\n\n return {\n id: 'test-media-id' as UUID,\n url,\n title: `Test ${type}`,\n source: 'test',\n description: `Mock ${type} for testing`,\n text: `Alt text for ${type}`,\n contentType: baseContentTypes[type],\n ...overrides,\n };\n}\n",
|
|
16
|
-
"/**\n * @fileoverview Mock implementations for State and related interfaces\n *\n * This module provides comprehensive mock implementations for state objects,\n * provider results, and state composition utilities.\n */\n\nimport type { ActionResult, ProviderResult, State } from '@elizaos/core';\n\n/**\n * Type representing overrides for State mock creation\n */\nexport type MockStateOverrides = Partial<State>;\n\n/**\n * Type representing overrides for ProviderResult mock creation\n */\nexport type MockProviderResultOverrides = Partial<ProviderResult>;\n\n/**\n * Type representing overrides for ActionResult mock creation\n */\nexport type MockActionResultOverrides = Partial<ActionResult>;\n\n/**\n * Create a comprehensive mock State object with intelligent defaults\n *\n * This function provides a fully-featured state mock that includes\n * realistic data structures and proper typing for agent context.\n *\n * @param overrides - Partial object to override specific properties\n * @returns Complete mock State object\n *\n * @example\n * ```typescript\n * import { createMockState } from '@elizaos/core/test-utils';\n *\n * const mockState = createMockState({\n * values: { currentUser: 'john_doe' },\n * data: { conversationLength: 5 }\n * });\n * ```\n */\nexport function createMockState(overrides: MockStateOverrides = {}): State {\n const baseState: State = {\n // Core state properties\n values: {\n currentTime: new Date().toISOString(),\n agentName: 'Test Agent',\n roomId: 'test-room-id',\n entityId: 'test-entity-id',\n userName: 'TestUser',\n conversationLength: 10,\n lastMessage: 'Hello, how can I help you?',\n ...overrides.values,\n },\n\n data: {\n providers: {\n TIME: { currentTime: new Date().toISOString() },\n CHARACTER: { agentName: 'Test Agent', bio: 'A helpful test assistant' },\n RECENT_MESSAGES: { messageCount: 5, lastSpeaker: 'user' },\n },\n actionResults: [],\n context: 'test conversation',\n ...overrides.data,\n },\n\n text: `[CONTEXT]\nCurrent Time: ${new Date().toISOString()}\nAgent: Test Agent\nUser: TestUser\nRoom: test-room-id\nRecent conversation context available.\n[/CONTEXT]`,\n\n // Additional properties that might be added dynamically\n ...overrides,\n };\n\n // Override text if explicitly provided\n if (overrides.text) {\n baseState.text = overrides.text;\n }\n\n return baseState;\n}\n\n/**\n * Create a mock ProviderResult object\n *\n * @param overrides - Partial object to override specific properties\n * @returns Complete mock ProviderResult object\n *\n * @example\n * ```typescript\n * import { createMockProviderResult } from '@elizaos/core/test-utils';\n *\n * const providerResult = createMockProviderResult({\n * text: '[WEATHER] Current weather is sunny',\n * values: { temperature: 72, conditions: 'sunny' }\n * });\n * ```\n */\nexport function createMockProviderResult(\n overrides: MockProviderResultOverrides = {}\n): ProviderResult {\n const baseResult: ProviderResult = {\n values: {\n mockValue: 'test-value',\n timestamp: Date.now(),\n ...overrides.values,\n },\n data: {\n source: 'mock-provider',\n processed: true,\n ...overrides.data,\n },\n text: '[MOCK PROVIDER]\\nMock provider context information\\n[/MOCK PROVIDER]',\n ...overrides,\n };\n\n return baseResult;\n}\n\n/**\n * Create a mock ActionResult object\n *\n * @param overrides - Partial object to override specific properties\n * @returns Complete mock ActionResult object\n *\n * @example\n * ```typescript\n * import { createMockActionResult } from '@elizaos/core/test-utils';\n *\n * const actionResult = createMockActionResult({\n * text: 'Action completed successfully',\n * values: { success: true, id: 'action-123' }\n * });\n * ```\n */\nexport function createMockActionResult(overrides: MockActionResultOverrides = {}): ActionResult {\n const baseResult: ActionResult = {\n success: true,\n values: {\n success: true,\n actionId: 'test-action-id',\n timestamp: Date.now(),\n ...overrides.values,\n },\n data: {\n executionTime: 150,\n metadata: { source: 'mock-action' },\n ...overrides.data,\n },\n text: 'Mock action executed successfully',\n ...overrides,\n };\n\n return baseResult;\n}\n\n/**\n * Create a state with specific provider context\n *\n * @param providerName - Name of the provider\n * @param providerData - Data from the provider\n * @param overrides - Additional state overrides\n * @returns State with provider context\n */\nexport function createMockStateWithProvider(\n providerName: string,\n providerData: any,\n overrides: MockStateOverrides = {}\n): State {\n return createMockState({\n data: {\n providers: {\n [providerName]: providerData,\n ...
|
|
16
|
+
"/**\n * @fileoverview Mock implementations for State and related interfaces\n *\n * This module provides comprehensive mock implementations for state objects,\n * provider results, and state composition utilities.\n */\n\nimport type { ActionResult, ProviderResult, State } from '@elizaos/core';\n\n/**\n * Type representing overrides for State mock creation\n */\nexport type MockStateOverrides = Partial<State>;\n\n/**\n * Type representing overrides for ProviderResult mock creation\n */\nexport type MockProviderResultOverrides = Partial<ProviderResult>;\n\n/**\n * Type representing overrides for ActionResult mock creation\n */\nexport type MockActionResultOverrides = Partial<ActionResult>;\n\n/**\n * Create a comprehensive mock State object with intelligent defaults\n *\n * This function provides a fully-featured state mock that includes\n * realistic data structures and proper typing for agent context.\n *\n * @param overrides - Partial object to override specific properties\n * @returns Complete mock State object\n *\n * @example\n * ```typescript\n * import { createMockState } from '@elizaos/core/test-utils';\n *\n * const mockState = createMockState({\n * values: { currentUser: 'john_doe' },\n * data: { conversationLength: 5 }\n * });\n * ```\n */\nexport function createMockState(overrides: MockStateOverrides = {}): State {\n const baseState: State = {\n // Core state properties\n values: {\n currentTime: new Date().toISOString(),\n agentName: 'Test Agent',\n roomId: 'test-room-id',\n entityId: 'test-entity-id',\n userName: 'TestUser',\n conversationLength: 10,\n lastMessage: 'Hello, how can I help you?',\n ...overrides.values,\n },\n\n data: {\n providers: {\n TIME: { currentTime: new Date().toISOString() },\n CHARACTER: { agentName: 'Test Agent', bio: 'A helpful test assistant' },\n RECENT_MESSAGES: { messageCount: 5, lastSpeaker: 'user' },\n },\n actionResults: [],\n context: 'test conversation',\n ...overrides.data,\n },\n\n text: `[CONTEXT]\nCurrent Time: ${new Date().toISOString()}\nAgent: Test Agent\nUser: TestUser\nRoom: test-room-id\nRecent conversation context available.\n[/CONTEXT]`,\n\n // Additional properties that might be added dynamically\n ...overrides,\n };\n\n // Override text if explicitly provided\n if (overrides.text) {\n baseState.text = overrides.text;\n }\n\n return baseState;\n}\n\n/**\n * Create a mock ProviderResult object\n *\n * @param overrides - Partial object to override specific properties\n * @returns Complete mock ProviderResult object\n *\n * @example\n * ```typescript\n * import { createMockProviderResult } from '@elizaos/core/test-utils';\n *\n * const providerResult = createMockProviderResult({\n * text: '[WEATHER] Current weather is sunny',\n * values: { temperature: 72, conditions: 'sunny' }\n * });\n * ```\n */\nexport function createMockProviderResult(\n overrides: MockProviderResultOverrides = {}\n): ProviderResult {\n const baseResult: ProviderResult = {\n values: {\n mockValue: 'test-value',\n timestamp: Date.now(),\n ...overrides.values,\n },\n data: {\n source: 'mock-provider',\n processed: true,\n ...overrides.data,\n },\n text: '[MOCK PROVIDER]\\nMock provider context information\\n[/MOCK PROVIDER]',\n ...overrides,\n };\n\n return baseResult;\n}\n\n/**\n * Create a mock ActionResult object\n *\n * @param overrides - Partial object to override specific properties\n * @returns Complete mock ActionResult object\n *\n * @example\n * ```typescript\n * import { createMockActionResult } from '@elizaos/core/test-utils';\n *\n * const actionResult = createMockActionResult({\n * text: 'Action completed successfully',\n * values: { success: true, id: 'action-123' }\n * });\n * ```\n */\nexport function createMockActionResult(overrides: MockActionResultOverrides = {}): ActionResult {\n const baseResult: ActionResult = {\n success: true,\n values: {\n success: true,\n actionId: 'test-action-id',\n timestamp: Date.now(),\n ...overrides.values,\n },\n data: {\n executionTime: 150,\n metadata: { source: 'mock-action' },\n ...overrides.data,\n },\n text: 'Mock action executed successfully',\n ...overrides,\n };\n\n return baseResult;\n}\n\n/**\n * Create a state with specific provider context\n *\n * @param providerName - Name of the provider\n * @param providerData - Data from the provider\n * @param overrides - Additional state overrides\n * @returns State with provider context\n */\nexport function createMockStateWithProvider(\n providerName: string,\n providerData: any,\n overrides: MockStateOverrides = {}\n): State {\n const providersOverride = (overrides.data?.providers ?? {}) as Record<string, unknown>;\n const dataOverride = (overrides.data ?? {}) as Record<string, unknown>;\n return createMockState({\n data: {\n providers: {\n [providerName]: providerData,\n ...providersOverride,\n },\n ...dataOverride,\n },\n text: `[${providerName}]\\n${JSON.stringify(providerData, null, 2)}\\n[/${providerName}]`,\n ...overrides,\n });\n}\n\n/**\n * Create a state with action execution history\n *\n * @param actionResults - Array of action results\n * @param overrides - Additional state overrides\n * @returns State with action history\n */\nexport function createMockStateWithActions(\n actionResults: ActionResult[],\n overrides: MockStateOverrides = {}\n): State {\n return createMockState({\n data: {\n actionResults,\n ...overrides.data,\n },\n values: {\n lastActionSuccess:\n actionResults.length > 0\n ? actionResults[actionResults.length - 1].values?.success\n : undefined,\n actionCount: actionResults.length,\n ...overrides.values,\n },\n ...overrides,\n });\n}\n\n/**\n * Create a state with realistic conversation context\n *\n * @param conversationHistory - Array of recent messages\n * @param currentUser - Current user name\n * @param overrides - Additional state overrides\n * @returns State with conversation context\n */\nexport function createMockConversationState(\n conversationHistory: string[] = ['Hello', 'Hi there!', 'How are you?'],\n currentUser: string = 'TestUser',\n overrides: MockStateOverrides = {}\n): State {\n const recentContext = conversationHistory.slice(-3).join(' | ');\n const providersOverride = (overrides.data?.providers ?? {}) as Record<string, unknown>;\n const dataOverride = (overrides.data ?? {}) as Record<string, unknown>;\n\n return createMockState({\n values: {\n userName: currentUser,\n conversationLength: conversationHistory.length,\n lastMessage: conversationHistory[conversationHistory.length - 1],\n recentContext,\n ...overrides.values,\n },\n data: {\n providers: {\n RECENT_MESSAGES: {\n messages: conversationHistory,\n count: conversationHistory.length,\n lastSpeaker: conversationHistory.length % 2 === 0 ? 'agent' : 'user',\n },\n ...providersOverride,\n },\n ...dataOverride,\n },\n text: `[CONVERSATION CONTEXT]\nUser: ${currentUser}\nRecent messages: ${recentContext}\nMessage count: ${conversationHistory.length}\n[/CONVERSATION CONTEXT]`,\n ...overrides,\n });\n}\n",
|
|
17
17
|
"/**\n * @fileoverview Mock implementations for Character and related interfaces\n *\n * This module provides comprehensive mock implementations for character objects,\n * agent configurations, and personality definitions.\n */\n\nimport type { Character, MessageExample, UUID } from '@elizaos/core';\n\n/**\n * Type representing overrides for Character mock creation\n */\nexport type MockCharacterOverrides = Partial<Character>;\n\n/**\n * Create a comprehensive mock Character with intelligent defaults\n *\n * This function provides a fully-featured character mock that includes\n * realistic personality traits, message examples, and configuration.\n *\n * @param overrides - Partial object to override specific properties\n * @returns Complete mock Character object\n *\n * @example\n * ```typescript\n * import { createMockCharacter } from '@elizaos/core/test-utils';\n *\n * const mockCharacter = createMockCharacter({\n * name: 'CustomAgent',\n * bio: ['A specialized test agent'],\n * plugins: ['@elizaos/plugin-test']\n * });\n * ```\n */\nexport function createMockCharacter(overrides: MockCharacterOverrides = {}): Character {\n const baseCharacter: Character = {\n id: 'test-character-id' as UUID,\n name: 'TestAgent',\n username: 'test_agent',\n system:\n 'You are a helpful test assistant designed for automated testing scenarios. Respond concisely and clearly.',\n\n bio: [\n 'A test agent designed for comprehensive testing scenarios',\n 'Provides consistent, predictable responses for test validation',\n 'Supports all core ElizaOS features and plugin interactions',\n 'Maintains conversation context and handles complex workflows',\n 'Optimized for both unit and integration testing environments',\n ],\n\n messageExamples: [\n [\n {\n name: '{{user}}',\n content: {\n text: 'Hello, how are you?',\n },\n },\n {\n name: 'TestAgent',\n content: {\n text: \"Hello! I'm doing well, thank you for asking. How can I help you today?\",\n },\n },\n ],\n [\n {\n name: '{{user}}',\n content: {\n text: 'Can you help me test this feature?',\n },\n },\n {\n name: 'TestAgent',\n content: {\n text: \"Absolutely! I'm designed specifically to help with testing. What feature would you like to test?\",\n },\n },\n ],\n [\n {\n name: '{{user}}',\n content: {\n text: 'What capabilities do you have?',\n },\n },\n {\n name: 'TestAgent',\n content: {\n text: 'I can assist with testing various ElizaOS features including actions, providers, services, and plugin functionality.',\n },\n },\n ],\n ],\n\n postExamples: [\n 'Testing new ElizaOS features today - everything looking good!',\n 'Just validated another plugin integration - the ecosystem keeps growing',\n 'Reminder: always test your agents thoroughly before deployment',\n 'Quality assurance is key to reliable AI agent systems',\n ],\n\n topics: [\n 'software testing',\n 'quality assurance',\n 'test automation',\n 'agent behavior validation',\n 'plugin integration',\n 'system reliability',\n 'debugging',\n 'performance testing',\n ],\n\n knowledge: [\n 'ElizaOS architecture and patterns',\n 'Test-driven development practices',\n 'Quality assurance methodologies',\n 'Plugin system integration',\n 'Agent behavior patterns',\n 'Debugging and troubleshooting',\n ],\n\n plugins: ['@elizaos/plugin-sql', '@elizaos/plugin-bootstrap'],\n\n settings: {\n model: 'gpt-4',\n temperature: 0.1, // Low temperature for consistent test responses\n maxTokens: 1000,\n secrets: {},\n voice: {\n model: 'en_US-hfc_female-medium',\n },\n embeddingModel: 'text-embedding-ada-002',\n ...overrides.settings,\n },\n\n secrets: {\n TEST_API_KEY: 'test-api-key-value',\n MOCK_SECRET: 'mock-secret-value',\n ...overrides.secrets,\n },\n\n style: {\n all: [\n 'be helpful and supportive',\n 'provide clear and concise responses',\n 'maintain professional tone',\n 'focus on testing and quality assurance',\n 'be thorough in explanations',\n ],\n chat: [\n 'respond promptly',\n 'ask clarifying questions when needed',\n 'provide actionable guidance',\n 'maintain conversational flow',\n ],\n post: [\n 'share testing insights',\n 'promote quality practices',\n 'be informative and educational',\n 'encourage best practices',\n ],\n },\n\n // Apply all overrides\n ...overrides,\n };\n\n return baseCharacter;\n}\n\n/**\n * Create a minimal mock character with only required fields\n *\n * @param name - Character name\n * @param overrides - Additional overrides\n * @returns Minimal mock character\n */\nexport function createMinimalMockCharacter(\n name: string = 'MinimalTestAgent',\n overrides: MockCharacterOverrides = {}\n): Character {\n return createMockCharacter({\n name,\n bio: [`${name} - A minimal test agent`],\n messageExamples: [\n [\n { name: '{{user}}', content: { text: 'Hello' } },\n { name, content: { text: 'Hi there!' } },\n ],\n ],\n topics: ['testing'],\n plugins: [],\n ...overrides,\n });\n}\n\n/**\n * Create a mock character for specific plugin testing\n *\n * @param pluginName - Name of the plugin to test\n * @param overrides - Additional overrides\n * @returns Plugin-specific mock character\n */\nexport function createPluginTestCharacter(\n pluginName: string,\n overrides: MockCharacterOverrides = {}\n): Character {\n return createMockCharacter({\n name: `${pluginName}TestAgent`,\n bio: [`Agent designed to test ${pluginName} plugin functionality`],\n plugins: [pluginName],\n topics: [`${pluginName} testing`, 'plugin integration'],\n knowledge: [`${pluginName} plugin documentation and usage`],\n ...overrides,\n });\n}\n\n/**\n * Create a mock character with extensive conversation examples\n *\n * @param overrides - Additional overrides\n * @returns Character with rich conversation examples\n */\nexport function createRichConversationCharacter(overrides: MockCharacterOverrides = {}): Character {\n const additionalExamples: MessageExample[][] = [\n [\n { name: '{{user}}', content: { text: 'Can you perform an action?' } },\n {\n name: 'TestAgent',\n content: {\n text: 'I can perform various actions based on available plugins.',\n actions: ['TEST_ACTION'],\n },\n },\n ],\n [\n { name: '{{user}}', content: { text: 'What do you think about that?' } },\n {\n name: 'TestAgent',\n content: {\n text: 'Based on our conversation, I think this is a good approach.',\n thought: 'The user is asking for my analysis of the previous topic.',\n },\n },\n ],\n [\n { name: '{{user}}', content: { text: 'Remember this important fact: X equals Y' } },\n {\n name: 'TestAgent',\n content: {\n text: \"I'll remember that X equals Y. This has been noted for future reference.\",\n },\n },\n ],\n ];\n\n return createMockCharacter({\n messageExamples: [...(createMockCharacter().messageExamples || []), ...additionalExamples],\n postExamples: [\n 'Just had an interesting conversation about X and Y relationships',\n 'Learning new facts every day through conversations',\n 'Testing advanced conversation patterns',\n 'Exploring the depths of agent-user interactions',\n ],\n ...overrides,\n });\n}\n\n/**\n * Create multiple mock characters for multi-agent testing\n *\n * @param count - Number of characters to create\n * @param baseName - Base name for characters (will be numbered)\n * @param overrides - Common overrides for all characters\n * @returns Array of mock characters\n */\nexport function createMultipleCharacters(\n count: number = 3,\n baseName: string = 'TestAgent',\n overrides: MockCharacterOverrides = {}\n): Character[] {\n const characters: Character[] = [];\n\n for (let i = 1; i <= count; i++) {\n const character = createMockCharacter({\n name: `${baseName}${i}`,\n username: `${baseName.toLowerCase()}${i}`,\n id: `test-character-${i}-id` as UUID,\n bio: [`${baseName}${i} - Agent ${i} in a multi-agent test scenario`],\n ...overrides,\n });\n\n characters.push(character);\n }\n\n return characters;\n}\n",
|
|
18
18
|
"/**\n * @fileoverview Factory functions for creating complete test scenarios\n *\n * This module provides high-level factory functions that combine multiple\n * mock objects to create realistic testing scenarios.\n */\n\nimport { mock } from './mocks/mockUtils';\nimport type {\n IAgentRuntime,\n Memory,\n State,\n Action,\n Provider,\n Evaluator,\n UUID,\n ActionResult,\n HandlerCallback,\n} from '@elizaos/core';\n\nimport { createMockRuntime } from './mocks/runtime';\nimport { createMockMemory, createMockConversation } from './mocks/memory';\nimport { createMockConversationState } from './mocks/state';\nimport { createMockCharacter } from './mocks/character';\n\n/**\n * Create a complete test environment with runtime, character, and conversation\n *\n * @param options - Configuration options for the test environment\n * @returns Complete test environment\n *\n * @example\n * ```typescript\n * import { createTestEnvironment } from '@elizaos/core/test-utils';\n *\n * const { runtime, character, conversation } = createTestEnvironment({\n * characterName: 'TestBot',\n * conversationLength: 5,\n * roomId: 'test-room-123'\n * });\n * ```\n */\nexport function createTestEnvironment(\n options: {\n characterName?: string;\n conversationLength?: number;\n roomId?: UUID;\n plugins?: string[];\n runtimeOverrides?: any;\n characterOverrides?: any;\n } = {}\n) {\n const {\n characterName = 'TestAgent',\n conversationLength = 5,\n roomId = 'test-room-id' as UUID,\n plugins = [],\n runtimeOverrides = {},\n characterOverrides = {},\n } = options;\n\n // Create character\n const character = createMockCharacter({\n name: characterName,\n plugins,\n ...characterOverrides,\n });\n\n // Create runtime with character\n const runtime = createMockRuntime({\n character,\n ...runtimeOverrides,\n });\n\n // Create conversation history\n const conversation = createMockConversation(conversationLength, roomId);\n\n // Create state with conversation context\n const state = createMockConversationState(\n conversation.map((m) => m.content.text || ''),\n 'TestUser'\n );\n\n return {\n runtime,\n character,\n conversation,\n state,\n roomId,\n };\n}\n\n/**\n * Create a test action with complete mock setup\n *\n * @param name - Action name\n * @param options - Action configuration options\n * @returns Mock action with handlers\n */\nexport function createTestAction(\n name: string,\n options: {\n description?: string;\n validateResult?: boolean;\n handlerResult?: ActionResult;\n examples?: any[];\n } = {}\n): Action {\n const {\n description = `Test action: ${name}`,\n validateResult = true,\n handlerResult = { text: `${name} executed successfully`, success: true },\n examples = [],\n } = options;\n\n return {\n name,\n similes: [`${name.toLowerCase()}`, `${name.replace('_', ' ').toLowerCase()}`],\n description,\n examples,\n\n validate: mock().mockResolvedValue(validateResult),\n\n handler: mock(\n async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n options?: any,\n callback?: HandlerCallback\n ) => {\n // Simulate action execution\n if (callback) {\n await callback({\n text: handlerResult.text || `${name} action executed`,\n thought: `Executing ${name} action`,\n actions: [name],\n });\n }\n return handlerResult;\n }\n ),\n };\n}\n\n/**\n * Create a test provider with complete mock setup\n *\n * @param name - Provider name\n * @param options - Provider configuration options\n * @returns Mock provider\n */\nexport function createTestProvider(\n name: string,\n options: {\n description?: string;\n text?: string;\n values?: Record<string, any>;\n data?: Record<string, any>;\n dynamic?: boolean;\n isPrivate?: boolean;\n } = {}\n): Provider {\n const {\n description = `Test provider: ${name}`,\n text = `[${name}]\\nProvider context information\\n[/${name}]`,\n values = { [`${name.toLowerCase()}Data`]: 'test-value' },\n data = { source: name, timestamp: Date.now() },\n dynamic = false,\n isPrivate = false,\n } = options;\n\n return {\n name,\n description,\n dynamic,\n private: isPrivate,\n\n get: mock().mockResolvedValue({\n text,\n values,\n data,\n }),\n };\n}\n\n/**\n * Create a test evaluator with complete mock setup\n *\n * @param name - Evaluator name\n * @param options - Evaluator configuration options\n * @returns Mock evaluator\n */\nexport function createTestEvaluator(\n name: string,\n options: {\n description?: string;\n alwaysRun?: boolean;\n validateResult?: boolean;\n handlerResult?: any;\n } = {}\n): Evaluator {\n const {\n description = `Test evaluator: ${name}`,\n alwaysRun = false,\n validateResult = true,\n handlerResult = { success: true },\n } = options;\n\n return {\n name,\n description,\n alwaysRun,\n examples: [],\n\n validate: mock().mockResolvedValue(validateResult),\n\n handler: mock(async (_runtime: IAgentRuntime, _message: Memory, _state?: State) => {\n return handlerResult;\n }),\n };\n}\n\n/**\n * Create a complete plugin test scenario\n *\n * @param pluginName - Name of the plugin being tested\n * @param options - Plugin test configuration\n * @returns Complete plugin test scenario\n */\nexport function createPluginTestScenario(\n pluginName: string,\n options: {\n actions?: string[];\n providers?: string[];\n evaluators?: string[];\n services?: string[];\n conversationSteps?: string[];\n } = {}\n) {\n const {\n actions = ['TEST_ACTION'],\n providers = ['TEST_PROVIDER'],\n evaluators = ['TEST_EVALUATOR'],\n conversationSteps = ['Hello', 'How can I test this plugin?'],\n } = options;\n\n // Create test environment\n const { runtime, character, state, roomId } = createTestEnvironment({\n characterName: `${pluginName}TestAgent`,\n plugins: [pluginName],\n });\n\n // Create test components\n const testActions = actions.map((name) => createTestAction(name));\n const testProviders = providers.map((name) => createTestProvider(name));\n const testEvaluators = evaluators.map((name) => createTestEvaluator(name));\n\n // Create conversation for testing\n const conversation = conversationSteps.map((text, index) =>\n createMockMemory({\n content: { text },\n entityId: index % 2 === 0 ? ('user-id' as UUID) : runtime.agentId,\n roomId,\n })\n );\n\n return {\n runtime,\n character,\n state,\n roomId,\n conversation,\n components: {\n actions: testActions,\n providers: testProviders,\n evaluators: testEvaluators,\n },\n // Helper methods for common test operations\n helpers: {\n executeAction: async (actionName: string, message?: Memory) => {\n const action = testActions.find((a) => a.name === actionName);\n const testMessage = message || conversation[0];\n return action?.handler(runtime, testMessage, state);\n },\n getProviderData: async (providerName: string, message?: Memory) => {\n const provider = testProviders.find((p) => p.name === providerName);\n const testMessage = message || conversation[0];\n return provider?.get(runtime, testMessage, state);\n },\n runEvaluator: async (evaluatorName: string, message?: Memory) => {\n const evaluator = testEvaluators.find((e) => e.name === evaluatorName);\n const testMessage = message || conversation[0];\n return evaluator?.handler(runtime, testMessage, state);\n },\n },\n };\n}\n\n/**\n * Create a multi-agent test scenario\n *\n * @param agentCount - Number of agents to create\n * @param options - Multi-agent test configuration\n * @returns Multi-agent test scenario\n */\nexport function createMultiAgentScenario(\n agentCount: number = 2,\n options: {\n sharedRoomId?: UUID;\n agentNames?: string[];\n conversationSteps?: Array<{ agentIndex: number; message: string }>;\n } = {}\n) {\n const {\n sharedRoomId = 'shared-room-id' as UUID,\n agentNames = Array.from({ length: agentCount }, (_, i) => `Agent${i + 1}`),\n conversationSteps = [\n { agentIndex: 0, message: 'Hello from Agent 1' },\n { agentIndex: 1, message: 'Hello from Agent 2' },\n ],\n } = options;\n\n // Create multiple agents\n const agents = agentNames.map((name, index) => {\n const { runtime, character } = createTestEnvironment({\n characterName: name,\n roomId: sharedRoomId,\n });\n return { runtime, character, index };\n });\n\n // Create shared conversation\n const conversation = conversationSteps.map((step) =>\n createMockMemory({\n content: { text: step.message },\n entityId: agents[step.agentIndex].runtime.agentId,\n roomId: sharedRoomId,\n })\n );\n\n return {\n agents,\n sharedRoomId,\n conversation,\n helpers: {\n sendMessage: (agentIndex: number, text: string) => {\n const message = createMockMemory({\n content: { text },\n entityId: agents[agentIndex].runtime.agentId,\n roomId: sharedRoomId,\n });\n conversation.push(message);\n return message;\n },\n getAgentByName: (name: string) => {\n return agents.find((agent) => agent.character.name === name);\n },\n },\n };\n}\n",
|
|
19
|
-
"/**\n * @fileoverview Mock implementations for IDatabaseAdapter and related database interfaces\n *\n * This module provides comprehensive mock implementations for database operations,\n * supporting both unit and integration testing scenarios.\n */\n\nimport type { IDatabaseAdapter, UUID } from '@elizaos/core';\nimport { mock } from './mockUtils';\n\n/**\n * Type representing overrides for IDatabaseAdapter mock creation\n */\nexport type MockDatabaseOverrides = Partial<IDatabaseAdapter>;\n\n/**\n * Create a comprehensive mock of IDatabaseAdapter with intelligent defaults\n *\n * This function provides a fully-featured database adapter mock that implements\n * all database operations with sensible defaults and proper return types.\n *\n * @param overrides - Partial object to override specific methods or properties\n * @returns Complete mock implementation of IDatabaseAdapter\n *\n * @example\n * ```typescript\n * import { createMockDatabase } from '@elizaos/core/test-utils';\n * import { mock } from 'bun:test';\n *\n * const mockDb = createMockDatabase({\n * getMemories: mock().mockResolvedValue([mockMemory]),\n * createMemory: mock().mockResolvedValue('memory-id')\n * });\n * ```\n */\nexport function createMockDatabase(overrides: MockDatabaseOverrides = {}): IDatabaseAdapter {\n // Mock database connection\n const mockConnection = {\n execute: mock().mockResolvedValue([]),\n query: mock().mockResolvedValue([]),\n run: mock().mockResolvedValue({ changes: 1 }),\n all: mock().mockResolvedValue([]),\n get: mock().mockResolvedValue(null),\n };\n\n const baseDatabaseAdapter: IDatabaseAdapter = {\n // Core Database Properties\n db: overrides.db || mockConnection,\n\n // Core Lifecycle Methods\n init: mock().mockResolvedValue(undefined),\n initialize: mock().mockResolvedValue(undefined),\n isReady: mock().mockResolvedValue(true),\n close: mock().mockResolvedValue(undefined),\n getConnection: mock().mockResolvedValue(mockConnection),\n\n // Agent Management\n getAgent: mock().mockResolvedValue(null),\n getAgents: mock().mockResolvedValue([]),\n createAgent: mock().mockResolvedValue(true),\n updateAgent: mock().mockResolvedValue(true),\n deleteAgent: mock().mockResolvedValue(true),\n\n // Entity Management\n getEntitiesByIds: mock().mockResolvedValue([]),\n getEntitiesForRoom: mock().mockResolvedValue([]),\n createEntities: mock().mockResolvedValue(true),\n updateEntity: mock().mockResolvedValue(undefined),\n\n // Component Management\n getComponent: mock().mockResolvedValue(null),\n getComponents: mock().mockResolvedValue([]),\n createComponent: mock().mockResolvedValue(true),\n updateComponent: mock().mockResolvedValue(undefined),\n deleteComponent: mock().mockResolvedValue(undefined),\n\n // Memory Management\n getMemories: mock().mockResolvedValue([]),\n getMemoryById: mock().mockResolvedValue(null),\n getMemoriesByIds: mock().mockResolvedValue([]),\n getMemoriesByRoomIds: mock().mockResolvedValue([]),\n getMemoriesByWorldId: mock().mockResolvedValue([]),\n getCachedEmbeddings: mock().mockResolvedValue([]),\n searchMemories: mock().mockResolvedValue([]),\n createMemory: mock().mockResolvedValue('test-memory-id' as UUID),\n updateMemory: mock().mockResolvedValue(true),\n deleteMemory: mock().mockResolvedValue(undefined),\n deleteManyMemories: mock().mockResolvedValue(undefined),\n deleteAllMemories: mock().mockResolvedValue(undefined),\n countMemories: mock().mockResolvedValue(0),\n ensureEmbeddingDimension: mock().mockResolvedValue(undefined),\n\n // Logging\n log: mock().mockResolvedValue(undefined),\n getLogs: mock().mockResolvedValue([]),\n deleteLog: mock().mockResolvedValue(undefined),\n\n // World Management\n createWorld: mock().mockResolvedValue('test-world-id' as UUID),\n getWorld: mock().mockResolvedValue(null),\n removeWorld: mock().mockResolvedValue(undefined),\n getAllWorlds: mock().mockResolvedValue([]),\n updateWorld: mock().mockResolvedValue(undefined),\n\n // Room Management\n getRoomsByIds: mock().mockResolvedValue([]),\n createRooms: mock().mockResolvedValue([]),\n deleteRoom: mock().mockResolvedValue(undefined),\n deleteRoomsByWorldId: mock().mockResolvedValue(undefined),\n updateRoom: mock().mockResolvedValue(undefined),\n getRoomsForParticipant: mock().mockResolvedValue([]),\n getRoomsForParticipants: mock().mockResolvedValue([]),\n getRoomsByWorld: mock().mockResolvedValue([]),\n\n // Participant Management\n removeParticipant: mock().mockResolvedValue(true),\n addParticipantsRoom: mock().mockResolvedValue(true),\n getParticipantsForEntity: mock().mockResolvedValue([]),\n getParticipantsForRoom: mock().mockResolvedValue([]),\n getParticipantUserState: mock().mockResolvedValue(null),\n setParticipantUserState: mock().mockResolvedValue(undefined),\n\n // Relationship Management\n createRelationship: mock().mockResolvedValue(true),\n updateRelationship: mock().mockResolvedValue(undefined),\n getRelationship: mock().mockResolvedValue(null),\n getRelationships: mock().mockResolvedValue([]),\n\n // Cache Management\n getCache: mock().mockResolvedValue(undefined),\n setCache: mock().mockResolvedValue(true),\n deleteCache: mock().mockResolvedValue(true),\n\n // Task Management\n createTask: mock().mockResolvedValue('test-task-id' as UUID),\n getTasks: mock().mockResolvedValue([]),\n getTask: mock().mockResolvedValue(null),\n getTasksByName: mock().mockResolvedValue([]),\n updateTask: mock().mockResolvedValue(undefined),\n deleteTask: mock().mockResolvedValue(undefined),\n\n // Room Participant Checks\n isRoomParticipant: mock().mockResolvedValue(false),\n\n // Apply overrides\n ...overrides,\n };\n\n return baseDatabaseAdapter;\n}\n\n/**\n * Create a simple mock database connection object\n *\n * @param overrides - Partial object to override specific methods\n * @returns Mock database connection\n */\nexport function createMockDbConnection(overrides: any = {}) {\n return {\n execute: mock().mockResolvedValue([]),\n query: mock().mockResolvedValue([]),\n run: mock().mockResolvedValue({ changes: 1 }),\n all: mock().mockResolvedValue([]),\n get: mock().mockResolvedValue(null),\n prepare: mock().mockReturnValue({\n get: mock().mockReturnValue(null),\n all: mock().mockReturnValue([]),\n run: mock().mockReturnValue({ changes: 1 }),\n }),\n ...overrides,\n };\n}\n",
|
|
20
|
-
"/**\n * @fileoverview Mock implementations for Service and related interfaces\n *\n * This module provides comprehensive mock implementations for services,\n * supporting both unit and integration testing scenarios.\n */\n\nimport { mock } from './mockUtils';\nimport type { Service } from '@elizaos/core';\nimport { ServiceType, ServiceTypeName } from '@elizaos/core';\n/**\n * Type representing overrides for Service mock creation\n */\nexport type MockServiceOverrides = Partial<Service>;\n\n/**\n * Create a comprehensive mock Service with intelligent defaults\n *\n * This function provides a fully-featured service mock that implements\n * the Service interface with sensible defaults and proper lifecycle methods.\n *\n * @param serviceType - Type/category of the service\n * @param overrides - Partial object to override specific methods or properties\n * @returns Complete mock Service implementation\n *\n * @example\n * ```typescript\n * import { createMockService } from '@elizaos/core/test-utils';\n * import { mock } from 'bun:test';\n *\n * const mockService = createMockService(ServiceType.UNKNOWN, {\n * someMethod: mock().mockResolvedValue('custom result')\n * });\n * ```\n */\nexport function createMockService(\n serviceType: ServiceTypeName = ServiceType.UNKNOWN,\n overrides: MockServiceOverrides = {}\n): Service {\n const baseService = {\n // Static properties (would be on the class)\n serviceType,\n\n // Instance properties\n capabilityDescription: `Mock service for testing`,\n config: {\n enabled: true,\n mockData: true,\n ...overrides.config,\n },\n\n // Core lifecycle methods\n stop: mock().mockResolvedValue(undefined),\n\n // Common service methods that might be implemented\n start: mock().mockResolvedValue(undefined),\n initialize: mock().mockResolvedValue(undefined),\n isReady: mock().mockReturnValue(true),\n getStatus: mock().mockReturnValue('active'),\n restart: mock().mockResolvedValue(undefined),\n\n // Runtime property (protected in Service class, but needed for mocks)\n runtime: null,\n\n // Apply overrides\n ...overrides,\n };\n\n return baseService as unknown as Service;\n}\n\n/**\n * Create a mock database service\n *\n * @param overrides - Service-specific overrides\n * @returns Mock database service\n */\nexport function createMockDatabaseService(overrides: MockServiceOverrides = {}): Service {\n return createMockService(ServiceType.UNKNOWN, {\n capabilityDescription: 'Provides database connectivity and operations',\n ...overrides,\n });\n}\n\n/**\n * Create a mock cache service\n *\n * @param overrides - Service-specific overrides\n * @returns Mock cache service\n */\nexport function createMockCacheService(overrides: MockServiceOverrides = {}): Service {\n const cache = new Map();\n\n return createMockService(ServiceType.UNKNOWN, {\n capabilityDescription: 'Provides in-memory caching capabilities',\n ...overrides,\n });\n}\n\n/**\n * Create a mock HTTP service\n *\n * @param overrides - Service-specific overrides\n * @returns Mock HTTP service\n */\nexport function createMockHttpService(overrides: MockServiceOverrides = {}): Service {\n return createMockService(ServiceType.UNKNOWN, {\n capabilityDescription: 'Provides HTTP client capabilities',\n ...overrides,\n });\n}\n\n/**\n * Create a mock blockchain service\n *\n * @param overrides - Service-specific overrides\n * @returns Mock blockchain service\n */\nexport function createMockBlockchainService(overrides: MockServiceOverrides = {}): Service {\n return createMockService('WALLET' as ServiceTypeName, {\n capabilityDescription: 'Provides blockchain wallet and transaction capabilities',\n ...overrides,\n });\n}\n\n/**\n * Create a mock AI model service\n *\n * @param overrides - Service-specific overrides\n * @returns Mock AI model service\n */\nexport function createMockModelService(overrides: MockServiceOverrides = {}): Service {\n return createMockService(ServiceType.UNKNOWN, {\n capabilityDescription: 'Provides AI model inference capabilities',\n ...overrides,\n });\n}\n\n/**\n * Create a mock messaging service\n *\n * @param overrides - Service-specific overrides\n * @returns Mock messaging service\n */\nexport function createMockMessagingService(overrides: MockServiceOverrides = {}): Service {\n return createMockService(ServiceType.UNKNOWN, {\n capabilityDescription: 'Provides messaging platform integration',\n ...overrides,\n });\n}\n\n/**\n * Create a service map with multiple mock services\n *\n * @param services - Array of service configurations\n * @returns Map of service names to mock services\n */\nexport function createMockServiceMap(\n services: Array<{\n name: string;\n type?: ServiceTypeName;\n overrides?: MockServiceOverrides;\n }> = []\n): Map<string, Service> {\n const serviceMap = new Map<string, Service>();\n\n // Default services if none provided\n if (services.length === 0) {\n services = [\n { name: 'database', type: ServiceType.UNKNOWN },\n { name: 'cache', type: ServiceType.UNKNOWN },\n { name: 'http', type: ServiceType.UNKNOWN },\n ];\n }\n\n services.forEach(({ name, type = ServiceType.UNKNOWN, overrides = {} }) => {\n const service = createMockService(type, overrides);\n serviceMap.set(name, service);\n });\n\n return serviceMap;\n}\n\n/**\n * Create a mock service registry for runtime\n *\n * @param runtime - Mock runtime instance\n * @param services - Services to register\n * @returns Updated runtime with registered services\n */\nexport function registerMockServices(\n runtime: any,\n services: Array<{\n name: string;\n type?: ServiceTypeName;\n overrides?: MockServiceOverrides;\n }> = []\n): any {\n const serviceMap = createMockServiceMap(services);\n\n // Update runtime's getService method to return from the service map\n runtime.getService = mock().mockImplementation((serviceName: string) => {\n return serviceMap.get(serviceName) || null;\n });\n\n runtime.services = serviceMap;\n\n return runtime;\n}\n"
|
|
19
|
+
"/**\n * @fileoverview Mock implementations for IDatabaseAdapter and related database interfaces\n *\n * This module provides comprehensive mock implementations for database operations,\n * supporting both unit and integration testing scenarios.\n */\n\nimport type { IDatabaseAdapter, UUID } from '@elizaos/core';\nimport { mock } from './mockUtils';\n\n/**\n * Type representing overrides for IDatabaseAdapter mock creation\n */\nexport type MockDatabaseOverrides = Partial<IDatabaseAdapter>;\n\n/**\n * Create a comprehensive mock of IDatabaseAdapter with intelligent defaults\n *\n * This function provides a fully-featured database adapter mock that implements\n * all database operations with sensible defaults and proper return types.\n *\n * @param overrides - Partial object to override specific methods or properties\n * @returns Complete mock implementation of IDatabaseAdapter\n *\n * @example\n * ```typescript\n * import { createMockDatabase } from '@elizaos/core/test-utils';\n * import { mock } from 'bun:test';\n *\n * const mockDb = createMockDatabase({\n * getMemories: mock().mockResolvedValue([mockMemory]),\n * createMemory: mock().mockResolvedValue('memory-id')\n * });\n * ```\n */\nexport function createMockDatabase(overrides: MockDatabaseOverrides = {}): IDatabaseAdapter {\n // Mock database connection\n const mockConnection = {\n execute: mock().mockResolvedValue([]),\n query: mock().mockResolvedValue([]),\n run: mock().mockResolvedValue({ changes: 1 }),\n all: mock().mockResolvedValue([]),\n get: mock().mockResolvedValue(null),\n };\n\n const baseDatabaseAdapter: IDatabaseAdapter = {\n // Core Database Properties\n db: overrides.db || mockConnection,\n\n // Core Lifecycle Methods\n init: mock().mockResolvedValue(undefined),\n initialize: mock().mockResolvedValue(undefined),\n isReady: mock().mockResolvedValue(true),\n close: mock().mockResolvedValue(undefined),\n getConnection: mock().mockResolvedValue(mockConnection),\n\n // Agent Management\n getAgent: mock().mockResolvedValue(null),\n getAgents: mock().mockResolvedValue([]),\n createAgent: mock().mockResolvedValue(true),\n updateAgent: mock().mockResolvedValue(true),\n deleteAgent: mock().mockResolvedValue(true),\n\n // Entity Management\n getEntitiesByIds: mock().mockResolvedValue([]),\n getEntitiesForRoom: mock().mockResolvedValue([]),\n createEntities: mock().mockResolvedValue(true),\n updateEntity: mock().mockResolvedValue(undefined),\n\n // Component Management\n getComponent: mock().mockResolvedValue(null),\n getComponents: mock().mockResolvedValue([]),\n createComponent: mock().mockResolvedValue(true),\n updateComponent: mock().mockResolvedValue(undefined),\n deleteComponent: mock().mockResolvedValue(undefined),\n\n // Memory Management\n getMemories: mock().mockResolvedValue([]),\n getMemoryById: mock().mockResolvedValue(null),\n getMemoriesByIds: mock().mockResolvedValue([]),\n getMemoriesByRoomIds: mock().mockResolvedValue([]),\n getMemoriesByWorldId: mock().mockResolvedValue([]),\n getCachedEmbeddings: mock().mockResolvedValue([]),\n searchMemories: mock().mockResolvedValue([]),\n createMemory: mock().mockResolvedValue('test-memory-id' as UUID),\n updateMemory: mock().mockResolvedValue(true),\n deleteMemory: mock().mockResolvedValue(undefined),\n deleteManyMemories: mock().mockResolvedValue(undefined),\n deleteAllMemories: mock().mockResolvedValue(undefined),\n countMemories: mock().mockResolvedValue(0),\n ensureEmbeddingDimension: mock().mockResolvedValue(undefined),\n\n // Logging\n log: mock().mockResolvedValue(undefined),\n getLogs: mock().mockResolvedValue([]),\n deleteLog: mock().mockResolvedValue(undefined),\n\n // World Management\n createWorld: mock().mockResolvedValue('test-world-id' as UUID),\n getWorld: mock().mockResolvedValue(null),\n removeWorld: mock().mockResolvedValue(undefined),\n getAllWorlds: mock().mockResolvedValue([]),\n updateWorld: mock().mockResolvedValue(undefined),\n\n // Room Management\n getRoomsByIds: mock().mockResolvedValue([]),\n createRooms: mock().mockResolvedValue([]),\n deleteRoom: mock().mockResolvedValue(undefined),\n deleteRoomsByWorldId: mock().mockResolvedValue(undefined),\n updateRoom: mock().mockResolvedValue(undefined),\n getRoomsForParticipant: mock().mockResolvedValue([]),\n getRoomsForParticipants: mock().mockResolvedValue([]),\n getRoomsByWorld: mock().mockResolvedValue([]),\n\n // Participant Management\n removeParticipant: mock().mockResolvedValue(true),\n addParticipantsRoom: mock().mockResolvedValue(true),\n getParticipantsForEntity: mock().mockResolvedValue([]),\n getParticipantsForRoom: mock().mockResolvedValue([]),\n getParticipantUserState: mock().mockResolvedValue(null),\n setParticipantUserState: mock().mockResolvedValue(undefined),\n\n // Relationship Management\n createRelationship: mock().mockResolvedValue(true),\n updateRelationship: mock().mockResolvedValue(undefined),\n getRelationship: mock().mockResolvedValue(null),\n getRelationships: mock().mockResolvedValue([]),\n\n // Cache Management\n getCache: mock().mockResolvedValue(undefined),\n setCache: mock().mockResolvedValue(true),\n deleteCache: mock().mockResolvedValue(true),\n\n // Task Management\n createTask: mock().mockResolvedValue('test-task-id' as UUID),\n getTasks: mock().mockResolvedValue([]),\n getTask: mock().mockResolvedValue(null),\n getTasksByName: mock().mockResolvedValue([]),\n updateTask: mock().mockResolvedValue(undefined),\n deleteTask: mock().mockResolvedValue(undefined),\n\n // Room Participant Checks\n isRoomParticipant: mock().mockResolvedValue(false),\n\n // Apply overrides\n ...overrides,\n };\n\n return baseDatabaseAdapter;\n}\n\n/**\n * Alias for createMockDatabase for backwards compatibility\n */\nexport const createMockDatabaseAdapter = createMockDatabase;\n\n/**\n * Create a simple mock database connection object\n *\n * @param overrides - Partial object to override specific methods\n * @returns Mock database connection\n */\nexport function createMockDbConnection(overrides: any = {}) {\n return {\n execute: mock().mockResolvedValue([]),\n query: mock().mockResolvedValue([]),\n run: mock().mockResolvedValue({ changes: 1 }),\n all: mock().mockResolvedValue([]),\n get: mock().mockResolvedValue(null),\n prepare: mock().mockReturnValue({\n get: mock().mockReturnValue(null),\n all: mock().mockReturnValue([]),\n run: mock().mockReturnValue({ changes: 1 }),\n }),\n ...overrides,\n };\n}\n",
|
|
20
|
+
"/**\n * @fileoverview Mock implementations for Service and related interfaces\n *\n * This module provides comprehensive mock implementations for services,\n * supporting both unit and integration testing scenarios.\n */\n\nimport { mock } from './mockUtils';\nimport type { Service } from '@elizaos/core';\nimport { ServiceType, ServiceTypeName } from '@elizaos/core';\n/**\n * Type representing overrides for Service mock creation\n */\nexport type MockServiceOverrides = Partial<Service>;\n\n/**\n * Create a comprehensive mock Service with intelligent defaults\n *\n * This function provides a fully-featured service mock that implements\n * the Service interface with sensible defaults and proper lifecycle methods.\n *\n * @param serviceType - Type/category of the service\n * @param overrides - Partial object to override specific methods or properties\n * @returns Complete mock Service implementation\n *\n * @example\n * ```typescript\n * import { createMockService } from '@elizaos/core/test-utils';\n * import { mock } from 'bun:test';\n *\n * const mockService = createMockService(ServiceType.UNKNOWN, {\n * someMethod: mock().mockResolvedValue('custom result')\n * });\n * ```\n */\nexport function createMockService(\n serviceType: ServiceTypeName = ServiceType.UNKNOWN,\n overrides: MockServiceOverrides = {}\n): Service {\n const baseService = {\n // Static properties (would be on the class)\n serviceType,\n\n // Instance properties\n capabilityDescription: `Mock service for testing`,\n config: {\n enabled: true,\n mockData: true,\n ...overrides.config,\n },\n\n // Core lifecycle methods\n stop: mock().mockResolvedValue(undefined),\n\n // Common service methods that might be implemented\n start: mock().mockResolvedValue(undefined),\n initialize: mock().mockResolvedValue(undefined),\n isReady: mock().mockReturnValue(true),\n getStatus: mock().mockReturnValue('active'),\n restart: mock().mockResolvedValue(undefined),\n\n // Runtime property (protected in Service class, but needed for mocks)\n runtime: null,\n\n // Apply overrides\n ...overrides,\n };\n\n // Mock service implements Service interface with all required methods\n return baseService as unknown as Service;\n}\n\n/**\n * Create a mock database service\n *\n * @param overrides - Service-specific overrides\n * @returns Mock database service\n */\nexport function createMockDatabaseService(overrides: MockServiceOverrides = {}): Service {\n return createMockService(ServiceType.UNKNOWN, {\n capabilityDescription: 'Provides database connectivity and operations',\n ...overrides,\n });\n}\n\n/**\n * Create a mock cache service\n *\n * @param overrides - Service-specific overrides\n * @returns Mock cache service\n */\nexport function createMockCacheService(overrides: MockServiceOverrides = {}): Service {\n const cache = new Map();\n\n return createMockService(ServiceType.UNKNOWN, {\n capabilityDescription: 'Provides in-memory caching capabilities',\n ...overrides,\n });\n}\n\n/**\n * Create a mock HTTP service\n *\n * @param overrides - Service-specific overrides\n * @returns Mock HTTP service\n */\nexport function createMockHttpService(overrides: MockServiceOverrides = {}): Service {\n return createMockService(ServiceType.UNKNOWN, {\n capabilityDescription: 'Provides HTTP client capabilities',\n ...overrides,\n });\n}\n\n/**\n * Create a mock blockchain service\n *\n * @param overrides - Service-specific overrides\n * @returns Mock blockchain service\n */\nexport function createMockBlockchainService(overrides: MockServiceOverrides = {}): Service {\n return createMockService('WALLET' as ServiceTypeName, {\n capabilityDescription: 'Provides blockchain wallet and transaction capabilities',\n ...overrides,\n });\n}\n\n/**\n * Create a mock AI model service\n *\n * @param overrides - Service-specific overrides\n * @returns Mock AI model service\n */\nexport function createMockModelService(overrides: MockServiceOverrides = {}): Service {\n return createMockService(ServiceType.UNKNOWN, {\n capabilityDescription: 'Provides AI model inference capabilities',\n ...overrides,\n });\n}\n\n/**\n * Create a mock messaging service\n *\n * @param overrides - Service-specific overrides\n * @returns Mock messaging service\n */\nexport function createMockMessagingService(overrides: MockServiceOverrides = {}): Service {\n return createMockService(ServiceType.UNKNOWN, {\n capabilityDescription: 'Provides messaging platform integration',\n ...overrides,\n });\n}\n\n/**\n * Create a service map with multiple mock services\n *\n * @param services - Array of service configurations\n * @returns Map of service names to mock services\n */\nexport function createMockServiceMap(\n services: Array<{\n name: string;\n type?: ServiceTypeName;\n overrides?: MockServiceOverrides;\n }> = []\n): Map<string, Service> {\n const serviceMap = new Map<string, Service>();\n\n // Default services if none provided\n if (services.length === 0) {\n services = [\n { name: 'database', type: ServiceType.UNKNOWN },\n { name: 'cache', type: ServiceType.UNKNOWN },\n { name: 'http', type: ServiceType.UNKNOWN },\n ];\n }\n\n services.forEach(({ name, type = ServiceType.UNKNOWN, overrides = {} }) => {\n const service = createMockService(type, overrides);\n serviceMap.set(name, service);\n });\n\n return serviceMap;\n}\n\n/**\n * Create a mock service registry for runtime\n *\n * @param runtime - Mock runtime instance\n * @param services - Services to register\n * @returns Updated runtime with registered services\n */\nexport function registerMockServices(\n runtime: any,\n services: Array<{\n name: string;\n type?: ServiceTypeName;\n overrides?: MockServiceOverrides;\n }> = []\n): any {\n const serviceMap = createMockServiceMap(services);\n\n // Update runtime's getService method to return from the service map\n runtime.getService = mock().mockImplementation((serviceName: string) => {\n return serviceMap.get(serviceName) || null;\n });\n\n runtime.services = serviceMap;\n\n return runtime;\n}\n"
|
|
21
21
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
22
|
+
"mappings": "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",
|
|
23
|
+
"debugId": "C509FBC37EBDC1A464756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|