@easynet/agent-memory 1.0.56 → 1.0.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/test/integration/real-memory-features.test.js +144 -146
  2. package/dist/test/integration/real-memory-features.test.js.map +1 -1
  3. package/dist/test/integration/vlm-llm-live.test.js +88 -90
  4. package/dist/test/integration/vlm-llm-live.test.js.map +1 -1
  5. package/dist/test/unit/core/agent-memory.test.d.ts.map +1 -0
  6. package/dist/test/unit/core/agent-memory.test.js +175 -0
  7. package/dist/test/unit/core/agent-memory.test.js.map +1 -0
  8. package/dist/test/unit/core/config.test.d.ts.map +1 -0
  9. package/dist/test/unit/core/config.test.js +292 -0
  10. package/dist/test/unit/core/config.test.js.map +1 -0
  11. package/dist/test/unit/core/observability.test.d.ts.map +1 -0
  12. package/dist/test/{core → unit/core}/observability.test.js +1 -1
  13. package/dist/test/unit/core/observability.test.js.map +1 -0
  14. package/dist/test/unit/core/policy.test.d.ts.map +1 -0
  15. package/dist/test/{core → unit/core}/policy.test.js +1 -1
  16. package/dist/test/unit/core/policy.test.js.map +1 -0
  17. package/dist/test/unit/core/privacy.test.d.ts.map +1 -0
  18. package/dist/test/{core → unit/core}/privacy.test.js +1 -1
  19. package/dist/test/unit/core/privacy.test.js.map +1 -0
  20. package/dist/test/unit/core/router.test.d.ts.map +1 -0
  21. package/dist/test/unit/core/router.test.js +138 -0
  22. package/dist/test/unit/core/router.test.js.map +1 -0
  23. package/dist/test/unit/create-agent-memory.test.d.ts.map +1 -0
  24. package/dist/test/unit/create-agent-memory.test.js +369 -0
  25. package/dist/test/unit/create-agent-memory.test.js.map +1 -0
  26. package/dist/test/unit/ingest/url-ingest.test.d.ts.map +1 -0
  27. package/dist/test/unit/ingest/url-ingest.test.js +135 -0
  28. package/dist/test/unit/ingest/url-ingest.test.js.map +1 -0
  29. package/dist/test/unit/providers/in-memory-store.test.d.ts.map +1 -0
  30. package/dist/test/{providers → unit/providers}/in-memory-store.test.js +1 -1
  31. package/dist/test/unit/providers/in-memory-store.test.js.map +1 -0
  32. package/dist/test/unit/providers/mem0-provider.test.d.ts.map +1 -0
  33. package/dist/test/{providers → unit/providers}/mem0-provider.test.js +1 -1
  34. package/dist/test/unit/providers/mem0-provider.test.js.map +1 -0
  35. package/dist/test/unit/providers/rag-provider.test.d.ts.map +1 -0
  36. package/dist/test/unit/providers/rag-provider.test.js +106 -0
  37. package/dist/test/unit/providers/rag-provider.test.js.map +1 -0
  38. package/dist/test/unit/providers/sqlite-store.test.d.ts.map +1 -0
  39. package/dist/test/unit/providers/sqlite-store.test.js +113 -0
  40. package/dist/test/unit/providers/sqlite-store.test.js.map +1 -0
  41. package/package.json +8 -8
  42. package/dist/test/core/agent-memory.test.d.ts.map +0 -1
  43. package/dist/test/core/agent-memory.test.js +0 -177
  44. package/dist/test/core/agent-memory.test.js.map +0 -1
  45. package/dist/test/core/config.test.d.ts.map +0 -1
  46. package/dist/test/core/config.test.js +0 -294
  47. package/dist/test/core/config.test.js.map +0 -1
  48. package/dist/test/core/observability.test.d.ts.map +0 -1
  49. package/dist/test/core/observability.test.js.map +0 -1
  50. package/dist/test/core/policy.test.d.ts.map +0 -1
  51. package/dist/test/core/policy.test.js.map +0 -1
  52. package/dist/test/core/privacy.test.d.ts.map +0 -1
  53. package/dist/test/core/privacy.test.js.map +0 -1
  54. package/dist/test/core/router.test.d.ts.map +0 -1
  55. package/dist/test/core/router.test.js +0 -140
  56. package/dist/test/core/router.test.js.map +0 -1
  57. package/dist/test/create-agent-memory.test.d.ts.map +0 -1
  58. package/dist/test/create-agent-memory.test.js +0 -371
  59. package/dist/test/create-agent-memory.test.js.map +0 -1
  60. package/dist/test/ingest/url-ingest.test.d.ts.map +0 -1
  61. package/dist/test/ingest/url-ingest.test.js +0 -137
  62. package/dist/test/ingest/url-ingest.test.js.map +0 -1
  63. package/dist/test/providers/in-memory-store.test.d.ts.map +0 -1
  64. package/dist/test/providers/in-memory-store.test.js.map +0 -1
  65. package/dist/test/providers/mem0-provider.test.d.ts.map +0 -1
  66. package/dist/test/providers/mem0-provider.test.js.map +0 -1
  67. package/dist/test/providers/rag-provider.test.d.ts.map +0 -1
  68. package/dist/test/providers/rag-provider.test.js +0 -108
  69. package/dist/test/providers/rag-provider.test.js.map +0 -1
  70. package/dist/test/providers/sqlite-store.test.d.ts.map +0 -1
  71. package/dist/test/providers/sqlite-store.test.js +0 -115
  72. package/dist/test/providers/sqlite-store.test.js.map +0 -1
  73. /package/dist/test/{core → unit/core}/agent-memory.test.d.ts +0 -0
  74. /package/dist/test/{core → unit/core}/config.test.d.ts +0 -0
  75. /package/dist/test/{core → unit/core}/observability.test.d.ts +0 -0
  76. /package/dist/test/{core → unit/core}/policy.test.d.ts +0 -0
  77. /package/dist/test/{core → unit/core}/privacy.test.d.ts +0 -0
  78. /package/dist/test/{core → unit/core}/router.test.d.ts +0 -0
  79. /package/dist/test/{create-agent-memory.test.d.ts → unit/create-agent-memory.test.d.ts} +0 -0
  80. /package/dist/test/{ingest → unit/ingest}/url-ingest.test.d.ts +0 -0
  81. /package/dist/test/{providers → unit/providers}/in-memory-store.test.d.ts +0 -0
  82. /package/dist/test/{providers → unit/providers}/mem0-provider.test.d.ts +0 -0
  83. /package/dist/test/{providers → unit/providers}/rag-provider.test.d.ts +0 -0
  84. /package/dist/test/{providers → unit/providers}/sqlite-store.test.d.ts +0 -0
@@ -0,0 +1,135 @@
1
+ import { it } from "node:test";
2
+ import assert from "node:assert";
3
+ import { join } from "node:path";
4
+ import { writeFile, mkdir, rm } from "node:fs/promises";
5
+ import { tmpdir } from "node:os";
6
+ import { randomUUID } from "node:crypto";
7
+ import { AgentMemory } from "../../../src/core/agent-memory.js";
8
+ import { MemoryRouter } from "../../../src/core/router.js";
9
+ import { InMemoryStoreProvider } from "../../../src/providers/in-memory-store.js";
10
+ import { ingestUrlToMemory } from "../../../src/ingest/url-ingest.js";
11
+ function makeTestMemory() {
12
+ const provider = new InMemoryStoreProvider();
13
+ const router = new MemoryRouter({
14
+ providers: new Map([["default", provider]]),
15
+ defaultProviderId: "default",
16
+ });
17
+ return new AgentMemory({ router });
18
+ }
19
+ it("ingests local txt file and memorizes chunks", async () => {
20
+ const dir = join(tmpdir(), `agent-memory-ingest-${randomUUID()}`);
21
+ await mkdir(dir, { recursive: true });
22
+ const filePath = join(dir, "doc.txt");
23
+ const content = "First paragraph.\n\nSecond paragraph.\n\nThird.";
24
+ await writeFile(filePath, content, "utf-8");
25
+ const memory = makeTestMemory();
26
+ try {
27
+ const { count, firstItem } = await ingestUrlToMemory(memory, {
28
+ url: filePath,
29
+ namespace: "test",
30
+ chunkSize: 50,
31
+ });
32
+ assert.ok(count >= 1);
33
+ assert.ok(firstItem?.id);
34
+ assert.strictEqual(firstItem?.type, "knowledge");
35
+ const result = await memory.recall({
36
+ namespace: "test",
37
+ query: "paragraph",
38
+ topK: 10,
39
+ });
40
+ assert.ok(result.items.length >= 1);
41
+ }
42
+ finally {
43
+ await rm(dir, { recursive: true, force: true }).catch(() => { });
44
+ }
45
+ });
46
+ it("ingests HTML and strips tags", async () => {
47
+ const dir = join(tmpdir(), `agent-memory-html-${randomUUID()}`);
48
+ await mkdir(dir, { recursive: true });
49
+ const filePath = join(dir, "page.html");
50
+ await writeFile(filePath, "<html><body><script>ignore</script><p>Visible text</p></body></html>", "utf-8");
51
+ const memory = makeTestMemory();
52
+ try {
53
+ const { count, firstItem } = await ingestUrlToMemory(memory, {
54
+ url: filePath,
55
+ namespace: "test",
56
+ chunkSize: 500,
57
+ });
58
+ assert.ok(count >= 1);
59
+ assert.ok(firstItem);
60
+ const result = await memory.recall({
61
+ namespace: "test",
62
+ query: "Visible",
63
+ topK: 5,
64
+ });
65
+ assert.strictEqual(result.items.length, 1);
66
+ assert.ok(result.items[0].content.includes("Visible text"));
67
+ assert.ok(!result.items[0].content.includes("<script>"));
68
+ }
69
+ finally {
70
+ await rm(dir, { recursive: true, force: true }).catch(() => { });
71
+ }
72
+ });
73
+ it("uses captionFn for image when provided", async () => {
74
+ const dir = join(tmpdir(), `agent-memory-img-${randomUUID()}`);
75
+ await mkdir(dir, { recursive: true });
76
+ const filePath = join(dir, "fake.png");
77
+ await writeFile(filePath, "not a real png", "utf-8");
78
+ const memory = makeTestMemory();
79
+ const captionFn = async (_buffer) => "Caption for image";
80
+ try {
81
+ const { count, firstItem } = await ingestUrlToMemory(memory, {
82
+ url: filePath,
83
+ namespace: "test",
84
+ captionFn,
85
+ chunkSize: 500,
86
+ });
87
+ assert.ok(count >= 1);
88
+ assert.strictEqual(firstItem?.content, "Caption for image");
89
+ }
90
+ finally {
91
+ await rm(dir, { recursive: true, force: true }).catch(() => { });
92
+ }
93
+ });
94
+ it("uses placeholder when image and no captionFn", async () => {
95
+ const dir = join(tmpdir(), `agent-memory-img2-${randomUUID()}`);
96
+ await mkdir(dir, { recursive: true });
97
+ const filePath = join(dir, "x.png");
98
+ await writeFile(filePath, "x", "utf-8");
99
+ const memory = makeTestMemory();
100
+ try {
101
+ const { count, firstItem } = await ingestUrlToMemory(memory, {
102
+ url: filePath,
103
+ namespace: "test",
104
+ chunkSize: 500,
105
+ });
106
+ assert.ok(count >= 1);
107
+ assert.ok(firstItem?.content.startsWith("(image:"));
108
+ }
109
+ finally {
110
+ await rm(dir, { recursive: true, force: true }).catch(() => { });
111
+ }
112
+ });
113
+ it("detects image by magic bytes when path has no extension (e.g. upload temp file)", async () => {
114
+ const dir = join(tmpdir(), `agent-memory-img3-${randomUUID()}`);
115
+ await mkdir(dir, { recursive: true });
116
+ const minimalPng = Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==", "base64");
117
+ const filePath = join(dir, "upload-temp-no-ext");
118
+ await writeFile(filePath, minimalPng);
119
+ const captionFn = async (_buffer) => "Caption for image";
120
+ const memory = makeTestMemory();
121
+ try {
122
+ const { count, firstItem } = await ingestUrlToMemory(memory, {
123
+ url: filePath,
124
+ namespace: "test",
125
+ chunkSize: 500,
126
+ captionFn,
127
+ });
128
+ assert.strictEqual(count, 1, "image should produce exactly one caption, not many chunks");
129
+ assert.strictEqual(firstItem?.content, "Caption for image");
130
+ }
131
+ finally {
132
+ await rm(dir, { recursive: true, force: true }).catch(() => { });
133
+ }
134
+ });
135
+ //# sourceMappingURL=url-ingest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-ingest.test.js","sourceRoot":"","sources":["../../../../test/unit/ingest/url-ingest.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-store.test.d.ts","sourceRoot":"","sources":["../../../../test/unit/providers/in-memory-store.test.ts"],"names":[],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  import { describe, it } from "node:test";
2
2
  import assert from "node:assert";
3
- import { InMemoryStoreProvider } from "../../src/providers/in-memory-store.js";
3
+ import { InMemoryStoreProvider } from "../../../src/providers/in-memory-store.js";
4
4
  describe("InMemoryStoreProvider", () => {
5
5
  it("write and query", async () => {
6
6
  const provider = new InMemoryStoreProvider();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-store.test.js","sourceRoot":"","sources":["../../../../test/unit/providers/in-memory-store.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAElF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,QAAQ,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;YAChC,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,mBAAmB;SAC7B,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;YACjC,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,kBAAkB;YACzB,IAAI,EAAE,CAAC;SACR,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,QAAQ,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC7C,MAAM,QAAQ,CAAC,KAAK,CAAC;YACnB,SAAS,EAAE,WAAW;YACtB,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,EAAE,GAAG,EAAE,mBAAmB,EAAE;SACvC,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAS,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;QACzE,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACjB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAElD,MAAM,QAAQ,CAAC,WAAY,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAS,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;QACzE,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mem0-provider.test.d.ts","sourceRoot":"","sources":["../../../../test/unit/providers/mem0-provider.test.ts"],"names":[],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  import { describe, it } from "node:test";
2
2
  import assert from "node:assert";
3
- import { Mem0Provider } from "../../src/providers/mem0-provider.js";
3
+ import { Mem0Provider } from "../../../src/providers/mem0-provider.js";
4
4
  function createMem0Mock() {
5
5
  const rows = [];
6
6
  let seq = 0;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mem0-provider.test.js","sourceRoot":"","sources":["../../../../test/unit/providers/mem0-provider.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-provider.test.d.ts","sourceRoot":"","sources":["../../../../test/unit/providers/rag-provider.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,106 @@
1
+ import { it } from "node:test";
2
+ import assert from "node:assert";
3
+ import { RAGProvider } from "../../../src/providers/rag-provider.js";
4
+ it("write and query without embed or search", async () => {
5
+ const provider = new RAGProvider();
6
+ const item = await provider.write({
7
+ namespace: "user:1",
8
+ type: "knowledge",
9
+ content: "Doc about API.",
10
+ });
11
+ assert.ok(item.id);
12
+ assert.strictEqual(item.type, "knowledge");
13
+ assert.strictEqual(item.content, "Doc about API.");
14
+ const items = await provider.query({
15
+ namespace: "user:1",
16
+ query: "API",
17
+ topK: 5,
18
+ });
19
+ assert.strictEqual(items.length, 1);
20
+ assert.strictEqual(items[0].content, "Doc about API.");
21
+ });
22
+ it("write with embed stores embedding", async () => {
23
+ const embed = async (text) => text.split("").map((_, i) => (i % 2) * 0.5);
24
+ const provider = new RAGProvider({ embed });
25
+ const item = await provider.write({
26
+ namespace: "ns",
27
+ type: "knowledge",
28
+ content: "hello",
29
+ });
30
+ assert.ok(item.embedding);
31
+ assert.ok(Array.isArray(item.embedding));
32
+ });
33
+ it("query with custom search uses search results", async () => {
34
+ const provider = new RAGProvider({
35
+ search: async (namespace, _query, topK) => {
36
+ return [
37
+ {
38
+ item: {
39
+ id: "s1",
40
+ type: "knowledge",
41
+ namespace,
42
+ scope: "global",
43
+ content: "search result",
44
+ metadata: { created_at: "", updated_at: "" },
45
+ },
46
+ score: 0.9,
47
+ },
48
+ ].slice(0, topK);
49
+ },
50
+ });
51
+ await provider.write({
52
+ namespace: "ns",
53
+ type: "knowledge",
54
+ content: "stored",
55
+ });
56
+ const items = await provider.query({
57
+ namespace: "ns",
58
+ query: "q",
59
+ topK: 3,
60
+ });
61
+ assert.strictEqual(items.length, 1);
62
+ assert.strictEqual(items[0].content, "search result");
63
+ });
64
+ it("delete removes item", async () => {
65
+ const provider = new RAGProvider();
66
+ const item = await provider.write({
67
+ namespace: "ns",
68
+ type: "knowledge",
69
+ content: "to delete",
70
+ });
71
+ const before = await provider.query({
72
+ namespace: "ns",
73
+ query: "x",
74
+ topK: 10,
75
+ });
76
+ assert.strictEqual(before.length, 1);
77
+ await provider.delete(item.id, "ns");
78
+ const after = await provider.query({
79
+ namespace: "ns",
80
+ query: "x",
81
+ topK: 10,
82
+ });
83
+ assert.strictEqual(after.length, 0);
84
+ });
85
+ it("query filters by types", async () => {
86
+ const provider = new RAGProvider();
87
+ await provider.write({
88
+ namespace: "ns",
89
+ type: "knowledge",
90
+ content: "doc",
91
+ });
92
+ await provider.write({
93
+ namespace: "ns",
94
+ type: "cross_thread",
95
+ content: "pref",
96
+ });
97
+ const items = await provider.query({
98
+ namespace: "ns",
99
+ query: "x",
100
+ topK: 5,
101
+ types: ["knowledge"],
102
+ });
103
+ assert.strictEqual(items.length, 1);
104
+ assert.strictEqual(items[0].type, "knowledge");
105
+ });
106
+ //# sourceMappingURL=rag-provider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-provider.test.js","sourceRoot":"","sources":["../../../../test/unit/providers/rag-provider.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAEnE,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;IACvD,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;QAChC,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,gBAAgB;KAC1B,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC3C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;QACjC,SAAS,EAAE,QAAQ;QACnB,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;IACjD,MAAM,KAAK,GAAG,KAAK,EAAE,IAAY,EAAqB,EAAE,CACtD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;QAChC,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;IAC5D,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC;QAC/B,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YACxC,OAAO;gBACL;oBACE,IAAI,EAAE;wBACJ,EAAE,EAAE,IAAI;wBACR,IAAI,EAAE,WAAoB;wBAC1B,SAAS;wBACT,KAAK,EAAE,QAAiB;wBACxB,OAAO,EAAE,eAAe;wBACxB,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;qBAC7C;oBACD,KAAK,EAAE,GAAG;iBACX;aACF,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC,KAAK,CAAC;QACnB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;QACjC,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;IACnC,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;QAChC,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,WAAW;KACrB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;QAClC,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;QACjC,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;IACtC,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;IACnC,MAAM,QAAQ,CAAC,KAAK,CAAC;QACnB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC,KAAK,CAAC;QACnB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;QACjC,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC,WAAW,CAAC;KACrB,CAAC,CAAC;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.test.d.ts","sourceRoot":"","sources":["../../../../test/unit/providers/sqlite-store.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,113 @@
1
+ import { it } from "node:test";
2
+ import assert from "node:assert";
3
+ import { SqliteStoreProvider } from "../../../src/providers/sqlite-store.js";
4
+ const hasSqlite = (() => {
5
+ try {
6
+ const probe = new SqliteStoreProvider({ dbPath: ":memory:" });
7
+ void probe;
8
+ return true;
9
+ }
10
+ catch {
11
+ return false;
12
+ }
13
+ })();
14
+ it("write and query without embed", async () => {
15
+ const provider = new SqliteStoreProvider({ dbPath: ":memory:" });
16
+ const item = await provider.write({
17
+ namespace: "user:1",
18
+ type: "cross_thread",
19
+ content: "Prefer dark mode.",
20
+ });
21
+ assert.ok(item.id);
22
+ assert.strictEqual(item.type, "cross_thread");
23
+ assert.strictEqual(item.content, "Prefer dark mode.");
24
+ const items = await provider.query({
25
+ namespace: "user:1",
26
+ query: "user preferences",
27
+ topK: 5,
28
+ });
29
+ assert.strictEqual(items.length, 1);
30
+ assert.strictEqual(items[0].content, "Prefer dark mode.");
31
+ });
32
+ it("write and query with embed", async () => {
33
+ const embed = async (text) => text.split("").map((_, i) => (i % 3) * 0.1);
34
+ const provider = new SqliteStoreProvider({
35
+ dbPath: ":memory:",
36
+ embed,
37
+ });
38
+ await provider.write({
39
+ namespace: "ns",
40
+ type: "knowledge",
41
+ content: "alpha",
42
+ });
43
+ await provider.write({
44
+ namespace: "ns",
45
+ type: "knowledge",
46
+ content: "beta",
47
+ });
48
+ const items = await provider.query({
49
+ namespace: "ns",
50
+ query: "alpha",
51
+ topK: 2,
52
+ });
53
+ assert.strictEqual(items.length, 2);
54
+ assert.strictEqual(items[0].content, "alpha");
55
+ });
56
+ it("getByKey and deleteByKey", async () => {
57
+ const provider = new SqliteStoreProvider({ dbPath: ":memory:" });
58
+ await provider.write({
59
+ namespace: "memory:fs",
60
+ type: "cross_thread",
61
+ content: "file content",
62
+ metadata: { key: "/memories/foo.txt" },
63
+ });
64
+ const found = await provider.getByKey("memory:fs", "/memories/foo.txt");
65
+ assert.ok(found);
66
+ assert.strictEqual(found.content, "file content");
67
+ await provider.deleteByKey("memory:fs", "/memories/foo.txt");
68
+ const after = await provider.getByKey("memory:fs", "/memories/foo.txt");
69
+ assert.strictEqual(after, null);
70
+ });
71
+ it("delete by id", async () => {
72
+ const provider = new SqliteStoreProvider({ dbPath: ":memory:" });
73
+ const item = await provider.write({
74
+ namespace: "user:1",
75
+ type: "thread",
76
+ content: "to delete",
77
+ });
78
+ const before = await provider.query({
79
+ namespace: "user:1",
80
+ query: "any",
81
+ topK: 10,
82
+ });
83
+ assert.strictEqual(before.length, 1);
84
+ await provider.delete(item.id, "user:1");
85
+ const after = await provider.query({
86
+ namespace: "user:1",
87
+ query: "any",
88
+ topK: 10,
89
+ });
90
+ assert.strictEqual(after.length, 0);
91
+ });
92
+ it("query with types filter", async () => {
93
+ const provider = new SqliteStoreProvider({ dbPath: ":memory:" });
94
+ await provider.write({
95
+ namespace: "ns",
96
+ type: "knowledge",
97
+ content: "doc",
98
+ });
99
+ await provider.write({
100
+ namespace: "ns",
101
+ type: "cross_thread",
102
+ content: "pref",
103
+ });
104
+ const items = await provider.query({
105
+ namespace: "ns",
106
+ query: "x",
107
+ topK: 5,
108
+ types: ["knowledge"],
109
+ });
110
+ assert.strictEqual(items.length, 1);
111
+ assert.strictEqual(items[0].type, "knowledge");
112
+ });
113
+ //# sourceMappingURL=sqlite-store.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.test.js","sourceRoot":"","sources":["../../../../test/unit/providers/sqlite-store.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easynet/agent-memory",
3
- "version": "1.0.56",
3
+ "version": "1.0.58",
4
4
  "description": "Unified memory layer for LangChain / LangGraph / DeepAgents",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -15,13 +15,13 @@
15
15
  "preinstall": "node -e \"const fs=require('fs'); const {execSync}=require('child_process'); if (fs.existsSync('scripts/resolve-deps.js')) { execSync('node scripts/resolve-deps.js', { stdio: 'inherit' }); } else { console.log('Skipping resolve-deps for published package'); }\"",
16
16
  "build": "tsc",
17
17
  "pretest": "pnpm run build",
18
- "test": "node --test dist/test/*.test.js dist/test/core/*.test.js dist/test/providers/*.test.js dist/test/ingest/*.test.js dist/test/integration/*.test.js",
19
- "test:unit": "node --test dist/test/core/*.js dist/test/providers/*.js dist/test/ingest/*.js dist/test/create-agent-memory.test.js",
20
- "test:unit:ci": "node --test dist/test/core/*.js dist/test/ingest/*.js dist/test/create-agent-memory.test.js dist/test/providers/in-memory-store.test.js dist/test/providers/rag-provider.test.js dist/test/providers/mem0-provider.test.js",
18
+ "test": "node --test dist/test/unit/*.test.js dist/test/unit/core/*.test.js dist/test/unit/providers/*.test.js dist/test/unit/ingest/*.test.js dist/test/integration/*.test.js",
19
+ "test:unit": "node --test dist/test/unit/core/*.js dist/test/unit/providers/*.js dist/test/unit/ingest/*.js dist/test/unit/create-agent-memory.test.js",
20
+ "test:unit:ci": "node --test dist/test/unit/core/*.js dist/test/unit/ingest/*.js dist/test/unit/create-agent-memory.test.js dist/test/unit/providers/in-memory-store.test.js dist/test/unit/providers/rag-provider.test.js dist/test/unit/providers/mem0-provider.test.js",
21
21
  "test:integration": "node --test dist/test/integration/*.test.js",
22
22
  "test:integration:real": "RUN_REAL_MEMORY_INTEGRATION=1 node --test dist/test/integration/real-memory-features.test.js",
23
23
  "test:integration:live": "RUN_LIVE_INTEGRATION=1 node --test dist/test/integration/*.test.js",
24
- "test:full": "RUN_LIVE_INTEGRATION=1 node --test dist/test/*.test.js dist/test/core/*.test.js dist/test/providers/*.test.js dist/test/ingest/*.test.js dist/test/integration/*.test.js",
24
+ "test:full": "RUN_LIVE_INTEGRATION=1 node --test dist/test/unit/*.test.js dist/test/unit/core/*.test.js dist/test/unit/providers/*.test.js dist/test/unit/ingest/*.test.js dist/test/integration/*.test.js",
25
25
  "lint": "tsc --noEmit",
26
26
  "typecheck": "tsc --noEmit",
27
27
  "release": "semantic-release"
@@ -30,12 +30,12 @@
30
30
  "@easynet/agent-common": "latest"
31
31
  },
32
32
  "peerDependencies": {
33
- "@langchain/langgraph": "1.1.5",
33
+ "@langchain/langgraph": "1.2.0",
34
34
  "@langchain/langgraph-checkpoint": "1.0.0",
35
35
  "better-sqlite3": "^12.6.2",
36
36
  "cheerio": "*",
37
- "deepagents": "1.8.x",
38
- "langchain": "1.2.25",
37
+ "deepagents": "1.8.1",
38
+ "langchain": "1.2.30",
39
39
  "mem0ai": ">=1.0.0",
40
40
  "pdf-parse": "*"
41
41
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-memory.test.d.ts","sourceRoot":"","sources":["../../../test/core/agent-memory.test.ts"],"names":[],"mappings":""}