@easynet/agent-memory 0.0.2 → 1.0.1
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 +89 -224
- package/dist/src/core/agent-memory.d.ts +41 -0
- package/dist/src/core/agent-memory.d.ts.map +1 -0
- package/dist/src/core/agent-memory.js +127 -0
- package/dist/src/core/agent-memory.js.map +1 -0
- package/dist/src/core/config.d.ts +78 -0
- package/dist/src/core/config.d.ts.map +1 -0
- package/dist/src/core/config.js +41 -0
- package/dist/src/core/config.js.map +1 -0
- package/dist/src/core/observability.d.ts +22 -0
- package/dist/src/core/observability.d.ts.map +1 -0
- package/dist/src/core/observability.js +33 -0
- package/dist/src/core/observability.js.map +1 -0
- package/dist/src/core/policy.d.ts +47 -0
- package/dist/src/core/policy.d.ts.map +1 -0
- package/dist/src/core/policy.js +73 -0
- package/dist/src/core/policy.js.map +1 -0
- package/dist/src/core/privacy.d.ts +23 -0
- package/dist/src/core/privacy.d.ts.map +1 -0
- package/dist/src/core/privacy.js +45 -0
- package/dist/src/core/privacy.js.map +1 -0
- package/dist/src/core/router.d.ts +35 -0
- package/dist/src/core/router.d.ts.map +1 -0
- package/dist/src/core/router.js +86 -0
- package/dist/src/core/router.js.map +1 -0
- package/dist/src/core/types.d.ts +82 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +7 -0
- package/dist/{adapters → src/core}/types.js.map +1 -1
- package/dist/src/create-agent-memory.d.ts +47 -0
- package/dist/src/create-agent-memory.d.ts.map +1 -0
- package/dist/src/create-agent-memory.js +148 -0
- package/dist/src/create-agent-memory.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +13 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/ingest/pdf-ingest.d.ts +27 -0
- package/dist/src/ingest/pdf-ingest.d.ts.map +1 -0
- package/dist/src/ingest/pdf-ingest.js +89 -0
- package/dist/src/ingest/pdf-ingest.js.map +1 -0
- package/dist/src/ingest/url-ingest.d.ts +27 -0
- package/dist/src/ingest/url-ingest.d.ts.map +1 -0
- package/dist/src/ingest/url-ingest.js +301 -0
- package/dist/src/ingest/url-ingest.js.map +1 -0
- package/dist/src/integrations/deepagents-adapter.d.ts +42 -0
- package/dist/src/integrations/deepagents-adapter.d.ts.map +1 -0
- package/dist/src/integrations/deepagents-adapter.js +146 -0
- package/dist/src/integrations/deepagents-adapter.js.map +1 -0
- package/dist/src/integrations/langchain.d.ts +27 -0
- package/dist/src/integrations/langchain.d.ts.map +1 -0
- package/dist/src/integrations/langchain.js +28 -0
- package/dist/src/integrations/langchain.js.map +1 -0
- package/dist/src/integrations/langgraph.d.ts +23 -0
- package/dist/src/integrations/langgraph.d.ts.map +1 -0
- package/dist/src/integrations/langgraph.js +30 -0
- package/dist/src/integrations/langgraph.js.map +1 -0
- package/dist/src/providers/in-memory-store.d.ts +15 -0
- package/dist/src/providers/in-memory-store.d.ts.map +1 -0
- package/dist/src/providers/in-memory-store.js +62 -0
- package/dist/src/providers/in-memory-store.js.map +1 -0
- package/dist/src/providers/mem0-provider.d.ts +47 -0
- package/dist/src/providers/mem0-provider.d.ts.map +1 -0
- package/dist/src/providers/mem0-provider.js +99 -0
- package/dist/src/providers/mem0-provider.js.map +1 -0
- package/dist/src/providers/rag-provider.d.ts +27 -0
- package/dist/src/providers/rag-provider.d.ts.map +1 -0
- package/dist/src/providers/rag-provider.js +58 -0
- package/dist/src/providers/rag-provider.js.map +1 -0
- package/dist/src/providers/sqlite-store.d.ts +21 -0
- package/dist/src/providers/sqlite-store.d.ts.map +1 -0
- package/dist/src/providers/sqlite-store.js +142 -0
- package/dist/src/providers/sqlite-store.js.map +1 -0
- package/dist/test/core/agent-memory.test.d.ts +2 -0
- package/dist/test/core/agent-memory.test.d.ts.map +1 -0
- package/dist/test/core/agent-memory.test.js +119 -0
- package/dist/test/core/agent-memory.test.js.map +1 -0
- package/dist/test/core/config.test.d.ts +2 -0
- package/dist/test/core/config.test.d.ts.map +1 -0
- package/dist/test/core/config.test.js +48 -0
- package/dist/test/core/config.test.js.map +1 -0
- package/dist/test/core/observability.test.d.ts +2 -0
- package/dist/test/core/observability.test.d.ts.map +1 -0
- package/dist/test/core/observability.test.js +53 -0
- package/dist/test/core/observability.test.js.map +1 -0
- package/dist/test/core/policy.test.d.ts +2 -0
- package/dist/test/core/policy.test.d.ts.map +1 -0
- package/dist/test/core/policy.test.js +42 -0
- package/dist/test/core/policy.test.js.map +1 -0
- package/dist/test/core/privacy.test.d.ts +2 -0
- package/dist/test/core/privacy.test.d.ts.map +1 -0
- package/dist/test/core/privacy.test.js +44 -0
- package/dist/test/core/privacy.test.js.map +1 -0
- package/dist/test/core/router.test.d.ts +2 -0
- package/dist/test/core/router.test.d.ts.map +1 -0
- package/dist/test/core/router.test.js +118 -0
- package/dist/test/core/router.test.js.map +1 -0
- package/dist/test/create-agent-memory.test.d.ts +2 -0
- package/dist/test/create-agent-memory.test.d.ts.map +1 -0
- package/dist/test/create-agent-memory.test.js +122 -0
- package/dist/test/create-agent-memory.test.js.map +1 -0
- package/dist/test/ingest/url-ingest.test.d.ts +2 -0
- package/dist/test/ingest/url-ingest.test.d.ts.map +1 -0
- package/dist/test/ingest/url-ingest.test.js +142 -0
- package/dist/test/ingest/url-ingest.test.js.map +1 -0
- package/dist/test/integration/agent-memory-flow.test.d.ts +5 -0
- package/dist/test/integration/agent-memory-flow.test.d.ts.map +1 -0
- package/dist/test/integration/agent-memory-flow.test.js +80 -0
- package/dist/test/integration/agent-memory-flow.test.js.map +1 -0
- package/dist/test/integration/helpers/ollama-live.d.ts +16 -0
- package/dist/test/integration/helpers/ollama-live.d.ts.map +1 -0
- package/dist/test/integration/helpers/ollama-live.js +101 -0
- package/dist/test/integration/helpers/ollama-live.js.map +1 -0
- package/dist/test/integration/url-ingest-flow.test.d.ts +5 -0
- package/dist/test/integration/url-ingest-flow.test.d.ts.map +1 -0
- package/dist/test/integration/url-ingest-flow.test.js +50 -0
- package/dist/test/integration/url-ingest-flow.test.js.map +1 -0
- package/dist/test/integration/vlm-llm-live.test.d.ts +9 -0
- package/dist/test/integration/vlm-llm-live.test.d.ts.map +1 -0
- package/dist/test/integration/vlm-llm-live.test.js +141 -0
- package/dist/test/integration/vlm-llm-live.test.js.map +1 -0
- package/dist/test/providers/in-memory-store.test.d.ts +2 -0
- package/dist/test/providers/in-memory-store.test.d.ts.map +1 -0
- package/dist/test/providers/in-memory-store.test.js +44 -0
- package/dist/test/providers/in-memory-store.test.js.map +1 -0
- package/dist/test/providers/rag-provider.test.d.ts +2 -0
- package/dist/test/providers/rag-provider.test.d.ts.map +1 -0
- package/dist/test/providers/rag-provider.test.js +113 -0
- package/dist/test/providers/rag-provider.test.js.map +1 -0
- package/dist/test/providers/sqlite-store.test.d.ts +2 -0
- package/dist/test/providers/sqlite-store.test.d.ts.map +1 -0
- package/dist/test/providers/sqlite-store.test.js +119 -0
- package/dist/test/providers/sqlite-store.test.js.map +1 -0
- package/package.json +79 -39
- package/bin/chat +0 -11
- package/dist/adapters/index.d.ts +0 -8
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -29
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/mem0/mem0-store.d.ts +0 -29
- package/dist/adapters/mem0/mem0-store.d.ts.map +0 -1
- package/dist/adapters/mem0/mem0-store.js +0 -174
- package/dist/adapters/mem0/mem0-store.js.map +0 -1
- package/dist/adapters/rag-http/rag-http-retriever.d.ts +0 -18
- package/dist/adapters/rag-http/rag-http-retriever.d.ts.map +0 -1
- package/dist/adapters/rag-http/rag-http-retriever.js +0 -71
- package/dist/adapters/rag-http/rag-http-retriever.js.map +0 -1
- package/dist/adapters/types.d.ts +0 -25
- package/dist/adapters/types.d.ts.map +0 -1
- package/dist/adapters/types.js +0 -6
- package/dist/boot/boot-rebuilder.d.ts +0 -26
- package/dist/boot/boot-rebuilder.d.ts.map +0 -1
- package/dist/boot/boot-rebuilder.js +0 -112
- package/dist/boot/boot-rebuilder.js.map +0 -1
- package/dist/boot/index.d.ts +0 -3
- package/dist/boot/index.d.ts.map +0 -1
- package/dist/boot/index.js +0 -6
- package/dist/boot/index.js.map +0 -1
- package/dist/cli/chat-split.d.ts +0 -22
- package/dist/cli/chat-split.d.ts.map +0 -1
- package/dist/cli/chat-split.js +0 -187
- package/dist/cli/chat-split.js.map +0 -1
- package/dist/cli/chat.d.ts +0 -19
- package/dist/cli/chat.d.ts.map +0 -1
- package/dist/cli/chat.js +0 -266
- package/dist/cli/chat.js.map +0 -1
- package/dist/cli/commands/command-handler.d.ts +0 -32
- package/dist/cli/commands/command-handler.d.ts.map +0 -1
- package/dist/cli/commands/command-handler.js +0 -143
- package/dist/cli/commands/command-handler.js.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -8
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/ui/display-manager.d.ts +0 -18
- package/dist/cli/ui/display-manager.d.ts.map +0 -1
- package/dist/cli/ui/display-manager.js +0 -69
- package/dist/cli/ui/display-manager.js.map +0 -1
- package/dist/cli/ui/screen-layout.d.ts +0 -12
- package/dist/cli/ui/screen-layout.d.ts.map +0 -1
- package/dist/cli/ui/screen-layout.js +0 -125
- package/dist/cli/ui/screen-layout.js.map +0 -1
- package/dist/config/index.d.ts +0 -2
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -6
- package/dist/config/index.js.map +0 -1
- package/dist/config/loader.d.ts +0 -9
- package/dist/config/loader.d.ts.map +0 -1
- package/dist/config/loader.js +0 -107
- package/dist/config/loader.js.map +0 -1
- package/dist/context/context-builder.d.ts +0 -18
- package/dist/context/context-builder.d.ts.map +0 -1
- package/dist/context/context-builder.js +0 -91
- package/dist/context/context-builder.js.map +0 -1
- package/dist/core/agent-memory.d.ts +0 -50
- package/dist/core/agent-memory.d.ts.map +0 -1
- package/dist/core/agent-memory.js +0 -297
- package/dist/core/agent-memory.js.map +0 -1
- package/dist/embedding/embedder.d.ts +0 -49
- package/dist/embedding/embedder.d.ts.map +0 -1
- package/dist/embedding/embedder.js +0 -146
- package/dist/embedding/embedder.js.map +0 -1
- package/dist/embedding/index.d.ts +0 -3
- package/dist/embedding/index.d.ts.map +0 -1
- package/dist/embedding/index.js +0 -8
- package/dist/embedding/index.js.map +0 -1
- package/dist/gate/deduplicator.d.ts +0 -22
- package/dist/gate/deduplicator.d.ts.map +0 -1
- package/dist/gate/deduplicator.js +0 -74
- package/dist/gate/deduplicator.js.map +0 -1
- package/dist/gate/extractor.d.ts +0 -33
- package/dist/gate/extractor.d.ts.map +0 -1
- package/dist/gate/extractor.js +0 -122
- package/dist/gate/extractor.js.map +0 -1
- package/dist/gate/index.d.ts +0 -3
- package/dist/gate/index.d.ts.map +0 -1
- package/dist/gate/index.js +0 -6
- package/dist/gate/index.js.map +0 -1
- package/dist/gate/memory-gate.d.ts +0 -27
- package/dist/gate/memory-gate.d.ts.map +0 -1
- package/dist/gate/memory-gate.js +0 -86
- package/dist/gate/memory-gate.js.map +0 -1
- package/dist/gate/redactor.d.ts +0 -14
- package/dist/gate/redactor.d.ts.map +0 -1
- package/dist/gate/redactor.js +0 -24
- package/dist/gate/redactor.js.map +0 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -24
- package/dist/index.js.map +0 -1
- package/dist/indexing/in-memory-index.d.ts +0 -67
- package/dist/indexing/in-memory-index.d.ts.map +0 -1
- package/dist/indexing/in-memory-index.js +0 -135
- package/dist/indexing/in-memory-index.js.map +0 -1
- package/dist/indexing/index.d.ts +0 -3
- package/dist/indexing/index.d.ts.map +0 -1
- package/dist/indexing/index.js +0 -6
- package/dist/indexing/index.js.map +0 -1
- package/dist/persistence/database/schema.d.ts +0 -6
- package/dist/persistence/database/schema.d.ts.map +0 -1
- package/dist/persistence/database/schema.js +0 -75
- package/dist/persistence/database/schema.js.map +0 -1
- package/dist/persistence/index.d.ts +0 -3
- package/dist/persistence/index.d.ts.map +0 -1
- package/dist/persistence/index.js +0 -6
- package/dist/persistence/index.js.map +0 -1
- package/dist/persistence/repository/embedding-operations.d.ts +0 -17
- package/dist/persistence/repository/embedding-operations.d.ts.map +0 -1
- package/dist/persistence/repository/embedding-operations.js +0 -58
- package/dist/persistence/repository/embedding-operations.js.map +0 -1
- package/dist/persistence/repository/memory-operations.d.ts +0 -28
- package/dist/persistence/repository/memory-operations.d.ts.map +0 -1
- package/dist/persistence/repository/memory-operations.js +0 -87
- package/dist/persistence/repository/memory-operations.js.map +0 -1
- package/dist/persistence/repository/meta-operations.d.ts +0 -15
- package/dist/persistence/repository/meta-operations.d.ts.map +0 -1
- package/dist/persistence/repository/meta-operations.js +0 -20
- package/dist/persistence/repository/meta-operations.js.map +0 -1
- package/dist/persistence/sqlite-repo.d.ts +0 -58
- package/dist/persistence/sqlite-repo.d.ts.map +0 -1
- package/dist/persistence/sqlite-repo.js +0 -81
- package/dist/persistence/sqlite-repo.js.map +0 -1
- package/dist/persistence/utils/hash.d.ts +0 -8
- package/dist/persistence/utils/hash.d.ts.map +0 -1
- package/dist/persistence/utils/hash.js +0 -48
- package/dist/persistence/utils/hash.js.map +0 -1
- package/dist/persistence/utils/serialization.d.ts +0 -33
- package/dist/persistence/utils/serialization.d.ts.map +0 -1
- package/dist/persistence/utils/serialization.js +0 -85
- package/dist/persistence/utils/serialization.js.map +0 -1
- package/dist/processing/document/document-processor.d.ts +0 -30
- package/dist/processing/document/document-processor.d.ts.map +0 -1
- package/dist/processing/document/document-processor.js +0 -158
- package/dist/processing/document/document-processor.js.map +0 -1
- package/dist/processing/document/index.d.ts +0 -3
- package/dist/processing/document/index.d.ts.map +0 -1
- package/dist/processing/document/index.js +0 -6
- package/dist/processing/document/index.js.map +0 -1
- package/dist/ranker/ranker.d.ts +0 -26
- package/dist/ranker/ranker.d.ts.map +0 -1
- package/dist/ranker/ranker.js +0 -40
- package/dist/ranker/ranker.js.map +0 -1
- package/dist/recall/recall-engine.d.ts +0 -19
- package/dist/recall/recall-engine.d.ts.map +0 -1
- package/dist/recall/recall-engine.js +0 -79
- package/dist/recall/recall-engine.js.map +0 -1
- package/dist/types/config.d.ts +0 -821
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -128
- package/dist/types/config.js.map +0 -1
- package/dist/types/document.d.ts +0 -37
- package/dist/types/document.d.ts.map +0 -1
- package/dist/types/document.js +0 -6
- package/dist/types/document.js.map +0 -1
- package/dist/types/index.d.ts +0 -86
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,260 +1,125 @@
|
|
|
1
1
|
# agent-memory
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Source:** `git@github.com:easynet-world/agent-memory.git`
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Agent 生态记忆组件**(**独立项目**:不依赖 agent-llm、agent-tool)。**Two APIs only:** `memorize` (store) and `recall` (retrieve).
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
npm install agent-memory
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
```typescript
|
|
12
|
-
import { AgentMemory } from "agent-memory";
|
|
13
|
-
|
|
14
|
-
const am = await AgentMemory.fromYaml("./agent-memory.yaml");
|
|
15
|
-
|
|
16
|
-
// 记忆对话
|
|
17
|
-
await am.remember({
|
|
18
|
-
messages: [
|
|
19
|
-
{ role: "user", content: "发布流程:先 dc-dev-testing,再 dc-prod" }
|
|
20
|
-
],
|
|
21
|
-
actor: { id: "U123", type: "user" },
|
|
22
|
-
scope: { projectId: "bds" },
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
// 记忆文档(支持多模态)
|
|
26
|
-
await am.rememberDocument({
|
|
27
|
-
document: {
|
|
28
|
-
id: "doc_001",
|
|
29
|
-
type: "pdf",
|
|
30
|
-
text: "PDF提取的文本内容...",
|
|
31
|
-
metadata: { title: "技术文档", path: "/docs/tech.pdf" },
|
|
32
|
-
},
|
|
33
|
-
actor: { id: "system", type: "system" },
|
|
34
|
-
scope: { projectId: "main-project" },
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
// 召回
|
|
38
|
-
const result = await am.recall({
|
|
39
|
-
query: "发布流程是什么?",
|
|
40
|
-
scope: { projectId: "bds" },
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
console.log(result.context);
|
|
44
|
-
```
|
|
7
|
+
Local or remote PDF, txt, HTML, and images: pass a `url` to ingest; recall by `query`.
|
|
45
8
|
|
|
46
|
-
|
|
9
|
+
**Three memory types:**
|
|
47
10
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
-
|
|
52
|
-
|
|
53
|
-
- ✅ **向量检索**:基于 Embedding 的语义搜索
|
|
54
|
-
- ✅ **YAML配置**:简单易用的配置文件
|
|
11
|
+
| type | Description | Usage |
|
|
12
|
+
|------|-------------|-------|
|
|
13
|
+
| `thread` | Current session | This session only |
|
|
14
|
+
| `cross_thread` | Cross-session | Cross-session preferences/settings |
|
|
15
|
+
| `knowledge` | Docs/RAG | Documents or `memorize({ url })` |
|
|
55
16
|
|
|
56
|
-
|
|
17
|
+
When unsure about type: pass a `classifyMemory` callback and let the program decide.
|
|
57
18
|
|
|
58
|
-
|
|
19
|
+
---
|
|
59
20
|
|
|
60
|
-
|
|
61
|
-
- `pdf` - PDF文档(支持分页)
|
|
62
|
-
- `image` - 图片(支持OCR文本)
|
|
63
|
-
- `markdown` - Markdown文档
|
|
64
|
-
- `html` - HTML文档
|
|
65
|
-
- `code` - 代码文件
|
|
21
|
+
## Quick start
|
|
66
22
|
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
document: {
|
|
71
|
-
id: "pdf_001",
|
|
72
|
-
type: "pdf",
|
|
73
|
-
text: "PDF内容...",
|
|
74
|
-
page: 1,
|
|
75
|
-
metadata: { title: "文档", pageCount: 50 },
|
|
76
|
-
},
|
|
77
|
-
autoChunk: true,
|
|
78
|
-
chunkSize: 1000,
|
|
79
|
-
extractMetadata: true,
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
// 记忆图片(带OCR)
|
|
83
|
-
await am.rememberDocument({
|
|
84
|
-
document: {
|
|
85
|
-
id: "img_001",
|
|
86
|
-
type: "image",
|
|
87
|
-
text: "图片描述",
|
|
88
|
-
extractedText: "OCR提取的文字",
|
|
89
|
-
imageUrl: "https://example.com/image.png",
|
|
90
|
-
},
|
|
91
|
-
});
|
|
23
|
+
```bash
|
|
24
|
+
pnpm install && pnpm run build
|
|
25
|
+
# SQLite persistence: pnpm add better-sqlite3
|
|
92
26
|
```
|
|
93
27
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
## 配置
|
|
97
|
-
|
|
98
|
-
创建 `agent-memory.yaml`:
|
|
99
|
-
|
|
100
|
-
```yaml
|
|
101
|
-
store:
|
|
102
|
-
mem0:
|
|
103
|
-
mode: in_memory # 或 platform
|
|
104
|
-
|
|
105
|
-
persistence:
|
|
106
|
-
sqlite:
|
|
107
|
-
path: ./data/memory.db
|
|
108
|
-
|
|
109
|
-
embedding:
|
|
110
|
-
provider: ollama
|
|
111
|
-
model: embedding-gemma:latest
|
|
112
|
-
|
|
113
|
-
memory:
|
|
114
|
-
gate:
|
|
115
|
-
enabled: true
|
|
116
|
-
redact:
|
|
117
|
-
enabled: true
|
|
118
|
-
dedupe:
|
|
119
|
-
enabled: true
|
|
120
|
-
similarity_threshold: 0.92
|
|
121
|
-
```
|
|
28
|
+
---
|
|
122
29
|
|
|
123
|
-
##
|
|
30
|
+
## Examples
|
|
124
31
|
|
|
125
|
-
|
|
32
|
+
```ts
|
|
33
|
+
import { createAgentMemory } from "@easynet/agent-memory";
|
|
126
34
|
|
|
127
|
-
|
|
35
|
+
const memory = await createAgentMemory();
|
|
128
36
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
mode: platform
|
|
133
|
-
api_key: ${MEM0_API_KEY}
|
|
134
|
-
base_url: https://api.mem0.ai
|
|
37
|
+
await memory.memorize({ namespace: "user:123", type: "cross_thread", content: "Use Chinese." });
|
|
38
|
+
await memory.memorize({ namespace: "project:docs", type: "knowledge", content: "API: Bearer token." });
|
|
39
|
+
const { injectedText } = await memory.recall({ namespace: "user:123", query: "preferences", topK: 8 });
|
|
135
40
|
```
|
|
136
41
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
完全本地运行,使用 SQLite 存储和内存向量索引:
|
|
140
|
-
|
|
141
|
-
```yaml
|
|
142
|
-
store:
|
|
143
|
-
mem0:
|
|
144
|
-
mode: in_memory
|
|
145
|
-
|
|
146
|
-
persistence:
|
|
147
|
-
sqlite:
|
|
148
|
-
path: ./data/memory.db
|
|
42
|
+
**URL ingest** (supported by `createAgentMemory()`; PDF requires `pdf-parse`):
|
|
149
43
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
44
|
+
```ts
|
|
45
|
+
import { createAgentMemory } from "@easynet/agent-memory";
|
|
46
|
+
const memory = await createAgentMemory();
|
|
47
|
+
await memory.memorize({ url: "./doc.pdf", namespace: "project:docs" });
|
|
48
|
+
await memory.memorize({ url: "https://example.com/page.html", namespace: "project:docs" });
|
|
153
49
|
```
|
|
154
50
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
### remember()
|
|
51
|
+
**LangChain Agent** (inject memory before calling LLM; write memory after each turn):
|
|
158
52
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
scope: { projectId: "bds" },
|
|
168
|
-
hint: { types: ["policy", "episodic"] },
|
|
169
|
-
});
|
|
53
|
+
```ts
|
|
54
|
+
import { createAgentMemory, retrieveContextForLangChain, writeMemoryForLangChain } from "@easynet/agent-memory";
|
|
55
|
+
const memory = await createAgentMemory();
|
|
56
|
+
const ns = "user:alice";
|
|
57
|
+
// Before LLM: retrieve relevant memory, inject into system or first user message
|
|
58
|
+
const { injectedText } = await retrieveContextForLangChain(memory, { namespace: ns, query: "preferences and settings", topK: 8 });
|
|
59
|
+
// After each turn/tool: write long-term memory
|
|
60
|
+
await writeMemoryForLangChain(memory, { namespace: ns, type: "cross_thread", content: "User prefers Chinese and concise replies." });
|
|
170
61
|
```
|
|
171
62
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
await
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
extractMetadata?: boolean,
|
|
184
|
-
tags?: string[],
|
|
63
|
+
**DeepAgents** (agent-memory as long-term store under `/memories/`):
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
import { createAgentMemory, AgentMemoryStoreAdapter } from "@easynet/agent-memory";
|
|
67
|
+
import { createDeepAgent, CompositeBackend, StateBackend, StoreBackend } from "deepagents";
|
|
68
|
+
const agentMemory = await createAgentMemory();
|
|
69
|
+
const store = new AgentMemoryStoreAdapter({ agentMemory });
|
|
70
|
+
const agent = createDeepAgent({
|
|
71
|
+
store,
|
|
72
|
+
backend: (c) => new CompositeBackend(new StateBackend(c), { "/memories/": new StoreBackend(c) }),
|
|
73
|
+
systemPrompt: "When users state preferences, save to /memories/user_preferences.txt",
|
|
185
74
|
});
|
|
186
75
|
```
|
|
187
76
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
召回记忆和文档:
|
|
191
|
-
|
|
192
|
-
```typescript
|
|
193
|
-
const result = await am.recall({
|
|
194
|
-
query: "发布流程是什么?",
|
|
195
|
-
actor: { id: "U123", type: "user" },
|
|
196
|
-
scope: { projectId: "bds" },
|
|
197
|
-
topK: 10,
|
|
198
|
-
includeMemory: true,
|
|
199
|
-
includeDocs: true,
|
|
200
|
-
});
|
|
201
|
-
```
|
|
77
|
+
---
|
|
202
78
|
|
|
203
|
-
##
|
|
79
|
+
## Config (YAML)
|
|
204
80
|
|
|
205
|
-
|
|
206
|
-
src/
|
|
207
|
-
├── core/ # 核心类
|
|
208
|
-
│ └── agent-memory.ts # 主类
|
|
209
|
-
├── adapters/ # 适配器(Mem0, RAG HTTP)
|
|
210
|
-
├── storage/
|
|
211
|
-
│ ├── persistence/ # SQLite持久化
|
|
212
|
-
│ └── indexing/ # In-Memory向量索引
|
|
213
|
-
├── processing/
|
|
214
|
-
│ ├── gate/ # MemoryGate
|
|
215
|
-
│ ├── embedding/ # Embedding计算
|
|
216
|
-
│ ├── recall/ # 召回引擎
|
|
217
|
-
│ ├── ranker/ # 排序器
|
|
218
|
-
│ ├── context/ # Context构建
|
|
219
|
-
│ └── document/ # 文档处理
|
|
220
|
-
├── boot/ # 启动回灌
|
|
221
|
-
├── config/ # 配置加载
|
|
222
|
-
├── types/ # 类型定义
|
|
223
|
-
└── cli/ # Chat Console
|
|
81
|
+
Config file `config/agent-memory.yaml`; omit for in-memory default.
|
|
224
82
|
|
|
225
|
-
|
|
83
|
+
```yaml
|
|
84
|
+
providers:
|
|
85
|
+
- id: default
|
|
86
|
+
type: sqlite
|
|
87
|
+
options:
|
|
88
|
+
dbPath: ./data/agent-memory.db
|
|
89
|
+
- id: rag
|
|
90
|
+
type: rag
|
|
91
|
+
- id: mem0
|
|
92
|
+
type: mem0
|
|
93
|
+
router:
|
|
94
|
+
defaultProvider: default
|
|
95
|
+
rules:
|
|
96
|
+
- types: [knowledge]
|
|
97
|
+
providerId: rag
|
|
98
|
+
- types: [cross_thread]
|
|
99
|
+
providerId: mem0
|
|
100
|
+
policy:
|
|
101
|
+
allowedWriteTypes: [thread, cross_thread, knowledge]
|
|
102
|
+
maxItemsPerType: 20
|
|
103
|
+
observability:
|
|
104
|
+
trace: true
|
|
105
|
+
privacy:
|
|
106
|
+
forbiddenMetadataKeys: [password, api_key, secret, token]
|
|
107
|
+
redactSecrets: false
|
|
108
|
+
vlm:
|
|
109
|
+
captionUrl: http://localhost:8000/caption
|
|
110
|
+
captionPrompt: "Extract key information from the image..."
|
|
111
|
+
timeoutMs: 30000
|
|
226
112
|
```
|
|
227
113
|
|
|
228
|
-
|
|
229
|
-
-
|
|
230
|
-
-
|
|
231
|
-
-
|
|
232
|
-
|
|
233
|
-
详细结构说明请参考 [PROJECT_STRUCTURE.md](./PROJECT_STRUCTURE.md)
|
|
234
|
-
|
|
235
|
-
## 开发
|
|
236
|
-
|
|
237
|
-
```bash
|
|
238
|
-
# 安装依赖
|
|
239
|
-
npm install
|
|
240
|
-
|
|
241
|
-
# 构建
|
|
242
|
-
npm run build
|
|
243
|
-
|
|
244
|
-
# 测试
|
|
245
|
-
npm test
|
|
246
|
-
|
|
247
|
-
# Chat Console
|
|
248
|
-
npm run chat
|
|
249
|
-
npm run chat:split
|
|
250
|
-
```
|
|
114
|
+
- **Namespace:** `user:{id}` / `project:{id}` / `org:{id}`
|
|
115
|
+
- **SQLite:** `type: sqlite` + `options.dbPath`; requires `pnpm add better-sqlite3`; optional `options.embed` for vector search
|
|
116
|
+
- **Mem0:** `type: mem0`; in code use `createAgentMemory({ overrides: { mem0 } })`
|
|
117
|
+
- **VLM:** image→caption written as knowledge; `loadConfigFromYaml()` yields `config.vlm`
|
|
251
118
|
|
|
252
|
-
|
|
119
|
+
---
|
|
253
120
|
|
|
254
|
-
|
|
255
|
-
- `examples/document-memory.ts` - 文档记忆示例
|
|
256
|
-
- `examples/chat-example.ts` - Chat Console 示例
|
|
121
|
+
**Trace / Privacy:** `recall()` returns `traceId`; configurable TraceRecorder and PrivacyGuard.
|
|
257
122
|
|
|
258
|
-
|
|
123
|
+
**Layout:** 根目录主包(src/、test/、docs/、examples/)· `examples/pdf-text-rag` · `examples/deepagents-memory`
|
|
259
124
|
|
|
260
|
-
MIT
|
|
125
|
+
**License:** MIT
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentMemory: unified facade. Primary APIs: memorize (store), recall (retrieve).
|
|
3
|
+
* write / retrieveForPrompt kept as aliases for compatibility.
|
|
4
|
+
*/
|
|
5
|
+
import type { MemoryItem, MemoryQueryRequest, MemoryType, MemoryWriteRequest, MemorizeRequest, RecallResult, RetrieveResult } from "./types.js";
|
|
6
|
+
import { PolicyEngine } from "./policy.js";
|
|
7
|
+
import type { TraceRecorder } from "./observability.js";
|
|
8
|
+
import { PrivacyGuard } from "./privacy.js";
|
|
9
|
+
import { MemoryRouter } from "./router.js";
|
|
10
|
+
/** When type is omitted: infer thread/cross_thread/knowledge from content; if not provided, default cross_thread. */
|
|
11
|
+
export type ClassifyMemoryFn = (content: string, metadata?: Record<string, unknown>) => Promise<MemoryType>;
|
|
12
|
+
export interface AgentMemoryOptions {
|
|
13
|
+
router: MemoryRouter;
|
|
14
|
+
policy?: PolicyEngine;
|
|
15
|
+
traceRecorder?: TraceRecorder;
|
|
16
|
+
privacyGuard?: PrivacyGuard;
|
|
17
|
+
/** When type omitted: used to decide type; otherwise default cross_thread. */
|
|
18
|
+
classifyMemory?: ClassifyMemoryFn;
|
|
19
|
+
}
|
|
20
|
+
export declare class AgentMemory {
|
|
21
|
+
private router;
|
|
22
|
+
private policy;
|
|
23
|
+
private traceRecorder?;
|
|
24
|
+
private privacy;
|
|
25
|
+
private classifyMemory?;
|
|
26
|
+
constructor(options: AgentMemoryOptions);
|
|
27
|
+
/** Store one memory (primary API). Type from classifyMemory or default cross_thread when omitted. */
|
|
28
|
+
memorize(req: MemorizeRequest): Promise<MemoryItem>;
|
|
29
|
+
/** @deprecated Use memorize */
|
|
30
|
+
write(req: MemoryWriteRequest): Promise<MemoryItem>;
|
|
31
|
+
/** Retrieve memories for query and build injectable text (primary API). Default types: knowledge, cross_thread. */
|
|
32
|
+
recall(req: MemoryQueryRequest): Promise<RecallResult>;
|
|
33
|
+
/** @deprecated Use recall */
|
|
34
|
+
retrieveForPrompt(req: MemoryQueryRequest): Promise<RetrieveResult>;
|
|
35
|
+
deleteByNamespace(namespace: string): Promise<void>;
|
|
36
|
+
/** Get one item by namespace and key (e.g. path). Requires provider to support getByKey. */
|
|
37
|
+
getByKey(namespace: string, key: string): Promise<MemoryItem | null>;
|
|
38
|
+
/** Delete item by namespace and key. */
|
|
39
|
+
deleteByKey(namespace: string, key: string): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=agent-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-memory.d.ts","sourceRoot":"","sources":["../../../src/core/agent-memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,qHAAqH;AACrH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC/B,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzB,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,8EAA8E;IAC9E,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAmB;gBAE9B,OAAO,EAAE,kBAAkB;IAQvC,qGAAqG;IAC/F,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAmCzD,+BAA+B;IACzB,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAIzD,mHAAmH;IAC7G,MAAM,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IA+C5D,6BAA6B;IACvB,iBAAiB,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAInE,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzD,4FAA4F;IACtF,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI1E,wCAAwC;IAClC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGjE"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AgentMemory: unified facade. Primary APIs: memorize (store), recall (retrieve).
|
|
4
|
+
* write / retrieveForPrompt kept as aliases for compatibility.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.AgentMemory = void 0;
|
|
8
|
+
const policy_js_1 = require("./policy.js");
|
|
9
|
+
const observability_js_1 = require("./observability.js");
|
|
10
|
+
const privacy_js_1 = require("./privacy.js");
|
|
11
|
+
const node_crypto_1 = require("node:crypto");
|
|
12
|
+
class AgentMemory {
|
|
13
|
+
router;
|
|
14
|
+
policy;
|
|
15
|
+
traceRecorder;
|
|
16
|
+
privacy;
|
|
17
|
+
classifyMemory;
|
|
18
|
+
constructor(options) {
|
|
19
|
+
this.router = options.router;
|
|
20
|
+
this.policy = options.policy ?? new policy_js_1.PolicyEngine();
|
|
21
|
+
this.traceRecorder = options.traceRecorder;
|
|
22
|
+
this.privacy = options.privacyGuard ?? new privacy_js_1.PrivacyGuard();
|
|
23
|
+
this.classifyMemory = options.classifyMemory;
|
|
24
|
+
}
|
|
25
|
+
/** Store one memory (primary API). Type from classifyMemory or default cross_thread when omitted. */
|
|
26
|
+
async memorize(req) {
|
|
27
|
+
let type = req.type;
|
|
28
|
+
if (type === undefined) {
|
|
29
|
+
if (this.classifyMemory && req.content) {
|
|
30
|
+
type = await this.classifyMemory(req.content, req.metadata);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
type = "cross_thread";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const writeReq = { ...req, type };
|
|
37
|
+
const allowed = this.policy.shouldWrite({
|
|
38
|
+
namespace: writeReq.namespace,
|
|
39
|
+
type: writeReq.type,
|
|
40
|
+
content: writeReq.content,
|
|
41
|
+
metadata: writeReq.metadata,
|
|
42
|
+
});
|
|
43
|
+
if (!allowed) {
|
|
44
|
+
throw new Error(`Write not allowed by policy for type: ${writeReq.type}`);
|
|
45
|
+
}
|
|
46
|
+
const raw = writeReq.metadata;
|
|
47
|
+
const metadata = raw
|
|
48
|
+
? this.privacy.sanitizeMetadata(raw)
|
|
49
|
+
: {};
|
|
50
|
+
const now = new Date().toISOString();
|
|
51
|
+
const finalReq = {
|
|
52
|
+
...writeReq,
|
|
53
|
+
metadata: {
|
|
54
|
+
...metadata,
|
|
55
|
+
created_at: metadata.created_at ?? now,
|
|
56
|
+
updated_at: now,
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
return this.router.write(finalReq);
|
|
60
|
+
}
|
|
61
|
+
/** @deprecated Use memorize */
|
|
62
|
+
async write(req) {
|
|
63
|
+
return this.memorize(req);
|
|
64
|
+
}
|
|
65
|
+
/** Retrieve memories for query and build injectable text (primary API). Default types: knowledge, cross_thread. */
|
|
66
|
+
async recall(req) {
|
|
67
|
+
const traceId = (0, node_crypto_1.randomUUID)();
|
|
68
|
+
const start = Date.now();
|
|
69
|
+
const topK = req.topK ?? 8;
|
|
70
|
+
const budgetTokens = req.budgetTokens ?? 1200;
|
|
71
|
+
const types = req.types ?? ["knowledge", "cross_thread"];
|
|
72
|
+
const items = await this.router.query({
|
|
73
|
+
...req,
|
|
74
|
+
types: [...types],
|
|
75
|
+
topK: Math.max(topK, Math.ceil(budgetTokens / 50)),
|
|
76
|
+
});
|
|
77
|
+
const { items: merged, estimatedTokens } = this.policy.mergeAndRank(items, budgetTokens);
|
|
78
|
+
const injectedText = merged
|
|
79
|
+
.map((i) => `[${i.type}] ${i.content}`)
|
|
80
|
+
.join("\n\n");
|
|
81
|
+
const latencyMs = Date.now() - start;
|
|
82
|
+
if (this.traceRecorder) {
|
|
83
|
+
const backendDistribution = {};
|
|
84
|
+
for (const item of merged) {
|
|
85
|
+
backendDistribution[item.type] = (backendDistribution[item.type] ?? 0) + 1;
|
|
86
|
+
}
|
|
87
|
+
this.traceRecorder.record((0, observability_js_1.createTrace)(traceId, req.namespace, {
|
|
88
|
+
query: req.query,
|
|
89
|
+
hitIds: merged.map((i) => i.id),
|
|
90
|
+
hitTypes: merged.map((i) => i.type),
|
|
91
|
+
injectedTokens: estimatedTokens,
|
|
92
|
+
latencyMs,
|
|
93
|
+
backendDistribution,
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
items: merged,
|
|
98
|
+
injectedText,
|
|
99
|
+
traceId,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/** @deprecated Use recall */
|
|
103
|
+
async retrieveForPrompt(req) {
|
|
104
|
+
return this.recall(req);
|
|
105
|
+
}
|
|
106
|
+
async deleteByNamespace(namespace) {
|
|
107
|
+
const req = {
|
|
108
|
+
namespace,
|
|
109
|
+
query: "",
|
|
110
|
+
topK: 10_000,
|
|
111
|
+
};
|
|
112
|
+
const items = await this.router.query(req);
|
|
113
|
+
for (const item of items) {
|
|
114
|
+
await this.router.delete(item.id, namespace);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Get one item by namespace and key (e.g. path). Requires provider to support getByKey. */
|
|
118
|
+
async getByKey(namespace, key) {
|
|
119
|
+
return this.router.getByKey(namespace, key);
|
|
120
|
+
}
|
|
121
|
+
/** Delete item by namespace and key. */
|
|
122
|
+
async deleteByKey(namespace, key) {
|
|
123
|
+
return this.router.deleteByKey(namespace, key);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.AgentMemory = AgentMemory;
|
|
127
|
+
//# sourceMappingURL=agent-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-memory.js","sourceRoot":"","sources":["../../../src/core/agent-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YAML config types and loader. Config-driven; no use-case hardcoding.
|
|
3
|
+
*/
|
|
4
|
+
import type { MemoryType } from "./types.js";
|
|
5
|
+
export interface AgentMemoryProviderConfig {
|
|
6
|
+
id: string;
|
|
7
|
+
type: "in_memory" | "rag" | "mem0" | "sqlite";
|
|
8
|
+
/** sqlite: dbPath, etc.; rag: embed/search; mem0: pass instance via overrides at runtime */
|
|
9
|
+
options?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export interface AgentMemoryRouterConfig {
|
|
12
|
+
defaultProvider: string;
|
|
13
|
+
/** Which types/namespacePrefix go to which providerId; no use-case keywords. */
|
|
14
|
+
rules?: Array<{
|
|
15
|
+
types?: string[];
|
|
16
|
+
namespacePrefix?: string;
|
|
17
|
+
providerId: string;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
export interface AgentMemoryPolicyConfig {
|
|
21
|
+
allowedWriteTypes?: MemoryType[];
|
|
22
|
+
maxItemsPerType?: number;
|
|
23
|
+
budgetPerType?: Partial<Record<MemoryType, number>>;
|
|
24
|
+
}
|
|
25
|
+
export interface AgentMemoryObservabilityConfig {
|
|
26
|
+
trace?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface AgentMemoryPrivacyConfig {
|
|
29
|
+
/** Metadata keys to strip before storing. Omit to use built-in defaults; set [] to allow all. */
|
|
30
|
+
forbiddenMetadataKeys?: string[];
|
|
31
|
+
/** If true, redact content that looks like secrets before storing (when implemented). */
|
|
32
|
+
redactSecrets?: boolean;
|
|
33
|
+
}
|
|
34
|
+
/** mem0ai Memory options (same shape as mem0ai/oss Memory config; can be in YAML) */
|
|
35
|
+
export interface Mem0Config {
|
|
36
|
+
version?: string;
|
|
37
|
+
embedder?: {
|
|
38
|
+
provider?: string;
|
|
39
|
+
config?: Record<string, unknown>;
|
|
40
|
+
};
|
|
41
|
+
vectorStore?: {
|
|
42
|
+
provider?: string;
|
|
43
|
+
config?: Record<string, unknown>;
|
|
44
|
+
};
|
|
45
|
+
llm?: {
|
|
46
|
+
provider?: string;
|
|
47
|
+
config?: Record<string, unknown>;
|
|
48
|
+
};
|
|
49
|
+
historyStore?: {
|
|
50
|
+
provider?: string;
|
|
51
|
+
config?: Record<string, unknown>;
|
|
52
|
+
};
|
|
53
|
+
historyDbPath?: string;
|
|
54
|
+
disableHistory?: boolean;
|
|
55
|
+
customPrompt?: string;
|
|
56
|
+
[key: string]: unknown;
|
|
57
|
+
}
|
|
58
|
+
/** VLM config for image→caption at index time (can be in YAML) */
|
|
59
|
+
export interface VlmConfig {
|
|
60
|
+
captionUrl?: string;
|
|
61
|
+
captionPrompt?: string;
|
|
62
|
+
timeoutMs?: number;
|
|
63
|
+
[key: string]: unknown;
|
|
64
|
+
}
|
|
65
|
+
export interface AgentMemoryConfig {
|
|
66
|
+
providers: AgentMemoryProviderConfig[];
|
|
67
|
+
router: AgentMemoryRouterConfig;
|
|
68
|
+
policy?: AgentMemoryPolicyConfig;
|
|
69
|
+
observability?: AgentMemoryObservabilityConfig;
|
|
70
|
+
privacy?: AgentMemoryPrivacyConfig;
|
|
71
|
+
mem0?: Mem0Config;
|
|
72
|
+
vlm?: VlmConfig;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Load config from YAML file; returns default if file not found.
|
|
76
|
+
*/
|
|
77
|
+
export declare function loadConfigFromYaml(configPath: string): Promise<AgentMemoryConfig>;
|
|
78
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnF;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,8BAA8B;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,iGAAiG;IACjG,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,yFAAyF;IACzF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qFAAqF;AACrF,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACnE,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACtE,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC9D,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,kEAAkE;AAClE,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,yBAAyB,EAAE,CAAC;IACvC,MAAM,EAAE,uBAAuB,CAAC;IAChC,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,aAAa,CAAC,EAAE,8BAA8B,CAAC;IAC/C,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAYD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CASvF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* YAML config types and loader. Config-driven; no use-case hardcoding.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadConfigFromYaml = loadConfigFromYaml;
|
|
7
|
+
const DEFAULT_CONFIG = {
|
|
8
|
+
providers: [{ id: "default", type: "in_memory" }],
|
|
9
|
+
router: { defaultProvider: "default", rules: [] },
|
|
10
|
+
policy: {},
|
|
11
|
+
observability: { trace: false },
|
|
12
|
+
privacy: {},
|
|
13
|
+
mem0: undefined,
|
|
14
|
+
vlm: undefined,
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Load config from YAML file; returns default if file not found.
|
|
18
|
+
*/
|
|
19
|
+
async function loadConfigFromYaml(configPath) {
|
|
20
|
+
const path = await import("node:path");
|
|
21
|
+
const { loadYamlFile } = await import("@easynet/agent-common");
|
|
22
|
+
const resolved = path.resolve(configPath);
|
|
23
|
+
const parsed = await loadYamlFile(resolved, {
|
|
24
|
+
substituteEnv: false,
|
|
25
|
+
});
|
|
26
|
+
if (!parsed)
|
|
27
|
+
return DEFAULT_CONFIG;
|
|
28
|
+
return mergeConfig(DEFAULT_CONFIG, parsed);
|
|
29
|
+
}
|
|
30
|
+
function mergeConfig(base, overrides) {
|
|
31
|
+
return {
|
|
32
|
+
providers: overrides.providers ?? base.providers,
|
|
33
|
+
router: overrides.router ?? base.router,
|
|
34
|
+
policy: { ...base.policy, ...overrides.policy },
|
|
35
|
+
observability: { ...base.observability, ...overrides.observability },
|
|
36
|
+
privacy: { ...base.privacy, ...overrides.privacy },
|
|
37
|
+
mem0: overrides.mem0 ?? base.mem0,
|
|
38
|
+
vlm: overrides.vlm ?? base.vlm,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":";AAAA;;GAEG;;AA8EH,gDASC;AAtBD,MAAM,cAAc,GAAsB;IACxC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACjD,MAAM,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;IACjD,MAAM,EAAE,EAAE;IACV,aAAa,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;IAC/B,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;CACf,CAAC;AAEF;;GAEG;AACI,KAAK,UAAU,kBAAkB,CAAC,UAAkB;IACzD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,YAAY,CAA6B,QAAQ,EAAE;QACtE,aAAa,EAAE,KAAK;KACrB,CAAC,CAAC;IACH,IAAI,CAAC,MAAM;QAAE,OAAO,cAAc,CAAC;IACnC,OAAO,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAClB,IAAuB,EACvB,SAAqC;IAErC,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;QAChD,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;QACvC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE;QAC/C,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,aAAa,EAAE;QACpE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE;QAClD,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;QACjC,GAAG,EAAE,SAAS,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG;KAC/B,CAAC;AACJ,CAAC"}
|