@ainetwork/adk-provider-memory-mongodb 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,42 @@
1
+ // models/workflow.model.ts
2
+ import { Schema } from "mongoose";
3
+ import mongoose from "mongoose";
4
+ var WorkflowObjectSchema = new Schema(
5
+ {
6
+ workflowId: {
7
+ type: String,
8
+ required: true,
9
+ unique: true
10
+ },
11
+ userId: {
12
+ type: String
13
+ },
14
+ title: {
15
+ type: String,
16
+ required: true
17
+ },
18
+ description: {
19
+ type: String,
20
+ required: true
21
+ },
22
+ active: {
23
+ type: Boolean,
24
+ required: true,
25
+ default: false
26
+ },
27
+ content: {
28
+ type: String,
29
+ required: true
30
+ }
31
+ },
32
+ {
33
+ timestamps: true
34
+ }
35
+ );
36
+ var WorkflowModel = mongoose.model("Workflow", WorkflowObjectSchema);
37
+
38
+ export {
39
+ WorkflowObjectSchema,
40
+ WorkflowModel
41
+ };
42
+ //# sourceMappingURL=chunk-NGLXQZLX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../models/workflow.model.ts"],"sourcesContent":["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"],"mappings":";AAAA,SAAwB,cAAc;AACtC,OAAO,cAAc;AAEd,IAAM,uBAAuB,IAAI;AAAA,EACvC;AAAA,IACC,YAAY;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,MACP,MAAM;AAAA,IACP;AAAA,IACA,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,EACD;AAAA,EACA;AAAA,IACC,YAAY;AAAA,EACb;AACD;AAWO,IAAM,gBAAgB,SAAS,MAAwB,YAAY,oBAAoB;","names":[]}
package/dist/index.cjs CHANGED
@@ -35,7 +35,7 @@ __export(index_exports, {
35
35
  module.exports = __toCommonJS(index_exports);
36
36
 
37
37
  // implements/base.memory.ts
38
- var import_mongoose8 = __toESM(require("mongoose"), 1);
38
+ var import_mongoose10 = __toESM(require("mongoose"), 1);
39
39
  var import_logger2 = require("@ainetwork/adk/utils/logger");
40
40
 
41
41
  // models/agent.model.ts
@@ -348,6 +348,92 @@ var MongoDBThread = class {
348
348
  }
349
349
  };
350
350
 
351
+ // models/workflow.model.ts
352
+ var import_mongoose8 = require("mongoose");
353
+ var import_mongoose9 = __toESM(require("mongoose"), 1);
354
+ var WorkflowObjectSchema = new import_mongoose8.Schema(
355
+ {
356
+ workflowId: {
357
+ type: String,
358
+ required: true,
359
+ unique: true
360
+ },
361
+ userId: {
362
+ type: String
363
+ },
364
+ title: {
365
+ type: String,
366
+ required: true
367
+ },
368
+ description: {
369
+ type: String,
370
+ required: true
371
+ },
372
+ active: {
373
+ type: Boolean,
374
+ required: true,
375
+ default: false
376
+ },
377
+ content: {
378
+ type: String,
379
+ required: true
380
+ }
381
+ },
382
+ {
383
+ timestamps: true
384
+ }
385
+ );
386
+ var WorkflowModel = import_mongoose9.default.model("Workflow", WorkflowObjectSchema);
387
+
388
+ // implements/workflow.memory.ts
389
+ var MongoDBWorkflow = class {
390
+ executeWithRetry;
391
+ getOperationTimeout;
392
+ constructor(executeWithRetry, getOperationTimeout) {
393
+ this.executeWithRetry = executeWithRetry;
394
+ this.getOperationTimeout = getOperationTimeout;
395
+ }
396
+ async createWorkflow(workflow) {
397
+ return this.executeWithRetry(async () => {
398
+ const timeout = this.getOperationTimeout();
399
+ const created = await WorkflowModel.create(workflow);
400
+ return created.toObject();
401
+ }, "createWorkflow()");
402
+ }
403
+ async getWorkflow(workflowId) {
404
+ return this.executeWithRetry(async () => {
405
+ const timeout = this.getOperationTimeout();
406
+ const workflow = await WorkflowModel.findOne({
407
+ workflowId
408
+ }).maxTimeMS(timeout).lean();
409
+ return workflow || void 0;
410
+ }, "getWorkflow()");
411
+ }
412
+ async updateWorkflow(workflowId, updates) {
413
+ return this.executeWithRetry(async () => {
414
+ const timeout = this.getOperationTimeout();
415
+ await WorkflowModel.updateOne(
416
+ { workflowId },
417
+ { $set: updates }
418
+ ).maxTimeMS(timeout);
419
+ }, "updateWorkflow()");
420
+ }
421
+ async deleteWorkflow(workflowId) {
422
+ return this.executeWithRetry(async () => {
423
+ const timeout = this.getOperationTimeout();
424
+ await WorkflowModel.deleteOne({ workflowId }).maxTimeMS(timeout);
425
+ }, "deleteWorkflow()");
426
+ }
427
+ async listWorkflows(userId) {
428
+ return this.executeWithRetry(async () => {
429
+ const timeout = this.getOperationTimeout();
430
+ const query = userId ? { userId } : {};
431
+ const workflows = await WorkflowModel.find(query).maxTimeMS(timeout).lean();
432
+ return workflows;
433
+ }, "listWorkflows()");
434
+ }
435
+ };
436
+
351
437
  // implements/base.memory.ts
352
438
  var MongoDBMemory = class _MongoDBMemory {
353
439
  static instance;
@@ -363,6 +449,7 @@ var MongoDBMemory = class _MongoDBMemory {
363
449
  agentMemory;
364
450
  intentMemory;
365
451
  threadMemory;
452
+ workflowMemory;
366
453
  constructor(config) {
367
454
  const cfg = typeof config === "string" ? { uri: config } : config;
368
455
  this.uri = cfg.uri;
@@ -395,6 +482,10 @@ var MongoDBMemory = class _MongoDBMemory {
395
482
  this.executeWithRetry.bind(this),
396
483
  this.getOperationTimeout.bind(this)
397
484
  );
485
+ this.workflowMemory = new MongoDBWorkflow(
486
+ this.executeWithRetry.bind(this),
487
+ this.getOperationTimeout.bind(this)
488
+ );
398
489
  }
399
490
  getAgentMemory() {
400
491
  return this.agentMemory;
@@ -405,26 +496,29 @@ var MongoDBMemory = class _MongoDBMemory {
405
496
  getIntentMemory() {
406
497
  return this.intentMemory;
407
498
  }
499
+ getWorkflowMemory() {
500
+ return this.workflowMemory;
501
+ }
408
502
  setupMongooseEventListeners() {
409
503
  if (this.eventListenersSetup) return;
410
504
  this.eventListenersSetup = true;
411
- import_mongoose8.default.connection.on("connected", () => {
505
+ import_mongoose10.default.connection.on("connected", () => {
412
506
  this.connected = true;
413
507
  this.reconnectAttempts = 0;
414
508
  this.reconnecting = false;
415
509
  import_logger2.loggers.agent.info("MongoDB connected successfully");
416
510
  });
417
- import_mongoose8.default.connection.on("disconnected", () => {
511
+ import_mongoose10.default.connection.on("disconnected", () => {
418
512
  this.connected = false;
419
513
  import_logger2.loggers.agent.warn("MongoDB disconnected");
420
514
  this.handleDisconnection();
421
515
  });
422
- import_mongoose8.default.connection.on("error", (error) => {
516
+ import_mongoose10.default.connection.on("error", (error) => {
423
517
  this.connected = false;
424
518
  import_logger2.loggers.agent.error("MongoDB connection error:", error);
425
519
  this.handleDisconnection();
426
520
  });
427
- import_mongoose8.default.connection.on("reconnected", () => {
521
+ import_mongoose10.default.connection.on("reconnected", () => {
428
522
  this.connected = true;
429
523
  this.reconnectAttempts = 0;
430
524
  this.reconnecting = false;
@@ -442,7 +536,7 @@ var MongoDBMemory = class _MongoDBMemory {
442
536
  `Attempting to reconnect to MongoDB (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`
443
537
  );
444
538
  try {
445
- await import_mongoose8.default.connect(this.uri, this.connectionConfig);
539
+ await import_mongoose10.default.connect(this.uri, this.connectionConfig);
446
540
  this.connected = true;
447
541
  this.reconnectAttempts = 0;
448
542
  this.reconnecting = false;
@@ -472,7 +566,7 @@ var MongoDBMemory = class _MongoDBMemory {
472
566
  return;
473
567
  }
474
568
  try {
475
- await import_mongoose8.default.connect(this.uri, this.connectionConfig);
569
+ await import_mongoose10.default.connect(this.uri, this.connectionConfig);
476
570
  this.connected = true;
477
571
  this.reconnectAttempts = 0;
478
572
  } catch (error) {
@@ -485,7 +579,7 @@ var MongoDBMemory = class _MongoDBMemory {
485
579
  return;
486
580
  }
487
581
  try {
488
- await import_mongoose8.default.disconnect();
582
+ await import_mongoose10.default.disconnect();
489
583
  this.connected = false;
490
584
  } catch (error) {
491
585
  import_logger2.loggers.agent.error("Failed to disconnect from MongoDB:", error);
@@ -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"],"sourcesContent":["export { MongoDBMemory } from \"./implements/base.memory\";\nexport type { MongoDBMemoryConfig } from \"./implements/base.memory\";","import { IAgentMemory, IIntentMemory, IMemory, IThreadMemory } from \"node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory\";\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\";\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\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\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 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\tagent_prompt: {\n\t\t\ttype: String,\n\t\t},\n\t},\n);\n\nexport interface AgentDocument extends Document {\n\tagent_prompt: 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 AgentMetadata = {\n agent_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_metadata\"\n }).maxTimeMS(timeout)\n .lean<AgentMetadata>();\n return metadata?.agent_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_metadata\",\n }, { \"agent_prompt\": prompt }).maxTimeMS(timeout);\n }, \"updateAgentPrompt()\");\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 const messages = await MessageModel.find({ userId, threadId })\n .sort({ timestamp: 1 })\n .maxTimeMS(timeout);\n\n messages?.forEach((message: MessageDocument) => {\n message.deleteOne();\n });\n\n const thread = await ThreadModel.findOne({ userId, threadId }).maxTimeMS(timeout);\n thread?.deleteOne();\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"],"mappings":"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","names":["import_mongoose","import_logger","import_mongoose","mongoose","import_mongoose","mongoose","import_mongoose","mongoose","import_memory","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/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\tagent_prompt: {\n\t\t\ttype: String,\n\t\t},\n\t},\n);\n\nexport interface AgentDocument extends Document {\n\tagent_prompt: 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 AgentMetadata = {\n agent_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_metadata\"\n }).maxTimeMS(timeout)\n .lean<AgentMetadata>();\n return metadata?.agent_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_metadata\",\n }, { \"agent_prompt\": prompt }).maxTimeMS(timeout);\n }, \"updateAgentPrompt()\");\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 const messages = await MessageModel.find({ userId, threadId })\n .sort({ timestamp: 1 })\n .maxTimeMS(timeout);\n\n messages?.forEach((message: MessageDocument) => {\n message.deleteOne();\n });\n\n const thread = await ThreadModel.findOne({ userId, threadId }).maxTimeMS(timeout);\n thread?.deleteOne();\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 return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await WorkflowModel.updateOne(\n { workflowId },\n { $set: updates }\n ).maxTimeMS(timeout);\n }, \"updateWorkflow()\");\n }\n\n public async deleteWorkflow(workflowId: string): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await WorkflowModel.deleteOne({ workflowId }).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 const query = userId ? { userId } : {};\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"]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { IMemory, IAgentMemory, IThreadMemory, IIntentMemory } from 'node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory';
1
+ import { IMemory, IAgentMemory, IThreadMemory, IIntentMemory, IWorkflowMemory } from '@ainetwork/adk/modules';
2
2
 
3
3
  interface MongoDBMemoryConfig {
4
4
  uri: string;
@@ -24,10 +24,12 @@ declare class MongoDBMemory implements IMemory {
24
24
  private agentMemory;
25
25
  private intentMemory;
26
26
  private threadMemory;
27
+ private workflowMemory;
27
28
  constructor(config: string | MongoDBMemoryConfig);
28
29
  getAgentMemory(): IAgentMemory;
29
30
  getThreadMemory(): IThreadMemory;
30
31
  getIntentMemory(): IIntentMemory;
32
+ getWorkflowMemory(): IWorkflowMemory;
31
33
  private setupMongooseEventListeners;
32
34
  private handleDisconnection;
33
35
  connect(): Promise<void>;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { IMemory, IAgentMemory, IThreadMemory, IIntentMemory } from 'node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory';
1
+ import { IMemory, IAgentMemory, IThreadMemory, IIntentMemory, IWorkflowMemory } from '@ainetwork/adk/modules';
2
2
 
3
3
  interface MongoDBMemoryConfig {
4
4
  uri: string;
@@ -24,10 +24,12 @@ declare class MongoDBMemory implements IMemory {
24
24
  private agentMemory;
25
25
  private intentMemory;
26
26
  private threadMemory;
27
+ private workflowMemory;
27
28
  constructor(config: string | MongoDBMemoryConfig);
28
29
  getAgentMemory(): IAgentMemory;
29
30
  getThreadMemory(): IThreadMemory;
30
31
  getIntentMemory(): IIntentMemory;
32
+ getWorkflowMemory(): IWorkflowMemory;
31
33
  private setupMongooseEventListeners;
32
34
  private handleDisconnection;
33
35
  connect(): Promise<void>;
package/dist/index.js CHANGED
@@ -10,6 +10,9 @@ import {
10
10
  import {
11
11
  ThreadModel
12
12
  } from "./chunk-GPOFS7ZT.js";
13
+ import {
14
+ WorkflowModel
15
+ } from "./chunk-NGLXQZLX.js";
13
16
 
14
17
  // implements/base.memory.ts
15
18
  import mongoose from "mongoose";
@@ -188,6 +191,55 @@ var MongoDBThread = class {
188
191
  }
189
192
  };
190
193
 
194
+ // implements/workflow.memory.ts
195
+ var MongoDBWorkflow = class {
196
+ executeWithRetry;
197
+ getOperationTimeout;
198
+ constructor(executeWithRetry, getOperationTimeout) {
199
+ this.executeWithRetry = executeWithRetry;
200
+ this.getOperationTimeout = getOperationTimeout;
201
+ }
202
+ async createWorkflow(workflow) {
203
+ return this.executeWithRetry(async () => {
204
+ const timeout = this.getOperationTimeout();
205
+ const created = await WorkflowModel.create(workflow);
206
+ return created.toObject();
207
+ }, "createWorkflow()");
208
+ }
209
+ async getWorkflow(workflowId) {
210
+ return this.executeWithRetry(async () => {
211
+ const timeout = this.getOperationTimeout();
212
+ const workflow = await WorkflowModel.findOne({
213
+ workflowId
214
+ }).maxTimeMS(timeout).lean();
215
+ return workflow || void 0;
216
+ }, "getWorkflow()");
217
+ }
218
+ async updateWorkflow(workflowId, updates) {
219
+ return this.executeWithRetry(async () => {
220
+ const timeout = this.getOperationTimeout();
221
+ await WorkflowModel.updateOne(
222
+ { workflowId },
223
+ { $set: updates }
224
+ ).maxTimeMS(timeout);
225
+ }, "updateWorkflow()");
226
+ }
227
+ async deleteWorkflow(workflowId) {
228
+ return this.executeWithRetry(async () => {
229
+ const timeout = this.getOperationTimeout();
230
+ await WorkflowModel.deleteOne({ workflowId }).maxTimeMS(timeout);
231
+ }, "deleteWorkflow()");
232
+ }
233
+ async listWorkflows(userId) {
234
+ return this.executeWithRetry(async () => {
235
+ const timeout = this.getOperationTimeout();
236
+ const query = userId ? { userId } : {};
237
+ const workflows = await WorkflowModel.find(query).maxTimeMS(timeout).lean();
238
+ return workflows;
239
+ }, "listWorkflows()");
240
+ }
241
+ };
242
+
191
243
  // implements/base.memory.ts
192
244
  var MongoDBMemory = class _MongoDBMemory {
193
245
  static instance;
@@ -203,6 +255,7 @@ var MongoDBMemory = class _MongoDBMemory {
203
255
  agentMemory;
204
256
  intentMemory;
205
257
  threadMemory;
258
+ workflowMemory;
206
259
  constructor(config) {
207
260
  const cfg = typeof config === "string" ? { uri: config } : config;
208
261
  this.uri = cfg.uri;
@@ -235,6 +288,10 @@ var MongoDBMemory = class _MongoDBMemory {
235
288
  this.executeWithRetry.bind(this),
236
289
  this.getOperationTimeout.bind(this)
237
290
  );
291
+ this.workflowMemory = new MongoDBWorkflow(
292
+ this.executeWithRetry.bind(this),
293
+ this.getOperationTimeout.bind(this)
294
+ );
238
295
  }
239
296
  getAgentMemory() {
240
297
  return this.agentMemory;
@@ -245,6 +302,9 @@ var MongoDBMemory = class _MongoDBMemory {
245
302
  getIntentMemory() {
246
303
  return this.intentMemory;
247
304
  }
305
+ getWorkflowMemory() {
306
+ return this.workflowMemory;
307
+ }
248
308
  setupMongooseEventListeners() {
249
309
  if (this.eventListenersSetup) return;
250
310
  this.eventListenersSetup = true;
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"],"sourcesContent":["import { IAgentMemory, IIntentMemory, IMemory, IThreadMemory } from \"node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory\";\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\";\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\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\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 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 AgentMetadata = {\n agent_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_metadata\"\n }).maxTimeMS(timeout)\n .lean<AgentMetadata>();\n return metadata?.agent_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_metadata\",\n }, { \"agent_prompt\": prompt }).maxTimeMS(timeout);\n }, \"updateAgentPrompt()\");\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 const messages = await MessageModel.find({ userId, threadId })\n .sort({ timestamp: 1 })\n .maxTimeMS(timeout);\n\n messages?.forEach((message: MessageDocument) => {\n message.deleteOne();\n });\n\n const thread = await ThreadModel.findOne({ userId, threadId }).maxTimeMS(timeout);\n thread?.deleteOne();\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"],"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/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 AgentMetadata = {\n agent_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_metadata\"\n }).maxTimeMS(timeout)\n .lean<AgentMetadata>();\n return metadata?.agent_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_metadata\",\n }, { \"agent_prompt\": prompt }).maxTimeMS(timeout);\n }, \"updateAgentPrompt()\");\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 const messages = await MessageModel.find({ userId, threadId })\n .sort({ timestamp: 1 })\n .maxTimeMS(timeout);\n\n messages?.forEach((message: MessageDocument) => {\n message.deleteOne();\n });\n\n const thread = await ThreadModel.findOne({ userId, threadId }).maxTimeMS(timeout);\n thread?.deleteOne();\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 return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await WorkflowModel.updateOne(\n { workflowId },\n { $set: updates }\n ).maxTimeMS(timeout);\n }, \"updateWorkflow()\");\n }\n\n public async deleteWorkflow(workflowId: string): Promise<void> {\n return this.executeWithRetry(async () => {\n const timeout = this.getOperationTimeout();\n await WorkflowModel.deleteOne({ workflowId }).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 const query = userId ? { userId } : {};\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"]}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // models/workflow.model.ts
31
+ var workflow_model_exports = {};
32
+ __export(workflow_model_exports, {
33
+ WorkflowModel: () => WorkflowModel,
34
+ WorkflowObjectSchema: () => WorkflowObjectSchema
35
+ });
36
+ module.exports = __toCommonJS(workflow_model_exports);
37
+ var import_mongoose = require("mongoose");
38
+ var import_mongoose2 = __toESM(require("mongoose"), 1);
39
+ var WorkflowObjectSchema = new import_mongoose.Schema(
40
+ {
41
+ workflowId: {
42
+ type: String,
43
+ required: true,
44
+ unique: true
45
+ },
46
+ userId: {
47
+ type: String
48
+ },
49
+ title: {
50
+ type: String,
51
+ required: true
52
+ },
53
+ description: {
54
+ type: String,
55
+ required: true
56
+ },
57
+ active: {
58
+ type: Boolean,
59
+ required: true,
60
+ default: false
61
+ },
62
+ content: {
63
+ type: String,
64
+ required: true
65
+ }
66
+ },
67
+ {
68
+ timestamps: true
69
+ }
70
+ );
71
+ var WorkflowModel = import_mongoose2.default.model("Workflow", WorkflowObjectSchema);
72
+ // Annotate the CommonJS export names for ESM import in node:
73
+ 0 && (module.exports = {
74
+ WorkflowModel,
75
+ WorkflowObjectSchema
76
+ });
77
+ //# sourceMappingURL=workflow.model.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../models/workflow.model.ts"],"sourcesContent":["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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAsC;AACtC,IAAAA,mBAAqB;AAEd,IAAM,uBAAuB,IAAI;AAAA,EACvC;AAAA,IACC,YAAY;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,MACP,MAAM;AAAA,IACP;AAAA,IACA,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IACX;AAAA,EACD;AAAA,EACA;AAAA,IACC,YAAY;AAAA,EACb;AACD;AAWO,IAAM,gBAAgB,iBAAAC,QAAS,MAAwB,YAAY,oBAAoB;","names":["import_mongoose","mongoose"]}
@@ -0,0 +1,54 @@
1
+ import mongoose, { Schema, Document } from 'mongoose';
2
+
3
+ declare const WorkflowObjectSchema: Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, {
4
+ timestamps: true;
5
+ }, {
6
+ createdAt: NativeDate;
7
+ updatedAt: NativeDate;
8
+ } & {
9
+ description: string;
10
+ title: string;
11
+ content: string;
12
+ workflowId: string;
13
+ active: boolean;
14
+ userId?: string | null | undefined;
15
+ }, Document<unknown, {}, mongoose.FlatRecord<{
16
+ createdAt: NativeDate;
17
+ updatedAt: NativeDate;
18
+ } & {
19
+ description: string;
20
+ title: string;
21
+ content: string;
22
+ workflowId: string;
23
+ active: boolean;
24
+ userId?: string | null | undefined;
25
+ }>, {}> & mongoose.FlatRecord<{
26
+ createdAt: NativeDate;
27
+ updatedAt: NativeDate;
28
+ } & {
29
+ description: string;
30
+ title: string;
31
+ content: string;
32
+ workflowId: string;
33
+ active: boolean;
34
+ userId?: string | null | undefined;
35
+ }> & {
36
+ _id: mongoose.Types.ObjectId;
37
+ } & {
38
+ __v: number;
39
+ }>;
40
+ interface WorkflowDocument extends Document {
41
+ workflowId: string;
42
+ userId?: string;
43
+ title: string;
44
+ description: string;
45
+ active: boolean;
46
+ content: string;
47
+ }
48
+ declare const WorkflowModel: mongoose.Model<WorkflowDocument, {}, {}, {}, Document<unknown, {}, WorkflowDocument, {}> & WorkflowDocument & Required<{
49
+ _id: unknown;
50
+ }> & {
51
+ __v: number;
52
+ }, any>;
53
+
54
+ export { type WorkflowDocument, WorkflowModel, WorkflowObjectSchema };
@@ -0,0 +1,54 @@
1
+ import mongoose, { Schema, Document } from 'mongoose';
2
+
3
+ declare const WorkflowObjectSchema: Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, {
4
+ timestamps: true;
5
+ }, {
6
+ createdAt: NativeDate;
7
+ updatedAt: NativeDate;
8
+ } & {
9
+ description: string;
10
+ title: string;
11
+ content: string;
12
+ workflowId: string;
13
+ active: boolean;
14
+ userId?: string | null | undefined;
15
+ }, Document<unknown, {}, mongoose.FlatRecord<{
16
+ createdAt: NativeDate;
17
+ updatedAt: NativeDate;
18
+ } & {
19
+ description: string;
20
+ title: string;
21
+ content: string;
22
+ workflowId: string;
23
+ active: boolean;
24
+ userId?: string | null | undefined;
25
+ }>, {}> & mongoose.FlatRecord<{
26
+ createdAt: NativeDate;
27
+ updatedAt: NativeDate;
28
+ } & {
29
+ description: string;
30
+ title: string;
31
+ content: string;
32
+ workflowId: string;
33
+ active: boolean;
34
+ userId?: string | null | undefined;
35
+ }> & {
36
+ _id: mongoose.Types.ObjectId;
37
+ } & {
38
+ __v: number;
39
+ }>;
40
+ interface WorkflowDocument extends Document {
41
+ workflowId: string;
42
+ userId?: string;
43
+ title: string;
44
+ description: string;
45
+ active: boolean;
46
+ content: string;
47
+ }
48
+ declare const WorkflowModel: mongoose.Model<WorkflowDocument, {}, {}, {}, Document<unknown, {}, WorkflowDocument, {}> & WorkflowDocument & Required<{
49
+ _id: unknown;
50
+ }> & {
51
+ __v: number;
52
+ }, any>;
53
+
54
+ export { type WorkflowDocument, WorkflowModel, WorkflowObjectSchema };
@@ -0,0 +1,9 @@
1
+ import {
2
+ WorkflowModel,
3
+ WorkflowObjectSchema
4
+ } from "../chunk-NGLXQZLX.js";
5
+ export {
6
+ WorkflowModel,
7
+ WorkflowObjectSchema
8
+ };
9
+ //# sourceMappingURL=workflow.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,9 +1,10 @@
1
- import { IAgentMemory, IIntentMemory, IMemory, IThreadMemory } from "node_modules/@ainetwork/adk/dist/esm/modules/memory/base.memory";
1
+ import { IAgentMemory, IIntentMemory, IMemory, IThreadMemory, IWorkflowMemory } from "@ainetwork/adk/modules";
2
2
  import mongoose from "mongoose";
3
3
  import { loggers } from "@ainetwork/adk/utils/logger";
4
4
  import { MongoDBAgent } from "./agent.memory";
5
5
  import { MongoDBIntent } from "./intent.memory";
6
6
  import { MongoDBThread } from "./thread.memory";
7
+ import { MongoDBWorkflow } from "./workflow.memory";
7
8
 
8
9
  export interface MongoDBMemoryConfig {
9
10
  uri: string;
@@ -31,6 +32,7 @@ export class MongoDBMemory implements IMemory {
31
32
  private agentMemory: MongoDBAgent;
32
33
  private intentMemory: MongoDBIntent;
33
34
  private threadMemory: MongoDBThread;
35
+ private workflowMemory: MongoDBWorkflow;
34
36
 
35
37
  constructor(config: string | MongoDBMemoryConfig) {
36
38
  const cfg = typeof config === 'string' ? { uri: config } : config;
@@ -70,6 +72,11 @@ export class MongoDBMemory implements IMemory {
70
72
  this.executeWithRetry.bind(this),
71
73
  this.getOperationTimeout.bind(this)
72
74
  );
75
+
76
+ this.workflowMemory = new MongoDBWorkflow(
77
+ this.executeWithRetry.bind(this),
78
+ this.getOperationTimeout.bind(this)
79
+ );
73
80
  }
74
81
 
75
82
  public getAgentMemory(): IAgentMemory {
@@ -84,6 +91,10 @@ export class MongoDBMemory implements IMemory {
84
91
  return this.intentMemory;
85
92
  }
86
93
 
94
+ public getWorkflowMemory(): IWorkflowMemory {
95
+ return this.workflowMemory;
96
+ }
97
+
87
98
  private setupMongooseEventListeners(): void {
88
99
  if (this.eventListenersSetup) return;
89
100
 
@@ -0,0 +1,69 @@
1
+ import type { IWorkflowMemory } from "@ainetwork/adk/modules";
2
+ import type { Workflow } from "@ainetwork/adk/types/memory";
3
+ import { WorkflowModel } from "../models/workflow.model";
4
+
5
+ export type ExecuteWithRetryFn = <T>(
6
+ operation: () => Promise<T>,
7
+ operationName?: string
8
+ ) => Promise<T>;
9
+
10
+ export type GetOperationTimeoutFn = () => number;
11
+
12
+ export class MongoDBWorkflow implements IWorkflowMemory {
13
+ private executeWithRetry: ExecuteWithRetryFn;
14
+ private getOperationTimeout: GetOperationTimeoutFn;
15
+
16
+ constructor(
17
+ executeWithRetry: ExecuteWithRetryFn,
18
+ getOperationTimeout: GetOperationTimeoutFn
19
+ ) {
20
+ this.executeWithRetry = executeWithRetry;
21
+ this.getOperationTimeout = getOperationTimeout;
22
+ }
23
+
24
+ public async createWorkflow(workflow: Workflow): Promise<Workflow> {
25
+ return this.executeWithRetry(async () => {
26
+ const timeout = this.getOperationTimeout();
27
+ const created = await WorkflowModel.create(workflow);
28
+ return created.toObject() as Workflow;
29
+ }, "createWorkflow()");
30
+ }
31
+
32
+ public async getWorkflow(workflowId: string): Promise<Workflow | undefined> {
33
+ return this.executeWithRetry(async () => {
34
+ const timeout = this.getOperationTimeout();
35
+ const workflow = await WorkflowModel.findOne({
36
+ workflowId
37
+ }).maxTimeMS(timeout).lean<Workflow>();
38
+ return workflow || undefined;
39
+ }, "getWorkflow()");
40
+ }
41
+
42
+ public async updateWorkflow(workflowId: string, updates: Partial<Workflow>): Promise<void> {
43
+ return this.executeWithRetry(async () => {
44
+ const timeout = this.getOperationTimeout();
45
+ await WorkflowModel.updateOne(
46
+ { workflowId },
47
+ { $set: updates }
48
+ ).maxTimeMS(timeout);
49
+ }, "updateWorkflow()");
50
+ }
51
+
52
+ public async deleteWorkflow(workflowId: string): Promise<void> {
53
+ return this.executeWithRetry(async () => {
54
+ const timeout = this.getOperationTimeout();
55
+ await WorkflowModel.deleteOne({ workflowId }).maxTimeMS(timeout);
56
+ }, "deleteWorkflow()");
57
+ }
58
+
59
+ public async listWorkflows(userId?: string): Promise<Workflow[]> {
60
+ return this.executeWithRetry(async () => {
61
+ const timeout = this.getOperationTimeout();
62
+ const query = userId ? { userId } : {};
63
+ const workflows = await WorkflowModel.find(query)
64
+ .maxTimeMS(timeout)
65
+ .lean<Workflow[]>();
66
+ return workflows;
67
+ }, "listWorkflows()");
68
+ }
69
+ }
@@ -0,0 +1,46 @@
1
+ import { type Document, Schema } from "mongoose";
2
+ import mongoose from "mongoose";
3
+
4
+ export const WorkflowObjectSchema = new Schema(
5
+ {
6
+ workflowId: {
7
+ type: String,
8
+ required: true,
9
+ unique: true,
10
+ },
11
+ userId: {
12
+ type: String,
13
+ },
14
+ title: {
15
+ type: String,
16
+ required: true,
17
+ },
18
+ description: {
19
+ type: String,
20
+ required: true,
21
+ },
22
+ active: {
23
+ type: Boolean,
24
+ required: true,
25
+ default: false,
26
+ },
27
+ content: {
28
+ type: String,
29
+ required: true,
30
+ },
31
+ },
32
+ {
33
+ timestamps: true,
34
+ }
35
+ );
36
+
37
+ export interface WorkflowDocument extends Document {
38
+ workflowId: string;
39
+ userId?: string;
40
+ title: string;
41
+ description: string;
42
+ active: boolean;
43
+ content: string;
44
+ }
45
+
46
+ export const WorkflowModel = mongoose.model<WorkflowDocument>("Workflow", WorkflowObjectSchema);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ainetwork/adk-provider-memory-mongodb",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "author": "AI Network (https://ainetwork.ai)",
5
5
  "type": "module",
6
6
  "engines": {
@@ -28,7 +28,7 @@
28
28
  "clean": "rm -rf dist"
29
29
  },
30
30
  "dependencies": {
31
- "@ainetwork/adk": "^0.3.3",
31
+ "@ainetwork/adk": "^0.3.4",
32
32
  "mongoose": "^8.16.5"
33
33
  },
34
34
  "devDependencies": {
@@ -38,5 +38,5 @@
38
38
  "publishConfig": {
39
39
  "access": "public"
40
40
  },
41
- "gitHead": "e46af4210c3dc6ea073797d4ba465a24651c8ca2"
41
+ "gitHead": "a1e19f88b1255e8b5d3fd6f60edb82139b324123"
42
42
  }