@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,376 @@
1
+ /**
2
+ * Structured claim/version history repository.
3
+ */
4
+ import pgvector from 'pgvector/pg';
5
+ import { clampImportance, normalizeSearchRow, normalizeVersionRow, } from './repository-types.js';
6
+ export class ClaimRepository {
7
+ pool;
8
+ constructor(pool) {
9
+ this.pool = pool;
10
+ }
11
+ async createClaim(userId, claimType, validAt, slot) {
12
+ return this.createClaimWithClient(this.pool, userId, claimType, validAt, slot);
13
+ }
14
+ async createClaimWithClient(client, userId, claimType, validAt, slot) {
15
+ const result = await client.query(`INSERT INTO memory_claims (
16
+ user_id, claim_type, slot_key, subject_entity_id, relation_type, object_entity_id, valid_at
17
+ )
18
+ VALUES ($1, $2, $3, $4, $5, $6, $7)
19
+ RETURNING id`, [
20
+ userId,
21
+ claimType,
22
+ slot?.slotKey ?? null,
23
+ slot?.subjectEntityId ?? null,
24
+ slot?.relationType ?? null,
25
+ slot?.objectEntityId ?? null,
26
+ validAt ?? new Date(),
27
+ ]);
28
+ return result.rows[0].id;
29
+ }
30
+ async getClaim(id, userId) {
31
+ const result = await this.pool.query(`SELECT * FROM memory_claims WHERE id = $1 AND user_id = $2`, [id, userId]);
32
+ return result.rows[0] ?? null;
33
+ }
34
+ async getActiveClaimTargetBySlot(userId, slotKey) {
35
+ const result = await this.pool.query(`SELECT
36
+ c.id AS claim_id,
37
+ cv.id AS version_id,
38
+ cv.memory_id
39
+ FROM memory_claims c
40
+ JOIN memory_claim_versions cv ON cv.id = c.current_version_id
41
+ WHERE c.user_id = $1
42
+ AND c.slot_key = $2
43
+ AND c.status = 'active'
44
+ AND c.invalid_at IS NULL
45
+ AND cv.memory_id IS NOT NULL
46
+ ORDER BY c.updated_at DESC
47
+ LIMIT 1`, [userId, slotKey]);
48
+ if (result.rows.length === 0)
49
+ return null;
50
+ return {
51
+ claimId: result.rows[0].claim_id,
52
+ versionId: result.rows[0].version_id,
53
+ memoryId: result.rows[0].memory_id,
54
+ };
55
+ }
56
+ async listClaimsMissingSlots(userId) {
57
+ const result = await this.pool.query(`SELECT
58
+ c.id AS claim_id,
59
+ c.user_id,
60
+ cv.memory_id
61
+ FROM memory_claims c
62
+ JOIN memory_claim_versions cv ON cv.id = c.current_version_id
63
+ WHERE c.user_id = $1
64
+ AND c.slot_key IS NULL
65
+ AND c.status = 'active'
66
+ AND c.invalid_at IS NULL
67
+ AND cv.memory_id IS NOT NULL
68
+ ORDER BY c.created_at ASC`, [userId]);
69
+ return result.rows.map((row) => ({
70
+ claimId: row.claim_id,
71
+ userId: row.user_id,
72
+ memoryId: row.memory_id,
73
+ }));
74
+ }
75
+ async updateClaimSlot(userId, claimId, slot) {
76
+ await this.pool.query(`UPDATE memory_claims
77
+ SET slot_key = $1,
78
+ subject_entity_id = $2,
79
+ relation_type = $3,
80
+ object_entity_id = $4,
81
+ updated_at = NOW()
82
+ WHERE id = $5
83
+ AND user_id = $6
84
+ AND slot_key IS NULL`, [
85
+ slot.slotKey,
86
+ slot.subjectEntityId,
87
+ slot.relationType,
88
+ slot.objectEntityId,
89
+ claimId,
90
+ userId,
91
+ ]);
92
+ }
93
+ async setClaimCurrentVersion(claimId, versionId, status = 'active', validAt) {
94
+ await this.setClaimCurrentVersionWithClient(this.pool, claimId, versionId, status, validAt);
95
+ }
96
+ async setClaimCurrentVersionWithClient(client, claimId, versionId, status = 'active', validAt) {
97
+ await client.query(`UPDATE memory_claims
98
+ SET current_version_id = $1,
99
+ status = $2,
100
+ valid_at = CASE
101
+ WHEN $4::timestamptz IS NULL THEN valid_at
102
+ ELSE LEAST(valid_at, $4::timestamptz)
103
+ END,
104
+ invalid_at = NULL,
105
+ invalidated_at = NULL,
106
+ invalidated_by_version_id = NULL,
107
+ updated_at = NOW()
108
+ WHERE id = $3`, [versionId, status, claimId, validAt ?? null]);
109
+ }
110
+ async invalidateClaim(userId, claimId, invalidAt = new Date(), invalidatedByVersionId = null, status = 'deleted') {
111
+ await this.invalidateClaimWithClient(this.pool, userId, claimId, invalidAt, invalidatedByVersionId, status);
112
+ }
113
+ async invalidateClaimWithClient(client, userId, claimId, invalidAt = new Date(), invalidatedByVersionId = null, status = 'deleted') {
114
+ await client.query(`UPDATE memory_claims
115
+ SET current_version_id = NULL,
116
+ status = $1,
117
+ invalid_at = $2,
118
+ invalidated_at = NOW(),
119
+ invalidated_by_version_id = $3,
120
+ updated_at = NOW()
121
+ WHERE id = $4 AND user_id = $5`, [status, invalidAt, invalidatedByVersionId, claimId, userId]);
122
+ }
123
+ async createClaimVersion(input) {
124
+ return this.createClaimVersionWithClient(this.pool, input);
125
+ }
126
+ async createClaimVersionWithClient(client, input) {
127
+ const p = input.provenance;
128
+ const validFrom = input.validFrom ?? new Date();
129
+ const result = await client.query(`INSERT INTO memory_claim_versions
130
+ (claim_id, user_id, memory_id, content, embedding, importance, source_site, source_url, episode_id, valid_from,
131
+ mutation_type, mutation_reason, previous_version_id, actor_model, contradiction_confidence)
132
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15) RETURNING id`, [
133
+ input.claimId,
134
+ input.userId,
135
+ input.memoryId ?? null,
136
+ input.content,
137
+ pgvector.toSql(input.embedding),
138
+ clampImportance(input.importance),
139
+ input.sourceSite,
140
+ input.sourceUrl ?? '',
141
+ input.episodeId ?? null,
142
+ validFrom,
143
+ p?.mutationType ?? null,
144
+ p?.mutationReason ?? null,
145
+ p?.previousVersionId ?? null,
146
+ p?.actorModel ?? null,
147
+ p?.contradictionConfidence ?? null,
148
+ ]);
149
+ await client.query(`UPDATE memory_claims
150
+ SET valid_at = LEAST(valid_at, $1::timestamptz), updated_at = NOW()
151
+ WHERE id = $2 AND user_id = $3`, [validFrom, input.claimId, input.userId]);
152
+ return result.rows[0].id;
153
+ }
154
+ async getClaimVersionByMemoryId(userId, memoryId) {
155
+ return this.getClaimVersionByMemoryIdWithClient(this.pool, userId, memoryId);
156
+ }
157
+ async getClaimVersionByMemoryIdWithClient(client, userId, memoryId) {
158
+ const result = await client.query(`SELECT * FROM memory_claim_versions
159
+ WHERE user_id = $1 AND memory_id = $2`, [userId, memoryId]);
160
+ return result.rows[0] ? normalizeVersionRow(result.rows[0]) : null;
161
+ }
162
+ async getClaimVersion(versionId, userId) {
163
+ const result = await this.pool.query(`SELECT * FROM memory_claim_versions WHERE id = $1 AND user_id = $2`, [versionId, userId]);
164
+ return result.rows[0] ? normalizeVersionRow(result.rows[0]) : null;
165
+ }
166
+ async getClaimVersionAtTime(claimId, userId, asOf) {
167
+ const result = await this.pool.query(`SELECT cv.*
168
+ FROM memory_claims c
169
+ JOIN memory_claim_versions cv ON cv.claim_id = c.id
170
+ WHERE c.id = $1
171
+ AND c.user_id = $2
172
+ AND c.valid_at <= $3::timestamptz
173
+ AND (c.invalid_at IS NULL OR c.invalid_at > $3::timestamptz)
174
+ AND cv.valid_from <= $3::timestamptz
175
+ AND (cv.valid_to IS NULL OR cv.valid_to > $3::timestamptz)
176
+ ORDER BY cv.valid_from DESC, cv.created_at DESC
177
+ LIMIT 1`, [claimId, userId, asOf]);
178
+ return result.rows[0] ? normalizeVersionRow(result.rows[0]) : null;
179
+ }
180
+ async listClaimVersions(claimId) {
181
+ const result = await this.pool.query(`SELECT * FROM memory_claim_versions
182
+ WHERE claim_id = $1 ORDER BY valid_from ASC`, [claimId]);
183
+ return result.rows.map(normalizeVersionRow);
184
+ }
185
+ /**
186
+ * Create a new version for an UPDATE mutation, preserving the old version
187
+ * in the version history. The old version gets valid_to set and the new
188
+ * version becomes current.
189
+ */
190
+ async createUpdateVersion(input) {
191
+ const validFrom = input.validFrom ?? new Date();
192
+ // Close old version and release its memory_id (UNIQUE constraint)
193
+ await this.supersedeClaimVersion(input.userId, input.oldVersionId, null, validFrom);
194
+ await this.pool.query(`UPDATE memory_claim_versions SET memory_id = NULL WHERE id = $1`, [input.oldVersionId]);
195
+ // Create new version with provenance
196
+ const newVersionId = await this.createClaimVersion({
197
+ claimId: input.claimId,
198
+ userId: input.userId,
199
+ memoryId: input.memoryId,
200
+ content: input.content,
201
+ embedding: input.embedding,
202
+ importance: input.importance,
203
+ sourceSite: input.sourceSite,
204
+ sourceUrl: input.sourceUrl,
205
+ episodeId: input.episodeId,
206
+ validFrom,
207
+ provenance: {
208
+ mutationType: 'update',
209
+ mutationReason: input.mutationReason,
210
+ previousVersionId: input.oldVersionId,
211
+ actorModel: input.actorModel,
212
+ },
213
+ });
214
+ // Link old → new
215
+ await this.pool.query(`UPDATE memory_claim_versions SET superseded_by_version_id = $1 WHERE id = $2`, [newVersionId, input.oldVersionId]);
216
+ // Update claim pointer
217
+ await this.setClaimCurrentVersion(input.claimId, newVersionId, 'active', validFrom);
218
+ return newVersionId;
219
+ }
220
+ async supersedeClaimVersion(userId, versionId, supersededByVersionId, validTo = new Date()) {
221
+ await this.supersedeClaimVersionWithClient(this.pool, userId, versionId, supersededByVersionId, validTo);
222
+ }
223
+ async supersedeClaimVersionWithClient(client, userId, versionId, supersededByVersionId, validTo = new Date()) {
224
+ await client.query(`UPDATE memory_claim_versions
225
+ SET valid_to = $1, superseded_by_version_id = $2
226
+ WHERE id = $3 AND user_id = $4`, [validTo, supersededByVersionId, versionId, userId]);
227
+ }
228
+ async addEvidence(input) {
229
+ await this.addEvidenceWithClient(this.pool, input);
230
+ }
231
+ async addEvidenceWithClient(client, input) {
232
+ await client.query(`INSERT INTO memory_evidence (claim_version_id, episode_id, memory_id, quote_text, speaker)
233
+ VALUES ($1, $2, $3, $4, $5)`, [input.claimVersionId, input.episodeId ?? null, input.memoryId ?? null, input.quoteText ?? '', input.speaker ?? null]);
234
+ }
235
+ async searchClaimVersions(userId, queryEmbedding, limit, asOf, sourceSite) {
236
+ const result = await this.pool.query(`SELECT
237
+ COALESCE(cv.memory_id::text, cv.id::text) AS id,
238
+ cv.user_id,
239
+ cv.content,
240
+ cv.embedding,
241
+ 'semantic' AS memory_type,
242
+ cv.importance,
243
+ cv.source_site,
244
+ cv.source_url,
245
+ cv.episode_id,
246
+ cv.valid_from AS created_at,
247
+ cv.valid_from AS last_accessed_at,
248
+ 0::int AS access_count,
249
+ 'active'::text AS status,
250
+ '{}'::jsonb AS metadata,
251
+ NULL::timestamptz AS deleted_at,
252
+ 1 - (cv.embedding <=> $1) AS similarity,
253
+ (
254
+ 2.0 * (1 - (cv.embedding <=> $1))
255
+ + 1.0 * cv.importance
256
+ + 1.0 * EXP(-EXTRACT(EPOCH FROM ($4::timestamptz - cv.valid_from)) / 2592000.0)
257
+ ) AS score
258
+ FROM memory_claim_versions cv
259
+ JOIN memory_claims c ON c.id = cv.claim_id
260
+ WHERE cv.user_id = $2
261
+ AND c.user_id = $2
262
+ AND c.valid_at <= $4::timestamptz
263
+ AND (c.invalid_at IS NULL OR c.invalid_at > $4::timestamptz)
264
+ AND cv.valid_from <= $4::timestamptz
265
+ AND (cv.valid_to IS NULL OR cv.valid_to > $4::timestamptz)
266
+ ${sourceSite ? 'AND cv.source_site = $5' : ''}
267
+ ORDER BY score DESC
268
+ LIMIT $3`, buildHistoricalParams(queryEmbedding, userId, limit, asOf, sourceSite));
269
+ return result.rows.map(normalizeSearchRow);
270
+ }
271
+ async countClaims(userId) {
272
+ const result = await this.pool.query(`SELECT COUNT(*)::int AS count FROM memory_claims WHERE user_id = $1`, [userId]);
273
+ return result.rows[0].count;
274
+ }
275
+ async countOpenClaimVersions(claimId) {
276
+ const result = await this.pool.query(`SELECT COUNT(*)::int AS count
277
+ FROM memory_claim_versions WHERE claim_id = $1 AND valid_to IS NULL`, [claimId]);
278
+ return result.rows[0].count;
279
+ }
280
+ /**
281
+ * Get the full mutation history for a claim, ordered chronologically.
282
+ * Returns all versions including superseded ones, with provenance metadata.
283
+ */
284
+ async getMutationHistory(claimId) {
285
+ const result = await this.pool.query(`SELECT * FROM memory_claim_versions
286
+ WHERE claim_id = $1
287
+ ORDER BY valid_from ASC`, [claimId]);
288
+ return result.rows.map(normalizeVersionRow);
289
+ }
290
+ /**
291
+ * Find the claim associated with a memory ID (even if the memory is deleted).
292
+ */
293
+ async findClaimByMemoryId(userId, memoryId) {
294
+ const versionResult = await this.pool.query(`SELECT claim_id FROM memory_claim_versions
295
+ WHERE user_id = $1 AND (memory_id = $2 OR id IN (
296
+ SELECT previous_version_id FROM memory_claim_versions WHERE memory_id = $2
297
+ ))
298
+ LIMIT 1`, [userId, memoryId]);
299
+ if (versionResult.rows.length === 0)
300
+ return null;
301
+ const claimId = versionResult.rows[0].claim_id;
302
+ const versions = await this.getMutationHistory(claimId);
303
+ return { claimId, versions };
304
+ }
305
+ /**
306
+ * Get aggregate mutation stats for a user: counts by mutation type,
307
+ * total versions, active vs superseded counts. Used for mutation audit trail.
308
+ */
309
+ async getUserMutationSummary(userId) {
310
+ const [typeCounts, totals] = await Promise.all([
311
+ this.pool.query(`SELECT mutation_type, COUNT(*)::int AS count
312
+ FROM memory_claim_versions WHERE user_id = $1 AND mutation_type IS NOT NULL
313
+ GROUP BY mutation_type ORDER BY count DESC`, [userId]),
314
+ this.pool.query(`SELECT
315
+ COUNT(*)::int AS total_versions,
316
+ COUNT(*) FILTER (WHERE valid_to IS NULL)::int AS active_versions,
317
+ COUNT(*) FILTER (WHERE valid_to IS NOT NULL)::int AS superseded_versions,
318
+ COUNT(DISTINCT claim_id)::int AS total_claims
319
+ FROM memory_claim_versions WHERE user_id = $1`, [userId]),
320
+ ]);
321
+ const byType = {};
322
+ for (const row of typeCounts.rows) {
323
+ byType[row.mutation_type] = row.count;
324
+ }
325
+ const t = totals.rows[0];
326
+ return {
327
+ totalVersions: t.total_versions,
328
+ activeVersions: t.active_versions,
329
+ supersededVersions: t.superseded_versions,
330
+ totalClaims: t.total_claims,
331
+ byMutationType: byType,
332
+ };
333
+ }
334
+ /**
335
+ * Trace the supersession chain forward from a given version ID.
336
+ * Returns the sequence of versions that replaced each other,
337
+ * enabling "why did this memory change?" debugging.
338
+ */
339
+ async getReversalChain(userId, startVersionId, maxDepth = 20) {
340
+ const chain = [];
341
+ let currentId = startVersionId;
342
+ while (currentId && chain.length < maxDepth) {
343
+ const result = await this.pool.query(`SELECT * FROM memory_claim_versions WHERE id = $1 AND user_id = $2`, [currentId, userId]);
344
+ if (result.rows.length === 0)
345
+ break;
346
+ const version = normalizeVersionRow(result.rows[0]);
347
+ chain.push(version);
348
+ currentId = version.superseded_by_version_id;
349
+ }
350
+ return chain;
351
+ }
352
+ /**
353
+ * Get recent mutations across all claims for a user, ordered newest first.
354
+ * Useful for "what changed recently?" debugging.
355
+ */
356
+ async getRecentMutations(userId, limit = 20) {
357
+ const result = await this.pool.query(`SELECT * FROM memory_claim_versions
358
+ WHERE user_id = $1 AND mutation_type IS NOT NULL
359
+ ORDER BY created_at DESC
360
+ LIMIT $2`, [userId, Math.max(1, Math.min(100, limit))]);
361
+ return result.rows.map(normalizeVersionRow);
362
+ }
363
+ async deleteAll(userId) {
364
+ const params = userId ? [userId] : [];
365
+ const where = userId ? ' WHERE user_id = $1' : '';
366
+ await this.pool.query(`DELETE FROM memory_evidence WHERE claim_version_id IN (SELECT id FROM memory_claim_versions${where})`, params);
367
+ await this.pool.query(`DELETE FROM memory_claim_versions${where}`, params);
368
+ await this.pool.query(`DELETE FROM memory_claims${where}`, params);
369
+ }
370
+ }
371
+ function buildHistoricalParams(queryEmbedding, userId, limit, asOf, sourceSite) {
372
+ const params = [pgvector.toSql(queryEmbedding), userId, Math.max(1, Math.min(100, limit)), asOf];
373
+ if (sourceSite)
374
+ params.push(sourceSite);
375
+ return params;
376
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Repository operations for deferred AUDN reconciliation.
3
+ *
4
+ * When deferred AUDN is enabled, facts with conflict candidates in the
5
+ * 0.7–0.95 similarity range are stored as ADD immediately and marked
6
+ * with deferred_audn=true + serialized candidates. A background
7
+ * reconciliation pass resolves these via the full LLM AUDN pipeline.
8
+ */
9
+ import type pg from 'pg';
10
+ /** Serialized candidate stored alongside a deferred memory. */
11
+ export interface DeferredCandidate {
12
+ id: string;
13
+ content: string;
14
+ similarity: number;
15
+ }
16
+ /** A memory that needs deferred AUDN reconciliation. */
17
+ export interface DeferredMemory {
18
+ id: string;
19
+ userId: string;
20
+ content: string;
21
+ candidates: DeferredCandidate[];
22
+ createdAt: Date;
23
+ }
24
+ /** Store a memory as deferred: set flag and serialize candidates. */
25
+ export declare function markMemoryDeferred(pool: pg.Pool, memoryId: string, candidates: DeferredCandidate[]): Promise<void>;
26
+ /** Find up to `limit` memories pending deferred AUDN for a user. */
27
+ export declare function findDeferredMemories(pool: pg.Pool, userId: string, limit: number): Promise<DeferredMemory[]>;
28
+ /** Find deferred memories across all users (for batch job). */
29
+ export declare function findAllDeferredMemories(pool: pg.Pool, limit: number): Promise<DeferredMemory[]>;
30
+ /** Clear the deferred flag after reconciliation. */
31
+ export declare function clearDeferredFlag(pool: pg.Pool, memoryId: string): Promise<void>;
32
+ /** Count memories pending deferred reconciliation for a user. */
33
+ export declare function countDeferredMemories(pool: pg.Pool, userId: string): Promise<number>;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Repository operations for deferred AUDN reconciliation.
3
+ *
4
+ * When deferred AUDN is enabled, facts with conflict candidates in the
5
+ * 0.7–0.95 similarity range are stored as ADD immediately and marked
6
+ * with deferred_audn=true + serialized candidates. A background
7
+ * reconciliation pass resolves these via the full LLM AUDN pipeline.
8
+ */
9
+ /** Store a memory as deferred: set flag and serialize candidates. */
10
+ export async function markMemoryDeferred(pool, memoryId, candidates) {
11
+ await pool.query(`UPDATE memories SET deferred_audn = true, audn_candidates = $2
12
+ WHERE id = $1`, [memoryId, JSON.stringify(candidates)]);
13
+ }
14
+ /** Find up to `limit` memories pending deferred AUDN for a user. */
15
+ export async function findDeferredMemories(pool, userId, limit) {
16
+ const result = await pool.query(`SELECT id, user_id, content, audn_candidates, created_at
17
+ FROM memories
18
+ WHERE user_id = $1 AND deferred_audn = true AND deleted_at IS NULL
19
+ ORDER BY created_at ASC
20
+ LIMIT $2`, [userId, limit]);
21
+ return result.rows.map((row) => ({
22
+ id: row.id,
23
+ userId: row.user_id,
24
+ content: row.content,
25
+ candidates: parseCandidates(row.audn_candidates),
26
+ createdAt: row.created_at,
27
+ }));
28
+ }
29
+ /** Find deferred memories across all users (for batch job). */
30
+ export async function findAllDeferredMemories(pool, limit) {
31
+ const result = await pool.query(`SELECT id, user_id, content, audn_candidates, created_at
32
+ FROM memories
33
+ WHERE deferred_audn = true AND deleted_at IS NULL
34
+ ORDER BY created_at ASC
35
+ LIMIT $1`, [limit]);
36
+ return result.rows.map((row) => ({
37
+ id: row.id,
38
+ userId: row.user_id,
39
+ content: row.content,
40
+ candidates: parseCandidates(row.audn_candidates),
41
+ createdAt: row.created_at,
42
+ }));
43
+ }
44
+ /** Clear the deferred flag after reconciliation. */
45
+ export async function clearDeferredFlag(pool, memoryId) {
46
+ await pool.query(`UPDATE memories SET deferred_audn = false, audn_candidates = NULL
47
+ WHERE id = $1`, [memoryId]);
48
+ }
49
+ /** Count memories pending deferred reconciliation for a user. */
50
+ export async function countDeferredMemories(pool, userId) {
51
+ const result = await pool.query(`SELECT COUNT(*) as count FROM memories
52
+ WHERE user_id = $1 AND deferred_audn = true AND deleted_at IS NULL`, [userId]);
53
+ return parseInt(result.rows[0].count, 10);
54
+ }
55
+ function parseCandidates(raw) {
56
+ if (!raw)
57
+ return [];
58
+ if (typeof raw === 'string') {
59
+ try {
60
+ return JSON.parse(raw);
61
+ }
62
+ catch {
63
+ return [];
64
+ }
65
+ }
66
+ if (Array.isArray(raw))
67
+ return raw;
68
+ return [];
69
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @file Document-scoped delete cascades.
3
+ *
4
+ * Owns `softDeleteDocumentCascade` (single-document) and
5
+ * `deleteBySource` (source-reset), plus the Step-7 helpers that
6
+ * soft-delete linked `storage_artifacts` rows in the same
7
+ * transaction. Extracted from `repository-write.ts` to keep that
8
+ * module under the workspace 400-non-comment-LOC cap.
9
+ */
10
+ import type pg from 'pg';
11
+ import { type ManagedBlobRefRow } from './raw-document-blob-repository.js';
12
+ export interface SoftDeleteDocumentCascadeResult {
13
+ removed: boolean;
14
+ memoriesDeleted: number;
15
+ chunksDeleted: number;
16
+ /**
17
+ * Managed-blob refs (with `rawDocumentId`) the caller should hand
18
+ * to `cleanupManagedBlobs()` after the transaction commits. Empty
19
+ * when the document was pointer-only or already deleted.
20
+ */
21
+ blobs: ManagedBlobRefRow[];
22
+ }
23
+ /**
24
+ * Soft-delete a document together with the chunks + provenance-linked
25
+ * memories materialized from it (Phase 2). Runs in one transaction
26
+ * with a per-document advisory lock so a concurrent index call
27
+ * serializes cleanly. Idempotent: returns `{ removed: false }` when
28
+ * the document was already missing/deleted/owned by a different user.
29
+ *
30
+ * Step 7 — when the document has no managed blob to clean up
31
+ * (pointer-only, or already-terminal managed), the linked
32
+ * `storage_artifacts` row is soft-deleted in the same transaction.
33
+ * The cleanup path handles the managed case via the paired
34
+ * `markCleanupSuccessAndSyncArtifact` helper.
35
+ */
36
+ export declare function softDeleteDocumentCascade(pool: pg.Pool, userId: string, documentId: string): Promise<SoftDeleteDocumentCascadeResult>;
37
+ export interface DeleteBySourceResult {
38
+ deletedMemories: number;
39
+ deletedEpisodes: number;
40
+ deletedDocuments: number;
41
+ /** Managed-blob refs the caller hands to `cleanupManagedBlobs()`. */
42
+ blobs: ManagedBlobRefRow[];
43
+ }
44
+ /**
45
+ * Delete all data for a given user + source_site combination.
46
+ * Hard-deletes across memory-side tables and soft-deletes
47
+ * (tombstones) matching `raw_documents` in safe referential order
48
+ * within a single transaction. Step 7 — soft-deletes the linked
49
+ * `storage_artifacts` rows for pointer-only / terminal-managed
50
+ * docs in the same transaction, so a source reset cannot leave
51
+ * orphan active artifact links.
52
+ */
53
+ export declare function deleteBySource(pool: pg.Pool, userId: string, sourceSite: string): Promise<DeleteBySourceResult>;