@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,183 @@
1
+ /**
2
+ * Per-layer status repository helpers (Phase B).
3
+ *
4
+ * The audit at
5
+ * `Atomicmemory-research/docs/core-repo/design/document-ingest-audit.md`
6
+ * and the rev-18 hardening plan call for **service-owned** transitions
7
+ * of `extraction_status`, `semantic_index_status`, `raw_storage_status`
8
+ * and the `last_error` JSONB envelope. This module exposes the SQL
9
+ * primitives that the indexer (`document-indexer.ts`), the upload
10
+ * service (`document-upload.ts`), and any future async worker call to
11
+ * record those transitions.
12
+ *
13
+ * Design notes (cross-referenced from the plan):
14
+ *
15
+ * * Each helper accepts `pg.Pool | pg.PoolClient` so it works inside
16
+ * an in-flight transaction (e.g. the indexer's running-tx) and
17
+ * from a **fresh** statement after a parent rolled back. The catch
18
+ * paths in `document-upload.ts` and `document-indexer.ts` use the
19
+ * fresh-statement form deliberately so the durable failure write
20
+ * survives the rollback that drops the in-tx work.
21
+ *
22
+ * * Mark helpers are scoped by `user_id` + `id` and skip soft-deleted
23
+ * rows. They are **idempotent** at the SQL level - re-applying the
24
+ * same status (e.g. `'failed'` -> `'failed'` with the same code)
25
+ * returns the row unchanged.
26
+ *
27
+ * * `last_error` write rule: a failure transition writes the supplied
28
+ * envelope; a success transition clears `last_error` **only when
29
+ * the existing envelope was scoped to the same layer**. A
30
+ * successful semantic-index pass should not silently erase a
31
+ * previous extraction failure that someone else still needs to
32
+ * reconcile.
33
+ */
34
+ /**
35
+ * Update `extraction_status` on an active row. Pass `lastError` for
36
+ * failure / unsupported transitions; success transitions clear the
37
+ * column when the prior `last_error` was scoped to the extraction
38
+ * layer.
39
+ */
40
+ export async function markExtractionStatus(args) {
41
+ const { q, userId, documentId, status, lastError } = args;
42
+ const isFailure = status === 'failed' || status === 'unsupported';
43
+ if (isFailure && !lastError) {
44
+ throw new Error(`markExtractionStatus: lastError is required for status '${status}'`);
45
+ }
46
+ if (isFailure) {
47
+ await q.query(`UPDATE raw_documents
48
+ SET extraction_status = $1,
49
+ last_error = $2::jsonb,
50
+ updated_at = NOW()
51
+ WHERE id = $3 AND user_id = $4 AND deleted_at IS NULL`, [status, JSON.stringify(lastError), documentId, userId]);
52
+ return;
53
+ }
54
+ // Success / interim - selectively clear last_error.
55
+ await q.query(`UPDATE raw_documents
56
+ SET extraction_status = $1,
57
+ last_error = CASE
58
+ WHEN last_error IS NOT NULL AND last_error->>'layer' = 'extraction'
59
+ THEN NULL
60
+ ELSE last_error
61
+ END,
62
+ updated_at = NOW()
63
+ WHERE id = $2 AND user_id = $3 AND deleted_at IS NULL`, [status, documentId, userId]);
64
+ }
65
+ /**
66
+ * Update `semantic_index_status` on an active row. Same `last_error`
67
+ * scoping rule as {@link markExtractionStatus} - a successful
68
+ * indexing pass clears the column only when it was last set by the
69
+ * semantic-index layer.
70
+ */
71
+ export async function markSemanticIndexStatus(args) {
72
+ const { q, userId, documentId, status, lastError } = args;
73
+ const isFailure = status === 'failed';
74
+ if (isFailure && !lastError) {
75
+ throw new Error(`markSemanticIndexStatus: lastError is required for status '${status}'`);
76
+ }
77
+ if (isFailure) {
78
+ await q.query(`UPDATE raw_documents
79
+ SET semantic_index_status = $1,
80
+ last_error = $2::jsonb,
81
+ updated_at = NOW()
82
+ WHERE id = $3 AND user_id = $4 AND deleted_at IS NULL`, [status, JSON.stringify(lastError), documentId, userId]);
83
+ return;
84
+ }
85
+ await q.query(`UPDATE raw_documents
86
+ SET semantic_index_status = $1,
87
+ last_error = CASE
88
+ WHEN last_error IS NOT NULL AND last_error->>'layer' = 'semantic_index'
89
+ THEN NULL
90
+ ELSE last_error
91
+ END,
92
+ updated_at = NOW()
93
+ WHERE id = $2 AND user_id = $3 AND deleted_at IS NULL`, [status, documentId, userId]);
94
+ }
95
+ /**
96
+ * Mark a row as `raw_storage_status='raw_storage_failed'` from a
97
+ * **document id** (not a storage URI). The audit fix the upload
98
+ * service relies on: when `store.put` throws before returning a URI
99
+ * the URI-keyed marker can't fire, so this doc-id form lives next to
100
+ * it and runs in the catch path of `uploadRawDocument` in a fresh
101
+ * statement after the parent transaction rolled back.
102
+ */
103
+ export async function markRawStorageFailedByDocumentId(args) {
104
+ const { q, userId, documentId, lastError } = args;
105
+ await q.query(`UPDATE raw_documents
106
+ SET raw_storage_status = 'raw_storage_failed',
107
+ last_error = $1::jsonb,
108
+ updated_at = NOW()
109
+ WHERE id = $2 AND user_id = $3 AND deleted_at IS NULL`, [JSON.stringify(lastError), documentId, userId]);
110
+ }
111
+ /**
112
+ * Clear `last_error` on a row when the existing envelope is scoped to
113
+ * `layer`. Optional helper for retry paths that want to reset only
114
+ * one layer's failure marker without touching status fields.
115
+ */
116
+ export async function clearLastError(args) {
117
+ const { q, userId, documentId, layer } = args;
118
+ await q.query(`UPDATE raw_documents
119
+ SET last_error = NULL,
120
+ updated_at = NOW()
121
+ WHERE id = $1
122
+ AND user_id = $2
123
+ AND deleted_at IS NULL
124
+ AND last_error IS NOT NULL
125
+ AND last_error->>'layer' = $3`, [documentId, userId, layer]);
126
+ }
127
+ /**
128
+ * Hard cap on the persisted `last_error.message` length (UTF-16 code
129
+ * units, the JS string-length unit). Producer-facing failure messages
130
+ * vary widely - DB-driver stack traces, embedding-provider error
131
+ * blobs, file-extractor exceptions - and persisting them verbatim
132
+ * risks (a) blowing JSONB row-size budgets on operational noise and
133
+ * (b) leaking sensitive operational strings (URIs, keys baked into
134
+ * exception messages). This cap is the central knob; producers funnel
135
+ * through {@link buildLastError} so the cap applies uniformly to every
136
+ * `last_error` write.
137
+ *
138
+ * The number is sized to fit a useful human-readable detail line
139
+ * (e.g. one stack-frame's worth of context) without becoming a
140
+ * dumping ground for raw exception text.
141
+ */
142
+ export const MAX_LAST_ERROR_MESSAGE_CHARS = 1000;
143
+ /**
144
+ * Normalize a producer-supplied error message before persisting it on
145
+ * `raw_documents.last_error`:
146
+ * * control chars (including TAB, CR, LF, and NUL) are replaced
147
+ * with a single space - keeps multi-line stack traces from
148
+ * breaking the UI's row layout and prevents NUL bytes from
149
+ * reaching clients that mishandle them;
150
+ * * runs of whitespace collapse to a single space - the message
151
+ * reads as a single line of operator detail;
152
+ * * the result is truncated to {@link MAX_LAST_ERROR_MESSAGE_CHARS}
153
+ * code units. No truncation marker is appended; readers compare
154
+ * against the cap if they want to flag truncation client-side.
155
+ *
156
+ * Exported so producer-side code paths (route handlers, services
157
+ * that need to build envelopes outside `buildLastError`) can apply
158
+ * the same sanitization rule without re-implementing it.
159
+ */
160
+ export function sanitizeLastErrorMessage(raw) {
161
+ // Replace any character at code point < 0x20 OR DEL (0x7f) with a
162
+ // single space. Covers ASCII control chars including \r, \n, \t,
163
+ // \0; preserves all printable / non-control Unicode glyphs.
164
+ // eslint-disable-next-line no-control-regex
165
+ const stripped = raw.replace(/[\x00-\x1f\x7f]/g, ' ');
166
+ const collapsed = stripped.replace(/ {2,}/g, ' ').trim();
167
+ if (collapsed.length <= MAX_LAST_ERROR_MESSAGE_CHARS)
168
+ return collapsed;
169
+ return collapsed.slice(0, MAX_LAST_ERROR_MESSAGE_CHARS);
170
+ }
171
+ /**
172
+ * Build a `LastError` envelope. Producers should funnel through this
173
+ * helper so the wire / JSONB shape stays uniform AND the message is
174
+ * sanitized + capped (see {@link sanitizeLastErrorMessage}).
175
+ */
176
+ export function buildLastError(layer, code, message, occurredAt = new Date()) {
177
+ return {
178
+ layer,
179
+ code,
180
+ message: sanitizeLastErrorMessage(message),
181
+ occurred_at: occurredAt.toISOString(),
182
+ };
183
+ }
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Row + input types for the document pipeline (Phase 1).
3
+ *
4
+ * Mirrors the columns defined in `schema.sql` for `raw_sources` and
5
+ * `raw_documents`. The CHECK constraints in SQL accept the full enum
6
+ * range so later phases (managed_blob, inline_small_text) can populate
7
+ * those values without a schema change; Phase 1 service-layer code
8
+ * still only writes `storage_mode = 'pointer_only'`.
9
+ */
10
+ export type RawStorageMode = 'pointer_only' | 'managed_blob' | 'inline_small_text';
11
+ export type RegistrationStatus = 'registered' | 'registration_failed';
12
+ export type RawStorageStatus = 'pointer_recorded' | 'blob_stored' | 'inline_text_stored' | 'raw_storage_failed'
13
+ /**
14
+ * Terminal state for a tombstoned managed-blob row whose bytes were
15
+ * successfully deleted from the configured `RawContentStore`. Set by
16
+ * the Phase-3 cleanup path *after* the soft-delete and *after* the
17
+ * adapter's delete call returned; lets retries of `DELETE
18
+ * /v1/documents/:id` distinguish "blob is gone" from
19
+ * "blob still needs cleanup" (raw_storage_failed).
20
+ */
21
+ | 'blob_deleted'
22
+ /**
23
+ * Filecoin lifecycle refactor (Slice 2): the provider accepted the
24
+ * upload but storage / retrievability is not yet confirmed. The
25
+ * upload service writes this when the adapter's `put()` returned
26
+ * `status: 'pending'` (an eventual provider). The future Phase 3
27
+ * reconciliation worker polls `head()` and promotes the row to
28
+ * `blob_available` (success) or `blob_archival_failed` (permanent
29
+ * failure).
30
+ */
31
+ | 'blob_pending'
32
+ /**
33
+ * Reserved for the Phase 3 reconciliation worker. No Phase-1
34
+ * writer; the schema and the union just have to accept it so the
35
+ * Phase 3 worker can flip a row from `blob_pending` once `head()`
36
+ * confirms retrievability.
37
+ */
38
+ | 'blob_available'
39
+ /**
40
+ * Reserved for the Phase 3 reconciler's permanent-failure path. No
41
+ * Phase-1 writer.
42
+ */
43
+ | 'blob_archival_failed'
44
+ /**
45
+ * Reserved for Phase 2 Filecoin deletes against providers that
46
+ * support unpin-only semantics. No Phase-1 writer.
47
+ */
48
+ | 'blob_tombstoned'
49
+ /**
50
+ * Filecoin lifecycle refactor (Phase 5) — transient state during
51
+ * the upload pipeline's α/β/β2/γ split. Phase α writes this with a
52
+ * `raw_storage_claim_id` after seizing the slot; Phase γ flips it
53
+ * to the final terminal state (`blob_stored` / `blob_pending` /
54
+ * `blob_available`) once the adapter returns. A row that stays in
55
+ * `blob_uploading` past a process restart is recoverable via
56
+ * same-bytes idempotent retry of `uploadRaw`; the Phase 6
57
+ * reconciler does NOT process `blob_uploading` rows.
58
+ */
59
+ | 'blob_uploading';
60
+ /**
61
+ * Phase B (document-ingest hardening) — text-extraction layer status.
62
+ * Mirrors the values in `raw_documents.extraction_status` (CHECK
63
+ * constraint in `schema.sql`).
64
+ */
65
+ export type ExtractionStatus = 'not_required' | 'pending' | 'running' | 'complete' | 'unsupported' | 'failed';
66
+ /**
67
+ * Phase B — semantic indexing layer status (chunk + embed + store).
68
+ * Mirrors `raw_documents.semantic_index_status`. Note that `'running'`
69
+ * is internally written inside the indexer's BEGIN..COMMIT
70
+ * transaction; under READ COMMITTED isolation other connections do
71
+ * NOT observe it. The state lives on the row only as a CAS marker;
72
+ * UI rendering of "indexing in progress" requires a future
73
+ * async-worker design that commits `'running'` before doing the
74
+ * work, with a lease/heartbeat for crash recovery.
75
+ */
76
+ export type SemanticIndexStatus = 'not_required' | 'pending' | 'running' | 'complete' | 'failed' | 'stale';
77
+ /** Layer that produced the most-recent failure recorded on a row. */
78
+ export type LastErrorLayer = 'raw_storage' | 'extraction' | 'semantic_index';
79
+ /**
80
+ * Phase B — most-recent failure envelope persisted on `raw_documents.last_error`.
81
+ *
82
+ * Single most-recent failure per row; cleared on the next successful
83
+ * transition for that layer. Snake_case at the storage layer and on
84
+ * the wire so JSONB columns and HTTP responses share one shape.
85
+ */
86
+ export interface LastError {
87
+ layer: LastErrorLayer;
88
+ /** Bounded enum chosen by the producing layer (e.g. `'managed_storage_disabled'`, `'index_text_too_large'`). */
89
+ code: string;
90
+ /** Human-readable detail. Producers should truncate to a sensible cap. */
91
+ message: string;
92
+ /** ISO 8601 UTC timestamp. */
93
+ occurred_at: string;
94
+ }
95
+ /**
96
+ * Persisted shape of a `raw_sources` row. `account_id` is nullable for
97
+ * sources that do not have a per-account scoping concept (e.g. manual
98
+ * webapp uploads).
99
+ */
100
+ export interface RawSourceRow {
101
+ id: string;
102
+ userId: string;
103
+ sourceSite: string;
104
+ provider: string;
105
+ accountId: string | null;
106
+ storageMode: RawStorageMode;
107
+ retentionPolicy: Record<string, unknown>;
108
+ consentPolicy: Record<string, unknown>;
109
+ createdAt: Date;
110
+ updatedAt: Date;
111
+ }
112
+ export interface UpsertRawSourceInput {
113
+ userId: string;
114
+ sourceSite: string;
115
+ provider: string;
116
+ accountId?: string | null;
117
+ storageMode?: RawStorageMode;
118
+ retentionPolicy?: Record<string, unknown>;
119
+ consentPolicy?: Record<string, unknown>;
120
+ }
121
+ /**
122
+ * Persisted shape of a `raw_documents` row. Phase 1 callers see
123
+ * `storageUri = null`, `storageProvider = null`, and
124
+ * `rawStorageStatus = 'pointer_recorded'` for every active row.
125
+ */
126
+ export interface RawDocumentRow {
127
+ id: string;
128
+ userId: string;
129
+ rawSourceId: string;
130
+ externalId: string;
131
+ externalUri: string | null;
132
+ displayName: string | null;
133
+ mimeType: string | null;
134
+ sizeBytes: number | null;
135
+ contentHash: string | null;
136
+ providerVersion: string | null;
137
+ sourceModifiedAt: Date | null;
138
+ storageMode: RawStorageMode;
139
+ storageUri: string | null;
140
+ storageProvider: string | null;
141
+ registrationStatus: RegistrationStatus;
142
+ rawStorageStatus: RawStorageStatus;
143
+ /**
144
+ * Provider-side identifiers for the managed blob — CID, piece CID,
145
+ * deal id, onramp request id, gateway URL, etc. Set by the upload
146
+ * service from `StoredRawContent.providerMetadata`. Opaque to the
147
+ * upload pipeline; surfaced verbatim on the wire as
148
+ * `raw_storage_metadata`. Defaults to `{}` for pointer-only rows
149
+ * and for immediate providers (local_fs / s3) that don't yet
150
+ * populate the field.
151
+ */
152
+ rawStorageMetadata: Record<string, unknown>;
153
+ metadata: Record<string, unknown>;
154
+ createdAt: Date;
155
+ updatedAt: Date;
156
+ deletedAt: Date | null;
157
+ /**
158
+ * Hash of the text last fed through `POST /v1/documents/:id/index`.
159
+ * Distinct from `contentHash` (the upstream/provider raw-content
160
+ * fingerprint). NULL until first indexed. Used by the Phase 2
161
+ * indexer's idempotency check.
162
+ */
163
+ indexedContentHash: string | null;
164
+ indexedAt: Date | null;
165
+ /**
166
+ * Phase B per-layer status fields. Default `'not_required'` for
167
+ * legacy rows that predate the columns; new registrations
168
+ * targeting the document pipeline set safe initial states
169
+ * (`'pending'`) at registration time.
170
+ */
171
+ extractionStatus: ExtractionStatus;
172
+ semanticIndexStatus: SemanticIndexStatus;
173
+ /** Most-recent failure across any layer; null when no layer is currently failed. */
174
+ lastError: LastError | null;
175
+ /**
176
+ * Phase 5 / Phase 6 private worker state. Holds the upload-pipeline
177
+ * claim during α/β/β2/γ and the reconciler claim during the
178
+ * blob_pending → blob_available promotion. These columns are
179
+ * INTERNAL — `formatRawDocument` and `formatPublicRawStorageMetadata`
180
+ * do NOT project them onto the wire; the upload service and the
181
+ * reconciler are the only readers/writers.
182
+ */
183
+ rawStorageClaimId: string | null;
184
+ rawStorageClaimedAt: Date | null;
185
+ rawStorageLastCheckedAt: Date | null;
186
+ rawStorageNextCheckAt: Date | null;
187
+ rawStorageReconcileAttempts: number;
188
+ /**
189
+ * Durable "row entered blob_pending at" timestamp; the observability
190
+ * layer reads this for the `pending_age_seconds` metric. Set by
191
+ * Phase γ when writing `blob_pending`; cleared on terminal
192
+ * transitions out of pending (blob_available, blob_archival_failed)
193
+ * by the reconciler.
194
+ */
195
+ rawStoragePendingSince: Date | null;
196
+ /**
197
+ * Step 7 of the storage-sibling plan — FK to the row's paired
198
+ * `storage_artifacts` entry. NULL for rows that pre-date Step 7
199
+ * and for registration stubs (no `external_uri`, no managed
200
+ * upload yet). The composite FK on
201
+ * `(storage_artifact_id, user_id)` makes cross-user links
202
+ * impossible at the persistence layer.
203
+ */
204
+ storageArtifactId: string | null;
205
+ }
206
+ export interface RegisterRawDocumentInput {
207
+ userId: string;
208
+ rawSourceId: string;
209
+ externalId: string;
210
+ externalUri?: string | null;
211
+ displayName?: string | null;
212
+ mimeType?: string | null;
213
+ sizeBytes?: number | null;
214
+ contentHash?: string | null;
215
+ providerVersion?: string | null;
216
+ sourceModifiedAt?: Date | null;
217
+ storageMode?: RawStorageMode;
218
+ metadata?: Record<string, unknown>;
219
+ /**
220
+ * Phase B — restricted-initial-state status fields. Clients may
221
+ * declare `'pending'` (document pipeline expected to extract +
222
+ * index this row), `'not_required'` (default; pointer-only flow),
223
+ * or `'unsupported'` (extraction layer only — for known
224
+ * non-extractable file types). Service-owned transitions handle
225
+ * `'complete'` / `'failed'` / `'running'`; clients that supply
226
+ * those values are rejected at the schema layer.
227
+ */
228
+ extractionStatus?: 'pending' | 'not_required' | 'unsupported';
229
+ semanticIndexStatus?: 'pending' | 'not_required';
230
+ }
231
+ export interface ListRawDocumentsInput {
232
+ userId: string;
233
+ sourceSite?: string;
234
+ limit?: number;
235
+ offset?: number;
236
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Row + input types for the document pipeline (Phase 1).
3
+ *
4
+ * Mirrors the columns defined in `schema.sql` for `raw_sources` and
5
+ * `raw_documents`. The CHECK constraints in SQL accept the full enum
6
+ * range so later phases (managed_blob, inline_small_text) can populate
7
+ * those values without a schema change; Phase 1 service-layer code
8
+ * still only writes `storage_mode = 'pointer_only'`.
9
+ */
10
+ export {};
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Raw-storage reconciler DB layer. The reconciler promotes
3
+ * `raw_storage_status='blob_pending'` rows on eventual providers once the
4
+ * adapter's `head()` confirms gateway retrievability (→
5
+ * `blob_available`) or, after exhausted retries, marks them
6
+ * `blob_archival_failed`.
7
+ *
8
+ * Concurrency model (rev-2 §3 + rev-6 §1): claim-then-release. Phase
9
+ * A grabs a batch in a short transaction with `FOR UPDATE SKIP
10
+ * LOCKED` so multiple reconciler instances partition the work
11
+ * deterministically without coordinator overhead. Slow
12
+ * network calls run with NO DB locks held. failure-transition's per-row UPDATE
13
+ * is guarded on `raw_storage_claim_id` so a stale claim cannot
14
+ * clobber a row another worker has since reclaimed.
15
+ *
16
+ * Eligibility predicate gates on TYPED columns only — no JSONB casts
17
+ * (rev-6 §2): a malformed JSONB shape can't masquerade as a fresh
18
+ * claim. The predicate also explicitly excludes `blob_uploading` rows
19
+ * — those recover through `uploadRaw`'s same-bytes idempotent retry,
20
+ * not the reconciler.
21
+ */
22
+ import pg from 'pg';
23
+ /** One row's worth of state the reconciler needs to probe + update. */
24
+ export interface ReconcilerClaimedRow {
25
+ id: string;
26
+ userId: string;
27
+ storageUri: string;
28
+ storageProvider: string;
29
+ contentHash: string | null;
30
+ rawStorageStatus: 'blob_pending';
31
+ rawStorageMetadata: Record<string, unknown>;
32
+ rawStorageReconcileAttempts: number;
33
+ /**
34
+ * `raw_storage_pending_since` carried through so the reconciler
35
+ * can emit the `pending_age_seconds` observability gauge against
36
+ * the durable lifecycle timestamp (rev-8 §7). NULL only on rows
37
+ * seeded by a path that bypassed the finalization step — production rows always
38
+ * carry it.
39
+ */
40
+ rawStoragePendingSince: Date | null;
41
+ /**
42
+ * True when the claim batch reclaimed a row whose previous
43
+ * `raw_storage_claim_id` was non-NULL (an earlier worker died /
44
+ * crashed). The `filecoin.reconcile.stale_claim_recovered`
45
+ * event uses this to differentiate fresh claims from recoveries.
46
+ */
47
+ recoveredStaleClaim: boolean;
48
+ }
49
+ export interface ClaimBatchArgs {
50
+ claimId: string;
51
+ batchSize: number;
52
+ staleAfterMs: number;
53
+ provider: string;
54
+ }
55
+ /**
56
+ * claim step: claim a batch of eligible eventual-provider `blob_pending` rows by
57
+ * writing `raw_storage_claim_id` + `raw_storage_claimed_at`. Skips
58
+ * rows another worker holds a fresh claim on. Returns the typed row
59
+ * state the reconciler will probe; the network call runs after this
60
+ * function returns + the caller commits the transaction.
61
+ *
62
+ * Eligibility predicate (rev-7 §3 — two-axis: claim ownership AND
63
+ * scheduled backoff):
64
+ * - `raw_storage_status = 'blob_pending'`
65
+ * - `storage_provider = args.provider`
66
+ * - `storage_uri IS NOT NULL` (rev-7 §1: the claim step-only rows with no
67
+ * URI recover via uploadRaw idempotency, NOT the reconciler)
68
+ * - `deleted_at IS NULL`
69
+ * - backoff elapsed: `next_check_at IS NULL OR next_check_at <= NOW()`
70
+ * - no live owner: claim_id NULL OR claimed_at older than staleAfterMs
71
+ */
72
+ export declare function claimReconcileBatch(pool: pg.Pool, args: ClaimBatchArgs): Promise<ReadonlyArray<ReconcilerClaimedRow>>;
73
+ /**
74
+ * failure-transition — success: promote to `blob_available`. Guarded on claim_id
75
+ * + status='blob_pending' so a stale claim cannot promote a row
76
+ * another worker has since failed. Deep-merges the new
77
+ * provider keys into the existing sibling (rev-4 §3) so a status-
78
+ * only probe doesn't drop `cid`/`piece_cid`/`deals` the original
79
+ * upload wrote. Layer-scoped `last_error` clear (rev-4 §2): drops
80
+ * the envelope only when it was scoped to `raw_storage`.
81
+ */
82
+ export declare function promoteToAvailableWithClient(pool: pg.Pool | pg.PoolClient, args: {
83
+ rowId: string;
84
+ claimId: string;
85
+ provider: string;
86
+ providerFields: Record<string, unknown>;
87
+ }): Promise<number>;
88
+ /**
89
+ * failure-transition — still-pending probe: clear the claim (release ownership)
90
+ * + increment attempts + advance `next_check_at` per the
91
+ * caller-computed backoff. Status STAYS `blob_pending` and
92
+ * `pending_since` is preserved.
93
+ */
94
+ export declare function markStillPendingWithClient(pool: pg.Pool, args: {
95
+ rowId: string;
96
+ claimId: string;
97
+ nextCheckAtMs: number;
98
+ provider: string;
99
+ }): Promise<number>;
100
+ /**
101
+ * failure-transition — terminal failure: status → `blob_archival_failed`. Sets
102
+ * a fresh raw-storage `last_error` envelope, clears claim/pending
103
+ * state, resets attempts. Guarded on claim_id.
104
+ */
105
+ export declare function markArchivalFailedWithClient(pool: pg.Pool | pg.PoolClient, args: {
106
+ rowId: string;
107
+ claimId: string;
108
+ lastError: Record<string, unknown>;
109
+ provider: string;
110
+ }): Promise<number>;