@easynet/agent-memory 1.0.1 → 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,301 +1,22 @@
1
1
  "use strict";
2
- /**
3
- * Ingest from a single URL: local path (PDF/txt/HTML/image) or remote URL.
4
- * Format/media detection is for ingest pipeline only—not use-case routing; routing is config-driven.
5
- * PDF requires pdf-parse; images may use captionFn for caption.
6
- * Chunking is paragraph-based (semantic); we never store image binaries—only caption + URL.
7
- */
8
2
  Object.defineProperty(exports, "__esModule", { value: true });
9
3
  exports.ingestUrlToMemory = ingestUrlToMemory;
10
- const node_path_1 = require("node:path");
11
- function isRemote(url) {
12
- return /^https?:\/\//i.test(url);
4
+ const common_ingest_js_1 = require("./common-ingest.js");
5
+ async function ingestToChunks(options) {
6
+ const common = (await (0, common_ingest_js_1.loadCommonModule)());
7
+ if (typeof common.ingestUrlToChunks !== "function") {
8
+ throw new Error("ingestUrlToMemory requires @easynet/agent-common with ingest exports. Please upgrade @easynet/agent-common.");
9
+ }
10
+ return common.ingestUrlToChunks({
11
+ url: options.url,
12
+ chunkSize: options.chunkSize,
13
+ metadata: options.metadata,
14
+ captionFn: options.captionFn,
15
+ });
13
16
  }
14
- function isFileProtocol(url) {
15
- return url.toLowerCase().startsWith("file://");
16
- }
17
- function getContentTypeFromPath(path) {
18
- const ext = path.replace(/\?.*$/, "").split(".").pop()?.toLowerCase() ?? "";
19
- const map = {
20
- pdf: "application/pdf",
21
- txt: "text/plain",
22
- html: "text/html",
23
- htm: "text/html",
24
- xhtml: "text/html",
25
- png: "image/png",
26
- jpg: "image/jpeg",
27
- jpeg: "image/jpeg",
28
- gif: "image/gif",
29
- webp: "image/webp",
30
- };
31
- return map[ext] ?? "application/octet-stream";
32
- }
33
- async function getResource(url) {
34
- if (isRemote(url)) {
35
- const res = await fetch(url);
36
- if (!res.ok)
37
- throw new Error(`Failed to fetch ${url}: ${res.status} ${res.statusText}`);
38
- const contentType = res.headers.get("content-type")?.split(";")[0].trim() ?? "";
39
- const ab = await res.arrayBuffer();
40
- return { buffer: Buffer.from(ab), contentType };
41
- }
42
- const { readFile } = await import("node:fs/promises");
43
- const path = isFileProtocol(url) ? decodeURIComponent(url.slice(7)) : url;
44
- const buffer = await readFile(path);
45
- const contentType = getContentTypeFromPath(path);
46
- return { buffer, contentType };
47
- }
48
- /**
49
- * Semantic chunking: paragraph-based so chunks respect meaning.
50
- * Splits on double newline; long paragraphs are split by chunkSize.
51
- */
52
- function chunkText(text, chunkSize) {
53
- const trimmed = text.trim();
54
- if (!trimmed)
55
- return [];
56
- const chunks = [];
57
- const paragraphs = trimmed.split(/\n\n+/);
58
- let current = "";
59
- for (const p of paragraphs) {
60
- if (current.length + p.length + 2 <= chunkSize) {
61
- current = current ? `${current}\n\n${p}` : p;
62
- }
63
- else {
64
- if (current)
65
- chunks.push(current);
66
- if (p.length <= chunkSize) {
67
- current = p;
68
- }
69
- else {
70
- for (let i = 0; i < p.length; i += chunkSize) {
71
- chunks.push(p.slice(i, i + chunkSize));
72
- }
73
- current = "";
74
- }
75
- }
76
- }
77
- if (current)
78
- chunks.push(current);
79
- return chunks;
80
- }
81
- function resolveImageUrl(src, baseUrl) {
82
- if (!src?.trim())
83
- return null;
84
- const s = src.trim();
85
- if (/^https?:\/\//i.test(s))
86
- return s;
87
- try {
88
- return new URL(s, baseUrl).href;
89
- }
90
- catch {
91
- return null;
92
- }
93
- }
94
- /** Extract main body content and image URLs from HTML. Uses cheerio when available; else stripHtml + no images. */
95
- async function extractMainContent(html, pageUrl) {
96
- try {
97
- const cheerio = await import("cheerio");
98
- const $ = cheerio.load(html);
99
- $("script, style, nav, footer, header, aside, iframe").remove();
100
- const main = $("article").length > 0
101
- ? $("article").first()
102
- : $("main").length > 0
103
- ? $("main").first()
104
- : $("body");
105
- const textSource = main.length > 0 ? main : $("body");
106
- const text = textSource.text().replace(/\s+/g, " ").trim();
107
- const imageUrls = [];
108
- const imgContainer = main.length > 0 ? main : $("body");
109
- if (imgContainer.length > 0) {
110
- imgContainer.find("img").each((_, el) => {
111
- const resolved = resolveImageUrl($(el).attr("src") ?? undefined, pageUrl);
112
- if (resolved && !imageUrls.includes(resolved))
113
- imageUrls.push(resolved);
114
- });
115
- }
116
- else {
117
- $("img").each((_, el) => {
118
- const resolved = resolveImageUrl($(el).attr("src") ?? undefined, pageUrl);
119
- if (resolved && !imageUrls.includes(resolved))
120
- imageUrls.push(resolved);
121
- });
122
- }
123
- return { text, imageUrls };
124
- }
125
- catch {
126
- return { text: stripHtml(html), imageUrls: [] };
127
- }
128
- }
129
- function stripHtml(html) {
130
- const noScript = html.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, " ");
131
- const noStyle = noScript.replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi, " ");
132
- const noTags = noStyle.replace(/<[^>]+>/g, " ");
133
- const decoded = noTags
134
- .replace(/&nbsp;/gi, " ")
135
- .replace(/&amp;/gi, "&")
136
- .replace(/&lt;/gi, "<")
137
- .replace(/&gt;/gi, ">")
138
- .replace(/&quot;/gi, '"');
139
- return decoded.replace(/\s+/g, " ").trim();
140
- }
141
- function isPdf(contentType, url) {
142
- if (contentType.includes("application/pdf"))
143
- return true;
144
- if (/\.pdf(\?|$)/i.test(url))
145
- return true;
146
- return false;
147
- }
148
- function isHtml(contentType, url) {
149
- if (contentType.includes("text/html"))
150
- return true;
151
- if (/\.(html?|xhtml)(\?|$)/i.test(url))
152
- return true;
153
- return false;
154
- }
155
- function isImage(contentType, url) {
156
- if (contentType.startsWith("image/"))
157
- return true;
158
- if (/\.(png|jpe?g|gif|webp)(\?|$)/i.test(url))
159
- return true;
160
- return false;
161
- }
162
- /** Detect image by magic bytes so uploads without extension (e.g. multer temp files) are still treated as images. */
163
- function isImageBuffer(buffer) {
164
- if (buffer.length < 12)
165
- return false;
166
- // PNG: 89 50 4E 47 0D 0A 1A 0A
167
- if (buffer[0] === 0x89 && buffer[1] === 0x50 && buffer[2] === 0x4e && buffer[3] === 0x47)
168
- return true;
169
- // JPEG: FF D8 FF
170
- if (buffer[0] === 0xff && buffer[1] === 0xd8 && buffer[2] === 0xff)
171
- return true;
172
- // GIF: GIF87a or GIF89a
173
- if (buffer[0] === 0x47 && buffer[1] === 0x49 && buffer[2] === 0x46)
174
- return true;
175
- // WebP: RIFF....WEBP
176
- if (buffer[0] === 0x52 && buffer[1] === 0x49 && buffer[2] === 0x46 && buffer[3] === 0x46 && buffer.length >= 12 &&
177
- buffer[8] === 0x57 && buffer[9] === 0x45 && buffer[10] === 0x42 && buffer[11] === 0x50)
178
- return true;
179
- return false;
180
- }
181
- async function extractTextFromPdf(buffer) {
182
- try {
183
- const pdfParse = (await import("pdf-parse")).default;
184
- const data = await pdfParse(buffer);
185
- return typeof data?.text === "string" ? data.text : "";
186
- }
187
- catch (e) {
188
- const err = e;
189
- if (err?.code === "ERR_MODULE_NOT_FOUND" || err?.message?.includes("pdf-parse")) {
190
- throw new Error("PDF support requires pdf-parse: pnpm add pdf-parse");
191
- }
192
- throw e;
193
- }
194
- }
195
- /**
196
- * Ingest from local path or remote URL; detect PDF/txt/HTML/image by format, then write as knowledge.
197
- */
198
17
  async function ingestUrlToMemory(memory, options) {
199
- const { url, namespace, type = "knowledge", chunkSize = 800, metadata = {}, captionFn, } = options;
200
- const { buffer, contentType } = await getResource(url);
201
- const ct = contentType.toLowerCase();
202
- const detectedAsImage = isImage(ct, url) || isImageBuffer(buffer);
203
- let firstItem;
204
- let totalCount = 0;
205
- if (isPdf(ct, url)) {
206
- const text = await extractTextFromPdf(buffer);
207
- const chunks = chunkText(text, chunkSize);
208
- for (const content of chunks) {
209
- if (!content.trim())
210
- continue;
211
- const item = await memory.memorize({
212
- namespace,
213
- type,
214
- content,
215
- metadata: { ...metadata, source: "doc" },
216
- });
217
- if (!firstItem)
218
- firstItem = item;
219
- totalCount += 1;
220
- }
221
- return { count: totalCount, firstItem };
222
- }
223
- if (detectedAsImage) {
224
- const text = captionFn ? await captionFn(buffer) : `(image: ${url})`;
225
- const item = await memory.memorize({
226
- namespace,
227
- type,
228
- content: text,
229
- metadata: { ...metadata, source: "doc" },
230
- });
231
- if (!firstItem)
232
- firstItem = item;
233
- return { count: 1, firstItem };
234
- }
235
- if (isHtml(ct, url)) {
236
- const html = buffer.toString("utf-8");
237
- const pageBase = isRemote(url)
238
- ? url
239
- : url.toLowerCase().startsWith("file://")
240
- ? url
241
- : "file://" + (0, node_path_1.resolve)(url).replace(/\\/g, "/");
242
- const { text: mainText, imageUrls } = await extractMainContent(html, pageBase);
243
- for (const imageUrl of imageUrls) {
244
- let content;
245
- if (captionFn) {
246
- try {
247
- const { buffer: imgBuffer } = await getResource(imageUrl);
248
- const caption = await captionFn(imgBuffer);
249
- content = `[image: ${imageUrl}]: ${caption}`;
250
- }
251
- catch {
252
- content = `[image: ${imageUrl}]`;
253
- }
254
- }
255
- else {
256
- content = `[image: ${imageUrl}]`;
257
- }
258
- const item = await memory.memorize({
259
- namespace,
260
- type,
261
- content,
262
- metadata: { ...metadata, source: "doc" },
263
- });
264
- if (!firstItem)
265
- firstItem = item;
266
- totalCount += 1;
267
- }
268
- const chunks = chunkText(mainText, chunkSize);
269
- for (const content of chunks) {
270
- if (!content.trim())
271
- continue;
272
- const item = await memory.memorize({
273
- namespace,
274
- type,
275
- content,
276
- metadata: { ...metadata, source: "doc" },
277
- });
278
- if (!firstItem)
279
- firstItem = item;
280
- totalCount += 1;
281
- }
282
- return { count: totalCount, firstItem };
283
- }
284
- const text = buffer.toString("utf-8");
285
- const chunks = chunkText(text, chunkSize);
286
- for (const content of chunks) {
287
- if (!content.trim())
288
- continue;
289
- const item = await memory.memorize({
290
- namespace,
291
- type,
292
- content,
293
- metadata: { ...metadata, source: "doc" },
294
- });
295
- if (!firstItem)
296
- firstItem = item;
297
- totalCount += 1;
298
- }
299
- return { count: totalCount, firstItem };
18
+ const { namespace, type = "knowledge" } = options;
19
+ const { chunks } = await ingestToChunks(options);
20
+ return (0, common_ingest_js_1.writeChunksToMemory)(memory, namespace, type, chunks);
300
21
  }
301
22
  //# sourceMappingURL=url-ingest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-ingest.js","sourceRoot":"","sources":["../../../src/ingest/url-ingest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"url-ingest.js","sourceRoot":"","sources":["../../../src/ingest/url-ingest.ts"],"names":[],"mappings":";;AAmCA,8CAOC;AAxCD,yDAAkG;AAWlG,KAAK,UAAU,cAAc,CAAC,OAAyB;IACrD,MAAM,MAAM,GAAG,CAAC,MAAM,IAAA,mCAAgB,GAAE,CAOvC,CAAC;IACF,IAAI,OAAO,MAAM,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CACb,6GAA6G,CAC9G,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,iBAAiB,CAAC;QAC9B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,iBAAiB,CACrC,MAAmB,EACnB,OAAyB;IAEzB,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IAClD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,IAAA,sCAAmB,EAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC"}
@@ -1,11 +1,12 @@
1
1
  /**
2
- * In-memory cross-thread store: namespace-scoped MemoryItems.
3
- * Suitable for dev and single-process; use SQLite/Postgres for production.
2
+ * Adapter: reuse agent-common in-memory store implementation for agent-memory provider contract.
4
3
  */
5
4
  import type { MemoryItem, MemoryProvider, MemoryQueryRequest, MemoryWriteRequest } from "../core/types.js";
6
5
  export declare class InMemoryStoreProvider implements MemoryProvider {
7
- private store;
6
+ private readonly storePromise;
7
+ constructor();
8
8
  private key;
9
+ private getNamespaceItems;
9
10
  write(req: MemoryWriteRequest): Promise<MemoryItem>;
10
11
  query(req: MemoryQueryRequest): Promise<MemoryItem[]>;
11
12
  delete(id: string, namespace: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory-store.d.ts","sourceRoot":"","sources":["../../../src/providers/in-memory-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAG1B,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,OAAO,CAAC,KAAK,CAAiC;IAE9C,OAAO,CAAC,GAAG;IAIL,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAmBnD,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAYrD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQpE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIjE"}
1
+ {"version":3,"file":"in-memory-store.d.ts","sourceRoot":"","sources":["../../../src/providers/in-memory-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAS3G,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;;IAgB1D,OAAO,CAAC,GAAG;YAIG,iBAAiB;IAQzB,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAoBnD,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAQrD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAUpE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMjE"}
@@ -1,16 +1,31 @@
1
1
  "use strict";
2
2
  /**
3
- * In-memory cross-thread store: namespace-scoped MemoryItems.
4
- * Suitable for dev and single-process; use SQLite/Postgres for production.
3
+ * Adapter: reuse agent-common in-memory store implementation for agent-memory provider contract.
5
4
  */
6
5
  Object.defineProperty(exports, "__esModule", { value: true });
7
6
  exports.InMemoryStoreProvider = void 0;
8
7
  const node_crypto_1 = require("node:crypto");
9
8
  class InMemoryStoreProvider {
10
- store = new Map();
9
+ storePromise;
10
+ constructor() {
11
+ this.storePromise = (async () => {
12
+ const common = (await import("@easynet/agent-common"));
13
+ if (typeof common.createMemoryStore !== "function") {
14
+ throw new Error("InMemoryStoreProvider requires @easynet/agent-common with memory exports. Please upgrade @easynet/agent-common.");
15
+ }
16
+ return common.createMemoryStore({ type: "in_memory" });
17
+ })();
18
+ }
11
19
  key(id, namespace) {
12
20
  return `${namespace}:${id}`;
13
21
  }
22
+ async getNamespaceItems(namespace) {
23
+ const store = await this.storePromise;
24
+ const entries = await store.entries({
25
+ prefix: `${namespace}:`,
26
+ });
27
+ return entries.map((entry) => entry.value);
28
+ }
14
29
  async write(req) {
15
30
  const now = new Date().toISOString();
16
31
  const id = (0, node_crypto_1.randomUUID)();
@@ -26,36 +41,36 @@ class InMemoryStoreProvider {
26
41
  updated_at: now,
27
42
  },
28
43
  };
29
- this.store.set(this.key(id, req.namespace), item);
44
+ const store = await this.storePromise;
45
+ await store.set(this.key(id, req.namespace), item);
30
46
  return item;
31
47
  }
32
48
  async query(req) {
33
- const prefix = req.namespace + ":";
34
- const items = [];
35
- for (const [k, v] of this.store) {
36
- if (!k.startsWith(prefix))
37
- continue;
38
- if (req.types && !req.types.includes(v.type))
39
- continue;
40
- items.push(v);
41
- }
42
49
  const topK = req.topK ?? 10;
43
- return items.slice(0, topK);
50
+ const items = await this.getNamespaceItems(req.namespace);
51
+ return items
52
+ .filter((item) => !req.types || req.types.includes(item.type))
53
+ .slice(0, topK);
44
54
  }
45
55
  async delete(id, namespace) {
46
- this.store.delete(this.key(id, namespace));
56
+ const store = await this.storePromise;
57
+ await store.delete(this.key(id, namespace));
47
58
  }
48
59
  async getByKey(namespace, key) {
49
- for (const [, v] of this.store) {
50
- if (v.namespace === namespace && v.metadata?.path === key)
51
- return v;
60
+ const items = await this.getNamespaceItems(namespace);
61
+ for (const item of items) {
62
+ if (item.metadata?.path === key) {
63
+ return item;
64
+ }
52
65
  }
53
66
  return null;
54
67
  }
55
68
  async deleteByKey(namespace, key) {
56
- const item = await this.getByKey(namespace, key);
57
- if (item)
58
- this.store.delete(this.key(item.id, namespace));
69
+ const found = await this.getByKey(namespace, key);
70
+ if (!found)
71
+ return;
72
+ const store = await this.storePromise;
73
+ await store.delete(this.key(found.id, namespace));
59
74
  }
60
75
  }
61
76
  exports.InMemoryStoreProvider = InMemoryStoreProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory-store.js","sourceRoot":"","sources":["../../../src/providers/in-memory-store.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAQH,6CAAyC;AAEzC,MAAa,qBAAqB;IACxB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEtC,GAAG,CAAC,EAAU,EAAE,SAAiB;QACvC,OAAO,GAAG,SAAS,IAAI,EAAE,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAuB;QACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAA,wBAAU,GAAE,CAAC;QACxB,MAAM,IAAI,GAAe;YACvB,EAAE;YACF,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,QAAQ;YAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE;gBACR,GAAG,GAAG,CAAC,QAAQ;gBACf,UAAU,EAAG,GAAG,CAAC,QAAQ,EAAE,UAAqB,IAAI,GAAG;gBACvD,UAAU,EAAE,GAAG;aAChB;SACF,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAuB;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;QACnC,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YACpC,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,SAAS;YACvD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,SAAiB;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,GAAW;QAC3C,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAK,CAAC,CAAC,QAAQ,EAAE,IAAe,KAAK,GAAG;gBACnE,OAAO,CAAC,CAAC;QACb,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,GAAW;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACjD,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC;CACF;AAtDD,sDAsDC"}
1
+ {"version":3,"file":"in-memory-store.js","sourceRoot":"","sources":["../../../src/providers/in-memory-store.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  /**
2
- * Mem0 provider: wraps mem0ai (OSS) as a MemoryProvider.
3
- * Use with an initialized Memory instance from mem0ai/oss.
2
+ * Adapter: reuse agent-common mem0 long-term provider via public memory factory.
4
3
  */
5
4
  import type { MemoryItem, MemoryProvider, MemoryQueryRequest, MemoryWriteRequest } from "../core/types.js";
6
5
  /** Simplified mem0ai Memory interface (avoids hard dependency). */
@@ -36,12 +35,14 @@ export interface Mem0ProviderOptions {
36
35
  namespaceToUserId?: (namespace: string) => string;
37
36
  }
38
37
  export declare class Mem0Provider implements MemoryProvider {
39
- private mem0;
40
- private namespaceToUserId;
38
+ private readonly mem0;
39
+ private readonly universal;
40
+ private readonly namespaceToUserId;
41
41
  constructor(options: Mem0ProviderOptions);
42
+ private toMemoryItem;
42
43
  write(req: MemoryWriteRequest): Promise<MemoryItem>;
43
44
  query(req: MemoryQueryRequest): Promise<MemoryItem[]>;
44
- delete(id: string, _namespace: string): Promise<void>;
45
+ delete(id: string, namespace: string): Promise<void>;
45
46
  deleteAllForNamespace(namespace: string): Promise<void>;
46
47
  }
47
48
  //# sourceMappingURL=mem0-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mem0-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/mem0-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAE1B,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC7B,GAAG,CACD,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAClD,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAChE,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAChF,OAAO,CAAC;QACT,OAAO,EAAE,KAAK,CAAC;YACb,EAAE,EAAE,MAAM,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,cAAc,CAAC;IACvB,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AAID,qBAAa,YAAa,YAAW,cAAc;IACjD,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,iBAAiB,CAAgC;gBAE7C,OAAO,EAAE,mBAAmB;IAUlC,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IA+CnD,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAwBrD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM9D"}
1
+ {"version":3,"file":"mem0-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/mem0-provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAmB1B,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC7B,GAAG,CACD,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAClD,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAChE,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAChF,OAAO,CAAC;QACT,OAAO,EAAE,KAAK,CAAC;YACb,EAAE,EAAE,MAAM,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,cAAc,CAAC;IACvB,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AAMD,qBAAa,YAAa,YAAW,cAAc;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAC3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;gBAEtD,OAAO,EAAE,mBAAmB;IAuCxC,OAAO,CAAC,YAAY;IAoBd,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BnD,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAerD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM9D"}
@@ -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);