@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,49 @@
1
+ /**
2
+ * Repository for agent trust levels and memory conflict tracking.
3
+ * Supports trust-aware AUDN conflict resolution and CLARIFY escalation.
4
+ */
5
+ import pg from 'pg';
6
+ export interface AgentTrustRecord {
7
+ agent_id: string;
8
+ user_id: string;
9
+ trust_level: number;
10
+ display_name: string | null;
11
+ }
12
+ export interface MemoryConflict {
13
+ id: string;
14
+ user_id: string;
15
+ new_memory_id: string | null;
16
+ existing_memory_id: string | null;
17
+ new_agent_id: string | null;
18
+ existing_agent_id: string | null;
19
+ new_trust_level: number | null;
20
+ existing_trust_level: number | null;
21
+ contradiction_confidence: number;
22
+ clarification_note: string | null;
23
+ status: string;
24
+ resolution_policy: string | null;
25
+ resolved_at: Date | null;
26
+ created_at: Date;
27
+ auto_resolve_after: Date | null;
28
+ }
29
+ export interface ConflictInput {
30
+ userId: string;
31
+ newMemoryId: string | null;
32
+ existingMemoryId: string | null;
33
+ newAgentId: string | null;
34
+ existingAgentId: string | null;
35
+ newTrustLevel: number | null;
36
+ existingTrustLevel: number | null;
37
+ contradictionConfidence: number;
38
+ clarificationNote: string | null;
39
+ }
40
+ export declare class AgentTrustRepository {
41
+ private pool;
42
+ constructor(pool: pg.Pool);
43
+ getTrustLevel(agentId: string, userId: string): Promise<number>;
44
+ setTrustLevel(agentId: string, userId: string, trustLevel: number, displayName?: string): Promise<void>;
45
+ recordConflict(input: ConflictInput): Promise<string>;
46
+ listOpenConflicts(userId: string): Promise<MemoryConflict[]>;
47
+ resolveConflict(conflictId: string, resolution: 'resolved_new' | 'resolved_existing' | 'resolved_both'): Promise<void>;
48
+ autoResolveExpiredConflicts(userId: string): Promise<number>;
49
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Repository for agent trust levels and memory conflict tracking.
3
+ * Supports trust-aware AUDN conflict resolution and CLARIFY escalation.
4
+ */
5
+ import { config } from '../config.js';
6
+ const DEFAULT_TRUST_LEVEL = 0.5;
7
+ export class AgentTrustRepository {
8
+ pool;
9
+ constructor(pool) {
10
+ this.pool = pool;
11
+ }
12
+ async getTrustLevel(agentId, userId) {
13
+ const result = await this.pool.query('SELECT trust_level FROM agent_trust WHERE agent_id = $1 AND user_id = $2', [agentId, userId]);
14
+ return result.rows[0]?.trust_level ?? DEFAULT_TRUST_LEVEL;
15
+ }
16
+ async setTrustLevel(agentId, userId, trustLevel, displayName) {
17
+ await this.pool.query(`INSERT INTO agent_trust (agent_id, user_id, trust_level, display_name)
18
+ VALUES ($1, $2, $3, $4)
19
+ ON CONFLICT (agent_id) DO UPDATE SET
20
+ trust_level = EXCLUDED.trust_level,
21
+ display_name = COALESCE(EXCLUDED.display_name, agent_trust.display_name),
22
+ updated_at = NOW()`, [agentId, userId, trustLevel, displayName ?? null]);
23
+ }
24
+ async recordConflict(input) {
25
+ const autoResolveAfter = new Date(Date.now() + config.conflictAutoResolveMs);
26
+ const result = await this.pool.query(`INSERT INTO memory_conflicts
27
+ (user_id, new_memory_id, existing_memory_id, new_agent_id, existing_agent_id,
28
+ new_trust_level, existing_trust_level, contradiction_confidence, clarification_note,
29
+ auto_resolve_after)
30
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
31
+ RETURNING id`, [
32
+ input.userId,
33
+ input.newMemoryId,
34
+ input.existingMemoryId,
35
+ input.newAgentId,
36
+ input.existingAgentId,
37
+ input.newTrustLevel,
38
+ input.existingTrustLevel,
39
+ input.contradictionConfidence,
40
+ input.clarificationNote,
41
+ autoResolveAfter,
42
+ ]);
43
+ return result.rows[0].id;
44
+ }
45
+ async listOpenConflicts(userId) {
46
+ const result = await this.pool.query(`SELECT * FROM memory_conflicts
47
+ WHERE user_id = $1 AND status = 'open'
48
+ ORDER BY created_at DESC`, [userId]);
49
+ return result.rows;
50
+ }
51
+ async resolveConflict(conflictId, resolution) {
52
+ await this.pool.query(`UPDATE memory_conflicts
53
+ SET status = $2, resolved_at = NOW(), resolution_policy = 'manual'
54
+ WHERE id = $1`, [conflictId, resolution]);
55
+ }
56
+ async autoResolveExpiredConflicts(userId) {
57
+ const result = await this.pool.query(`UPDATE memory_conflicts
58
+ SET status = 'auto_resolved', resolved_at = NOW(), resolution_policy = 'trust_lww'
59
+ WHERE user_id = $1
60
+ AND status = 'open'
61
+ AND auto_resolve_after IS NOT NULL
62
+ AND auto_resolve_after <= NOW()
63
+ RETURNING id, existing_trust_level, new_trust_level, new_memory_id, existing_memory_id`, [userId]);
64
+ return result.rowCount ?? 0;
65
+ }
66
+ }
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Repository for the typed belief graph (TBC Phase 3).
3
+ * Stores and queries edges produced by the EvidenceFor / Counter / Supersede /
4
+ * Promote / Demote operators of the typed belief calculus.
5
+ *
6
+ * Schema lives in src/db/schema.sql under "TBC Phase 3" section.
7
+ * Activated only when `TBC_ENABLED=true`; see docs/typed-belief-calculus.md.
8
+ */
9
+ import pg from 'pg';
10
+ export type BeliefEdgeType = 'evidence_for' | 'counter' | 'supersedes' | 'promotes' | 'demotes';
11
+ export interface BeliefEdge {
12
+ id: string;
13
+ user_id: string;
14
+ source_id: string;
15
+ target_id: string;
16
+ edge_type: BeliefEdgeType;
17
+ weight: number;
18
+ rationale: string;
19
+ created_at: Date;
20
+ workspace_id: string | null;
21
+ agent_id: string | null;
22
+ }
23
+ export interface AppendEdgeInput {
24
+ userId: string;
25
+ sourceId: string;
26
+ targetId: string;
27
+ edgeType: BeliefEdgeType;
28
+ weight: number;
29
+ rationale: string;
30
+ workspaceId?: string | null;
31
+ agentId?: string | null;
32
+ }
33
+ export interface ConfidenceAggregate {
34
+ evidenceForCount: number;
35
+ counterCount: number;
36
+ evidenceForWeightSum: number;
37
+ counterWeightSum: number;
38
+ /** Net confidence delta = sum(evidence_for weights) - |sum(counter weights)|. Bounded [-1,1] by clamp. */
39
+ netDelta: number;
40
+ }
41
+ export declare class BeliefEdgesRepository {
42
+ private readonly pool;
43
+ constructor(pool: pg.Pool);
44
+ /** Insert a typed edge. Returns the new row's id. */
45
+ appendEdge(input: AppendEdgeInput): Promise<string>;
46
+ /** All edges pointing at a given target (for "what supports/contradicts X" queries). */
47
+ getEdgesForTarget(userId: string, targetId: string): Promise<BeliefEdge[]>;
48
+ /** All edges originating from a given source (for "what does this evidence affect" queries). */
49
+ getEdgesFromSource(userId: string, sourceId: string): Promise<BeliefEdge[]>;
50
+ /**
51
+ * Fold all evidence/counter edges pointing at a target into a single
52
+ * confidence-delta reading. Caller decides how to apply the delta to
53
+ * memories.confidence (e.g., max-cap at 1.0, floor at 0.0).
54
+ */
55
+ aggregateConfidenceDelta(userId: string, targetId: string): Promise<ConfidenceAggregate>;
56
+ /**
57
+ * Fetch COUNTER edges where at least one side (source or target) is in the
58
+ * given memory ID list. Used by the CR specialist to surface bilateral
59
+ * contradictions among the top-K retrieved set.
60
+ */
61
+ findCounterEdgesForMemories(userId: string, memoryIds: string[]): Promise<Array<{
62
+ sourceId: string;
63
+ targetId: string;
64
+ rationale: string;
65
+ }>>;
66
+ /** Test/dev helper: remove all edges for a user (e.g., between integration runs). */
67
+ deleteAllForUser(userId: string): Promise<void>;
68
+ }
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Repository for the typed belief graph (TBC Phase 3).
3
+ * Stores and queries edges produced by the EvidenceFor / Counter / Supersede /
4
+ * Promote / Demote operators of the typed belief calculus.
5
+ *
6
+ * Schema lives in src/db/schema.sql under "TBC Phase 3" section.
7
+ * Activated only when `TBC_ENABLED=true`; see docs/typed-belief-calculus.md.
8
+ */
9
+ export class BeliefEdgesRepository {
10
+ pool;
11
+ constructor(pool) {
12
+ this.pool = pool;
13
+ }
14
+ /** Insert a typed edge. Returns the new row's id. */
15
+ async appendEdge(input) {
16
+ validateWeightForType(input.edgeType, input.weight);
17
+ const result = await this.pool.query(`INSERT INTO belief_edges
18
+ (user_id, source_id, target_id, edge_type, weight, rationale, workspace_id, agent_id)
19
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
20
+ RETURNING id`, [
21
+ input.userId,
22
+ input.sourceId,
23
+ input.targetId,
24
+ input.edgeType,
25
+ input.weight,
26
+ input.rationale,
27
+ input.workspaceId ?? null,
28
+ input.agentId ?? null,
29
+ ]);
30
+ return result.rows[0]?.id ?? '';
31
+ }
32
+ /** All edges pointing at a given target (for "what supports/contradicts X" queries). */
33
+ async getEdgesForTarget(userId, targetId) {
34
+ const result = await this.pool.query(`SELECT id, user_id, source_id, target_id, edge_type, weight, rationale,
35
+ created_at, workspace_id, agent_id
36
+ FROM belief_edges
37
+ WHERE user_id = $1 AND target_id = $2
38
+ ORDER BY created_at DESC`, [userId, targetId]);
39
+ return result.rows.map(rowToBeliefEdge);
40
+ }
41
+ /** All edges originating from a given source (for "what does this evidence affect" queries). */
42
+ async getEdgesFromSource(userId, sourceId) {
43
+ const result = await this.pool.query(`SELECT id, user_id, source_id, target_id, edge_type, weight, rationale,
44
+ created_at, workspace_id, agent_id
45
+ FROM belief_edges
46
+ WHERE user_id = $1 AND source_id = $2
47
+ ORDER BY created_at DESC`, [userId, sourceId]);
48
+ return result.rows.map(rowToBeliefEdge);
49
+ }
50
+ /**
51
+ * Fold all evidence/counter edges pointing at a target into a single
52
+ * confidence-delta reading. Caller decides how to apply the delta to
53
+ * memories.confidence (e.g., max-cap at 1.0, floor at 0.0).
54
+ */
55
+ async aggregateConfidenceDelta(userId, targetId) {
56
+ const result = await this.pool.query(`SELECT edge_type, COUNT(*)::int AS n, SUM(weight)::float AS sum_weight
57
+ FROM belief_edges
58
+ WHERE user_id = $1 AND target_id = $2
59
+ AND edge_type IN ('evidence_for', 'counter')
60
+ GROUP BY edge_type`, [userId, targetId]);
61
+ let evidenceForCount = 0;
62
+ let counterCount = 0;
63
+ let evidenceForWeightSum = 0;
64
+ let counterWeightSum = 0;
65
+ for (const row of result.rows) {
66
+ const sum = row.sum_weight === null ? 0 : Number(row.sum_weight);
67
+ if (row.edge_type === 'evidence_for') {
68
+ evidenceForCount = Number(row.n);
69
+ evidenceForWeightSum = sum;
70
+ }
71
+ else if (row.edge_type === 'counter') {
72
+ counterCount = Number(row.n);
73
+ counterWeightSum = sum;
74
+ }
75
+ }
76
+ const rawDelta = evidenceForWeightSum - Math.abs(counterWeightSum);
77
+ const netDelta = Math.max(-1, Math.min(1, rawDelta));
78
+ return {
79
+ evidenceForCount,
80
+ counterCount,
81
+ evidenceForWeightSum,
82
+ counterWeightSum,
83
+ netDelta,
84
+ };
85
+ }
86
+ /**
87
+ * Fetch COUNTER edges where at least one side (source or target) is in the
88
+ * given memory ID list. Used by the CR specialist to surface bilateral
89
+ * contradictions among the top-K retrieved set.
90
+ */
91
+ async findCounterEdgesForMemories(userId, memoryIds) {
92
+ if (memoryIds.length === 0)
93
+ return [];
94
+ const result = await this.pool.query(`SELECT source_id, target_id, rationale
95
+ FROM belief_edges
96
+ WHERE user_id = $1
97
+ AND edge_type = 'counter'
98
+ AND (source_id = ANY($2) OR target_id = ANY($2))`, [userId, memoryIds]);
99
+ return result.rows.map(r => ({
100
+ sourceId: r.source_id,
101
+ targetId: r.target_id,
102
+ rationale: r.rationale,
103
+ }));
104
+ }
105
+ /** Test/dev helper: remove all edges for a user (e.g., between integration runs). */
106
+ async deleteAllForUser(userId) {
107
+ await this.pool.query(`DELETE FROM belief_edges WHERE user_id = $1`, [userId]);
108
+ }
109
+ }
110
+ function rowToBeliefEdge(row) {
111
+ return { ...row };
112
+ }
113
+ /** Edge weight semantics by type. Schema check enforces [-1,1]; this enforces sign. */
114
+ function validateWeightForType(edgeType, weight) {
115
+ if (!Number.isFinite(weight) || weight < -1 || weight > 1) {
116
+ throw new Error(`belief_edges weight must be in [-1, 1], got ${weight}`);
117
+ }
118
+ if (edgeType === 'evidence_for' && weight < 0) {
119
+ throw new Error(`evidence_for edge weight must be >= 0 (got ${weight})`);
120
+ }
121
+ if (edgeType === 'counter' && weight > 0) {
122
+ throw new Error(`counter edge weight must be <= 0 (got ${weight})`);
123
+ }
124
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Backward-compatible wrapper around the split claim repository module.
3
+ */
4
+ export { ClaimRepository } from './repository-claims.js';
5
+ export type { ClaimRow, ClaimVersionRow, } from './repository-types.js';
6
+ export type { ClaimSlotInput, SlotBackfillCandidate, ClaimSlotTarget, } from './repository-claims.js';
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Backward-compatible wrapper around the split claim repository module.
3
+ */
4
+ export { ClaimRepository } from './repository-claims.js';
@@ -0,0 +1,56 @@
1
+ /**
2
+ * ContradictionsRepository — bilateral preservation of contradictory memories.
3
+ *
4
+ * Phase: BEAM CR fix (2026-05-12). Instead of AUDN's DELETE/SUPERSEDE path
5
+ * discarding the older side of a contradiction, the bilateral path keeps
6
+ * both rows in `memories` and records the conflict here for analytics +
7
+ * retrieval-side enrichment.
8
+ *
9
+ * Pure SQL via pg.Pool. Mutations fail closed — errors propagate to the caller.
10
+ */
11
+ import type pg from 'pg';
12
+ export interface ContradictionRow {
13
+ id: string;
14
+ userId: string;
15
+ conversationId: string | null;
16
+ leftMemoryId: string;
17
+ rightMemoryId: string;
18
+ leftSummary: string;
19
+ rightSummary: string;
20
+ resolved: boolean;
21
+ resolutionNote: string | null;
22
+ detectedAt: Date;
23
+ }
24
+ interface RecordContradictionInput {
25
+ userId: string;
26
+ conversationId?: string | null;
27
+ leftMemoryId: string;
28
+ rightMemoryId: string;
29
+ leftSummary: string;
30
+ rightSummary: string;
31
+ }
32
+ export declare class ContradictionsRepository {
33
+ private readonly pool;
34
+ constructor(pool: pg.Pool);
35
+ /**
36
+ * Insert a new contradiction row. Returns the generated row id so callers
37
+ * (memory-audn bilateral path) can attach the id to both memory rows in
38
+ * the same transaction-style flow.
39
+ */
40
+ record(input: RecordContradictionInput): Promise<string>;
41
+ /**
42
+ * Find active (unresolved) contradiction rows for the given user whose
43
+ * left OR right memory id is in the provided list. Used by retrieval
44
+ * enrichment to fetch contradiction pairs when a `contradiction_active`
45
+ * memory appears in top-K.
46
+ */
47
+ findActiveByUserAndMemoryIds(userId: string, memoryIds: readonly string[]): Promise<ContradictionRow[]>;
48
+ /**
49
+ * Apply the bilateral contradiction flags to BOTH memory rows: each row's
50
+ * `contradicts_memory_id` is set to its counterpart and
51
+ * `contradiction_active=true`. Fails closed: errors propagate so the
52
+ * caller never silently falls back to ADD when the bilateral write fails.
53
+ */
54
+ markContradictionFlagsBilateral(userId: string, memoryIdA: string, memoryIdB: string): Promise<void>;
55
+ }
56
+ export {};
@@ -0,0 +1,88 @@
1
+ export class ContradictionsRepository {
2
+ pool;
3
+ constructor(pool) {
4
+ this.pool = pool;
5
+ }
6
+ /**
7
+ * Insert a new contradiction row. Returns the generated row id so callers
8
+ * (memory-audn bilateral path) can attach the id to both memory rows in
9
+ * the same transaction-style flow.
10
+ */
11
+ async record(input) {
12
+ const { rows } = await this.pool.query(`INSERT INTO memory_contradictions
13
+ (user_id, conversation_id, left_memory_id, right_memory_id,
14
+ left_summary, right_summary)
15
+ VALUES ($1, $2, $3, $4, $5, $6)
16
+ RETURNING id`, [
17
+ input.userId,
18
+ input.conversationId ?? null,
19
+ input.leftMemoryId,
20
+ input.rightMemoryId,
21
+ input.leftSummary,
22
+ input.rightSummary,
23
+ ]);
24
+ if (rows.length === 0) {
25
+ throw new Error('ContradictionsRepository.record: insert returned no rows');
26
+ }
27
+ return rows[0].id;
28
+ }
29
+ /**
30
+ * Find active (unresolved) contradiction rows for the given user whose
31
+ * left OR right memory id is in the provided list. Used by retrieval
32
+ * enrichment to fetch contradiction pairs when a `contradiction_active`
33
+ * memory appears in top-K.
34
+ */
35
+ async findActiveByUserAndMemoryIds(userId, memoryIds) {
36
+ if (memoryIds.length === 0)
37
+ return [];
38
+ const { rows } = await this.pool.query(`SELECT id, user_id, conversation_id, left_memory_id, right_memory_id,
39
+ left_summary, right_summary, resolved, resolution_note, detected_at
40
+ FROM memory_contradictions
41
+ WHERE user_id = $1
42
+ AND resolved = false
43
+ AND (left_memory_id = ANY($2::uuid[]) OR right_memory_id = ANY($2::uuid[]))`, [userId, memoryIds]);
44
+ return rows.map(mapRow);
45
+ }
46
+ /**
47
+ * Apply the bilateral contradiction flags to BOTH memory rows: each row's
48
+ * `contradicts_memory_id` is set to its counterpart and
49
+ * `contradiction_active=true`. Fails closed: errors propagate so the
50
+ * caller never silently falls back to ADD when the bilateral write fails.
51
+ */
52
+ async markContradictionFlagsBilateral(userId, memoryIdA, memoryIdB) {
53
+ const existing = await this.pool.query(`SELECT COUNT(*)::int AS count
54
+ FROM memories
55
+ WHERE user_id = $1 AND id IN ($2::uuid, $3::uuid)`, [userId, memoryIdA, memoryIdB]);
56
+ const existingCount = Number(existing.rows[0]?.count ?? 0);
57
+ if (existingCount !== 2) {
58
+ throw new Error(`markContradictionFlagsBilateral: expected to update 2 rows, ` +
59
+ `updated ${existingCount} (userId=${userId}, ids=${memoryIdA},${memoryIdB})`);
60
+ }
61
+ const result = await this.pool.query(`UPDATE memories
62
+ SET contradicts_memory_id = CASE
63
+ WHEN id = $2 THEN $3::uuid
64
+ WHEN id = $3 THEN $2::uuid
65
+ ELSE contradicts_memory_id
66
+ END,
67
+ contradiction_active = true
68
+ WHERE user_id = $1 AND id IN ($2::uuid, $3::uuid)`, [userId, memoryIdA, memoryIdB]);
69
+ if (result.rowCount !== 2) {
70
+ throw new Error(`markContradictionFlagsBilateral: expected to update 2 rows, ` +
71
+ `updated ${result.rowCount ?? 0} (userId=${userId}, ids=${memoryIdA},${memoryIdB})`);
72
+ }
73
+ }
74
+ }
75
+ function mapRow(r) {
76
+ return {
77
+ id: r.id,
78
+ userId: r.user_id,
79
+ conversationId: r.conversation_id,
80
+ leftMemoryId: r.left_memory_id,
81
+ rightMemoryId: r.right_memory_id,
82
+ leftSummary: r.left_summary,
83
+ rightSummary: r.right_summary,
84
+ resolved: r.resolved,
85
+ resolutionNote: r.resolution_note,
86
+ detectedAt: r.detected_at,
87
+ };
88
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Postgres queries for document_chunks (Phase 2).
3
+ *
4
+ * Function-style module mirroring `raw-document-repository.ts`. The
5
+ * `*WithClient` deletion variant exists so `deleteBySource` can include
6
+ * chunk soft-deletion inside its single transaction, and the batch
7
+ * insert uses a multi-row INSERT (one round-trip per index call) so
8
+ * indexing a 50-chunk document is ~50× cheaper than per-row inserts.
9
+ */
10
+ import pg from 'pg';
11
+ import type { DocumentChunkRow, InsertDocumentChunkInput } from './document-chunk-types.js';
12
+ /**
13
+ * Either a top-level `pg.Pool` (auto-checks-out a client per query) or a
14
+ * checked-out `pg.PoolClient` (used to keep a sequence of statements on
15
+ * the same DB connection — e.g., inside a BEGIN/COMMIT). Phase 2's
16
+ * indexer threads a `PoolClient` through every chunk-write helper so the
17
+ * idempotency check + chunk + memory mutations live in one transaction.
18
+ */
19
+ type Querier = pg.Pool | pg.PoolClient;
20
+ /**
21
+ * Insert a batch of chunks for one document. Single round-trip; the
22
+ * caller is expected to have already verified the active-unique slot
23
+ * is free (the indexer's idempotency check covers this).
24
+ */
25
+ export declare function insertDocumentChunks(q: Querier, inputs: InsertDocumentChunkInput[]): Promise<DocumentChunkRow[]>;
26
+ /**
27
+ * Active chunks for a document, ordered by chunk_index. Optionally
28
+ * filtered to a single chunker_version (the indexer needs that to
29
+ * decide whether re-index is required vs idempotent skip).
30
+ */
31
+ export declare function listActiveChunksForDocument(q: Querier, rawDocumentId: string, options?: {
32
+ chunkerVersion?: string;
33
+ }): Promise<DocumentChunkRow[]>;
34
+ export declare function countActiveChunksForDocument(q: Querier, rawDocumentId: string, chunkerVersion: string): Promise<number>;
35
+ /**
36
+ * Soft-delete every active chunk for a document. Used by the indexer
37
+ * when the input text changes (re-chunk path) and by the document
38
+ * delete route when the document is tombstoned.
39
+ */
40
+ export declare function softDeleteChunksForDocument(q: Querier, userId: string, rawDocumentId: string): Promise<number>;
41
+ /**
42
+ * Soft-delete every active chunk whose document belongs to the
43
+ * (user, source_site) pair. Used inside the existing
44
+ * `deleteBySource` transaction so source-reset stays one atomic
45
+ * operation across memories, episodes, documents, and chunks.
46
+ */
47
+ export declare function deleteChunksBySourceWithClient(client: pg.PoolClient, userId: string, sourceSite: string): Promise<number>;
48
+ export {};
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Postgres queries for document_chunks (Phase 2).
3
+ *
4
+ * Function-style module mirroring `raw-document-repository.ts`. The
5
+ * `*WithClient` deletion variant exists so `deleteBySource` can include
6
+ * chunk soft-deletion inside its single transaction, and the batch
7
+ * insert uses a multi-row INSERT (one round-trip per index call) so
8
+ * indexing a 50-chunk document is ~50× cheaper than per-row inserts.
9
+ */
10
+ import pgvector from 'pgvector/pg';
11
+ const DOCUMENT_CHUNK_COLUMNS = 'id, user_id, raw_document_id, chunk_index, content, content_hash, char_start, char_end, token_count, embedding, parser_version, chunker_version, metadata, created_at, deleted_at';
12
+ const INSERT_COLUMNS = 'user_id, raw_document_id, chunk_index, content, content_hash, char_start, char_end, token_count, embedding, parser_version, chunker_version, metadata';
13
+ // ---------------------------------------------------------------------------
14
+ // Insert (batch)
15
+ // ---------------------------------------------------------------------------
16
+ /**
17
+ * Insert a batch of chunks for one document. Single round-trip; the
18
+ * caller is expected to have already verified the active-unique slot
19
+ * is free (the indexer's idempotency check covers this).
20
+ */
21
+ export async function insertDocumentChunks(q, inputs) {
22
+ if (inputs.length === 0)
23
+ return [];
24
+ const { sql, params } = buildBatchInsertSql(inputs);
25
+ const result = await q.query(sql, params);
26
+ return result.rows.map(rowToDocumentChunk);
27
+ }
28
+ function buildBatchInsertSql(inputs) {
29
+ const params = [];
30
+ const placeholders = [];
31
+ for (const input of inputs) {
32
+ placeholders.push(buildOneRowPlaceholders(params.length));
33
+ pushOneRowParams(params, input);
34
+ }
35
+ const sql = `INSERT INTO document_chunks (${INSERT_COLUMNS}) VALUES ${placeholders.join(', ')} RETURNING ${DOCUMENT_CHUNK_COLUMNS}`;
36
+ return { sql, params };
37
+ }
38
+ function buildOneRowPlaceholders(start) {
39
+ const slots = [];
40
+ for (let i = 0; i < 12; i++)
41
+ slots.push(`$${start + i + 1}`);
42
+ // metadata is the 12th column — cast as jsonb on the wire.
43
+ slots[11] = `${slots[11]}::jsonb`;
44
+ return `(${slots.join(', ')})`;
45
+ }
46
+ function pushOneRowParams(params, input) {
47
+ params.push(input.userId, input.rawDocumentId, input.chunkIndex, input.content, input.contentHash, input.charStart, input.charEnd, input.tokenCount, pgvector.toSql(input.embedding), input.parserVersion, input.chunkerVersion, JSON.stringify(input.metadata ?? {}));
48
+ }
49
+ // ---------------------------------------------------------------------------
50
+ // List / lookup
51
+ // ---------------------------------------------------------------------------
52
+ /**
53
+ * Active chunks for a document, ordered by chunk_index. Optionally
54
+ * filtered to a single chunker_version (the indexer needs that to
55
+ * decide whether re-index is required vs idempotent skip).
56
+ */
57
+ export async function listActiveChunksForDocument(q, rawDocumentId, options = {}) {
58
+ const params = [rawDocumentId];
59
+ let where = 'raw_document_id = $1 AND deleted_at IS NULL';
60
+ if (options.chunkerVersion) {
61
+ params.push(options.chunkerVersion);
62
+ where += ' AND chunker_version = $2';
63
+ }
64
+ const result = await q.query(`SELECT ${DOCUMENT_CHUNK_COLUMNS}
65
+ FROM document_chunks
66
+ WHERE ${where}
67
+ ORDER BY chunk_index ASC`, params);
68
+ return result.rows.map(rowToDocumentChunk);
69
+ }
70
+ export async function countActiveChunksForDocument(q, rawDocumentId, chunkerVersion) {
71
+ const result = await q.query(`SELECT COUNT(*)::int AS n
72
+ FROM document_chunks
73
+ WHERE raw_document_id = $1 AND chunker_version = $2 AND deleted_at IS NULL`, [rawDocumentId, chunkerVersion]);
74
+ return Number(result.rows[0]?.n ?? 0);
75
+ }
76
+ // ---------------------------------------------------------------------------
77
+ // Soft-delete + cascading deletion paths
78
+ // ---------------------------------------------------------------------------
79
+ /**
80
+ * Soft-delete every active chunk for a document. Used by the indexer
81
+ * when the input text changes (re-chunk path) and by the document
82
+ * delete route when the document is tombstoned.
83
+ */
84
+ export async function softDeleteChunksForDocument(q, userId, rawDocumentId) {
85
+ const result = await q.query(`UPDATE document_chunks
86
+ SET deleted_at = NOW()
87
+ WHERE user_id = $1 AND raw_document_id = $2 AND deleted_at IS NULL`, [userId, rawDocumentId]);
88
+ return result.rowCount ?? 0;
89
+ }
90
+ /**
91
+ * Soft-delete every active chunk whose document belongs to the
92
+ * (user, source_site) pair. Used inside the existing
93
+ * `deleteBySource` transaction so source-reset stays one atomic
94
+ * operation across memories, episodes, documents, and chunks.
95
+ */
96
+ export async function deleteChunksBySourceWithClient(client, userId, sourceSite) {
97
+ const result = await client.query(`UPDATE document_chunks c
98
+ SET deleted_at = NOW()
99
+ FROM raw_documents d
100
+ JOIN raw_sources s ON s.id = d.raw_source_id
101
+ WHERE c.raw_document_id = d.id
102
+ AND c.user_id = $1
103
+ AND s.source_site = $2
104
+ AND c.deleted_at IS NULL`, [userId, sourceSite]);
105
+ return result.rowCount ?? 0;
106
+ }
107
+ // ---------------------------------------------------------------------------
108
+ // Row mapper
109
+ // ---------------------------------------------------------------------------
110
+ function rowToDocumentChunk(row) {
111
+ return {
112
+ id: row.id,
113
+ userId: row.user_id,
114
+ rawDocumentId: row.raw_document_id,
115
+ chunkIndex: row.chunk_index,
116
+ content: row.content,
117
+ contentHash: row.content_hash,
118
+ charStart: row.char_start,
119
+ charEnd: row.char_end,
120
+ tokenCount: row.token_count,
121
+ embedding: parseEmbedding(row.embedding),
122
+ parserVersion: row.parser_version,
123
+ chunkerVersion: row.chunker_version,
124
+ metadata: row.metadata ?? {},
125
+ createdAt: row.created_at,
126
+ deletedAt: row.deleted_at ?? null,
127
+ };
128
+ }
129
+ /**
130
+ * pgvector returns the column either as a string like `"[0.1,0.2,...]"`
131
+ * (default text protocol) or as an already-parsed array (when a custom
132
+ * type parser is registered). Handle both — the cast is cheap and
133
+ * avoids depending on a global type-parser registration here.
134
+ */
135
+ function parseEmbedding(value) {
136
+ if (Array.isArray(value))
137
+ return value.map(Number);
138
+ if (typeof value === 'string') {
139
+ return value
140
+ .replace(/^\[|\]$/g, '')
141
+ .split(',')
142
+ .map((s) => Number(s));
143
+ }
144
+ return [];
145
+ }