@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,275 @@
1
+ /**
2
+ * Adaptive retrieval and repair-loop policy helpers.
3
+ */
4
+ import { isCurrentStateQuery, isHistoricalQuery } from './current-state-ranking.js';
5
+ import { isTemporalOrderingQuery } from './temporal-query-expansion.js';
6
+ const SIMPLE_QUERY_LIMIT = 5;
7
+ const MEDIUM_QUERY_LIMIT = 5;
8
+ const COMPLEX_QUERY_LIMIT = 8;
9
+ const MULTI_HOP_QUERY_LIMIT = 12;
10
+ export const AGGREGATION_QUERY_LIMIT = 25;
11
+ /** Hard ceiling for aggregation queries (prevents runaway candidate pools). */
12
+ const AGGREGATION_HARD_CAP = 50;
13
+ const RECALL_ORIENTED_QUERY_LABELS = new Set(['complex', 'multi-hop', 'aggregation']);
14
+ const RECALL_BYPASS_REASONS = {
15
+ AS_OF_QUERY: 'as-of-query',
16
+ SOURCE_SITE_FILTER: 'source-site-filter',
17
+ TEMPORAL_STATE_QUERY: 'temporal-state-query',
18
+ recallOriented: (queryLabel) => `recall-oriented-${queryLabel}-query`,
19
+ };
20
+ /**
21
+ * Markers indicating temporal/relational complexity (multi-hop or comparison).
22
+ *
23
+ * The "current" marker reclassifies current-state attribute queries from
24
+ * MEDIUM/5 → MULTI_HOP/12 so the retrieval window is broad enough to
25
+ * distinguish current state from historical mentions (commit 122ae26).
26
+ *
27
+ * Validated 2026-04-01: 0/15 false positives across 2,173 benchmark queries
28
+ * (7 datasets). 4 borderline date-pinned queries are harmless (extra depth,
29
+ * no accuracy impact). See: docs/.../current-marker-fp-analysis-2026-04-01.md
30
+ *
31
+ * If editing this list, re-run the FP scan:
32
+ * classifyQueryDetailed() against all eval dataset queries.
33
+ */
34
+ const MULTI_HOP_MARKERS = ['compare', 'difference between', 'relationship between', 'how does .* relate', 'connection between', 'all the times', 'everything about', 'full history', 'current'];
35
+ /**
36
+ * Toggle "current" in MULTI_HOP_MARKERS for controlled A/B eval comparisons.
37
+ * Not for production use — only called by run-balanced12-validation.ts.
38
+ */
39
+ function addCurrentToMultiHopMarkers() {
40
+ if (!MULTI_HOP_MARKERS.includes('current'))
41
+ MULTI_HOP_MARKERS.push('current');
42
+ }
43
+ function removeCurrentFromMultiHopMarkers() {
44
+ const idx = MULTI_HOP_MARKERS.indexOf('current');
45
+ if (idx >= 0)
46
+ MULTI_HOP_MARKERS.splice(idx, 1);
47
+ }
48
+ const COMPLEX_MARKERS = ['before', 'after', 'change', 'switched', 'why', 'how', 'relationship', 'history', 'used to', 'when', 'timeline', 'order', 'how long', 'sequence'];
49
+ /**
50
+ * Aggregation query markers: count, sum, total, list-all patterns.
51
+ * These need high recall across many sessions to avoid undercounting.
52
+ */
53
+ const AGGREGATION_MARKERS = [
54
+ 'how many', 'how much',
55
+ 'total amount', 'total cost', 'total spent', 'total price',
56
+ 'total duration', 'total number', 'total time',
57
+ 'list all', 'list every', 'name all', 'name every',
58
+ 'what are all', 'what were all',
59
+ ];
60
+ export function resolveSearchLimit(query, requestedLimit, runtimeConfig) {
61
+ return resolveSearchLimitDetailed(query, requestedLimit, runtimeConfig).limit;
62
+ }
63
+ export function resolveSearchLimitDetailed(query, requestedLimit, runtimeConfig) {
64
+ // When the caller passed an explicit limit AND adaptive is enabled, take the
65
+ // MAX of (requested, classification) so aggregation queries get high recall
66
+ // even when the caller defaulted to a low limit. v19 evidence at n=80: AMB
67
+ // sends limit=10 which short-circuited the adaptive path, leaving MSR
68
+ // questions starving for context (8/8 questions scored 0). This change keeps
69
+ // the explicit-limit contract for non-aggregation queries while letting
70
+ // aggregation/multi-hop scale up automatically.
71
+ if (requestedLimit !== undefined && runtimeConfig.adaptiveRetrievalEnabled) {
72
+ const classification = applyConfiguredLimit(classifyQueryDetailed(query), runtimeConfig);
73
+ const classLimit = classification.label === 'aggregation'
74
+ ? Math.min(AGGREGATION_HARD_CAP, classification.limit)
75
+ : clampLimit(classification.limit, runtimeConfig.maxSearchResults);
76
+ const requestedClamped = clampLimit(requestedLimit, runtimeConfig.maxSearchResults);
77
+ const final = Math.max(requestedClamped, classLimit);
78
+ return { limit: final, classification };
79
+ }
80
+ if (requestedLimit !== undefined) {
81
+ return { limit: clampLimit(requestedLimit, runtimeConfig.maxSearchResults), classification: { limit: requestedLimit, label: 'medium' } };
82
+ }
83
+ if (!runtimeConfig.adaptiveRetrievalEnabled) {
84
+ return { limit: clampLimit(runtimeConfig.maxSearchResults, runtimeConfig.maxSearchResults), classification: { limit: runtimeConfig.maxSearchResults, label: 'medium' } };
85
+ }
86
+ const classification = applyConfiguredLimit(classifyQueryDetailed(query), runtimeConfig);
87
+ // Aggregation queries bypass the normal maxSearchResults clamp to improve
88
+ // recall for count/sum/list-all questions spanning many sessions.
89
+ const limit = classification.label === 'aggregation'
90
+ ? Math.max(1, Math.min(AGGREGATION_HARD_CAP, classification.limit))
91
+ : clampLimit(classification.limit, runtimeConfig.maxSearchResults);
92
+ return { limit, classification };
93
+ }
94
+ export function shouldRunRepairLoop(query, memories, runtimeConfig) {
95
+ if (!runtimeConfig.repairLoopEnabled)
96
+ return false;
97
+ // Selective repair: only escalate queries where the rewrite improves retrieval.
98
+ // Multi-hop and aggregation always benefit. Complex queries benefit unless they
99
+ // are temporal-ordering (the rewrite strips time-specific phrasing and hurts
100
+ // sequencing evidence). Simple/medium queries are fast-pathed without repair.
101
+ const classification = classifyQueryDetailed(query);
102
+ const isEligible = classification.label === 'multi-hop'
103
+ || classification.label === 'aggregation'
104
+ || (classification.label === 'complex' && !isTemporalOrderingQuery(query));
105
+ if (!isEligible)
106
+ return false;
107
+ if (memories.length === 0)
108
+ return true;
109
+ if (memories[0].similarity < runtimeConfig.repairLoopMinSimilarity)
110
+ return true;
111
+ return isComplexQuery(query.toLowerCase()) && memories.length < resolveSearchLimit(query, undefined, runtimeConfig);
112
+ }
113
+ /**
114
+ * Decides whether to accept repaired results over initial results.
115
+ * Gates on two heuristics:
116
+ * 1. Similarity-delta anti-thrash: reject if top-1 similarity didn't improve enough.
117
+ * 2. Confidence floor: reject if repaired top-1 similarity is still too low.
118
+ * Both thresholds default to 0 (always accept) to preserve current behavior.
119
+ */
120
+ export function shouldAcceptRepair(initial, repaired, runtimeConfig) {
121
+ const initialTopSim = initial.length > 0 ? initial[0].similarity : 0;
122
+ const repairedTopSim = repaired.length > 0 ? repaired[0].similarity : 0;
123
+ const simDelta = repairedTopSim - initialTopSim;
124
+ const base = { initialTopSim, repairedTopSim, simDelta };
125
+ // Anti-sabotage gating: If initial results are strong (>0.6) and repair degrades
126
+ // similarity, always reject.
127
+ if (initialTopSim > 0.6 && simDelta < 0) {
128
+ return { ...base, accepted: false, reason: 'sabotage-detected' };
129
+ }
130
+ const deltaThreshold = runtimeConfig.repairDeltaThreshold || 0.01;
131
+ if (simDelta < deltaThreshold) {
132
+ return { ...base, accepted: false, reason: 'delta-below-threshold' };
133
+ }
134
+ if (runtimeConfig.repairConfidenceFloor > 0 && repairedTopSim < runtimeConfig.repairConfidenceFloor) {
135
+ return { ...base, accepted: false, reason: 'below-confidence-floor' };
136
+ }
137
+ return { ...base, accepted: true, reason: 'accepted' };
138
+ }
139
+ export function mergeSearchResults(primary, repair, limit, runtimeConfig) {
140
+ const merged = new Map();
141
+ mergeWeightedResults(merged, primary, runtimeConfig.retrievalProfileSettings.repairPrimaryWeight);
142
+ mergeWeightedResults(merged, repair, runtimeConfig.retrievalProfileSettings.repairRewriteWeight);
143
+ return [...merged.values()].sort((left, right) => right.score - left.score).slice(0, clampLimitWide(limit));
144
+ }
145
+ export function resolveRerankDepth(limit, runtimeConfig) {
146
+ return Math.max(clampLimitWide(limit), runtimeConfig.retrievalProfileSettings.rerankDepth);
147
+ }
148
+ export function applyRankingEligibility(query, candidates, runtimeConfig, context = {}) {
149
+ const queryLabel = classifyQueryDetailed(query).label;
150
+ const bypassReason = resolveRecallBypass(query, queryLabel, context);
151
+ if (bypassReason) {
152
+ return {
153
+ results: candidates,
154
+ decisions: [],
155
+ removedIds: [],
156
+ threshold: null,
157
+ reason: bypassReason,
158
+ queryLabel,
159
+ triggered: false,
160
+ };
161
+ }
162
+ const threshold = clampUnit(runtimeConfig.retrievalProfileSettings.rankingMinSimilarity);
163
+ if (threshold <= 0) {
164
+ return {
165
+ results: candidates,
166
+ decisions: [],
167
+ removedIds: [],
168
+ threshold: null,
169
+ reason: 'non-positive-ranking-threshold',
170
+ queryLabel,
171
+ triggered: false,
172
+ };
173
+ }
174
+ const decisions = candidates.map((candidate) => buildRankingEligibilityDecision(candidate, threshold));
175
+ const removedIds = decisions
176
+ .filter((decision) => decision.decision === 'filtered')
177
+ .map((decision) => decision.id);
178
+ const keptIds = new Set(decisions.filter((decision) => decision.decision === 'eligible').map((decision) => decision.id));
179
+ return {
180
+ results: candidates.filter((candidate) => keptIds.has(candidate.id)),
181
+ decisions,
182
+ removedIds,
183
+ threshold,
184
+ reason: 'direct-query-ranking-floor',
185
+ queryLabel,
186
+ triggered: true,
187
+ };
188
+ }
189
+ function applyConfiguredLimit(classification, runtimeConfig) {
190
+ const limits = {
191
+ simple: runtimeConfig.adaptiveSimpleLimit,
192
+ medium: runtimeConfig.adaptiveMediumLimit,
193
+ complex: runtimeConfig.adaptiveComplexLimit,
194
+ 'multi-hop': runtimeConfig.adaptiveMultiHopLimit,
195
+ aggregation: runtimeConfig.adaptiveAggregationLimit,
196
+ };
197
+ return { ...classification, limit: limits[classification.label] };
198
+ }
199
+ function classifyQueryComplexity(query) {
200
+ return classifyQueryDetailed(query).limit;
201
+ }
202
+ export function classifyQueryDetailed(query) {
203
+ const lower = query.toLowerCase();
204
+ const aggMarker = AGGREGATION_MARKERS.find((m) => lower.includes(m));
205
+ if (aggMarker)
206
+ return { limit: AGGREGATION_QUERY_LIMIT, label: 'aggregation', matchedMarker: aggMarker };
207
+ const hopMarker = MULTI_HOP_MARKERS.find((m) => new RegExp(m).test(lower));
208
+ if (hopMarker)
209
+ return { limit: MULTI_HOP_QUERY_LIMIT, label: 'multi-hop', matchedMarker: hopMarker };
210
+ if (isComplexQuery(lower))
211
+ return { limit: COMPLEX_QUERY_LIMIT, label: 'complex' };
212
+ if (lower.split(/\s+/).length > 9)
213
+ return { limit: MEDIUM_QUERY_LIMIT, label: 'medium' };
214
+ if (lower.endsWith('?') && lower.split(/\s+/).length <= 5)
215
+ return { limit: SIMPLE_QUERY_LIMIT, label: 'simple' };
216
+ return { limit: MEDIUM_QUERY_LIMIT, label: 'medium' };
217
+ }
218
+ export function resolveRecallBypass(query, queryLabel, context) {
219
+ if (context.asOf || context.referenceTime)
220
+ return RECALL_BYPASS_REASONS.AS_OF_QUERY;
221
+ if (context.sourceSite)
222
+ return RECALL_BYPASS_REASONS.SOURCE_SITE_FILTER;
223
+ // State queries need recall even when the adaptive-depth classifier calls
224
+ // them simple/medium; regression tests pin representative cross-classifier
225
+ // cases so these regex classifiers do not drift unnoticed.
226
+ if (isCurrentStateQuery(query) || isHistoricalQuery(query))
227
+ return RECALL_BYPASS_REASONS.TEMPORAL_STATE_QUERY;
228
+ if (RECALL_ORIENTED_QUERY_LABELS.has(queryLabel))
229
+ return RECALL_BYPASS_REASONS.recallOriented(queryLabel);
230
+ return null;
231
+ }
232
+ function isMultiHopQuery(lowerQuery) {
233
+ return MULTI_HOP_MARKERS.some((marker) => new RegExp(marker).test(lowerQuery));
234
+ }
235
+ function isComplexQuery(lowerQuery) {
236
+ return COMPLEX_MARKERS.some((marker) => lowerQuery.includes(marker));
237
+ }
238
+ export function isAggregationQuery(lowerQuery) {
239
+ return AGGREGATION_MARKERS.some((marker) => lowerQuery.includes(marker));
240
+ }
241
+ function clampLimit(limit, maxSearchResults) {
242
+ return Math.max(1, Math.min(maxSearchResults, Math.floor(limit)));
243
+ }
244
+ /** Wider clamp for pipeline internals — respects aggregation ceiling, not profile cap. */
245
+ function clampLimitWide(limit) {
246
+ return Math.max(1, Math.min(AGGREGATION_HARD_CAP, Math.floor(limit)));
247
+ }
248
+ function buildRankingEligibilityDecision(candidate, threshold) {
249
+ const similarity = finiteOrZero(candidate.similarity);
250
+ const eligible = similarity >= threshold;
251
+ return {
252
+ id: candidate.id,
253
+ similarity,
254
+ threshold,
255
+ decision: eligible ? 'eligible' : 'filtered',
256
+ reason: eligible ? 'meets-ranking-floor' : 'below-ranking-floor',
257
+ };
258
+ }
259
+ function finiteOrZero(value) {
260
+ return Number.isFinite(value) ? value : 0;
261
+ }
262
+ function clampUnit(value) {
263
+ if (!Number.isFinite(value))
264
+ return 0;
265
+ return Math.max(0, Math.min(1, value));
266
+ }
267
+ function mergeWeightedResults(merged, results, weight) {
268
+ for (const memory of results) {
269
+ const weighted = { ...memory, score: memory.score * weight };
270
+ const existing = merged.get(memory.id);
271
+ if (!existing || weighted.score > existing.score) {
272
+ merged.set(memory.id, weighted);
273
+ }
274
+ }
275
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Retrieval profile definitions for safe, balanced, and quality modes.
3
+ */
4
+ export type RetrievalProfileName = 'safe' | 'balanced' | 'quality';
5
+ export interface RetrievalProfile {
6
+ name: RetrievalProfileName;
7
+ maxSearchResults: number;
8
+ repairLoopEnabled: boolean;
9
+ adaptiveRetrievalEnabled: boolean;
10
+ hybridSearchEnabled: boolean;
11
+ repairLoopMinSimilarity: number;
12
+ repairSkipSimilarity: number;
13
+ rerankDepth: number;
14
+ repairPrimaryWeight: number;
15
+ repairRewriteWeight: number;
16
+ lexicalWeight: number;
17
+ mmrEnabled: boolean;
18
+ mmrLambda: number;
19
+ linkExpansionEnabled: boolean;
20
+ linkExpansionMax: number;
21
+ linkSimilarityThreshold: number;
22
+ scoringWeightSimilarity: number;
23
+ scoringWeightImportance: number;
24
+ scoringWeightRecency: number;
25
+ /**
26
+ * Minimum semantic similarity required before importance/recency ranking
27
+ * boosts apply, and before direct simple/medium queries consider a candidate
28
+ * eligible for injection. Safe is stricter; quality keeps a little more
29
+ * recall for borderline matches.
30
+ */
31
+ rankingMinSimilarity: number;
32
+ linkExpansionBeforeMMR: boolean;
33
+ repairDeltaThreshold: number;
34
+ repairConfidenceFloor: number;
35
+ }
36
+ export declare function parseRetrievalProfile(value: string | undefined): RetrievalProfileName;
37
+ export declare function getRetrievalProfile(name: RetrievalProfileName): RetrievalProfile;
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Retrieval profile definitions for safe, balanced, and quality modes.
3
+ */
4
+ const PROFILES = {
5
+ safe: {
6
+ name: 'safe',
7
+ maxSearchResults: 5,
8
+ repairLoopEnabled: false,
9
+ adaptiveRetrievalEnabled: false,
10
+ hybridSearchEnabled: false,
11
+ repairLoopMinSimilarity: 0.8,
12
+ repairSkipSimilarity: 0.65,
13
+ rerankDepth: 5,
14
+ repairPrimaryWeight: 1,
15
+ repairRewriteWeight: 0,
16
+ lexicalWeight: 0.4,
17
+ mmrEnabled: false,
18
+ mmrLambda: 0.7,
19
+ linkExpansionEnabled: false,
20
+ linkExpansionMax: 0,
21
+ linkSimilarityThreshold: 0.5,
22
+ scoringWeightSimilarity: 2.0,
23
+ scoringWeightImportance: 1.0,
24
+ scoringWeightRecency: 1.0,
25
+ rankingMinSimilarity: 0.35,
26
+ linkExpansionBeforeMMR: false,
27
+ repairDeltaThreshold: 0,
28
+ repairConfidenceFloor: 0,
29
+ },
30
+ balanced: {
31
+ name: 'balanced',
32
+ maxSearchResults: 12,
33
+ repairLoopEnabled: true,
34
+ adaptiveRetrievalEnabled: true,
35
+ hybridSearchEnabled: false,
36
+ repairLoopMinSimilarity: 0.72,
37
+ repairSkipSimilarity: 0.65,
38
+ rerankDepth: 16,
39
+ repairPrimaryWeight: 1,
40
+ repairRewriteWeight: 0.92,
41
+ lexicalWeight: 0.8,
42
+ mmrEnabled: true,
43
+ mmrLambda: 0.85,
44
+ linkExpansionEnabled: true,
45
+ linkExpansionMax: 3,
46
+ linkSimilarityThreshold: 0.5,
47
+ scoringWeightSimilarity: 2.0,
48
+ scoringWeightImportance: 1.0,
49
+ scoringWeightRecency: 1.0,
50
+ rankingMinSimilarity: 0.3,
51
+ linkExpansionBeforeMMR: false,
52
+ repairDeltaThreshold: 0,
53
+ repairConfidenceFloor: 0,
54
+ },
55
+ quality: {
56
+ name: 'quality',
57
+ maxSearchResults: 12,
58
+ repairLoopEnabled: true,
59
+ adaptiveRetrievalEnabled: true,
60
+ hybridSearchEnabled: true,
61
+ repairLoopMinSimilarity: 0.78,
62
+ repairSkipSimilarity: 0.65,
63
+ rerankDepth: 12,
64
+ repairPrimaryWeight: 1,
65
+ repairRewriteWeight: 1.05,
66
+ lexicalWeight: 1.15,
67
+ mmrEnabled: true,
68
+ mmrLambda: 0.6,
69
+ linkExpansionEnabled: true,
70
+ linkExpansionMax: 4,
71
+ linkSimilarityThreshold: 0.45,
72
+ scoringWeightSimilarity: 2.0,
73
+ scoringWeightImportance: 1.0,
74
+ scoringWeightRecency: 1.0,
75
+ rankingMinSimilarity: 0.25,
76
+ linkExpansionBeforeMMR: false,
77
+ repairDeltaThreshold: 0,
78
+ repairConfidenceFloor: 0,
79
+ },
80
+ };
81
+ export function parseRetrievalProfile(value) {
82
+ if (!value)
83
+ return 'balanced';
84
+ if (value === 'safe' || value === 'balanced' || value === 'quality')
85
+ return value;
86
+ throw new Error('Invalid RETRIEVAL_PROFILE. Must be "safe", "balanced", or "quality"');
87
+ }
88
+ export function getRetrievalProfile(name) {
89
+ return PROFILES[name];
90
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Fire-and-forget side effects for completed searches.
3
+ *
4
+ * Centralizes the "after the search returns, what else happens" concerns
5
+ * so memory-search.ts can stay focused on orchestration. Currently:
6
+ * - touchMemory for each returned result (updates last-accessed time)
7
+ * - audit event emission when auditLoggingEnabled is on
8
+ *
9
+ * Historically inline in memory-search.ts; extracted in Phase 7 Item 4.
10
+ */
11
+ import type { SearchResult } from '../db/repository-types.js';
12
+ import type { MemoryServiceDeps } from './memory-service-types.js';
13
+ /** Run post-search side effects. Swallows per-memory touch failures. */
14
+ export declare function recordSearchSideEffects(deps: MemoryServiceDeps, outputMemories: SearchResult[], userId: string, query: string, sourceSite: string | undefined, asOf: string | undefined): void;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Fire-and-forget side effects for completed searches.
3
+ *
4
+ * Centralizes the "after the search returns, what else happens" concerns
5
+ * so memory-search.ts can stay focused on orchestration. Currently:
6
+ * - touchMemory for each returned result (updates last-accessed time)
7
+ * - audit event emission when auditLoggingEnabled is on
8
+ *
9
+ * Historically inline in memory-search.ts; extracted in Phase 7 Item 4.
10
+ */
11
+ import { emitAuditEvent } from './audit-events.js';
12
+ /** Run post-search side effects. Swallows per-memory touch failures. */
13
+ export function recordSearchSideEffects(deps, outputMemories, userId, query, sourceSite, asOf) {
14
+ if (!asOf) {
15
+ for (const memory of outputMemories) {
16
+ deps.stores.memory.touchMemory(memory.id).catch(() => { });
17
+ }
18
+ }
19
+ if (deps.config.auditLoggingEnabled) {
20
+ emitAuditEvent('memory:retrieve', userId, {
21
+ query: query.slice(0, 200),
22
+ resultCount: outputMemories.length,
23
+ topScore: outputMemories[0]?.score ?? 0,
24
+ }, { sourceSite });
25
+ }
26
+ }
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Retrieval observability trace logger.
3
+ *
4
+ * Captures structured per-query traces through the retrieval pipeline:
5
+ * query → candidates → repair → MMR → link expansion → final selection.
6
+ *
7
+ * Traces are persisted as JSON artifacts when RETRIEVAL_TRACE_ENABLED=true.
8
+ */
9
+ import type { SearchResult } from '../db/memory-repository.js';
10
+ import type { RelevanceFilterDecision } from './relevance-policy.js';
11
+ /** A snapshot of a single memory at a pipeline stage. */
12
+ interface TracedMemory {
13
+ id: string;
14
+ similarity: number;
15
+ semanticSimilarity: number;
16
+ score: number;
17
+ rankingScore: number;
18
+ relevance: number;
19
+ importance: number;
20
+ sourceSite: string;
21
+ namespace: string | null;
22
+ contentPreview: string;
23
+ tier?: string;
24
+ }
25
+ /** One stage in the retrieval pipeline. */
26
+ interface TraceStage {
27
+ name: string;
28
+ count: number;
29
+ memories: TracedMemory[];
30
+ meta?: Record<string, unknown>;
31
+ timestamp: number;
32
+ }
33
+ /** Full trace for one retrieval operation. */
34
+ export interface RetrievalTrace {
35
+ traceId: string;
36
+ query: string;
37
+ userId: string;
38
+ timestamp: string;
39
+ durationMs: number;
40
+ stages: TraceStage[];
41
+ finalResultCount: number;
42
+ retrieval?: RetrievalTraceSummary;
43
+ packaging?: PackagingTraceSummary;
44
+ assembly?: AssemblyTraceSummary;
45
+ }
46
+ export interface RetrievalTraceSummary {
47
+ candidateIds: string[];
48
+ candidateCount: number;
49
+ queryText: string;
50
+ skipRepair: boolean;
51
+ relevanceThreshold?: number | null;
52
+ relevanceFilterSource?: string;
53
+ relevanceFilterReason?: string;
54
+ filteredCandidateIds?: string[];
55
+ filterDecisions?: RelevanceFilterDecision[];
56
+ traceId?: string;
57
+ stageCount?: number;
58
+ stageNames?: string[];
59
+ }
60
+ export type PackagingType = 'subject-pack' | 'timeline-pack' | 'tiered';
61
+ export type PackagingEvidenceRole = 'primary' | 'supporting' | 'historical' | 'contextual';
62
+ export interface PackagingTraceSummary {
63
+ packageType: PackagingType;
64
+ includedIds: string[];
65
+ droppedIds: string[];
66
+ evidenceRoles: Record<string, PackagingEvidenceRole>;
67
+ episodeCount: number;
68
+ dateCount: number;
69
+ hasCurrentMarker: boolean;
70
+ hasConflictBlock: boolean;
71
+ tokenCost: number;
72
+ }
73
+ export interface AssemblyTraceSummary {
74
+ finalIds: string[];
75
+ finalTokenCost: number;
76
+ tokenBudget: number | null;
77
+ primaryEvidencePosition: number | null;
78
+ blocks: string[];
79
+ }
80
+ /**
81
+ * Accumulates trace stages during a single search operation.
82
+ */
83
+ export declare class TraceCollector {
84
+ private stages;
85
+ private retrieval?;
86
+ private packaging?;
87
+ private assembly?;
88
+ private startTime;
89
+ private traceId;
90
+ private query;
91
+ private userId;
92
+ private enabled;
93
+ constructor(query: string, userId: string);
94
+ /** Record a pipeline stage with its current result set and optional metadata. */
95
+ stage(name: string, results: SearchResult[], meta?: Record<string, unknown>): void;
96
+ /** Event-only stage (no memories, just metadata). */
97
+ event(name: string, meta?: Record<string, unknown>): void;
98
+ setRetrievalSummary(summary: RetrievalTraceSummary): void;
99
+ setPackagingSummary(summary: PackagingTraceSummary): void;
100
+ setAssemblySummary(summary: AssemblyTraceSummary): void;
101
+ getRetrievalSummary(): RetrievalTraceSummary | undefined;
102
+ getPackagingSummary(): PackagingTraceSummary | undefined;
103
+ getAssemblySummary(): AssemblyTraceSummary | undefined;
104
+ /** Persist the full trace to disk and optionally log to stdout. */
105
+ finalize(finalResults: SearchResult[]): string | null;
106
+ private persistTrace;
107
+ }
108
+ export {};