@ainetwork/adk-provider-memory-mongodb 0.4.0 → 0.5.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.
Files changed (54) hide show
  1. package/dist/{chunk-GPOFS7ZT.js → chunk-2XJ6S2W5.js} +12 -7
  2. package/dist/chunk-2XJ6S2W5.js.map +1 -0
  3. package/dist/{chunk-5CCEN7NK.js → chunk-QULDFKGZ.js} +5 -1
  4. package/dist/chunk-QULDFKGZ.js.map +1 -0
  5. package/dist/chunk-RC275GLE.js +70 -0
  6. package/dist/chunk-RC275GLE.js.map +1 -0
  7. package/dist/{chunk-NGLXQZLX.js → chunk-SJ2FHHN6.js} +13 -10
  8. package/dist/chunk-SJ2FHHN6.js.map +1 -0
  9. package/dist/index.cjs +322 -75
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.d.cts +11 -3
  12. package/dist/index.d.ts +11 -3
  13. package/dist/index.js +232 -59
  14. package/dist/index.js.map +1 -1
  15. package/dist/models/messages.model.cjs +4 -0
  16. package/dist/models/messages.model.cjs.map +1 -1
  17. package/dist/models/messages.model.d.cts +14 -1
  18. package/dist/models/messages.model.d.ts +14 -1
  19. package/dist/models/messages.model.js +1 -1
  20. package/dist/models/threads.model.cjs +11 -6
  21. package/dist/models/threads.model.cjs.map +1 -1
  22. package/dist/models/threads.model.d.cts +22 -9
  23. package/dist/models/threads.model.d.ts +22 -9
  24. package/dist/models/threads.model.js +1 -1
  25. package/dist/models/user-workflow.model.cjs +105 -0
  26. package/dist/models/user-workflow.model.cjs.map +1 -0
  27. package/dist/models/user-workflow.model.d.cts +92 -0
  28. package/dist/models/user-workflow.model.d.ts +92 -0
  29. package/dist/models/user-workflow.model.js +9 -0
  30. package/dist/models/{workflow.model.cjs → workflow-template.model.cjs} +18 -15
  31. package/dist/models/workflow-template.model.cjs.map +1 -0
  32. package/dist/models/workflow-template.model.d.cts +60 -0
  33. package/dist/models/workflow-template.model.d.ts +60 -0
  34. package/dist/models/workflow-template.model.js +9 -0
  35. package/dist/models/workflow-template.model.js.map +1 -0
  36. package/implements/base.memory.ts +130 -12
  37. package/implements/thread.memory.ts +48 -22
  38. package/implements/user-workflow.memory.ts +87 -0
  39. package/implements/workflow-template.memory.ts +69 -0
  40. package/models/messages.model.ts +7 -0
  41. package/models/threads.model.ts +16 -9
  42. package/models/user-workflow.model.ts +91 -0
  43. package/models/workflow-template.model.ts +58 -0
  44. package/package.json +3 -3
  45. package/dist/chunk-5CCEN7NK.js.map +0 -1
  46. package/dist/chunk-GPOFS7ZT.js.map +0 -1
  47. package/dist/chunk-NGLXQZLX.js.map +0 -1
  48. package/dist/models/workflow.model.cjs.map +0 -1
  49. package/dist/models/workflow.model.d.cts +0 -54
  50. package/dist/models/workflow.model.d.ts +0 -54
  51. package/dist/models/workflow.model.js +0 -9
  52. package/implements/workflow.memory.ts +0 -78
  53. package/models/workflow.model.ts +0 -46
  54. /package/dist/models/{workflow.model.js.map → user-workflow.model.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../index.ts","../implements/base.memory.ts","../models/agent.model.ts","../implements/agent.memory.ts","../models/intent.model.ts","../implements/intent.memory.ts","../models/threads.model.ts","../models/messages.model.ts","../implements/thread.memory.ts","../models/workflow.model.ts","../implements/workflow.memory.ts"],"sourcesContent":["export { MongoDBMemory } from \"./implements/base.memory\";\nexport type { MongoDBMemoryConfig } from \"./implements/base.memory\";","import { IAgentMemory, IIntentMemory, IMemory, IThreadMemory, IWorkflowMemory } from \"@ainetwork/adk/modules\";\nimport mongoose from \"mongoose\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\nimport { MongoDBAgent } from \"./agent.memory\";\nimport { MongoDBIntent } from \"./intent.memory\";\nimport { MongoDBThread } from \"./thread.memory\";\nimport { MongoDBWorkflow } from \"./workflow.memory\";\n\nexport interface MongoDBMemoryConfig {\n uri: string;\n maxReconnectAttempts?: number;\n reconnectInterval?: number;\n maxPoolSize?: number;\n serverSelectionTimeoutMS?: number;\n socketTimeoutMS?: number;\n connectTimeoutMS?: number;\n operationTimeoutMS?: number; // Timeout for database operations\n}\n\nexport class MongoDBMemory implements IMemory {\n private static instance: MongoDBMemory;\n private uri: string;\n private connected: boolean = false;\n private reconnectAttempts: number = 0;\n private maxReconnectAttempts: number;\n private reconnectInterval: number;\n private reconnecting: boolean = false;\n private connectionConfig: mongoose.ConnectOptions;\n private eventListenersSetup: boolean = false;\n private operationTimeoutMS: number;\n\n private agentMemory: MongoDBAgent;\n private intentMemory: MongoDBIntent;\n private threadMemory: MongoDBThread;\n private workflowMemory: MongoDBWorkflow;\n\n constructor(config: string | MongoDBMemoryConfig) {\n const cfg = typeof config === 'string' ? { uri: config } : config;\n\n this.uri = cfg.uri;\n this.maxReconnectAttempts = cfg.maxReconnectAttempts ?? 5;\n this.reconnectInterval = cfg.reconnectInterval ?? 5000;\n this.operationTimeoutMS = cfg.operationTimeoutMS ?? 10000; // Default 10 seconds\n this.connectionConfig = {\n maxPoolSize: cfg.maxPoolSize ?? 1,\n serverSelectionTimeoutMS: cfg.serverSelectionTimeoutMS ?? 30000,\n socketTimeoutMS: cfg.socketTimeoutMS ?? 45000,\n connectTimeoutMS: cfg.connectTimeoutMS ?? 30000,\n bufferCommands: false,\n };\n\n if (!MongoDBMemory.instance) {\n MongoDBMemory.instance = this;\n this.setupMongooseEventListeners();\n } else {\n // Use existing instance's connection state\n this.connected = MongoDBMemory.instance.connected;\n this.operationTimeoutMS = MongoDBMemory.instance.operationTimeoutMS;\n }\n\n\t\tthis.agentMemory = new MongoDBAgent(\n\t\t\tthis.executeWithRetry.bind(this),\n\t\t\tthis.getOperationTimeout.bind(this)\n\t\t);\n\n\t\tthis.threadMemory = new MongoDBThread(\n\t\t\tthis.executeWithRetry.bind(this),\n\t\t\tthis.getOperationTimeout.bind(this)\n\t\t);\n\n\t\tthis.intentMemory = new MongoDBIntent(\n\t\t\tthis.executeWithRetry.bind(this),\n\t\t\tthis.getOperationTimeout.bind(this)\n\t\t);\n\n\t\tthis.workflowMemory = new MongoDBWorkflow(\n\t\t\tthis.executeWithRetry.bind(this),\n\t\t\tthis.getOperationTimeout.bind(this)\n\t\t);\n }\n\n public getAgentMemory(): IAgentMemory {\n return this.agentMemory;\n }\n\n public getThreadMemory(): IThreadMemory {\n return this.threadMemory;\n }\n\n public getIntentMemory(): IIntentMemory {\n return this.intentMemory;\n }\n\n public getWorkflowMemory(): IWorkflowMemory {\n return this.workflowMemory;\n }\n\n private setupMongooseEventListeners(): void {\n if (this.eventListenersSetup) return;\n\n this.eventListenersSetup = true;\n\n mongoose.connection.on(\"connected\", () => {\n this.connected = true;\n this.reconnectAttempts = 0;\n this.reconnecting = false;\n loggers.agent.info(\"MongoDB connected successfully\");\n });\n\n mongoose.connection.on(\"disconnected\", () => {\n this.connected = false;\n loggers.agent.warn(\"MongoDB disconnected\");\n this.handleDisconnection();\n });\n\n mongoose.connection.on(\"error\", (error) => {\n this.connected = false;\n loggers.agent.error(\"MongoDB connection error:\", error);\n this.handleDisconnection();\n });\n\n mongoose.connection.on(\"reconnected\", () => {\n this.connected = true;\n this.reconnectAttempts = 0;\n this.reconnecting = false;\n loggers.agent.info(\"MongoDB reconnected successfully\");\n });\n }\n\n private async handleDisconnection(): Promise<void> {\n if (this.reconnecting) {\n return;\n }\n\n this.reconnecting = true;\n\n while (this.reconnectAttempts < this.maxReconnectAttempts && !this.isConnected) {\n this.reconnectAttempts++;\n loggers.agent.info(\n `Attempting to reconnect to MongoDB (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`\n );\n\n try {\n await mongoose.connect(this.uri, this.connectionConfig);\n this.connected = true;\n this.reconnectAttempts = 0;\n this.reconnecting = false;\n loggers.agent.info(\"MongoDB reconnection successful\");\n return;\n } catch (error) {\n loggers.agent.error(\n `Reconnection attempt ${this.reconnectAttempts} failed:`,\n error\n );\n\n if (this.reconnectAttempts < this.maxReconnectAttempts) {\n await new Promise((resolve) =>\n setTimeout(resolve, this.reconnectInterval)\n );\n }\n }\n }\n\n this.reconnecting = false;\n\n if (!this.isConnected) {\n loggers.agent.error(\n `Failed to reconnect to MongoDB after ${this.maxReconnectAttempts} attempts`\n );\n }\n }\n\n public async connect(): Promise<void> {\n if (this.connected) {\n return;\n }\n\n try {\n await mongoose.connect(this.uri, this.connectionConfig);\n this.connected = true;\n this.reconnectAttempts = 0;\n } catch (error) {\n loggers.agent.error(\"Failed to connect to MongoDB:\", error);\n throw error;\n }\n }\n\n public async disconnect(): Promise<void> {\n if (!this.isConnected) {\n return;\n }\n\n try {\n await mongoose.disconnect();\n this.connected = false;\n } catch (error) {\n loggers.agent.error(\"Failed to disconnect from MongoDB:\", error);\n throw error;\n }\n }\n\n public isConnected(): boolean {\n return this.connected;\n }\n\n private async ensureConnection(): Promise<void> {\n if (!this.isConnected && !this.reconnecting) {\n await this.connect();\n }\n\n // Wait for reconnection if in progress\n const maxWaitTime = 30000; // 30 seconds\n const startTime = Date.now();\n while (this.reconnecting && Date.now() - startTime < maxWaitTime) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (!this.isConnected) {\n throw new Error(\"MongoDB is not connected and reconnection failed\");\n }\n }\n\n /**\n * Get the operation timeout in milliseconds\n */\n protected getOperationTimeout(): number {\n return this.operationTimeoutMS;\n }\n\n /**\n * Execute a database operation with automatic retry on connection errors\n * Note: Use mongoose's maxTimeMS option in queries for timeout control\n */\n protected async executeWithRetry<T>(\n operation: () => Promise<T>,\n operationName: string = \"Database operation\"\n ): Promise<T> {\n await this.ensureConnection();\n\n try {\n return await operation();\n } catch (error: any) {\n // Check if it's a timeout error from MongoDB\n if (error.code === 50 || error.message?.includes(\"operation exceeded time limit\")) {\n loggers.agent.error(`${operationName} exceeded time limit`);\n throw error;\n }\n\n // Check if it's a connection-related error\n if (\n error.name === \"MongoNetworkError\" ||\n error.name === \"MongoServerError\" ||\n error.message?.includes(\"connection\") ||\n error.message?.includes(\"disconnect\")\n ) {\n loggers.agent.warn(\n `${operationName} failed due to connection issue, attempting reconnection...`\n );\n\n await this.ensureConnection();\n\n // Retry the operation once after reconnection\n try {\n return await operation();\n } catch (retryError: any) {\n loggers.agent.error(`${operationName} failed after retry:`, retryError);\n throw retryError;\n }\n }\n\n // If it's not a connection error, just throw it\n throw error;\n }\n }\n}\n","import { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\nexport const AgentObjectSchema = new Schema(\n\t{\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tunique: true,\n\t\t},\n\t\tprompt: {\n\t\t\ttype: String,\n\t\t},\n\t},\n);\n\nexport interface AgentDocument extends Document {\n\tid: string;\n\tprompt: string;\n}\n\nexport const AgentModel = mongoose.model<AgentDocument>(\"Agent\", AgentObjectSchema);\n","import { IAgentMemory } from \"@ainetwork/adk/modules\";\nimport { AgentModel } from \"../models/agent.model\";\n\nexport type ExecuteWithRetryFn = <T>(\n operation: () => Promise<T>,\n operationName?: string\n) => Promise<T>;\n\nexport type GetOperationTimeoutFn = () => number;\n\ntype PromptDocument = {\n id: string;\n prompt: string;\n}\n\nexport class MongoDBAgent implements IAgentMemory {\n private executeWithRetry: ExecuteWithRetryFn;\n private getOperationTimeout: GetOperationTimeoutFn;\n\n constructor(\n executeWithRetry: ExecuteWithRetryFn,\n getOperationTimeout: GetOperationTimeoutFn\n ) {\n this.executeWithRetry = executeWithRetry;\n this.getOperationTimeout = getOperationTimeout;\n }\n\n public async getAgentPrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"agent_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getAgentPrompt()\");\n };\n \n public async updateAgentPrompt(prompt: string): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await AgentModel.updateOne({\n id: \"agent_prompt\",\n }, { \"prompt\": prompt }, { upsert: true }).maxTimeMS(timeout);\n }, \"updateAgentPrompt()\");\n };\n\n public async getAggregatePrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"aggregate_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getAggregatePrompt()\");\n };\n\n public async getGenerateTitlePrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"generate_title_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getGenerateTitlePrompt()\");\n };\n\n public async getSingleTriggerPrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"single_trigger_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getSingleTriggerPrompt()\");\n };\n\n public async getMultiTriggerPrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"multi_trigger_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getMultiTriggerPrompt()\");\n };\n\n public async getToolSelectPrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"tool_select_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getToolSelectPrompt()\");\n };\n\n public async getPIIDetectPrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"pii_detect_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getPIIDetectPrompt()\");\n };\n\n public async getPIIFilterPrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"pii_filter_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getPIIFilterPrompt()\");\n };\n}\n","import { Intent } from \"@ainetwork/adk/types/memory\";\nimport mongoose, { type Document, Schema } from \"mongoose\";\n\nconst IntentObjectSchema = new Schema(\n\t{\n\t\tid: { \n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t\tunique: true,\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tprompt: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t\tstatus: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttriggeringSentences: {\n\t\t\ttype: [String],\n\t\t\trequired: false,\n\t\t},\n\t\ttags: {\n\t\t\ttype: [String],\n\t\t\trequired: false,\n\t\t},\n\t},\n);\n\nexport interface IntentDocument extends Omit<Document, 'id'>, Omit<Intent, 'id'> {\n\tid: string;\n}\n\nexport const IntentModel = mongoose.model<IntentDocument>(\"Intent\", IntentObjectSchema);","import type { Intent } from \"@ainetwork/adk/types/memory\";\nimport { IIntentMemory } from \"@ainetwork/adk/modules\";\nimport { IntentModel } from \"../models/intent.model\";\n\nexport type ExecuteWithRetryFn = <T>(\n operation: () => Promise<T>,\n operationName?: string\n) => Promise<T>;\n\nexport type GetOperationTimeoutFn = () => number;\n\nexport class MongoDBIntent implements IIntentMemory {\n private executeWithRetry: ExecuteWithRetryFn;\n private getOperationTimeout: GetOperationTimeoutFn;\n\n constructor(\n executeWithRetry: ExecuteWithRetryFn,\n getOperationTimeout: GetOperationTimeoutFn\n ) {\n this.executeWithRetry = executeWithRetry;\n this.getOperationTimeout = getOperationTimeout;\n }\n\n public async getIntent(intentId: string): Promise<Intent | undefined> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const intent = await IntentModel.findOne({ id: intentId })\n .maxTimeMS(timeout)\n .lean<Intent>();\n return intent || undefined;\n }, `getIntent(${intentId})`);\n };\n\n public async getIntentByName(intentName: string): Promise<Intent | undefined> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const intent = await IntentModel.findOne({ name: intentName })\n .maxTimeMS(timeout)\n .lean<Intent>();\n return intent || undefined;\n }, `getIntentByName(${intentName})`);\n }\n\n public async saveIntent(intent: Intent): Promise<void> {\n return this.executeWithRetry(async () => {\n await IntentModel.create(intent);\n }, `saveIntent(${intent.id})`);\n };\n\n public async updateIntent(intentId: string, intent: Intent): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await IntentModel.updateOne({\n id: intentId,\n }, intent).maxTimeMS(timeout);\n }, `updateIntent(${intentId})`);\n };\n\n public async deleteIntent(intentId: string): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await IntentModel.deleteOne({ id: intentId }).maxTimeMS(timeout);\n }, `deleteIntent(${intentId})`);\n };\n\n public async listIntents(): Promise<Intent[]> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const intents = await IntentModel.find()\n .maxTimeMS(timeout)\n .lean<Intent[]>();\n return intents;\n }, `listIntents()`);\n };\n}\n","import { ThreadType } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\nexport const ThreadObjectSchema = new Schema(\n\t{\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tenum: Object.values(ThreadType),\n\t\t\trequired: true,\n\t\t},\n\t\tthreadId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t\tcreated_at: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tupdated_at: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t}\n\t},\n);\n\nexport interface ThreadDocument extends Document {\n\ttype: ThreadType;\n\tthreadId: string;\n\tuserId: string;\n\ttitle: string;\n\tcreated_at: number;\n\tupdated_at: number;\n}\n\nexport const ThreadModel = mongoose.model<ThreadDocument>(\"Thread\", ThreadObjectSchema);\n","import { MessageRole } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\n// MessageContentObject schema\nexport const MessageContentObjectSchema = new Schema(\n\t{\n\t\ttype: { type: String, required: true },\n\t\tparts: { type: [Schema.Types.Mixed], required: true },\n\t},\n\t{ _id: false },\n);\n\n// MessageObject schema - 개별 문서로 저장\nexport const MessageObjectSchema = new Schema(\n\t{\n\t\tmessageId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tthreadId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\trole: {\n\t\t\ttype: String,\n\t\t\tenum: Object.values(MessageRole),\n\t\t\trequired: true,\n\t\t},\n\t\tcontent: {\n\t\t\ttype: MessageContentObjectSchema,\n\t\t\trequired: true,\n\t\t},\n\t\ttimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tmetadata: {\n\t\t\ttype: Schema.Types.Mixed,\n\t\t\tdefault: {},\n\t\t},\n\t},\n);\n\n// Message Document interface\nexport interface MessageDocument extends Document {\n\tmessageId: string;\n\tthreadId: string;\n\tuserId: string;\n\trole: MessageRole;\n\tcontent: {\n\t\ttype: string;\n\t\tparts: any[];\n\t};\n\ttimestamp: number;\n\tmetadata?: { [key: string]: unknown };\n}\n\nexport const MessageModel = mongoose.model<MessageDocument>(\"Message\", MessageObjectSchema);","import type { MessageObject, ThreadMetadata, ThreadObject, ThreadType } from \"@ainetwork/adk/types/memory\";\nimport { MessageRole } from \"@ainetwork/adk/types/memory\";\nimport { IThreadMemory } from \"@ainetwork/adk/modules\";\nimport { ThreadDocument, ThreadModel } from \"../models/threads.model\";\nimport { MessageDocument, MessageModel } from \"../models/messages.model\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\n\nexport type ExecuteWithRetryFn = <T>(\n operation: () => Promise<T>,\n operationName?: string\n) => Promise<T>;\n\nexport type GetOperationTimeoutFn = () => number;\n\nexport class MongoDBThread implements IThreadMemory {\n private executeWithRetry: ExecuteWithRetryFn;\n private getOperationTimeout: GetOperationTimeoutFn;\n\n constructor(\n executeWithRetry: ExecuteWithRetryFn,\n getOperationTimeout: GetOperationTimeoutFn\n ) {\n this.executeWithRetry = executeWithRetry;\n this.getOperationTimeout = getOperationTimeout;\n }\n\n public async getThread(\n userId: string,\n threadId: string\n ): Promise<ThreadObject | undefined> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const thread = await ThreadModel.findOne({ threadId, userId }).maxTimeMS(timeout);\n const messages = await MessageModel.find({ threadId, userId })\n .sort({ timestamp: 1 })\n .maxTimeMS(timeout);\n\n if (!thread) return undefined;\n\n loggers.agent.debug(`Found ${messages.length} messages for thread ${threadId}`);\n\n const threadObject: ThreadObject = {\n threadId: thread.threadId,\n userId: thread.userId,\n type: thread.type as ThreadType,\n title: thread.title || \"New thread\",\n messages: []\n };\n messages.forEach((message: MessageDocument) => {\n threadObject.messages.push({\n messageId: message.messageId,\n role: message.role as MessageRole,\n content: message.content,\n timestamp: message.timestamp,\n metadata: message.metadata,\n });\n });\n\n return threadObject;\n }, `getThread(${userId}, ${threadId})`);\n };\n\n public async createThread(\n type: ThreadType,\n userId: string,\n threadId: string,\n title: string,\n ): Promise<ThreadObject> {\n return this.executeWithRetry(async () => {\n const now = Date.now();\n await ThreadModel.create({\n type,\n userId,\n threadId,\n title,\n updated_at: now,\n created_at: now,\n });\n\n return { type, userId, threadId, title, messages: []};\n }, `createThread(${userId}, ${threadId})`);\n };\n\n public async addMessagesToThread(\n userId: string,\n threadId: string,\n messages: MessageObject[]\n ): Promise<void> {\n return this.executeWithRetry(async () => {\n await ThreadModel.updateOne({ threadId, userId }, {\n updated_at: Date.now(),\n });\n for (const message of messages) {\n await MessageModel.create({\n threadId,\n messageId: message.messageId,\n userId,\n role: message.role,\n content: message.content,\n timestamp: message.timestamp,\n metadata: message.metadata,\n });\n }\n }, `addMessagesToThread(${userId}, ${threadId})`);\n };\n\n public async deleteThread(userId: string, threadId: string): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n\n // Delete all messages for this thread\n await MessageModel.deleteMany({ userId, threadId }).maxTimeMS(timeout);\n\n // Delete the thread itself\n await ThreadModel.deleteOne({ userId, threadId }).maxTimeMS(timeout);\n }, `deleteThread(${userId}, ${threadId})`);\n };\n\n public async listThreads(userId: string): Promise<ThreadMetadata[]> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const threads = await ThreadModel.find({ userId })\n .sort({ updated_at: -1 })\n .maxTimeMS(timeout);\n const data: ThreadMetadata[] = threads.map((thread: ThreadDocument) => {\n return {\n type: thread.type,\n userId,\n threadId: thread.threadId,\n title: thread.title,\n updatedAt: thread.updated_at\n } as ThreadMetadata;\n })\n return data;\n }, `listThreads(${userId})`);\n };\n}\n","import { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\nexport const WorkflowObjectSchema = new Schema(\n\t{\n\t\tworkflowId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tunique: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t\tdefault: false,\n\t\t},\n\t\tcontent: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\t{\n\t\ttimestamps: true,\n\t}\n);\n\nexport interface WorkflowDocument extends Document {\n\tworkflowId: string;\n\tuserId?: string;\n\ttitle: string;\n\tdescription: string;\n\tactive: boolean;\n\tcontent: string;\n}\n\nexport const WorkflowModel = mongoose.model<WorkflowDocument>(\"Workflow\", WorkflowObjectSchema);\n","import type { IWorkflowMemory } from \"@ainetwork/adk/modules\";\nimport type { Workflow } from \"@ainetwork/adk/types/memory\";\nimport { WorkflowModel } from \"../models/workflow.model\";\n\nexport type ExecuteWithRetryFn = <T>(\n operation: () => Promise<T>,\n operationName?: string\n) => Promise<T>;\n\nexport type GetOperationTimeoutFn = () => number;\n\nexport class MongoDBWorkflow implements IWorkflowMemory {\n private executeWithRetry: ExecuteWithRetryFn;\n private getOperationTimeout: GetOperationTimeoutFn;\n\n constructor(\n executeWithRetry: ExecuteWithRetryFn,\n getOperationTimeout: GetOperationTimeoutFn\n ) {\n this.executeWithRetry = executeWithRetry;\n this.getOperationTimeout = getOperationTimeout;\n }\n\n public async createWorkflow(workflow: Workflow): Promise<Workflow> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const created = await WorkflowModel.create(workflow);\n return created.toObject() as Workflow;\n }, \"createWorkflow()\");\n }\n\n public async getWorkflow(workflowId: string): Promise<Workflow | undefined> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const workflow = await WorkflowModel.findOne({\n workflowId\n }).maxTimeMS(timeout).lean<Workflow>();\n return workflow || undefined;\n }, \"getWorkflow()\");\n }\n\n public async updateWorkflow(workflowId: string, updates: Partial<Workflow>): Promise<void> {\n if (!updates.userId) {\n throw new Error(\"userId is required for updateWorkflow\");\n }\n\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n // userId를 조건에 포함하여 소유자만 수정 가능하도록 함\n await WorkflowModel.updateOne(\n { workflowId, userId: updates.userId },\n { $set: updates }\n ).maxTimeMS(timeout);\n }, \"updateWorkflow()\");\n }\n\n public async deleteWorkflow(workflowId: string, userId: string): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await WorkflowModel.deleteOne({ workflowId, userId }).maxTimeMS(timeout);\n }, \"deleteWorkflow()\");\n }\n\n public async listWorkflows(userId?: string): Promise<Workflow[]> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n // userId가 있으면: 해당 유저 소유 + 템플릿(userId 없음)\n // userId가 없으면: 템플릿만 반환\n const query = userId\n ? { $or: [{ userId }, { userId: { $exists: false } }, { userId: null }] }\n : { $or: [{ userId: { $exists: false } }, { userId: null }] };\n const workflows = await WorkflowModel.find(query)\n .maxTimeMS(timeout)\n .lean<Workflow[]>();\n return workflows;\n }, \"listWorkflows()\");\n }\n}\n"],"mappings":"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","names":["import_mongoose","import_logger","import_mongoose","mongoose","import_mongoose","mongoose","import_mongoose","mongoose","import_memory","import_mongoose","mongoose","import_mongoose","mongoose","mongoose"]}
1
+ {"version":3,"sources":["../index.ts","../implements/base.memory.ts","../models/agent.model.ts","../implements/agent.memory.ts","../models/intent.model.ts","../implements/intent.memory.ts","../models/threads.model.ts","../models/messages.model.ts","../implements/thread.memory.ts","../models/user-workflow.model.ts","../implements/user-workflow.memory.ts","../models/workflow-template.model.ts","../implements/workflow-template.memory.ts"],"sourcesContent":["export { MongoDBMemory } from \"./implements/base.memory\";\nexport type { MongoDBMemoryConfig } from \"./implements/base.memory\";","import { IAgentMemory, IIntentMemory, IMemory, IUserWorkflowMemory, IThreadMemory, IWorkflowTemplateMemory } from \"@ainetwork/adk/modules\";\nimport mongoose from \"mongoose\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\nimport { MongoDBAgent } from \"./agent.memory\";\nimport { MongoDBIntent } from \"./intent.memory\";\nimport { MongoDBThread } from \"./thread.memory\";\nimport { MongoDBUserWorkflow } from \"./user-workflow.memory\";\nimport { MongoDBWorkflowTemplate } from \"./workflow-template.memory\";\nimport { MessageModel } from \"../models/messages.model\";\n\nexport interface MongoDBMemoryConfig {\n uri: string;\n maxReconnectAttempts?: number;\n reconnectInterval?: number;\n maxPoolSize?: number;\n serverSelectionTimeoutMS?: number;\n socketTimeoutMS?: number;\n connectTimeoutMS?: number;\n operationTimeoutMS?: number; // Timeout for database operations\n threadTTLSeconds?: number; // TTL for thread documents (in seconds). Orphaned messages are periodically cleaned up.\n}\n\nexport class MongoDBMemory implements IMemory {\n private static instance: MongoDBMemory;\n private uri: string;\n private connected: boolean = false;\n private reconnectAttempts: number = 0;\n private maxReconnectAttempts: number;\n private reconnectInterval: number;\n private reconnecting: boolean = false;\n private connectionConfig: mongoose.ConnectOptions;\n private eventListenersSetup: boolean = false;\n private operationTimeoutMS: number;\n private threadTTLSeconds?: number;\n private orphanCleanupTimer?: ReturnType<typeof setInterval>;\n\n private agentMemory: MongoDBAgent;\n private intentMemory: MongoDBIntent;\n private threadMemory: MongoDBThread;\n private workflowTemplateMemory: MongoDBWorkflowTemplate;\n private userWorkflowMemory: MongoDBUserWorkflow;\n\n constructor(config: string | MongoDBMemoryConfig) {\n const cfg = typeof config === 'string' ? { uri: config } : config;\n\n this.uri = cfg.uri;\n this.maxReconnectAttempts = cfg.maxReconnectAttempts ?? 5;\n this.reconnectInterval = cfg.reconnectInterval ?? 5000;\n this.operationTimeoutMS = cfg.operationTimeoutMS ?? 10000; // Default 10 seconds\n if (cfg.threadTTLSeconds !== undefined && cfg.threadTTLSeconds > 0) {\n this.threadTTLSeconds = cfg.threadTTLSeconds;\n }\n this.connectionConfig = {\n maxPoolSize: cfg.maxPoolSize ?? 10,\n minPoolSize: 0,\n maxIdleTimeMS: 30000,\n serverSelectionTimeoutMS: cfg.serverSelectionTimeoutMS ?? 30000,\n socketTimeoutMS: cfg.socketTimeoutMS ?? 45000,\n connectTimeoutMS: cfg.connectTimeoutMS ?? 30000,\n bufferCommands: false,\n };\n\n if (!MongoDBMemory.instance) {\n MongoDBMemory.instance = this;\n this.setupMongooseEventListeners();\n } else {\n // Use existing instance's connection state\n this.connected = MongoDBMemory.instance.connected;\n this.operationTimeoutMS = MongoDBMemory.instance.operationTimeoutMS;\n }\n\n\t\tthis.agentMemory = new MongoDBAgent(\n\t\t\tthis.executeWithRetry.bind(this),\n\t\t\tthis.getOperationTimeout.bind(this)\n\t\t);\n\n\t\tthis.threadMemory = new MongoDBThread(\n\t\t\tthis.executeWithRetry.bind(this),\n\t\t\tthis.getOperationTimeout.bind(this)\n\t\t);\n\n\t\tthis.intentMemory = new MongoDBIntent(\n\t\t\tthis.executeWithRetry.bind(this),\n\t\t\tthis.getOperationTimeout.bind(this)\n\t\t);\n\n\t\tthis.workflowTemplateMemory = new MongoDBWorkflowTemplate(\n\t\t\tthis.executeWithRetry.bind(this),\n\t\t\tthis.getOperationTimeout.bind(this)\n\t\t);\n\n\t\tthis.userWorkflowMemory = new MongoDBUserWorkflow(\n\t\t\tthis.executeWithRetry.bind(this),\n\t\t\tthis.getOperationTimeout.bind(this)\n\t\t);\n }\n\n public getAgentMemory(): IAgentMemory {\n return this.agentMemory;\n }\n\n public getThreadMemory(): IThreadMemory {\n return this.threadMemory;\n }\n\n public getIntentMemory(): IIntentMemory {\n return this.intentMemory;\n }\n\n public getWorkflowTemplateMemory(): IWorkflowTemplateMemory {\n return this.workflowTemplateMemory;\n }\n\n public getUserWorkflowMemory(): IUserWorkflowMemory {\n return this.userWorkflowMemory;\n }\n\n private setupMongooseEventListeners(): void {\n if (this.eventListenersSetup) return;\n\n this.eventListenersSetup = true;\n\n mongoose.connection.on(\"connected\", () => {\n this.connected = true;\n this.reconnectAttempts = 0;\n this.reconnecting = false;\n loggers.agent.info(\"MongoDB connected successfully\");\n });\n\n mongoose.connection.on(\"disconnected\", () => {\n this.connected = false;\n loggers.agent.warn(\"MongoDB disconnected\");\n this.handleDisconnection();\n });\n\n mongoose.connection.on(\"error\", (error) => {\n this.connected = false;\n loggers.agent.error(\"MongoDB connection error:\", error);\n this.handleDisconnection();\n });\n\n mongoose.connection.on(\"reconnected\", () => {\n this.connected = true;\n this.reconnectAttempts = 0;\n this.reconnecting = false;\n loggers.agent.info(\"MongoDB reconnected successfully\");\n });\n }\n\n private async handleDisconnection(): Promise<void> {\n if (this.reconnecting) {\n return;\n }\n\n this.reconnecting = true;\n\n while (this.reconnectAttempts < this.maxReconnectAttempts && !this.connected) {\n this.reconnectAttempts++;\n loggers.agent.info(\n `Attempting to reconnect to MongoDB (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`\n );\n\n try {\n await mongoose.connect(this.uri, this.connectionConfig);\n this.connected = true;\n this.reconnectAttempts = 0;\n this.reconnecting = false;\n loggers.agent.info(\"MongoDB reconnection successful\");\n return;\n } catch (error) {\n loggers.agent.error(\n `Reconnection attempt ${this.reconnectAttempts} failed:`,\n error\n );\n\n if (this.reconnectAttempts < this.maxReconnectAttempts) {\n await new Promise((resolve) =>\n setTimeout(resolve, this.reconnectInterval)\n );\n }\n }\n }\n\n this.reconnecting = false;\n\n if (!this.connected) {\n loggers.agent.error(\n `Failed to reconnect to MongoDB after ${this.maxReconnectAttempts} attempts`\n );\n }\n }\n\n public async connect(): Promise<void> {\n if (this.connected) {\n return;\n }\n\n try {\n await mongoose.connect(this.uri, this.connectionConfig);\n this.connected = true;\n this.reconnectAttempts = 0;\n await this.setupTTLIndex();\n this.startOrphanCleanup();\n } catch (error) {\n loggers.agent.error(\"Failed to connect to MongoDB:\", error);\n throw error;\n }\n }\n\n public async disconnect(): Promise<void> {\n if (!this.connected) {\n return;\n }\n\n try {\n if (this.orphanCleanupTimer) {\n clearInterval(this.orphanCleanupTimer);\n this.orphanCleanupTimer = undefined;\n }\n await mongoose.disconnect();\n this.connected = false;\n } catch (error) {\n loggers.agent.error(\"Failed to disconnect from MongoDB:\", error);\n throw error;\n }\n }\n\n public isConnected(): boolean {\n return this.connected;\n }\n\n private async ensureConnection(): Promise<void> {\n if (!this.connected && !this.reconnecting) {\n await this.connect();\n }\n\n // Wait for reconnection if in progress\n const maxWaitTime = 30000; // 30 seconds\n const startTime = Date.now();\n while (this.reconnecting && Date.now() - startTime < maxWaitTime) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n if (!this.connected) {\n throw new Error(\"MongoDB is not connected and reconnection failed\");\n }\n }\n\n private async setupTTLIndex(): Promise<void> {\n if (this.threadTTLSeconds === undefined) return;\n\n try {\n const db = mongoose.connection.db;\n if (!db) return;\n\n const collection = db.collection('threads');\n const indexes = await collection.indexes();\n const existingTTL = indexes.find(\n (idx) => idx.key?.updatedAt !== undefined && idx.expireAfterSeconds !== undefined\n );\n\n if (existingTTL) {\n if (existingTTL.expireAfterSeconds !== this.threadTTLSeconds) {\n await db.command({\n collMod: 'threads',\n index: { keyPattern: { updatedAt: 1 }, expireAfterSeconds: this.threadTTLSeconds },\n });\n loggers.agent.info(`Thread TTL index updated to ${this.threadTTLSeconds} seconds`);\n }\n } else {\n await collection.createIndex(\n { updatedAt: 1 },\n { expireAfterSeconds: this.threadTTLSeconds },\n );\n loggers.agent.info(`Thread TTL index created with ${this.threadTTLSeconds} seconds`);\n }\n } catch (error) {\n loggers.agent.error('Failed to setup TTL index:', error);\n }\n }\n\n private startOrphanCleanup(): void {\n if (this.threadTTLSeconds === undefined) return;\n if (this.orphanCleanupTimer) return;\n\n // Run cleanup at half the TTL interval, with a minimum of 60s and maximum of 1 hour\n const intervalMs = Math.max(60_000, Math.min(this.threadTTLSeconds * 500, 3_600_000));\n this.orphanCleanupTimer = setInterval(() => {\n this.cleanupOrphanedMessages().catch((error) => {\n loggers.agent.error('Orphaned message cleanup failed:', error);\n });\n }, intervalMs);\n\n loggers.agent.info(`Orphaned message cleanup scheduled every ${Math.round(intervalMs / 1000)}s`);\n }\n\n private async cleanupOrphanedMessages(): Promise<void> {\n if (!this.connected) return;\n\n try {\n const db = mongoose.connection.db;\n if (!db) return;\n\n const existingThreadIds = await db.collection('threads').distinct('threadId');\n const result = await MessageModel.deleteMany({\n threadId: { $nin: existingThreadIds },\n });\n\n if (result.deletedCount > 0) {\n loggers.agent.info(`Cleaned up ${result.deletedCount} orphaned messages`);\n }\n } catch (error) {\n loggers.agent.error('Failed to cleanup orphaned messages:', error);\n }\n }\n\n /**\n * Get the operation timeout in milliseconds\n */\n protected getOperationTimeout(): number {\n return this.operationTimeoutMS;\n }\n\n /**\n * Execute a database operation with automatic retry on connection errors\n * Note: Use mongoose's maxTimeMS option in queries for timeout control\n */\n protected async executeWithRetry<T>(\n operation: () => Promise<T>,\n operationName: string = \"Database operation\"\n ): Promise<T> {\n await this.ensureConnection();\n\n try {\n return await operation();\n } catch (error: any) {\n // Check if it's a timeout error from MongoDB\n if (error.code === 50 || error.message?.includes(\"operation exceeded time limit\")) {\n loggers.agent.error(`${operationName} exceeded time limit`);\n throw error;\n }\n\n // Check if it's a TooManyLogicalSessions error\n if (error.code === 261 || error.codeName === \"TooManyLogicalSessions\") {\n loggers.agent.warn(\n `${operationName} failed due to too many sessions, disconnecting to release sessions...`\n );\n\n try {\n await mongoose.disconnect();\n this.connected = false;\n } catch (disconnectError) {\n loggers.agent.error(\"Failed to disconnect during session cleanup:\", disconnectError);\n }\n\n await new Promise((resolve) => setTimeout(resolve, 5000));\n await this.ensureConnection();\n\n try {\n return await operation();\n } catch (retryError: any) {\n loggers.agent.error(`${operationName} failed after session cleanup retry:`, retryError);\n throw retryError;\n }\n }\n\n // Check if it's a connection-related error\n if (\n error.name === \"MongoNetworkError\" ||\n error.name === \"MongoServerError\" ||\n error.message?.includes(\"connection\") ||\n error.message?.includes(\"disconnect\")\n ) {\n loggers.agent.warn(\n `${operationName} failed due to connection issue, attempting reconnection...`\n );\n\n await this.ensureConnection();\n\n // Retry the operation once after reconnection\n try {\n return await operation();\n } catch (retryError: any) {\n loggers.agent.error(`${operationName} failed after retry:`, retryError);\n throw retryError;\n }\n }\n\n // If it's not a connection error, just throw it\n throw error;\n }\n }\n}\n","import { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\nexport const AgentObjectSchema = new Schema(\n\t{\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tunique: true,\n\t\t},\n\t\tprompt: {\n\t\t\ttype: String,\n\t\t},\n\t},\n);\n\nexport interface AgentDocument extends Document {\n\tid: string;\n\tprompt: string;\n}\n\nexport const AgentModel = mongoose.model<AgentDocument>(\"Agent\", AgentObjectSchema);\n","import { IAgentMemory } from \"@ainetwork/adk/modules\";\nimport { AgentModel } from \"../models/agent.model\";\n\nexport type ExecuteWithRetryFn = <T>(\n operation: () => Promise<T>,\n operationName?: string\n) => Promise<T>;\n\nexport type GetOperationTimeoutFn = () => number;\n\ntype PromptDocument = {\n id: string;\n prompt: string;\n}\n\nexport class MongoDBAgent implements IAgentMemory {\n private executeWithRetry: ExecuteWithRetryFn;\n private getOperationTimeout: GetOperationTimeoutFn;\n\n constructor(\n executeWithRetry: ExecuteWithRetryFn,\n getOperationTimeout: GetOperationTimeoutFn\n ) {\n this.executeWithRetry = executeWithRetry;\n this.getOperationTimeout = getOperationTimeout;\n }\n\n public async getAgentPrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"agent_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getAgentPrompt()\");\n };\n \n public async updateAgentPrompt(prompt: string): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await AgentModel.updateOne({\n id: \"agent_prompt\",\n }, { \"prompt\": prompt }, { upsert: true }).maxTimeMS(timeout);\n }, \"updateAgentPrompt()\");\n };\n\n public async getAggregatePrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"aggregate_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getAggregatePrompt()\");\n };\n\n public async getGenerateTitlePrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"generate_title_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getGenerateTitlePrompt()\");\n };\n\n public async getSingleTriggerPrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"single_trigger_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getSingleTriggerPrompt()\");\n };\n\n public async getMultiTriggerPrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"multi_trigger_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getMultiTriggerPrompt()\");\n };\n\n public async getToolSelectPrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"tool_select_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getToolSelectPrompt()\");\n };\n\n public async getPIIDetectPrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"pii_detect_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getPIIDetectPrompt()\");\n };\n\n public async getPIIFilterPrompt(): Promise<string> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const metadata = await AgentModel.findOne({\n id: \"pii_filter_prompt\"\n }).maxTimeMS(timeout)\n .lean<PromptDocument>();\n return metadata?.prompt || \"\";\n }, \"getPIIFilterPrompt()\");\n };\n}\n","import { Intent } from \"@ainetwork/adk/types/memory\";\nimport mongoose, { type Document, Schema } from \"mongoose\";\n\nconst IntentObjectSchema = new Schema(\n\t{\n\t\tid: { \n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t\tunique: true,\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tprompt: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t\tstatus: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttriggeringSentences: {\n\t\t\ttype: [String],\n\t\t\trequired: false,\n\t\t},\n\t\ttags: {\n\t\t\ttype: [String],\n\t\t\trequired: false,\n\t\t},\n\t},\n);\n\nexport interface IntentDocument extends Omit<Document, 'id'>, Omit<Intent, 'id'> {\n\tid: string;\n}\n\nexport const IntentModel = mongoose.model<IntentDocument>(\"Intent\", IntentObjectSchema);","import type { Intent } from \"@ainetwork/adk/types/memory\";\nimport { IIntentMemory } from \"@ainetwork/adk/modules\";\nimport { IntentModel } from \"../models/intent.model\";\n\nexport type ExecuteWithRetryFn = <T>(\n operation: () => Promise<T>,\n operationName?: string\n) => Promise<T>;\n\nexport type GetOperationTimeoutFn = () => number;\n\nexport class MongoDBIntent implements IIntentMemory {\n private executeWithRetry: ExecuteWithRetryFn;\n private getOperationTimeout: GetOperationTimeoutFn;\n\n constructor(\n executeWithRetry: ExecuteWithRetryFn,\n getOperationTimeout: GetOperationTimeoutFn\n ) {\n this.executeWithRetry = executeWithRetry;\n this.getOperationTimeout = getOperationTimeout;\n }\n\n public async getIntent(intentId: string): Promise<Intent | undefined> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const intent = await IntentModel.findOne({ id: intentId })\n .maxTimeMS(timeout)\n .lean<Intent>();\n return intent || undefined;\n }, `getIntent(${intentId})`);\n };\n\n public async getIntentByName(intentName: string): Promise<Intent | undefined> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const intent = await IntentModel.findOne({ name: intentName })\n .maxTimeMS(timeout)\n .lean<Intent>();\n return intent || undefined;\n }, `getIntentByName(${intentName})`);\n }\n\n public async saveIntent(intent: Intent): Promise<void> {\n return this.executeWithRetry(async () => {\n await IntentModel.create(intent);\n }, `saveIntent(${intent.id})`);\n };\n\n public async updateIntent(intentId: string, intent: Intent): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await IntentModel.updateOne({\n id: intentId,\n }, intent).maxTimeMS(timeout);\n }, `updateIntent(${intentId})`);\n };\n\n public async deleteIntent(intentId: string): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await IntentModel.deleteOne({ id: intentId }).maxTimeMS(timeout);\n }, `deleteIntent(${intentId})`);\n };\n\n public async listIntents(): Promise<Intent[]> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const intents = await IntentModel.find()\n .maxTimeMS(timeout)\n .lean<Intent[]>();\n return intents;\n }, `listIntents()`);\n };\n}\n","import { ThreadType } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\nexport const ThreadObjectSchema = new Schema(\n\t{\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tenum: Object.values(ThreadType),\n\t\t\trequired: true,\n\t\t},\n\t\tthreadId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t\tisPinned: {\n\t\t\ttype: Boolean,\n\t\t\trequired: false,\n\t\t\tdefault: false,\n\t\t},\n\t\tworkflowId: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tindex: true,\n\t\t},\n\t},\n\t{\n\t\ttimestamps: true,\n\t},\n);\n\nexport interface ThreadDocument extends Document {\n\ttype: ThreadType;\n\tthreadId: string;\n\tuserId: string;\n\ttitle: string;\n\tisPinned: boolean;\n\tworkflowId?: string;\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n}\n\nexport const ThreadModel = mongoose.model<ThreadDocument>(\"Thread\", ThreadObjectSchema);\n","import { MessageRole } from \"@ainetwork/adk/types/memory\";\nimport { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\n// MessageContentObject schema\nexport const MessageContentObjectSchema = new Schema(\n\t{\n\t\ttype: { type: String, required: true },\n\t\tparts: { type: [Schema.Types.Mixed], required: true },\n\t},\n\t{ _id: false },\n);\n\n// MessageObject schema - 개별 문서로 저장\nexport const MessageObjectSchema = new Schema(\n\t{\n\t\tmessageId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tthreadId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\trole: {\n\t\t\ttype: String,\n\t\t\tenum: Object.values(MessageRole),\n\t\t\trequired: true,\n\t\t},\n\t\tcontent: {\n\t\t\ttype: MessageContentObjectSchema,\n\t\t\trequired: true,\n\t\t},\n\t\ttimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tmetadata: {\n\t\t\ttype: Schema.Types.Mixed,\n\t\t\tdefault: {},\n\t\t},\n\t},\n\t{\n\t\ttimestamps: true,\n\t},\n);\n\nMessageObjectSchema.index({ threadId: 1, messageId: 1 }, { unique: true });\n\n// Message Document interface\nexport interface MessageDocument extends Document {\n\tmessageId: string;\n\tthreadId: string;\n\tuserId: string;\n\trole: MessageRole;\n\tcontent: {\n\t\ttype: string;\n\t\tparts: any[];\n\t};\n\ttimestamp: number;\n\tcreatedAt: Date;\n\tupdatedAt: Date;\n\tmetadata?: { [key: string]: unknown };\n}\n\nexport const MessageModel = mongoose.model<MessageDocument>(\"Message\", MessageObjectSchema);","import type { MessageObject, ThreadMetadata, ThreadObject, ThreadType, ThreadFilter } from \"@ainetwork/adk/types/memory\";\nimport { MessageRole } from \"@ainetwork/adk/types/memory\";\nimport { IThreadMemory } from \"@ainetwork/adk/modules\";\nimport { ThreadDocument, ThreadModel } from \"../models/threads.model\";\nimport { MessageDocument, MessageModel } from \"../models/messages.model\";\nimport { loggers } from \"@ainetwork/adk/utils/logger\";\n\nexport type ExecuteWithRetryFn = <T>(\n operation: () => Promise<T>,\n operationName?: string\n) => Promise<T>;\n\nexport type GetOperationTimeoutFn = () => number;\n\nexport class MongoDBThread implements IThreadMemory {\n private executeWithRetry: ExecuteWithRetryFn;\n private getOperationTimeout: GetOperationTimeoutFn;\n\n constructor(\n executeWithRetry: ExecuteWithRetryFn,\n getOperationTimeout: GetOperationTimeoutFn\n ) {\n this.executeWithRetry = executeWithRetry;\n this.getOperationTimeout = getOperationTimeout;\n }\n\n public async getThread(\n userId: string,\n threadId: string\n ): Promise<ThreadObject | undefined> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const thread = await ThreadModel.findOne({ threadId, userId }).maxTimeMS(timeout);\n const messages = await MessageModel.find({ threadId, userId })\n .sort({ timestamp: 1 })\n .maxTimeMS(timeout);\n\n if (!thread) return undefined;\n\n loggers.agent.debug(`Found ${messages.length} messages for thread ${threadId}`);\n\n const threadObject: ThreadObject = {\n threadId: thread.threadId,\n userId: thread.userId,\n type: thread.type as ThreadType,\n title: thread.title || \"New thread\",\n isPinned: thread.isPinned ?? false,\n workflowId: thread.workflowId,\n messages: []\n };\n messages.forEach((message: MessageDocument) => {\n threadObject.messages.push({\n messageId: message.messageId,\n role: message.role as MessageRole,\n content: message.content,\n timestamp: message.timestamp,\n metadata: message.metadata,\n });\n });\n\n return threadObject;\n }, `getThread(${userId}, ${threadId})`);\n };\n\n public async createThread(\n type: ThreadType,\n userId: string,\n threadId: string,\n title: string,\n workflowId?: string,\n ): Promise<ThreadObject> {\n return this.executeWithRetry(async () => {\n await ThreadModel.create({\n type,\n userId,\n threadId,\n title,\n workflowId,\n });\n\n return { type, userId, threadId, title, workflowId, messages: []};\n }, `createThread(${userId}, ${threadId})`);\n };\n\n public async addMessagesToThread(\n userId: string,\n threadId: string,\n messages: MessageObject[]\n ): Promise<void> {\n return this.executeWithRetry(async () => {\n if (messages.length > 0) {\n const messageIds = messages.map((m) => m.messageId);\n await MessageModel.deleteMany({ threadId, userId, messageId: { $in: messageIds } });\n await MessageModel.insertMany(\n messages.map((message) => ({\n threadId,\n messageId: message.messageId,\n userId,\n role: message.role,\n content: message.content,\n timestamp: message.timestamp,\n metadata: message.metadata,\n }))\n );\n }\n await ThreadModel.updateOne(\n { threadId, userId },\n { $set: { updatedAt: new Date() } }\n );\n }, `addMessagesToThread(${userId}, ${threadId})`);\n };\n\n public async deleteThread(userId: string, threadId: string): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n\n // Delete all messages for this thread\n await MessageModel.deleteMany({ userId, threadId }).maxTimeMS(timeout);\n\n // Delete the thread itself\n await ThreadModel.deleteOne({ userId, threadId }).maxTimeMS(timeout);\n }, `deleteThread(${userId}, ${threadId})`);\n };\n\n public async listThreads(userId: string, filter?: ThreadFilter): Promise<ThreadMetadata[]> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const query: Record<string, any> = { userId };\n if (filter?.workflowId) query.workflowId = filter.workflowId;\n if (filter?.type) query.type = filter.type;\n const threads = await ThreadModel.find(query)\n .sort({ updatedAt: -1 })\n .maxTimeMS(timeout);\n const data: ThreadMetadata[] = threads.map((thread: ThreadDocument) => {\n return {\n type: thread.type,\n userId,\n threadId: thread.threadId,\n title: thread.title,\n isPinned: thread.isPinned ?? false,\n workflowId: thread.workflowId,\n createdAt: thread.createdAt?.toISOString(),\n updatedAt: thread.updatedAt?.toISOString(),\n } as ThreadMetadata;\n })\n return data;\n }, `listThreads(${userId})`);\n };\n\n public async updateThreadPin(\n userId: string,\n threadId: string,\n isPinned: boolean\n ): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await ThreadModel.updateOne(\n { threadId, userId },\n { $set: { isPinned } }\n ).maxTimeMS(timeout);\n }, `updateThreadPin(${userId}, ${threadId})`);\n };\n}\n","import { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\nexport const UserWorkflowObjectSchema = new Schema(\n\t{\n\t\tworkflowId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tunique: true,\n\t\t},\n\t\tuserId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tindex: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t},\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t\tdefault: false,\n\t\t},\n\t\ttemplateId: {\n\t\t\ttype: String,\n\t\t},\n\t\tcontent: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvariables: {\n\t\t\ttype: Schema.Types.Mixed,\n\t\t},\n\t\tvariableValues: {\n\t\t\ttype: Schema.Types.Mixed,\n\t\t},\n\t\tschedule: {\n\t\t\ttype: String,\n\t\t},\n\t\ttimezone: {\n\t\t\ttype: String,\n\t\t},\n\t\tlastRunAt: {\n\t\t\ttype: Number,\n\t\t},\n\t\tnextRunAt: {\n\t\t\ttype: Number,\n\t\t},\n\t\tlastThreadId: {\n\t\t\ttype: String,\n\t\t},\n\t},\n\t{\n\t\ttimestamps: true,\n\t}\n);\n\nexport interface UserWorkflowDocument extends Document {\n\tworkflowId: string;\n\tuserId: string;\n\ttitle: string;\n\tdescription?: string;\n\tactive: boolean;\n\ttemplateId?: string;\n\tcontent: string;\n\tvariables?: Record<\n\t\tstring,\n\t\t{\n\t\t\tid: string;\n\t\t\tlabel: string;\n\t\t\ttype: \"select\" | \"date_range\" | \"date_parts\" | \"text\" | \"number\";\n\t\t\toptions?: Array<string>;\n\t\t\tresolveAt?: \"creation\" | \"execution\";\n\t\t}\n\t>;\n\tvariableValues?: Record<string, string>;\n\tschedule?: string;\n\ttimezone?: string;\n\tlastRunAt?: number;\n\tnextRunAt?: number;\n\tlastThreadId?: string;\n}\n\nexport const UserWorkflowModel = mongoose.model<UserWorkflowDocument>(\n\t\"UserWorkflow\",\n\tUserWorkflowObjectSchema\n);\n","import type { IUserWorkflowMemory } from \"@ainetwork/adk/modules\";\nimport type { UserWorkflow } from \"@ainetwork/adk/types/memory\";\nimport { UserWorkflowModel } from \"../models/user-workflow.model\";\n\nexport type ExecuteWithRetryFn = <T>(\n operation: () => Promise<T>,\n operationName?: string\n) => Promise<T>;\n\nexport type GetOperationTimeoutFn = () => number;\n\nexport class MongoDBUserWorkflow implements IUserWorkflowMemory {\n private executeWithRetry: ExecuteWithRetryFn;\n private getOperationTimeout: GetOperationTimeoutFn;\n\n constructor(\n executeWithRetry: ExecuteWithRetryFn,\n getOperationTimeout: GetOperationTimeoutFn\n ) {\n this.executeWithRetry = executeWithRetry;\n this.getOperationTimeout = getOperationTimeout;\n }\n\n public async createUserWorkflow(workflow: UserWorkflow): Promise<UserWorkflow> {\n return this.executeWithRetry(async () => {\n const created = await UserWorkflowModel.create(workflow);\n return created.toObject() as UserWorkflow;\n }, \"createUserWorkflow()\");\n }\n\n public async getUserWorkflow(workflowId: string): Promise<UserWorkflow | undefined> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const workflow = await UserWorkflowModel.findOne({ workflowId })\n .maxTimeMS(timeout)\n .lean<UserWorkflow>();\n return workflow || undefined;\n }, \"getUserWorkflow()\");\n }\n\n public async updateUserWorkflow(workflowId: string, updates: Partial<UserWorkflow>): Promise<void> {\n if (!updates.userId) {\n throw new Error(\"userId is required for updateUserWorkflow\");\n }\n\n const { userId, workflowId: _workflowId, ...mutableUpdates } = updates;\n\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await UserWorkflowModel.updateOne(\n { workflowId, userId },\n { $set: mutableUpdates }\n ).maxTimeMS(timeout);\n }, \"updateUserWorkflow()\");\n }\n\n public async deleteUserWorkflow(workflowId: string, userId: string): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await UserWorkflowModel.deleteOne({ workflowId, userId }).maxTimeMS(timeout);\n }, \"deleteUserWorkflow()\");\n }\n\n public async listUserWorkflows(userId?: string): Promise<UserWorkflow[]> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const query = userId ? { userId } : {};\n const workflows = await UserWorkflowModel.find(query)\n .maxTimeMS(timeout)\n .lean<UserWorkflow[]>();\n return workflows;\n }, \"listUserWorkflows()\");\n }\n\n public async listActiveScheduledWorkflows(): Promise<UserWorkflow[]> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const workflows = await UserWorkflowModel.find({\n active: true,\n schedule: { $exists: true, $ne: null },\n })\n .maxTimeMS(timeout)\n .lean<UserWorkflow[]>();\n return workflows;\n }, \"listActiveScheduledWorkflows()\");\n }\n}\n","import { type Document, Schema } from \"mongoose\";\nimport mongoose from \"mongoose\";\n\nexport const WorkflowTemplateObjectSchema = new Schema(\n\t{\n\t\ttemplateId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tunique: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t\tdefault: false,\n\t\t},\n\t\tcontent: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvariables: {\n\t\t\ttype: Schema.Types.Mixed,\n\t\t},\n\t},\n\t{\n\t\ttimestamps: true,\n\t}\n);\n\nexport interface WorkflowTemplateDocument extends Document {\n\ttemplateId: string;\n\ttitle: string;\n\tdescription: string;\n\tactive: boolean;\n\tcontent: string;\n\tvariables?: Record<\n\t\tstring,\n\t\t{\n\t\t\tid: string;\n\t\t\tlabel: string;\n\t\t\ttype: \"select\" | \"date_range\" | \"date_parts\" | \"text\" | \"number\";\n\t\t\toptions?: Array<string>;\n\t\t\tresolveAt?: \"creation\" | \"execution\";\n\t\t}\n\t>;\n}\n\nexport const WorkflowTemplateModel = mongoose.model<WorkflowTemplateDocument>(\n\t\"WorkflowTemplate\",\n\tWorkflowTemplateObjectSchema\n);\n","import type { IWorkflowTemplateMemory } from \"@ainetwork/adk/modules\";\nimport type { WorkflowTemplate } from \"@ainetwork/adk/types/memory\";\nimport { WorkflowTemplateModel } from \"../models/workflow-template.model\";\n\nexport type ExecuteWithRetryFn = <T>(\n operation: () => Promise<T>,\n operationName?: string\n) => Promise<T>;\n\nexport type GetOperationTimeoutFn = () => number;\n\nexport class MongoDBWorkflowTemplate implements IWorkflowTemplateMemory {\n private executeWithRetry: ExecuteWithRetryFn;\n private getOperationTimeout: GetOperationTimeoutFn;\n\n constructor(\n executeWithRetry: ExecuteWithRetryFn,\n getOperationTimeout: GetOperationTimeoutFn\n ) {\n this.executeWithRetry = executeWithRetry;\n this.getOperationTimeout = getOperationTimeout;\n }\n\n public async createTemplate(template: WorkflowTemplate): Promise<WorkflowTemplate> {\n return this.executeWithRetry(async () => {\n const created = await WorkflowTemplateModel.create(template);\n return created.toObject() as WorkflowTemplate;\n }, \"createTemplate()\");\n }\n\n public async getTemplate(templateId: string): Promise<WorkflowTemplate | undefined> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const template = await WorkflowTemplateModel.findOne({ templateId })\n .maxTimeMS(timeout)\n .lean<WorkflowTemplate>();\n return template || undefined;\n }, \"getTemplate()\");\n }\n\n public async updateTemplate(templateId: string, updates: Partial<WorkflowTemplate>): Promise<void> {\n const { templateId: _templateId, ...mutableUpdates } = updates;\n\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await WorkflowTemplateModel.updateOne(\n { templateId },\n { $set: mutableUpdates }\n ).maxTimeMS(timeout);\n }, \"updateTemplate()\");\n }\n\n public async deleteTemplate(templateId: string): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await WorkflowTemplateModel.deleteOne({ templateId }).maxTimeMS(timeout);\n }, \"deleteTemplate()\");\n }\n\n public async listTemplates(): Promise<WorkflowTemplate[]> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n const templates = await WorkflowTemplateModel.find()\n .maxTimeMS(timeout)\n .lean<WorkflowTemplate[]>();\n return templates;\n }, \"listTemplates()\");\n }\n}\n"],"mappings":"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","names":["import_mongoose","import_logger","import_mongoose","mongoose","import_mongoose","mongoose","import_mongoose","mongoose","import_memory","import_mongoose","mongoose","import_mongoose","mongoose","import_mongoose","mongoose","mongoose"]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { IMemory, IAgentMemory, IThreadMemory, IIntentMemory, IWorkflowMemory } from '@ainetwork/adk/modules';
1
+ import { IMemory, IAgentMemory, IThreadMemory, IIntentMemory, IWorkflowTemplateMemory, IUserWorkflowMemory } from '@ainetwork/adk/modules';
2
2
 
3
3
  interface MongoDBMemoryConfig {
4
4
  uri: string;
@@ -9,6 +9,7 @@ interface MongoDBMemoryConfig {
9
9
  socketTimeoutMS?: number;
10
10
  connectTimeoutMS?: number;
11
11
  operationTimeoutMS?: number;
12
+ threadTTLSeconds?: number;
12
13
  }
13
14
  declare class MongoDBMemory implements IMemory {
14
15
  private static instance;
@@ -21,21 +22,28 @@ declare class MongoDBMemory implements IMemory {
21
22
  private connectionConfig;
22
23
  private eventListenersSetup;
23
24
  private operationTimeoutMS;
25
+ private threadTTLSeconds?;
26
+ private orphanCleanupTimer?;
24
27
  private agentMemory;
25
28
  private intentMemory;
26
29
  private threadMemory;
27
- private workflowMemory;
30
+ private workflowTemplateMemory;
31
+ private userWorkflowMemory;
28
32
  constructor(config: string | MongoDBMemoryConfig);
29
33
  getAgentMemory(): IAgentMemory;
30
34
  getThreadMemory(): IThreadMemory;
31
35
  getIntentMemory(): IIntentMemory;
32
- getWorkflowMemory(): IWorkflowMemory;
36
+ getWorkflowTemplateMemory(): IWorkflowTemplateMemory;
37
+ getUserWorkflowMemory(): IUserWorkflowMemory;
33
38
  private setupMongooseEventListeners;
34
39
  private handleDisconnection;
35
40
  connect(): Promise<void>;
36
41
  disconnect(): Promise<void>;
37
42
  isConnected(): boolean;
38
43
  private ensureConnection;
44
+ private setupTTLIndex;
45
+ private startOrphanCleanup;
46
+ private cleanupOrphanedMessages;
39
47
  /**
40
48
  * Get the operation timeout in milliseconds
41
49
  */
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { IMemory, IAgentMemory, IThreadMemory, IIntentMemory, IWorkflowMemory } from '@ainetwork/adk/modules';
1
+ import { IMemory, IAgentMemory, IThreadMemory, IIntentMemory, IWorkflowTemplateMemory, IUserWorkflowMemory } from '@ainetwork/adk/modules';
2
2
 
3
3
  interface MongoDBMemoryConfig {
4
4
  uri: string;
@@ -9,6 +9,7 @@ interface MongoDBMemoryConfig {
9
9
  socketTimeoutMS?: number;
10
10
  connectTimeoutMS?: number;
11
11
  operationTimeoutMS?: number;
12
+ threadTTLSeconds?: number;
12
13
  }
13
14
  declare class MongoDBMemory implements IMemory {
14
15
  private static instance;
@@ -21,21 +22,28 @@ declare class MongoDBMemory implements IMemory {
21
22
  private connectionConfig;
22
23
  private eventListenersSetup;
23
24
  private operationTimeoutMS;
25
+ private threadTTLSeconds?;
26
+ private orphanCleanupTimer?;
24
27
  private agentMemory;
25
28
  private intentMemory;
26
29
  private threadMemory;
27
- private workflowMemory;
30
+ private workflowTemplateMemory;
31
+ private userWorkflowMemory;
28
32
  constructor(config: string | MongoDBMemoryConfig);
29
33
  getAgentMemory(): IAgentMemory;
30
34
  getThreadMemory(): IThreadMemory;
31
35
  getIntentMemory(): IIntentMemory;
32
- getWorkflowMemory(): IWorkflowMemory;
36
+ getWorkflowTemplateMemory(): IWorkflowTemplateMemory;
37
+ getUserWorkflowMemory(): IUserWorkflowMemory;
33
38
  private setupMongooseEventListeners;
34
39
  private handleDisconnection;
35
40
  connect(): Promise<void>;
36
41
  disconnect(): Promise<void>;
37
42
  isConnected(): boolean;
38
43
  private ensureConnection;
44
+ private setupTTLIndex;
45
+ private startOrphanCleanup;
46
+ private cleanupOrphanedMessages;
39
47
  /**
40
48
  * Get the operation timeout in milliseconds
41
49
  */