@easynet/agent-memory 1.0.0 → 1.0.2

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.
@@ -1,13 +1,14 @@
1
1
  "use strict";
2
2
  /**
3
- * Mem0 provider: wraps mem0ai (OSS) as a MemoryProvider.
4
- * Use with an initialized Memory instance from mem0ai/oss.
3
+ * Adapter: reuse agent-common mem0 long-term provider via public memory factory.
5
4
  */
6
5
  Object.defineProperty(exports, "__esModule", { value: true });
7
6
  exports.Mem0Provider = void 0;
8
7
  const defaultNamespaceToUserId = (namespace) => namespace;
8
+ const AGENT_COMMON_MEMORY_ERROR = "Mem0Provider requires @easynet/agent-common with memory exports. Please upgrade @easynet/agent-common.";
9
9
  class Mem0Provider {
10
10
  mem0;
11
+ universal;
11
12
  namespaceToUserId;
12
13
  constructor(options) {
13
14
  if (!options.memory) {
@@ -15,78 +16,87 @@ class Mem0Provider {
15
16
  }
16
17
  this.mem0 = options.memory;
17
18
  this.namespaceToUserId = options.namespaceToUserId ?? defaultNamespaceToUserId;
19
+ this.universal = (async () => {
20
+ const common = (await import("@easynet/agent-common"));
21
+ if (typeof common.createUniversalMemoryFromConfig !== "function") {
22
+ throw new Error(AGENT_COMMON_MEMORY_ERROR);
23
+ }
24
+ return common.createUniversalMemoryFromConfig({
25
+ config: { longTerm: { type: "mem0" } },
26
+ overrides: {
27
+ mem0Memory: {
28
+ add: (messages, opts) => this.mem0.add(messages, {
29
+ ...opts,
30
+ userId: opts?.userId ? this.namespaceToUserId(opts.userId) : opts?.userId,
31
+ }),
32
+ search: (query, opts) => this.mem0.search(query, {
33
+ ...opts,
34
+ userId: opts?.userId ? this.namespaceToUserId(opts.userId) : opts?.userId,
35
+ }),
36
+ delete: (memoryId) => this.mem0.delete(memoryId),
37
+ },
38
+ },
39
+ });
40
+ })();
41
+ }
42
+ toMemoryItem(namespace, record, now) {
43
+ const type = record.metadata?.type ?? "cross_thread";
44
+ return {
45
+ id: record.id,
46
+ type,
47
+ namespace,
48
+ scope: (record.metadata?.scope ?? "global"),
49
+ content: record.content,
50
+ metadata: {
51
+ ...(record.metadata ?? {}),
52
+ created_at: now,
53
+ updated_at: now,
54
+ },
55
+ };
18
56
  }
19
57
  async write(req) {
20
- const userId = this.namespaceToUserId(req.namespace);
21
- const messages = [{ role: "user", content: req.content }];
22
- await this.mem0.add(messages, {
23
- userId,
58
+ const universal = await this.universal;
59
+ const record = await universal.memorize({
60
+ kind: "long_term",
61
+ namespace: req.namespace,
62
+ content: req.content,
24
63
  metadata: {
25
64
  ...req.metadata,
26
65
  type: req.type,
27
66
  scope: req.scope,
28
67
  },
29
68
  });
30
- const search = await this.mem0.search(req.content, {
31
- userId,
32
- limit: 1,
33
- });
34
- const first = search.results?.[0];
35
69
  const now = new Date().toISOString();
36
- if (first) {
37
- return {
38
- id: first.id,
39
- type: req.type,
40
- namespace: req.namespace,
41
- scope: req.scope ?? "global",
42
- content: first.memory,
43
- metadata: {
44
- ...req.metadata,
45
- ...first.metadata,
46
- created_at: now,
47
- updated_at: now,
48
- },
49
- };
50
- }
51
- const id = `mem0-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
52
70
  return {
53
- id,
71
+ id: record.id,
54
72
  type: req.type,
55
73
  namespace: req.namespace,
56
74
  scope: req.scope ?? "global",
57
- content: req.content,
75
+ content: record.content,
58
76
  metadata: {
59
- ...req.metadata,
77
+ ...(record.metadata ?? {}),
60
78
  created_at: now,
61
79
  updated_at: now,
62
80
  },
63
81
  };
64
82
  }
65
83
  async query(req) {
66
- const userId = this.namespaceToUserId(req.namespace);
67
- const limit = req.topK ?? 10;
68
- const search = await this.mem0.search(req.query, {
69
- userId,
70
- limit,
71
- metadata: req.filters,
84
+ const universal = await this.universal;
85
+ const records = await universal.recall({
86
+ kind: "long_term",
87
+ namespace: req.namespace,
88
+ query: req.query,
89
+ topK: req.topK ?? 10,
90
+ filters: req.filters,
72
91
  });
73
- const results = search.results ?? [];
74
92
  const now = new Date().toISOString();
75
- return results.map((r) => ({
76
- id: r.id,
77
- type: r.metadata?.type ?? "cross_thread",
78
- namespace: req.namespace,
79
- scope: "global",
80
- content: r.memory,
81
- metadata: {
82
- ...r.metadata,
83
- created_at: now,
84
- updated_at: now,
85
- },
86
- }));
93
+ const mapped = records.map((record) => this.toMemoryItem(req.namespace, record, now));
94
+ const types = req.types;
95
+ return types ? mapped.filter((item) => types.includes(item.type)) : mapped;
87
96
  }
88
- async delete(id, _namespace) {
89
- await this.mem0.delete(id);
97
+ async delete(id, namespace) {
98
+ const universal = await this.universal;
99
+ await universal.forget({ kind: "long_term", namespace, id });
90
100
  }
91
101
  async deleteAllForNamespace(namespace) {
92
102
  const userId = this.namespaceToUserId(namespace);
@@ -1 +1 @@
1
- {"version":3,"file":"mem0-provider.js","sourceRoot":"","sources":["../../../src/providers/mem0-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mem0-provider.js","sourceRoot":"","sources":["../../../src/providers/mem0-provider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "@easynet/agent-memory",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Unified memory layer for LangChain / LangGraph / DeepAgents",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/src/index.d.ts",
7
7
  "scripts": {
8
8
  "build": "tsc",
9
- "pretest": "npm run build",
9
+ "pretest": "pnpm run build",
10
10
  "test": "node --test dist/test/",
11
11
  "test:unit": "node --test dist/test/core dist/test/providers dist/test/ingest dist/test/create-agent-memory.test.js",
12
+ "test:unit:ci": "node --test dist/test/core dist/test/ingest dist/test/create-agent-memory.test.js dist/test/providers/in-memory-store.test.js dist/test/providers/rag-provider.test.js",
12
13
  "test:integration": "node --test dist/test/integration",
13
14
  "test:integration:live": "RUN_LIVE_INTEGRATION=1 node --test dist/test/integration",
14
15
  "test:full": "RUN_LIVE_INTEGRATION=1 node --test dist/test/",
@@ -56,16 +57,16 @@
56
57
  }
57
58
  },
58
59
  "devDependencies": {
59
- "@types/node": "^22.0.0",
60
- "better-sqlite3": "^11.0.0",
61
- "cheerio": "^1.0.0",
62
- "typescript": "~5.6.0",
63
60
  "@semantic-release/commit-analyzer": "^13.0.0",
64
61
  "@semantic-release/git": "^10.0.1",
65
62
  "@semantic-release/github": "^11.0.0",
66
63
  "@semantic-release/npm": "^12.0.0",
67
64
  "@semantic-release/release-notes-generator": "^14.0.0",
68
- "semantic-release": "^24.2.0"
65
+ "@types/node": "^22.0.0",
66
+ "better-sqlite3": "^11.0.0",
67
+ "cheerio": "^1.0.0",
68
+ "semantic-release": "^24.2.0",
69
+ "typescript": "~5.6.0"
69
70
  },
70
71
  "files": [
71
72
  "dist"