@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
package/dist/index.js CHANGED
@@ -6,13 +6,16 @@ import {
6
6
  } from "./chunk-YFW7JXII.js";
7
7
  import {
8
8
  MessageModel
9
- } from "./chunk-5CCEN7NK.js";
9
+ } from "./chunk-QULDFKGZ.js";
10
10
  import {
11
11
  ThreadModel
12
- } from "./chunk-GPOFS7ZT.js";
12
+ } from "./chunk-2XJ6S2W5.js";
13
13
  import {
14
- WorkflowModel
15
- } from "./chunk-NGLXQZLX.js";
14
+ UserWorkflowModel
15
+ } from "./chunk-RC275GLE.js";
16
+ import {
17
+ WorkflowTemplateModel
18
+ } from "./chunk-SJ2FHHN6.js";
16
19
 
17
20
  // implements/base.memory.ts
18
21
  import mongoose from "mongoose";
@@ -179,6 +182,8 @@ var MongoDBThread = class {
179
182
  userId: thread.userId,
180
183
  type: thread.type,
181
184
  title: thread.title || "New thread",
185
+ isPinned: thread.isPinned ?? false,
186
+ workflowId: thread.workflowId,
182
187
  messages: []
183
188
  };
184
189
  messages.forEach((message) => {
@@ -193,36 +198,39 @@ var MongoDBThread = class {
193
198
  return threadObject;
194
199
  }, `getThread(${userId}, ${threadId})`);
195
200
  }
196
- async createThread(type, userId, threadId, title) {
201
+ async createThread(type, userId, threadId, title, workflowId) {
197
202
  return this.executeWithRetry(async () => {
198
- const now = Date.now();
199
203
  await ThreadModel.create({
200
204
  type,
201
205
  userId,
202
206
  threadId,
203
207
  title,
204
- updated_at: now,
205
- created_at: now
208
+ workflowId
206
209
  });
207
- return { type, userId, threadId, title, messages: [] };
210
+ return { type, userId, threadId, title, workflowId, messages: [] };
208
211
  }, `createThread(${userId}, ${threadId})`);
209
212
  }
210
213
  async addMessagesToThread(userId, threadId, messages) {
211
214
  return this.executeWithRetry(async () => {
212
- await ThreadModel.updateOne({ threadId, userId }, {
213
- updated_at: Date.now()
214
- });
215
- for (const message of messages) {
216
- await MessageModel.create({
217
- threadId,
218
- messageId: message.messageId,
219
- userId,
220
- role: message.role,
221
- content: message.content,
222
- timestamp: message.timestamp,
223
- metadata: message.metadata
224
- });
215
+ if (messages.length > 0) {
216
+ const messageIds = messages.map((m) => m.messageId);
217
+ await MessageModel.deleteMany({ threadId, userId, messageId: { $in: messageIds } });
218
+ await MessageModel.insertMany(
219
+ messages.map((message) => ({
220
+ threadId,
221
+ messageId: message.messageId,
222
+ userId,
223
+ role: message.role,
224
+ content: message.content,
225
+ timestamp: message.timestamp,
226
+ metadata: message.metadata
227
+ }))
228
+ );
225
229
  }
230
+ await ThreadModel.updateOne(
231
+ { threadId, userId },
232
+ { $set: { updatedAt: /* @__PURE__ */ new Date() } }
233
+ );
226
234
  }, `addMessagesToThread(${userId}, ${threadId})`);
227
235
  }
228
236
  async deleteThread(userId, threadId) {
@@ -232,73 +240,142 @@ var MongoDBThread = class {
232
240
  await ThreadModel.deleteOne({ userId, threadId }).maxTimeMS(timeout);
233
241
  }, `deleteThread(${userId}, ${threadId})`);
234
242
  }
235
- async listThreads(userId) {
243
+ async listThreads(userId, filter) {
236
244
  return this.executeWithRetry(async () => {
237
245
  const timeout = this.getOperationTimeout();
238
- const threads = await ThreadModel.find({ userId }).sort({ updated_at: -1 }).maxTimeMS(timeout);
246
+ const query = { userId };
247
+ if (filter?.workflowId) query.workflowId = filter.workflowId;
248
+ if (filter?.type) query.type = filter.type;
249
+ const threads = await ThreadModel.find(query).sort({ updatedAt: -1 }).maxTimeMS(timeout);
239
250
  const data = threads.map((thread) => {
240
251
  return {
241
252
  type: thread.type,
242
253
  userId,
243
254
  threadId: thread.threadId,
244
255
  title: thread.title,
245
- updatedAt: thread.updated_at
256
+ isPinned: thread.isPinned ?? false,
257
+ workflowId: thread.workflowId,
258
+ createdAt: thread.createdAt?.toISOString(),
259
+ updatedAt: thread.updatedAt?.toISOString()
246
260
  };
247
261
  });
248
262
  return data;
249
263
  }, `listThreads(${userId})`);
250
264
  }
265
+ async updateThreadPin(userId, threadId, isPinned) {
266
+ return this.executeWithRetry(async () => {
267
+ const timeout = this.getOperationTimeout();
268
+ await ThreadModel.updateOne(
269
+ { threadId, userId },
270
+ { $set: { isPinned } }
271
+ ).maxTimeMS(timeout);
272
+ }, `updateThreadPin(${userId}, ${threadId})`);
273
+ }
251
274
  };
252
275
 
253
- // implements/workflow.memory.ts
254
- var MongoDBWorkflow = class {
276
+ // implements/user-workflow.memory.ts
277
+ var MongoDBUserWorkflow = class {
255
278
  executeWithRetry;
256
279
  getOperationTimeout;
257
280
  constructor(executeWithRetry, getOperationTimeout) {
258
281
  this.executeWithRetry = executeWithRetry;
259
282
  this.getOperationTimeout = getOperationTimeout;
260
283
  }
261
- async createWorkflow(workflow) {
284
+ async createUserWorkflow(workflow) {
262
285
  return this.executeWithRetry(async () => {
263
- const timeout = this.getOperationTimeout();
264
- const created = await WorkflowModel.create(workflow);
286
+ const created = await UserWorkflowModel.create(workflow);
265
287
  return created.toObject();
266
- }, "createWorkflow()");
288
+ }, "createUserWorkflow()");
267
289
  }
268
- async getWorkflow(workflowId) {
290
+ async getUserWorkflow(workflowId) {
269
291
  return this.executeWithRetry(async () => {
270
292
  const timeout = this.getOperationTimeout();
271
- const workflow = await WorkflowModel.findOne({
272
- workflowId
273
- }).maxTimeMS(timeout).lean();
293
+ const workflow = await UserWorkflowModel.findOne({ workflowId }).maxTimeMS(timeout).lean();
274
294
  return workflow || void 0;
275
- }, "getWorkflow()");
295
+ }, "getUserWorkflow()");
276
296
  }
277
- async updateWorkflow(workflowId, updates) {
297
+ async updateUserWorkflow(workflowId, updates) {
278
298
  if (!updates.userId) {
279
- throw new Error("userId is required for updateWorkflow");
299
+ throw new Error("userId is required for updateUserWorkflow");
280
300
  }
301
+ const { userId, workflowId: _workflowId, ...mutableUpdates } = updates;
281
302
  return this.executeWithRetry(async () => {
282
303
  const timeout = this.getOperationTimeout();
283
- await WorkflowModel.updateOne(
284
- { workflowId, userId: updates.userId },
285
- { $set: updates }
304
+ await UserWorkflowModel.updateOne(
305
+ { workflowId, userId },
306
+ { $set: mutableUpdates }
286
307
  ).maxTimeMS(timeout);
287
- }, "updateWorkflow()");
308
+ }, "updateUserWorkflow()");
288
309
  }
289
- async deleteWorkflow(workflowId, userId) {
310
+ async deleteUserWorkflow(workflowId, userId) {
290
311
  return this.executeWithRetry(async () => {
291
312
  const timeout = this.getOperationTimeout();
292
- await WorkflowModel.deleteOne({ workflowId, userId }).maxTimeMS(timeout);
293
- }, "deleteWorkflow()");
313
+ await UserWorkflowModel.deleteOne({ workflowId, userId }).maxTimeMS(timeout);
314
+ }, "deleteUserWorkflow()");
294
315
  }
295
- async listWorkflows(userId) {
316
+ async listUserWorkflows(userId) {
296
317
  return this.executeWithRetry(async () => {
297
318
  const timeout = this.getOperationTimeout();
298
- const query = userId ? { $or: [{ userId }, { userId: { $exists: false } }, { userId: null }] } : { $or: [{ userId: { $exists: false } }, { userId: null }] };
299
- const workflows = await WorkflowModel.find(query).maxTimeMS(timeout).lean();
319
+ const query = userId ? { userId } : {};
320
+ const workflows = await UserWorkflowModel.find(query).maxTimeMS(timeout).lean();
300
321
  return workflows;
301
- }, "listWorkflows()");
322
+ }, "listUserWorkflows()");
323
+ }
324
+ async listActiveScheduledWorkflows() {
325
+ return this.executeWithRetry(async () => {
326
+ const timeout = this.getOperationTimeout();
327
+ const workflows = await UserWorkflowModel.find({
328
+ active: true,
329
+ schedule: { $exists: true, $ne: null }
330
+ }).maxTimeMS(timeout).lean();
331
+ return workflows;
332
+ }, "listActiveScheduledWorkflows()");
333
+ }
334
+ };
335
+
336
+ // implements/workflow-template.memory.ts
337
+ var MongoDBWorkflowTemplate = class {
338
+ executeWithRetry;
339
+ getOperationTimeout;
340
+ constructor(executeWithRetry, getOperationTimeout) {
341
+ this.executeWithRetry = executeWithRetry;
342
+ this.getOperationTimeout = getOperationTimeout;
343
+ }
344
+ async createTemplate(template) {
345
+ return this.executeWithRetry(async () => {
346
+ const created = await WorkflowTemplateModel.create(template);
347
+ return created.toObject();
348
+ }, "createTemplate()");
349
+ }
350
+ async getTemplate(templateId) {
351
+ return this.executeWithRetry(async () => {
352
+ const timeout = this.getOperationTimeout();
353
+ const template = await WorkflowTemplateModel.findOne({ templateId }).maxTimeMS(timeout).lean();
354
+ return template || void 0;
355
+ }, "getTemplate()");
356
+ }
357
+ async updateTemplate(templateId, updates) {
358
+ const { templateId: _templateId, ...mutableUpdates } = updates;
359
+ return this.executeWithRetry(async () => {
360
+ const timeout = this.getOperationTimeout();
361
+ await WorkflowTemplateModel.updateOne(
362
+ { templateId },
363
+ { $set: mutableUpdates }
364
+ ).maxTimeMS(timeout);
365
+ }, "updateTemplate()");
366
+ }
367
+ async deleteTemplate(templateId) {
368
+ return this.executeWithRetry(async () => {
369
+ const timeout = this.getOperationTimeout();
370
+ await WorkflowTemplateModel.deleteOne({ templateId }).maxTimeMS(timeout);
371
+ }, "deleteTemplate()");
372
+ }
373
+ async listTemplates() {
374
+ return this.executeWithRetry(async () => {
375
+ const timeout = this.getOperationTimeout();
376
+ const templates = await WorkflowTemplateModel.find().maxTimeMS(timeout).lean();
377
+ return templates;
378
+ }, "listTemplates()");
302
379
  }
303
380
  };
304
381
 
@@ -314,18 +391,26 @@ var MongoDBMemory = class _MongoDBMemory {
314
391
  connectionConfig;
315
392
  eventListenersSetup = false;
316
393
  operationTimeoutMS;
394
+ threadTTLSeconds;
395
+ orphanCleanupTimer;
317
396
  agentMemory;
318
397
  intentMemory;
319
398
  threadMemory;
320
- workflowMemory;
399
+ workflowTemplateMemory;
400
+ userWorkflowMemory;
321
401
  constructor(config) {
322
402
  const cfg = typeof config === "string" ? { uri: config } : config;
323
403
  this.uri = cfg.uri;
324
404
  this.maxReconnectAttempts = cfg.maxReconnectAttempts ?? 5;
325
405
  this.reconnectInterval = cfg.reconnectInterval ?? 5e3;
326
406
  this.operationTimeoutMS = cfg.operationTimeoutMS ?? 1e4;
407
+ if (cfg.threadTTLSeconds !== void 0 && cfg.threadTTLSeconds > 0) {
408
+ this.threadTTLSeconds = cfg.threadTTLSeconds;
409
+ }
327
410
  this.connectionConfig = {
328
- maxPoolSize: cfg.maxPoolSize ?? 1,
411
+ maxPoolSize: cfg.maxPoolSize ?? 10,
412
+ minPoolSize: 0,
413
+ maxIdleTimeMS: 3e4,
329
414
  serverSelectionTimeoutMS: cfg.serverSelectionTimeoutMS ?? 3e4,
330
415
  socketTimeoutMS: cfg.socketTimeoutMS ?? 45e3,
331
416
  connectTimeoutMS: cfg.connectTimeoutMS ?? 3e4,
@@ -350,7 +435,11 @@ var MongoDBMemory = class _MongoDBMemory {
350
435
  this.executeWithRetry.bind(this),
351
436
  this.getOperationTimeout.bind(this)
352
437
  );
353
- this.workflowMemory = new MongoDBWorkflow(
438
+ this.workflowTemplateMemory = new MongoDBWorkflowTemplate(
439
+ this.executeWithRetry.bind(this),
440
+ this.getOperationTimeout.bind(this)
441
+ );
442
+ this.userWorkflowMemory = new MongoDBUserWorkflow(
354
443
  this.executeWithRetry.bind(this),
355
444
  this.getOperationTimeout.bind(this)
356
445
  );
@@ -364,8 +453,11 @@ var MongoDBMemory = class _MongoDBMemory {
364
453
  getIntentMemory() {
365
454
  return this.intentMemory;
366
455
  }
367
- getWorkflowMemory() {
368
- return this.workflowMemory;
456
+ getWorkflowTemplateMemory() {
457
+ return this.workflowTemplateMemory;
458
+ }
459
+ getUserWorkflowMemory() {
460
+ return this.userWorkflowMemory;
369
461
  }
370
462
  setupMongooseEventListeners() {
371
463
  if (this.eventListenersSetup) return;
@@ -398,7 +490,7 @@ var MongoDBMemory = class _MongoDBMemory {
398
490
  return;
399
491
  }
400
492
  this.reconnecting = true;
401
- while (this.reconnectAttempts < this.maxReconnectAttempts && !this.isConnected) {
493
+ while (this.reconnectAttempts < this.maxReconnectAttempts && !this.connected) {
402
494
  this.reconnectAttempts++;
403
495
  loggers2.agent.info(
404
496
  `Attempting to reconnect to MongoDB (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`
@@ -423,7 +515,7 @@ var MongoDBMemory = class _MongoDBMemory {
423
515
  }
424
516
  }
425
517
  this.reconnecting = false;
426
- if (!this.isConnected) {
518
+ if (!this.connected) {
427
519
  loggers2.agent.error(
428
520
  `Failed to reconnect to MongoDB after ${this.maxReconnectAttempts} attempts`
429
521
  );
@@ -437,16 +529,22 @@ var MongoDBMemory = class _MongoDBMemory {
437
529
  await mongoose.connect(this.uri, this.connectionConfig);
438
530
  this.connected = true;
439
531
  this.reconnectAttempts = 0;
532
+ await this.setupTTLIndex();
533
+ this.startOrphanCleanup();
440
534
  } catch (error) {
441
535
  loggers2.agent.error("Failed to connect to MongoDB:", error);
442
536
  throw error;
443
537
  }
444
538
  }
445
539
  async disconnect() {
446
- if (!this.isConnected) {
540
+ if (!this.connected) {
447
541
  return;
448
542
  }
449
543
  try {
544
+ if (this.orphanCleanupTimer) {
545
+ clearInterval(this.orphanCleanupTimer);
546
+ this.orphanCleanupTimer = void 0;
547
+ }
450
548
  await mongoose.disconnect();
451
549
  this.connected = false;
452
550
  } catch (error) {
@@ -458,7 +556,7 @@ var MongoDBMemory = class _MongoDBMemory {
458
556
  return this.connected;
459
557
  }
460
558
  async ensureConnection() {
461
- if (!this.isConnected && !this.reconnecting) {
559
+ if (!this.connected && !this.reconnecting) {
462
560
  await this.connect();
463
561
  }
464
562
  const maxWaitTime = 3e4;
@@ -466,10 +564,66 @@ var MongoDBMemory = class _MongoDBMemory {
466
564
  while (this.reconnecting && Date.now() - startTime < maxWaitTime) {
467
565
  await new Promise((resolve) => setTimeout(resolve, 100));
468
566
  }
469
- if (!this.isConnected) {
567
+ if (!this.connected) {
470
568
  throw new Error("MongoDB is not connected and reconnection failed");
471
569
  }
472
570
  }
571
+ async setupTTLIndex() {
572
+ if (this.threadTTLSeconds === void 0) return;
573
+ try {
574
+ const db = mongoose.connection.db;
575
+ if (!db) return;
576
+ const collection = db.collection("threads");
577
+ const indexes = await collection.indexes();
578
+ const existingTTL = indexes.find(
579
+ (idx) => idx.key?.updatedAt !== void 0 && idx.expireAfterSeconds !== void 0
580
+ );
581
+ if (existingTTL) {
582
+ if (existingTTL.expireAfterSeconds !== this.threadTTLSeconds) {
583
+ await db.command({
584
+ collMod: "threads",
585
+ index: { keyPattern: { updatedAt: 1 }, expireAfterSeconds: this.threadTTLSeconds }
586
+ });
587
+ loggers2.agent.info(`Thread TTL index updated to ${this.threadTTLSeconds} seconds`);
588
+ }
589
+ } else {
590
+ await collection.createIndex(
591
+ { updatedAt: 1 },
592
+ { expireAfterSeconds: this.threadTTLSeconds }
593
+ );
594
+ loggers2.agent.info(`Thread TTL index created with ${this.threadTTLSeconds} seconds`);
595
+ }
596
+ } catch (error) {
597
+ loggers2.agent.error("Failed to setup TTL index:", error);
598
+ }
599
+ }
600
+ startOrphanCleanup() {
601
+ if (this.threadTTLSeconds === void 0) return;
602
+ if (this.orphanCleanupTimer) return;
603
+ const intervalMs = Math.max(6e4, Math.min(this.threadTTLSeconds * 500, 36e5));
604
+ this.orphanCleanupTimer = setInterval(() => {
605
+ this.cleanupOrphanedMessages().catch((error) => {
606
+ loggers2.agent.error("Orphaned message cleanup failed:", error);
607
+ });
608
+ }, intervalMs);
609
+ loggers2.agent.info(`Orphaned message cleanup scheduled every ${Math.round(intervalMs / 1e3)}s`);
610
+ }
611
+ async cleanupOrphanedMessages() {
612
+ if (!this.connected) return;
613
+ try {
614
+ const db = mongoose.connection.db;
615
+ if (!db) return;
616
+ const existingThreadIds = await db.collection("threads").distinct("threadId");
617
+ const result = await MessageModel.deleteMany({
618
+ threadId: { $nin: existingThreadIds }
619
+ });
620
+ if (result.deletedCount > 0) {
621
+ loggers2.agent.info(`Cleaned up ${result.deletedCount} orphaned messages`);
622
+ }
623
+ } catch (error) {
624
+ loggers2.agent.error("Failed to cleanup orphaned messages:", error);
625
+ }
626
+ }
473
627
  /**
474
628
  * Get the operation timeout in milliseconds
475
629
  */
@@ -489,6 +643,25 @@ var MongoDBMemory = class _MongoDBMemory {
489
643
  loggers2.agent.error(`${operationName} exceeded time limit`);
490
644
  throw error;
491
645
  }
646
+ if (error.code === 261 || error.codeName === "TooManyLogicalSessions") {
647
+ loggers2.agent.warn(
648
+ `${operationName} failed due to too many sessions, disconnecting to release sessions...`
649
+ );
650
+ try {
651
+ await mongoose.disconnect();
652
+ this.connected = false;
653
+ } catch (disconnectError) {
654
+ loggers2.agent.error("Failed to disconnect during session cleanup:", disconnectError);
655
+ }
656
+ await new Promise((resolve) => setTimeout(resolve, 5e3));
657
+ await this.ensureConnection();
658
+ try {
659
+ return await operation();
660
+ } catch (retryError) {
661
+ loggers2.agent.error(`${operationName} failed after session cleanup retry:`, retryError);
662
+ throw retryError;
663
+ }
664
+ }
492
665
  if (error.name === "MongoNetworkError" || error.name === "MongoServerError" || error.message?.includes("connection") || error.message?.includes("disconnect")) {
493
666
  loggers2.agent.warn(
494
667
  `${operationName} failed due to connection issue, attempting reconnection...`
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../implements/base.memory.ts","../implements/agent.memory.ts","../implements/intent.memory.ts","../implements/thread.memory.ts","../implements/workflow.memory.ts"],"sourcesContent":["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 { 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 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 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 { 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":["loggers","loggers"]}
1
+ {"version":3,"sources":["../implements/base.memory.ts","../implements/agent.memory.ts","../implements/intent.memory.ts","../implements/thread.memory.ts","../implements/user-workflow.memory.ts","../implements/workflow-template.memory.ts"],"sourcesContent":["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 { 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 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 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 { 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 { 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":["loggers","loggers"]}