@easynet/agent-memory 0.0.2 → 1.0.0

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 +22 -0
  35. package/dist/src/index.d.ts.map +1 -0
  36. package/dist/src/index.js +51 -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
@@ -0,0 +1,15 @@
1
+ /**
2
+ * In-memory cross-thread store: namespace-scoped MemoryItems.
3
+ * Suitable for dev and single-process; use SQLite/Postgres for production.
4
+ */
5
+ import type { MemoryItem, MemoryProvider, MemoryQueryRequest, MemoryWriteRequest } from "../core/types.js";
6
+ export declare class InMemoryStoreProvider implements MemoryProvider {
7
+ private store;
8
+ private key;
9
+ write(req: MemoryWriteRequest): Promise<MemoryItem>;
10
+ query(req: MemoryQueryRequest): Promise<MemoryItem[]>;
11
+ delete(id: string, namespace: string): Promise<void>;
12
+ getByKey(namespace: string, key: string): Promise<MemoryItem | null>;
13
+ deleteByKey(namespace: string, key: string): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=in-memory-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-store.d.ts","sourceRoot":"","sources":["../../../src/providers/in-memory-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAG1B,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,OAAO,CAAC,KAAK,CAAiC;IAE9C,OAAO,CAAC,GAAG;IAIL,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAmBnD,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAYrD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQpE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIjE"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * In-memory cross-thread store: namespace-scoped MemoryItems.
4
+ * Suitable for dev and single-process; use SQLite/Postgres for production.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.InMemoryStoreProvider = void 0;
8
+ const node_crypto_1 = require("node:crypto");
9
+ class InMemoryStoreProvider {
10
+ store = new Map();
11
+ key(id, namespace) {
12
+ return `${namespace}:${id}`;
13
+ }
14
+ async write(req) {
15
+ const now = new Date().toISOString();
16
+ const id = (0, node_crypto_1.randomUUID)();
17
+ const item = {
18
+ id,
19
+ type: req.type,
20
+ namespace: req.namespace,
21
+ scope: req.scope ?? "global",
22
+ content: req.content,
23
+ metadata: {
24
+ ...req.metadata,
25
+ created_at: req.metadata?.created_at ?? now,
26
+ updated_at: now,
27
+ },
28
+ };
29
+ this.store.set(this.key(id, req.namespace), item);
30
+ return item;
31
+ }
32
+ async query(req) {
33
+ const prefix = req.namespace + ":";
34
+ const items = [];
35
+ for (const [k, v] of this.store) {
36
+ if (!k.startsWith(prefix))
37
+ continue;
38
+ if (req.types && !req.types.includes(v.type))
39
+ continue;
40
+ items.push(v);
41
+ }
42
+ const topK = req.topK ?? 10;
43
+ return items.slice(0, topK);
44
+ }
45
+ async delete(id, namespace) {
46
+ this.store.delete(this.key(id, namespace));
47
+ }
48
+ async getByKey(namespace, key) {
49
+ for (const [, v] of this.store) {
50
+ if (v.namespace === namespace && v.metadata?.path === key)
51
+ return v;
52
+ }
53
+ return null;
54
+ }
55
+ async deleteByKey(namespace, key) {
56
+ const item = await this.getByKey(namespace, key);
57
+ if (item)
58
+ this.store.delete(this.key(item.id, namespace));
59
+ }
60
+ }
61
+ exports.InMemoryStoreProvider = InMemoryStoreProvider;
62
+ //# sourceMappingURL=in-memory-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-store.js","sourceRoot":"","sources":["../../../src/providers/in-memory-store.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAQH,6CAAyC;AAEzC,MAAa,qBAAqB;IACxB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEtC,GAAG,CAAC,EAAU,EAAE,SAAiB;QACvC,OAAO,GAAG,SAAS,IAAI,EAAE,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAuB;QACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAA,wBAAU,GAAE,CAAC;QACxB,MAAM,IAAI,GAAe;YACvB,EAAE;YACF,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,QAAQ;YAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE;gBACR,GAAG,GAAG,CAAC,QAAQ;gBACf,UAAU,EAAG,GAAG,CAAC,QAAQ,EAAE,UAAqB,IAAI,GAAG;gBACvD,UAAU,EAAE,GAAG;aAChB;SACF,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAuB;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;QACnC,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YACpC,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,SAAS;YACvD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,SAAiB;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,GAAW;QAC3C,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAK,CAAC,CAAC,QAAQ,EAAE,IAAe,KAAK,GAAG;gBACnE,OAAO,CAAC,CAAC;QACb,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,GAAW;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACjD,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC;CACF;AAtDD,sDAsDC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Mem0 provider: wraps mem0ai (OSS) as a MemoryProvider.
3
+ * Use with an initialized Memory instance from mem0ai/oss.
4
+ */
5
+ import type { MemoryItem, MemoryProvider, MemoryQueryRequest, MemoryWriteRequest } from "../core/types.js";
6
+ /** Simplified mem0ai Memory interface (avoids hard dependency). */
7
+ export interface Mem0MemoryLike {
8
+ add(messages: Array<{
9
+ role: string;
10
+ content: string;
11
+ }>, options?: {
12
+ userId?: string;
13
+ metadata?: Record<string, unknown>;
14
+ }): Promise<unknown>;
15
+ search(query: string, options?: {
16
+ userId?: string;
17
+ limit?: number;
18
+ metadata?: Record<string, unknown>;
19
+ }): Promise<{
20
+ results: Array<{
21
+ id: string;
22
+ memory: string;
23
+ score?: number;
24
+ metadata?: Record<string, unknown>;
25
+ userId?: string;
26
+ }>;
27
+ }>;
28
+ delete(memoryId: string): Promise<unknown>;
29
+ deleteAll?(options?: {
30
+ userId?: string;
31
+ }): Promise<unknown>;
32
+ }
33
+ export interface Mem0ProviderOptions {
34
+ memory: Mem0MemoryLike;
35
+ /** Map agent-memory namespace to mem0 userId; default: namespace as-is */
36
+ namespaceToUserId?: (namespace: string) => string;
37
+ }
38
+ export declare class Mem0Provider implements MemoryProvider {
39
+ private mem0;
40
+ private namespaceToUserId;
41
+ constructor(options: Mem0ProviderOptions);
42
+ write(req: MemoryWriteRequest): Promise<MemoryItem>;
43
+ query(req: MemoryQueryRequest): Promise<MemoryItem[]>;
44
+ delete(id: string, _namespace: string): Promise<void>;
45
+ deleteAllForNamespace(namespace: string): Promise<void>;
46
+ }
47
+ //# sourceMappingURL=mem0-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mem0-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/mem0-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAE1B,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC7B,GAAG,CACD,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAClD,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAChE,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAChF,OAAO,CAAC;QACT,OAAO,EAAE,KAAK,CAAC;YACb,EAAE,EAAE,MAAM,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,cAAc,CAAC;IACvB,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AAID,qBAAa,YAAa,YAAW,cAAc;IACjD,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,iBAAiB,CAAgC;gBAE7C,OAAO,EAAE,mBAAmB;IAUlC,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IA+CnD,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAwBrD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM9D"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ /**
3
+ * Mem0 provider: wraps mem0ai (OSS) as a MemoryProvider.
4
+ * Use with an initialized Memory instance from mem0ai/oss.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.Mem0Provider = void 0;
8
+ const defaultNamespaceToUserId = (namespace) => namespace;
9
+ class Mem0Provider {
10
+ mem0;
11
+ namespaceToUserId;
12
+ constructor(options) {
13
+ if (!options.memory) {
14
+ throw new Error("Mem0Provider requires options.memory (Memory instance from mem0ai/oss). Install: pnpm add mem0ai");
15
+ }
16
+ this.mem0 = options.memory;
17
+ this.namespaceToUserId = options.namespaceToUserId ?? defaultNamespaceToUserId;
18
+ }
19
+ async write(req) {
20
+ const userId = this.namespaceToUserId(req.namespace);
21
+ const messages = [{ role: "user", content: req.content }];
22
+ await this.mem0.add(messages, {
23
+ userId,
24
+ metadata: {
25
+ ...req.metadata,
26
+ type: req.type,
27
+ scope: req.scope,
28
+ },
29
+ });
30
+ const search = await this.mem0.search(req.content, {
31
+ userId,
32
+ limit: 1,
33
+ });
34
+ const first = search.results?.[0];
35
+ const now = new Date().toISOString();
36
+ if (first) {
37
+ return {
38
+ id: first.id,
39
+ type: req.type,
40
+ namespace: req.namespace,
41
+ scope: req.scope ?? "global",
42
+ content: first.memory,
43
+ metadata: {
44
+ ...req.metadata,
45
+ ...first.metadata,
46
+ created_at: now,
47
+ updated_at: now,
48
+ },
49
+ };
50
+ }
51
+ const id = `mem0-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
52
+ return {
53
+ id,
54
+ type: req.type,
55
+ namespace: req.namespace,
56
+ scope: req.scope ?? "global",
57
+ content: req.content,
58
+ metadata: {
59
+ ...req.metadata,
60
+ created_at: now,
61
+ updated_at: now,
62
+ },
63
+ };
64
+ }
65
+ async query(req) {
66
+ const userId = this.namespaceToUserId(req.namespace);
67
+ const limit = req.topK ?? 10;
68
+ const search = await this.mem0.search(req.query, {
69
+ userId,
70
+ limit,
71
+ metadata: req.filters,
72
+ });
73
+ const results = search.results ?? [];
74
+ const now = new Date().toISOString();
75
+ return results.map((r) => ({
76
+ id: r.id,
77
+ type: r.metadata?.type ?? "cross_thread",
78
+ namespace: req.namespace,
79
+ scope: "global",
80
+ content: r.memory,
81
+ metadata: {
82
+ ...r.metadata,
83
+ created_at: now,
84
+ updated_at: now,
85
+ },
86
+ }));
87
+ }
88
+ async delete(id, _namespace) {
89
+ await this.mem0.delete(id);
90
+ }
91
+ async deleteAllForNamespace(namespace) {
92
+ const userId = this.namespaceToUserId(namespace);
93
+ if (typeof this.mem0.deleteAll === "function") {
94
+ await this.mem0.deleteAll({ userId });
95
+ }
96
+ }
97
+ }
98
+ exports.Mem0Provider = Mem0Provider;
99
+ //# sourceMappingURL=mem0-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mem0-provider.js","sourceRoot":"","sources":["../../../src/providers/mem0-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * RAG provider: vector store + chunking.
3
+ * Implementations can use Qdrant, PGVector, Weaviate, or in-memory vectors.
4
+ */
5
+ import type { MemoryItem, MemoryProvider, MemoryQueryRequest, MemoryWriteRequest } from "../core/types.js";
6
+ export interface RAGProviderOptions {
7
+ /** Optional embedding function; if not provided, no embedding is stored. */
8
+ embed?(text: string): Promise<number[]>;
9
+ /** Optional similarity search; if not provided, fallback to keyword/filter only. */
10
+ search?(namespace: string, query: string, topK: number, filters?: Record<string, unknown>): Promise<Array<{
11
+ item: MemoryItem;
12
+ score: number;
13
+ }>>;
14
+ }
15
+ /**
16
+ * RAG provider that stores knowledge-type items and supports semantic (or keyword) query.
17
+ */
18
+ export declare class RAGProvider implements MemoryProvider {
19
+ private items;
20
+ private embed?;
21
+ private search?;
22
+ constructor(options?: RAGProviderOptions);
23
+ write(req: MemoryWriteRequest): Promise<MemoryItem>;
24
+ query(req: MemoryQueryRequest): Promise<MemoryItem[]>;
25
+ delete(id: string, namespace: string): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=rag-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/rag-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,oFAAoF;IACpF,MAAM,CAAC,CACL,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CACxD;AAED;;GAEG;AACH,qBAAa,WAAY,YAAW,cAAc;IAChD,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,KAAK,CAAC,CAAsC;IACpD,OAAO,CAAC,MAAM,CAAC,CAA+B;gBAElC,OAAO,GAAE,kBAAuB;IAKtC,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAyBnD,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAmBrD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK3D"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * RAG provider: vector store + chunking.
4
+ * Implementations can use Qdrant, PGVector, Weaviate, or in-memory vectors.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.RAGProvider = void 0;
8
+ /**
9
+ * RAG provider that stores knowledge-type items and supports semantic (or keyword) query.
10
+ */
11
+ class RAGProvider {
12
+ items = [];
13
+ embed;
14
+ search;
15
+ constructor(options = {}) {
16
+ this.embed = options.embed;
17
+ this.search = options.search;
18
+ }
19
+ async write(req) {
20
+ const { randomUUID } = await import("node:crypto");
21
+ const now = new Date().toISOString();
22
+ const id = randomUUID();
23
+ let embedding;
24
+ if (this.embed) {
25
+ embedding = await this.embed(req.content);
26
+ }
27
+ const item = {
28
+ id,
29
+ type: req.type,
30
+ namespace: req.namespace,
31
+ scope: req.scope ?? "global",
32
+ content: req.content,
33
+ embedding,
34
+ metadata: {
35
+ ...req.metadata,
36
+ created_at: req.metadata?.created_at ?? now,
37
+ updated_at: now,
38
+ },
39
+ };
40
+ this.items.push(item);
41
+ return item;
42
+ }
43
+ async query(req) {
44
+ const topK = req.topK ?? 8;
45
+ const types = req.types ?? ["knowledge"];
46
+ const inNamespace = this.items.filter((i) => i.namespace === req.namespace && types.includes(i.type));
47
+ if (this.search) {
48
+ const results = await this.search(req.namespace, req.query, topK, req.filters);
49
+ return results.map((r) => r.item).slice(0, topK);
50
+ }
51
+ return inNamespace.slice(0, topK);
52
+ }
53
+ async delete(id, namespace) {
54
+ this.items = this.items.filter((i) => !(i.id === id && i.namespace === namespace));
55
+ }
56
+ }
57
+ exports.RAGProvider = RAGProvider;
58
+ //# sourceMappingURL=rag-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-provider.js","sourceRoot":"","sources":["../../../src/providers/rag-provider.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAqBH;;GAEG;AACH,MAAa,WAAW;IACd,KAAK,GAAiB,EAAE,CAAC;IACzB,KAAK,CAAuC;IAC5C,MAAM,CAAgC;IAE9C,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAuB;QACjC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,IAAI,SAA+B,CAAC;QACpC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,IAAI,GAAe;YACvB,EAAE;YACF,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,QAAQ;YAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS;YACT,QAAQ,EAAE;gBACR,GAAG,GAAG,CAAC,QAAQ;gBACf,UAAU,EAAG,GAAG,CAAC,QAAQ,EAAE,UAAqB,IAAI,GAAG;gBACvD,UAAU,EAAE,GAAG;aAChB;SACF,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAuB;QACjC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAC1D,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAC/B,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,KAAK,EACT,IAAI,EACJ,GAAG,CAAC,OAAO,CACZ,CAAC;YACF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,SAAiB;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CACnD,CAAC;IACJ,CAAC;CACF;AA3DD,kCA2DC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * SQLite backend: persist MemoryItems; optional vector search via embed.
3
+ * Requires better-sqlite3.
4
+ */
5
+ import type { MemoryItem, MemoryProvider, MemoryQueryRequest, MemoryWriteRequest } from "../core/types.js";
6
+ export interface SqliteStoreOptions {
7
+ dbPath: string;
8
+ /** Optional: embed for vector storage and similarity ranking */
9
+ embed?: (text: string) => Promise<number[]>;
10
+ }
11
+ export declare class SqliteStoreProvider implements MemoryProvider {
12
+ private db;
13
+ private embed?;
14
+ constructor(options: SqliteStoreOptions);
15
+ write(req: MemoryWriteRequest): Promise<MemoryItem>;
16
+ query(req: MemoryQueryRequest): Promise<MemoryItem[]>;
17
+ delete(id: string, namespace: string): Promise<void>;
18
+ getByKey(namespace: string, key: string): Promise<MemoryItem | null>;
19
+ deleteByKey(namespace: string, key: string): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=sqlite-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../../src/providers/sqlite-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,UAAU,EAEV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAiB1B,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC7C;AA6DD,qBAAa,mBAAoB,YAAW,cAAc;IACxD,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,KAAK,CAAC,CAAsC;gBAExC,OAAO,EAAE,kBAAkB;IAMjC,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8BnD,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAkCrD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAOpE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGjE"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ /**
3
+ * SQLite backend: persist MemoryItems; optional vector search via embed.
4
+ * Requires better-sqlite3.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SqliteStoreProvider = void 0;
8
+ const node_crypto_1 = require("node:crypto");
9
+ function cosineSimilarity(a, b) {
10
+ if (a.length !== b.length || a.length === 0)
11
+ return 0;
12
+ let dot = 0;
13
+ let normA = 0;
14
+ let normB = 0;
15
+ for (let i = 0; i < a.length; i++) {
16
+ dot += a[i] * b[i];
17
+ normA += a[i] * a[i];
18
+ normB += b[i] * b[i];
19
+ }
20
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
21
+ return denom === 0 ? 0 : dot / denom;
22
+ }
23
+ function getDatabase(dbPath) {
24
+ try {
25
+ const Database = require("better-sqlite3");
26
+ return new Database(dbPath);
27
+ }
28
+ catch {
29
+ throw new Error("SqliteStoreProvider requires 'better-sqlite3'. Install: pnpm add better-sqlite3");
30
+ }
31
+ }
32
+ const TABLE = "memory_items";
33
+ function initTable(db) {
34
+ db.exec(`
35
+ CREATE TABLE IF NOT EXISTS ${TABLE} (
36
+ id TEXT PRIMARY KEY,
37
+ namespace TEXT NOT NULL,
38
+ type TEXT NOT NULL,
39
+ scope TEXT NOT NULL,
40
+ content TEXT NOT NULL,
41
+ embedding_json TEXT,
42
+ metadata_json TEXT NOT NULL,
43
+ created_at TEXT NOT NULL,
44
+ updated_at TEXT NOT NULL,
45
+ path_key TEXT
46
+ )
47
+ `);
48
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_${TABLE}_namespace ON ${TABLE}(namespace)`);
49
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_${TABLE}_path ON ${TABLE}(namespace, path_key)`);
50
+ }
51
+ function rowToItem(row) {
52
+ const metadata = (typeof row.metadata_json === "string"
53
+ ? JSON.parse(row.metadata_json)
54
+ : row.metadata_json);
55
+ const embedding = typeof row.embedding_json === "string" && row.embedding_json
56
+ ? JSON.parse(row.embedding_json)
57
+ : undefined;
58
+ return {
59
+ id: row.id,
60
+ type: row.type,
61
+ namespace: row.namespace,
62
+ scope: row.scope,
63
+ content: row.content,
64
+ embedding,
65
+ metadata,
66
+ };
67
+ }
68
+ class SqliteStoreProvider {
69
+ db;
70
+ embed;
71
+ constructor(options) {
72
+ this.db = getDatabase(options.dbPath);
73
+ this.embed = options.embed;
74
+ initTable(this.db);
75
+ }
76
+ async write(req) {
77
+ const now = new Date().toISOString();
78
+ const id = (0, node_crypto_1.randomUUID)();
79
+ const metadata = {
80
+ ...req.metadata,
81
+ created_at: req.metadata?.created_at ?? now,
82
+ updated_at: now,
83
+ };
84
+ const pathKey = req.metadata?.path ?? null;
85
+ let embeddingJson = null;
86
+ if (this.embed) {
87
+ const vec = await this.embed(req.content);
88
+ embeddingJson = JSON.stringify(vec);
89
+ }
90
+ const metadataJson = JSON.stringify(metadata);
91
+ const stmt = this.db.prepare(`INSERT INTO ${TABLE} (id, namespace, type, scope, content, embedding_json, metadata_json, created_at, updated_at, path_key) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
92
+ stmt.run(id, req.namespace, req.type, req.scope ?? "global", req.content, embeddingJson, metadataJson, now, now, pathKey);
93
+ return {
94
+ id,
95
+ type: req.type,
96
+ namespace: req.namespace,
97
+ scope: req.scope ?? "global",
98
+ content: req.content,
99
+ embedding: this.embed ? await this.embed(req.content) : undefined,
100
+ metadata,
101
+ };
102
+ }
103
+ async query(req) {
104
+ const topK = req.topK ?? 10;
105
+ const typesFilter = req.types?.length
106
+ ? ` AND type IN (${req.types.map(() => "?").join(",")})`
107
+ : "";
108
+ const args = [req.namespace];
109
+ if (req.types?.length)
110
+ args.push(...req.types);
111
+ if (this.embed && req.query.trim()) {
112
+ const queryVec = await this.embed(req.query);
113
+ const rows = this.db.prepare(`SELECT * FROM ${TABLE} WHERE namespace = ?${typesFilter}`).all(...args);
114
+ const withScores = rows
115
+ .map((row) => {
116
+ const item = rowToItem(row);
117
+ const vec = typeof row.embedding_json === "string" && row.embedding_json
118
+ ? JSON.parse(row.embedding_json)
119
+ : null;
120
+ const score = vec ? cosineSimilarity(queryVec, vec) : 0;
121
+ return { item, score };
122
+ })
123
+ .sort((a, b) => b.score - a.score)
124
+ .slice(0, topK);
125
+ return withScores.map((x) => x.item);
126
+ }
127
+ const rows = this.db.prepare(`SELECT * FROM ${TABLE} WHERE namespace = ?${typesFilter} ORDER BY updated_at DESC LIMIT ?`).all(...args, topK);
128
+ return rows.map(rowToItem);
129
+ }
130
+ async delete(id, namespace) {
131
+ this.db.prepare(`DELETE FROM ${TABLE} WHERE id = ? AND namespace = ?`).run(id, namespace);
132
+ }
133
+ async getByKey(namespace, key) {
134
+ const row = this.db.prepare(`SELECT * FROM ${TABLE} WHERE namespace = ? AND path_key = ? LIMIT 1`).get(namespace, key);
135
+ return row ? rowToItem(row) : null;
136
+ }
137
+ async deleteByKey(namespace, key) {
138
+ this.db.prepare(`DELETE FROM ${TABLE} WHERE namespace = ? AND path_key = ?`).run(namespace, key);
139
+ }
140
+ }
141
+ exports.SqliteStoreProvider = SqliteStoreProvider;
142
+ //# sourceMappingURL=sqlite-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../../../src/providers/sqlite-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-memory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-memory.test.d.ts","sourceRoot":"","sources":["../../../test/core/agent-memory.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_test_1 = require("node:test");
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");
12
+ class TestMemoryProvider {
13
+ store = new Map();
14
+ async write(req) {
15
+ const now = new Date().toISOString();
16
+ const item = {
17
+ id: (0, node_crypto_1.randomUUID)(),
18
+ type: req.type,
19
+ namespace: req.namespace,
20
+ scope: req.scope ?? "global",
21
+ content: req.content,
22
+ metadata: { ...req.metadata, created_at: now, updated_at: now },
23
+ };
24
+ this.store.set(`${req.namespace}:${item.id}`, item);
25
+ return item;
26
+ }
27
+ async query(req) {
28
+ const items = [...this.store.values()].filter((i) => i.namespace === req.namespace);
29
+ return items.slice(0, req.topK ?? 10);
30
+ }
31
+ async delete(id, namespace) {
32
+ this.store.delete(`${namespace}:${id}`);
33
+ }
34
+ }
35
+ (0, node_test_1.describe)("AgentMemory", () => {
36
+ (0, node_test_1.it)("write and retrieveForPrompt", async () => {
37
+ const provider = new TestMemoryProvider();
38
+ const router = new router_js_1.MemoryRouter({
39
+ providers: new Map([["default", provider]]),
40
+ defaultProviderId: "default",
41
+ });
42
+ const tracer = new observability_js_1.InMemoryTraceRecorder();
43
+ const memory = new agent_memory_js_1.AgentMemory({
44
+ router,
45
+ traceRecorder: tracer,
46
+ });
47
+ await memory.write({
48
+ namespace: "user:1",
49
+ type: "cross_thread",
50
+ content: "Use Chinese and summarize at the end.",
51
+ });
52
+ const result = await memory.retrieveForPrompt({
53
+ namespace: "user:1",
54
+ query: "user preferences and cross-session memory",
55
+ topK: 5,
56
+ });
57
+ node_assert_1.default.strictEqual(result.items.length, 1);
58
+ node_assert_1.default.strictEqual(result.items[0].content, "Use Chinese and summarize at the end.");
59
+ node_assert_1.default.ok(result.traceId);
60
+ node_assert_1.default.ok(result.injectedText.includes("cross_thread"));
61
+ node_assert_1.default.strictEqual(tracer.getTraces().length, 1);
62
+ });
63
+ (0, node_test_1.it)("memorize without type defaults to cross_thread", async () => {
64
+ const provider = new TestMemoryProvider();
65
+ const router = new router_js_1.MemoryRouter({
66
+ providers: new Map([["default", provider]]),
67
+ defaultProviderId: "default",
68
+ });
69
+ const memory = new agent_memory_js_1.AgentMemory({ router });
70
+ const item = await memory.memorize({
71
+ namespace: "user:1",
72
+ content: "I prefer dark mode.",
73
+ });
74
+ node_assert_1.default.strictEqual(item.type, "cross_thread");
75
+ node_assert_1.default.strictEqual(item.content, "I prefer dark mode.");
76
+ });
77
+ (0, node_test_1.it)("memorize with classifyMemory uses callback for type", async () => {
78
+ const provider = new TestMemoryProvider();
79
+ const router = new router_js_1.MemoryRouter({
80
+ providers: new Map([["default", provider]]),
81
+ defaultProviderId: "default",
82
+ });
83
+ const memory = new agent_memory_js_1.AgentMemory({
84
+ router,
85
+ classifyMemory: async (content) => (content.length > 20 ? "knowledge" : "thread"),
86
+ });
87
+ const item1 = await memory.memorize({ namespace: "ns", content: "short" });
88
+ node_assert_1.default.strictEqual(item1.type, "thread");
89
+ const item2 = await memory.memorize({ namespace: "ns", content: "this is a longer content piece" });
90
+ node_assert_1.default.strictEqual(item2.type, "knowledge");
91
+ });
92
+ (0, node_test_1.it)("deleteByNamespace", async () => {
93
+ const provider = new TestMemoryProvider();
94
+ const router = new router_js_1.MemoryRouter({
95
+ providers: new Map([["default", provider]]),
96
+ defaultProviderId: "default",
97
+ });
98
+ const memory = new agent_memory_js_1.AgentMemory({ router });
99
+ await memory.write({
100
+ namespace: "user:2",
101
+ type: "cross_thread",
102
+ content: "Chose option A.",
103
+ });
104
+ const before = await memory.retrieveForPrompt({
105
+ namespace: "user:2",
106
+ query: "any",
107
+ topK: 5,
108
+ });
109
+ node_assert_1.default.strictEqual(before.items.length, 1);
110
+ await memory.deleteByNamespace("user:2");
111
+ const after = await memory.retrieveForPrompt({
112
+ namespace: "user:2",
113
+ query: "any",
114
+ topK: 5,
115
+ });
116
+ node_assert_1.default.strictEqual(after.items.length, 0);
117
+ });
118
+ });
119
+ //# sourceMappingURL=agent-memory.test.js.map