@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.
- package/README.md +97 -87
- package/dist/src/create-agent-memory.d.ts +28 -13
- package/dist/src/create-agent-memory.d.ts.map +1 -1
- package/dist/src/create-agent-memory.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/ingest/common-ingest.d.ts +14 -0
- package/dist/src/ingest/common-ingest.d.ts.map +1 -0
- package/dist/src/ingest/common-ingest.js +30 -0
- package/dist/src/ingest/common-ingest.js.map +1 -0
- package/dist/src/ingest/pdf-ingest.d.ts +0 -13
- package/dist/src/ingest/pdf-ingest.d.ts.map +1 -1
- package/dist/src/ingest/pdf-ingest.js +13 -81
- package/dist/src/ingest/pdf-ingest.js.map +1 -1
- package/dist/src/ingest/url-ingest.d.ts +0 -12
- package/dist/src/ingest/url-ingest.d.ts.map +1 -1
- package/dist/src/ingest/url-ingest.js +15 -294
- package/dist/src/ingest/url-ingest.js.map +1 -1
- package/dist/src/providers/in-memory-store.d.ts +4 -3
- package/dist/src/providers/in-memory-store.d.ts.map +1 -1
- package/dist/src/providers/in-memory-store.js +36 -21
- package/dist/src/providers/in-memory-store.js.map +1 -1
- package/dist/src/providers/mem0-provider.d.ts +6 -5
- package/dist/src/providers/mem0-provider.d.ts.map +1 -1
- package/dist/src/providers/mem0-provider.js +61 -51
- package/dist/src/providers/mem0-provider.js.map +1 -1
- package/package.json +8 -7
|
@@ -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
|
|
11
|
-
function
|
|
12
|
-
|
|
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(/ /gi, " ")
|
|
135
|
-
.replace(/&/gi, "&")
|
|
136
|
-
.replace(/</gi, "<")
|
|
137
|
-
.replace(/>/gi, ">")
|
|
138
|
-
.replace(/"/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 {
|
|
200
|
-
const {
|
|
201
|
-
|
|
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
|
-
*
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
56
|
+
const store = await this.storePromise;
|
|
57
|
+
await store.delete(this.key(id, namespace));
|
|
47
58
|
}
|
|
48
59
|
async getByKey(namespace, key) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
|
57
|
-
if (
|
|
58
|
-
|
|
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;;;
|
|
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
|
-
*
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
*
|
|
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
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
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:
|
|
75
|
+
content: record.content,
|
|
58
76
|
metadata: {
|
|
59
|
-
...
|
|
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
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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,
|
|
89
|
-
await this.
|
|
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);
|