@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
@@ -0,0 +1,118 @@
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 router_js_1 = require("../../src/core/router.js");
9
+ const node_crypto_1 = require("node:crypto");
10
+ function makeProvider(id) {
11
+ const store = new Map();
12
+ return {
13
+ async write(req) {
14
+ const item = {
15
+ id: (0, node_crypto_1.randomUUID)(),
16
+ type: req.type,
17
+ namespace: req.namespace,
18
+ scope: req.scope ?? "global",
19
+ content: req.content,
20
+ metadata: { ...req.metadata, created_at: new Date().toISOString(), updated_at: new Date().toISOString() },
21
+ };
22
+ store.set(item.id, item);
23
+ return item;
24
+ },
25
+ async query(req) {
26
+ return [...store.values()].filter((i) => i.namespace === req.namespace).slice(0, req.topK ?? 10);
27
+ },
28
+ async delete(id, namespace) {
29
+ for (const [k, v] of store) {
30
+ if (v.id === id && v.namespace === namespace)
31
+ store.delete(k);
32
+ }
33
+ },
34
+ };
35
+ }
36
+ (0, node_test_1.describe)("MemoryRouter", () => {
37
+ (0, node_test_1.it)("routeWrite uses defaultProvider when no rules match", () => {
38
+ const defaultP = makeProvider("default");
39
+ const router = new router_js_1.MemoryRouter({
40
+ providers: new Map([["default", defaultP]]),
41
+ defaultProviderId: "default",
42
+ rules: [],
43
+ });
44
+ const ids = router.routeWrite({
45
+ namespace: "user:1",
46
+ type: "knowledge",
47
+ content: "x",
48
+ });
49
+ node_assert_1.default.deepStrictEqual(ids, ["default"]);
50
+ });
51
+ (0, node_test_1.it)("routeWrite matches rule by type and routes to provider", () => {
52
+ const defaultP = makeProvider("default");
53
+ const ragP = makeProvider("rag");
54
+ const router = new router_js_1.MemoryRouter({
55
+ providers: new Map([
56
+ ["default", defaultP],
57
+ ["rag", ragP],
58
+ ]),
59
+ defaultProviderId: "default",
60
+ rules: [
61
+ { types: ["knowledge"], providerId: "rag" },
62
+ { types: ["cross_thread"], providerId: "mem0" },
63
+ ],
64
+ });
65
+ const idsKnowledge = router.routeWrite({
66
+ namespace: "ns",
67
+ type: "knowledge",
68
+ content: "doc",
69
+ });
70
+ node_assert_1.default.deepStrictEqual(idsKnowledge, ["rag"]);
71
+ const idsCrossThread = router.routeWrite({
72
+ namespace: "ns",
73
+ type: "cross_thread",
74
+ content: "pref",
75
+ });
76
+ node_assert_1.default.deepStrictEqual(idsCrossThread, ["mem0"]);
77
+ });
78
+ (0, node_test_1.it)("routeQuery matches rule by req.types", () => {
79
+ const defaultP = makeProvider("default");
80
+ const ragP = makeProvider("rag");
81
+ const router = new router_js_1.MemoryRouter({
82
+ providers: new Map([
83
+ ["default", defaultP],
84
+ ["rag", ragP],
85
+ ]),
86
+ defaultProviderId: "default",
87
+ rules: [{ types: ["knowledge"], providerId: "rag" }],
88
+ });
89
+ const ids = router.routeQuery({
90
+ namespace: "ns",
91
+ query: "q",
92
+ types: ["knowledge"],
93
+ });
94
+ node_assert_1.default.deepStrictEqual(ids, ["rag"]);
95
+ });
96
+ (0, node_test_1.it)("write and query flow", async () => {
97
+ const defaultP = makeProvider("default");
98
+ const router = new router_js_1.MemoryRouter({
99
+ providers: new Map([["default", defaultP]]),
100
+ defaultProviderId: "default",
101
+ });
102
+ const item = await router.write({
103
+ namespace: "user:1",
104
+ type: "cross_thread",
105
+ content: "hello",
106
+ });
107
+ node_assert_1.default.ok(item.id);
108
+ node_assert_1.default.strictEqual(item.content, "hello");
109
+ const items = await router.query({
110
+ namespace: "user:1",
111
+ query: "any",
112
+ topK: 5,
113
+ });
114
+ node_assert_1.default.strictEqual(items.length, 1);
115
+ node_assert_1.default.strictEqual(items[0].content, "hello");
116
+ });
117
+ });
118
+ //# sourceMappingURL=router.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.test.js","sourceRoot":"","sources":["../../../test/core/router.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=create-agent-memory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-agent-memory.test.d.ts","sourceRoot":"","sources":["../../test/create-agent-memory.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,122 @@
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 node_path_1 = require("node:path");
9
+ const promises_1 = require("node:fs/promises");
10
+ const node_os_1 = require("node:os");
11
+ const node_crypto_1 = require("node:crypto");
12
+ const create_agent_memory_js_1 = require("../src/create-agent-memory.js");
13
+ (0, node_test_1.describe)("createAgentMemory", () => {
14
+ (0, node_test_1.it)("memorize with content and type delegates to core memory", async () => {
15
+ const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
16
+ config: {
17
+ providers: [{ id: "default", type: "in_memory" }],
18
+ router: { defaultProvider: "default", rules: [] },
19
+ },
20
+ });
21
+ const item = await memory.memorize({
22
+ namespace: "user:1",
23
+ type: "cross_thread",
24
+ content: "User likes cats.",
25
+ });
26
+ node_assert_1.default.ok(item.id);
27
+ node_assert_1.default.strictEqual(item.content, "User likes cats.");
28
+ node_assert_1.default.strictEqual(item.type, "cross_thread");
29
+ const result = await memory.recall({
30
+ namespace: "user:1",
31
+ query: "cats",
32
+ topK: 5,
33
+ });
34
+ node_assert_1.default.strictEqual(result.items.length, 1);
35
+ });
36
+ (0, node_test_1.it)("memorize with url ingests file and stores chunks", async () => {
37
+ const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `ingest-wrapper-${(0, node_crypto_1.randomUUID)()}`);
38
+ await (0, promises_1.mkdir)(dir, { recursive: true });
39
+ const filePath = (0, node_path_1.join)(dir, "note.txt");
40
+ await (0, promises_1.writeFile)(filePath, "Chunk one.\n\nChunk two.", "utf-8");
41
+ const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
42
+ config: {
43
+ providers: [{ id: "default", type: "in_memory" }],
44
+ router: { defaultProvider: "default", rules: [] },
45
+ },
46
+ });
47
+ try {
48
+ const item = await memory.memorize({
49
+ namespace: "test",
50
+ url: filePath,
51
+ });
52
+ node_assert_1.default.ok(item.id);
53
+ node_assert_1.default.strictEqual(item.type, "knowledge");
54
+ const result = await memory.recall({
55
+ namespace: "test",
56
+ query: "Chunk",
57
+ topK: 10,
58
+ });
59
+ node_assert_1.default.ok(result.items.length >= 1);
60
+ }
61
+ finally {
62
+ await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
63
+ }
64
+ });
65
+ (0, node_test_1.it)("memorize without url and without content throws", async () => {
66
+ const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
67
+ config: {
68
+ providers: [{ id: "default", type: "in_memory" }],
69
+ router: { defaultProvider: "default", rules: [] },
70
+ },
71
+ });
72
+ await node_assert_1.default.rejects(() => memory.memorize({ namespace: "test" }), /memorize requires url or content/);
73
+ });
74
+ (0, node_test_1.it)("write (deprecated) delegates to extended memorize", async () => {
75
+ const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
76
+ config: {
77
+ providers: [{ id: "default", type: "in_memory" }],
78
+ router: { defaultProvider: "default", rules: [] },
79
+ },
80
+ });
81
+ const item = await memory.write({
82
+ namespace: "user:1",
83
+ type: "cross_thread",
84
+ content: "Written via write.",
85
+ });
86
+ node_assert_1.default.ok(item.id);
87
+ node_assert_1.default.strictEqual(item.content, "Written via write.");
88
+ const result = await memory.retrieveForPrompt({
89
+ namespace: "user:1",
90
+ query: "any",
91
+ topK: 5,
92
+ });
93
+ node_assert_1.default.strictEqual(result.items.length, 1);
94
+ });
95
+ (0, node_test_1.it)("recall and retrieveForPrompt delegate to underlying memory", async () => {
96
+ const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
97
+ config: {
98
+ providers: [{ id: "default", type: "in_memory" }],
99
+ router: { defaultProvider: "default", rules: [] },
100
+ },
101
+ });
102
+ await memory.memorize({
103
+ namespace: "ns",
104
+ type: "knowledge",
105
+ content: "Delegation test.",
106
+ });
107
+ const recallResult = await memory.recall({
108
+ namespace: "ns",
109
+ query: "Delegation",
110
+ topK: 5,
111
+ });
112
+ node_assert_1.default.strictEqual(recallResult.items.length, 1);
113
+ const promptResult = await memory.retrieveForPrompt({
114
+ namespace: "ns",
115
+ query: "test",
116
+ topK: 5,
117
+ });
118
+ node_assert_1.default.strictEqual(promptResult.items.length, 1);
119
+ node_assert_1.default.ok(promptResult.traceId);
120
+ });
121
+ });
122
+ //# sourceMappingURL=create-agent-memory.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-agent-memory.test.js","sourceRoot":"","sources":["../../test/create-agent-memory.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=url-ingest.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-ingest.test.d.ts","sourceRoot":"","sources":["../../../test/ingest/url-ingest.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,142 @@
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 node_path_1 = require("node:path");
9
+ const promises_1 = require("node:fs/promises");
10
+ const node_os_1 = require("node:os");
11
+ const node_crypto_1 = require("node:crypto");
12
+ const agent_memory_js_1 = require("../../src/core/agent-memory.js");
13
+ const router_js_1 = require("../../src/core/router.js");
14
+ const in_memory_store_js_1 = require("../../src/providers/in-memory-store.js");
15
+ const url_ingest_js_1 = require("../../src/ingest/url-ingest.js");
16
+ function makeTestMemory() {
17
+ const provider = new in_memory_store_js_1.InMemoryStoreProvider();
18
+ const router = new router_js_1.MemoryRouter({
19
+ providers: new Map([["default", provider]]),
20
+ defaultProviderId: "default",
21
+ });
22
+ return new agent_memory_js_1.AgentMemory({ router });
23
+ }
24
+ (0, node_test_1.describe)("ingestUrlToMemory", () => {
25
+ (0, node_test_1.it)("ingests local txt file and memorizes chunks", async () => {
26
+ const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-ingest-${(0, node_crypto_1.randomUUID)()}`);
27
+ await (0, promises_1.mkdir)(dir, { recursive: true });
28
+ const filePath = (0, node_path_1.join)(dir, "doc.txt");
29
+ const content = "First paragraph.\n\nSecond paragraph.\n\nThird.";
30
+ await (0, promises_1.writeFile)(filePath, content, "utf-8");
31
+ const memory = makeTestMemory();
32
+ try {
33
+ const { count, firstItem } = await (0, url_ingest_js_1.ingestUrlToMemory)(memory, {
34
+ url: filePath,
35
+ namespace: "test",
36
+ chunkSize: 50,
37
+ });
38
+ node_assert_1.default.ok(count >= 1);
39
+ node_assert_1.default.ok(firstItem?.id);
40
+ node_assert_1.default.strictEqual(firstItem?.type, "knowledge");
41
+ const result = await memory.recall({
42
+ namespace: "test",
43
+ query: "paragraph",
44
+ topK: 10,
45
+ });
46
+ node_assert_1.default.ok(result.items.length >= 1);
47
+ }
48
+ finally {
49
+ await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
50
+ }
51
+ });
52
+ (0, node_test_1.it)("ingests HTML and strips tags", async () => {
53
+ const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-html-${(0, node_crypto_1.randomUUID)()}`);
54
+ await (0, promises_1.mkdir)(dir, { recursive: true });
55
+ const filePath = (0, node_path_1.join)(dir, "page.html");
56
+ await (0, promises_1.writeFile)(filePath, "<html><body><script>ignore</script><p>Visible text</p></body></html>", "utf-8");
57
+ const memory = makeTestMemory();
58
+ try {
59
+ const { count, firstItem } = await (0, url_ingest_js_1.ingestUrlToMemory)(memory, {
60
+ url: filePath,
61
+ namespace: "test",
62
+ chunkSize: 500,
63
+ });
64
+ node_assert_1.default.ok(count >= 1);
65
+ node_assert_1.default.ok(firstItem);
66
+ const result = await memory.recall({
67
+ namespace: "test",
68
+ query: "Visible",
69
+ topK: 5,
70
+ });
71
+ node_assert_1.default.strictEqual(result.items.length, 1);
72
+ node_assert_1.default.ok(result.items[0].content.includes("Visible text"));
73
+ node_assert_1.default.ok(!result.items[0].content.includes("<script>"));
74
+ }
75
+ finally {
76
+ await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
77
+ }
78
+ });
79
+ (0, node_test_1.it)("uses captionFn for image when provided", async () => {
80
+ const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-img-${(0, node_crypto_1.randomUUID)()}`);
81
+ await (0, promises_1.mkdir)(dir, { recursive: true });
82
+ const filePath = (0, node_path_1.join)(dir, "fake.png");
83
+ await (0, promises_1.writeFile)(filePath, "not a real png", "utf-8");
84
+ const memory = makeTestMemory();
85
+ const captionFn = async (_buffer) => "Caption for image";
86
+ try {
87
+ const { count, firstItem } = await (0, url_ingest_js_1.ingestUrlToMemory)(memory, {
88
+ url: filePath,
89
+ namespace: "test",
90
+ captionFn,
91
+ chunkSize: 500,
92
+ });
93
+ node_assert_1.default.ok(count >= 1);
94
+ node_assert_1.default.strictEqual(firstItem?.content, "Caption for image");
95
+ }
96
+ finally {
97
+ await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
98
+ }
99
+ });
100
+ (0, node_test_1.it)("uses placeholder when image and no captionFn", async () => {
101
+ const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-img2-${(0, node_crypto_1.randomUUID)()}`);
102
+ await (0, promises_1.mkdir)(dir, { recursive: true });
103
+ const filePath = (0, node_path_1.join)(dir, "x.png");
104
+ await (0, promises_1.writeFile)(filePath, "x", "utf-8");
105
+ const memory = makeTestMemory();
106
+ try {
107
+ const { count, firstItem } = await (0, url_ingest_js_1.ingestUrlToMemory)(memory, {
108
+ url: filePath,
109
+ namespace: "test",
110
+ chunkSize: 500,
111
+ });
112
+ node_assert_1.default.ok(count >= 1);
113
+ node_assert_1.default.ok(firstItem?.content.startsWith("(image:"));
114
+ }
115
+ finally {
116
+ await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
117
+ }
118
+ });
119
+ (0, node_test_1.it)("detects image by magic bytes when path has no extension (e.g. upload temp file)", async () => {
120
+ const dir = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `agent-memory-img3-${(0, node_crypto_1.randomUUID)()}`);
121
+ await (0, promises_1.mkdir)(dir, { recursive: true });
122
+ const minimalPng = Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==", "base64");
123
+ const filePath = (0, node_path_1.join)(dir, "upload-temp-no-ext");
124
+ await (0, promises_1.writeFile)(filePath, minimalPng);
125
+ const captionFn = async (_buffer) => "Caption for image";
126
+ const memory = makeTestMemory();
127
+ try {
128
+ const { count, firstItem } = await (0, url_ingest_js_1.ingestUrlToMemory)(memory, {
129
+ url: filePath,
130
+ namespace: "test",
131
+ chunkSize: 500,
132
+ captionFn,
133
+ });
134
+ node_assert_1.default.strictEqual(count, 1, "image should produce exactly one caption, not many chunks");
135
+ node_assert_1.default.strictEqual(firstItem?.content, "Caption for image");
136
+ }
137
+ finally {
138
+ await (0, promises_1.rm)(dir, { recursive: true, force: true }).catch(() => { });
139
+ }
140
+ });
141
+ });
142
+ //# sourceMappingURL=url-ingest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-ingest.test.js","sourceRoot":"","sources":["../../../test/ingest/url-ingest.test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAyC;AACzC,8DAAiC;AACjC,yCAAiC;AACjC,+CAAwD;AACxD,qCAAiC;AACjC,6CAAyC;AACzC,oEAA6D;AAC7D,wDAAwD;AAExD,+EAA+E;AAC/E,kEAAmE;AAEnE,SAAS,cAAc;IACrB,MAAM,QAAQ,GAAmB,IAAI,0CAAqB,EAAE,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,wBAAY,CAAC;QAC9B,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC3C,iBAAiB,EAAE,SAAS;KAC7B,CAAC,CAAC;IACH,OAAO,IAAI,6BAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,IAAA,oBAAQ,EAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAA,cAAE,EAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,GAAG,GAAG,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,uBAAuB,IAAA,wBAAU,GAAE,EAAE,CAAC,CAAC;QAClE,MAAM,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,iDAAiD,CAAC;QAClE,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,iCAAiB,EAAC,MAAM,EAAE;gBAC3D,GAAG,EAAE,QAAQ;gBACb,SAAS,EAAE,MAAM;gBACjB,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;YACH,qBAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YACtB,qBAAM,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACzB,qBAAM,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;gBACjC,SAAS,EAAE,MAAM;gBACjB,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,EAAE;aACT,CAAC,CAAC;YACH,qBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;gBAAS,CAAC;YACT,MAAM,IAAA,aAAE,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,GAAG,GAAG,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,qBAAqB,IAAA,wBAAU,GAAE,EAAE,CAAC,CAAC;QAChE,MAAM,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACxC,MAAM,IAAA,oBAAS,EACb,QAAQ,EACR,sEAAsE,EACtE,OAAO,CACR,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,iCAAiB,EAAC,MAAM,EAAE;gBAC3D,GAAG,EAAE,QAAQ;gBACb,SAAS,EAAE,MAAM;gBACjB,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;YACH,qBAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YACtB,qBAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;gBACjC,SAAS,EAAE,MAAM;gBACjB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,CAAC;aACR,CAAC,CAAC;YACH,qBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC3C,qBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5D,qBAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3D,CAAC;gBAAS,CAAC;YACT,MAAM,IAAA,aAAE,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,GAAG,GAAG,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,oBAAoB,IAAA,wBAAU,GAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACvC,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,KAAK,EAAE,OAAe,EAAmB,EAAE,CAAC,mBAAmB,CAAC;QAClF,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,iCAAiB,EAAC,MAAM,EAAE;gBAC3D,GAAG,EAAE,QAAQ;gBACb,SAAS,EAAE,MAAM;gBACjB,SAAS;gBACT,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;YACH,qBAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YACtB,qBAAM,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAC9D,CAAC;gBAAS,CAAC;YACT,MAAM,IAAA,aAAE,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,GAAG,GAAG,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,qBAAqB,IAAA,wBAAU,GAAE,EAAE,CAAC,CAAC;QAChE,MAAM,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,iCAAiB,EAAC,MAAM,EAAE;gBAC3D,GAAG,EAAE,QAAQ;gBACb,SAAS,EAAE,MAAM;gBACjB,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;YACH,qBAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YACtB,qBAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,CAAC;gBAAS,CAAC;YACT,MAAM,IAAA,aAAE,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,GAAG,GAAG,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,qBAAqB,IAAA,wBAAU,GAAE,EAAE,CAAC,CAAC;QAChE,MAAM,IAAA,gBAAK,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAC5B,kGAAkG,EAClG,QAAQ,CACT,CAAC;QACF,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;QACjD,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,KAAK,EAAE,OAAe,EAAmB,EAAE,CAAC,mBAAmB,CAAC;QAClF,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,iCAAiB,EAAC,MAAM,EAAE;gBAC3D,GAAG,EAAE,QAAQ;gBACb,SAAS,EAAE,MAAM;gBACjB,SAAS,EAAE,GAAG;gBACd,SAAS;aACV,CAAC,CAAC;YACH,qBAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,2DAA2D,CAAC,CAAC;YAC1F,qBAAM,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAC9D,CAAC;gBAAS,CAAC;YACT,MAAM,IAAA,aAAE,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Integration tests: full createAgentMemory → memorize → recall flow.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=agent-memory-flow.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-memory-flow.test.d.ts","sourceRoot":"","sources":["../../../test/integration/agent-memory-flow.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ /**
3
+ * Integration tests: full createAgentMemory → memorize → recall flow.
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const node_test_1 = require("node:test");
10
+ const node_assert_1 = __importDefault(require("node:assert"));
11
+ const create_agent_memory_js_1 = require("../../src/create-agent-memory.js");
12
+ (0, node_test_1.describe)("createAgentMemory integration", () => {
13
+ (0, node_test_1.it)("createAgentMemory with config: memorize and recall", async () => {
14
+ const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
15
+ config: {
16
+ providers: [{ id: "default", type: "in_memory" }],
17
+ router: { defaultProvider: "default", rules: [] },
18
+ },
19
+ });
20
+ const item = await memory.memorize({
21
+ namespace: "user:1",
22
+ type: "cross_thread",
23
+ content: "User prefers dark mode.",
24
+ });
25
+ node_assert_1.default.ok(item.id);
26
+ node_assert_1.default.strictEqual(item.content, "User prefers dark mode.");
27
+ node_assert_1.default.strictEqual(item.type, "cross_thread");
28
+ const result = await memory.recall({
29
+ namespace: "user:1",
30
+ query: "user preferences",
31
+ topK: 5,
32
+ });
33
+ node_assert_1.default.strictEqual(result.items.length, 1);
34
+ node_assert_1.default.strictEqual(result.items[0].content, "User prefers dark mode.");
35
+ });
36
+ (0, node_test_1.it)("retrieveForPrompt returns formatted items", async () => {
37
+ const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
38
+ config: {
39
+ providers: [{ id: "default", type: "in_memory" }],
40
+ router: { defaultProvider: "default", rules: [] },
41
+ },
42
+ });
43
+ await memory.memorize({
44
+ namespace: "user:1",
45
+ type: "knowledge",
46
+ content: "API docs: GET /users returns list.",
47
+ });
48
+ const result = await memory.retrieveForPrompt({
49
+ namespace: "user:1",
50
+ query: "API",
51
+ topK: 5,
52
+ });
53
+ node_assert_1.default.ok(result.traceId);
54
+ node_assert_1.default.ok(result.injectedText.includes("knowledge"));
55
+ node_assert_1.default.strictEqual(result.items.length, 1);
56
+ node_assert_1.default.strictEqual(result.items[0].content, "API docs: GET /users returns list.");
57
+ });
58
+ (0, node_test_1.it)("write (deprecated) and recall", async () => {
59
+ const memory = await (0, create_agent_memory_js_1.createAgentMemory)({
60
+ config: {
61
+ providers: [{ id: "default", type: "in_memory" }],
62
+ router: { defaultProvider: "default", rules: [] },
63
+ },
64
+ });
65
+ const item = await memory.write({
66
+ namespace: "user:1",
67
+ type: "cross_thread",
68
+ content: "Legacy write.",
69
+ });
70
+ node_assert_1.default.ok(item.id);
71
+ const result = await memory.recall({
72
+ namespace: "user:1",
73
+ query: "any",
74
+ topK: 5,
75
+ });
76
+ node_assert_1.default.strictEqual(result.items.length, 1);
77
+ node_assert_1.default.strictEqual(result.items[0].content, "Legacy write.");
78
+ });
79
+ });
80
+ //# sourceMappingURL=agent-memory-flow.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-memory-flow.test.js","sourceRoot":"","sources":["../../../test/integration/agent-memory-flow.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Helpers for live integration tests: call real Ollama VLM (caption) and LLM (classify).
3
+ * Used only when RUN_LIVE_INTEGRATION=1; no use-case hardcoding.
4
+ */
5
+ import type { MemoryType } from "../../../src/core/types.js";
6
+ /**
7
+ * Create a captionFn that calls the given Ollama VLM with the image buffer.
8
+ * Uses /api/chat with images (recommended for vision models like qwen3-vl).
9
+ */
10
+ export declare function createOllamaCaptionFn(vlmBaseUrl: string, model: string, prompt?: string): (buffer: Buffer) => Promise<string>;
11
+ /**
12
+ * Create a classifyMemory callback that calls the given Ollama LLM to infer
13
+ * memory type (thread / cross_thread / knowledge). Returns one of the allowed types.
14
+ */
15
+ export declare function createOllamaClassifyMemoryFn(llmBaseUrl: string, model: string): (content: string, _metadata?: Record<string, unknown>) => Promise<MemoryType>;
16
+ //# sourceMappingURL=ollama-live.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama-live.d.ts","sourceRoot":"","sources":["../../../../test/integration/helpers/ollama-live.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAyF7D;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAqD,GAC5D,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAQrC;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAgB/E"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ /**
3
+ * Helpers for live integration tests: call real Ollama VLM (caption) and LLM (classify).
4
+ * Used only when RUN_LIVE_INTEGRATION=1; no use-case hardcoding.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createOllamaCaptionFn = createOllamaCaptionFn;
8
+ exports.createOllamaClassifyMemoryFn = createOllamaClassifyMemoryFn;
9
+ const MEMORY_TYPES = ["thread", "cross_thread", "knowledge"];
10
+ /** Normalize base URL (no trailing slash) for fetch. */
11
+ function baseUrl(url) {
12
+ return url.replace(/\/+$/, "") || url;
13
+ }
14
+ /**
15
+ * Call Ollama /api/generate with optional images; return full response text.
16
+ * Uses stream: false so we get a single JSON with "response".
17
+ */
18
+ async function ollamaGenerate(baseUrlStr, model, prompt, options = {}) {
19
+ const url = `${baseUrl(baseUrlStr)}/api/generate`;
20
+ const body = {
21
+ model,
22
+ prompt,
23
+ stream: false,
24
+ };
25
+ if (options.images?.length)
26
+ body.images = options.images;
27
+ if (options.system)
28
+ body.system = options.system;
29
+ const res = await fetch(url, {
30
+ method: "POST",
31
+ headers: { "Content-Type": "application/json" },
32
+ body: JSON.stringify(body),
33
+ });
34
+ if (!res.ok) {
35
+ const text = await res.text();
36
+ throw new Error(`Ollama generate failed ${res.status}: ${text}`);
37
+ }
38
+ const data = (await res.json());
39
+ const text = data.response ?? "";
40
+ return text.trim();
41
+ }
42
+ /**
43
+ * Call Ollama /api/chat with images (vision); return assistant message content.
44
+ * Some VLMs work more reliably with chat than generate.
45
+ */
46
+ async function ollamaChatWithImage(baseUrlStr, model, userPrompt, imagesBase64) {
47
+ const url = `${baseUrl(baseUrlStr)}/api/chat`;
48
+ const body = {
49
+ model,
50
+ stream: false,
51
+ messages: [{ role: "user", content: userPrompt }],
52
+ images: imagesBase64,
53
+ };
54
+ const res = await fetch(url, {
55
+ method: "POST",
56
+ headers: { "Content-Type": "application/json" },
57
+ body: JSON.stringify(body),
58
+ });
59
+ if (!res.ok) {
60
+ const text = await res.text();
61
+ throw new Error(`Ollama chat failed ${res.status}: ${text}`);
62
+ }
63
+ const data = (await res.json());
64
+ const text = data.message?.content ?? "";
65
+ return text.trim();
66
+ }
67
+ /**
68
+ * Create a captionFn that calls the given Ollama VLM with the image buffer.
69
+ * Uses /api/chat with images (recommended for vision models like qwen3-vl).
70
+ */
71
+ function createOllamaCaptionFn(vlmBaseUrl, model, prompt = "Describe this image in one short sentence.") {
72
+ return async (buffer) => {
73
+ const base64 = buffer.toString("base64");
74
+ const caption = await ollamaChatWithImage(vlmBaseUrl, model, prompt, [
75
+ base64,
76
+ ]);
77
+ return caption || "(no caption)";
78
+ };
79
+ }
80
+ /**
81
+ * Create a classifyMemory callback that calls the given Ollama LLM to infer
82
+ * memory type (thread / cross_thread / knowledge). Returns one of the allowed types.
83
+ */
84
+ function createOllamaClassifyMemoryFn(llmBaseUrl, model) {
85
+ const systemPrompt = `You classify memory content into exactly one word: thread, cross_thread, or knowledge.
86
+ - thread: session-specific, ephemeral.
87
+ - cross_thread: user preferences, facts, cross-session.
88
+ - knowledge: documentation, APIs, long-lived reference.
89
+ Reply with only that one word, nothing else.`;
90
+ return async (content) => {
91
+ const prompt = `Classify this memory:\n\n${content.slice(0, 500)}`;
92
+ const raw = await ollamaGenerate(llmBaseUrl, model, prompt, {
93
+ system: systemPrompt,
94
+ });
95
+ const word = raw.toLowerCase().replace(/\s+/g, " ").trim().split(/\s/)[0];
96
+ if (MEMORY_TYPES.includes(word))
97
+ return word;
98
+ return "cross_thread";
99
+ };
100
+ }
101
+ //# sourceMappingURL=ollama-live.js.map