@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,228 @@
1
+ /**
2
+ * Raw-content storage interface for the document pipeline.
3
+ *
4
+ * Adapter-agnostic facade for the bytes that back a document with
5
+ * `storage_mode = 'managed_blob'`. Implementations live alongside this
6
+ * file (`local-fs-store.ts`, `s3-store.ts`); the factory in
7
+ * `factory.ts` selects one at startup based on `RuntimeConfig`.
8
+ *
9
+ * Contract:
10
+ *
11
+ * - `put` writes the supplied bytes under the supplied key, returns the
12
+ * URI we will persist on `raw_documents.storage_uri`.
13
+ * - `get` and `head` accept the same URI shape `put` returned. They are
14
+ * the read-side hooks the future parsing path will call.
15
+ * - `delete` is **idempotent**: a missing key returns `{ deleted: false }`,
16
+ * not an error. Transport/auth failures still throw.
17
+ * - Adapters MUST NOT silently fall back to a different provider; if
18
+ * their config is wrong or the upstream service is unavailable, they
19
+ * must throw.
20
+ */
21
+ /**
22
+ * Lifecycle hint returned by `put`. Immediate providers (`local_fs`,
23
+ * `s3`) always report `'stored'` — bytes are retrievable the moment
24
+ * `put` returns. Eventual providers (e.g. Filecoin onramps in a future
25
+ * phase) may report `'pending'` when the provider has accepted the
26
+ * upload but storage/retrievability is not yet confirmed; the service
27
+ * layer maps that onto `raw_storage_status='blob_pending'` and a
28
+ * reconciler later promotes the row to `'blob_available'` or
29
+ * `'blob_archival_failed'`.
30
+ */
31
+ export type StoredRawContentStatus = 'stored' | 'pending';
32
+ /** Identifier returned by `put`; opaque to the rest of the codebase. */
33
+ export interface StoredRawContent {
34
+ /** Adapter-prefixed URI we persist on `raw_documents.storage_uri`. */
35
+ storageUri: string;
36
+ /** Adapter id (e.g. `local_fs`, `s3`). Mirrors `raw_documents.storage_provider`. */
37
+ storageProvider: string;
38
+ /** SHA-256 hex of the bytes the adapter actually stored. */
39
+ contentHash: string;
40
+ /** Bytes actually persisted. Always equals `input.body.length`. */
41
+ sizeBytes: number;
42
+ /** See {@link StoredRawContentStatus}. */
43
+ status: StoredRawContentStatus;
44
+ /** Provider-side identifiers the service layer persists on `raw_documents.raw_storage_metadata`. */
45
+ providerMetadata: RawContentProviderMetadata;
46
+ }
47
+ export interface PutRawContentInput {
48
+ /** Adapter-relative key (e.g. `<prefix>/s/<hmac-hex32>/documents/<doc-id>/<hash>.bin`). */
49
+ key: string;
50
+ /** Bytes to persist. The adapter does not mutate this. */
51
+ body: Buffer;
52
+ /** Optional MIME type, persisted alongside the blob when supported. */
53
+ contentType?: string;
54
+ }
55
+ /**
56
+ * Free-form provider-side metadata. Immediate providers may
57
+ * populate scalar fields like `etag`/`versionId`/`mtime`;
58
+ * content-addressed providers nest a provider-keyed sibling
59
+ * carrying their own internal shape (e.g. the Filecoin adapter
60
+ * writes `{ filecoin: { piece_cid, copies, … } }`). The exact
61
+ * sub-shape is provider-specific and treated as opaque by the
62
+ * upload pipeline; the public-projection seam
63
+ * (`filecoin-public-metadata.ts` and friends) is the single
64
+ * translator from that internal shape to the wire response.
65
+ */
66
+ export type RawContentProviderMetadata = Record<string, unknown>;
67
+ export interface RawContentMetadata {
68
+ contentLength: number;
69
+ contentType: string | null;
70
+ contentHash: string | null;
71
+ providerMetadata: RawContentProviderMetadata;
72
+ }
73
+ /**
74
+ * Permanent-failure signal returned by `head()` when the provider
75
+ * itself reports that this specific URI / CID will NEVER become
76
+ * retrievable. The reconciler routes a `permanent` head
77
+ * result directly to `blob_archival_failed` without consuming a
78
+ * retry — there's no point in continuing to probe.
79
+ *
80
+ * Adapters MUST only set this for per-row terminal failures
81
+ * (Filecoin onramp `status: 'failed'`, malformed `ipfs://` URI,
82
+ * etc.). Auth / capability / rate-limit / 5xx outages are GLOBAL
83
+ * infra failures affecting every row — those stay transient
84
+ * (thrown errors or `exists: false`) so a single misconfigured
85
+ * deployment doesn't permanently fail every pending row.
86
+ */
87
+ export interface RawContentPermanentFailure {
88
+ code: string;
89
+ message: string;
90
+ }
91
+ export interface RawContentHeadResult {
92
+ exists: boolean;
93
+ metadata: RawContentMetadata | null;
94
+ /** Optional per-row terminal-failure signal; see {@link RawContentPermanentFailure}. */
95
+ failure?: RawContentPermanentFailure;
96
+ }
97
+ export interface RawContentGetResult {
98
+ body: Buffer;
99
+ metadata: RawContentMetadata;
100
+ }
101
+ export interface RawContentDeleteResult {
102
+ /**
103
+ * `true` when the adapter actively removed bytes; `false` when the
104
+ * adapter found nothing to remove (already-missing). Both are
105
+ * NON-ERROR outcomes — the cleanup helper records both in
106
+ * `successes[]` and writes a terminal status marker either way.
107
+ */
108
+ deleted: boolean;
109
+ /**
110
+ * What the adapter's `delete` call DID at the provider boundary
111
+ * (rev-2 §1, rev-7 §5). Drives the cleanup marker:
112
+ *
113
+ * - `'deleted'` → `markRawStorageDeletedByUri` → `blob_deleted`
114
+ * - `'unpinned'` → `markRawStorageTombstonedByUri` → `blob_tombstoned`
115
+ * - `'tombstoned'` → `markRawStorageTombstonedByUri` → `blob_tombstoned`
116
+ *
117
+ * Already-missing carries the provider's natural semantics — a
118
+ * local_fs `ENOENT` is still `'deleted'` (bytes are gone), a
119
+ * Filecoin already-removed is still `'tombstoned'` (we stop
120
+ * managing the bytes either way).
121
+ */
122
+ semantics: 'deleted' | 'unpinned' | 'tombstoned';
123
+ /**
124
+ * **Internal-only** billing/cost-impact metadata for uncertain
125
+ * delete outcomes (Phase 7 of the Filecoin harvest plan). For
126
+ * Filecoin, the Synapse SDK's `deletePiece({piece})` returns
127
+ * an on-chain `0x…` transaction hash that scheduled the
128
+ * removal — operators correlate this hash to chain-side gas
129
+ * cost so they can audit the cost-impact of a cleanup pass.
130
+ * Other providers (`local_fs`, `s3`) leave the field
131
+ * `undefined`.
132
+ *
133
+ * **MUST NOT cross any public boundary.** The cleanup-result
134
+ * DTO (`ManagedBlobCleanupSuccess`) is closed-key by design;
135
+ * the route response shape never includes `txHash`. The only
136
+ * legitimate consumer is the internal observability emitter
137
+ * (`emitFilecoinEvent('filecoin.delete.tombstoned', { …,
138
+ * deleteTxHash })`), which logs to operator-side telemetry.
139
+ * The leak-invariant tests in
140
+ * `cleanup-leak-invariants.test.ts` pin the absence on the
141
+ * public side.
142
+ */
143
+ txHash?: string;
144
+ }
145
+ /**
146
+ * Capability advertisement for a `RawContentStore` instance. The
147
+ * upload service, status mapping, and `/v1/documents/limits` route
148
+ * read these to decide (a) which `raw_storage_status` to write after a
149
+ * successful `put`, (b) how `delete` interacts with the managed
150
+ * object (issued provider removal vs unpin vs tombstone), and (c)
151
+ * what semantics to advertise to clients via the preflight endpoint.
152
+ */
153
+ export interface RawContentStoreCapabilities {
154
+ /**
155
+ * `'location'` — provider URIs are path-addressed (S3 key, local-fs
156
+ * path). A subsequent `put` to the same key replaces the bytes the
157
+ * URI resolves to; the URI does NOT carry a content commitment.
158
+ * `'content'` — provider URIs are content-addressed (e.g. CID), so
159
+ * the URI is itself a commitment over the bytes the caller stored.
160
+ */
161
+ addressing: 'location' | 'content';
162
+ /**
163
+ * `'immediate'` — bytes are retrievable the instant `put` resolves.
164
+ * `'eventual'` — bytes may not yet be retrievable when `put`
165
+ * resolves; the provider exposes a separate "is it available yet"
166
+ * signal that the future reconciler consults.
167
+ */
168
+ retrievalConsistency: 'immediate' | 'eventual';
169
+ /**
170
+ * Describes what AtomicMemory's `delete` call DOES at the provider
171
+ * boundary; it does NOT promise universal byte erasure (provider
172
+ * versioning, object-lock, retention policy, replication, etc. live
173
+ * outside AtomicMemory's control).
174
+ *
175
+ * `'delete'` — `delete` issues the provider's removal operation for
176
+ * the managed object (e.g. `DeleteObject`, `unlink`). The provider
177
+ * may still retain prior versions / replicas / backups according to
178
+ * its own configuration; AtomicMemory does not assert otherwise.
179
+ * `'unpin'` — `delete` removes AtomicMemory's pin/reference only;
180
+ * the provider may continue to serve the bytes from other peers.
181
+ * `'tombstone'` — AtomicMemory stops managing the bytes and cannot
182
+ * issue removal at the provider (typical for decentralized
183
+ * networks where AtomicMemory is one of many holders).
184
+ */
185
+ deleteSemantics: 'delete' | 'unpin' | 'tombstone';
186
+ /** Whether `head` is implemented (true for all current adapters). */
187
+ supportsHead: boolean;
188
+ /** Whether `get` is implemented (true for all current adapters). */
189
+ supportsGet: boolean;
190
+ }
191
+ /**
192
+ * Opaque provider hints that `head`/`delete` MAY consult to optimize
193
+ * lookups. Shape: a provider-keyed map mirroring the sidecar
194
+ * `raw_documents.raw_storage_metadata` carries (e.g.
195
+ * `{ filecoin: { data_set_id: '42' } }`). Adapters MUST treat
196
+ * unknown / malformed / missing entries as ABSENT and fall back to
197
+ * their normal lookup path — hints are an optimization, never a
198
+ * correctness contract. The generic shape stays a plain
199
+ * `Record<string, unknown>` so the boundary doesn't acquire any
200
+ * provider-specific surface (rev-c201f21 instruction §4); each
201
+ * adapter parses its own sibling internally.
202
+ */
203
+ export type RawContentHints = Readonly<Record<string, unknown>>;
204
+ /**
205
+ * Raw-content adapter. All methods are user-agnostic — caller scoping
206
+ * lives in the key the route layer constructs.
207
+ *
208
+ * `head` and `delete` accept an optional `hints` object that adapters
209
+ * MAY use to short-circuit lookups (e.g. the Filecoin adapter reads
210
+ * `hints.filecoin.data_set_id` so it can call
211
+ * `createContext({dataSetId})` directly instead of scanning every
212
+ * owned data set via `findDataSets`). Adapters that don't recognize
213
+ * a hint MUST ignore it.
214
+ */
215
+ export interface RawContentStore {
216
+ /** Adapter id, persisted on `raw_documents.storage_provider`. */
217
+ readonly provider: string;
218
+ /** See {@link RawContentStoreCapabilities}. */
219
+ readonly capabilities: RawContentStoreCapabilities;
220
+ put(input: PutRawContentInput): Promise<StoredRawContent>;
221
+ get(storageUri: string): Promise<RawContentGetResult>;
222
+ head(storageUri: string, hints?: RawContentHints): Promise<RawContentHeadResult>;
223
+ delete(storageUri: string, hints?: RawContentHints): Promise<RawContentDeleteResult>;
224
+ }
225
+ /** Thrown when a storage URI doesn't match the adapter's expected shape. */
226
+ export declare class RawStorageUriError extends Error {
227
+ constructor(message: string);
228
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Raw-content storage interface for the document pipeline.
3
+ *
4
+ * Adapter-agnostic facade for the bytes that back a document with
5
+ * `storage_mode = 'managed_blob'`. Implementations live alongside this
6
+ * file (`local-fs-store.ts`, `s3-store.ts`); the factory in
7
+ * `factory.ts` selects one at startup based on `RuntimeConfig`.
8
+ *
9
+ * Contract:
10
+ *
11
+ * - `put` writes the supplied bytes under the supplied key, returns the
12
+ * URI we will persist on `raw_documents.storage_uri`.
13
+ * - `get` and `head` accept the same URI shape `put` returned. They are
14
+ * the read-side hooks the future parsing path will call.
15
+ * - `delete` is **idempotent**: a missing key returns `{ deleted: false }`,
16
+ * not an error. Transport/auth failures still throw.
17
+ * - Adapters MUST NOT silently fall back to a different provider; if
18
+ * their config is wrong or the upstream service is unavailable, they
19
+ * must throw.
20
+ */
21
+ /** Thrown when a storage URI doesn't match the adapter's expected shape. */
22
+ export class RawStorageUriError extends Error {
23
+ constructor(message) {
24
+ super(message);
25
+ this.name = 'RawStorageUriError';
26
+ }
27
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * S3-compatible adapter for `RawContentStore`.
3
+ *
4
+ * Backed by `@aws-sdk/client-s3`. Works against AWS S3 (no `endpoint`
5
+ * override) and against S3-compatible providers like Cloudflare R2 or
6
+ * MinIO when an explicit `endpoint` URL is supplied. The adapter is
7
+ * stateless across calls — one `S3Client` is shared per instance.
8
+ *
9
+ * Storage URI shape: `s3://<bucket>/<key>`. The bucket carried in the
10
+ * URI is what the adapter writes/reads; if a future operator changes
11
+ * `RAW_STORAGE_BUCKET`, the URIs persisted on existing rows still point
12
+ * at the original bucket, which is the correct semantics for moving the
13
+ * default bucket without orphaning historical blobs.
14
+ *
15
+ * Idempotent delete: S3 `DeleteObject` is itself idempotent (no error
16
+ * on missing key); `head` translates `NotFound`/`NoSuchKey` to
17
+ * `{exists: false}` rather than throwing.
18
+ */
19
+ import { S3Client } from '@aws-sdk/client-s3';
20
+ import { type PutRawContentInput, type RawContentDeleteResult, type RawContentGetResult, type RawContentHeadResult, type RawContentHints, type RawContentStore, type RawContentStoreCapabilities, type StoredRawContent } from './raw-content-store.js';
21
+ export interface S3RawContentStoreOptions {
22
+ /** Default bucket new puts write to. Existing URIs honor their own bucket. */
23
+ bucket: string;
24
+ region: string;
25
+ /** Custom endpoint URL for R2/MinIO/etc. Omit for AWS S3 default. */
26
+ endpoint?: string;
27
+ accessKeyId: string;
28
+ secretAccessKey: string;
29
+ /** Optional pre-built client — primarily an injection seam for tests. */
30
+ client?: S3Client;
31
+ }
32
+ export declare class S3RawContentStore implements RawContentStore {
33
+ readonly provider: "s3";
34
+ readonly capabilities: RawContentStoreCapabilities;
35
+ private readonly client;
36
+ private readonly bucket;
37
+ constructor(options: S3RawContentStoreOptions);
38
+ put(input: PutRawContentInput): Promise<StoredRawContent>;
39
+ get(storageUri: string): Promise<RawContentGetResult>;
40
+ head(storageUri: string, _hints?: RawContentHints): Promise<RawContentHeadResult>;
41
+ delete(storageUri: string, _hints?: RawContentHints): Promise<RawContentDeleteResult>;
42
+ }
@@ -0,0 +1,181 @@
1
+ /**
2
+ * S3-compatible adapter for `RawContentStore`.
3
+ *
4
+ * Backed by `@aws-sdk/client-s3`. Works against AWS S3 (no `endpoint`
5
+ * override) and against S3-compatible providers like Cloudflare R2 or
6
+ * MinIO when an explicit `endpoint` URL is supplied. The adapter is
7
+ * stateless across calls — one `S3Client` is shared per instance.
8
+ *
9
+ * Storage URI shape: `s3://<bucket>/<key>`. The bucket carried in the
10
+ * URI is what the adapter writes/reads; if a future operator changes
11
+ * `RAW_STORAGE_BUCKET`, the URIs persisted on existing rows still point
12
+ * at the original bucket, which is the correct semantics for moving the
13
+ * default bucket without orphaning historical blobs.
14
+ *
15
+ * Idempotent delete: S3 `DeleteObject` is itself idempotent (no error
16
+ * on missing key); `head` translates `NotFound`/`NoSuchKey` to
17
+ * `{exists: false}` rather than throwing.
18
+ */
19
+ import { createHash } from 'node:crypto';
20
+ import { DeleteObjectCommand, GetObjectCommand, HeadObjectCommand, PutObjectCommand, S3Client, } from '@aws-sdk/client-s3';
21
+ import { RawStorageUriError, } from './raw-content-store.js';
22
+ const PROVIDER = 's3';
23
+ const URI_PREFIX = 's3://';
24
+ /**
25
+ * S3 is path-addressed (`s3://<bucket>/<key>` — overwrites of the same
26
+ * key replace the bytes the URI resolves to), bytes are retrievable
27
+ * the moment `PutObject` returns (read-after-write consistent), and
28
+ * `DeleteObject` issues the provider's removal operation for the
29
+ * managed object. AtomicMemory does not assert what the bucket's
30
+ * versioning, object-lock, retention, or replication policies do
31
+ * with that delete call — those live outside the adapter contract.
32
+ */
33
+ const CAPABILITIES = Object.freeze({
34
+ addressing: 'location',
35
+ retrievalConsistency: 'immediate',
36
+ deleteSemantics: 'delete',
37
+ supportsHead: true,
38
+ supportsGet: true,
39
+ });
40
+ export class S3RawContentStore {
41
+ provider = PROVIDER;
42
+ capabilities = CAPABILITIES;
43
+ client;
44
+ bucket;
45
+ constructor(options) {
46
+ if (!options.bucket)
47
+ throw new Error('S3RawContentStore: bucket is required');
48
+ if (!options.region)
49
+ throw new Error('S3RawContentStore: region is required');
50
+ this.bucket = options.bucket;
51
+ this.client = options.client ?? new S3Client(buildClientConfig(options));
52
+ }
53
+ async put(input) {
54
+ await this.client.send(new PutObjectCommand({
55
+ Bucket: this.bucket,
56
+ Key: input.key,
57
+ Body: input.body,
58
+ ContentType: input.contentType,
59
+ }));
60
+ return {
61
+ storageUri: `${URI_PREFIX}${this.bucket}/${input.key}`,
62
+ storageProvider: PROVIDER,
63
+ contentHash: sha256Hex(input.body),
64
+ sizeBytes: input.body.length,
65
+ status: 'stored',
66
+ providerMetadata: {},
67
+ };
68
+ }
69
+ async get(storageUri) {
70
+ const { bucket, key } = parseUri(storageUri);
71
+ const result = await this.client.send(new GetObjectCommand({ Bucket: bucket, Key: key }));
72
+ const body = await collectBody(result.Body);
73
+ return {
74
+ body,
75
+ metadata: {
76
+ contentLength: result.ContentLength ?? body.length,
77
+ contentType: result.ContentType ?? null,
78
+ contentHash: sha256Hex(body),
79
+ providerMetadata: extractProviderMetadata(result),
80
+ },
81
+ };
82
+ }
83
+ async head(storageUri, _hints) {
84
+ const { bucket, key } = parseUri(storageUri);
85
+ try {
86
+ const result = await this.client.send(new HeadObjectCommand({ Bucket: bucket, Key: key }));
87
+ return {
88
+ exists: true,
89
+ metadata: {
90
+ contentLength: result.ContentLength ?? 0,
91
+ contentType: result.ContentType ?? null,
92
+ contentHash: null,
93
+ providerMetadata: extractProviderMetadata(result),
94
+ },
95
+ };
96
+ }
97
+ catch (err) {
98
+ if (isNotFound(err))
99
+ return { exists: false, metadata: null };
100
+ throw err;
101
+ }
102
+ }
103
+ async delete(storageUri, _hints) {
104
+ const { bucket, key } = parseUri(storageUri);
105
+ try {
106
+ // Pre-check existence so the response distinguishes "we deleted
107
+ // something" from "it was already gone". S3's DeleteObject would
108
+ // otherwise return success in both cases.
109
+ const present = await this.head(storageUri);
110
+ if (!present.exists)
111
+ return { deleted: false, semantics: 'deleted' };
112
+ await this.client.send(new DeleteObjectCommand({ Bucket: bucket, Key: key }));
113
+ return { deleted: true, semantics: 'deleted' };
114
+ }
115
+ catch (err) {
116
+ if (isNotFound(err))
117
+ return { deleted: false, semantics: 'deleted' };
118
+ throw err;
119
+ }
120
+ }
121
+ }
122
+ function buildClientConfig(options) {
123
+ const cfg = {
124
+ region: options.region,
125
+ credentials: {
126
+ accessKeyId: options.accessKeyId,
127
+ secretAccessKey: options.secretAccessKey,
128
+ },
129
+ };
130
+ if (options.endpoint) {
131
+ cfg.endpoint = options.endpoint;
132
+ // R2 / MinIO require path-style addressing; AWS S3 supports it too.
133
+ cfg.forcePathStyle = true;
134
+ }
135
+ return cfg;
136
+ }
137
+ function parseUri(storageUri) {
138
+ if (!storageUri.startsWith(URI_PREFIX)) {
139
+ throw new RawStorageUriError(`expected s3:// URI, got: ${storageUri}`);
140
+ }
141
+ const trimmed = storageUri.slice(URI_PREFIX.length);
142
+ const slash = trimmed.indexOf('/');
143
+ if (slash <= 0 || slash === trimmed.length - 1) {
144
+ throw new RawStorageUriError(`malformed s3 URI: ${storageUri}`);
145
+ }
146
+ return { bucket: trimmed.slice(0, slash), key: trimmed.slice(slash + 1) };
147
+ }
148
+ function sha256Hex(buf) {
149
+ return createHash('sha256').update(buf).digest('hex');
150
+ }
151
+ async function collectBody(body) {
152
+ if (body == null)
153
+ return Buffer.alloc(0);
154
+ const candidate = body;
155
+ if (typeof candidate.transformToByteArray === 'function') {
156
+ return Buffer.from(await candidate.transformToByteArray());
157
+ }
158
+ // Fallback for already-buffered bodies (mocks/tests).
159
+ if (Buffer.isBuffer(body))
160
+ return body;
161
+ if (body instanceof Uint8Array)
162
+ return Buffer.from(body);
163
+ throw new Error('S3 GetObject body shape not recognized');
164
+ }
165
+ function extractProviderMetadata(result) {
166
+ const meta = {};
167
+ if (result.ETag)
168
+ meta.etag = result.ETag;
169
+ if (result.VersionId)
170
+ meta.versionId = result.VersionId;
171
+ if (result.LastModified)
172
+ meta.lastModified = result.LastModified.toISOString();
173
+ return meta;
174
+ }
175
+ function isNotFound(err) {
176
+ if (typeof err !== 'object' || err === null)
177
+ return false;
178
+ const e = err;
179
+ return e.name === 'NotFound' || e.name === 'NoSuchKey' || e.Code === 'NoSuchKey'
180
+ || e.$metadata?.httpStatusCode === 404;
181
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @file Per-row `StorageBackend` registry — direct-storage parallel
3
+ * to `RawContentStoreRegistry`.
4
+ *
5
+ * The storage service's read/delete/verify paths dispatch on the
6
+ * artifact row's `provider` column, NOT on the deployment's active
7
+ * backend, so a row written when the deployment was on `local_fs`
8
+ * keeps working after the operator switches to `s3`. Pointer rows
9
+ * short-circuit before the registry is even consulted (no backend
10
+ * required for `mode='pointer'`); only managed rows go through
11
+ * `get(provider)`.
12
+ *
13
+ * Failure semantics: a managed row whose provider is not registered
14
+ * is an operational unavailability (the deployment dropped a
15
+ * provider that still has live data). The service translates the
16
+ * `BackendNotRegisteredError` lookup miss into HTTP 503
17
+ * `storage_backend_unavailable` — see `src/routes/storage.ts`. The
18
+ * registry itself returns `undefined`; callers MUST fail loud.
19
+ */
20
+ import type { StorageBackend } from './storage-backend.js';
21
+ export interface StorageBackendRegistry {
22
+ /**
23
+ * The backend the deployment writes NEW managed artifacts to.
24
+ * Returns `null` when the deployment is pointer-only (no managed
25
+ * uploads); pointer artifacts still work because they
26
+ * short-circuit before backend lookup.
27
+ */
28
+ readonly active: StorageBackend | null;
29
+ /**
30
+ * Look up the backend matching `storage_artifacts.provider`.
31
+ * Returns `undefined` when no adapter is registered for that
32
+ * provider. Callers (the storage service's read/delete/verify
33
+ * paths) MUST translate `undefined` into a typed error rather
34
+ * than fall through to the active backend.
35
+ */
36
+ get(provider: string): StorageBackend | undefined;
37
+ /** True when `provider` has a registered backend in this registry. */
38
+ has(provider: string): boolean;
39
+ /**
40
+ * `(provider, backend)` pairs the registry knows about. Iteration
41
+ * order is the order providers were registered (active first,
42
+ * then legacy adapters).
43
+ */
44
+ readonly entries: ReadonlyArray<readonly [string, StorageBackend]>;
45
+ }
46
+ /**
47
+ * Build a backend registry from the active backend + optional
48
+ * legacy read-only adapters. `active` is `null` for pointer-only
49
+ * deployments. Throws when the same provider id is registered
50
+ * twice; that's a composition bug the caller must fix.
51
+ */
52
+ export declare function buildBackendRegistry(active: StorageBackend | null, legacy?: ReadonlyArray<StorageBackend>): StorageBackendRegistry;
53
+ /**
54
+ * Convenience for unit tests + single-provider deployments. Wraps
55
+ * one already-constructed backend (or `null` for pointer-only) in a
56
+ * registry with no legacy entries.
57
+ */
58
+ export declare function singleBackendRegistry(backend: StorageBackend | null): StorageBackendRegistry;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @file Per-row `StorageBackend` registry — direct-storage parallel
3
+ * to `RawContentStoreRegistry`.
4
+ *
5
+ * The storage service's read/delete/verify paths dispatch on the
6
+ * artifact row's `provider` column, NOT on the deployment's active
7
+ * backend, so a row written when the deployment was on `local_fs`
8
+ * keeps working after the operator switches to `s3`. Pointer rows
9
+ * short-circuit before the registry is even consulted (no backend
10
+ * required for `mode='pointer'`); only managed rows go through
11
+ * `get(provider)`.
12
+ *
13
+ * Failure semantics: a managed row whose provider is not registered
14
+ * is an operational unavailability (the deployment dropped a
15
+ * provider that still has live data). The service translates the
16
+ * `BackendNotRegisteredError` lookup miss into HTTP 503
17
+ * `storage_backend_unavailable` — see `src/routes/storage.ts`. The
18
+ * registry itself returns `undefined`; callers MUST fail loud.
19
+ */
20
+ /**
21
+ * Build a backend registry from the active backend + optional
22
+ * legacy read-only adapters. `active` is `null` for pointer-only
23
+ * deployments. Throws when the same provider id is registered
24
+ * twice; that's a composition bug the caller must fix.
25
+ */
26
+ export function buildBackendRegistry(active, legacy = []) {
27
+ const map = new Map();
28
+ if (active)
29
+ map.set(active.provider, active);
30
+ for (const backend of legacy) {
31
+ if (map.has(backend.provider)) {
32
+ throw new Error(`StorageBackendRegistry: provider '${backend.provider}' is registered twice. ` +
33
+ `Active='${active?.provider ?? 'none'}', legacy contains a duplicate.`);
34
+ }
35
+ map.set(backend.provider, backend);
36
+ }
37
+ const entries = Array.from(map.entries());
38
+ return {
39
+ active,
40
+ entries,
41
+ get(provider) {
42
+ return map.get(provider);
43
+ },
44
+ has(provider) {
45
+ return map.has(provider);
46
+ },
47
+ };
48
+ }
49
+ /**
50
+ * Convenience for unit tests + single-provider deployments. Wraps
51
+ * one already-constructed backend (or `null` for pointer-only) in a
52
+ * registry with no legacy entries.
53
+ */
54
+ export function singleBackendRegistry(backend) {
55
+ return buildBackendRegistry(backend, []);
56
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @file Backend abstraction the storage service writes through.
3
+ *
4
+ * Step 5 of the storage-sibling plan. Adapter, not rewrite: existing
5
+ * `RawContentStore` providers (`local_fs`, `s3`, `filecoin`) stay
6
+ * intact; `raw-content-store-backend-adapter.ts` exposes them as a
7
+ * `StorageBackend` for the storage service so the service never
8
+ * needs to know which adapter shape it is talking to.
9
+ *
10
+ * The backend handles managed-mode I/O only. Pointer-mode artifacts
11
+ * are metadata-only and live entirely in the database — the storage
12
+ * service NEVER calls a backend method against a pointer URI.
13
+ */
14
+ /**
15
+ * Concrete result of a `put` against a managed backend. The service
16
+ * persists every field on the `storage_artifacts` row.
17
+ */
18
+ export interface PutBackendResult {
19
+ /** Adapter-returned URI we persist on `storage_artifacts.uri`. */
20
+ uri: string;
21
+ /** Bytes actually persisted. Equals the input body length. */
22
+ sizeBytes: number;
23
+ /**
24
+ * Plaintext SHA-256 of the caller bytes. For the `identity` codec
25
+ * (v1 default for `local_fs` and `s3`) this equals `storedHash`.
26
+ * Always computed; exposed on the wire only when the caller opted
27
+ * into `disclose_content_hash` at put time.
28
+ */
29
+ plaintextHash: string;
30
+ /**
31
+ * SHA-256 of the bytes the adapter actually wrote. For the
32
+ * `aes_gcm` codec this is the ciphertext hash (Filecoin lifecycle)
33
+ * and is NEVER on the wire. v1 keeps Filecoin direct uploads
34
+ * behind a 501, so identity-codec equality is the typical case.
35
+ */
36
+ storedHash: string;
37
+ /** Free-form provider sidecar; the service redacts before exposing. */
38
+ providerMetadata: Record<string, unknown>;
39
+ }
40
+ export interface PutBackendInput {
41
+ /** Owner-namespaced storage key (e.g. `s/<hmac-hex32>/<artifact-id>.bin`). */
42
+ key: string;
43
+ body: Buffer;
44
+ contentType: string;
45
+ }
46
+ export interface GetBackendResult {
47
+ body: Buffer;
48
+ contentType: string | null;
49
+ sizeBytes: number;
50
+ }
51
+ export interface HeadBackendResult {
52
+ exists: boolean;
53
+ sizeBytes: number | null;
54
+ contentType: string | null;
55
+ }
56
+ export interface DeleteBackendResult {
57
+ /** `true` when bytes were removed; `false` for already-missing keys. */
58
+ deleted: boolean;
59
+ /**
60
+ * What the adapter's `delete` did at the provider boundary:
61
+ * - `'deleted'` — `local_fs` / `s3` removed the object.
62
+ * - `'unpinned'` — provider supports unpin-only (Filecoin).
63
+ * - `'tombstoned'` — decentralized network: we stopped managing
64
+ * the bytes but the network may still serve.
65
+ * Drives the cleanup-side terminal raw_storage_status selection
66
+ * (`blob_deleted` vs `blob_tombstoned`) and the artifact-delete
67
+ * cascade in `StorageService.deleteArtifact`.
68
+ */
69
+ semantics: 'deleted' | 'unpinned' | 'tombstoned';
70
+ }
71
+ /**
72
+ * Provider-agnostic managed-storage I/O surface the service depends
73
+ * on. Adapters live alongside this file (`raw-content-store-backend-adapter.ts`).
74
+ */
75
+ export interface StorageBackend {
76
+ /** Provider id; matches `RawContentStore.provider`. */
77
+ readonly provider: string;
78
+ put(input: PutBackendInput): Promise<PutBackendResult>;
79
+ get(uri: string): Promise<GetBackendResult>;
80
+ head(uri: string): Promise<HeadBackendResult>;
81
+ delete(uri: string): Promise<DeleteBackendResult>;
82
+ }