@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,373 @@
1
+ /**
2
+ * Swappable vector search backends for the prototype repository.
3
+ */
4
+ import pgvector from 'pgvector/pg';
5
+ import { config } from '../config.js';
6
+ import { normalizeMemoryRow, normalizeSearchRow, } from './repository-types.js';
7
+ import { RRF_K, buildHybridSearchParams, buildVectorSearchParams, clampUnit } from './query-helpers.js';
8
+ import { cosineSimilarity } from '../vector-math.js';
9
+ export async function searchVectors(pool, userId, queryEmbedding, limit, sourceSite, referenceTime) {
10
+ if (config.vectorBackend === 'pgvector') {
11
+ return searchVectorsPg(pool, userId, queryEmbedding, limit, sourceSite, referenceTime);
12
+ }
13
+ if (config.vectorBackend === 'ruvector-mock') {
14
+ return searchVectorsRuvectorMock(pool, userId, queryEmbedding, limit, sourceSite, referenceTime);
15
+ }
16
+ return searchVectorsZvecMock(pool, userId, queryEmbedding, limit, sourceSite, referenceTime);
17
+ }
18
+ /**
19
+ * Hybrid search using Reciprocal Rank Fusion (RRF) to combine vector similarity
20
+ * with PostgreSQL full-text search. Improves retrieval for keyword-heavy queries
21
+ * (names, dates, project names) where semantic similarity alone fails.
22
+ *
23
+ * Source: 2026-03-07 RAG deep dive (SeekDB link 6, GraphRAG guide link 1).
24
+ */
25
+ export async function searchHybrid(pool, userId, queryText, queryEmbedding, limit, sourceSite, referenceTime) {
26
+ if (config.vectorBackend !== 'pgvector') {
27
+ return searchVectors(pool, userId, queryEmbedding, limit, sourceSite, referenceTime);
28
+ }
29
+ return searchHybridPg(pool, userId, queryText, queryEmbedding, limit, sourceSite, referenceTime);
30
+ }
31
+ export async function searchKeyword(pool, userId, queryText, limit, sourceSite) {
32
+ if (config.vectorBackend !== 'pgvector') {
33
+ return [];
34
+ }
35
+ return searchKeywordPg(pool, userId, queryText, limit, sourceSite);
36
+ }
37
+ export async function findDuplicateVectors(pool, userId, embedding, threshold, limit) {
38
+ if (config.vectorBackend === 'pgvector') {
39
+ return findDuplicateVectorsPg(pool, userId, embedding, threshold, limit);
40
+ }
41
+ if (config.vectorBackend === 'ruvector-mock') {
42
+ return findDuplicateVectorsRuvectorMock(pool, userId, embedding, threshold, limit);
43
+ }
44
+ return findDuplicateVectorsZvecMock(pool, userId, embedding, threshold, limit);
45
+ }
46
+ /**
47
+ * Workspace-scoped vector search. Filters by workspace_id and optionally
48
+ * by agent_id based on AgentScope. Enforces visibility rules when a
49
+ * callerAgentId is provided.
50
+ */
51
+ export async function searchVectorsInWorkspace(pool, workspaceId, queryEmbedding, limit, agentScope = 'all', callerAgentId, referenceTime) {
52
+ const wSim = config.scoringWeightSimilarity;
53
+ const wImp = config.scoringWeightImportance;
54
+ const wRec = config.scoringWeightRecency;
55
+ const rankingMinSimilarity = clampUnit(config.retrievalProfileSettings.rankingMinSimilarity);
56
+ const refTime = (referenceTime ?? new Date()).toISOString();
57
+ const params = [
58
+ pgvector.toSql(queryEmbedding), workspaceId, normalizeLimit(limit),
59
+ wSim, wImp, wRec, refTime, rankingMinSimilarity,
60
+ ];
61
+ let nextParam = 9;
62
+ const agentClause = buildAgentScopeClause(agentScope, callerAgentId, params, nextParam);
63
+ nextParam += agentClause.paramsAdded;
64
+ const visibilityClause = buildVisibilityClauseForSearch(callerAgentId, params, nextParam);
65
+ const result = await pool.query(`SELECT *,
66
+ 1 - (embedding <=> $1) AS similarity,
67
+ 1 - (embedding <=> $1) AS semantic_similarity,
68
+ GREATEST(0, LEAST(1, 1 - (embedding <=> $1))) AS relevance,
69
+ (
70
+ $4 * (1 - (embedding <=> $1))
71
+ + $5 * importance
72
+ + $6 * EXP(-EXTRACT(EPOCH FROM ($7::timestamptz - last_accessed_at)) / 2592000.0)
73
+ ) * COALESCE(trust_score, 1.0) AS score,
74
+ (
75
+ $4 * (1 - (embedding <=> $1))
76
+ + CASE WHEN (1 - (embedding <=> $1)) >= $8 THEN (
77
+ $5 * importance
78
+ + $6 * EXP(-EXTRACT(EPOCH FROM ($7::timestamptz - last_accessed_at)) / 2592000.0)
79
+ ) ELSE 0 END
80
+ ) * COALESCE(trust_score, 1.0) AS ranking_score
81
+ FROM memories
82
+ WHERE workspace_id = $2
83
+ AND deleted_at IS NULL
84
+ AND expired_at IS NULL
85
+ AND status = 'active'
86
+ ${agentClause.sql}
87
+ ${visibilityClause.sql}
88
+ ORDER BY ranking_score DESC
89
+ LIMIT $3`, params);
90
+ return result.rows.map(normalizeSearchRow);
91
+ }
92
+ /**
93
+ * Find near-duplicate memories within a workspace scope.
94
+ * Used during workspace-scoped ingest for AUDN conflict detection.
95
+ */
96
+ export async function findDuplicateVectorsInWorkspace(pool, workspaceId, embedding, threshold, limit, agentScope = 'all', callerAgentId) {
97
+ const params = [pgvector.toSql(embedding), workspaceId, threshold, limit];
98
+ let nextParam = 5;
99
+ const agentClause = buildAgentScopeClause(agentScope, callerAgentId, params, nextParam);
100
+ const result = await pool.query(`SELECT id, content, importance, agent_id,
101
+ 1 - (embedding <=> $1) AS similarity
102
+ FROM memories
103
+ WHERE workspace_id = $2
104
+ AND deleted_at IS NULL
105
+ AND expired_at IS NULL
106
+ AND status = 'active'
107
+ AND 1 - (embedding <=> $1) > $3
108
+ ${agentClause.sql}
109
+ ORDER BY similarity DESC
110
+ LIMIT $4`, params);
111
+ return result.rows;
112
+ }
113
+ /**
114
+ * Resolve an AgentScope into a SQL WHERE clause fragment.
115
+ * Returns the SQL string and the count of parameters added.
116
+ */
117
+ function buildAgentScopeClause(scope, callerAgentId, params, nextParam) {
118
+ if (scope === 'all')
119
+ return { sql: '', paramsAdded: 0 };
120
+ if (scope === 'others') {
121
+ if (!callerAgentId)
122
+ return { sql: '', paramsAdded: 0 };
123
+ params.push(callerAgentId);
124
+ return { sql: `AND (agent_id IS NULL OR agent_id != $${nextParam})`, paramsAdded: 1 };
125
+ }
126
+ if (Array.isArray(scope) && scope.length > 0) {
127
+ params.push(scope);
128
+ return { sql: `AND agent_id = ANY($${nextParam}::uuid[])`, paramsAdded: 1 };
129
+ }
130
+ const targetId = scope === 'self' ? callerAgentId : scope;
131
+ if (!targetId)
132
+ return { sql: '', paramsAdded: 0 };
133
+ params.push(targetId);
134
+ return { sql: `AND agent_id = $${nextParam}`, paramsAdded: 1 };
135
+ }
136
+ /**
137
+ * Build visibility enforcement clause for workspace search.
138
+ * Ensures agents can only see memories they have access to.
139
+ */
140
+ function buildVisibilityClauseForSearch(callerAgentId, params, nextParam) {
141
+ if (!callerAgentId)
142
+ return { sql: '', paramsAdded: 0 };
143
+ params.push(callerAgentId);
144
+ return {
145
+ sql: `AND (
146
+ visibility = 'workspace'
147
+ OR visibility IS NULL
148
+ OR (visibility = 'agent_only' AND agent_id = $${nextParam})
149
+ OR (visibility = 'restricted' AND (
150
+ agent_id = $${nextParam}
151
+ OR EXISTS (
152
+ SELECT 1 FROM memory_visibility_grants g
153
+ WHERE g.memory_id = memories.id AND g.grantee_agent_id = $${nextParam}
154
+ )
155
+ ))
156
+ )`,
157
+ paramsAdded: 1,
158
+ };
159
+ }
160
+ async function searchVectorsPg(pool, userId, queryEmbedding, limit, sourceSite, referenceTime) {
161
+ const { params, siteClause } = buildVectorSearchParams(queryEmbedding, userId, limit, sourceSite, referenceTime);
162
+ const result = await pool.query(`SELECT *,
163
+ 1 - (embedding <=> $1) AS similarity,
164
+ 1 - (embedding <=> $1) AS semantic_similarity,
165
+ GREATEST(0, LEAST(1, 1 - (embedding <=> $1))) AS relevance,
166
+ (
167
+ $4 * (1 - (embedding <=> $1))
168
+ + $5 * importance
169
+ + $6 * EXP(-EXTRACT(EPOCH FROM ($7::timestamptz - last_accessed_at)) / 2592000.0)
170
+ ) * COALESCE(trust_score, 1.0) AS score,
171
+ (
172
+ $4 * (1 - (embedding <=> $1))
173
+ + CASE WHEN (1 - (embedding <=> $1)) >= $8 THEN (
174
+ $5 * importance
175
+ + $6 * EXP(-EXTRACT(EPOCH FROM ($7::timestamptz - last_accessed_at)) / 2592000.0)
176
+ ) ELSE 0 END
177
+ ) * COALESCE(trust_score, 1.0) AS ranking_score
178
+ FROM memories
179
+ WHERE user_id = $2
180
+ AND deleted_at IS NULL
181
+ AND expired_at IS NULL
182
+ AND status = 'active'
183
+ AND workspace_id IS NULL
184
+ ${siteClause}
185
+ ORDER BY ranking_score DESC
186
+ LIMIT $3`, params);
187
+ return result.rows.map(normalizeSearchRow);
188
+ }
189
+ async function findDuplicateVectorsPg(pool, userId, embedding, threshold, limit) {
190
+ const result = await pool.query(`SELECT id, content, importance, 1 - (embedding <=> $1) AS similarity
191
+ FROM memories
192
+ WHERE user_id = $2
193
+ AND deleted_at IS NULL
194
+ AND expired_at IS NULL
195
+ AND status = 'active'
196
+ AND workspace_id IS NULL
197
+ AND 1 - (embedding <=> $1) > $3
198
+ ORDER BY similarity DESC
199
+ LIMIT $4`, [pgvector.toSql(embedding), userId, threshold, limit]);
200
+ return result.rows;
201
+ }
202
+ async function searchKeywordPg(pool, userId, queryText, limit, sourceSite) {
203
+ const siteFilter = sourceSite ? 'AND source_site = $4' : '';
204
+ const params = [userId, queryText, normalizeLimit(limit)];
205
+ if (sourceSite)
206
+ params.push(sourceSite);
207
+ const result = await pool.query(`SELECT *,
208
+ LEAST(ts_rank(search_vector, plainto_tsquery('english', $2)), 1.0) AS similarity,
209
+ LEAST(ts_rank(search_vector, plainto_tsquery('english', $2)), 1.0) AS semantic_similarity,
210
+ LEAST(ts_rank(search_vector, plainto_tsquery('english', $2)), 1.0) AS relevance,
211
+ ts_rank(search_vector, plainto_tsquery('english', $2)) AS score,
212
+ ts_rank(search_vector, plainto_tsquery('english', $2)) AS ranking_score
213
+ FROM memories
214
+ WHERE user_id = $1
215
+ AND deleted_at IS NULL
216
+ AND expired_at IS NULL
217
+ AND status = 'active'
218
+ AND workspace_id IS NULL
219
+ ${siteFilter}
220
+ AND search_vector @@ plainto_tsquery('english', $2)
221
+ ORDER BY ts_rank(search_vector, plainto_tsquery('english', $2)) DESC, importance DESC
222
+ LIMIT $3`, params);
223
+ return result.rows.map(normalizeSearchRow);
224
+ }
225
+ async function searchHybridPg(pool, userId, queryText, queryEmbedding, limit, sourceSite, referenceTime) {
226
+ const { params, siteFilter } = buildHybridSearchParams(queryEmbedding, userId, queryText, limit, 'source_site', sourceSite, referenceTime);
227
+ const result = await pool.query(`WITH vector_ranked AS (
228
+ SELECT id, ROW_NUMBER() OVER (ORDER BY embedding <=> $1) AS vrank
229
+ FROM memories
230
+ WHERE user_id = $2 AND deleted_at IS NULL AND expired_at IS NULL AND status = 'active' AND workspace_id IS NULL ${siteFilter}
231
+ ORDER BY embedding <=> $1
232
+ LIMIT $4 * 4
233
+ ),
234
+ fts_ranked AS (
235
+ SELECT id, ROW_NUMBER() OVER (ORDER BY ts_rank(search_vector, plainto_tsquery('english', $3)) DESC) AS ftsrank
236
+ FROM memories
237
+ WHERE user_id = $2 AND deleted_at IS NULL AND expired_at IS NULL AND status = 'active' AND workspace_id IS NULL ${siteFilter}
238
+ AND search_vector @@ plainto_tsquery('english', $3)
239
+ ORDER BY ts_rank(search_vector, plainto_tsquery('english', $3)) DESC
240
+ LIMIT $4 * 4
241
+ ),
242
+ fused AS (
243
+ SELECT COALESCE(v.id, f.id) AS id,
244
+ COALESCE(1.0 / (${RRF_K} + v.vrank), 0) + COALESCE(1.0 / (${RRF_K} + f.ftsrank), 0) AS rrf_score
245
+ FROM vector_ranked v
246
+ FULL OUTER JOIN fts_ranked f ON v.id = f.id
247
+ )
248
+ SELECT m.*,
249
+ 1 - (m.embedding <=> $1) AS similarity,
250
+ 1 - (m.embedding <=> $1) AS semantic_similarity,
251
+ GREATEST(0, LEAST(1, 1 - (m.embedding <=> $1))) AS relevance,
252
+ (
253
+ $5 * (1 - (m.embedding <=> $1))
254
+ + $6 * m.importance
255
+ + $7 * EXP(-EXTRACT(EPOCH FROM ($8::timestamptz - m.last_accessed_at)) / 2592000.0)
256
+ + ${config.retrievalProfileSettings.lexicalWeight} * f.rrf_score
257
+ ) * COALESCE(m.trust_score, 1.0) AS score,
258
+ (
259
+ $5 * (1 - (m.embedding <=> $1))
260
+ + CASE WHEN (1 - (m.embedding <=> $1)) >= $9 THEN (
261
+ $6 * m.importance
262
+ + $7 * EXP(-EXTRACT(EPOCH FROM ($8::timestamptz - m.last_accessed_at)) / 2592000.0)
263
+ ) ELSE 0 END
264
+ -- Lexical RRF stays outside the semantic boost gate because exact text match is itself a relevance signal.
265
+ + ${config.retrievalProfileSettings.lexicalWeight} * f.rrf_score
266
+ ) * COALESCE(m.trust_score, 1.0) AS ranking_score
267
+ FROM fused f
268
+ JOIN memories m ON m.id = f.id
269
+ ORDER BY ranking_score DESC
270
+ LIMIT $4`, params);
271
+ return result.rows.map(normalizeSearchRow);
272
+ }
273
+ async function searchVectorsRuvectorMock(pool, userId, queryEmbedding, limit, sourceSite, referenceTime) {
274
+ const memories = await loadActiveMemories(pool, userId, sourceSite);
275
+ return rankAndSortMemories(memories, queryEmbedding, limit, referenceTime);
276
+ }
277
+ async function findDuplicateVectorsRuvectorMock(pool, userId, embedding, threshold, limit) {
278
+ const memories = await loadActiveMemories(pool, userId);
279
+ return findDuplicatesInMemoryList(memories, embedding, threshold, limit);
280
+ }
281
+ async function searchVectorsZvecMock(pool, userId, queryEmbedding, limit, sourceSite, referenceTime) {
282
+ const memories = await loadActiveMemories(pool, userId, sourceSite);
283
+ const shortlist = buildApproximateShortlist(memories, queryEmbedding, limit);
284
+ return rankAndSortMemories(shortlist, queryEmbedding, limit, referenceTime);
285
+ }
286
+ async function findDuplicateVectorsZvecMock(pool, userId, embedding, threshold, limit) {
287
+ const memories = await loadActiveMemories(pool, userId);
288
+ const shortlist = buildApproximateShortlist(memories, embedding, limit * 8);
289
+ return findDuplicatesInMemoryList(shortlist, embedding, threshold, limit);
290
+ }
291
+ /** Shared in-memory duplicate detection for mock backends. */
292
+ function findDuplicatesInMemoryList(memories, embedding, threshold, limit) {
293
+ return memories
294
+ .map((memory) => buildCandidate(memory, embedding))
295
+ .filter((candidate) => candidate.similarity > threshold)
296
+ .sort((left, right) => right.similarity - left.similarity)
297
+ .slice(0, normalizeLimit(limit));
298
+ }
299
+ /** Shared rank-and-sort for mock vector search backends. */
300
+ function rankAndSortMemories(memories, queryEmbedding, limit, referenceTime) {
301
+ return memories
302
+ .map((memory) => rankMemory(memory, queryEmbedding, referenceTime))
303
+ .sort((left, right) => (right.ranking_score ?? right.score) - (left.ranking_score ?? left.score))
304
+ .slice(0, normalizeLimit(limit));
305
+ }
306
+ async function loadActiveMemories(pool, userId, sourceSite) {
307
+ const result = await pool.query(`SELECT * FROM memories
308
+ WHERE user_id = $1
309
+ AND deleted_at IS NULL
310
+ AND expired_at IS NULL
311
+ AND status = 'active'
312
+ AND workspace_id IS NULL
313
+ ${sourceSite ? 'AND source_site = $2' : ''}`, sourceSite ? [userId, sourceSite] : [userId]);
314
+ return result.rows.map(normalizeMemoryRow);
315
+ }
316
+ function rankMemory(memory, queryEmbedding, referenceTime) {
317
+ const similarity = cosineSimilarity(queryEmbedding, memory.embedding);
318
+ const rawScore = computeScore(similarity, memory.importance, memory.last_accessed_at, referenceTime, false);
319
+ const score = rawScore * (memory.trust_score ?? 1.0);
320
+ const rawRankingScore = computeScore(similarity, memory.importance, memory.last_accessed_at, referenceTime, true);
321
+ const rankingScore = rawRankingScore * (memory.trust_score ?? 1.0);
322
+ return {
323
+ ...memory,
324
+ similarity,
325
+ score,
326
+ semantic_similarity: similarity,
327
+ ranking_score: rankingScore,
328
+ relevance: clampUnit(similarity),
329
+ };
330
+ }
331
+ function buildCandidate(memory, queryEmbedding) {
332
+ return {
333
+ id: memory.id,
334
+ content: memory.content,
335
+ importance: memory.importance,
336
+ similarity: cosineSimilarity(queryEmbedding, memory.embedding),
337
+ };
338
+ }
339
+ function buildApproximateShortlist(memories, queryEmbedding, limit) {
340
+ const candidatePool = Math.max(normalizeLimit(limit) * 6, 24);
341
+ return memories
342
+ .map((memory) => ({
343
+ memory,
344
+ similarity: approximateCosineSimilarity(queryEmbedding, memory.embedding),
345
+ }))
346
+ .sort((left, right) => right.similarity - left.similarity)
347
+ .slice(0, candidatePool)
348
+ .map((entry) => entry.memory);
349
+ }
350
+ function computeScore(similarity, importance, lastAccessedAt, referenceTime, applyRankingFloor) {
351
+ const refMs = referenceTime ? referenceTime.getTime() : Date.now();
352
+ const secondsSinceAccess = (refMs - lastAccessedAt.getTime()) / 1000;
353
+ const recency = Math.exp(-secondsSinceAccess / 2592000.0);
354
+ const canUseNonSemanticScore = !applyRankingFloor
355
+ || similarity >= clampUnit(config.retrievalProfileSettings.rankingMinSimilarity);
356
+ const nonSemanticScore = canUseNonSemanticScore
357
+ ? (config.scoringWeightImportance * importance) + (config.scoringWeightRecency * recency)
358
+ : 0;
359
+ return (config.scoringWeightSimilarity * similarity) + nonSemanticScore;
360
+ }
361
+ function approximateCosineSimilarity(left, right) {
362
+ return cosineSimilarity(projectEmbedding(left), projectEmbedding(right));
363
+ }
364
+ function projectEmbedding(values) {
365
+ const projected = [];
366
+ for (let index = 0; index < values.length; index += 6) {
367
+ projected.push(values[index]);
368
+ }
369
+ return projected;
370
+ }
371
+ function normalizeLimit(limit) {
372
+ return Math.max(1, Math.min(100, limit));
373
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @file Full-wipe path for the deleteAll (user-scoped + global)
3
+ * cleanup-then-hard-delete sequence.
4
+ *
5
+ * Extracted from `repository-write.ts` to keep that module under
6
+ * the workspace's 400-non-comment-LOC cap. The wipe path is its own
7
+ * concern: it cleans managed blobs first (so a failure can mark
8
+ * surviving rows `raw_storage_failed` + sync the linked artifact)
9
+ * and then hard-deletes the memory tables, raw_documents,
10
+ * storage_artifacts, and raw_sources in FK-safe order.
11
+ */
12
+ import type pg from 'pg';
13
+ import type { RawContentStore } from '../storage/raw-content-store.js';
14
+ import type { RawContentStoreRegistry } from '../storage/store-registry.js';
15
+ export interface DeleteAllOptions {
16
+ rawContentStore?: RawContentStore | null;
17
+ /**
18
+ * Phase 4a per-row dispatch registry. Defaults to a single-store
19
+ * registry wrapping `rawContentStore` so existing callers that
20
+ * pass just the active store continue to work; composition-root
21
+ * code passes a multi-provider registry when
22
+ * `RAW_STORAGE_LEGACY_PROVIDERS` is set.
23
+ */
24
+ storeRegistry?: RawContentStoreRegistry;
25
+ }
26
+ /**
27
+ * Hard-wipe everything for a user (`userId` set) or globally
28
+ * (`userId` undefined). Cleanup runs first; on failure the surviving
29
+ * rows are marked `raw_storage_failed` (with the linked artifact
30
+ * synced via the paired helper) and `ManagedBlobCleanupError` is
31
+ * thrown without touching the rest of the tables — the operator
32
+ * fixes the upstream issue and retries.
33
+ */
34
+ export declare function deleteAll(pool: pg.Pool, userId?: string, options?: DeleteAllOptions): Promise<void>;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * @file Full-wipe path for the deleteAll (user-scoped + global)
3
+ * cleanup-then-hard-delete sequence.
4
+ *
5
+ * Extracted from `repository-write.ts` to keep that module under
6
+ * the workspace's 400-non-comment-LOC cap. The wipe path is its own
7
+ * concern: it cleans managed blobs first (so a failure can mark
8
+ * surviving rows `raw_storage_failed` + sync the linked artifact)
9
+ * and then hard-deletes the memory tables, raw_documents,
10
+ * storage_artifacts, and raw_sources in FK-safe order.
11
+ */
12
+ import { cleanupManagedBlobs, ManagedBlobCleanupError, } from '../storage/cleanup.js';
13
+ import { singleStoreRegistry } from '../storage/store-registry.js';
14
+ import { listManagedBlobsForUser } from './raw-document-blob-repository.js';
15
+ import { buildRawStorageCleanupFailureEnvelope, markCleanupFailedAndSyncArtifact, } from './raw-doc-artifact-sync.js';
16
+ /**
17
+ * Hard-wipe everything for a user (`userId` set) or globally
18
+ * (`userId` undefined). Cleanup runs first; on failure the surviving
19
+ * rows are marked `raw_storage_failed` (with the linked artifact
20
+ * synced via the paired helper) and `ManagedBlobCleanupError` is
21
+ * thrown without touching the rest of the tables — the operator
22
+ * fixes the upstream issue and retries.
23
+ */
24
+ export async function deleteAll(pool, userId, options = {}) {
25
+ const blobs = await listManagedBlobsForUser(pool, userId);
26
+ if (blobs.length > 0) {
27
+ const registry = options.storeRegistry
28
+ ?? singleStoreRegistry(options.rawContentStore ?? null);
29
+ const result = await cleanupManagedBlobs(registry, blobs);
30
+ if (result.failures.length > 0) {
31
+ for (const failure of result.failures) {
32
+ await markDeleteAllCleanupFailure(pool, userId, failure.rawDocumentId, buildRawStorageCleanupFailureEnvelope(failure.message, failure.storageProvider));
33
+ }
34
+ throw new ManagedBlobCleanupError(result);
35
+ }
36
+ }
37
+ if (userId)
38
+ await deleteAllForUser(pool, userId);
39
+ else
40
+ await deleteAllGlobal(pool);
41
+ }
42
+ /**
43
+ * Mark a cleanup-failure row `raw_storage_failed` and sync the
44
+ * linked artifact to `failed`. For `userId` set (user-scoped wipe),
45
+ * we use the standard paired helper. For the global wipe path
46
+ * (`userId` undefined), we resolve the row's owner first so the
47
+ * paired helper can run with its owner-scope guard intact.
48
+ */
49
+ async function markDeleteAllCleanupFailure(pool, userId, rawDocumentId, lastError) {
50
+ if (userId !== undefined) {
51
+ await markCleanupFailedAndSyncArtifact(pool, { userId, rawDocumentId, lastError });
52
+ return;
53
+ }
54
+ const lookup = await pool.query(`SELECT user_id FROM raw_documents WHERE id = $1`, [rawDocumentId]);
55
+ if (lookup.rowCount === 0)
56
+ return;
57
+ await markCleanupFailedAndSyncArtifact(pool, {
58
+ userId: lookup.rows[0].user_id,
59
+ rawDocumentId,
60
+ lastError,
61
+ });
62
+ }
63
+ /**
64
+ * User-scoped hard-delete. Chunks → documents → storage_artifacts →
65
+ * sources, in FK-safe order. `storage_artifacts` is hard-deleted
66
+ * AFTER `raw_documents` because the composite FK
67
+ * `raw_documents(storage_artifact_id, user_id) → storage_artifacts`
68
+ * points one way.
69
+ */
70
+ async function deleteAllForUser(pool, userId) {
71
+ await pool.query('DELETE FROM memory_evidence WHERE claim_version_id IN (SELECT id FROM memory_claim_versions WHERE user_id = $1)', [userId]);
72
+ await pool.query('DELETE FROM memory_claim_versions WHERE user_id = $1', [userId]);
73
+ await pool.query('DELETE FROM memory_claims WHERE user_id = $1', [userId]);
74
+ await pool.query('DELETE FROM memory_links WHERE source_id IN (SELECT id FROM memories WHERE user_id = $1)', [userId]);
75
+ await pool.query('DELETE FROM memories WHERE user_id = $1', [userId]);
76
+ await pool.query('DELETE FROM episodes WHERE user_id = $1', [userId]);
77
+ await pool.query('DELETE FROM document_chunks WHERE user_id = $1', [userId]);
78
+ await pool.query('DELETE FROM raw_documents WHERE user_id = $1', [userId]);
79
+ await pool.query('DELETE FROM storage_artifacts WHERE user_id = $1', [userId]);
80
+ await pool.query('DELETE FROM raw_sources WHERE user_id = $1', [userId]);
81
+ }
82
+ /** Global hard-delete. Same FK-safe order; no user filter. */
83
+ async function deleteAllGlobal(pool) {
84
+ await pool.query('DELETE FROM memory_evidence');
85
+ await pool.query('DELETE FROM memory_claim_versions');
86
+ await pool.query('DELETE FROM memory_claims');
87
+ await pool.query('DELETE FROM memory_links');
88
+ await pool.query('DELETE FROM memories');
89
+ await pool.query('DELETE FROM episodes');
90
+ await pool.query('DELETE FROM document_chunks');
91
+ await pool.query('DELETE FROM raw_documents');
92
+ await pool.query('DELETE FROM storage_artifacts');
93
+ await pool.query('DELETE FROM raw_sources');
94
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Write-side queries for episodes and active memory projections.
3
+ */
4
+ import pg from 'pg';
5
+ import { type CanonicalFactPayload, type CanonicalMemoryObjectFamily, type CanonicalMemoryObjectLineage, type CanonicalMemoryObjectProvenance, type MemoryMetadata, type StoreMemoryInput } from './repository-types.js';
6
+ export interface StoreEpisodeInput {
7
+ userId: string;
8
+ content: string;
9
+ sourceSite: string;
10
+ sourceUrl?: string;
11
+ sessionId?: string;
12
+ workspaceId?: string;
13
+ agentId?: string;
14
+ }
15
+ export declare function storeEpisode(pool: pg.Pool, input: StoreEpisodeInput): Promise<string>;
16
+ export declare function storeEpisodeWithClient(client: pg.PoolClient, input: StoreEpisodeInput): Promise<string>;
17
+ export type { StoreMemoryInput };
18
+ export interface StoreCanonicalMemoryObjectInput {
19
+ userId: string;
20
+ objectFamily: CanonicalMemoryObjectFamily;
21
+ payloadFormat?: string;
22
+ canonicalPayload: CanonicalFactPayload;
23
+ provenance: CanonicalMemoryObjectProvenance;
24
+ observedAt?: Date;
25
+ lineage: CanonicalMemoryObjectLineage;
26
+ }
27
+ export declare function storeCanonicalMemoryObject(pool: pg.Pool, input: StoreCanonicalMemoryObjectInput): Promise<string>;
28
+ export declare function storeMemory(pool: pg.Pool, input: StoreMemoryInput): Promise<string>;
29
+ export declare function storeMemoryWithClient(client: pg.PoolClient, input: StoreMemoryInput): Promise<string>;
30
+ export declare function updateMemoryContent(pool: pg.Pool, userId: string, id: string, content: string, embedding: number[], importance: number, keywords?: string, trustScore?: number): Promise<void>;
31
+ export declare function updateMemoryContentWithClient(client: pg.PoolClient, userId: string, id: string, content: string, embedding: number[], importance: number, keywords?: string, trustScore?: number): Promise<void>;
32
+ export declare function updateMemoryMetadata(pool: pg.Pool, userId: string, id: string, metadata: MemoryMetadata): Promise<void>;
33
+ /**
34
+ * Set the topic_abstraction + topic_embedding columns on a batch of memories.
35
+ * Used by the post-write topic-abstraction processor (Sprint 3 EO experiment).
36
+ *
37
+ * One UPDATE per call; the caller batches by chunk so all facts from a chunk
38
+ * receive the same topic.
39
+ */
40
+ export declare function updateMemoryTopicAbstraction(pool: pg.Pool, userId: string, memoryIds: string[], topic: string, topicEmbedding: number[]): Promise<void>;
41
+ export declare function softDeleteMemory(pool: pg.Pool, userId: string, id: string): Promise<void>;
42
+ export declare function softDeleteMemoryWithClient(client: pg.PoolClient, userId: string, id: string): Promise<void>;
43
+ export declare function softDeleteMemoryInWorkspace(pool: pg.Pool, id: string, workspaceId: string): Promise<void>;
44
+ /**
45
+ * Soft-delete every memory whose Phase 2 provenance points at the given
46
+ * `raw_document_id`. The Phase 2 indexer's re-chunk path calls this so
47
+ * stale derived memories disappear from `/v1/memories/search` before the
48
+ * fresh generation lands.
49
+ */
50
+ export declare function softDeleteMemoriesForDocument(q: pg.Pool | pg.PoolClient, userId: string, rawDocumentId: string): Promise<number>;
51
+ /**
52
+ * Mark a memory as temporally expired (contradicted/superseded).
53
+ * Unlike soft-delete, expired memories are preserved for temporal queries:
54
+ * "what did I know as of date X?" can still retrieve them.
55
+ */
56
+ export declare function expireMemory(pool: pg.Pool, userId: string, id: string): Promise<void>;
57
+ export declare function expireMemoryWithClient(client: pg.PoolClient, userId: string, id: string): Promise<void>;
58
+ export declare function touchMemory(pool: pg.Pool, id: string): Promise<void>;
59
+ export declare function updateOpinionConfidence(pool: pg.Pool, userId: string, memoryId: string, newConfidence: number): Promise<void>;
60
+ export declare function backdateMemories(pool: pg.Pool, ids: string[], timestamp: Date): Promise<void>;
61
+ export { deleteAll } from './repository-wipe.js';