@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,204 @@
1
+ /**
2
+ * Typed Belief Calculus (TBC) — Phase 2 LLM resolver.
3
+ *
4
+ * The TBC is a strict superset of AUDN's `Add | Update | Delete | No-op`
5
+ * decision space. It introduces eight typed operators that each carry
6
+ * explicit storage semantics: Affirm, Update, Retract, Supersede, Promote,
7
+ * Demote, EvidenceFor, Counter.
8
+ *
9
+ * Phase 2 (this revision) wires `decideBeliefOperator` to a real LLM call
10
+ * and lets `memory-audn.ts` route through it when `RuntimeConfig.tbcEnabled`
11
+ * is true. Schema is unchanged — TBC mutations write to existing JSONB
12
+ * metadata only. See `tbc-execution.ts` for the executor and
13
+ * `docs/typed-belief-calculus.md` for design rationale.
14
+ */
15
+ import { llm as defaultLlm } from './llm.js';
16
+ import { extractFirstJsonObject } from './extraction.js';
17
+ const TBC_MAX_TOKENS = 4096;
18
+ const TBC_MAX_CANDIDATES = 3;
19
+ /**
20
+ * The eight typed belief operators that extend AUDN.
21
+ *
22
+ * Each operator describes a distinct effect on the belief graph; they are
23
+ * not mutually exclusive intents over the same evidence — `decideBeliefOperator`
24
+ * always picks exactly one per ingest, mirroring how AUDN picks exactly one
25
+ * AUDNAction today.
26
+ */
27
+ export var BeliefOperator;
28
+ (function (BeliefOperator) {
29
+ /** New evidence supports an existing claim — strengthen confidence, no new claim. */
30
+ BeliefOperator["Affirm"] = "AFFIRM";
31
+ /** Same attribute, different value — versioned supersession with both states retained. */
32
+ BeliefOperator["Update"] = "UPDATE";
33
+ /** Claim now believed false (no replacement) — mark RETRACTED, preserve as evidence. */
34
+ BeliefOperator["Retract"] = "RETRACT";
35
+ /** Replaced by a more specific or general claim — link old to new; both queryable. */
36
+ BeliefOperator["Supersede"] = "SUPERSEDE";
37
+ /** Strong, repeated belief becomes a directive (constraint tier) influencing answer prompt. */
38
+ BeliefOperator["Promote"] = "PROMOTE";
39
+ /** Challenged but not retracted — lower confidence; flag for re-evaluation. */
40
+ BeliefOperator["Demote"] = "DEMOTE";
41
+ /** Adds an evidence-for edge to a supported claim — does not introduce a new claim. */
42
+ BeliefOperator["EvidenceFor"] = "EVIDENCE_FOR";
43
+ /** Adds a counter edge to a challenged claim — does not introduce a new claim. */
44
+ BeliefOperator["Counter"] = "COUNTER";
45
+ })(BeliefOperator || (BeliefOperator = {}));
46
+ const VALID_OPERATORS = new Set(Object.values(BeliefOperator));
47
+ /** Raised when the LLM resolver cannot produce a usable TBC decision. */
48
+ export class BeliefResolverError extends Error {
49
+ cause;
50
+ constructor(message, cause) {
51
+ super(message);
52
+ this.cause = cause;
53
+ this.name = 'BeliefResolverError';
54
+ }
55
+ }
56
+ const TBC_SYSTEM_PROMPT = `You are a belief-state reconciliation system. Given a NEW atomic claim and up to ${TBC_MAX_CANDIDATES} CANDIDATE existing claims (each with current belief state), pick exactly ONE typed belief operator that best describes the relationship.
57
+
58
+ OPERATORS:
59
+ - AFFIRM: NEW supports an existing CANDIDATE; no new claim is created. Strengthens the target.
60
+ - UPDATE: NEW corrects a CANDIDATE about the same attribute (minor edit / typo / qualifier).
61
+ - RETRACT: NEW asserts an existing CANDIDATE is false, with no replacement.
62
+ - SUPERSEDE: NEW replaces a CANDIDATE with a more specific or more general claim. Both remain queryable.
63
+ - PROMOTE: NEW reinforces a repeatedly-affirmed CANDIDATE strongly enough that it should become a directive.
64
+ - DEMOTE: NEW challenges a CANDIDATE but is not strong enough to retract — lower its confidence.
65
+ - EVIDENCE_FOR: NEW is itself novel content but adds a supporting edge to a CANDIDATE.
66
+ - COUNTER: NEW is itself novel content but adds a contradicting edge to a CANDIDATE.
67
+
68
+ RULES:
69
+ - Pick AFFIRM when the candidate set is empty AND the new claim has no clear target.
70
+ - target_claim_id MUST match one of the CANDIDATE ids when the operator references a target.
71
+ - confidence_delta is in [-1, 1]: positive for AFFIRM/EVIDENCE_FOR/PROMOTE, negative for DEMOTE/COUNTER/RETRACT, 0 for UPDATE/SUPERSEDE.
72
+ - Prefer EVIDENCE_FOR over AFFIRM when the new claim contains genuinely novel surface content but semantically supports the target.
73
+
74
+ OUTPUT FORMAT (JSON):
75
+ {
76
+ "operator": "AFFIRM" | "UPDATE" | "RETRACT" | "SUPERSEDE" | "PROMOTE" | "DEMOTE" | "EVIDENCE_FOR" | "COUNTER",
77
+ "target_claim_id": null | "id of candidate",
78
+ "confidence_delta": -1.0 to 1.0,
79
+ "rationale": "one sentence justification"
80
+ }
81
+
82
+ Return only the JSON object. Do not wrap it in markdown fences. Do not explain your reasoning outside the JSON.`;
83
+ function viewCandidate(candidate) {
84
+ // Phase 2 does not yet hydrate confidence from storage; future phases pass
85
+ // the loaded BeliefMetadata in. For now we report the AUDN-era defaults.
86
+ return {
87
+ id: candidate.id,
88
+ content: candidate.content,
89
+ similarity: candidate.similarity,
90
+ confidence: 1.0,
91
+ mutation_type: null,
92
+ history_depth: 0,
93
+ };
94
+ }
95
+ function buildTbcUserMessage(newClaim, candidates) {
96
+ const trimmed = candidates.slice(0, TBC_MAX_CANDIDATES).map(viewCandidate);
97
+ const candidatesBlock = trimmed.length === 0
98
+ ? '(no candidates)'
99
+ : trimmed.map((c) => (`[ID: ${c.id}] (similarity: ${c.similarity.toFixed(2)}, confidence: ${c.confidence.toFixed(2)}, mutation: ${c.mutation_type ?? 'NONE'}, history_depth: ${c.history_depth}) ${c.content}`)).join('\n');
100
+ return `NEW CLAIM: ${newClaim.fact}\n\nCANDIDATE CLAIMS:\n${candidatesBlock}`;
101
+ }
102
+ function parseTbcDecision(raw, candidateIds) {
103
+ const cleaned = extractFirstJsonObject(raw);
104
+ let parsed;
105
+ try {
106
+ parsed = JSON.parse(cleaned);
107
+ }
108
+ catch (err) {
109
+ throw new BeliefResolverError(`TBC resolver returned non-JSON output: ${cleaned.slice(0, 400)}`, err);
110
+ }
111
+ return validateTbcDecision(parsed, candidateIds);
112
+ }
113
+ /** Operators that require a target_claim_id from the candidate set. AFFIRM is the only exception. */
114
+ const TARGET_REQUIRED_OPERATORS = new Set([
115
+ BeliefOperator.Update,
116
+ BeliefOperator.Retract,
117
+ BeliefOperator.Supersede,
118
+ BeliefOperator.Promote,
119
+ BeliefOperator.Demote,
120
+ BeliefOperator.EvidenceFor,
121
+ BeliefOperator.Counter,
122
+ ]);
123
+ // fallow-ignore-next-line complexity
124
+ function validateTbcDecision(parsed, candidateIds) {
125
+ const operator = typeof parsed.operator === 'string' && VALID_OPERATORS.has(parsed.operator)
126
+ ? parsed.operator
127
+ : null;
128
+ if (!operator) {
129
+ throw new BeliefResolverError(`TBC resolver returned invalid operator: ${String(parsed.operator)}`);
130
+ }
131
+ const target = typeof parsed.target_claim_id === 'string' ? parsed.target_claim_id : null;
132
+ if (target !== null && !candidateIds.has(target)) {
133
+ throw new BeliefResolverError(`TBC resolver returned target_claim_id "${target}" not in candidate set [${[...candidateIds].join(', ')}]`);
134
+ }
135
+ if (TARGET_REQUIRED_OPERATORS.has(operator) && target === null) {
136
+ throw new BeliefResolverError(`TBC resolver picked ${operator} but provided no target_claim_id. ${operator} requires one of [${[...candidateIds].join(', ')}].`);
137
+ }
138
+ const deltaRaw = typeof parsed.confidence_delta === 'number' ? parsed.confidence_delta : 0;
139
+ const confidence_delta = Number.isFinite(deltaRaw) ? Math.max(-1, Math.min(1, deltaRaw)) : 0;
140
+ const rationale = typeof parsed.rationale === 'string' ? parsed.rationale : '';
141
+ return {
142
+ operator,
143
+ ...(target ? { target_claim_id: target } : {}),
144
+ confidence_delta,
145
+ rationale,
146
+ };
147
+ }
148
+ /**
149
+ * Resolve a typed belief operator for a candidate set via an LLM call.
150
+ *
151
+ * Fail-closed: any LLM transport failure or parser failure raises
152
+ * `BeliefResolverError` rather than silently returning an `Affirm`/`ADD`
153
+ * stub. AUDN's existing executor will surface the error to the caller.
154
+ *
155
+ * The signature mirrors `resolveAUDN(factText, candidates)` so the
156
+ * `memory-audn.ts` call site can swap it in cleanly.
157
+ *
158
+ * @param newClaim - The inbound atomic claim about to be ingested.
159
+ * @param candidates - Conflict candidates already discovered via the standard
160
+ * AUDN candidate search; same input AUDN sees today.
161
+ * @param llmClient - Optional LLM provider override for tests; defaults to
162
+ * the shared singleton in `services/llm.ts`.
163
+ * @returns A `BeliefOperationDecision` selecting one of the eight operators.
164
+ */
165
+ export async function decideBeliefOperator(newClaim, candidates, llmClient = defaultLlm) {
166
+ const candidateIds = new Set(candidates.slice(0, TBC_MAX_CANDIDATES).map((c) => c.id));
167
+ const messages = [
168
+ { role: 'system', content: TBC_SYSTEM_PROMPT },
169
+ { role: 'user', content: buildTbcUserMessage(newClaim, candidates) },
170
+ ];
171
+ return runTbcLlmWithRetry(messages, candidateIds, llmClient);
172
+ }
173
+ /**
174
+ * Issue the TBC LLM call and parse. On parser/validation failure, retry ONCE
175
+ * with the validation error appended to the prompt as corrective context.
176
+ * Fail-closed (re-throws) if the retry also fails — preserves AUDN semantics.
177
+ */
178
+ async function runTbcLlmWithRetry(messages, candidateIds, llmClient) {
179
+ try {
180
+ return await callAndParseTbc(messages, candidateIds, llmClient);
181
+ }
182
+ catch (firstErr) {
183
+ if (!(firstErr instanceof BeliefResolverError))
184
+ throw firstErr;
185
+ const correctiveTurn = {
186
+ role: 'user',
187
+ content: `Your previous response was invalid: ${firstErr.message}\nReturn a valid JSON object that conforms to the schema. If you pick UPDATE, RETRACT, SUPERSEDE, PROMOTE, DEMOTE, EVIDENCE_FOR, or COUNTER, you MUST set target_claim_id to one of the candidate IDs above.`,
188
+ };
189
+ return callAndParseTbc([...messages, correctiveTurn], candidateIds, llmClient);
190
+ }
191
+ }
192
+ async function callAndParseTbc(messages, candidateIds, llmClient) {
193
+ let raw;
194
+ try {
195
+ raw = await llmClient.chat(messages, { temperature: 0, jsonMode: true, maxTokens: TBC_MAX_TOKENS });
196
+ }
197
+ catch (err) {
198
+ throw new BeliefResolverError(`TBC resolver LLM call failed: ${err.message}`, err);
199
+ }
200
+ if (!raw) {
201
+ throw new BeliefResolverError('TBC resolver returned empty content');
202
+ }
203
+ return parseTbcDecision(raw, candidateIds);
204
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @file Typed configuration for the managed-blob upload pipeline.
3
+ *
4
+ * Discriminated by `rawStorageMode` so pointer-only deployments
5
+ * carry no HMAC secret at all (vs. holding a placeholder that is
6
+ * "never consumed in practice" — that earlier shape violated the
7
+ * workspace no-fallback rule and made it possible to leak a fake
8
+ * value into service code).
9
+ *
10
+ * - `pointer_only` deployments: `{rawStorageMode, rawStoragePrefix}`
11
+ * only. No key derivation runs in this branch, so the HMAC
12
+ * secret is structurally absent.
13
+ * - `managed_blob` deployments: REQUIRED `storageKeyHmacSecret`.
14
+ * `runtime-container` narrows `RuntimeConfig` to this variant
15
+ * when it constructs the document upload pipeline; tests build
16
+ * the variant directly with `TEST_STORAGE_KEY_HMAC_SECRET`.
17
+ *
18
+ * Callers narrow with `rawStorageMode === 'managed_blob'` (the
19
+ * upload pipeline's early-return gate is exactly that check), at
20
+ * which point the secret is statically available without any
21
+ * runtime defensive read.
22
+ */
23
+ /** Pointer-only — no managed-key derivation runs in this branch. */
24
+ export interface UploadConfigPointerOnly {
25
+ rawStorageMode: 'pointer_only';
26
+ rawStoragePrefix: string;
27
+ }
28
+ /** Managed-blob — HMAC secret required to derive PII-safe key prefixes. */
29
+ export interface UploadConfigManagedBlob {
30
+ rawStorageMode: 'managed_blob';
31
+ rawStoragePrefix: string;
32
+ storageKeyHmacSecret: string;
33
+ }
34
+ export type UploadConfig = UploadConfigPointerOnly | UploadConfigManagedBlob;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @file Typed configuration for the managed-blob upload pipeline.
3
+ *
4
+ * Discriminated by `rawStorageMode` so pointer-only deployments
5
+ * carry no HMAC secret at all (vs. holding a placeholder that is
6
+ * "never consumed in practice" — that earlier shape violated the
7
+ * workspace no-fallback rule and made it possible to leak a fake
8
+ * value into service code).
9
+ *
10
+ * - `pointer_only` deployments: `{rawStorageMode, rawStoragePrefix}`
11
+ * only. No key derivation runs in this branch, so the HMAC
12
+ * secret is structurally absent.
13
+ * - `managed_blob` deployments: REQUIRED `storageKeyHmacSecret`.
14
+ * `runtime-container` narrows `RuntimeConfig` to this variant
15
+ * when it constructs the document upload pipeline; tests build
16
+ * the variant directly with `TEST_STORAGE_KEY_HMAC_SECRET`.
17
+ *
18
+ * Callers narrow with `rawStorageMode === 'managed_blob'` (the
19
+ * upload pipeline's early-return gate is exactly that check), at
20
+ * which point the secret is statically available without any
21
+ * runtime defensive read.
22
+ */
23
+ export {};
@@ -0,0 +1,65 @@
1
+ /**
2
+ * the managed-upload upload-pipeline decision helpers — pure functions extracted
3
+ * out of `document-upload.ts` so the α/β/β2/γ orchestration stays
4
+ * under the 40-LOC-per-function cap and the decision tables are
5
+ * independently testable.
6
+ *
7
+ * - `classifyIdempotent` decides what an in-flight `uploadRaw`
8
+ * should do given the document's current row state + the
9
+ * incoming content hash. Drives the claim step's idempotency short-
10
+ * circuit and the same-bytes crash recovery branches.
11
+ * - `deriveFinalRawStorageStatus` maps the adapter's lifecycle hint
12
+ * (`'stored'` / `'pending'`) + provider name to the terminal
13
+ * `raw_storage_status` value the finalization step writes. Provider-aware:
14
+ * Filecoin `'stored'` is `blob_available` (gateway-confirmed
15
+ * retrievable), immediate providers stay `blob_stored`.
16
+ *
17
+ * No imports of pg / store / codec — these helpers are 100% pure so
18
+ * tests can drive them with plain row literals.
19
+ */
20
+ import type { RawDocumentRow } from '../db/raw-document-types.js';
21
+ export type UploadIdempotencyDecision = {
22
+ kind: 'returnExisting';
23
+ } | {
24
+ kind: 'reclaimAndUpload';
25
+ } | {
26
+ kind: 'finalize';
27
+ };
28
+ /**
29
+ * Decision-table classifier: given the row's current state + the
30
+ * incoming content hash, decide whether the claim step can short-circuit
31
+ * (returnExisting), needs to re-run β/β2/γ in full (reclaimAndUpload),
32
+ * or can jump straight to the finalization step (finalize — recovery from a crash
33
+ * that happened between the durable URI-write step's URI write and the finalization step's status
34
+ * flip).
35
+ *
36
+ * Returns `null` when the row's content hash does NOT match — caller
37
+ * runs the existing `hasConflictingManagedBlob` check, which raises a
38
+ * 409 if the slot is occupied with different bytes.
39
+ */
40
+ export declare function classifyIdempotent(document: RawDocumentRow, contentHash: string): UploadIdempotencyDecision | null;
41
+ /**
42
+ * Provider-aware terminal status mapping. the finalization step writes the return
43
+ * value as the new `raw_storage_status`.
44
+ *
45
+ * - Adapter `'pending'` → `blob_pending` regardless of provider
46
+ * (the reconciler completes the flow).
47
+ * - Adapter `'stored'` + eventual content-addressed provider →
48
+ * `blob_available` (the provider has confirmed retrievability;
49
+ * we skip past `blob_stored` directly to terminal-OK).
50
+ * - Adapter `'stored'` + any other provider → `blob_stored`
51
+ * (immediate providers — local_fs / s3).
52
+ */
53
+ export declare function deriveFinalRawStorageStatus(args: {
54
+ storedStatus: 'stored' | 'pending';
55
+ storageProvider: string;
56
+ }): 'blob_pending' | 'blob_available' | 'blob_stored';
57
+ /**
58
+ * Read the persisted `upload_result.stored_status` sidecar the durable URI-write step
59
+ * wrote into `raw_storage_metadata`. the finalization step needs this on the
60
+ * finalize-recovery path because the in-memory `stored` from the provider-write step
61
+ * is null when β + β2 are skipped. Returns null when the sidecar is
62
+ * missing or malformed — caller must defend (the finalization step throws an
63
+ * InvariantError in that case).
64
+ */
65
+ export declare function readPersistedStoredStatus(metadata: Record<string, unknown>): 'stored' | 'pending' | null;
@@ -0,0 +1,98 @@
1
+ /**
2
+ * the managed-upload upload-pipeline decision helpers — pure functions extracted
3
+ * out of `document-upload.ts` so the α/β/β2/γ orchestration stays
4
+ * under the 40-LOC-per-function cap and the decision tables are
5
+ * independently testable.
6
+ *
7
+ * - `classifyIdempotent` decides what an in-flight `uploadRaw`
8
+ * should do given the document's current row state + the
9
+ * incoming content hash. Drives the claim step's idempotency short-
10
+ * circuit and the same-bytes crash recovery branches.
11
+ * - `deriveFinalRawStorageStatus` maps the adapter's lifecycle hint
12
+ * (`'stored'` / `'pending'`) + provider name to the terminal
13
+ * `raw_storage_status` value the finalization step writes. Provider-aware:
14
+ * Filecoin `'stored'` is `blob_available` (gateway-confirmed
15
+ * retrievable), immediate providers stay `blob_stored`.
16
+ *
17
+ * No imports of pg / store / codec — these helpers are 100% pure so
18
+ * tests can drive them with plain row literals.
19
+ */
20
+ /**
21
+ * Decision-table classifier: given the row's current state + the
22
+ * incoming content hash, decide whether the claim step can short-circuit
23
+ * (returnExisting), needs to re-run β/β2/γ in full (reclaimAndUpload),
24
+ * or can jump straight to the finalization step (finalize — recovery from a crash
25
+ * that happened between the durable URI-write step's URI write and the finalization step's status
26
+ * flip).
27
+ *
28
+ * Returns `null` when the row's content hash does NOT match — caller
29
+ * runs the existing `hasConflictingManagedBlob` check, which raises a
30
+ * 409 if the slot is occupied with different bytes.
31
+ */
32
+ export function classifyIdempotent(document, contentHash) {
33
+ if (document.contentHash !== contentHash)
34
+ return null;
35
+ switch (document.rawStorageStatus) {
36
+ case 'blob_stored':
37
+ case 'blob_pending':
38
+ case 'blob_available':
39
+ return { kind: 'returnExisting' };
40
+ case 'blob_uploading':
41
+ // the claim step-only OR Phase-β-only row (crash before the durable URI-write step wrote
42
+ // the URI). Bytes may already be on the provider but we don't
43
+ // have the CID — re-run β + β2 + γ. If the provider is
44
+ // content-addressed-idempotent, the second `store.put()` returns
45
+ // the same CID; if not, this creates a rare orphan-billing risk
46
+ // for provider cleanup.
47
+ if (document.storageUri === null)
48
+ return { kind: 'reclaimAndUpload' };
49
+ // the durable URI-write step succeeded; crash before the finalization step flipped the status.
50
+ // The URI is durable in the row, the bytes are on the provider.
51
+ // Skip β + β2 entirely; run the finalization step alone. No re-encode, no
52
+ // re-upload, no re-billing.
53
+ return { kind: 'finalize' };
54
+ case 'raw_storage_failed':
55
+ return { kind: 'reclaimAndUpload' };
56
+ default:
57
+ return null;
58
+ }
59
+ }
60
+ /**
61
+ * Provider-aware terminal status mapping. the finalization step writes the return
62
+ * value as the new `raw_storage_status`.
63
+ *
64
+ * - Adapter `'pending'` → `blob_pending` regardless of provider
65
+ * (the reconciler completes the flow).
66
+ * - Adapter `'stored'` + eventual content-addressed provider →
67
+ * `blob_available` (the provider has confirmed retrievability;
68
+ * we skip past `blob_stored` directly to terminal-OK).
69
+ * - Adapter `'stored'` + any other provider → `blob_stored`
70
+ * (immediate providers — local_fs / s3).
71
+ */
72
+ export function deriveFinalRawStorageStatus(args) {
73
+ if (args.storedStatus === 'pending')
74
+ return 'blob_pending';
75
+ if (isEventualContentProvider(args.storageProvider))
76
+ return 'blob_available';
77
+ return 'blob_stored';
78
+ }
79
+ function isEventualContentProvider(provider) {
80
+ return provider === 'filecoin';
81
+ }
82
+ /**
83
+ * Read the persisted `upload_result.stored_status` sidecar the durable URI-write step
84
+ * wrote into `raw_storage_metadata`. the finalization step needs this on the
85
+ * finalize-recovery path because the in-memory `stored` from the provider-write step
86
+ * is null when β + β2 are skipped. Returns null when the sidecar is
87
+ * missing or malformed — caller must defend (the finalization step throws an
88
+ * InvariantError in that case).
89
+ */
90
+ export function readPersistedStoredStatus(metadata) {
91
+ const uploadResult = metadata['upload_result'];
92
+ if (!uploadResult || typeof uploadResult !== 'object')
93
+ return null;
94
+ const stored = uploadResult['stored_status'];
95
+ if (stored === 'stored' || stored === 'pending')
96
+ return stored;
97
+ return null;
98
+ }
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Stateless helpers extracted out of `document-upload.ts` to keep the
3
+ * orchestration file under the workspace 400-line cap. These are pure
4
+ * functions + small async wrappers — no orchestration state, no
5
+ * codec/store/registry coupling beyond the typed argument bag.
6
+ */
7
+ import pg from 'pg';
8
+ import type { RawDocumentRow } from '../db/raw-document-types.js';
9
+ import type { StoredRawContent } from '../storage/raw-content-store.js';
10
+ export declare class UploadDocumentNotFoundError extends Error {
11
+ readonly documentId: string;
12
+ constructor(documentId: string);
13
+ }
14
+ export declare class ManagedStorageDisabledError extends Error {
15
+ constructor();
16
+ }
17
+ export declare class UploadDocumentConflictError extends Error {
18
+ readonly documentId: string;
19
+ readonly existingContentHash: string;
20
+ readonly incomingContentHash: string;
21
+ constructor(documentId: string, existingContentHash: string, incomingContentHash: string);
22
+ }
23
+ /**
24
+ * Surfaced when Phase β2 or Phase γ's compare-and-set found 0 rows.
25
+ * Means our claim was lost — another worker reclaimed the row or it
26
+ * was concurrently deleted. Not exported because route handlers
27
+ * currently map any such error to a generic 500; promote to `export`
28
+ * when Phase 8.5 observability needs to discriminate it.
29
+ */
30
+ export declare class UploadClaimLostError extends Error {
31
+ readonly documentId: string;
32
+ readonly claimId: string;
33
+ readonly phase: 'beta2' | 'gamma';
34
+ constructor(documentId: string, claimId: string, phase: 'beta2' | 'gamma');
35
+ }
36
+ export interface UploadRawInput {
37
+ userId: string;
38
+ documentId: string;
39
+ body: Buffer;
40
+ contentType?: string;
41
+ }
42
+ export interface UploadRawResult {
43
+ documentId: string;
44
+ storageProvider: string;
45
+ storageUri: string;
46
+ contentHash: string;
47
+ sizeBytes: number;
48
+ rawStorageStatus: 'blob_stored' | 'blob_pending' | 'blob_available';
49
+ storageMode: 'managed_blob';
50
+ /**
51
+ * INTERNAL metadata shape `{ codec, filecoin?, upload_result }`.
52
+ * Route formatters project this through
53
+ * `formatPublicRawStorageMetadata` before emitting to the wire
54
+ * (rev-fix HIGH 3). Internal callers (Phase γ recovery, tests) can
55
+ * read the full shape directly off this field.
56
+ */
57
+ rawStorageMetadata: Record<string, unknown>;
58
+ idempotentSkip: boolean;
59
+ }
60
+ export declare function loadActive(client: pg.PoolClient, input: UploadRawInput): Promise<RawDocumentRow>;
61
+ export declare function sha256Hex(buf: Buffer): string;
62
+ export declare function describeError(err: unknown): string;
63
+ /**
64
+ * Build the adapter-relative key the blob is stored under. Includes
65
+ * the content hash so byte-identical re-uploads collide on the same
66
+ * key (no orphan from re-uploading the same content).
67
+ *
68
+ * `userPrefix` MUST be the HMAC-SHA256-derived per-user prefix from
69
+ * `deriveStorageKeyPrefix(secret, userId)`. The plaintext `userId`
70
+ * MUST NEVER appear in any provider key/URI — the HMAC prefix is
71
+ * the PII-safe replacement. Stable across retries (same user → same
72
+ * prefix) so the same-bytes re-upload idempotency contract holds.
73
+ */
74
+ export declare function blobKey(prefix: string, userPrefix: string, documentId: string, contentHash: string): string;
75
+ /**
76
+ * Echo the row's existing state as the idempotent-skip response.
77
+ * Phase α returns this when `classifyIdempotent === 'returnExisting'`.
78
+ */
79
+ export declare function idempotentResult(document: RawDocumentRow, contentHash: string, sizeBytes: number): UploadRawResult;
80
+ export interface BuildUploadResultArgs {
81
+ documentId: string;
82
+ storageProvider: string;
83
+ storageUri: string;
84
+ contentHash: string;
85
+ sizeBytes: number;
86
+ finalStatus: 'blob_stored' | 'blob_pending' | 'blob_available';
87
+ rawStorageMetadata: Record<string, unknown>;
88
+ idempotentSkip: boolean;
89
+ }
90
+ export declare function buildUploadResult(args: BuildUploadResultArgs): UploadRawResult;
91
+ /**
92
+ * Build the `raw_storage_metadata` JSONB Phase β2 writes:
93
+ * - `codec`: the encoder's sidecar (name + version + AES-GCM internals).
94
+ * - spread of `stored.providerMetadata`: `{ filecoin: { ... } }` for
95
+ * Filecoin; `{}` for immediate providers.
96
+ * - `upload_result.stored_status`: INTERNAL sidecar Phase γ reads
97
+ * on the finalize-recovery path. Public formatters strip it.
98
+ */
99
+ export declare function buildPhaseBeta2Metadata(stored: StoredRawContent & {
100
+ codecMetadata: Record<string, unknown>;
101
+ }): Record<string, unknown>;
102
+ /**
103
+ * Best-effort `raw_storage_failed` marker. Logs (does not swallow)
104
+ * the marker failure so the original upload error is the one the
105
+ * caller sees.
106
+ */
107
+ export declare function markRawStorageFailureBestEffort(q: pg.Pool, userId: string, documentId: string, code: string, message: string): Promise<void>;