@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,22 @@
1
+ /**
2
+ * Observability: trace every retrieve, record hits, tokens, latency, backend distribution.
3
+ */
4
+ import type { MemoryTrace, MemoryType } from "./types.js";
5
+ export interface TraceRecorder {
6
+ record(trace: MemoryTrace): void | Promise<void>;
7
+ }
8
+ export declare class InMemoryTraceRecorder implements TraceRecorder {
9
+ private traces;
10
+ record(trace: MemoryTrace): void;
11
+ getTraces(): MemoryTrace[];
12
+ clear(): void;
13
+ }
14
+ export declare function createTrace(traceId: string, namespace: string, opts: {
15
+ query?: string;
16
+ hitIds: string[];
17
+ hitTypes: MemoryType[];
18
+ injectedTokens: number;
19
+ latencyMs: number;
20
+ backendDistribution: Record<string, number>;
21
+ }): MemoryTrace;
22
+ //# sourceMappingURL=observability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../../src/core/observability.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,qBAAa,qBAAsB,YAAW,aAAa;IACzD,OAAO,CAAC,MAAM,CAAqB;IAEnC,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAIhC,SAAS,IAAI,WAAW,EAAE;IAI1B,KAAK,IAAI,IAAI;CAGd;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IACJ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C,GACA,WAAW,CAWb"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /**
3
+ * Observability: trace every retrieve, record hits, tokens, latency, backend distribution.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.InMemoryTraceRecorder = void 0;
7
+ exports.createTrace = createTrace;
8
+ class InMemoryTraceRecorder {
9
+ traces = [];
10
+ record(trace) {
11
+ this.traces.push(trace);
12
+ }
13
+ getTraces() {
14
+ return [...this.traces];
15
+ }
16
+ clear() {
17
+ this.traces = [];
18
+ }
19
+ }
20
+ exports.InMemoryTraceRecorder = InMemoryTraceRecorder;
21
+ function createTrace(traceId, namespace, opts) {
22
+ return {
23
+ traceId,
24
+ namespace,
25
+ query: opts.query,
26
+ hitIds: opts.hitIds,
27
+ hitTypes: opts.hitTypes,
28
+ injectedTokens: opts.injectedTokens,
29
+ latencyMs: opts.latencyMs,
30
+ backendDistribution: opts.backendDistribution,
31
+ };
32
+ }
33
+ //# sourceMappingURL=observability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.js","sourceRoot":"","sources":["../../../src/core/observability.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAwBH,kCAsBC;AAtCD,MAAa,qBAAqB;IACxB,MAAM,GAAkB,EAAE,CAAC;IAEnC,MAAM,CAAC,KAAkB;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;CACF;AAdD,sDAcC;AAED,SAAgB,WAAW,CACzB,OAAe,EACf,SAAiB,EACjB,IAOC;IAED,OAAO;QACL,OAAO;QACP,SAAS;QACT,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;KAC9C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Policy Engine: write/retrieve/update policies.
3
+ * Generic: driven by config and rules, no use-case hardcoding.
4
+ */
5
+ import type { MemoryItem, MemoryType } from "./types.js";
6
+ export interface WritePolicyContext {
7
+ namespace: string;
8
+ type: MemoryType;
9
+ content: string;
10
+ metadata?: Record<string, unknown>;
11
+ threadId?: string;
12
+ userId?: string;
13
+ }
14
+ export interface NamespacePolicyContext {
15
+ threadId?: string;
16
+ userId?: string;
17
+ projectId?: string;
18
+ tenantId?: string;
19
+ }
20
+ export interface RetrievePolicyContext {
21
+ namespace: string;
22
+ query: string;
23
+ budgetTokens: number;
24
+ existingItems?: MemoryItem[];
25
+ }
26
+ export interface PolicyEngineOptions {
27
+ /** Whether to allow writing this type (default: allow thread, cross_thread, knowledge) */
28
+ allowedWriteTypes?: MemoryType[];
29
+ /** Max items to merge per type when building injected context */
30
+ maxItemsPerType?: number;
31
+ /** Token budget per type - keyed by type */
32
+ budgetPerType?: Partial<Record<MemoryType, number>>;
33
+ }
34
+ export declare class PolicyEngine {
35
+ private options;
36
+ constructor(options?: PolicyEngineOptions);
37
+ /** Whether this write request should be accepted. */
38
+ shouldWrite(context: WritePolicyContext): boolean;
39
+ /** Resolve namespace from context (e.g. user:123, project:abc). */
40
+ selectNamespace(context: NamespacePolicyContext): string | null;
41
+ /** Filter and rank items within budget; merge and dedupe by semantic key. */
42
+ mergeAndRank(items: MemoryItem[], budgetTokens: number): {
43
+ items: MemoryItem[];
44
+ estimatedTokens: number;
45
+ };
46
+ }
47
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/core/policy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAsB,MAAM,YAAY,CAAC;AAE7E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,0FAA0F;IAC1F,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAC;IACjC,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAgC;gBAEnC,OAAO,GAAE,mBAAwB;IAQ7C,qDAAqD;IACrD,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAIjD,mEAAmE;IACnE,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI;IAQ/D,6EAA6E;IAC7E,YAAY,CACV,KAAK,EAAE,UAAU,EAAE,EACnB,YAAY,EAAE,MAAM,GACnB;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE;CA4CpD"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * Policy Engine: write/retrieve/update policies.
4
+ * Generic: driven by config and rules, no use-case hardcoding.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.PolicyEngine = void 0;
8
+ const DEFAULT_ALLOWED_WRITE_TYPES = ["thread", "cross_thread", "knowledge"];
9
+ class PolicyEngine {
10
+ options;
11
+ constructor(options = {}) {
12
+ this.options = {
13
+ allowedWriteTypes: options.allowedWriteTypes ?? DEFAULT_ALLOWED_WRITE_TYPES,
14
+ maxItemsPerType: options.maxItemsPerType ?? 20,
15
+ budgetPerType: options.budgetPerType ?? {},
16
+ };
17
+ }
18
+ /** Whether this write request should be accepted. */
19
+ shouldWrite(context) {
20
+ return this.options.allowedWriteTypes.includes(context.type);
21
+ }
22
+ /** Resolve namespace from context (e.g. user:123, project:abc). */
23
+ selectNamespace(context) {
24
+ if (context.userId)
25
+ return `user:${context.userId}`;
26
+ if (context.projectId)
27
+ return `project:${context.projectId}`;
28
+ if (context.tenantId)
29
+ return `org:${context.tenantId}`;
30
+ if (context.threadId)
31
+ return `thread:${context.threadId}`;
32
+ return null;
33
+ }
34
+ /** Filter and rank items within budget; merge and dedupe by semantic key. */
35
+ mergeAndRank(items, budgetTokens) {
36
+ const budgetPerType = this.options.budgetPerType;
37
+ const maxPerType = this.options.maxItemsPerType;
38
+ const byType = new Map();
39
+ for (const item of items) {
40
+ const list = byType.get(item.type) ?? [];
41
+ list.push(item);
42
+ byType.set(item.type, list);
43
+ }
44
+ const selected = [];
45
+ let estimatedTokens = 0;
46
+ const roughTokensPerItem = 50;
47
+ for (const [type, list] of byType) {
48
+ const typeBudget = budgetPerType[type] ??
49
+ Math.floor(budgetTokens / Math.max(1, byType.size));
50
+ const typeLimit = Math.min(maxPerType, Math.floor(typeBudget / roughTokensPerItem));
51
+ const sorted = [...list].sort((a, b) => (b.metadata.confidence ?? 1) -
52
+ (a.metadata.confidence ?? 1));
53
+ const versioned = new Map();
54
+ for (const item of sorted) {
55
+ const key = item.metadata.version !== undefined
56
+ ? `${item.type}:${item.namespace}:v${item.metadata.version}`
57
+ : item.id;
58
+ if (!versioned.has(key))
59
+ versioned.set(key, item);
60
+ }
61
+ const take = Array.from(versioned.values()).slice(0, typeLimit);
62
+ for (const item of take) {
63
+ if (estimatedTokens + roughTokensPerItem <= budgetTokens) {
64
+ selected.push(item);
65
+ estimatedTokens += roughTokensPerItem;
66
+ }
67
+ }
68
+ }
69
+ return { items: selected, estimatedTokens };
70
+ }
71
+ }
72
+ exports.PolicyEngine = PolicyEngine;
73
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/core/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Privacy Guard: PII/sensitive field filtering, redaction, and delete support.
3
+ * Generic: no use-case-specific patterns; config-driven blocklist/allowlist.
4
+ */
5
+ export interface PrivacyGuardOptions {
6
+ /**
7
+ * Metadata keys to strip before storing.
8
+ * Omit = use built-in defaults; [] = allow all keys; ["password", "token"] = custom list.
9
+ */
10
+ forbiddenMetadataKeys?: string[];
11
+ /** If true, redact content that looks like secrets before storing (placeholder for future). */
12
+ redactSecrets?: boolean;
13
+ }
14
+ export declare class PrivacyGuard {
15
+ private forbiddenKeys;
16
+ private redactSecrets;
17
+ constructor(options?: PrivacyGuardOptions);
18
+ /** Strip forbidden keys from metadata. */
19
+ sanitizeMetadata(metadata: Record<string, unknown>): Record<string, unknown>;
20
+ /** Redact obvious secret patterns in content when redactSecrets is true (placeholder). */
21
+ redactContent(content: string): string;
22
+ }
23
+ //# sourceMappingURL=privacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy.d.ts","sourceRoot":"","sources":["../../../src/core/privacy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,+FAA+F;IAC/F,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAWD,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,aAAa,CAAU;gBAEnB,OAAO,GAAE,mBAAwB;IAS7C,0CAA0C;IAC1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAU5E,0FAA0F;IAC1F,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAKvC"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ /**
3
+ * Privacy Guard: PII/sensitive field filtering, redaction, and delete support.
4
+ * Generic: no use-case-specific patterns; config-driven blocklist/allowlist.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.PrivacyGuard = void 0;
8
+ const DEFAULT_FORBIDDEN_KEYS = [
9
+ "password",
10
+ "api_key",
11
+ "apikey",
12
+ "secret",
13
+ "token",
14
+ "authorization",
15
+ ];
16
+ class PrivacyGuard {
17
+ forbiddenKeys;
18
+ redactSecrets;
19
+ constructor(options = {}) {
20
+ this.forbiddenKeys = new Set(options.forbiddenMetadataKeys !== undefined
21
+ ? options.forbiddenMetadataKeys
22
+ : DEFAULT_FORBIDDEN_KEYS);
23
+ this.redactSecrets = options.redactSecrets ?? false;
24
+ }
25
+ /** Strip forbidden keys from metadata. */
26
+ sanitizeMetadata(metadata) {
27
+ const out = {};
28
+ for (const [k, v] of Object.entries(metadata)) {
29
+ const lower = k.toLowerCase();
30
+ if (this.forbiddenKeys.has(lower))
31
+ continue;
32
+ out[k] = v;
33
+ }
34
+ return out;
35
+ }
36
+ /** Redact obvious secret patterns in content when redactSecrets is true (placeholder). */
37
+ redactContent(content) {
38
+ if (!this.redactSecrets)
39
+ return content;
40
+ // Placeholder: future implementation can detect/seal secrets in content
41
+ return content;
42
+ }
43
+ }
44
+ exports.PrivacyGuard = PrivacyGuard;
45
+ //# sourceMappingURL=privacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy.js","sourceRoot":"","sources":["../../../src/core/privacy.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAYH,MAAM,sBAAsB,GAAG;IAC7B,UAAU;IACV,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,eAAe;CAChB,CAAC;AAEF,MAAa,YAAY;IACf,aAAa,CAAc;IAC3B,aAAa,CAAU;IAE/B,YAAY,UAA+B,EAAE;QAC3C,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAC1B,OAAO,CAAC,qBAAqB,KAAK,SAAS;YACzC,CAAC,CAAC,OAAO,CAAC,qBAAqB;YAC/B,CAAC,CAAC,sBAAsB,CAC3B,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC;IACtD,CAAC;IAED,0CAA0C;IAC1C,gBAAgB,CAAC,QAAiC;QAChD,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACb,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,0FAA0F;IAC1F,aAAa,CAAC,OAAe;QAC3B,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,OAAO,CAAC;QACxC,wEAAwE;QACxE,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA9BD,oCA8BC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Memory Router: route read/write to one or more backends by type/namespace.
3
+ * Generic: routing is config-driven (which types go to which provider).
4
+ */
5
+ import type { MemoryItem, MemoryProvider, MemoryQueryRequest, MemoryWriteRequest } from "./types.js";
6
+ export interface RouterRule {
7
+ types?: string[];
8
+ namespacePrefix?: string;
9
+ providerId: string;
10
+ }
11
+ export interface MemoryRouterOptions {
12
+ providers: Map<string, MemoryProvider>;
13
+ /** Which provider(s) handle which types/namespaces. If empty, all go to defaultProvider. */
14
+ rules?: RouterRule[];
15
+ defaultProviderId: string;
16
+ }
17
+ export declare class MemoryRouter {
18
+ private providers;
19
+ private rules;
20
+ private defaultProviderId;
21
+ constructor(options: MemoryRouterOptions);
22
+ private getProvider;
23
+ /** Resolve which provider(s) to use for this write. Returns at least one provider id. */
24
+ routeWrite(req: MemoryWriteRequest): string[];
25
+ /** Resolve which provider(s) to query. */
26
+ routeQuery(req: MemoryQueryRequest): string[];
27
+ write(req: MemoryWriteRequest): Promise<MemoryItem>;
28
+ query(req: MemoryQueryRequest): Promise<MemoryItem[]>;
29
+ delete(id: string, namespace: string): Promise<void>;
30
+ /** Get one item by namespace and key (path); uses first provider that has getByKey. */
31
+ getByKey(namespace: string, key: string): Promise<MemoryItem | null>;
32
+ /** Delete item by namespace and key. */
33
+ deleteByKey(namespace: string, key: string): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/core/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErG,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,4FAA4F;IAC5F,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,OAAO,EAAE,mBAAmB;IAMxC,OAAO,CAAC,WAAW;IAMnB,yFAAyF;IACzF,UAAU,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,EAAE;IAY7C,0CAA0C;IAC1C,UAAU,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,EAAE;IAavC,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAMnD,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAUrD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1D,uFAAuF;IACjF,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAU1E,wCAAwC;IAClC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKjE"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * Memory Router: route read/write to one or more backends by type/namespace.
4
+ * Generic: routing is config-driven (which types go to which provider).
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.MemoryRouter = void 0;
8
+ class MemoryRouter {
9
+ providers;
10
+ rules;
11
+ defaultProviderId;
12
+ constructor(options) {
13
+ this.providers = options.providers;
14
+ this.rules = options.rules ?? [];
15
+ this.defaultProviderId = options.defaultProviderId;
16
+ }
17
+ getProvider(id) {
18
+ const p = this.providers.get(id);
19
+ if (!p)
20
+ throw new Error(`Unknown provider: ${id}`);
21
+ return p;
22
+ }
23
+ /** Resolve which provider(s) to use for this write. Returns at least one provider id. */
24
+ routeWrite(req) {
25
+ const matched = this.rules.filter((r) => (!r.types || r.types.includes(req.type)) &&
26
+ (!r.namespacePrefix || req.namespace.startsWith(r.namespacePrefix)));
27
+ if (matched.length > 0) {
28
+ return [...new Set(matched.map((r) => r.providerId))];
29
+ }
30
+ return [this.defaultProviderId];
31
+ }
32
+ /** Resolve which provider(s) to query. */
33
+ routeQuery(req) {
34
+ const matched = this.rules.filter((r) => (!r.types ||
35
+ (req.types && req.types.some((t) => r.types.includes(t)))) &&
36
+ (!r.namespacePrefix || req.namespace.startsWith(r.namespacePrefix)));
37
+ if (matched.length > 0) {
38
+ return [...new Set(matched.map((r) => r.providerId))];
39
+ }
40
+ return [this.defaultProviderId];
41
+ }
42
+ async write(req) {
43
+ const ids = this.routeWrite(req);
44
+ const provider = this.getProvider(ids[0]);
45
+ return provider.write(req);
46
+ }
47
+ async query(req) {
48
+ const ids = this.routeQuery(req);
49
+ const all = [];
50
+ for (const id of ids) {
51
+ const items = await this.getProvider(id).query(req);
52
+ all.push(...items);
53
+ }
54
+ return all;
55
+ }
56
+ async delete(id, namespace) {
57
+ for (const p of this.providers.values()) {
58
+ try {
59
+ await p.delete(id, namespace);
60
+ }
61
+ catch {
62
+ // ignore if not in this provider
63
+ }
64
+ }
65
+ }
66
+ /** Get one item by namespace and key (path); uses first provider that has getByKey. */
67
+ async getByKey(namespace, key) {
68
+ for (const p of this.providers.values()) {
69
+ if (p.getByKey) {
70
+ const item = await p.getByKey(namespace, key);
71
+ if (item)
72
+ return item;
73
+ }
74
+ }
75
+ return null;
76
+ }
77
+ /** Delete item by namespace and key. */
78
+ async deleteByKey(namespace, key) {
79
+ for (const p of this.providers.values()) {
80
+ if (p.deleteByKey)
81
+ await p.deleteByKey(namespace, key);
82
+ }
83
+ }
84
+ }
85
+ exports.MemoryRouter = MemoryRouter;
86
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/core/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Unified memory types per agent-memory dev doc.
3
+ * Generic: no use-case hardcoding; driven by config and semantic understanding.
4
+ */
5
+ /** Supported memory types: thread (session), cross_thread (cross-session), knowledge (docs/RAG). No use-case hardcoding. */
6
+ export type MemoryType = "thread" | "cross_thread" | "knowledge";
7
+ export type MemoryScope = "thread" | "global";
8
+ export type MemorySource = "chat" | "tool" | "doc" | "image" | "code" | "system";
9
+ export type PrivacyLevel = "public" | "private" | "sensitive";
10
+ export interface MemoryItemMetadata {
11
+ source?: MemorySource;
12
+ thread_id?: string;
13
+ user_id?: string;
14
+ project_id?: string;
15
+ doc_id?: string;
16
+ page?: number;
17
+ image_path?: string;
18
+ tags?: string[];
19
+ created_at: string;
20
+ updated_at?: string;
21
+ ttl_seconds?: number;
22
+ confidence?: number;
23
+ privacy?: PrivacyLevel;
24
+ version?: number;
25
+ [key: string]: unknown;
26
+ }
27
+ export interface MemoryItem {
28
+ id: string;
29
+ type: MemoryType;
30
+ namespace: string;
31
+ scope: MemoryScope;
32
+ content: string;
33
+ embedding?: number[];
34
+ metadata: MemoryItemMetadata;
35
+ }
36
+ export interface MemoryWriteRequest {
37
+ namespace: string;
38
+ type: MemoryType;
39
+ content: string;
40
+ scope?: MemoryScope;
41
+ metadata?: Partial<MemoryItemMetadata>;
42
+ }
43
+ /** memorize input: type optional; when omitted, classifyMemory callback or default cross_thread. */
44
+ export type MemorizeRequest = Omit<MemoryWriteRequest, "type"> & {
45
+ type?: MemoryType;
46
+ };
47
+ export interface MemoryQueryRequest {
48
+ namespace: string;
49
+ query: string;
50
+ topK?: number;
51
+ filters?: Record<string, unknown>;
52
+ budgetTokens?: number;
53
+ types?: MemoryType[];
54
+ }
55
+ export interface MemoryProvider {
56
+ write(req: MemoryWriteRequest): Promise<MemoryItem>;
57
+ query(req: MemoryQueryRequest): Promise<MemoryItem[]>;
58
+ delete(id: string, namespace: string): Promise<void>;
59
+ /** Optional: get a single item by namespace and key (e.g. path). */
60
+ getByKey?(namespace: string, key: string): Promise<MemoryItem | null>;
61
+ /** Optional: delete the item with the given namespace and key. */
62
+ deleteByKey?(namespace: string, key: string): Promise<void>;
63
+ upsert?(item: MemoryItem): Promise<MemoryItem>;
64
+ }
65
+ export interface RetrieveResult {
66
+ items: MemoryItem[];
67
+ injectedText: string;
68
+ traceId: string;
69
+ }
70
+ /** Recall result (same shape as retrieveForPrompt). */
71
+ export type RecallResult = RetrieveResult;
72
+ export interface MemoryTrace {
73
+ traceId: string;
74
+ namespace: string;
75
+ query?: string;
76
+ hitIds: string[];
77
+ hitTypes: MemoryType[];
78
+ injectedTokens: number;
79
+ latencyMs: number;
80
+ backendDistribution: Record<string, number>;
81
+ }
82
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4HAA4H;AAC5H,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,cAAc,GAAG,WAAW,CAAC;AAEjE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9C,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,MAAM,GACN,KAAK,GACL,OAAO,GACP,MAAM,GACN,QAAQ,CAAC;AAEb,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACxC;AAED,oGAAoG;AACpG,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,CAAC;AAEvF,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,KAAK,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,oEAAoE;IACpE,QAAQ,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACtE,kEAAkE;IAClE,WAAW,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,CAAC,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uDAAuD;AACvD,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Unified memory types per agent-memory dev doc.
4
+ * Generic: no use-case hardcoding; driven by config and semantic understanding.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Create AgentMemory from YAML or default config.
3
+ * Returned memory.memorize supports content+type and url (local/remote PDF, txt, HTML, images).
4
+ */
5
+ import { type AgentMemoryConfig } from "./core/config.js";
6
+ import type { MemoryItem, MemoryWriteRequest } from "./core/types.js";
7
+ import type { AgentMemory, ClassifyMemoryFn } from "./core/agent-memory.js";
8
+ import { type Mem0MemoryLike } from "./providers/mem0-provider.js";
9
+ /** memorize input when using createAgentMemory: content (+ optional type) or url. */
10
+ export type MemorizeRequestWithIngest = Omit<MemoryWriteRequest, "content" | "type"> & {
11
+ content?: string;
12
+ type?: MemoryWriteRequest["type"];
13
+ /** Local path or remote URL; format detected and ingested as knowledge. */
14
+ url?: string;
15
+ };
16
+ export interface CreateAgentMemoryOptions {
17
+ /** YAML config path; default cwd/config/agent-memory.yaml or in-memory if missing */
18
+ configPath?: string;
19
+ /** Config object; overrides configPath */
20
+ config?: AgentMemoryConfig;
21
+ /** Provider overrides (e.g. mem0: pass initialized Memory instance) */
22
+ overrides?: {
23
+ mem0?: Mem0MemoryLike;
24
+ };
25
+ /** When type omitted: used to infer type; otherwise default cross_thread */
26
+ classifyMemory?: ClassifyMemoryFn;
27
+ /** For image URL ingest: generate caption; otherwise store "(image: <url>)" */
28
+ captionFn?: (buffer: Buffer) => Promise<string>;
29
+ }
30
+ /** createAgentMemory return type: memorize supports content+type and url */
31
+ export interface CreateAgentMemoryResult extends Omit<AgentMemory, "memorize" | "write"> {
32
+ memorize(req: MemorizeRequestWithIngest): Promise<MemoryItem>;
33
+ write(req: MemorizeRequestWithIngest): Promise<MemoryItem>;
34
+ }
35
+ /**
36
+ * Create AgentMemory from YAML or default config.
37
+ *
38
+ * @example
39
+ * const memory = await createAgentMemory();
40
+ * @example
41
+ * const memory = await createAgentMemory({ configPath: "./config/memory.yaml" });
42
+ * @example
43
+ * const mem0 = new Memory({ ... });
44
+ * const memory = await createAgentMemory({ configPath: "config/agent-memory.yaml", overrides: { mem0 } });
45
+ */
46
+ export declare function createAgentMemory(options?: CreateAgentMemoryOptions | string): Promise<CreateAgentMemoryResult>;
47
+ //# sourceMappingURL=create-agent-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-agent-memory.d.ts","sourceRoot":"","sources":["../../src/create-agent-memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAkB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEtF,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAQ5E,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKjF,qFAAqF;AACrF,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,MAAM,CAAC,GAAG;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAClC,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,uEAAuE;IACvE,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,cAAc,CAAC;KACvB,CAAC;IACF,4EAA4E;IAC5E,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,+EAA+E;IAC/E,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,4EAA4E;AAC5E,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC;IACtF,QAAQ,CAAC,GAAG,EAAE,yBAAyB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9D,KAAK,CAAC,GAAG,EAAE,yBAAyB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5D;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,wBAAwB,GAAG,MAAW,GAC9C,OAAO,CAAC,uBAAuB,CAAC,CA0HlC"}