@atomicmemory/core 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 (589) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/LICENSE +201 -0
  3. package/README.md +314 -0
  4. package/dist/app/bind-ephemeral.d.ts +18 -0
  5. package/dist/app/bind-ephemeral.js +22 -0
  6. package/dist/app/cors-headers.d.ts +12 -0
  7. package/dist/app/cors-headers.js +18 -0
  8. package/dist/app/create-app.d.ts +25 -0
  9. package/dist/app/create-app.js +156 -0
  10. package/dist/app/runtime-config-route-snapshot.d.ts +27 -0
  11. package/dist/app/runtime-config-route-snapshot.js +27 -0
  12. package/dist/app/runtime-container.d.ts +281 -0
  13. package/dist/app/runtime-container.js +297 -0
  14. package/dist/app/startup-checks.d.ts +28 -0
  15. package/dist/app/startup-checks.js +45 -0
  16. package/dist/bin.d.ts +17 -0
  17. package/dist/bin.js +128 -0
  18. package/dist/config.d.ts +680 -0
  19. package/dist/config.js +808 -0
  20. package/dist/db/agent-trust-repository.d.ts +49 -0
  21. package/dist/db/agent-trust-repository.js +66 -0
  22. package/dist/db/belief-edges-repository.d.ts +68 -0
  23. package/dist/db/belief-edges-repository.js +124 -0
  24. package/dist/db/claim-repository.d.ts +6 -0
  25. package/dist/db/claim-repository.js +4 -0
  26. package/dist/db/contradictions-repository.d.ts +56 -0
  27. package/dist/db/contradictions-repository.js +88 -0
  28. package/dist/db/document-chunk-repository.d.ts +48 -0
  29. package/dist/db/document-chunk-repository.js +145 -0
  30. package/dist/db/document-chunk-types.d.ts +35 -0
  31. package/dist/db/document-chunk-types.js +9 -0
  32. package/dist/db/document-list-cursor.d.ts +45 -0
  33. package/dist/db/document-list-cursor.js +111 -0
  34. package/dist/db/document-list-repository.d.ts +103 -0
  35. package/dist/db/document-list-repository.js +204 -0
  36. package/dist/db/entity-cards-repository.d.ts +37 -0
  37. package/dist/db/entity-cards-repository.js +46 -0
  38. package/dist/db/entity-values-repository.d.ts +26 -0
  39. package/dist/db/entity-values-repository.js +57 -0
  40. package/dist/db/link-repository.d.ts +30 -0
  41. package/dist/db/link-repository.js +54 -0
  42. package/dist/db/memory-repository.d.ts +163 -0
  43. package/dist/db/memory-repository.js +232 -0
  44. package/dist/db/migrate.d.ts +6 -0
  45. package/dist/db/migrate.js +36 -0
  46. package/dist/db/mmr.d.ts +14 -0
  47. package/dist/db/mmr.js +57 -0
  48. package/dist/db/passport-feed-repository.d.ts +91 -0
  49. package/dist/db/passport-feed-repository.js +198 -0
  50. package/dist/db/pg-episode-store.d.ts +19 -0
  51. package/dist/db/pg-episode-store.js +17 -0
  52. package/dist/db/pg-link-store.d.ts +17 -0
  53. package/dist/db/pg-link-store.js +14 -0
  54. package/dist/db/pg-memory-store.d.ts +68 -0
  55. package/dist/db/pg-memory-store.js +53 -0
  56. package/dist/db/pg-recap-store.d.ts +13 -0
  57. package/dist/db/pg-recap-store.js +19 -0
  58. package/dist/db/pg-representation-store.d.ts +17 -0
  59. package/dist/db/pg-representation-store.js +17 -0
  60. package/dist/db/pg-search-store.d.ts +29 -0
  61. package/dist/db/pg-search-store.js +47 -0
  62. package/dist/db/pool.d.ts +5 -0
  63. package/dist/db/pool.js +21 -0
  64. package/dist/db/ppr.d.ts +56 -0
  65. package/dist/db/ppr.js +178 -0
  66. package/dist/db/query-helpers.d.ts +44 -0
  67. package/dist/db/query-helpers.js +60 -0
  68. package/dist/db/raw-doc-artifact-sync.d.ts +128 -0
  69. package/dist/db/raw-doc-artifact-sync.js +259 -0
  70. package/dist/db/raw-document-blob-repository.d.ts +148 -0
  71. package/dist/db/raw-document-blob-repository.js +300 -0
  72. package/dist/db/raw-document-repository.d.ts +104 -0
  73. package/dist/db/raw-document-repository.js +410 -0
  74. package/dist/db/raw-document-status-repository.d.ts +122 -0
  75. package/dist/db/raw-document-status-repository.js +183 -0
  76. package/dist/db/raw-document-types.d.ts +236 -0
  77. package/dist/db/raw-document-types.js +10 -0
  78. package/dist/db/raw-storage-reconciliation-repository.d.ts +110 -0
  79. package/dist/db/raw-storage-reconciliation-repository.js +200 -0
  80. package/dist/db/reflection-jobs-repository.d.ts +33 -0
  81. package/dist/db/reflection-jobs-repository.js +48 -0
  82. package/dist/db/reflections-repository.d.ts +41 -0
  83. package/dist/db/reflections-repository.js +83 -0
  84. package/dist/db/repository-claims.d.ts +141 -0
  85. package/dist/db/repository-claims.js +376 -0
  86. package/dist/db/repository-deferred-audn.d.ts +33 -0
  87. package/dist/db/repository-deferred-audn.js +69 -0
  88. package/dist/db/repository-document-delete.d.ts +53 -0
  89. package/dist/db/repository-document-delete.js +156 -0
  90. package/dist/db/repository-entities.d.ts +114 -0
  91. package/dist/db/repository-entities.js +317 -0
  92. package/dist/db/repository-entity-attributes.d.ts +41 -0
  93. package/dist/db/repository-entity-attributes.js +65 -0
  94. package/dist/db/repository-entity-graph.d.ts +32 -0
  95. package/dist/db/repository-entity-graph.js +87 -0
  96. package/dist/db/repository-first-mentions.d.ts +41 -0
  97. package/dist/db/repository-first-mentions.js +79 -0
  98. package/dist/db/repository-lessons.d.ts +51 -0
  99. package/dist/db/repository-lessons.js +90 -0
  100. package/dist/db/repository-links.d.ts +26 -0
  101. package/dist/db/repository-links.js +105 -0
  102. package/dist/db/repository-observation.d.ts +26 -0
  103. package/dist/db/repository-observation.js +51 -0
  104. package/dist/db/repository-read.d.ts +56 -0
  105. package/dist/db/repository-read.js +271 -0
  106. package/dist/db/repository-recaps.d.ts +59 -0
  107. package/dist/db/repository-recaps.js +158 -0
  108. package/dist/db/repository-representations.d.ts +48 -0
  109. package/dist/db/repository-representations.js +162 -0
  110. package/dist/db/repository-temporal-state.d.ts +35 -0
  111. package/dist/db/repository-temporal-state.js +46 -0
  112. package/dist/db/repository-tll.d.ts +88 -0
  113. package/dist/db/repository-tll.js +179 -0
  114. package/dist/db/repository-types.d.ts +313 -0
  115. package/dist/db/repository-types.js +142 -0
  116. package/dist/db/repository-user-profiles.d.ts +17 -0
  117. package/dist/db/repository-user-profiles.js +28 -0
  118. package/dist/db/repository-vector-search.d.ts +33 -0
  119. package/dist/db/repository-vector-search.js +373 -0
  120. package/dist/db/repository-wipe.d.ts +34 -0
  121. package/dist/db/repository-wipe.js +94 -0
  122. package/dist/db/repository-write.d.ts +61 -0
  123. package/dist/db/repository-write.js +279 -0
  124. package/dist/db/schema.sql +1355 -0
  125. package/dist/db/storage-artifact-delete-tx.d.ts +56 -0
  126. package/dist/db/storage-artifact-delete-tx.js +123 -0
  127. package/dist/db/storage-artifact-providers.d.ts +21 -0
  128. package/dist/db/storage-artifact-providers.js +21 -0
  129. package/dist/db/storage-artifact-recovery-repository.d.ts +66 -0
  130. package/dist/db/storage-artifact-recovery-repository.js +58 -0
  131. package/dist/db/storage-artifact-repository.d.ts +329 -0
  132. package/dist/db/storage-artifact-repository.js +497 -0
  133. package/dist/db/stores.d.ts +220 -0
  134. package/dist/db/stores.js +12 -0
  135. package/dist/db/summaries-repository.d.ts +74 -0
  136. package/dist/db/summaries-repository.js +125 -0
  137. package/dist/eval/beam-10m-loader.d.ts +98 -0
  138. package/dist/eval/beam-10m-loader.js +128 -0
  139. package/dist/index.d.ts +18 -0
  140. package/dist/index.js +17 -0
  141. package/dist/middleware/require-bearer.d.ts +27 -0
  142. package/dist/middleware/require-bearer.js +60 -0
  143. package/dist/middleware/validate-response.d.ts +33 -0
  144. package/dist/middleware/validate-response.js +55 -0
  145. package/dist/middleware/validate.d.ts +43 -0
  146. package/dist/middleware/validate.js +85 -0
  147. package/dist/routes/agents.d.ts +13 -0
  148. package/dist/routes/agents.js +89 -0
  149. package/dist/routes/document-response-formatters.d.ts +98 -0
  150. package/dist/routes/document-response-formatters.js +243 -0
  151. package/dist/routes/documents.d.ts +74 -0
  152. package/dist/routes/documents.js +425 -0
  153. package/dist/routes/memories.d.ts +29 -0
  154. package/dist/routes/memories.js +725 -0
  155. package/dist/routes/memory-response-formatters.d.ts +179 -0
  156. package/dist/routes/memory-response-formatters.js +210 -0
  157. package/dist/routes/public-raw-storage-metadata.d.ts +54 -0
  158. package/dist/routes/public-raw-storage-metadata.js +56 -0
  159. package/dist/routes/reflect.d.ts +14 -0
  160. package/dist/routes/reflect.js +19 -0
  161. package/dist/routes/response-schema-map.d.ts +14 -0
  162. package/dist/routes/response-schema-map.js +69 -0
  163. package/dist/routes/route-errors.d.ts +12 -0
  164. package/dist/routes/route-errors.js +30 -0
  165. package/dist/routes/storage-error-handlers.d.ts +34 -0
  166. package/dist/routes/storage-error-handlers.js +185 -0
  167. package/dist/routes/storage-response-formatters.d.ts +44 -0
  168. package/dist/routes/storage-response-formatters.js +155 -0
  169. package/dist/routes/storage.d.ts +38 -0
  170. package/dist/routes/storage.js +369 -0
  171. package/dist/routes/upstream-provider-errors.d.ts +19 -0
  172. package/dist/routes/upstream-provider-errors.js +95 -0
  173. package/dist/schemas/agents.d.ts +79 -0
  174. package/dist/schemas/agents.js +126 -0
  175. package/dist/schemas/common.d.ts +110 -0
  176. package/dist/schemas/common.js +190 -0
  177. package/dist/schemas/document-list-responses.d.ts +102 -0
  178. package/dist/schemas/document-list-responses.js +87 -0
  179. package/dist/schemas/document-list-schemas.d.ts +123 -0
  180. package/dist/schemas/document-list-schemas.js +174 -0
  181. package/dist/schemas/document-response-schemas.d.ts +610 -0
  182. package/dist/schemas/document-response-schemas.js +264 -0
  183. package/dist/schemas/document-status-envelope.d.ts +48 -0
  184. package/dist/schemas/document-status-envelope.js +54 -0
  185. package/dist/schemas/documents.d.ts +292 -0
  186. package/dist/schemas/documents.js +449 -0
  187. package/dist/schemas/errors.d.ts +75 -0
  188. package/dist/schemas/errors.js +105 -0
  189. package/dist/schemas/memories.d.ts +378 -0
  190. package/dist/schemas/memories.js +542 -0
  191. package/dist/schemas/openapi.d.ts +24 -0
  192. package/dist/schemas/openapi.js +1038 -0
  193. package/dist/schemas/response-scalars.d.ts +10 -0
  194. package/dist/schemas/response-scalars.js +10 -0
  195. package/dist/schemas/responses.d.ts +536 -0
  196. package/dist/schemas/responses.js +350 -0
  197. package/dist/schemas/search-response-parts.d.ts +97 -0
  198. package/dist/schemas/search-response-parts.js +103 -0
  199. package/dist/schemas/storage-schemas.d.ts +175 -0
  200. package/dist/schemas/storage-schemas.js +277 -0
  201. package/dist/schemas/zod-setup.d.ts +15 -0
  202. package/dist/schemas/zod-setup.js +17 -0
  203. package/dist/server.d.ts +13 -0
  204. package/dist/server.js +57 -0
  205. package/dist/services/abstract-query-policy.d.ts +13 -0
  206. package/dist/services/abstract-query-policy.js +50 -0
  207. package/dist/services/affinity-clustering.d.ts +66 -0
  208. package/dist/services/affinity-clustering.js +125 -0
  209. package/dist/services/agentic-retrieval.d.ts +38 -0
  210. package/dist/services/agentic-retrieval.js +126 -0
  211. package/dist/services/answer-format.d.ts +56 -0
  212. package/dist/services/answer-format.js +118 -0
  213. package/dist/services/answer-rescue.d.ts +72 -0
  214. package/dist/services/answer-rescue.js +177 -0
  215. package/dist/services/answer-verifier.d.ts +24 -0
  216. package/dist/services/answer-verifier.js +73 -0
  217. package/dist/services/api-retry.d.ts +6 -0
  218. package/dist/services/api-retry.js +41 -0
  219. package/dist/services/assistant-turn-filter.d.ts +20 -0
  220. package/dist/services/assistant-turn-filter.js +69 -0
  221. package/dist/services/atomicmem-uri.d.ts +33 -0
  222. package/dist/services/atomicmem-uri.js +86 -0
  223. package/dist/services/audit-events.d.ts +54 -0
  224. package/dist/services/audit-events.js +56 -0
  225. package/dist/services/chunked-extraction.d.ts +21 -0
  226. package/dist/services/chunked-extraction.js +108 -0
  227. package/dist/services/claim-slotting.d.ts +27 -0
  228. package/dist/services/claim-slotting.js +38 -0
  229. package/dist/services/claude-code-llm.d.ts +19 -0
  230. package/dist/services/claude-code-llm.js +96 -0
  231. package/dist/services/composite-dedup.d.ts +50 -0
  232. package/dist/services/composite-dedup.js +153 -0
  233. package/dist/services/composite-grouping.d.ts +41 -0
  234. package/dist/services/composite-grouping.js +111 -0
  235. package/dist/services/composite-staleness.d.ts +20 -0
  236. package/dist/services/composite-staleness.js +50 -0
  237. package/dist/services/conciseness-preference.d.ts +14 -0
  238. package/dist/services/conciseness-preference.js +42 -0
  239. package/dist/services/conflict-policy.d.ts +20 -0
  240. package/dist/services/conflict-policy.js +335 -0
  241. package/dist/services/consensus-extraction.d.ts +39 -0
  242. package/dist/services/consensus-extraction.js +147 -0
  243. package/dist/services/consensus-validation.d.ts +52 -0
  244. package/dist/services/consensus-validation.js +206 -0
  245. package/dist/services/consolidation-service.d.ts +60 -0
  246. package/dist/services/consolidation-service.js +171 -0
  247. package/dist/services/content-detection.d.ts +18 -0
  248. package/dist/services/content-detection.js +25 -0
  249. package/dist/services/contradiction-surfacing.d.ts +62 -0
  250. package/dist/services/contradiction-surfacing.js +111 -0
  251. package/dist/services/cost-telemetry.d.ts +39 -0
  252. package/dist/services/cost-telemetry.js +58 -0
  253. package/dist/services/counter-evidence.d.ts +34 -0
  254. package/dist/services/counter-evidence.js +92 -0
  255. package/dist/services/current-state-ranking.d.ts +21 -0
  256. package/dist/services/current-state-ranking.js +152 -0
  257. package/dist/services/deferred-audn.d.ts +47 -0
  258. package/dist/services/deferred-audn.js +162 -0
  259. package/dist/services/document-chunker.d.ts +50 -0
  260. package/dist/services/document-chunker.js +153 -0
  261. package/dist/services/document-failure-markers.d.ts +91 -0
  262. package/dist/services/document-failure-markers.js +305 -0
  263. package/dist/services/document-indexer.d.ts +122 -0
  264. package/dist/services/document-indexer.js +405 -0
  265. package/dist/services/document-service.d.ts +245 -0
  266. package/dist/services/document-service.js +325 -0
  267. package/dist/services/document-upload-artifact-sync.d.ts +80 -0
  268. package/dist/services/document-upload-artifact-sync.js +162 -0
  269. package/dist/services/document-upload-beta2-recovery.d.ts +72 -0
  270. package/dist/services/document-upload-beta2-recovery.js +94 -0
  271. package/dist/services/document-upload.d.ts +44 -0
  272. package/dist/services/document-upload.js +353 -0
  273. package/dist/services/embedding.d.ts +57 -0
  274. package/dist/services/embedding.js +416 -0
  275. package/dist/services/entity-attribute-extractor.d.ts +34 -0
  276. package/dist/services/entity-attribute-extractor.js +117 -0
  277. package/dist/services/entity-card-synthesis.d.ts +54 -0
  278. package/dist/services/entity-card-synthesis.js +92 -0
  279. package/dist/services/entity-dedup.d.ts +9 -0
  280. package/dist/services/entity-dedup.js +14 -0
  281. package/dist/services/entity-graph.d.ts +17 -0
  282. package/dist/services/entity-graph.js +135 -0
  283. package/dist/services/entropy-gate.d.ts +52 -0
  284. package/dist/services/entropy-gate.js +56 -0
  285. package/dist/services/episode-fetcher.d.ts +47 -0
  286. package/dist/services/episode-fetcher.js +128 -0
  287. package/dist/services/event-anchor-facts.d.ts +8 -0
  288. package/dist/services/event-anchor-facts.js +205 -0
  289. package/dist/services/event-chain-detector.d.ts +52 -0
  290. package/dist/services/event-chain-detector.js +83 -0
  291. package/dist/services/extraction-cache.d.ts +9 -0
  292. package/dist/services/extraction-cache.js +54 -0
  293. package/dist/services/extraction-enrichment.d.ts +9 -0
  294. package/dist/services/extraction-enrichment.js +223 -0
  295. package/dist/services/extraction.d.ts +69 -0
  296. package/dist/services/extraction.js +596 -0
  297. package/dist/services/fact-normalization.d.ts +12 -0
  298. package/dist/services/fact-normalization.js +248 -0
  299. package/dist/services/filecoin-observability.d.ts +127 -0
  300. package/dist/services/filecoin-observability.js +200 -0
  301. package/dist/services/first-mention-service.d.ts +76 -0
  302. package/dist/services/first-mention-service.js +186 -0
  303. package/dist/services/hierarchical-retrieval.d.ts +49 -0
  304. package/dist/services/hierarchical-retrieval.js +50 -0
  305. package/dist/services/ingest-fact-pipeline.d.ts +32 -0
  306. package/dist/services/ingest-fact-pipeline.js +212 -0
  307. package/dist/services/ingest-post-write.d.ts +50 -0
  308. package/dist/services/ingest-post-write.js +117 -0
  309. package/dist/services/ingest-trace.d.ts +32 -0
  310. package/dist/services/ingest-trace.js +60 -0
  311. package/dist/services/input-sanitizer.d.ts +41 -0
  312. package/dist/services/input-sanitizer.js +135 -0
  313. package/dist/services/iterative-retrieval.d.ts +26 -0
  314. package/dist/services/iterative-retrieval.js +139 -0
  315. package/dist/services/keyword-expansion.d.ts +10 -0
  316. package/dist/services/keyword-expansion.js +26 -0
  317. package/dist/services/lesson-service.d.ts +68 -0
  318. package/dist/services/lesson-service.js +178 -0
  319. package/dist/services/literal-extractor.d.ts +16 -0
  320. package/dist/services/literal-extractor.js +74 -0
  321. package/dist/services/literal-list-protection.d.ts +17 -0
  322. package/dist/services/literal-list-protection.js +134 -0
  323. package/dist/services/literal-query-expansion.d.ts +20 -0
  324. package/dist/services/literal-query-expansion.js +181 -0
  325. package/dist/services/llm.d.ts +61 -0
  326. package/dist/services/llm.js +265 -0
  327. package/dist/services/memcell-projection.d.ts +17 -0
  328. package/dist/services/memcell-projection.js +41 -0
  329. package/dist/services/memory-audn.d.ts +43 -0
  330. package/dist/services/memory-audn.js +419 -0
  331. package/dist/services/memory-crud.d.ts +93 -0
  332. package/dist/services/memory-crud.js +255 -0
  333. package/dist/services/memory-ingest.d.ts +21 -0
  334. package/dist/services/memory-ingest.js +249 -0
  335. package/dist/services/memory-lifecycle.d.ts +75 -0
  336. package/dist/services/memory-lifecycle.js +108 -0
  337. package/dist/services/memory-lineage.d.ts +181 -0
  338. package/dist/services/memory-lineage.js +232 -0
  339. package/dist/services/memory-network.d.ts +40 -0
  340. package/dist/services/memory-network.js +75 -0
  341. package/dist/services/memory-search-types.d.ts +25 -0
  342. package/dist/services/memory-search-types.js +10 -0
  343. package/dist/services/memory-search.d.ts +48 -0
  344. package/dist/services/memory-search.js +505 -0
  345. package/dist/services/memory-service-types.d.ts +371 -0
  346. package/dist/services/memory-service-types.js +8 -0
  347. package/dist/services/memory-service.d.ts +152 -0
  348. package/dist/services/memory-service.js +225 -0
  349. package/dist/services/memory-storage.d.ts +33 -0
  350. package/dist/services/memory-storage.js +328 -0
  351. package/dist/services/msr-aggregator.d.ts +38 -0
  352. package/dist/services/msr-aggregator.js +97 -0
  353. package/dist/services/msr-detector.d.ts +35 -0
  354. package/dist/services/msr-detector.js +65 -0
  355. package/dist/services/namespace-retrieval.d.ts +60 -0
  356. package/dist/services/namespace-retrieval.js +180 -0
  357. package/dist/services/observation-date-extraction.d.ts +12 -0
  358. package/dist/services/observation-date-extraction.js +50 -0
  359. package/dist/services/observation-service.d.ts +27 -0
  360. package/dist/services/observation-service.js +84 -0
  361. package/dist/services/packaging-observability.d.ts +29 -0
  362. package/dist/services/packaging-observability.js +146 -0
  363. package/dist/services/query-expansion.d.ts +83 -0
  364. package/dist/services/query-expansion.js +242 -0
  365. package/dist/services/query-keyword-matches.d.ts +6 -0
  366. package/dist/services/query-keyword-matches.js +56 -0
  367. package/dist/services/query-term-visibility.d.ts +28 -0
  368. package/dist/services/query-term-visibility.js +100 -0
  369. package/dist/services/quick-extraction.d.ts +25 -0
  370. package/dist/services/quick-extraction.js +431 -0
  371. package/dist/services/quoted-entity-extraction.d.ts +10 -0
  372. package/dist/services/quoted-entity-extraction.js +161 -0
  373. package/dist/services/raw-storage-reconciler-backoff.d.ts +8 -0
  374. package/dist/services/raw-storage-reconciler-backoff.js +14 -0
  375. package/dist/services/raw-storage-reconciler-scheduler.d.ts +29 -0
  376. package/dist/services/raw-storage-reconciler-scheduler.js +43 -0
  377. package/dist/services/raw-storage-reconciler.d.ts +71 -0
  378. package/dist/services/raw-storage-reconciler.js +278 -0
  379. package/dist/services/recap-builder.d.ts +49 -0
  380. package/dist/services/recap-builder.js +157 -0
  381. package/dist/services/reflect-jobs.d.ts +23 -0
  382. package/dist/services/reflect-jobs.js +36 -0
  383. package/dist/services/reflect-prompts.d.ts +71 -0
  384. package/dist/services/reflect-prompts.js +99 -0
  385. package/dist/services/reflect-retrieval.d.ts +33 -0
  386. package/dist/services/reflect-retrieval.js +30 -0
  387. package/dist/services/reflect.d.ts +49 -0
  388. package/dist/services/reflect.js +84 -0
  389. package/dist/services/relative-temporal.d.ts +14 -0
  390. package/dist/services/relative-temporal.js +163 -0
  391. package/dist/services/relevance-policy.d.ts +37 -0
  392. package/dist/services/relevance-policy.js +109 -0
  393. package/dist/services/rerank.d.ts +32 -0
  394. package/dist/services/rerank.js +118 -0
  395. package/dist/services/reranker.d.ts +20 -0
  396. package/dist/services/reranker.js +99 -0
  397. package/dist/services/retrieval-channel-rules.d.ts +34 -0
  398. package/dist/services/retrieval-channel-rules.js +41 -0
  399. package/dist/services/retrieval-config-overlay.d.ts +36 -0
  400. package/dist/services/retrieval-config-overlay.js +44 -0
  401. package/dist/services/retrieval-format.d.ts +119 -0
  402. package/dist/services/retrieval-format.js +559 -0
  403. package/dist/services/retrieval-policy.d.ts +69 -0
  404. package/dist/services/retrieval-policy.js +275 -0
  405. package/dist/services/retrieval-profiles.d.ts +37 -0
  406. package/dist/services/retrieval-profiles.js +90 -0
  407. package/dist/services/retrieval-side-effects.d.ts +14 -0
  408. package/dist/services/retrieval-side-effects.js +26 -0
  409. package/dist/services/retrieval-trace.d.ts +108 -0
  410. package/dist/services/retrieval-trace.js +147 -0
  411. package/dist/services/rrf-fusion.d.ts +18 -0
  412. package/dist/services/rrf-fusion.js +34 -0
  413. package/dist/services/search-pipeline.d.ts +71 -0
  414. package/dist/services/search-pipeline.js +788 -0
  415. package/dist/services/session-date.d.ts +20 -0
  416. package/dist/services/session-date.js +61 -0
  417. package/dist/services/session-packaging.d.ts +53 -0
  418. package/dist/services/session-packaging.js +182 -0
  419. package/dist/services/session-summary-generator.d.ts +53 -0
  420. package/dist/services/session-summary-generator.js +134 -0
  421. package/dist/services/specialists/cr-specialist.d.ts +52 -0
  422. package/dist/services/specialists/cr-specialist.js +121 -0
  423. package/dist/services/specialists/dispatch.d.ts +53 -0
  424. package/dist/services/specialists/dispatch.js +102 -0
  425. package/dist/services/specialists/ie-ku-specialist.d.ts +37 -0
  426. package/dist/services/specialists/ie-ku-specialist.js +63 -0
  427. package/dist/services/specialists/msr-specialist.d.ts +61 -0
  428. package/dist/services/specialists/msr-specialist.js +162 -0
  429. package/dist/services/specialists/tr-specialist.d.ts +37 -0
  430. package/dist/services/specialists/tr-specialist.js +146 -0
  431. package/dist/services/storage-key-prefix.d.ts +42 -0
  432. package/dist/services/storage-key-prefix.js +45 -0
  433. package/dist/services/storage-put-recovery.d.ts +71 -0
  434. package/dist/services/storage-put-recovery.js +269 -0
  435. package/dist/services/storage-service-errors.d.ts +124 -0
  436. package/dist/services/storage-service-errors.js +189 -0
  437. package/dist/services/storage-service.d.ts +176 -0
  438. package/dist/services/storage-service.js +423 -0
  439. package/dist/services/subject-aware-ranking.d.ts +19 -0
  440. package/dist/services/subject-aware-ranking.js +161 -0
  441. package/dist/services/supplemental-extraction.d.ts +7 -0
  442. package/dist/services/supplemental-extraction.js +116 -0
  443. package/dist/services/tbc-execution.d.ts +49 -0
  444. package/dist/services/tbc-execution.js +284 -0
  445. package/dist/services/temporal-classifier.d.ts +56 -0
  446. package/dist/services/temporal-classifier.js +94 -0
  447. package/dist/services/temporal-endpoint-evidence.d.ts +12 -0
  448. package/dist/services/temporal-endpoint-evidence.js +313 -0
  449. package/dist/services/temporal-fingerprint.d.ts +6 -0
  450. package/dist/services/temporal-fingerprint.js +12 -0
  451. package/dist/services/temporal-format.d.ts +9 -0
  452. package/dist/services/temporal-format.js +21 -0
  453. package/dist/services/temporal-intent.d.ts +39 -0
  454. package/dist/services/temporal-intent.js +78 -0
  455. package/dist/services/temporal-query-constraints.d.ts +16 -0
  456. package/dist/services/temporal-query-constraints.js +107 -0
  457. package/dist/services/temporal-query-expansion.d.ts +14 -0
  458. package/dist/services/temporal-query-expansion.js +131 -0
  459. package/dist/services/temporal-rerank.d.ts +22 -0
  460. package/dist/services/temporal-rerank.js +47 -0
  461. package/dist/services/temporal-result-protection.d.ts +7 -0
  462. package/dist/services/temporal-result-protection.js +60 -0
  463. package/dist/services/temporal-state-write.d.ts +57 -0
  464. package/dist/services/temporal-state-write.js +45 -0
  465. package/dist/services/tiered-context.d.ts +87 -0
  466. package/dist/services/tiered-context.js +214 -0
  467. package/dist/services/tiered-loading.d.ts +88 -0
  468. package/dist/services/tiered-loading.js +263 -0
  469. package/dist/services/timeline-pack.d.ts +36 -0
  470. package/dist/services/timeline-pack.js +50 -0
  471. package/dist/services/timing.d.ts +13 -0
  472. package/dist/services/timing.js +72 -0
  473. package/dist/services/tll-augmentation.d.ts +20 -0
  474. package/dist/services/tll-augmentation.js +125 -0
  475. package/dist/services/tll-retrieval.d.ts +55 -0
  476. package/dist/services/tll-retrieval.js +101 -0
  477. package/dist/services/topic-abstraction.d.ts +36 -0
  478. package/dist/services/topic-abstraction.js +105 -0
  479. package/dist/services/trust-scoring.d.ts +43 -0
  480. package/dist/services/trust-scoring.js +89 -0
  481. package/dist/services/typed-belief-calculus.d.ts +126 -0
  482. package/dist/services/typed-belief-calculus.js +204 -0
  483. package/dist/services/upload-config.d.ts +34 -0
  484. package/dist/services/upload-config.js +23 -0
  485. package/dist/services/upload-decision.d.ts +65 -0
  486. package/dist/services/upload-decision.js +98 -0
  487. package/dist/services/upload-helpers.d.ts +107 -0
  488. package/dist/services/upload-helpers.js +148 -0
  489. package/dist/services/user-profile-builder.d.ts +22 -0
  490. package/dist/services/user-profile-builder.js +109 -0
  491. package/dist/services/voyage-embedding.d.ts +22 -0
  492. package/dist/services/voyage-embedding.js +77 -0
  493. package/dist/services/write-security.d.ts +31 -0
  494. package/dist/services/write-security.js +64 -0
  495. package/dist/storage/artifact-public-redaction.d.ts +34 -0
  496. package/dist/storage/artifact-public-redaction.js +83 -0
  497. package/dist/storage/cleanup.d.ts +103 -0
  498. package/dist/storage/cleanup.js +138 -0
  499. package/dist/storage/codec-factory.d.ts +17 -0
  500. package/dist/storage/codec-factory.js +33 -0
  501. package/dist/storage/codecs/aes-gcm-codec.d.ts +44 -0
  502. package/dist/storage/codecs/aes-gcm-codec.js +108 -0
  503. package/dist/storage/codecs/noop-codec.d.ts +16 -0
  504. package/dist/storage/codecs/noop-codec.js +23 -0
  505. package/dist/storage/factory.d.ts +44 -0
  506. package/dist/storage/factory.js +99 -0
  507. package/dist/storage/filecoin-cid-validation.d.ts +82 -0
  508. package/dist/storage/filecoin-cid-validation.js +122 -0
  509. package/dist/storage/filecoin-public-metadata.d.ts +73 -0
  510. package/dist/storage/filecoin-public-metadata.js +110 -0
  511. package/dist/storage/local-fs-store.d.ts +39 -0
  512. package/dist/storage/local-fs-store.js +145 -0
  513. package/dist/storage/pointer-uri-allowlist.d.ts +38 -0
  514. package/dist/storage/pointer-uri-allowlist.js +70 -0
  515. package/dist/storage/provider-metadata-projection.d.ts +27 -0
  516. package/dist/storage/provider-metadata-projection.js +68 -0
  517. package/dist/storage/providers/filecoin/backend.d.ts +42 -0
  518. package/dist/storage/providers/filecoin/backend.js +250 -0
  519. package/dist/storage/providers/filecoin/config.d.ts +70 -0
  520. package/dist/storage/providers/filecoin/config.js +275 -0
  521. package/dist/storage/providers/filecoin/errors.d.ts +45 -0
  522. package/dist/storage/providers/filecoin/errors.js +56 -0
  523. package/dist/storage/providers/filecoin/filecoin-pin-car.d.ts +78 -0
  524. package/dist/storage/providers/filecoin/filecoin-pin-car.js +155 -0
  525. package/dist/storage/providers/filecoin/filecoin-pin-client.d.ts +92 -0
  526. package/dist/storage/providers/filecoin/filecoin-pin-client.js +199 -0
  527. package/dist/storage/providers/filecoin/filecoin-pin-mapping.d.ts +58 -0
  528. package/dist/storage/providers/filecoin/filecoin-pin-mapping.js +103 -0
  529. package/dist/storage/providers/filecoin/filecoin-pin-timeout.d.ts +30 -0
  530. package/dist/storage/providers/filecoin/filecoin-pin-timeout.js +53 -0
  531. package/dist/storage/providers/filecoin/filecoin-pin-vendor.d.ts +111 -0
  532. package/dist/storage/providers/filecoin/filecoin-pin-vendor.js +87 -0
  533. package/dist/storage/providers/filecoin/hints.d.ts +71 -0
  534. package/dist/storage/providers/filecoin/hints.js +123 -0
  535. package/dist/storage/providers/filecoin/index.d.ts +51 -0
  536. package/dist/storage/providers/filecoin/index.js +103 -0
  537. package/dist/storage/providers/filecoin/ipfs-cid.d.ts +50 -0
  538. package/dist/storage/providers/filecoin/ipfs-cid.js +64 -0
  539. package/dist/storage/providers/filecoin/metadata.d.ts +72 -0
  540. package/dist/storage/providers/filecoin/metadata.js +137 -0
  541. package/dist/storage/providers/filecoin/piece-cid.d.ts +48 -0
  542. package/dist/storage/providers/filecoin/piece-cid.js +57 -0
  543. package/dist/storage/providers/filecoin/provider-client.d.ts +234 -0
  544. package/dist/storage/providers/filecoin/provider-client.js +27 -0
  545. package/dist/storage/providers/filecoin/readiness.d.ts +62 -0
  546. package/dist/storage/providers/filecoin/readiness.js +85 -0
  547. package/dist/storage/providers/filecoin/retriever.d.ts +82 -0
  548. package/dist/storage/providers/filecoin/retriever.js +63 -0
  549. package/dist/storage/providers/filecoin/skeleton-client.d.ts +36 -0
  550. package/dist/storage/providers/filecoin/skeleton-client.js +55 -0
  551. package/dist/storage/providers/filecoin/synapse-client.d.ts +169 -0
  552. package/dist/storage/providers/filecoin/synapse-client.js +343 -0
  553. package/dist/storage/providers/filecoin/synapse-construction.d.ts +26 -0
  554. package/dist/storage/providers/filecoin/synapse-construction.js +47 -0
  555. package/dist/storage/providers/filecoin/synapse-error-mapping.d.ts +23 -0
  556. package/dist/storage/providers/filecoin/synapse-error-mapping.js +49 -0
  557. package/dist/storage/providers/filecoin/synapse-readiness.d.ts +37 -0
  558. package/dist/storage/providers/filecoin/synapse-readiness.js +231 -0
  559. package/dist/storage/providers/filecoin/uri.d.ts +49 -0
  560. package/dist/storage/providers/filecoin/uri.js +84 -0
  561. package/dist/storage/providers/filecoin/verified-fetch-lifecycle.d.ts +77 -0
  562. package/dist/storage/providers/filecoin/verified-fetch-lifecycle.js +196 -0
  563. package/dist/storage/providers/filecoin/verified-fetch-retriever.d.ts +54 -0
  564. package/dist/storage/providers/filecoin/verified-fetch-retriever.js +81 -0
  565. package/dist/storage/providers/filecoin/verified-fetch-vendor.d.ts +71 -0
  566. package/dist/storage/providers/filecoin/verified-fetch-vendor.js +94 -0
  567. package/dist/storage/raw-content-codec.d.ts +89 -0
  568. package/dist/storage/raw-content-codec.js +47 -0
  569. package/dist/storage/raw-content-store-backend-adapter.d.ts +28 -0
  570. package/dist/storage/raw-content-store-backend-adapter.js +67 -0
  571. package/dist/storage/raw-content-store.d.ts +228 -0
  572. package/dist/storage/raw-content-store.js +27 -0
  573. package/dist/storage/s3-store.d.ts +42 -0
  574. package/dist/storage/s3-store.js +181 -0
  575. package/dist/storage/storage-backend-registry.d.ts +58 -0
  576. package/dist/storage/storage-backend-registry.js +56 -0
  577. package/dist/storage/storage-backend.d.ts +82 -0
  578. package/dist/storage/storage-backend.js +14 -0
  579. package/dist/storage/storage-capabilities.d.ts +56 -0
  580. package/dist/storage/storage-capabilities.js +170 -0
  581. package/dist/storage/store-registry.d.ts +67 -0
  582. package/dist/storage/store-registry.js +77 -0
  583. package/dist/vector-math.d.ts +15 -0
  584. package/dist/vector-math.js +31 -0
  585. package/dist/xml-escape.d.ts +5 -0
  586. package/dist/xml-escape.js +7 -0
  587. package/openapi.json +15395 -0
  588. package/openapi.yaml +10794 -0
  589. package/package.json +119 -0
@@ -0,0 +1,65 @@
1
+ export class EntityAttributesRepository {
2
+ pool;
3
+ constructor(pool) {
4
+ this.pool = pool;
5
+ }
6
+ async bulkInsert(rows) {
7
+ if (rows.length === 0)
8
+ return 0;
9
+ const values = [];
10
+ const placeholders = [];
11
+ rows.forEach((r, i) => {
12
+ const base = i * 7;
13
+ placeholders.push(`($${base + 1},$${base + 2},$${base + 3},$${base + 4},$${base + 5},$${base + 6},$${base + 7})`);
14
+ values.push(r.userId, r.entityName, r.attributeKey, r.attributeValue, r.valueType, r.sourceMemoryId ?? null, r.observedAt ?? new Date());
15
+ });
16
+ const sql = 'INSERT INTO entity_attributes (user_id, entity_name, attribute_key, attribute_value, value_type, source_memory_id, observed_at) VALUES ' +
17
+ placeholders.join(',');
18
+ const result = await this.pool.query(sql, values);
19
+ return result.rowCount ?? 0;
20
+ }
21
+ /** Lookup attributes by entity name (case-insensitive). Returns most-recent first. */
22
+ async findByEntity(userId, entityName, limit = 20) {
23
+ const result = await this.pool.query(`SELECT id, user_id, entity_name, attribute_key, attribute_value, value_type,
24
+ source_memory_id, observed_at, created_at
25
+ FROM entity_attributes
26
+ WHERE user_id = $1 AND lower(entity_name) = lower($2)
27
+ ORDER BY observed_at DESC
28
+ LIMIT $3`, [userId, entityName, limit]);
29
+ return result.rows;
30
+ }
31
+ /** Lookup attributes by attribute key (case-insensitive). Useful for "how many X" queries. */
32
+ async findByAttribute(userId, attributeKey, limit = 20) {
33
+ const result = await this.pool.query(`SELECT id, user_id, entity_name, attribute_key, attribute_value, value_type,
34
+ source_memory_id, observed_at, created_at
35
+ FROM entity_attributes
36
+ WHERE user_id = $1 AND lower(attribute_key) = lower($2)
37
+ ORDER BY observed_at DESC
38
+ LIMIT $3`, [userId, attributeKey, limit]);
39
+ return result.rows;
40
+ }
41
+ /** Combined lookup: entity OR attribute matches; useful when query mentions both. */
42
+ async findByEntityOrAttribute(userId, tokens, limit = 20) {
43
+ if (tokens.length === 0)
44
+ return [];
45
+ const params = [userId];
46
+ const orClauses = [];
47
+ tokens.forEach((t) => {
48
+ params.push(t.toLowerCase());
49
+ orClauses.push(`lower(entity_name) = $${params.length} OR lower(attribute_key) = $${params.length}`);
50
+ });
51
+ params.push(limit);
52
+ const sql = `SELECT id, user_id, entity_name, attribute_key, attribute_value, value_type,
53
+ source_memory_id, observed_at, created_at
54
+ FROM entity_attributes
55
+ WHERE user_id = $1 AND (${orClauses.join(' OR ')})
56
+ ORDER BY observed_at DESC
57
+ LIMIT $${params.length}`;
58
+ const result = await this.pool.query(sql, params);
59
+ return result.rows;
60
+ }
61
+ async deleteAllForUser(userId) {
62
+ const result = await this.pool.query('DELETE FROM entity_attributes WHERE user_id = $1', [userId]);
63
+ return result.rowCount ?? 0;
64
+ }
65
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Repository for entity co-occurrence graph operations.
3
+ * Stores pairwise entity edges per memory and supports neighbor lookups
4
+ * for spreading activation retrieval.
5
+ */
6
+ import pg from 'pg';
7
+ export interface EntityEdge {
8
+ entityA: string;
9
+ entityB: string;
10
+ memoryId: string;
11
+ }
12
+ export interface NeighborResult {
13
+ entity: string;
14
+ memoryId: string;
15
+ }
16
+ /** Store pairwise entity edges for a single memory. */
17
+ export declare function storeEntityEdges(pool: pg.Pool, userId: string, memoryId: string, entities: string[]): Promise<number>;
18
+ /** Remove all entity edges for a memory (used before UPDATE/SUPERSEDE). */
19
+ export declare function removeEntityEdges(pool: pg.Pool, memoryId: string): Promise<void>;
20
+ /**
21
+ * Find all neighbors of a set of entities (one hop).
22
+ * Returns entities connected to any seed entity, along with which memory links them.
23
+ */
24
+ export declare function findNeighbors(pool: pg.Pool, userId: string, seedEntities: string[]): Promise<NeighborResult[]>;
25
+ /**
26
+ * Find all memory IDs linked to a set of entities (direct lookup, no traversal).
27
+ * Used to score memories by accumulated activation after spreading.
28
+ */
29
+ export declare function findMemoriesForEntities(pool: pg.Pool, userId: string, entities: string[]): Promise<Array<{
30
+ memoryId: string;
31
+ entity: string;
32
+ }>>;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Repository for entity co-occurrence graph operations.
3
+ * Stores pairwise entity edges per memory and supports neighbor lookups
4
+ * for spreading activation retrieval.
5
+ */
6
+ /** Store pairwise entity edges for a single memory. */
7
+ export async function storeEntityEdges(pool, userId, memoryId, entities) {
8
+ if (entities.length < 2)
9
+ return 0;
10
+ const pairs = buildCanonicalPairs(entities);
11
+ if (pairs.length === 0)
12
+ return 0;
13
+ const values = [];
14
+ const placeholders = [];
15
+ let paramIndex = 1;
16
+ for (const [a, b] of pairs) {
17
+ placeholders.push(`($${paramIndex}, $${paramIndex + 1}, $${paramIndex + 2}, $${paramIndex + 3})`);
18
+ values.push(userId, a, b, memoryId);
19
+ paramIndex += 4;
20
+ }
21
+ const sql = `
22
+ INSERT INTO entity_edges (user_id, entity_a, entity_b, memory_id)
23
+ VALUES ${placeholders.join(', ')}
24
+ ON CONFLICT (user_id, entity_a, entity_b, memory_id) DO NOTHING
25
+ `;
26
+ await pool.query(sql, values);
27
+ return pairs.length;
28
+ }
29
+ /** Remove all entity edges for a memory (used before UPDATE/SUPERSEDE). */
30
+ export async function removeEntityEdges(pool, memoryId) {
31
+ await pool.query('DELETE FROM entity_edges WHERE memory_id = $1', [memoryId]);
32
+ }
33
+ /**
34
+ * Find all neighbors of a set of entities (one hop).
35
+ * Returns entities connected to any seed entity, along with which memory links them.
36
+ */
37
+ export async function findNeighbors(pool, userId, seedEntities) {
38
+ if (seedEntities.length === 0)
39
+ return [];
40
+ const result = await pool.query(`SELECT DISTINCT
41
+ CASE WHEN entity_a = ANY($2) THEN entity_b ELSE entity_a END AS entity,
42
+ e.memory_id
43
+ FROM entity_edges e
44
+ JOIN memories m ON m.id = e.memory_id AND m.deleted_at IS NULL
45
+ WHERE e.user_id = $1
46
+ AND (e.entity_a = ANY($2) OR e.entity_b = ANY($2))`, [userId, seedEntities]);
47
+ return result.rows;
48
+ }
49
+ /**
50
+ * Find all memory IDs linked to a set of entities (direct lookup, no traversal).
51
+ * Used to score memories by accumulated activation after spreading.
52
+ */
53
+ export async function findMemoriesForEntities(pool, userId, entities) {
54
+ if (entities.length === 0)
55
+ return [];
56
+ const result = await pool.query(`SELECT DISTINCT e.memory_id AS "memoryId",
57
+ CASE WHEN e.entity_a = ANY($2) THEN e.entity_a ELSE e.entity_b END AS entity
58
+ FROM entity_edges e
59
+ JOIN memories m ON m.id = e.memory_id AND m.deleted_at IS NULL
60
+ WHERE e.user_id = $1
61
+ AND (e.entity_a = ANY($2) OR e.entity_b = ANY($2))`, [userId, entities]);
62
+ return result.rows;
63
+ }
64
+ /** Delete all entity edges for a user (used in eval cleanup). */
65
+ async function deleteAllEntityEdges(pool, userId) {
66
+ if (userId) {
67
+ await pool.query('DELETE FROM entity_edges WHERE user_id = $1', [userId]);
68
+ }
69
+ else {
70
+ await pool.query('TRUNCATE entity_edges CASCADE');
71
+ }
72
+ }
73
+ /**
74
+ * Build canonical pairs from entity list.
75
+ * Ensures entity_a < entity_b for consistent deduplication.
76
+ */
77
+ function buildCanonicalPairs(entities) {
78
+ const pairs = [];
79
+ for (let i = 0; i < entities.length; i++) {
80
+ for (let j = i + 1; j < entities.length; j++) {
81
+ const a = entities[i];
82
+ const b = entities[j];
83
+ pairs.push(a < b ? [a, b] : [b, a]);
84
+ }
85
+ }
86
+ return pairs;
87
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Repository for first-mention events — per-user chronological list of
3
+ * "the first time topic X was introduced in conversation."
4
+ *
5
+ * Distinct from atomic facts (claims) and memories (chunks). The grain
6
+ * matches BEAM event-ordering rubrics: which aspects did the user bring
7
+ * up, and in what order.
8
+ *
9
+ * Entries are produced post-ingest by FirstMentionService via a single
10
+ * LLM scan of the full conversation. Storage is idempotent on
11
+ * (user_id, memory_id) so re-running the extractor does not duplicate.
12
+ */
13
+ import pg from 'pg';
14
+ export interface FirstMentionEvent {
15
+ topic: string;
16
+ turnId: number;
17
+ memoryId: string;
18
+ anchorDate: Date | null;
19
+ positionInConversation: number;
20
+ }
21
+ export declare class FirstMentionRepository {
22
+ private pool;
23
+ constructor(pool: pg.Pool);
24
+ /**
25
+ * Idempotent batch INSERT. Conflicts on (user_id, memory_id) are
26
+ * silently dropped, so re-running the extractor for the same
27
+ * conversation does not produce duplicate rows.
28
+ */
29
+ store(userId: string, sourceSite: string, events: FirstMentionEvent[]): Promise<void>;
30
+ /**
31
+ * Look up a single first-mention event by memory_id.
32
+ * Returns null if no event is associated with the memory.
33
+ */
34
+ getByMemoryId(userId: string, memoryId: string): Promise<FirstMentionEvent | null>;
35
+ /**
36
+ * List all first-mention events for a user, ordered by
37
+ * position_in_conversation ASC. Used by EO/MSR retrieval to surface
38
+ * the chronological topic-introduction list to the answer generator.
39
+ */
40
+ list(userId: string, limit?: number): Promise<FirstMentionEvent[]>;
41
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Repository for first-mention events — per-user chronological list of
3
+ * "the first time topic X was introduced in conversation."
4
+ *
5
+ * Distinct from atomic facts (claims) and memories (chunks). The grain
6
+ * matches BEAM event-ordering rubrics: which aspects did the user bring
7
+ * up, and in what order.
8
+ *
9
+ * Entries are produced post-ingest by FirstMentionService via a single
10
+ * LLM scan of the full conversation. Storage is idempotent on
11
+ * (user_id, memory_id) so re-running the extractor does not duplicate.
12
+ */
13
+ export class FirstMentionRepository {
14
+ pool;
15
+ constructor(pool) {
16
+ this.pool = pool;
17
+ }
18
+ /**
19
+ * Idempotent batch INSERT. Conflicts on (user_id, memory_id) are
20
+ * silently dropped, so re-running the extractor for the same
21
+ * conversation does not produce duplicate rows.
22
+ */
23
+ async store(userId, sourceSite, events) {
24
+ if (events.length === 0)
25
+ return;
26
+ const values = [];
27
+ const params = [];
28
+ let p = 1;
29
+ for (const ev of events) {
30
+ values.push(`($${p}, $${p + 1}, $${p + 2}, $${p + 3}, $${p + 4}, $${p + 5}, $${p + 6})`);
31
+ params.push(userId, ev.topic, ev.turnId, ev.memoryId, ev.anchorDate, ev.positionInConversation, sourceSite);
32
+ p += 7;
33
+ }
34
+ await this.pool.query(`INSERT INTO first_mention_events
35
+ (user_id, topic, turn_id, memory_id, anchor_date,
36
+ position_in_conversation, source_site)
37
+ VALUES ${values.join(', ')}
38
+ ON CONFLICT (user_id, memory_id) DO NOTHING`, params);
39
+ }
40
+ /**
41
+ * Look up a single first-mention event by memory_id.
42
+ * Returns null if no event is associated with the memory.
43
+ */
44
+ async getByMemoryId(userId, memoryId) {
45
+ const result = await this.pool.query(`SELECT topic, turn_id, memory_id, anchor_date, position_in_conversation
46
+ FROM first_mention_events
47
+ WHERE user_id = $1 AND memory_id = $2
48
+ LIMIT 1`, [userId, memoryId]);
49
+ if (result.rows.length === 0)
50
+ return null;
51
+ const row = result.rows[0];
52
+ return {
53
+ topic: row.topic,
54
+ turnId: row.turn_id,
55
+ memoryId: row.memory_id,
56
+ anchorDate: row.anchor_date,
57
+ positionInConversation: row.position_in_conversation,
58
+ };
59
+ }
60
+ /**
61
+ * List all first-mention events for a user, ordered by
62
+ * position_in_conversation ASC. Used by EO/MSR retrieval to surface
63
+ * the chronological topic-introduction list to the answer generator.
64
+ */
65
+ async list(userId, limit = 100) {
66
+ const result = await this.pool.query(`SELECT topic, turn_id, memory_id, anchor_date, position_in_conversation
67
+ FROM first_mention_events
68
+ WHERE user_id = $1
69
+ ORDER BY position_in_conversation ASC
70
+ LIMIT $2`, [userId, limit]);
71
+ return result.rows.map((row) => ({
72
+ topic: row.topic,
73
+ turnId: row.turn_id,
74
+ memoryId: row.memory_id,
75
+ anchorDate: row.anchor_date,
76
+ positionInConversation: row.position_in_conversation,
77
+ }));
78
+ }
79
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Lesson repository — CRUD and similarity search for detected failure patterns.
3
+ *
4
+ * Lessons capture attack/failure patterns from sanitization blocks, trust
5
+ * violations, contradictions, and user reports. Pre-retrieval checks query
6
+ * lessons by embedding similarity to block known-bad patterns before they
7
+ * reach the user.
8
+ *
9
+ * Phase 6 (A-MemGuard): self-reinforcing defense via pattern accumulation.
10
+ */
11
+ import pg from 'pg';
12
+ export type LessonType = 'injection_blocked' | 'false_memory' | 'contradiction_pattern' | 'user_reported' | 'consensus_violation' | 'trust_violation';
13
+ export type LessonSeverity = 'low' | 'medium' | 'high' | 'critical';
14
+ export interface LessonRow {
15
+ id: string;
16
+ user_id: string;
17
+ lesson_type: LessonType;
18
+ pattern: string;
19
+ embedding: number[];
20
+ source_memory_ids: string[];
21
+ source_query: string | null;
22
+ severity: LessonSeverity;
23
+ active: boolean;
24
+ metadata: Record<string, unknown>;
25
+ created_at: Date;
26
+ }
27
+ export interface CreateLessonInput {
28
+ userId: string;
29
+ lessonType: LessonType;
30
+ pattern: string;
31
+ embedding: number[];
32
+ sourceMemoryIds?: string[];
33
+ sourceQuery?: string;
34
+ severity?: LessonSeverity;
35
+ metadata?: Record<string, unknown>;
36
+ }
37
+ export interface LessonMatch {
38
+ lesson: LessonRow;
39
+ similarity: number;
40
+ }
41
+ export declare class LessonRepository {
42
+ private pool;
43
+ constructor(pool: pg.Pool);
44
+ createLesson(input: CreateLessonInput): Promise<string>;
45
+ findSimilarLessons(userId: string, embedding: number[], threshold: number, limit?: number): Promise<LessonMatch[]>;
46
+ getLessonsByUser(userId: string, activeOnly?: boolean): Promise<LessonRow[]>;
47
+ getLessonsByType(userId: string, lessonType: LessonType): Promise<LessonRow[]>;
48
+ deactivateLesson(userId: string, lessonId: string): Promise<void>;
49
+ countActiveLessons(userId: string): Promise<number>;
50
+ deleteAll(): Promise<void>;
51
+ }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Lesson repository — CRUD and similarity search for detected failure patterns.
3
+ *
4
+ * Lessons capture attack/failure patterns from sanitization blocks, trust
5
+ * violations, contradictions, and user reports. Pre-retrieval checks query
6
+ * lessons by embedding similarity to block known-bad patterns before they
7
+ * reach the user.
8
+ *
9
+ * Phase 6 (A-MemGuard): self-reinforcing defense via pattern accumulation.
10
+ */
11
+ import pgvector from 'pgvector/pg';
12
+ import { config } from '../config.js';
13
+ export class LessonRepository {
14
+ pool;
15
+ constructor(pool) {
16
+ this.pool = pool;
17
+ }
18
+ async createLesson(input) {
19
+ const result = await this.pool.query(`INSERT INTO lessons (user_id, lesson_type, pattern, embedding, source_memory_ids, source_query, severity, metadata)
20
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
21
+ RETURNING id`, [
22
+ input.userId,
23
+ input.lessonType,
24
+ input.pattern,
25
+ pgvector.toSql(input.embedding),
26
+ input.sourceMemoryIds ?? [],
27
+ input.sourceQuery ?? null,
28
+ input.severity ?? 'medium',
29
+ JSON.stringify(input.metadata ?? {}),
30
+ ]);
31
+ return result.rows[0].id;
32
+ }
33
+ async findSimilarLessons(userId, embedding, threshold, limit = 5) {
34
+ const result = await this.pool.query(`SELECT *, 1 - (embedding <=> $1) AS similarity
35
+ FROM lessons
36
+ WHERE user_id = $2 AND active = true
37
+ AND 1 - (embedding <=> $1) >= $3
38
+ ORDER BY similarity DESC
39
+ LIMIT $4`, [pgvector.toSql(embedding), userId, threshold, limit]);
40
+ return result.rows.map((row) => ({
41
+ lesson: parseRow(row),
42
+ similarity: parseFloat(row.similarity),
43
+ }));
44
+ }
45
+ async getLessonsByUser(userId, activeOnly = true) {
46
+ const activeClause = activeOnly ? 'AND active = true' : '';
47
+ const result = await this.pool.query(`SELECT * FROM lessons WHERE user_id = $1 ${activeClause} ORDER BY created_at DESC`, [userId]);
48
+ return result.rows.map(parseRow);
49
+ }
50
+ async getLessonsByType(userId, lessonType) {
51
+ const result = await this.pool.query(`SELECT * FROM lessons WHERE user_id = $1 AND lesson_type = $2 AND active = true ORDER BY created_at DESC`, [userId, lessonType]);
52
+ return result.rows.map(parseRow);
53
+ }
54
+ async deactivateLesson(userId, lessonId) {
55
+ await this.pool.query(`UPDATE lessons SET active = false WHERE id = $1 AND user_id = $2`, [lessonId, userId]);
56
+ }
57
+ async countActiveLessons(userId) {
58
+ const result = await this.pool.query(`SELECT COUNT(*)::int AS count FROM lessons WHERE user_id = $1 AND active = true`, [userId]);
59
+ return result.rows[0].count;
60
+ }
61
+ async deleteAll() {
62
+ await this.pool.query('DELETE FROM lessons');
63
+ }
64
+ }
65
+ function parseRow(row) {
66
+ const rawEmb = row.embedding;
67
+ let embedding;
68
+ if (typeof rawEmb === 'string') {
69
+ embedding = rawEmb.replace(/[\[\]]/g, '').split(',').map(Number);
70
+ }
71
+ else if (Array.isArray(rawEmb)) {
72
+ embedding = rawEmb;
73
+ }
74
+ else {
75
+ embedding = Array(config.embeddingDimensions).fill(0);
76
+ }
77
+ return {
78
+ id: row.id,
79
+ user_id: row.user_id,
80
+ lesson_type: row.lesson_type,
81
+ pattern: row.pattern,
82
+ embedding,
83
+ source_memory_ids: row.source_memory_ids ?? [],
84
+ source_query: row.source_query ?? null,
85
+ severity: row.severity,
86
+ active: row.active,
87
+ metadata: (typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata ?? {}),
88
+ created_at: row.created_at,
89
+ };
90
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Memory link storage and 1-hop traversal queries.
3
+ *
4
+ * Links are bidirectional pairs stored with source_id < target_id to avoid
5
+ * duplicates. Generated at write time when embedding similarity exceeds the
6
+ * configured threshold (Phase 2 roadmap, A-MEM pattern).
7
+ */
8
+ import pg from 'pg';
9
+ import { type SearchResult } from './repository-types.js';
10
+ export interface MemoryLink {
11
+ sourceId: string;
12
+ targetId: string;
13
+ similarity: number;
14
+ }
15
+ export declare function createLinks(pool: pg.Pool, links: MemoryLink[]): Promise<number>;
16
+ export declare function findLinkedMemoryIds(pool: pg.Pool, memoryIds: string[], excludeIds: Set<string>, limit: number): Promise<string[]>;
17
+ export declare function fetchMemoriesByIds(pool: pg.Pool, userId: string, ids: string[], queryEmbedding: number[], referenceTime?: Date, includeExpired?: boolean): Promise<SearchResult[]>;
18
+ export declare function findLinkCandidates(pool: pg.Pool, userId: string, embedding: number[], threshold: number, excludeId: string, limit: number): Promise<Array<{
19
+ id: string;
20
+ similarity: number;
21
+ }>>;
22
+ export declare function findLinkCandidatesWithClient(client: pg.PoolClient, userId: string, embedding: number[], threshold: number, excludeId: string, limit: number): Promise<Array<{
23
+ id: string;
24
+ similarity: number;
25
+ }>>;
26
+ export declare function countLinks(pool: pg.Pool): Promise<number>;
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Memory link storage and 1-hop traversal queries.
3
+ *
4
+ * Links are bidirectional pairs stored with source_id < target_id to avoid
5
+ * duplicates. Generated at write time when embedding similarity exceeds the
6
+ * configured threshold (Phase 2 roadmap, A-MEM pattern).
7
+ */
8
+ import pgvector from 'pgvector/pg';
9
+ import { config } from '../config.js';
10
+ import { normalizeSearchRow } from './repository-types.js';
11
+ export async function createLinks(pool, links) {
12
+ return createLinksWithClient(pool, links);
13
+ }
14
+ async function createLinksWithClient(client, links) {
15
+ if (links.length === 0)
16
+ return 0;
17
+ const deduped = new Map();
18
+ for (const link of links) {
19
+ const [lo, hi] = canonicalPair(link.sourceId, link.targetId);
20
+ const key = `${lo}:${hi}`;
21
+ const existing = deduped.get(key);
22
+ if (!existing || link.similarity > existing.similarity) {
23
+ deduped.set(key, { lo, hi, similarity: link.similarity });
24
+ }
25
+ }
26
+ const values = [];
27
+ const params = [];
28
+ for (const { lo, hi, similarity } of deduped.values()) {
29
+ const offset = params.length;
30
+ values.push(`($${offset + 1}, $${offset + 2}, $${offset + 3})`);
31
+ params.push(lo, hi, similarity);
32
+ }
33
+ const result = await client.query(`INSERT INTO memory_links (source_id, target_id, similarity)
34
+ VALUES ${values.join(', ')}
35
+ ON CONFLICT (source_id, target_id)
36
+ DO UPDATE SET similarity = EXCLUDED.similarity
37
+ RETURNING source_id`, params);
38
+ return result.rowCount ?? 0;
39
+ }
40
+ export async function findLinkedMemoryIds(pool, memoryIds, excludeIds, limit) {
41
+ if (memoryIds.length === 0)
42
+ return [];
43
+ const result = await pool.query(`SELECT DISTINCT links.linked_id, links.similarity FROM (
44
+ SELECT target_id AS linked_id, similarity
45
+ FROM memory_links WHERE source_id = ANY($1)
46
+ UNION ALL
47
+ SELECT source_id AS linked_id, similarity
48
+ FROM memory_links WHERE target_id = ANY($1)
49
+ ) AS links
50
+ JOIN memories m ON m.id = links.linked_id AND m.workspace_id IS NULL
51
+ ORDER BY links.similarity DESC
52
+ LIMIT $2`, [memoryIds, limit * 2]);
53
+ return result.rows
54
+ .map((row) => row.linked_id)
55
+ .filter((id) => !excludeIds.has(id))
56
+ .slice(0, limit);
57
+ }
58
+ export async function fetchMemoriesByIds(pool, userId, ids, queryEmbedding, referenceTime, includeExpired = false) {
59
+ if (ids.length === 0)
60
+ return [];
61
+ const wSim = config.scoringWeightSimilarity;
62
+ const wImp = config.scoringWeightImportance;
63
+ const wRec = config.scoringWeightRecency;
64
+ const refTime = (referenceTime ?? new Date()).toISOString();
65
+ const expiredClause = includeExpired ? '' : 'AND expired_at IS NULL';
66
+ const result = await pool.query(`SELECT *,
67
+ 1 - (embedding <=> $1) AS similarity,
68
+ (
69
+ $4 * (1 - (embedding <=> $1))
70
+ + $5 * importance
71
+ + $6 * EXP(-EXTRACT(EPOCH FROM ($7::timestamptz - last_accessed_at)) / 2592000.0)
72
+ ) * COALESCE(trust_score, 1.0) AS score
73
+ FROM memories
74
+ WHERE id = ANY($2)
75
+ AND user_id = $3
76
+ AND deleted_at IS NULL
77
+ ${expiredClause}
78
+ AND status = 'active'
79
+ AND workspace_id IS NULL
80
+ ORDER BY score DESC`, [pgvector.toSql(queryEmbedding), ids, userId, wSim, wImp, wRec, refTime]);
81
+ return result.rows.map(normalizeSearchRow);
82
+ }
83
+ export async function findLinkCandidates(pool, userId, embedding, threshold, excludeId, limit) {
84
+ return findLinkCandidatesWithClient(pool, userId, embedding, threshold, excludeId, limit);
85
+ }
86
+ export async function findLinkCandidatesWithClient(client, userId, embedding, threshold, excludeId, limit) {
87
+ const result = await client.query(`SELECT id, 1 - (embedding <=> $1) AS similarity
88
+ FROM memories
89
+ WHERE user_id = $2
90
+ AND deleted_at IS NULL
91
+ AND expired_at IS NULL
92
+ AND status = 'active'
93
+ AND id != $3
94
+ AND 1 - (embedding <=> $1) > $4
95
+ ORDER BY similarity DESC
96
+ LIMIT $5`, [pgvector.toSql(embedding), userId, excludeId, threshold, limit]);
97
+ return result.rows;
98
+ }
99
+ export async function countLinks(pool) {
100
+ const result = await pool.query('SELECT COUNT(*)::int AS count FROM memory_links');
101
+ return result.rows[0].count;
102
+ }
103
+ function canonicalPair(a, b) {
104
+ return a < b ? [a, b] : [b, a];
105
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Repository for observation network dirty-marking and regeneration queries.
3
+ * Observations are synthesized entity profiles — regenerated asynchronously
4
+ * when new facts about an entity are ingested.
5
+ */
6
+ import pg from 'pg';
7
+ export declare class ObservationRepository {
8
+ private pool;
9
+ constructor(pool: pg.Pool);
10
+ /** Mark entity subjects as needing observation regeneration. Idempotent. */
11
+ markDirty(userId: string, subjects: string[]): Promise<void>;
12
+ /** Get all pending observation regeneration tasks. */
13
+ getPending(limit?: number): Promise<Array<{
14
+ userId: string;
15
+ subject: string;
16
+ }>>;
17
+ /** Clear a dirty mark after successful regeneration. */
18
+ clearDirty(userId: string, subject: string): Promise<void>;
19
+ /** Find all memory content linked to a subject entity for synthesis. */
20
+ findMemoriesForSubject(userId: string, subject: string): Promise<Array<{
21
+ id: string;
22
+ content: string;
23
+ }>>;
24
+ /** Find the existing observation for a subject (to expire it on regeneration). */
25
+ findExistingObservation(userId: string, subject: string): Promise<string | null>;
26
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Repository for observation network dirty-marking and regeneration queries.
3
+ * Observations are synthesized entity profiles — regenerated asynchronously
4
+ * when new facts about an entity are ingested.
5
+ */
6
+ export class ObservationRepository {
7
+ pool;
8
+ constructor(pool) {
9
+ this.pool = pool;
10
+ }
11
+ /** Mark entity subjects as needing observation regeneration. Idempotent. */
12
+ async markDirty(userId, subjects) {
13
+ if (subjects.length === 0)
14
+ return;
15
+ const values = subjects.map((_, i) => `($1, $${i + 2}, NOW())`).join(', ');
16
+ await this.pool.query(`INSERT INTO observation_dirty (user_id, subject, marked_at) VALUES ${values}
17
+ ON CONFLICT (user_id, subject) DO UPDATE SET marked_at = NOW()`, [userId, ...subjects]);
18
+ }
19
+ /** Get all pending observation regeneration tasks. */
20
+ async getPending(limit = 50) {
21
+ const result = await this.pool.query(`SELECT user_id, subject FROM observation_dirty ORDER BY marked_at ASC LIMIT $1`, [limit]);
22
+ return result.rows.map((r) => ({ userId: r.user_id, subject: r.subject }));
23
+ }
24
+ /** Clear a dirty mark after successful regeneration. */
25
+ async clearDirty(userId, subject) {
26
+ await this.pool.query(`DELETE FROM observation_dirty WHERE user_id = $1 AND subject = $2`, [userId, subject]);
27
+ }
28
+ /** Find all memory content linked to a subject entity for synthesis. */
29
+ async findMemoriesForSubject(userId, subject) {
30
+ const result = await this.pool.query(`SELECT DISTINCT m.id, m.content, m.created_at
31
+ FROM memories m
32
+ JOIN memory_entities me ON me.memory_id = m.id
33
+ JOIN entities e ON e.id = me.entity_id
34
+ WHERE m.user_id = $1
35
+ AND (e.name ILIKE $2 OR $2 = ANY(e.alias_names))
36
+ AND m.deleted_at IS NULL AND m.expired_at IS NULL
37
+ AND m.network != 'observation'
38
+ ORDER BY m.created_at DESC
39
+ LIMIT 50`, [userId, subject]);
40
+ return result.rows;
41
+ }
42
+ /** Find the existing observation for a subject (to expire it on regeneration). */
43
+ async findExistingObservation(userId, subject) {
44
+ const result = await this.pool.query(`SELECT id FROM memories
45
+ WHERE user_id = $1 AND network = 'observation'
46
+ AND observation_subject = $2
47
+ AND deleted_at IS NULL AND expired_at IS NULL
48
+ LIMIT 1`, [userId, subject]);
49
+ return result.rows[0]?.id ?? null;
50
+ }
51
+ }