@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,27 @@
1
+ /**
2
+ * @file Provider-metadata projection for storage artifact rows.
3
+ *
4
+ * Raw-content adapters keep provider-native metadata in their own
5
+ * nested internal shape. Storage artifacts split that into two
6
+ * public columns: discoverable identifiers and provider details.
7
+ * This module is the single translation point so document-backed
8
+ * artifacts and direct storage artifacts expose the same
9
+ * allowlisted shape, and is consumed by `redactArtifactPublic` to
10
+ * build the public `storage_artifacts` wire response.
11
+ *
12
+ * Phase 3/4 contract: CID-shaped identifiers MUST satisfy the
13
+ * shared structural shape gates in `./filecoin-cid-validation.ts`
14
+ * before they may surface in the public output. The projector
15
+ * silently drops anything that fails the shape — so legacy /
16
+ * adversarial / manually-planted JSONB values (the Phase 4
17
+ * rename's pre-migration `cid` slot, sentinel strings, garbage)
18
+ * cannot reach the wire even on rows the SDK parser never gated.
19
+ * Codec-aware validation (Synapse SDK `asPieceCID`,
20
+ * `multiformats/cid.CID.parse`) lives at the WRITE path on the
21
+ * provider boundary; this module stays eager-import safe.
22
+ */
23
+ export interface ProjectedArtifactProviderFields {
24
+ identifiers: Record<string, string>;
25
+ providerDetails: Record<string, unknown> | null;
26
+ }
27
+ export declare function projectArtifactProviderFields(provider: string, metadata: Record<string, unknown>): ProjectedArtifactProviderFields;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @file Provider-metadata projection for storage artifact rows.
3
+ *
4
+ * Raw-content adapters keep provider-native metadata in their own
5
+ * nested internal shape. Storage artifacts split that into two
6
+ * public columns: discoverable identifiers and provider details.
7
+ * This module is the single translation point so document-backed
8
+ * artifacts and direct storage artifacts expose the same
9
+ * allowlisted shape, and is consumed by `redactArtifactPublic` to
10
+ * build the public `storage_artifacts` wire response.
11
+ *
12
+ * Phase 3/4 contract: CID-shaped identifiers MUST satisfy the
13
+ * shared structural shape gates in `./filecoin-cid-validation.ts`
14
+ * before they may surface in the public output. The projector
15
+ * silently drops anything that fails the shape — so legacy /
16
+ * adversarial / manually-planted JSONB values (the Phase 4
17
+ * rename's pre-migration `cid` slot, sentinel strings, garbage)
18
+ * cannot reach the wire even on rows the SDK parser never gated.
19
+ * Codec-aware validation (Synapse SDK `asPieceCID`,
20
+ * `multiformats/cid.CID.parse`) lives at the WRITE path on the
21
+ * provider boundary; this module stays eager-import safe.
22
+ */
23
+ import { isIpfsCid, isPieceCid } from './filecoin-cid-validation.js';
24
+ export function projectArtifactProviderFields(provider, metadata) {
25
+ if (provider === 'filecoin')
26
+ return projectFilecoin(metadata);
27
+ return { identifiers: {}, providerDetails: null };
28
+ }
29
+ function projectFilecoin(metadata) {
30
+ const filecoin = nestedRecord(metadata, 'filecoin');
31
+ if (filecoin === null)
32
+ return { identifiers: {}, providerDetails: null };
33
+ const identifiers = {};
34
+ // Phase 4: internal sidecar key is `ipfs_cid` (the legacy
35
+ // ambiguous `cid` slot is silently dropped here AND rejected by
36
+ // the public Zod schema). `car_root_cid` shares the broader
37
+ // CIDv1 shape gate — CAR roots are CIDv1 strings.
38
+ const ipfsCid = filecoin['ipfs_cid'];
39
+ if (isIpfsCid(ipfsCid))
40
+ identifiers.ipfsCid = ipfsCid;
41
+ const pieceCid = filecoin['piece_cid'];
42
+ if (isPieceCid(pieceCid))
43
+ identifiers.pieceCid = pieceCid;
44
+ const carRootCid = filecoin['car_root_cid'];
45
+ if (isIpfsCid(carRootCid))
46
+ identifiers.carRootCid = carRootCid;
47
+ // `data_set_id` is intentionally exposed as a non-empty string
48
+ // — the artifact-identifier wire surfaces the per-row Synapse
49
+ // data-set scalar for operators that need to correlate with
50
+ // their own provider tooling. No CID shape applies.
51
+ const dataSetId = filecoin['data_set_id'];
52
+ if (typeof dataSetId === 'string' && dataSetId.length > 0) {
53
+ identifiers.dataSetId = dataSetId;
54
+ }
55
+ return {
56
+ identifiers,
57
+ // No public providerDetails for filecoin until the provider
58
+ // has explicitly projected Synapse-shaped public fields. The
59
+ // public wire carries CIDs (plus `dataSetId`) only.
60
+ providerDetails: null,
61
+ };
62
+ }
63
+ function nestedRecord(source, key) {
64
+ const value = source[key];
65
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
66
+ return null;
67
+ return value;
68
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @file `RawContentStore` adapter wrapping a `FilecoinProviderClient`.
3
+ *
4
+ * Two reach-paths to keep in mind:
5
+ *
6
+ * - Direct managed uploads (`POST /v1/storage/artifacts?mode=managed`)
7
+ * are rejected upstream by the
8
+ * `DIRECT_MANAGED_UNSUPPORTED_PROVIDERS` carve-out in
9
+ * `services/storage-service.ts`, so the route returns a typed
10
+ * 501 and no `storage_artifacts` row is ever created — this
11
+ * adapter is not invoked on that path.
12
+ * - Document-path uploads against `RAW_STORAGE_PROVIDER=filecoin`
13
+ * construct this adapter (via `storage/factory.ts`) and call
14
+ * `put`/`get`/`head`/`delete` here. The adapter delegates to
15
+ * the underlying `FilecoinProviderClient`.
16
+ *
17
+ * Status mapping — Filecoin is `retrievalConsistency: 'eventual'`,
18
+ * so `put` ALWAYS reports `'pending'` regardless of
19
+ * `UploadResult.complete`. The reconciler / `head` path is
20
+ * responsible for promoting `blob_pending → blob_available` after
21
+ * a real retrievability check.
22
+ *
23
+ * Capabilities advertised:
24
+ *
25
+ * - `addressing: 'content'` (PieceCID-addressed)
26
+ * - `retrievalConsistency: 'eventual'` (deal lifecycle is async)
27
+ * - `deleteSemantics: 'tombstone'` (provider tombstone only)
28
+ * - `supportsHead: true` (via context.pieceStatus)
29
+ * - `supportsGet: true` (via storage.download)
30
+ */
31
+ import type { FilecoinProviderClient } from './provider-client.js';
32
+ import type { PutRawContentInput, RawContentDeleteResult, RawContentGetResult, RawContentHeadResult, RawContentHints, RawContentStore, RawContentStoreCapabilities, StoredRawContent } from '../../raw-content-store.js';
33
+ export declare class FilecoinRawContentStore implements RawContentStore {
34
+ private readonly client;
35
+ readonly provider = "filecoin";
36
+ readonly capabilities: RawContentStoreCapabilities;
37
+ constructor(client: FilecoinProviderClient);
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,250 @@
1
+ /**
2
+ * @file `RawContentStore` adapter wrapping a `FilecoinProviderClient`.
3
+ *
4
+ * Two reach-paths to keep in mind:
5
+ *
6
+ * - Direct managed uploads (`POST /v1/storage/artifacts?mode=managed`)
7
+ * are rejected upstream by the
8
+ * `DIRECT_MANAGED_UNSUPPORTED_PROVIDERS` carve-out in
9
+ * `services/storage-service.ts`, so the route returns a typed
10
+ * 501 and no `storage_artifacts` row is ever created — this
11
+ * adapter is not invoked on that path.
12
+ * - Document-path uploads against `RAW_STORAGE_PROVIDER=filecoin`
13
+ * construct this adapter (via `storage/factory.ts`) and call
14
+ * `put`/`get`/`head`/`delete` here. The adapter delegates to
15
+ * the underlying `FilecoinProviderClient`.
16
+ *
17
+ * Status mapping — Filecoin is `retrievalConsistency: 'eventual'`,
18
+ * so `put` ALWAYS reports `'pending'` regardless of
19
+ * `UploadResult.complete`. The reconciler / `head` path is
20
+ * responsible for promoting `blob_pending → blob_available` after
21
+ * a real retrievability check.
22
+ *
23
+ * Capabilities advertised:
24
+ *
25
+ * - `addressing: 'content'` (PieceCID-addressed)
26
+ * - `retrievalConsistency: 'eventual'` (deal lifecycle is async)
27
+ * - `deleteSemantics: 'tombstone'` (provider tombstone only)
28
+ * - `supportsHead: true` (via context.pieceStatus)
29
+ * - `supportsGet: true` (via storage.download)
30
+ */
31
+ import { createHash } from 'node:crypto';
32
+ import { FilecoinProviderError } from './errors.js';
33
+ import { readFilecoinDataSetIdHint, readFilecoinDeleteHints } from './hints.js';
34
+ import { requireIpfsCid } from './ipfs-cid.js';
35
+ import { requirePieceCid } from './piece-cid.js';
36
+ import { formatPieceUri, parsePieceUri } from './uri.js';
37
+ const FILECOIN_CAPABILITIES = {
38
+ addressing: 'content',
39
+ retrievalConsistency: 'eventual',
40
+ deleteSemantics: 'tombstone',
41
+ supportsHead: true,
42
+ supportsGet: true,
43
+ };
44
+ export class FilecoinRawContentStore {
45
+ client;
46
+ provider = 'filecoin';
47
+ capabilities = FILECOIN_CAPABILITIES;
48
+ constructor(client) {
49
+ this.client = client;
50
+ }
51
+ async put(input) {
52
+ const result = await this.client.put({
53
+ key: input.key,
54
+ body: input.body,
55
+ ...(input.contentType ? { contentType: input.contentType } : {}),
56
+ });
57
+ // Thread the boundary's `driver` into the sidecar — never
58
+ // hardcode `'synapse'` here. Production: the live Synapse
59
+ // client → `'synapse'`. Tests / a future filecoin-pin client
60
+ // → that driver's literal. Hardcoding would lie for the
61
+ // second driver and undermine the driver-agnostic invariant.
62
+ return toStoredRawContent(input, result, this.client.driver);
63
+ }
64
+ async get(storageUri) {
65
+ const result = await this.client.get({ storageUri });
66
+ return {
67
+ body: result.body,
68
+ metadata: {
69
+ contentLength: result.body.length,
70
+ contentType: null,
71
+ contentHash: null,
72
+ providerMetadata: result.providerMetadata,
73
+ },
74
+ };
75
+ }
76
+ async head(storageUri, hints) {
77
+ const dataSetId = readFilecoinDataSetIdHint(hints);
78
+ const result = await this.client.head({
79
+ storageUri,
80
+ ...(dataSetId !== null ? { dataSetId } : {}),
81
+ });
82
+ // Filecoin lifecycle gate: a Synapse piece is RETRIEVABLE only
83
+ // after PDP proof has landed. The reconciler treats any
84
+ // `exists=true` head as "promote blob_pending → blob_available",
85
+ // so we MUST NOT report exists=true on an unproven piece —
86
+ // otherwise the row would promote before the bytes are actually
87
+ // retrievable. An unproven-but-known piece is reported as
88
+ // `exists=false` (without a permanent-failure marker) so the
89
+ // reconciler keeps the row pending and retries on a later tick.
90
+ if (!result.exists || !result.proven) {
91
+ return { exists: false, metadata: null };
92
+ }
93
+ return {
94
+ exists: true,
95
+ metadata: {
96
+ contentLength: 0,
97
+ contentType: null,
98
+ contentHash: null,
99
+ providerMetadata: result.providerMetadata,
100
+ },
101
+ };
102
+ }
103
+ async delete(storageUri, hints) {
104
+ // Extract BOTH the data-set-id (for context resolution) and
105
+ // the per-copy piece-id (for direct deletePiece-by-id) from
106
+ // the sidecar. The cleanup loop plumbs `raw_storage_metadata`
107
+ // through `ManagedBlobRef` so production cleanup carries the
108
+ // same hints the reconciler uses on `head`. CID-based delete
109
+ // remains the fallback when hints are missing or malformed —
110
+ // useful for legacy rows that pre-date the sidecar — but
111
+ // Synapse cannot resolve a freshly-uploaded piece by CID
112
+ // before PDP proof lands, so `pieceId` is required for the
113
+ // most common case (delete shortly after upload).
114
+ const { dataSetId, pieceId } = readFilecoinDeleteHints(hints);
115
+ const result = await this.client.delete({
116
+ storageUri,
117
+ ...(dataSetId !== null ? { dataSetId } : {}),
118
+ ...(pieceId !== null ? { pieceId } : {}),
119
+ });
120
+ // Phase 7 — pass `result.txHash` through as the internal-only
121
+ // billing/cost-impact metadata. `RawContentDeleteResult.txHash`
122
+ // is documented as INTERNAL: it MUST NOT cross any public
123
+ // route boundary, and `cleanupManagedBlobs`'s closed-key
124
+ // success DTO never includes it. The legitimate downstream
125
+ // consumer is the `filecoin.delete.tombstoned` observability
126
+ // emitter (operator-side telemetry only).
127
+ return {
128
+ deleted: result.deleted,
129
+ semantics: 'tombstoned',
130
+ ...(result.txHash !== undefined ? { txHash: result.txHash } : {}),
131
+ };
132
+ }
133
+ }
134
+ /**
135
+ * Translate a Filecoin upload result to the generic
136
+ * `StoredRawContent` shape persisted by the upload service. The
137
+ * `content_hash` is the SHA-256 of the PLAINTEXT bytes the caller
138
+ * passed in (the codec/AES-GCM layer already wrapped them on the
139
+ * way down). Synapse reports the on-wire byte count in
140
+ * `result.sizeBytes`; we persist `input.body.length` so the row's
141
+ * `size_bytes` matches the plaintext contract the rest of the
142
+ * pipeline uses.
143
+ *
144
+ * Status mapping — Filecoin is `retrievalConsistency: 'eventual'`,
145
+ * so `put` ALWAYS reports `'pending'` regardless of
146
+ * `UploadResult.complete`. A Synapse-side `complete=true` means the
147
+ * SDK saw the requested copies stored on SPs; it does NOT prove the
148
+ * data set's proof has landed or that the bytes are retrievable
149
+ * via `download()`. The reconciler / `head` path is responsible for
150
+ * promoting `blob_pending → blob_available` after a real
151
+ * retrievability check. The original `complete` flag and copy
152
+ * states are preserved in the internal
153
+ * `raw_storage_metadata.filecoin` sidecar so the reconciler can
154
+ * make decisions without re-querying the provider.
155
+ */
156
+ function toStoredRawContent(input, result, driver) {
157
+ // Phase 3 defense-in-depth: validate AND canonicalize before
158
+ // any identifier reaches `storage_artifacts.uri` or the
159
+ // `raw_storage_metadata.filecoin.piece_cid` sidecar. Both
160
+ // halves of `result` are parsed through the live Synapse SDK
161
+ // (`@filoz/synapse-core/piece.asPieceCID`) via
162
+ // `requirePieceCid`, which ALSO returns the SDK's canonical
163
+ // base32-lower CIDv1 multibase string. `asPieceCID` accepts
164
+ // any parser-valid multibase encoding of the same PieceCID
165
+ // (e.g. base58btc `z…`); the canonicalization step here
166
+ // collapses those to the canonical `bafk…` form before
167
+ // persistence so a future driver returning a non-canonical
168
+ // multibase variant cannot leave a non-canonical URI or
169
+ // sidecar value behind. The cross-field mismatch check then
170
+ // compares the canonical forms — catching the case where
171
+ // both halves parse but refer to different identifiers.
172
+ const canonicalPieceCid = requirePieceCid(result.pieceCid, 'upload result');
173
+ const canonicalFromUri = parsePieceUri(result.storageUri);
174
+ if (canonicalFromUri !== canonicalPieceCid) {
175
+ throw new FilecoinProviderError('identifier_mismatch', 'Provider client returned a storage URI whose PieceCID disagrees with the result.pieceCid field.');
176
+ }
177
+ // Phase 4: validate AND canonicalize the optional IPFS/CAR-root
178
+ // CID using a real `multiformats/cid` parse. The slot is opt-in
179
+ // (live Synapse leaves it `undefined`); when populated, the
180
+ // sidecar carries the canonical CIDv1 string. The canonical
181
+ // storage URI stays PieceCID-based — `ipfsCid` does not change
182
+ // row identity.
183
+ const canonicalIpfsCid = result.ipfsCid === undefined
184
+ ? undefined
185
+ : requireIpfsCid(result.ipfsCid, 'upload result ipfsCid');
186
+ return {
187
+ storageUri: formatPieceUri(canonicalPieceCid),
188
+ storageProvider: 'filecoin',
189
+ contentHash: sha256Hex(input.body),
190
+ sizeBytes: input.body.length,
191
+ status: 'pending',
192
+ providerMetadata: toProviderMetadata(result, driver, canonicalPieceCid, canonicalIpfsCid),
193
+ };
194
+ }
195
+ function sha256Hex(buf) {
196
+ return createHash('sha256').update(buf).digest('hex');
197
+ }
198
+ /**
199
+ * Build the internal-only `raw_storage_metadata.filecoin` sidecar
200
+ * the document-side pipeline writes. The PUBLIC projection runs
201
+ * later through `src/storage/filecoin-public-metadata.ts`, which
202
+ * flattens `copies[]` into `copy_count` / `provider_ids` /
203
+ * `copy_statuses` and drops everything else.
204
+ *
205
+ * Per-copy `status` is `'accepted'` on upload: the Synapse SDK's
206
+ * `UploadResult.copies[]` only proves the SP accepted the bytes
207
+ * (PDP proof has not landed yet, retrieval is unconfirmed). The
208
+ * reconciler / `head` path advances copies to `'available'` once
209
+ * `StorageContext.pieceStatus` reports proof + retrieval.
210
+ * `complete` carries the raw `UploadResult.complete` flag so the
211
+ * reconciler can distinguish "all copies stored" from "partial".
212
+ */
213
+ function toProviderMetadata(result, driver, canonicalPieceCid, canonicalIpfsCid) {
214
+ return {
215
+ filecoin: {
216
+ driver,
217
+ // Persist the SDK's canonical multibase form (not
218
+ // `result.pieceCid`) so a non-canonical-but-parser-valid
219
+ // input from a misbehaving driver still lands on disk as
220
+ // the canonical `bafk…` string.
221
+ piece_cid: canonicalPieceCid,
222
+ // Phase 4: optional IPFS / CAR-root identity. Snake_case
223
+ // for the JSONB key; only present when the driver
224
+ // populated `result.ipfsCid`. Omitted entirely (vs. set to
225
+ // `null`) so closed-key assertions over the sidecar stay
226
+ // stable for the live Synapse driver, which never writes
227
+ // this slot today.
228
+ ...(canonicalIpfsCid === undefined ? {} : { ipfs_cid: canonicalIpfsCid }),
229
+ data_set_id: result.copies[0]?.dataSetId,
230
+ copies: result.copies.map((copy) => ({
231
+ provider_id: copy.providerId,
232
+ data_set_id: copy.dataSetId,
233
+ // Omit `piece_id` entirely when the driver reported a
234
+ // sentinel/non-positive value. Writing `'0'` (or any
235
+ // non-positive decimal) would later trip the hint
236
+ // reader's positive-decimal-bigint validator and emit a
237
+ // spurious `filecoin.hint.malformed` diagnostic on every
238
+ // delete. Absent silently falls back to the CID-based
239
+ // delete lookup, which is the intended behaviour when a
240
+ // piece-id hint is unavailable.
241
+ ...(copy.pieceId !== undefined ? { piece_id: copy.pieceId } : {}),
242
+ role: copy.role,
243
+ status: 'accepted',
244
+ })),
245
+ failed_attempts: result.failedAttempts.length,
246
+ requested_copies: result.requestedCopies,
247
+ complete: result.complete,
248
+ },
249
+ };
250
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @file Filecoin provider configuration.
3
+ *
4
+ * `parseFilecoinProviderConfig(env)` is the only env reader inside
5
+ * `src/storage/providers/filecoin/*`. Central `src/config.ts`
6
+ * collects `process.env` into a plain object and hands it to this
7
+ * function; the provider module never reaches for `process.env`
8
+ * itself, matching the workspace rule against direct env access in
9
+ * business code.
10
+ *
11
+ * The cross-provider guard — rejecting any `RAW_STORAGE_FILECOIN_*`
12
+ * environment variable when `RAW_STORAGE_PROVIDER` is non-filecoin —
13
+ * lives in central `src/config.ts`. Reason:
14
+ * `parseFilecoinProviderConfig` is only invoked when the provider IS
15
+ * filecoin, so the cross-provider rejection has to fire at the
16
+ * central seam to catch the misconfiguration. This module exports
17
+ * `collectFilecoinProviderEnvKeys` so the central code can compute
18
+ * which RAW_STORAGE_FILECOIN_* keys an operator set without
19
+ * embedding the prefix string in two places.
20
+ *
21
+ * v1 credential model: operator-owned deployment credentials.
22
+ * Storage-profile / per-org / per-user credential ownership is
23
+ * deferred to a future release. `RAW_STORAGE_FILECOIN_PRIVATE_KEY` is
24
+ * validated syntactically (`^0x[a-fA-F0-9]{64}$`) at startup. The
25
+ * value is NEVER logged on rejection; no account derivation, no
26
+ * chain, balance, and provider checks are handled by the readiness
27
+ * probes in `./readiness.ts`.
28
+ */
29
+ export type FilecoinNetwork = 'calibration' | 'mainnet';
30
+ export type FilecoinDriver = 'synapse' | 'filecoin_pin';
31
+ /**
32
+ * Parsed deployment-credential block. Constructed by
33
+ * `parseFilecoinProviderConfig` at startup; held on the
34
+ * runtime config and consumed by the Synapse client factory.
35
+ */
36
+ export interface FilecoinProviderConfig {
37
+ readonly driver: FilecoinDriver;
38
+ readonly network: FilecoinNetwork;
39
+ /** 0x-prefixed 32-byte hex string. Never logged on rejection. */
40
+ readonly privateKey: string;
41
+ readonly source: string;
42
+ readonly withCdn: boolean;
43
+ readonly providerIds: ReadonlyArray<string>;
44
+ readonly copies: number | null;
45
+ readonly dataSetMetadata: Readonly<Record<string, string | number | boolean>>;
46
+ readonly maxUploadBytes: number | null;
47
+ readonly minUploadBytes: number | null;
48
+ readonly uploadTimeoutMs: number | null;
49
+ readonly retrievalTimeoutMs: number | null;
50
+ }
51
+ /**
52
+ * Syntactic-only validator for `RAW_STORAGE_FILECOIN_PRIVATE_KEY`.
53
+ * Accepts a 32-byte hex string with `0x` prefix (case-insensitive).
54
+ * Throws on any other shape WITHOUT echoing the value — the message
55
+ * names only the env var and the expected pattern.
56
+ */
57
+ export declare function parseFilecoinPrivateKey(value: string): string;
58
+ /**
59
+ * Return the names of every `RAW_STORAGE_FILECOIN_*` key the
60
+ * operator set to a non-empty value. Used by the central
61
+ * cross-provider guard in `src/config.ts` so non-filecoin
62
+ * deployments cannot accidentally carry Filecoin config.
63
+ */
64
+ export declare function collectFilecoinProviderEnvKeys(env: Record<string, string | undefined>): ReadonlyArray<string>;
65
+ /**
66
+ * Parse + validate the Synapse-shaped Filecoin provider env block.
67
+ * Only invoked when `RAW_STORAGE_PROVIDER=filecoin`; the cross-
68
+ * provider guard runs in `src/config.ts` before this function.
69
+ */
70
+ export declare function parseFilecoinProviderConfig(env: Record<string, string | undefined>): FilecoinProviderConfig;