@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.
Files changed (298) hide show
  1. package/README.md +89 -224
  2. package/dist/src/core/agent-memory.d.ts +41 -0
  3. package/dist/src/core/agent-memory.d.ts.map +1 -0
  4. package/dist/src/core/agent-memory.js +127 -0
  5. package/dist/src/core/agent-memory.js.map +1 -0
  6. package/dist/src/core/config.d.ts +78 -0
  7. package/dist/src/core/config.d.ts.map +1 -0
  8. package/dist/src/core/config.js +41 -0
  9. package/dist/src/core/config.js.map +1 -0
  10. package/dist/src/core/observability.d.ts +22 -0
  11. package/dist/src/core/observability.d.ts.map +1 -0
  12. package/dist/src/core/observability.js +33 -0
  13. package/dist/src/core/observability.js.map +1 -0
  14. package/dist/src/core/policy.d.ts +47 -0
  15. package/dist/src/core/policy.d.ts.map +1 -0
  16. package/dist/src/core/policy.js +73 -0
  17. package/dist/src/core/policy.js.map +1 -0
  18. package/dist/src/core/privacy.d.ts +23 -0
  19. package/dist/src/core/privacy.d.ts.map +1 -0
  20. package/dist/src/core/privacy.js +45 -0
  21. package/dist/src/core/privacy.js.map +1 -0
  22. package/dist/src/core/router.d.ts +35 -0
  23. package/dist/src/core/router.d.ts.map +1 -0
  24. package/dist/src/core/router.js +86 -0
  25. package/dist/src/core/router.js.map +1 -0
  26. package/dist/src/core/types.d.ts +82 -0
  27. package/dist/src/core/types.d.ts.map +1 -0
  28. package/dist/src/core/types.js +7 -0
  29. package/dist/{adapters → src/core}/types.js.map +1 -1
  30. package/dist/src/create-agent-memory.d.ts +47 -0
  31. package/dist/src/create-agent-memory.d.ts.map +1 -0
  32. package/dist/src/create-agent-memory.js +148 -0
  33. package/dist/src/create-agent-memory.js.map +1 -0
  34. package/dist/src/index.d.ts +8 -0
  35. package/dist/src/index.d.ts.map +1 -0
  36. package/dist/src/index.js +13 -0
  37. package/dist/src/index.js.map +1 -0
  38. package/dist/src/ingest/pdf-ingest.d.ts +27 -0
  39. package/dist/src/ingest/pdf-ingest.d.ts.map +1 -0
  40. package/dist/src/ingest/pdf-ingest.js +89 -0
  41. package/dist/src/ingest/pdf-ingest.js.map +1 -0
  42. package/dist/src/ingest/url-ingest.d.ts +27 -0
  43. package/dist/src/ingest/url-ingest.d.ts.map +1 -0
  44. package/dist/src/ingest/url-ingest.js +301 -0
  45. package/dist/src/ingest/url-ingest.js.map +1 -0
  46. package/dist/src/integrations/deepagents-adapter.d.ts +42 -0
  47. package/dist/src/integrations/deepagents-adapter.d.ts.map +1 -0
  48. package/dist/src/integrations/deepagents-adapter.js +146 -0
  49. package/dist/src/integrations/deepagents-adapter.js.map +1 -0
  50. package/dist/src/integrations/langchain.d.ts +27 -0
  51. package/dist/src/integrations/langchain.d.ts.map +1 -0
  52. package/dist/src/integrations/langchain.js +28 -0
  53. package/dist/src/integrations/langchain.js.map +1 -0
  54. package/dist/src/integrations/langgraph.d.ts +23 -0
  55. package/dist/src/integrations/langgraph.d.ts.map +1 -0
  56. package/dist/src/integrations/langgraph.js +30 -0
  57. package/dist/src/integrations/langgraph.js.map +1 -0
  58. package/dist/src/providers/in-memory-store.d.ts +15 -0
  59. package/dist/src/providers/in-memory-store.d.ts.map +1 -0
  60. package/dist/src/providers/in-memory-store.js +62 -0
  61. package/dist/src/providers/in-memory-store.js.map +1 -0
  62. package/dist/src/providers/mem0-provider.d.ts +47 -0
  63. package/dist/src/providers/mem0-provider.d.ts.map +1 -0
  64. package/dist/src/providers/mem0-provider.js +99 -0
  65. package/dist/src/providers/mem0-provider.js.map +1 -0
  66. package/dist/src/providers/rag-provider.d.ts +27 -0
  67. package/dist/src/providers/rag-provider.d.ts.map +1 -0
  68. package/dist/src/providers/rag-provider.js +58 -0
  69. package/dist/src/providers/rag-provider.js.map +1 -0
  70. package/dist/src/providers/sqlite-store.d.ts +21 -0
  71. package/dist/src/providers/sqlite-store.d.ts.map +1 -0
  72. package/dist/src/providers/sqlite-store.js +142 -0
  73. package/dist/src/providers/sqlite-store.js.map +1 -0
  74. package/dist/test/core/agent-memory.test.d.ts +2 -0
  75. package/dist/test/core/agent-memory.test.d.ts.map +1 -0
  76. package/dist/test/core/agent-memory.test.js +119 -0
  77. package/dist/test/core/agent-memory.test.js.map +1 -0
  78. package/dist/test/core/config.test.d.ts +2 -0
  79. package/dist/test/core/config.test.d.ts.map +1 -0
  80. package/dist/test/core/config.test.js +48 -0
  81. package/dist/test/core/config.test.js.map +1 -0
  82. package/dist/test/core/observability.test.d.ts +2 -0
  83. package/dist/test/core/observability.test.d.ts.map +1 -0
  84. package/dist/test/core/observability.test.js +53 -0
  85. package/dist/test/core/observability.test.js.map +1 -0
  86. package/dist/test/core/policy.test.d.ts +2 -0
  87. package/dist/test/core/policy.test.d.ts.map +1 -0
  88. package/dist/test/core/policy.test.js +42 -0
  89. package/dist/test/core/policy.test.js.map +1 -0
  90. package/dist/test/core/privacy.test.d.ts +2 -0
  91. package/dist/test/core/privacy.test.d.ts.map +1 -0
  92. package/dist/test/core/privacy.test.js +44 -0
  93. package/dist/test/core/privacy.test.js.map +1 -0
  94. package/dist/test/core/router.test.d.ts +2 -0
  95. package/dist/test/core/router.test.d.ts.map +1 -0
  96. package/dist/test/core/router.test.js +118 -0
  97. package/dist/test/core/router.test.js.map +1 -0
  98. package/dist/test/create-agent-memory.test.d.ts +2 -0
  99. package/dist/test/create-agent-memory.test.d.ts.map +1 -0
  100. package/dist/test/create-agent-memory.test.js +122 -0
  101. package/dist/test/create-agent-memory.test.js.map +1 -0
  102. package/dist/test/ingest/url-ingest.test.d.ts +2 -0
  103. package/dist/test/ingest/url-ingest.test.d.ts.map +1 -0
  104. package/dist/test/ingest/url-ingest.test.js +142 -0
  105. package/dist/test/ingest/url-ingest.test.js.map +1 -0
  106. package/dist/test/integration/agent-memory-flow.test.d.ts +5 -0
  107. package/dist/test/integration/agent-memory-flow.test.d.ts.map +1 -0
  108. package/dist/test/integration/agent-memory-flow.test.js +80 -0
  109. package/dist/test/integration/agent-memory-flow.test.js.map +1 -0
  110. package/dist/test/integration/helpers/ollama-live.d.ts +16 -0
  111. package/dist/test/integration/helpers/ollama-live.d.ts.map +1 -0
  112. package/dist/test/integration/helpers/ollama-live.js +101 -0
  113. package/dist/test/integration/helpers/ollama-live.js.map +1 -0
  114. package/dist/test/integration/url-ingest-flow.test.d.ts +5 -0
  115. package/dist/test/integration/url-ingest-flow.test.d.ts.map +1 -0
  116. package/dist/test/integration/url-ingest-flow.test.js +50 -0
  117. package/dist/test/integration/url-ingest-flow.test.js.map +1 -0
  118. package/dist/test/integration/vlm-llm-live.test.d.ts +9 -0
  119. package/dist/test/integration/vlm-llm-live.test.d.ts.map +1 -0
  120. package/dist/test/integration/vlm-llm-live.test.js +141 -0
  121. package/dist/test/integration/vlm-llm-live.test.js.map +1 -0
  122. package/dist/test/providers/in-memory-store.test.d.ts +2 -0
  123. package/dist/test/providers/in-memory-store.test.d.ts.map +1 -0
  124. package/dist/test/providers/in-memory-store.test.js +44 -0
  125. package/dist/test/providers/in-memory-store.test.js.map +1 -0
  126. package/dist/test/providers/rag-provider.test.d.ts +2 -0
  127. package/dist/test/providers/rag-provider.test.d.ts.map +1 -0
  128. package/dist/test/providers/rag-provider.test.js +113 -0
  129. package/dist/test/providers/rag-provider.test.js.map +1 -0
  130. package/dist/test/providers/sqlite-store.test.d.ts +2 -0
  131. package/dist/test/providers/sqlite-store.test.d.ts.map +1 -0
  132. package/dist/test/providers/sqlite-store.test.js +119 -0
  133. package/dist/test/providers/sqlite-store.test.js.map +1 -0
  134. package/package.json +79 -39
  135. package/bin/chat +0 -11
  136. package/dist/adapters/index.d.ts +0 -8
  137. package/dist/adapters/index.d.ts.map +0 -1
  138. package/dist/adapters/index.js +0 -29
  139. package/dist/adapters/index.js.map +0 -1
  140. package/dist/adapters/mem0/mem0-store.d.ts +0 -29
  141. package/dist/adapters/mem0/mem0-store.d.ts.map +0 -1
  142. package/dist/adapters/mem0/mem0-store.js +0 -174
  143. package/dist/adapters/mem0/mem0-store.js.map +0 -1
  144. package/dist/adapters/rag-http/rag-http-retriever.d.ts +0 -18
  145. package/dist/adapters/rag-http/rag-http-retriever.d.ts.map +0 -1
  146. package/dist/adapters/rag-http/rag-http-retriever.js +0 -71
  147. package/dist/adapters/rag-http/rag-http-retriever.js.map +0 -1
  148. package/dist/adapters/types.d.ts +0 -25
  149. package/dist/adapters/types.d.ts.map +0 -1
  150. package/dist/adapters/types.js +0 -6
  151. package/dist/boot/boot-rebuilder.d.ts +0 -26
  152. package/dist/boot/boot-rebuilder.d.ts.map +0 -1
  153. package/dist/boot/boot-rebuilder.js +0 -112
  154. package/dist/boot/boot-rebuilder.js.map +0 -1
  155. package/dist/boot/index.d.ts +0 -3
  156. package/dist/boot/index.d.ts.map +0 -1
  157. package/dist/boot/index.js +0 -6
  158. package/dist/boot/index.js.map +0 -1
  159. package/dist/cli/chat-split.d.ts +0 -22
  160. package/dist/cli/chat-split.d.ts.map +0 -1
  161. package/dist/cli/chat-split.js +0 -187
  162. package/dist/cli/chat-split.js.map +0 -1
  163. package/dist/cli/chat.d.ts +0 -19
  164. package/dist/cli/chat.d.ts.map +0 -1
  165. package/dist/cli/chat.js +0 -266
  166. package/dist/cli/chat.js.map +0 -1
  167. package/dist/cli/commands/command-handler.d.ts +0 -32
  168. package/dist/cli/commands/command-handler.d.ts.map +0 -1
  169. package/dist/cli/commands/command-handler.js +0 -143
  170. package/dist/cli/commands/command-handler.js.map +0 -1
  171. package/dist/cli/index.d.ts +0 -3
  172. package/dist/cli/index.d.ts.map +0 -1
  173. package/dist/cli/index.js +0 -8
  174. package/dist/cli/index.js.map +0 -1
  175. package/dist/cli/ui/display-manager.d.ts +0 -18
  176. package/dist/cli/ui/display-manager.d.ts.map +0 -1
  177. package/dist/cli/ui/display-manager.js +0 -69
  178. package/dist/cli/ui/display-manager.js.map +0 -1
  179. package/dist/cli/ui/screen-layout.d.ts +0 -12
  180. package/dist/cli/ui/screen-layout.d.ts.map +0 -1
  181. package/dist/cli/ui/screen-layout.js +0 -125
  182. package/dist/cli/ui/screen-layout.js.map +0 -1
  183. package/dist/config/index.d.ts +0 -2
  184. package/dist/config/index.d.ts.map +0 -1
  185. package/dist/config/index.js +0 -6
  186. package/dist/config/index.js.map +0 -1
  187. package/dist/config/loader.d.ts +0 -9
  188. package/dist/config/loader.d.ts.map +0 -1
  189. package/dist/config/loader.js +0 -107
  190. package/dist/config/loader.js.map +0 -1
  191. package/dist/context/context-builder.d.ts +0 -18
  192. package/dist/context/context-builder.d.ts.map +0 -1
  193. package/dist/context/context-builder.js +0 -91
  194. package/dist/context/context-builder.js.map +0 -1
  195. package/dist/core/agent-memory.d.ts +0 -50
  196. package/dist/core/agent-memory.d.ts.map +0 -1
  197. package/dist/core/agent-memory.js +0 -297
  198. package/dist/core/agent-memory.js.map +0 -1
  199. package/dist/embedding/embedder.d.ts +0 -49
  200. package/dist/embedding/embedder.d.ts.map +0 -1
  201. package/dist/embedding/embedder.js +0 -146
  202. package/dist/embedding/embedder.js.map +0 -1
  203. package/dist/embedding/index.d.ts +0 -3
  204. package/dist/embedding/index.d.ts.map +0 -1
  205. package/dist/embedding/index.js +0 -8
  206. package/dist/embedding/index.js.map +0 -1
  207. package/dist/gate/deduplicator.d.ts +0 -22
  208. package/dist/gate/deduplicator.d.ts.map +0 -1
  209. package/dist/gate/deduplicator.js +0 -74
  210. package/dist/gate/deduplicator.js.map +0 -1
  211. package/dist/gate/extractor.d.ts +0 -33
  212. package/dist/gate/extractor.d.ts.map +0 -1
  213. package/dist/gate/extractor.js +0 -122
  214. package/dist/gate/extractor.js.map +0 -1
  215. package/dist/gate/index.d.ts +0 -3
  216. package/dist/gate/index.d.ts.map +0 -1
  217. package/dist/gate/index.js +0 -6
  218. package/dist/gate/index.js.map +0 -1
  219. package/dist/gate/memory-gate.d.ts +0 -27
  220. package/dist/gate/memory-gate.d.ts.map +0 -1
  221. package/dist/gate/memory-gate.js +0 -86
  222. package/dist/gate/memory-gate.js.map +0 -1
  223. package/dist/gate/redactor.d.ts +0 -14
  224. package/dist/gate/redactor.d.ts.map +0 -1
  225. package/dist/gate/redactor.js +0 -24
  226. package/dist/gate/redactor.js.map +0 -1
  227. package/dist/index.d.ts +0 -6
  228. package/dist/index.d.ts.map +0 -1
  229. package/dist/index.js +0 -24
  230. package/dist/index.js.map +0 -1
  231. package/dist/indexing/in-memory-index.d.ts +0 -67
  232. package/dist/indexing/in-memory-index.d.ts.map +0 -1
  233. package/dist/indexing/in-memory-index.js +0 -135
  234. package/dist/indexing/in-memory-index.js.map +0 -1
  235. package/dist/indexing/index.d.ts +0 -3
  236. package/dist/indexing/index.d.ts.map +0 -1
  237. package/dist/indexing/index.js +0 -6
  238. package/dist/indexing/index.js.map +0 -1
  239. package/dist/persistence/database/schema.d.ts +0 -6
  240. package/dist/persistence/database/schema.d.ts.map +0 -1
  241. package/dist/persistence/database/schema.js +0 -75
  242. package/dist/persistence/database/schema.js.map +0 -1
  243. package/dist/persistence/index.d.ts +0 -3
  244. package/dist/persistence/index.d.ts.map +0 -1
  245. package/dist/persistence/index.js +0 -6
  246. package/dist/persistence/index.js.map +0 -1
  247. package/dist/persistence/repository/embedding-operations.d.ts +0 -17
  248. package/dist/persistence/repository/embedding-operations.d.ts.map +0 -1
  249. package/dist/persistence/repository/embedding-operations.js +0 -58
  250. package/dist/persistence/repository/embedding-operations.js.map +0 -1
  251. package/dist/persistence/repository/memory-operations.d.ts +0 -28
  252. package/dist/persistence/repository/memory-operations.d.ts.map +0 -1
  253. package/dist/persistence/repository/memory-operations.js +0 -87
  254. package/dist/persistence/repository/memory-operations.js.map +0 -1
  255. package/dist/persistence/repository/meta-operations.d.ts +0 -15
  256. package/dist/persistence/repository/meta-operations.d.ts.map +0 -1
  257. package/dist/persistence/repository/meta-operations.js +0 -20
  258. package/dist/persistence/repository/meta-operations.js.map +0 -1
  259. package/dist/persistence/sqlite-repo.d.ts +0 -58
  260. package/dist/persistence/sqlite-repo.d.ts.map +0 -1
  261. package/dist/persistence/sqlite-repo.js +0 -81
  262. package/dist/persistence/sqlite-repo.js.map +0 -1
  263. package/dist/persistence/utils/hash.d.ts +0 -8
  264. package/dist/persistence/utils/hash.d.ts.map +0 -1
  265. package/dist/persistence/utils/hash.js +0 -48
  266. package/dist/persistence/utils/hash.js.map +0 -1
  267. package/dist/persistence/utils/serialization.d.ts +0 -33
  268. package/dist/persistence/utils/serialization.d.ts.map +0 -1
  269. package/dist/persistence/utils/serialization.js +0 -85
  270. package/dist/persistence/utils/serialization.js.map +0 -1
  271. package/dist/processing/document/document-processor.d.ts +0 -30
  272. package/dist/processing/document/document-processor.d.ts.map +0 -1
  273. package/dist/processing/document/document-processor.js +0 -158
  274. package/dist/processing/document/document-processor.js.map +0 -1
  275. package/dist/processing/document/index.d.ts +0 -3
  276. package/dist/processing/document/index.d.ts.map +0 -1
  277. package/dist/processing/document/index.js +0 -6
  278. package/dist/processing/document/index.js.map +0 -1
  279. package/dist/ranker/ranker.d.ts +0 -26
  280. package/dist/ranker/ranker.d.ts.map +0 -1
  281. package/dist/ranker/ranker.js +0 -40
  282. package/dist/ranker/ranker.js.map +0 -1
  283. package/dist/recall/recall-engine.d.ts +0 -19
  284. package/dist/recall/recall-engine.d.ts.map +0 -1
  285. package/dist/recall/recall-engine.js +0 -79
  286. package/dist/recall/recall-engine.js.map +0 -1
  287. package/dist/types/config.d.ts +0 -821
  288. package/dist/types/config.d.ts.map +0 -1
  289. package/dist/types/config.js +0 -128
  290. package/dist/types/config.js.map +0 -1
  291. package/dist/types/document.d.ts +0 -37
  292. package/dist/types/document.d.ts.map +0 -1
  293. package/dist/types/document.js +0 -6
  294. package/dist/types/document.js.map +0 -1
  295. package/dist/types/index.d.ts +0 -86
  296. package/dist/types/index.d.ts.map +0 -1
  297. package/dist/types/index.js +0 -6
  298. package/dist/types/index.js.map +0 -1
package/README.md CHANGED
@@ -1,260 +1,125 @@
1
1
  # agent-memory
2
2
 
3
- 一个简单易用的 Agent 记忆管理 SDK,支持长期记忆存储、文档记忆和多模态文档处理。
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
- ```bash
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
- - **双模式支持**:Platform API 模式 In-Memory 模式(SQLite + 向量索引)
49
- - ✅ **文档记忆**:支持文本、PDF、图片、Markdown、HTML、代码等多种文档类型
50
- - **多模态支持**:图片OCR文本、PDF分页、代码文档等
51
- - **自动分块**:大文档自动分块,支持重叠窗口
52
- - **MemoryGate**:脱敏、抽取、过滤、去重
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
- - `text` - 纯文本
61
- - `pdf` - PDF文档(支持分页)
62
- - `image` - 图片(支持OCR文本)
63
- - `markdown` - Markdown文档
64
- - `html` - HTML文档
65
- - `code` - 代码文件
21
+ ## Quick start
66
22
 
67
- ```typescript
68
- // 记忆PDF文档(自动分块)
69
- await am.rememberDocument({
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
- 详细文档请参考 [docs/DOCUMENT_MEMORY.md](./docs/DOCUMENT_MEMORY.md)
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
- ### 1. Platform 模式(Mem0 Platform API)
32
+ ```ts
33
+ import { createAgentMemory } from "@easynet/agent-memory";
126
34
 
127
- 使用 Mem0 Platform 作为后端:
35
+ const memory = await createAgentMemory();
128
36
 
129
- ```yaml
130
- store:
131
- mem0:
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
- ### 2. In-Memory 模式(本地SQLite + 向量索引)
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
- embedding:
151
- provider: ollama
152
- model: embedding-gemma:latest
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
- ## API
156
-
157
- ### remember()
51
+ **LangChain Agent** (inject memory before calling LLM; write memory after each turn):
158
52
 
159
- 记忆对话或文本:
160
-
161
- ```typescript
162
- await am.remember({
163
- messages: [{ role: "user", content: "..." }],
164
- //
165
- text: "...",
166
- actor: { id: "U123", type: "user" },
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
- ### rememberDocument()
173
-
174
- 记忆文档(支持多模态):
175
-
176
- ```typescript
177
- await am.rememberDocument({
178
- document: DocumentChunk | DocumentChunk[],
179
- actor?: Actor,
180
- scope?: Scope,
181
- autoChunk?: boolean,
182
- chunkSize?: number,
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
- ### recall()
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
- test-configs/ # 测试配置文件
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
- - 所有文件不超过 500
230
- - 文件命名使用 kebab-case
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
- - `examples/basic-usage.ts` - 基本用法
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
- ## License
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"}