@easynet/agent-memory 1.0.35 → 1.0.36
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 +1 -1
- package/dist/src/config/index.js +10 -18
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/config/ref.js +3 -8
- package/dist/src/config/ref.js.map +1 -1
- package/dist/src/core/agent-memory.d.ts +2 -0
- package/dist/src/core/agent-memory.d.ts.map +1 -1
- package/dist/src/core/agent-memory.js +71 -20
- package/dist/src/core/agent-memory.js.map +1 -1
- package/dist/src/core/config.js +5 -9
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/observability.js +2 -7
- package/dist/src/core/observability.js.map +1 -1
- package/dist/src/core/policy.js +3 -7
- package/dist/src/core/policy.js.map +1 -1
- package/dist/src/core/privacy.js +1 -5
- package/dist/src/core/privacy.js.map +1 -1
- package/dist/src/core/router.js +1 -5
- package/dist/src/core/router.js.map +1 -1
- package/dist/src/core/types.d.ts +1 -0
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/types.js +7 -12
- package/dist/src/core/types.js.map +1 -1
- package/dist/src/create-agent-memory.d.ts +3 -1
- package/dist/src/create-agent-memory.d.ts.map +1 -1
- package/dist/src/create-agent-memory.helpers.js +14 -21
- package/dist/src/create-agent-memory.helpers.js.map +1 -1
- package/dist/src/create-agent-memory.js +60 -60
- 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 +2 -8
- package/dist/src/index.js.map +1 -1
- package/dist/src/ingest/common-ingest.d.ts +2 -2
- package/dist/src/ingest/common-ingest.d.ts.map +1 -1
- package/dist/src/ingest/common-ingest.js +2 -6
- package/dist/src/ingest/common-ingest.js.map +1 -1
- package/dist/src/ingest/compat-loaders.js +1 -4
- package/dist/src/ingest/compat-loaders.js.map +1 -1
- package/dist/src/ingest/index.js +2 -7
- package/dist/src/ingest/index.js.map +1 -1
- package/dist/src/ingest/pdf-ingest.js +4 -7
- package/dist/src/ingest/pdf-ingest.js.map +1 -1
- package/dist/src/ingest/url-ingest.d.ts +3 -2
- package/dist/src/ingest/url-ingest.d.ts.map +1 -1
- package/dist/src/ingest/url-ingest.js +148 -18
- package/dist/src/ingest/url-ingest.js.map +1 -1
- package/dist/src/integrations/deepagents-adapter.js +2 -6
- package/dist/src/integrations/deepagents-adapter.js.map +1 -1
- package/dist/src/integrations/langgraph.js +2 -6
- package/dist/src/integrations/langgraph.js.map +1 -1
- package/dist/src/internal.js +1 -5
- package/dist/src/internal.js.map +1 -1
- package/dist/src/providers/in-memory-store.js +3 -7
- package/dist/src/providers/in-memory-store.js.map +1 -1
- package/dist/src/providers/index.js +5 -14
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/providers/mem0-provider.js +3 -7
- package/dist/src/providers/mem0-provider.js.map +1 -1
- package/dist/src/providers/optional-ctors.js +2 -6
- package/dist/src/providers/optional-ctors.js.map +1 -1
- package/dist/src/providers/rag-provider.js +1 -5
- package/dist/src/providers/rag-provider.js.map +1 -1
- package/dist/src/providers/sqlite-store.js +3 -7
- package/dist/src/providers/sqlite-store.js.map +1 -1
- package/dist/src/register-memory.d.ts +16 -0
- package/dist/src/register-memory.d.ts.map +1 -0
- package/dist/src/register-memory.js +18 -0
- package/dist/src/register-memory.js.map +1 -0
- package/dist/test/core/agent-memory.test.js +76 -45
- package/dist/test/core/agent-memory.test.js.map +1 -1
- package/dist/test/core/config.test.js +114 -119
- package/dist/test/core/config.test.js.map +1 -1
- package/dist/test/core/observability.test.js +20 -25
- package/dist/test/core/observability.test.js.map +1 -1
- package/dist/test/core/policy.test.js +27 -32
- package/dist/test/core/policy.test.js.map +1 -1
- package/dist/test/core/privacy.test.js +24 -29
- package/dist/test/core/privacy.test.js.map +1 -1
- package/dist/test/core/router.test.js +25 -30
- package/dist/test/core/router.test.js.map +1 -1
- package/dist/test/create-agent-memory.test.js +102 -78
- package/dist/test/create-agent-memory.test.js.map +1 -1
- package/dist/test/ingest/url-ingest.test.js +64 -69
- package/dist/test/ingest/url-ingest.test.js.map +1 -1
- package/dist/test/integration/agent-memory-flow.test.js +22 -27
- package/dist/test/integration/agent-memory-flow.test.js.map +1 -1
- package/dist/test/integration/helpers/ollama-live.js +2 -6
- package/dist/test/integration/helpers/ollama-live.js.map +1 -1
- package/dist/test/integration/real-memory-features.test.js +46 -51
- package/dist/test/integration/real-memory-features.test.js.map +1 -1
- package/dist/test/integration/url-ingest-flow.test.js +22 -27
- package/dist/test/integration/url-ingest-flow.test.js.map +1 -1
- package/dist/test/integration/vlm-llm-live.test.js +54 -59
- package/dist/test/integration/vlm-llm-live.test.js.map +1 -1
- package/dist/test/providers/in-memory-store.test.js +16 -21
- package/dist/test/providers/in-memory-store.test.js.map +1 -1
- package/dist/test/providers/mem0-provider.test.js +19 -24
- package/dist/test/providers/mem0-provider.test.js.map +1 -1
- package/dist/test/providers/rag-provider.test.js +27 -32
- package/dist/test/providers/rag-provider.test.js.map +1 -1
- package/dist/test/providers/sqlite-store.test.js +29 -34
- package/dist/test/providers/sqlite-store.test.js.map +1 -1
- package/package.json +4 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../../../src/providers/sqlite-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../../../src/providers/sqlite-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type CreateMemoryOptions } from "./create-agent-memory.js";
|
|
2
|
+
export interface CreateAgentMemoryOptions extends CreateMemoryOptions {
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Initialize the memory client and register it into the process-level singleton AgentContext.
|
|
6
|
+
*
|
|
7
|
+
* Sets:
|
|
8
|
+
* - AgentContextTokens.Memory → AgentMemoryClient
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* await createAgentMemory({ configPath: "config/memory.yaml" });
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare function createAgentMemory(options?: CreateAgentMemoryOptions): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=register-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-memory.d.ts","sourceRoot":"","sources":["../../src/register-memory.ts"],"names":[],"mappings":"AACA,OAAO,EAAkD,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpH,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;CAAG;AAExE;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AgentContextTokens, getDefaultAgentContext } from "@easynet/agent-common";
|
|
2
|
+
import { createAgentMemory as createAgentMemoryInstance } from "./create-agent-memory.js";
|
|
3
|
+
/**
|
|
4
|
+
* Initialize the memory client and register it into the process-level singleton AgentContext.
|
|
5
|
+
*
|
|
6
|
+
* Sets:
|
|
7
|
+
* - AgentContextTokens.Memory → AgentMemoryClient
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* await createAgentMemory({ configPath: "config/memory.yaml" });
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export async function createAgentMemory(options) {
|
|
15
|
+
const memory = await createAgentMemoryInstance(options ?? {});
|
|
16
|
+
getDefaultAgentContext().set(AgentContextTokens.Memory, memory);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=register-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-memory.js","sourceRoot":"","sources":["../../src/register-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,iBAAiB,IAAI,yBAAyB,EAA4B,MAAM,0BAA0B,CAAC;AAIpH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAkC;IACxE,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC9D,sBAAsB,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const node_assert_1 = __importDefault(require("node:assert"));
|
|
8
|
-
const agent_memory_js_1 = require("../../src/core/agent-memory.js");
|
|
9
|
-
const observability_js_1 = require("../../src/core/observability.js");
|
|
10
|
-
const router_js_1 = require("../../src/core/router.js");
|
|
11
|
-
const node_crypto_1 = require("node:crypto");
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert";
|
|
3
|
+
import { AgentMemory } from "../../src/core/agent-memory.js";
|
|
4
|
+
import { InMemoryTraceRecorder } from "../../src/core/observability.js";
|
|
5
|
+
import { MemoryRouter } from "../../src/core/router.js";
|
|
6
|
+
import { randomUUID } from "node:crypto";
|
|
12
7
|
class TestMemoryProvider {
|
|
13
8
|
store = new Map();
|
|
9
|
+
deleted = [];
|
|
14
10
|
async write(req) {
|
|
15
11
|
const now = new Date().toISOString();
|
|
16
12
|
const item = {
|
|
17
|
-
id:
|
|
13
|
+
id: randomUUID(),
|
|
18
14
|
type: req.type,
|
|
19
15
|
namespace: req.namespace,
|
|
20
16
|
scope: req.scope ?? "global",
|
|
@@ -29,18 +25,22 @@ class TestMemoryProvider {
|
|
|
29
25
|
return items.slice(0, req.topK ?? 10);
|
|
30
26
|
}
|
|
31
27
|
async delete(id, namespace) {
|
|
28
|
+
this.deleted.push({ id, namespace });
|
|
32
29
|
this.store.delete(`${namespace}:${id}`);
|
|
33
30
|
}
|
|
31
|
+
getDeletedCount() {
|
|
32
|
+
return this.deleted.length;
|
|
33
|
+
}
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
describe("AgentMemory", () => {
|
|
36
|
+
it("memorize and recall", async () => {
|
|
37
37
|
const provider = new TestMemoryProvider();
|
|
38
|
-
const router = new
|
|
38
|
+
const router = new MemoryRouter({
|
|
39
39
|
providers: new Map([["default", provider]]),
|
|
40
40
|
defaultProviderId: "default",
|
|
41
41
|
});
|
|
42
|
-
const tracer = new
|
|
43
|
-
const memory = new
|
|
42
|
+
const tracer = new InMemoryTraceRecorder();
|
|
43
|
+
const memory = new AgentMemory({
|
|
44
44
|
router,
|
|
45
45
|
traceRecorder: tracer,
|
|
46
46
|
});
|
|
@@ -54,75 +54,75 @@ class TestMemoryProvider {
|
|
|
54
54
|
query: "user preferences and cross-session memory",
|
|
55
55
|
topK: 5,
|
|
56
56
|
});
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
57
|
+
assert.strictEqual(result.items.length, 1);
|
|
58
|
+
assert.strictEqual(result.items[0].content, "Use Chinese and summarize at the end.");
|
|
59
|
+
assert.ok(result.traceId);
|
|
60
|
+
assert.ok(result.injectedText.includes("cross_thread"));
|
|
61
|
+
assert.strictEqual(tracer.getTraces().length, 1);
|
|
62
62
|
});
|
|
63
|
-
|
|
63
|
+
it("memorize without type defaults to cross_thread", async () => {
|
|
64
64
|
const provider = new TestMemoryProvider();
|
|
65
|
-
const router = new
|
|
65
|
+
const router = new MemoryRouter({
|
|
66
66
|
providers: new Map([["default", provider]]),
|
|
67
67
|
defaultProviderId: "default",
|
|
68
68
|
});
|
|
69
|
-
const memory = new
|
|
69
|
+
const memory = new AgentMemory({ router });
|
|
70
70
|
const item = await memory.memorize({
|
|
71
71
|
namespace: "user:1",
|
|
72
72
|
content: "I prefer dark mode.",
|
|
73
73
|
});
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
assert.strictEqual(item.type, "cross_thread");
|
|
75
|
+
assert.strictEqual(item.content, "I prefer dark mode.");
|
|
76
76
|
});
|
|
77
|
-
|
|
77
|
+
it("memorize normalizes common type aliases", async () => {
|
|
78
78
|
const provider = new TestMemoryProvider();
|
|
79
|
-
const router = new
|
|
79
|
+
const router = new MemoryRouter({
|
|
80
80
|
providers: new Map([["default", provider]]),
|
|
81
81
|
defaultProviderId: "default",
|
|
82
82
|
});
|
|
83
|
-
const memory = new
|
|
83
|
+
const memory = new AgentMemory({ router });
|
|
84
84
|
const item = await memory.memorize({
|
|
85
85
|
namespace: "user:1",
|
|
86
86
|
type: "cross-thread",
|
|
87
87
|
content: "Alias normalization test",
|
|
88
88
|
});
|
|
89
|
-
|
|
89
|
+
assert.strictEqual(item.type, "cross_thread");
|
|
90
90
|
});
|
|
91
|
-
|
|
91
|
+
it("memorize throws for unsupported type keyword", async () => {
|
|
92
92
|
const provider = new TestMemoryProvider();
|
|
93
|
-
const router = new
|
|
93
|
+
const router = new MemoryRouter({
|
|
94
94
|
providers: new Map([["default", provider]]),
|
|
95
95
|
defaultProviderId: "default",
|
|
96
96
|
});
|
|
97
|
-
const memory = new
|
|
98
|
-
await
|
|
97
|
+
const memory = new AgentMemory({ router });
|
|
98
|
+
await assert.rejects(() => memory.memorize({
|
|
99
99
|
namespace: "user:1",
|
|
100
100
|
type: "invalid_type",
|
|
101
101
|
content: "bad type",
|
|
102
102
|
}), /Unsupported memory type/);
|
|
103
103
|
});
|
|
104
|
-
|
|
104
|
+
it("memorize with classifyMemory uses callback for type", async () => {
|
|
105
105
|
const provider = new TestMemoryProvider();
|
|
106
|
-
const router = new
|
|
106
|
+
const router = new MemoryRouter({
|
|
107
107
|
providers: new Map([["default", provider]]),
|
|
108
108
|
defaultProviderId: "default",
|
|
109
109
|
});
|
|
110
|
-
const memory = new
|
|
110
|
+
const memory = new AgentMemory({
|
|
111
111
|
router,
|
|
112
112
|
classifyMemory: async (content) => (content.length > 20 ? "knowledge" : "thread"),
|
|
113
113
|
});
|
|
114
114
|
const item1 = await memory.memorize({ namespace: "ns", content: "short" });
|
|
115
|
-
|
|
115
|
+
assert.strictEqual(item1.type, "thread");
|
|
116
116
|
const item2 = await memory.memorize({ namespace: "ns", content: "this is a longer content piece" });
|
|
117
|
-
|
|
117
|
+
assert.strictEqual(item2.type, "knowledge");
|
|
118
118
|
});
|
|
119
|
-
|
|
119
|
+
it("deleteByNamespace", async () => {
|
|
120
120
|
const provider = new TestMemoryProvider();
|
|
121
|
-
const router = new
|
|
121
|
+
const router = new MemoryRouter({
|
|
122
122
|
providers: new Map([["default", provider]]),
|
|
123
123
|
defaultProviderId: "default",
|
|
124
124
|
});
|
|
125
|
-
const memory = new
|
|
125
|
+
const memory = new AgentMemory({ router });
|
|
126
126
|
await memory.memorize({
|
|
127
127
|
namespace: "user:2",
|
|
128
128
|
type: "cross_thread",
|
|
@@ -133,14 +133,45 @@ class TestMemoryProvider {
|
|
|
133
133
|
query: "any",
|
|
134
134
|
topK: 5,
|
|
135
135
|
});
|
|
136
|
-
|
|
136
|
+
assert.strictEqual(before.items.length, 1);
|
|
137
137
|
await memory.deleteByNamespace("user:2");
|
|
138
138
|
const after = await memory.recall({
|
|
139
139
|
namespace: "user:2",
|
|
140
140
|
query: "any",
|
|
141
141
|
topK: 5,
|
|
142
142
|
});
|
|
143
|
-
|
|
143
|
+
assert.strictEqual(after.items.length, 0);
|
|
144
|
+
});
|
|
145
|
+
it("ttl: writes expires_at and skips expired items on recall", async () => {
|
|
146
|
+
const provider = new TestMemoryProvider();
|
|
147
|
+
const router = new MemoryRouter({
|
|
148
|
+
providers: new Map([["default", provider]]),
|
|
149
|
+
defaultProviderId: "default",
|
|
150
|
+
});
|
|
151
|
+
const memory = new AgentMemory({ router });
|
|
152
|
+
const expired = await memory.memorize({
|
|
153
|
+
namespace: "user:ttl",
|
|
154
|
+
type: "cross_thread",
|
|
155
|
+
content: "This should expire immediately.",
|
|
156
|
+
metadata: { ttl_seconds: 0 },
|
|
157
|
+
});
|
|
158
|
+
assert.ok(typeof expired.metadata.expires_at === "string");
|
|
159
|
+
const alive = await memory.memorize({
|
|
160
|
+
namespace: "user:ttl",
|
|
161
|
+
type: "cross_thread",
|
|
162
|
+
content: "This should stay.",
|
|
163
|
+
metadata: { ttl_seconds: 3600 },
|
|
164
|
+
});
|
|
165
|
+
assert.ok(typeof alive.metadata.expires_at === "string");
|
|
166
|
+
const result = await memory.recall({
|
|
167
|
+
namespace: "user:ttl",
|
|
168
|
+
query: "ttl",
|
|
169
|
+
topK: 10,
|
|
170
|
+
types: ["cross_thread"],
|
|
171
|
+
});
|
|
172
|
+
assert.strictEqual(result.items.length, 1);
|
|
173
|
+
assert.strictEqual(result.items[0]?.content, "This should stay.");
|
|
174
|
+
assert.ok(provider.getDeletedCount() >= 1);
|
|
144
175
|
});
|
|
145
176
|
});
|
|
146
177
|
//# sourceMappingURL=agent-memory.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-memory.test.js","sourceRoot":"","sources":["../../../test/core/agent-memory.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-memory.test.js","sourceRoot":"","sources":["../../../test/core/agent-memory.test.ts"],"names":[],"mappings":"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"}
|