@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,200 @@
1
+ /**
2
+ * Raw-storage reconciler DB layer. The reconciler promotes
3
+ * `raw_storage_status='blob_pending'` rows on eventual providers once the
4
+ * adapter's `head()` confirms gateway retrievability (→
5
+ * `blob_available`) or, after exhausted retries, marks them
6
+ * `blob_archival_failed`.
7
+ *
8
+ * Concurrency model (rev-2 §3 + rev-6 §1): claim-then-release. Phase
9
+ * A grabs a batch in a short transaction with `FOR UPDATE SKIP
10
+ * LOCKED` so multiple reconciler instances partition the work
11
+ * deterministically without coordinator overhead. Slow
12
+ * network calls run with NO DB locks held. failure-transition's per-row UPDATE
13
+ * is guarded on `raw_storage_claim_id` so a stale claim cannot
14
+ * clobber a row another worker has since reclaimed.
15
+ *
16
+ * Eligibility predicate gates on TYPED columns only — no JSONB casts
17
+ * (rev-6 §2): a malformed JSONB shape can't masquerade as a fresh
18
+ * claim. The predicate also explicitly excludes `blob_uploading` rows
19
+ * — those recover through `uploadRaw`'s same-bytes idempotent retry,
20
+ * not the reconciler.
21
+ */
22
+ const RECONCILABLE_PROVIDERS = new Set(['filecoin']);
23
+ /**
24
+ * claim step: claim a batch of eligible eventual-provider `blob_pending` rows by
25
+ * writing `raw_storage_claim_id` + `raw_storage_claimed_at`. Skips
26
+ * rows another worker holds a fresh claim on. Returns the typed row
27
+ * state the reconciler will probe; the network call runs after this
28
+ * function returns + the caller commits the transaction.
29
+ *
30
+ * Eligibility predicate (rev-7 §3 — two-axis: claim ownership AND
31
+ * scheduled backoff):
32
+ * - `raw_storage_status = 'blob_pending'`
33
+ * - `storage_provider = args.provider`
34
+ * - `storage_uri IS NOT NULL` (rev-7 §1: the claim step-only rows with no
35
+ * URI recover via uploadRaw idempotency, NOT the reconciler)
36
+ * - `deleted_at IS NULL`
37
+ * - backoff elapsed: `next_check_at IS NULL OR next_check_at <= NOW()`
38
+ * - no live owner: claim_id NULL OR claimed_at older than staleAfterMs
39
+ */
40
+ export async function claimReconcileBatch(pool, args) {
41
+ assertReconciliableProvider(args.provider);
42
+ const client = await pool.connect();
43
+ try {
44
+ await client.query('BEGIN');
45
+ const result = await client.query(
46
+ // Capture the prior `raw_storage_claim_id` in the CTE so the
47
+ // RETURNING clause can flag stale-claim recoveries — RETURNING
48
+ // sees the NEW row only, but joining against the captured CTE
49
+ // (`UPDATE … FROM claimed`) makes the pre-update value
50
+ // visible. The reconciler emits
51
+ // `filecoin.reconcile.stale_claim_recovered` based on this flag.
52
+ `WITH claimed AS (
53
+ SELECT id, raw_storage_claim_id AS prior_claim_id
54
+ FROM raw_documents
55
+ WHERE raw_storage_status = 'blob_pending'
56
+ AND storage_provider = $4
57
+ AND storage_uri IS NOT NULL
58
+ AND deleted_at IS NULL
59
+ AND (raw_storage_next_check_at IS NULL OR raw_storage_next_check_at <= NOW())
60
+ AND (
61
+ raw_storage_claim_id IS NULL
62
+ OR raw_storage_claimed_at < NOW() - ($1::bigint * INTERVAL '1 millisecond')
63
+ )
64
+ ORDER BY COALESCE(raw_storage_next_check_at, raw_storage_claimed_at, updated_at) ASC
65
+ LIMIT $2
66
+ FOR UPDATE SKIP LOCKED
67
+ )
68
+ UPDATE raw_documents rd
69
+ SET raw_storage_claim_id = $3::text,
70
+ raw_storage_claimed_at = NOW(),
71
+ updated_at = NOW()
72
+ FROM claimed
73
+ WHERE rd.id = claimed.id
74
+ RETURNING rd.id, rd.user_id, rd.storage_uri, rd.storage_provider,
75
+ rd.content_hash, rd.raw_storage_status, rd.raw_storage_metadata,
76
+ rd.raw_storage_reconcile_attempts, rd.raw_storage_pending_since,
77
+ (claimed.prior_claim_id IS NOT NULL) AS recovered_stale_claim`, [args.staleAfterMs, args.batchSize, args.claimId, args.provider]);
78
+ await client.query('COMMIT');
79
+ return result.rows.map(toClaimedRow);
80
+ }
81
+ catch (err) {
82
+ await client.query('ROLLBACK').catch(() => undefined);
83
+ throw err;
84
+ }
85
+ finally {
86
+ client.release();
87
+ }
88
+ }
89
+ function assertReconciliableProvider(provider) {
90
+ if (!RECONCILABLE_PROVIDERS.has(provider)) {
91
+ throw new Error(`raw-storage reconciler does not support provider '${provider}'`);
92
+ }
93
+ }
94
+ function toClaimedRow(row) {
95
+ return {
96
+ id: row.id,
97
+ userId: row.user_id,
98
+ storageUri: row.storage_uri,
99
+ storageProvider: row.storage_provider,
100
+ contentHash: row.content_hash ?? null,
101
+ rawStorageStatus: 'blob_pending',
102
+ rawStorageMetadata: row.raw_storage_metadata ?? {},
103
+ rawStorageReconcileAttempts: typeof row.raw_storage_reconcile_attempts === 'number'
104
+ ? row.raw_storage_reconcile_attempts
105
+ : 0,
106
+ rawStoragePendingSince: parseTimestamp(row.raw_storage_pending_since),
107
+ recoveredStaleClaim: row.recovered_stale_claim === true,
108
+ };
109
+ }
110
+ function parseTimestamp(value) {
111
+ if (value === null || value === undefined)
112
+ return null;
113
+ if (value instanceof Date)
114
+ return value;
115
+ if (typeof value === 'string') {
116
+ const parsed = new Date(value);
117
+ return Number.isNaN(parsed.getTime()) ? null : parsed;
118
+ }
119
+ return null;
120
+ }
121
+ /**
122
+ * failure-transition — success: promote to `blob_available`. Guarded on claim_id
123
+ * + status='blob_pending' so a stale claim cannot promote a row
124
+ * another worker has since failed. Deep-merges the new
125
+ * provider keys into the existing sibling (rev-4 §3) so a status-
126
+ * only probe doesn't drop `cid`/`piece_cid`/`deals` the original
127
+ * upload wrote. Layer-scoped `last_error` clear (rev-4 §2): drops
128
+ * the envelope only when it was scoped to `raw_storage`.
129
+ */
130
+ export async function promoteToAvailableWithClient(pool, args) {
131
+ assertReconciliableProvider(args.provider);
132
+ const result = await pool.query(`UPDATE raw_documents
133
+ SET raw_storage_status = 'blob_available',
134
+ raw_storage_metadata = raw_storage_metadata ||
135
+ jsonb_build_object(
136
+ $1::text,
137
+ COALESCE(raw_storage_metadata->$1::text, '{}'::jsonb) || $2::jsonb
138
+ ),
139
+ raw_storage_claim_id = NULL,
140
+ raw_storage_claimed_at = NULL,
141
+ raw_storage_last_checked_at = NOW(),
142
+ raw_storage_next_check_at = NULL,
143
+ raw_storage_reconcile_attempts = 0,
144
+ raw_storage_pending_since = NULL,
145
+ last_error = CASE
146
+ WHEN last_error IS NOT NULL AND last_error->>'layer' = 'raw_storage'
147
+ THEN NULL
148
+ ELSE last_error
149
+ END,
150
+ updated_at = NOW()
151
+ WHERE id = $3
152
+ AND raw_storage_status = 'blob_pending'
153
+ AND storage_provider = $1
154
+ AND raw_storage_claim_id = $4`, [args.provider, JSON.stringify(args.providerFields), args.rowId, args.claimId]);
155
+ return result.rowCount ?? 0;
156
+ }
157
+ /**
158
+ * failure-transition — still-pending probe: clear the claim (release ownership)
159
+ * + increment attempts + advance `next_check_at` per the
160
+ * caller-computed backoff. Status STAYS `blob_pending` and
161
+ * `pending_since` is preserved.
162
+ */
163
+ export async function markStillPendingWithClient(pool, args) {
164
+ assertReconciliableProvider(args.provider);
165
+ const result = await pool.query(`UPDATE raw_documents
166
+ SET raw_storage_claim_id = NULL,
167
+ raw_storage_claimed_at = NULL,
168
+ raw_storage_last_checked_at = NOW(),
169
+ raw_storage_next_check_at = NOW() + ($1::bigint * INTERVAL '1 millisecond'),
170
+ raw_storage_reconcile_attempts = raw_storage_reconcile_attempts + 1,
171
+ updated_at = NOW()
172
+ WHERE id = $2
173
+ AND raw_storage_status = 'blob_pending'
174
+ AND storage_provider = $4
175
+ AND raw_storage_claim_id = $3`, [args.nextCheckAtMs, args.rowId, args.claimId, args.provider]);
176
+ return result.rowCount ?? 0;
177
+ }
178
+ /**
179
+ * failure-transition — terminal failure: status → `blob_archival_failed`. Sets
180
+ * a fresh raw-storage `last_error` envelope, clears claim/pending
181
+ * state, resets attempts. Guarded on claim_id.
182
+ */
183
+ export async function markArchivalFailedWithClient(pool, args) {
184
+ assertReconciliableProvider(args.provider);
185
+ const result = await pool.query(`UPDATE raw_documents
186
+ SET raw_storage_status = 'blob_archival_failed',
187
+ raw_storage_claim_id = NULL,
188
+ raw_storage_claimed_at = NULL,
189
+ raw_storage_last_checked_at = NOW(),
190
+ raw_storage_next_check_at = NULL,
191
+ raw_storage_reconcile_attempts = 0,
192
+ raw_storage_pending_since = NULL,
193
+ last_error = $1::jsonb,
194
+ updated_at = NOW()
195
+ WHERE id = $2
196
+ AND raw_storage_status = 'blob_pending'
197
+ AND storage_provider = $4
198
+ AND raw_storage_claim_id = $3`, [JSON.stringify(args.lastError), args.rowId, args.claimId, args.provider]);
199
+ return result.rowCount ?? 0;
200
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Postgres-backed work queue for the async Reflect step.
3
+ *
4
+ * Idempotent enqueue: a unique partial index on (user_id, conversation_id)
5
+ * WHERE status IN ('pending','in_progress') guarantees one in-flight job per
6
+ * conversation at a time. Re-enqueue after completion creates a new job (the
7
+ * unique index excludes 'completed' and 'failed').
8
+ *
9
+ * The worker (services/reflect-jobs.ts) drives the lifecycle: fetchPending →
10
+ * markInProgress → run reflect → markCompleted | markFailed.
11
+ */
12
+ import pg from 'pg';
13
+ export type JobStatus = 'pending' | 'in_progress' | 'completed' | 'failed';
14
+ export interface ReflectionJob {
15
+ id: string;
16
+ userId: string;
17
+ conversationId: string;
18
+ status: JobStatus;
19
+ attempts: number;
20
+ lastError: string | null;
21
+ createdAt: Date;
22
+ lastTriedAt: Date | null;
23
+ }
24
+ export declare class ReflectionJobsRepository {
25
+ private readonly pool;
26
+ constructor(pool: pg.Pool);
27
+ enqueue(userId: string, conversationId: string): Promise<void>;
28
+ fetchPending(limit: number): Promise<ReflectionJob[]>;
29
+ markInProgress(id: string): Promise<void>;
30
+ markCompleted(id: string): Promise<void>;
31
+ markFailed(id: string, error: string): Promise<void>;
32
+ findById(id: string): Promise<ReflectionJob | null>;
33
+ }
@@ -0,0 +1,48 @@
1
+ export class ReflectionJobsRepository {
2
+ pool;
3
+ constructor(pool) {
4
+ this.pool = pool;
5
+ }
6
+ async enqueue(userId, conversationId) {
7
+ await this.pool.query(`INSERT INTO reflection_jobs (user_id, conversation_id) VALUES ($1, $2)
8
+ ON CONFLICT DO NOTHING`, [userId, conversationId]);
9
+ }
10
+ async fetchPending(limit) {
11
+ const { rows } = await this.pool.query(`SELECT id, user_id, conversation_id, status, attempts, last_error,
12
+ created_at, last_tried_at
13
+ FROM reflection_jobs
14
+ WHERE status = 'pending'
15
+ ORDER BY created_at ASC
16
+ LIMIT $1`, [limit]);
17
+ return rows.map(mapJob);
18
+ }
19
+ async markInProgress(id) {
20
+ await this.pool.query(`UPDATE reflection_jobs
21
+ SET status = 'in_progress', attempts = attempts + 1, last_tried_at = now()
22
+ WHERE id = $1`, [id]);
23
+ }
24
+ async markCompleted(id) {
25
+ await this.pool.query(`UPDATE reflection_jobs SET status = 'completed' WHERE id = $1`, [id]);
26
+ }
27
+ async markFailed(id, error) {
28
+ await this.pool.query(`UPDATE reflection_jobs SET status = 'failed', last_error = $2 WHERE id = $1`, [id, error]);
29
+ }
30
+ async findById(id) {
31
+ const { rows } = await this.pool.query(`SELECT id, user_id, conversation_id, status, attempts, last_error,
32
+ created_at, last_tried_at
33
+ FROM reflection_jobs WHERE id = $1`, [id]);
34
+ return rows[0] ? mapJob(rows[0]) : null;
35
+ }
36
+ }
37
+ function mapJob(r) {
38
+ return {
39
+ id: r.id,
40
+ userId: r.user_id,
41
+ conversationId: r.conversation_id,
42
+ status: r.status,
43
+ attempts: r.attempts,
44
+ lastError: r.last_error,
45
+ createdAt: r.created_at,
46
+ lastTriedAt: r.last_tried_at,
47
+ };
48
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ReflectionsRepository — CRUD plus cosine-similarity search for the
3
+ * session_reflections table. Each row is an LLM-synthesized observation about
4
+ * a conversation, with citations to the supporting memory ids and an embedding
5
+ * for retrieval-side similarity search.
6
+ *
7
+ * Pure SQL via pg.Pool. No ORM. Mutations fail closed: caller catches errors,
8
+ * we propagate them with the original error attached.
9
+ */
10
+ import pg from 'pg';
11
+ export type ObservationType = 'entity_state' | 'event_summary' | 'preference' | 'contradiction' | 'decision' | 'numeric_value';
12
+ export interface NewReflection {
13
+ userId: string;
14
+ conversationId: string;
15
+ observation: string;
16
+ observationType: ObservationType;
17
+ evidenceMemoryIds: string[];
18
+ embedding: number[];
19
+ }
20
+ export interface Reflection extends NewReflection {
21
+ id: string;
22
+ createdAt: Date;
23
+ }
24
+ export declare class ReflectionsRepository {
25
+ private readonly pool;
26
+ constructor(pool: pg.Pool);
27
+ /**
28
+ * Insert multiple reflections in a single transaction. On any error,
29
+ * the entire transaction is rolled back.
30
+ */
31
+ insertMany(rows: readonly NewReflection[]): Promise<void>;
32
+ /**
33
+ * Find all reflections for a (userId, conversationId) pair, ordered by creation time.
34
+ */
35
+ findByConversation(userId: string, conversationId: string): Promise<Reflection[]>;
36
+ /**
37
+ * Find the top-K reflections most similar to queryEmbedding for a userId,
38
+ * ordered by cosine distance (closest first).
39
+ */
40
+ findSimilar(userId: string, queryEmbedding: number[], topK: number): Promise<Reflection[]>;
41
+ }
@@ -0,0 +1,83 @@
1
+ import pgvector from 'pgvector/pg';
2
+ export class ReflectionsRepository {
3
+ pool;
4
+ constructor(pool) {
5
+ this.pool = pool;
6
+ }
7
+ /**
8
+ * Insert multiple reflections in a single transaction. On any error,
9
+ * the entire transaction is rolled back.
10
+ */
11
+ async insertMany(rows) {
12
+ if (rows.length === 0)
13
+ return;
14
+ const sql = `
15
+ INSERT INTO session_reflections
16
+ (user_id, conversation_id, observation, observation_type, evidence_memory_ids, embedding)
17
+ VALUES ($1, $2, $3, $4, $5, $6::vector)
18
+ `;
19
+ const client = await this.pool.connect();
20
+ try {
21
+ await client.query('BEGIN');
22
+ for (const r of rows) {
23
+ await client.query(sql, [
24
+ r.userId,
25
+ r.conversationId,
26
+ r.observation,
27
+ r.observationType,
28
+ r.evidenceMemoryIds,
29
+ pgvector.toSql(r.embedding),
30
+ ]);
31
+ }
32
+ await client.query('COMMIT');
33
+ }
34
+ catch (e) {
35
+ await client.query('ROLLBACK');
36
+ throw e;
37
+ }
38
+ finally {
39
+ client.release();
40
+ }
41
+ }
42
+ /**
43
+ * Find all reflections for a (userId, conversationId) pair, ordered by creation time.
44
+ */
45
+ async findByConversation(userId, conversationId) {
46
+ const { rows } = await this.pool.query(`SELECT id, user_id, conversation_id, observation, observation_type,
47
+ evidence_memory_ids, created_at
48
+ FROM session_reflections
49
+ WHERE user_id = $1 AND conversation_id = $2
50
+ ORDER BY created_at ASC`, [userId, conversationId]);
51
+ return rows.map(mapRow);
52
+ }
53
+ /**
54
+ * Find the top-K reflections most similar to queryEmbedding for a userId,
55
+ * ordered by cosine distance (closest first).
56
+ */
57
+ async findSimilar(userId, queryEmbedding, topK) {
58
+ const { rows } = await this.pool.query(`SELECT id, user_id, conversation_id, observation, observation_type,
59
+ evidence_memory_ids, created_at
60
+ FROM session_reflections
61
+ WHERE user_id = $1
62
+ ORDER BY embedding <=> $2::vector
63
+ LIMIT $3`, [userId, pgvector.toSql(queryEmbedding), topK]);
64
+ return rows.map(mapRow);
65
+ }
66
+ }
67
+ /**
68
+ * Map a Postgres query result row to a Reflection object.
69
+ * Excludes the embedding vector from the returned object (not needed for
70
+ * app logic, only for similarity search on insertion/retrieval).
71
+ */
72
+ function mapRow(r) {
73
+ return {
74
+ id: r.id,
75
+ userId: r.user_id,
76
+ conversationId: r.conversation_id,
77
+ observation: r.observation,
78
+ observationType: r.observation_type,
79
+ evidenceMemoryIds: r.evidence_memory_ids,
80
+ embedding: [],
81
+ createdAt: r.created_at,
82
+ };
83
+ }
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Structured claim/version history repository.
3
+ */
4
+ import pg from 'pg';
5
+ import { type ClaimRow, type ClaimVersionRow, type MutationSummary, type MutationType, type RelationType, type SearchResult } from './repository-types.js';
6
+ export interface MutationProvenance {
7
+ mutationType: MutationType;
8
+ mutationReason?: string;
9
+ previousVersionId?: string;
10
+ actorModel?: string;
11
+ contradictionConfidence?: number;
12
+ }
13
+ export interface ClaimSlotInput {
14
+ slotKey: string;
15
+ subjectEntityId: string;
16
+ relationType: RelationType;
17
+ objectEntityId: string;
18
+ }
19
+ export interface ClaimSlotTarget {
20
+ claimId: string;
21
+ versionId: string;
22
+ memoryId: string;
23
+ }
24
+ export interface SlotBackfillCandidate {
25
+ claimId: string;
26
+ userId: string;
27
+ memoryId: string;
28
+ }
29
+ export declare class ClaimRepository {
30
+ private pool;
31
+ constructor(pool: pg.Pool);
32
+ createClaim(userId: string, claimType: string, validAt?: Date, slot?: ClaimSlotInput | null): Promise<string>;
33
+ createClaimWithClient(client: pg.PoolClient, userId: string, claimType: string, validAt?: Date, slot?: ClaimSlotInput | null): Promise<string>;
34
+ getClaim(id: string, userId: string): Promise<ClaimRow | null>;
35
+ getActiveClaimTargetBySlot(userId: string, slotKey: string): Promise<ClaimSlotTarget | null>;
36
+ listClaimsMissingSlots(userId: string): Promise<SlotBackfillCandidate[]>;
37
+ updateClaimSlot(userId: string, claimId: string, slot: ClaimSlotInput): Promise<void>;
38
+ setClaimCurrentVersion(claimId: string, versionId: string | null, status?: string, validAt?: Date): Promise<void>;
39
+ setClaimCurrentVersionWithClient(client: pg.PoolClient, claimId: string, versionId: string | null, status?: string, validAt?: Date): Promise<void>;
40
+ invalidateClaim(userId: string, claimId: string, invalidAt?: Date, invalidatedByVersionId?: string | null, status?: string): Promise<void>;
41
+ invalidateClaimWithClient(client: pg.PoolClient, userId: string, claimId: string, invalidAt?: Date, invalidatedByVersionId?: string | null, status?: string): Promise<void>;
42
+ createClaimVersion(input: {
43
+ claimId: string;
44
+ userId: string;
45
+ memoryId?: string;
46
+ content: string;
47
+ embedding: number[];
48
+ importance: number;
49
+ sourceSite: string;
50
+ sourceUrl?: string;
51
+ episodeId?: string;
52
+ validFrom?: Date;
53
+ provenance?: MutationProvenance;
54
+ }): Promise<string>;
55
+ createClaimVersionWithClient(client: pg.PoolClient, input: {
56
+ claimId: string;
57
+ userId: string;
58
+ memoryId?: string;
59
+ content: string;
60
+ embedding: number[];
61
+ importance: number;
62
+ sourceSite: string;
63
+ sourceUrl?: string;
64
+ episodeId?: string;
65
+ validFrom?: Date;
66
+ provenance?: MutationProvenance;
67
+ }): Promise<string>;
68
+ getClaimVersionByMemoryId(userId: string, memoryId: string): Promise<ClaimVersionRow | null>;
69
+ getClaimVersionByMemoryIdWithClient(client: pg.PoolClient, userId: string, memoryId: string): Promise<ClaimVersionRow | null>;
70
+ getClaimVersion(versionId: string, userId: string): Promise<ClaimVersionRow | null>;
71
+ getClaimVersionAtTime(claimId: string, userId: string, asOf: string): Promise<ClaimVersionRow | null>;
72
+ listClaimVersions(claimId: string): Promise<ClaimVersionRow[]>;
73
+ /**
74
+ * Create a new version for an UPDATE mutation, preserving the old version
75
+ * in the version history. The old version gets valid_to set and the new
76
+ * version becomes current.
77
+ */
78
+ createUpdateVersion(input: {
79
+ oldVersionId: string;
80
+ claimId: string;
81
+ userId: string;
82
+ memoryId: string;
83
+ content: string;
84
+ embedding: number[];
85
+ importance: number;
86
+ sourceSite: string;
87
+ sourceUrl?: string;
88
+ episodeId?: string;
89
+ validFrom?: Date;
90
+ mutationReason?: string;
91
+ actorModel?: string;
92
+ }): Promise<string>;
93
+ supersedeClaimVersion(userId: string, versionId: string, supersededByVersionId: string | null, validTo?: Date): Promise<void>;
94
+ supersedeClaimVersionWithClient(client: pg.PoolClient, userId: string, versionId: string, supersededByVersionId: string | null, validTo?: Date): Promise<void>;
95
+ addEvidence(input: {
96
+ claimVersionId: string;
97
+ episodeId?: string;
98
+ memoryId?: string;
99
+ quoteText?: string;
100
+ speaker?: string;
101
+ }): Promise<void>;
102
+ addEvidenceWithClient(client: pg.PoolClient, input: {
103
+ claimVersionId: string;
104
+ episodeId?: string;
105
+ memoryId?: string;
106
+ quoteText?: string;
107
+ speaker?: string;
108
+ }): Promise<void>;
109
+ searchClaimVersions(userId: string, queryEmbedding: number[], limit: number, asOf: string, sourceSite?: string): Promise<SearchResult[]>;
110
+ countClaims(userId: string): Promise<number>;
111
+ countOpenClaimVersions(claimId: string): Promise<number>;
112
+ /**
113
+ * Get the full mutation history for a claim, ordered chronologically.
114
+ * Returns all versions including superseded ones, with provenance metadata.
115
+ */
116
+ getMutationHistory(claimId: string): Promise<ClaimVersionRow[]>;
117
+ /**
118
+ * Find the claim associated with a memory ID (even if the memory is deleted).
119
+ */
120
+ findClaimByMemoryId(userId: string, memoryId: string): Promise<{
121
+ claimId: string;
122
+ versions: ClaimVersionRow[];
123
+ } | null>;
124
+ /**
125
+ * Get aggregate mutation stats for a user: counts by mutation type,
126
+ * total versions, active vs superseded counts. Used for mutation audit trail.
127
+ */
128
+ getUserMutationSummary(userId: string): Promise<MutationSummary>;
129
+ /**
130
+ * Trace the supersession chain forward from a given version ID.
131
+ * Returns the sequence of versions that replaced each other,
132
+ * enabling "why did this memory change?" debugging.
133
+ */
134
+ getReversalChain(userId: string, startVersionId: string, maxDepth?: number): Promise<ClaimVersionRow[]>;
135
+ /**
136
+ * Get recent mutations across all claims for a user, ordered newest first.
137
+ * Useful for "what changed recently?" debugging.
138
+ */
139
+ getRecentMutations(userId: string, limit?: number): Promise<ClaimVersionRow[]>;
140
+ deleteAll(userId?: string): Promise<void>;
141
+ }