@remnic/core 10.0.0 → 10.0.2

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 (295) hide show
  1. package/dist/access-admin-ops-surface.js +46 -43
  2. package/dist/access-authorization-probe.js +47 -44
  3. package/dist/access-boundary.js +46 -43
  4. package/dist/access-cli.js +111 -108
  5. package/dist/access-cli.js.map +1 -1
  6. package/dist/access-extraction-force-flush.js +46 -43
  7. package/dist/access-http-briefing.js +47 -44
  8. package/dist/access-http-query.js +48 -45
  9. package/dist/access-http.js +66 -63
  10. package/dist/access-identity-continuity-surface.js +46 -43
  11. package/dist/access-lcm-surface.js +46 -43
  12. package/dist/access-mcp.js +55 -52
  13. package/dist/access-namespace-preflight.js +46 -43
  14. package/dist/access-observe-write-category.js +9 -9
  15. package/dist/access-observe-write-surface.js +46 -43
  16. package/dist/access-offline-manifest.js +6 -6
  17. package/dist/access-operations-batch.js +47 -44
  18. package/dist/access-operations.js +54 -51
  19. package/dist/access-recall-concurrency.js +46 -43
  20. package/dist/access-recall-response.js +46 -43
  21. package/dist/access-recall-surface.js +46 -43
  22. package/dist/access-schema.js +8 -8
  23. package/dist/access-service.js +46 -43
  24. package/dist/access-surface-catalog.js +48 -45
  25. package/dist/access-surface-catalog.js.map +1 -1
  26. package/dist/active-recall.js +18 -16
  27. package/dist/active-recall.js.map +1 -1
  28. package/dist/adapters/index.js +4 -4
  29. package/dist/adapters/registry.js +2 -2
  30. package/dist/briefing.js +12 -10
  31. package/dist/buffer.js +7 -5
  32. package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
  33. package/dist/causal-consolidation.js +13 -11
  34. package/dist/causal-consolidation.js.map +1 -1
  35. package/dist/{chunk-JWFTPRYD.js → chunk-2EZB2DL5.js} +2 -2
  36. package/dist/{chunk-J3ZJBX7I.js → chunk-2J3M2KV4.js} +2 -2
  37. package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
  38. package/dist/{chunk-SWXPR5SE.js → chunk-2SYRHFUG.js} +2 -2
  39. package/dist/{chunk-QKCGOECM.js → chunk-34G4U6HS.js} +2 -2
  40. package/dist/{chunk-QX3K3INR.js → chunk-36BUOTVN.js} +2 -2
  41. package/dist/{chunk-CNBGAFDY.js → chunk-3J54RR3A.js} +2 -2
  42. package/dist/{chunk-XLWMNDQR.js → chunk-4A2UMSNB.js} +7 -5
  43. package/dist/chunk-4A2UMSNB.js.map +1 -0
  44. package/dist/{chunk-OWV6LKNZ.js → chunk-4G2COUSD.js} +2 -2
  45. package/dist/{chunk-HWGFTTPS.js → chunk-5FLFPTDK.js} +2 -2
  46. package/dist/{chunk-WR66CTVU.js → chunk-7IGNDEUJ.js} +4 -4
  47. package/dist/chunk-7PZHH4KC.js +63 -0
  48. package/dist/chunk-7PZHH4KC.js.map +1 -0
  49. package/dist/{chunk-VO2BNAA2.js → chunk-A5N6ZEUW.js} +2 -2
  50. package/dist/{chunk-XQWKB6PY.js → chunk-AALVXJJ7.js} +2 -2
  51. package/dist/{chunk-KFHEZJQZ.js → chunk-BAREPCLY.js} +2 -2
  52. package/dist/{chunk-QAIVTLL2.js → chunk-BLHPADUX.js} +2 -2
  53. package/dist/{chunk-2TCNEJ36.js → chunk-BNMI3JBV.js} +3 -3
  54. package/dist/{chunk-QUNCLKHM.js → chunk-CAXMG4JI.js} +2 -2
  55. package/dist/{chunk-KV7LFOPF.js → chunk-CQBFEGLF.js} +2 -2
  56. package/dist/{chunk-KMN2JE4D.js → chunk-CVQWNACA.js} +2 -2
  57. package/dist/{chunk-VV2MVHCJ.js → chunk-DAVONFNK.js} +2 -2
  58. package/dist/{chunk-KYUVFCT2.js → chunk-DQQ4IM5L.js} +2 -2
  59. package/dist/{chunk-B454SHPU.js → chunk-E7FN5N5E.js} +2 -2
  60. package/dist/{chunk-CGBE3N7T.js → chunk-EB3RXN2L.js} +2 -2
  61. package/dist/{chunk-AWSP3WNM.js → chunk-EJJMDLVB.js} +2 -2
  62. package/dist/{chunk-A6WNTVA7.js → chunk-FNVSBUC3.js} +2 -2
  63. package/dist/{chunk-XTN54NML.js → chunk-G3T6YMBO.js} +4 -4
  64. package/dist/{chunk-BKVCTTEN.js → chunk-GUD6FYQG.js} +2 -2
  65. package/dist/{chunk-2MMBJE53.js → chunk-H5YACCE3.js} +7 -7
  66. package/dist/{chunk-JC7QQ2DJ.js → chunk-HRZZJ4XB.js} +2 -2
  67. package/dist/{chunk-LHDSCWDK.js → chunk-I2VQ7WBJ.js} +16 -16
  68. package/dist/{chunk-B3OFQP5Y.js → chunk-IB63OVUB.js} +24 -249
  69. package/dist/chunk-IB63OVUB.js.map +1 -0
  70. package/dist/chunk-IM2GO42H.js +312 -0
  71. package/dist/chunk-IM2GO42H.js.map +1 -0
  72. package/dist/{chunk-PRNR47DI.js → chunk-IR5LZCE6.js} +2 -2
  73. package/dist/{chunk-YI6XIFQV.js → chunk-J5CUQRST.js} +2 -2
  74. package/dist/{chunk-6WRHNA4I.js → chunk-JFDKPW54.js} +35 -35
  75. package/dist/{chunk-VYIBRCVW.js → chunk-JOBE47EJ.js} +2 -2
  76. package/dist/{chunk-SFDBLCZV.js → chunk-K4TWTUEY.js} +41 -41
  77. package/dist/{chunk-UHESJ6TQ.js → chunk-KEGUXZNY.js} +3 -3
  78. package/dist/{chunk-UHESJ6TQ.js.map → chunk-KEGUXZNY.js.map} +1 -1
  79. package/dist/{chunk-T6RQNV7E.js → chunk-KHOINMCN.js} +2 -2
  80. package/dist/{chunk-VDX2J7OX.js → chunk-KQAFEZQX.js} +2 -2
  81. package/dist/{chunk-E4XLFYHV.js → chunk-LHOIYLKH.js} +2 -2
  82. package/dist/chunk-LHOIYLKH.js.map +1 -0
  83. package/dist/{chunk-PQKZLBCJ.js → chunk-LMZV3H4W.js} +127 -6
  84. package/dist/chunk-LMZV3H4W.js.map +1 -0
  85. package/dist/{chunk-MZOQ26LH.js → chunk-LQGX5TCI.js} +2 -2
  86. package/dist/{chunk-TRN56SPQ.js → chunk-M2OPC4BD.js} +2 -2
  87. package/dist/{chunk-LXJZUNLX.js → chunk-NBK24POV.js} +2 -2
  88. package/dist/{chunk-7X7A7KVN.js → chunk-NLYOOGZ7.js} +2 -2
  89. package/dist/{chunk-G5I5ZT6O.js → chunk-OSDAF7HH.js} +2 -2
  90. package/dist/{chunk-EZ3F4YIN.js → chunk-OV7EYM6M.js} +6 -6
  91. package/dist/{chunk-AU43D3IT.js → chunk-P57VR7AI.js} +4 -4
  92. package/dist/{chunk-NT2Q6AHC.js → chunk-PCO3P7WJ.js} +2 -2
  93. package/dist/{chunk-73R4HOOK.js → chunk-PT6DQK5T.js} +3 -3
  94. package/dist/{chunk-O43AAJFQ.js → chunk-PTGPU4DC.js} +2 -2
  95. package/dist/{chunk-STQC2FYQ.js → chunk-PWVBVIOP.js} +6 -6
  96. package/dist/{chunk-TFA6HPOA.js → chunk-QCP75JGO.js} +5 -5
  97. package/dist/{chunk-SIGDETMB.js → chunk-R4NGLTUS.js} +2 -2
  98. package/dist/{chunk-S2GR3T7W.js → chunk-RNYVAQX2.js} +2 -2
  99. package/dist/{chunk-PZ2QQULY.js → chunk-RU744TNX.js} +8 -8
  100. package/dist/{chunk-2OFDC3AK.js → chunk-RVQVWDSN.js} +2 -2
  101. package/dist/{chunk-ZLQ37WJX.js → chunk-SIGAGKNE.js} +8 -2
  102. package/dist/{chunk-ZLQ37WJX.js.map → chunk-SIGAGKNE.js.map} +1 -1
  103. package/dist/{chunk-OFGTRDWX.js → chunk-SIYZDT2V.js} +3 -3
  104. package/dist/{chunk-PQ7EB5AD.js → chunk-SQPC6MUM.js} +3 -3
  105. package/dist/{chunk-5R4YPRAR.js → chunk-TGF43K66.js} +18 -18
  106. package/dist/chunk-TPSLVZHS.js +102 -0
  107. package/dist/chunk-TPSLVZHS.js.map +1 -0
  108. package/dist/{chunk-ZRUC7FD3.js → chunk-U4SG4HKQ.js} +2 -2
  109. package/dist/{chunk-ATFFWIKL.js → chunk-U6HWKOGD.js} +2 -2
  110. package/dist/{chunk-IOMLGJHG.js → chunk-UK5EH7AI.js} +2 -2
  111. package/dist/{chunk-DB6XFMOF.js → chunk-VC4J4UTI.js} +5 -5
  112. package/dist/{chunk-T32YYUT2.js → chunk-VQTPEL7O.js} +2 -2
  113. package/dist/{chunk-7YQR6XHY.js → chunk-W6K6BC3H.js} +57 -57
  114. package/dist/{chunk-FYX2LXIX.js → chunk-WI37MWRZ.js} +2 -2
  115. package/dist/{chunk-7NBUE5VY.js → chunk-WPMDNCGB.js} +2 -2
  116. package/dist/{chunk-GZ2KV2RO.js → chunk-WWLAKRMX.js} +4 -4
  117. package/dist/{chunk-EWWK65CI.js → chunk-WY4IV62O.js} +2 -2
  118. package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
  119. package/dist/{chunk-GQ6ZF4LD.js → chunk-XG4XXI66.js} +2 -2
  120. package/dist/{chunk-Z6EZCN6Z.js → chunk-Y7427SL7.js} +10 -10
  121. package/dist/{chunk-TXTRHF3B.js → chunk-YAPTJQI7.js} +2 -2
  122. package/dist/{chunk-JRDL3FGM.js → chunk-YFET6A4I.js} +3 -3
  123. package/dist/{chunk-ISX7GVZE.js → chunk-YRULQW5J.js} +4 -4
  124. package/dist/{chunk-VDVHIRCK.js → chunk-YVHNBOK2.js} +2 -2
  125. package/dist/cli.js +85 -82
  126. package/dist/coding/export-okf-codegraph.js +11 -9
  127. package/dist/coding/export-okf-codegraph.js.map +1 -1
  128. package/dist/compounding/engine.js +12 -10
  129. package/dist/config-qmd.js +1 -1
  130. package/dist/config.js +18 -16
  131. package/dist/connectors/codex-materialize-runner.js +12 -10
  132. package/dist/connectors/index.js +12 -10
  133. package/dist/convergence-refresh.js +14 -12
  134. package/dist/conversation-index/backend.js +2 -2
  135. package/dist/corpus-watermark.js +14 -12
  136. package/dist/deep-recall-http-glue.js +9 -9
  137. package/dist/deep-recall.js +2 -2
  138. package/dist/entity-retrieval.js +12 -10
  139. package/dist/external-wiki-access.js +47 -44
  140. package/dist/extraction.js +16 -14
  141. package/dist/harmonic-retrieval.d.ts.map +1 -1
  142. package/dist/harmonic-retrieval.js +91 -1
  143. package/dist/index.js +136 -133
  144. package/dist/lcm/engine.js +4 -4
  145. package/dist/lcm/index.js +10 -10
  146. package/dist/location/index.js +14 -12
  147. package/dist/maintenance/memory-governance.js +12 -10
  148. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +12 -10
  149. package/dist/maintenance/rebuild-memory-projection.d.ts.map +1 -1
  150. package/dist/maintenance/rebuild-memory-projection.js +13 -11
  151. package/dist/memory-browse-operations.js +47 -44
  152. package/dist/memory-browse.js +7 -5
  153. package/dist/memory-projection-batch.d.ts +20 -0
  154. package/dist/memory-projection-batch.d.ts.map +1 -0
  155. package/dist/memory-projection-batch.js +11 -0
  156. package/dist/memory-projection-batch.js.map +1 -0
  157. package/dist/namespaces/migrate.js +13 -11
  158. package/dist/namespaces/search.js +10 -8
  159. package/dist/namespaces/storage.js +12 -10
  160. package/dist/offline-sync-changeset-generations.js +3 -3
  161. package/dist/offline-sync-embedding-generation.js +2 -2
  162. package/dist/offline-sync-snapshot-stream.js +6 -6
  163. package/dist/offline-sync.js +5 -5
  164. package/dist/operator-doctor-corpus.js +15 -13
  165. package/dist/operator-toolkit.js +27 -25
  166. package/dist/orchestration/maintenance.js +20 -18
  167. package/dist/orchestrator.js +111 -108
  168. package/dist/qmd-daemon-session.d.ts +45 -0
  169. package/dist/qmd-daemon-session.d.ts.map +1 -0
  170. package/dist/qmd-daemon-session.js +12 -0
  171. package/dist/qmd-daemon-session.js.map +1 -0
  172. package/dist/qmd-mcp-cancel.d.ts +21 -0
  173. package/dist/qmd-mcp-cancel.d.ts.map +1 -0
  174. package/dist/qmd-mcp-cancel.js +11 -0
  175. package/dist/qmd-mcp-cancel.js.map +1 -0
  176. package/dist/qmd-preflight.d.ts +3 -1
  177. package/dist/qmd-preflight.d.ts.map +1 -1
  178. package/dist/qmd-preflight.js +3 -1
  179. package/dist/qmd.d.ts +5 -29
  180. package/dist/qmd.d.ts.map +1 -1
  181. package/dist/qmd.js +6 -2
  182. package/dist/recall-navigation-operations.js +47 -44
  183. package/dist/recall-navigation.js +46 -43
  184. package/dist/recall-state-view-admission.js +7 -5
  185. package/dist/recall-why-service.js +7 -5
  186. package/dist/resume-bundles.js +19 -17
  187. package/dist/search/factory.js +9 -7
  188. package/dist/search/index.js +13 -11
  189. package/dist/semantic-consolidation.js +13 -11
  190. package/dist/semantic-rule-promotion.js +12 -10
  191. package/dist/semantic-rule-verifier.js +12 -10
  192. package/dist/source-agent-qualifier.js +15 -13
  193. package/dist/standup/build.js +12 -10
  194. package/dist/storage.d.ts +1 -1
  195. package/dist/storage.d.ts.map +1 -1
  196. package/dist/storage.js +11 -9
  197. package/dist/support-passport/index.js +49 -46
  198. package/dist/transfer/backup.js +2 -2
  199. package/dist/transfer/capsule-export.js +2 -2
  200. package/dist/transfer/capsule-import.js +2 -2
  201. package/dist/transfer/export-okf.js +12 -10
  202. package/dist/verified-recall.js +12 -10
  203. package/dist/who-knows-cli.js +13 -11
  204. package/dist/who-knows.js +12 -10
  205. package/package.json +2 -2
  206. package/src/config-qmd.ts +2 -2
  207. package/src/harmonic-retrieval-index.test.ts +387 -0
  208. package/src/harmonic-retrieval.ts +181 -15
  209. package/src/maintenance/rebuild-memory-projection.ts +3 -0
  210. package/src/memory-projection-batch.ts +82 -0
  211. package/src/qmd-daemon-session.ts +369 -0
  212. package/src/qmd-mcp-cancel.test.ts +408 -0
  213. package/src/qmd-mcp-cancel.ts +130 -0
  214. package/src/qmd-preflight.ts +10 -1
  215. package/src/qmd-rank-compare.test.ts +100 -0
  216. package/src/qmd.test.ts +16 -1
  217. package/src/qmd.ts +18 -297
  218. package/src/storage.ts +1 -1
  219. package/dist/chunk-B3OFQP5Y.js.map +0 -1
  220. package/dist/chunk-E4XLFYHV.js.map +0 -1
  221. package/dist/chunk-PQKZLBCJ.js.map +0 -1
  222. package/dist/chunk-XLWMNDQR.js.map +0 -1
  223. /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  224. /package/dist/{chunk-JWFTPRYD.js.map → chunk-2EZB2DL5.js.map} +0 -0
  225. /package/dist/{chunk-J3ZJBX7I.js.map → chunk-2J3M2KV4.js.map} +0 -0
  226. /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
  227. /package/dist/{chunk-SWXPR5SE.js.map → chunk-2SYRHFUG.js.map} +0 -0
  228. /package/dist/{chunk-QKCGOECM.js.map → chunk-34G4U6HS.js.map} +0 -0
  229. /package/dist/{chunk-QX3K3INR.js.map → chunk-36BUOTVN.js.map} +0 -0
  230. /package/dist/{chunk-CNBGAFDY.js.map → chunk-3J54RR3A.js.map} +0 -0
  231. /package/dist/{chunk-OWV6LKNZ.js.map → chunk-4G2COUSD.js.map} +0 -0
  232. /package/dist/{chunk-HWGFTTPS.js.map → chunk-5FLFPTDK.js.map} +0 -0
  233. /package/dist/{chunk-WR66CTVU.js.map → chunk-7IGNDEUJ.js.map} +0 -0
  234. /package/dist/{chunk-VO2BNAA2.js.map → chunk-A5N6ZEUW.js.map} +0 -0
  235. /package/dist/{chunk-XQWKB6PY.js.map → chunk-AALVXJJ7.js.map} +0 -0
  236. /package/dist/{chunk-KFHEZJQZ.js.map → chunk-BAREPCLY.js.map} +0 -0
  237. /package/dist/{chunk-QAIVTLL2.js.map → chunk-BLHPADUX.js.map} +0 -0
  238. /package/dist/{chunk-2TCNEJ36.js.map → chunk-BNMI3JBV.js.map} +0 -0
  239. /package/dist/{chunk-QUNCLKHM.js.map → chunk-CAXMG4JI.js.map} +0 -0
  240. /package/dist/{chunk-KV7LFOPF.js.map → chunk-CQBFEGLF.js.map} +0 -0
  241. /package/dist/{chunk-KMN2JE4D.js.map → chunk-CVQWNACA.js.map} +0 -0
  242. /package/dist/{chunk-VV2MVHCJ.js.map → chunk-DAVONFNK.js.map} +0 -0
  243. /package/dist/{chunk-KYUVFCT2.js.map → chunk-DQQ4IM5L.js.map} +0 -0
  244. /package/dist/{chunk-B454SHPU.js.map → chunk-E7FN5N5E.js.map} +0 -0
  245. /package/dist/{chunk-CGBE3N7T.js.map → chunk-EB3RXN2L.js.map} +0 -0
  246. /package/dist/{chunk-AWSP3WNM.js.map → chunk-EJJMDLVB.js.map} +0 -0
  247. /package/dist/{chunk-A6WNTVA7.js.map → chunk-FNVSBUC3.js.map} +0 -0
  248. /package/dist/{chunk-XTN54NML.js.map → chunk-G3T6YMBO.js.map} +0 -0
  249. /package/dist/{chunk-BKVCTTEN.js.map → chunk-GUD6FYQG.js.map} +0 -0
  250. /package/dist/{chunk-2MMBJE53.js.map → chunk-H5YACCE3.js.map} +0 -0
  251. /package/dist/{chunk-JC7QQ2DJ.js.map → chunk-HRZZJ4XB.js.map} +0 -0
  252. /package/dist/{chunk-LHDSCWDK.js.map → chunk-I2VQ7WBJ.js.map} +0 -0
  253. /package/dist/{chunk-PRNR47DI.js.map → chunk-IR5LZCE6.js.map} +0 -0
  254. /package/dist/{chunk-YI6XIFQV.js.map → chunk-J5CUQRST.js.map} +0 -0
  255. /package/dist/{chunk-6WRHNA4I.js.map → chunk-JFDKPW54.js.map} +0 -0
  256. /package/dist/{chunk-VYIBRCVW.js.map → chunk-JOBE47EJ.js.map} +0 -0
  257. /package/dist/{chunk-SFDBLCZV.js.map → chunk-K4TWTUEY.js.map} +0 -0
  258. /package/dist/{chunk-T6RQNV7E.js.map → chunk-KHOINMCN.js.map} +0 -0
  259. /package/dist/{chunk-VDX2J7OX.js.map → chunk-KQAFEZQX.js.map} +0 -0
  260. /package/dist/{chunk-MZOQ26LH.js.map → chunk-LQGX5TCI.js.map} +0 -0
  261. /package/dist/{chunk-TRN56SPQ.js.map → chunk-M2OPC4BD.js.map} +0 -0
  262. /package/dist/{chunk-LXJZUNLX.js.map → chunk-NBK24POV.js.map} +0 -0
  263. /package/dist/{chunk-7X7A7KVN.js.map → chunk-NLYOOGZ7.js.map} +0 -0
  264. /package/dist/{chunk-G5I5ZT6O.js.map → chunk-OSDAF7HH.js.map} +0 -0
  265. /package/dist/{chunk-EZ3F4YIN.js.map → chunk-OV7EYM6M.js.map} +0 -0
  266. /package/dist/{chunk-AU43D3IT.js.map → chunk-P57VR7AI.js.map} +0 -0
  267. /package/dist/{chunk-NT2Q6AHC.js.map → chunk-PCO3P7WJ.js.map} +0 -0
  268. /package/dist/{chunk-73R4HOOK.js.map → chunk-PT6DQK5T.js.map} +0 -0
  269. /package/dist/{chunk-O43AAJFQ.js.map → chunk-PTGPU4DC.js.map} +0 -0
  270. /package/dist/{chunk-STQC2FYQ.js.map → chunk-PWVBVIOP.js.map} +0 -0
  271. /package/dist/{chunk-TFA6HPOA.js.map → chunk-QCP75JGO.js.map} +0 -0
  272. /package/dist/{chunk-SIGDETMB.js.map → chunk-R4NGLTUS.js.map} +0 -0
  273. /package/dist/{chunk-S2GR3T7W.js.map → chunk-RNYVAQX2.js.map} +0 -0
  274. /package/dist/{chunk-PZ2QQULY.js.map → chunk-RU744TNX.js.map} +0 -0
  275. /package/dist/{chunk-2OFDC3AK.js.map → chunk-RVQVWDSN.js.map} +0 -0
  276. /package/dist/{chunk-OFGTRDWX.js.map → chunk-SIYZDT2V.js.map} +0 -0
  277. /package/dist/{chunk-PQ7EB5AD.js.map → chunk-SQPC6MUM.js.map} +0 -0
  278. /package/dist/{chunk-5R4YPRAR.js.map → chunk-TGF43K66.js.map} +0 -0
  279. /package/dist/{chunk-ZRUC7FD3.js.map → chunk-U4SG4HKQ.js.map} +0 -0
  280. /package/dist/{chunk-ATFFWIKL.js.map → chunk-U6HWKOGD.js.map} +0 -0
  281. /package/dist/{chunk-IOMLGJHG.js.map → chunk-UK5EH7AI.js.map} +0 -0
  282. /package/dist/{chunk-DB6XFMOF.js.map → chunk-VC4J4UTI.js.map} +0 -0
  283. /package/dist/{chunk-T32YYUT2.js.map → chunk-VQTPEL7O.js.map} +0 -0
  284. /package/dist/{chunk-7YQR6XHY.js.map → chunk-W6K6BC3H.js.map} +0 -0
  285. /package/dist/{chunk-FYX2LXIX.js.map → chunk-WI37MWRZ.js.map} +0 -0
  286. /package/dist/{chunk-7NBUE5VY.js.map → chunk-WPMDNCGB.js.map} +0 -0
  287. /package/dist/{chunk-GZ2KV2RO.js.map → chunk-WWLAKRMX.js.map} +0 -0
  288. /package/dist/{chunk-EWWK65CI.js.map → chunk-WY4IV62O.js.map} +0 -0
  289. /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
  290. /package/dist/{chunk-GQ6ZF4LD.js.map → chunk-XG4XXI66.js.map} +0 -0
  291. /package/dist/{chunk-Z6EZCN6Z.js.map → chunk-Y7427SL7.js.map} +0 -0
  292. /package/dist/{chunk-TXTRHF3B.js.map → chunk-YAPTJQI7.js.map} +0 -0
  293. /package/dist/{chunk-JRDL3FGM.js.map → chunk-YFET6A4I.js.map} +0 -0
  294. /package/dist/{chunk-ISX7GVZE.js.map → chunk-YRULQW5J.js.map} +0 -0
  295. /package/dist/{chunk-VDVHIRCK.js.map → chunk-YVHNBOK2.js.map} +0 -0
@@ -1,7 +1,13 @@
1
+ import {
2
+ readProjectedMemoryStates
3
+ } from "./chunk-7PZHH4KC.js";
1
4
  import {
2
5
  resolveCueAnchorStoreDir,
3
6
  validateCueAnchor
4
7
  } from "./chunk-BMWN7B3Y.js";
8
+ import {
9
+ StorageManager
10
+ } from "./chunk-LHOIYLKH.js";
5
11
  import {
6
12
  isValidityExpiredNow
7
13
  } from "./chunk-6CIAGZ6X.js";
@@ -31,19 +37,113 @@ import {
31
37
  compareDeterministicStrings
32
38
  } from "./chunk-G73MCJKL.js";
33
39
  import {
40
+ assertSafePathSegment,
34
41
  isRecord
35
42
  } from "./chunk-A2IYSXDQ.js";
36
43
  import {
37
44
  listJsonFilesStrict,
38
45
  readJsonFile
39
46
  } from "./chunk-B6O2YLUR.js";
47
+ import {
48
+ isPathInsideStorageRoot
49
+ } from "./chunk-FF4KLI5W.js";
50
+ import {
51
+ SecureStoreLockedError
52
+ } from "./chunk-MAAL6OZV.js";
53
+ import {
54
+ RECALL_FALLBACK_DIRS
55
+ } from "./chunk-VS2IYZRU.js";
40
56
 
41
57
  // src/harmonic-retrieval.ts
42
58
  import path from "path";
43
- async function readSourceMemories(options) {
59
+ import { existsSync } from "fs";
60
+ import { realpath } from "fs/promises";
61
+ async function readMemoryFile(storage, rootReal, filePath, abortSignal) {
62
+ throwIfAborted(abortSignal, "harmonic retrieval aborted");
63
+ if (!existsSync(filePath)) return null;
64
+ try {
65
+ if (rootReal !== null && !isPathInsideStorageRoot(rootReal, await realpath(filePath))) return null;
66
+ return await storage.readMemoryByPath(filePath);
67
+ } catch (err) {
68
+ throwIfAborted(abortSignal, "harmonic retrieval aborted");
69
+ if (err instanceof SecureStoreLockedError) throw err;
70
+ return null;
71
+ }
72
+ }
73
+ var INDEX_MAX_AGE_MS = 7 * 864e5;
74
+ var DAY_MS = 864e5;
75
+ function utcDaysSince(rebuiltMs, nowMs) {
76
+ const days = [];
77
+ for (let day = Math.floor((rebuiltMs - DAY_MS) / DAY_MS) * DAY_MS; day <= nowMs; day += DAY_MS) {
78
+ days.push(new Date(day).toISOString().slice(0, 10));
79
+ }
80
+ return days;
81
+ }
82
+ var ABSENT_SOURCE_TTL_MS = 10 * 6e4;
83
+ var ABSENT_SOURCE_MAX_ENTRIES = 4096;
84
+ var absentSourceIds = /* @__PURE__ */ new Map();
85
+ function unprojectedCandidatePaths(memoryDir, id, days) {
86
+ const paths = [];
87
+ for (const root of [memoryDir, path.join(memoryDir, "cold")]) {
88
+ for (const dir of RECALL_FALLBACK_DIRS) {
89
+ paths.push(path.join(root, dir, `${id}.md`));
90
+ for (const day of days) paths.push(path.join(root, dir, day, `${id}.md`));
91
+ }
92
+ }
93
+ return paths;
94
+ }
95
+ async function readIndexedSourceMemories(options) {
96
+ const batch = readProjectedMemoryStates(options.memoryDir, options.sourceMemoryIds);
97
+ const rebuiltMs = Date.parse(batch?.rebuiltAt ?? "");
98
+ if (!batch?.complete || !Number.isFinite(rebuiltMs) || options.nowMs - rebuiltMs > INDEX_MAX_AGE_MS) return null;
99
+ const rootReal = await realpath(options.memoryDir).catch(() => null);
100
+ if (rootReal === null) return null;
101
+ const storage = new StorageManager(options.memoryDir);
102
+ const days = utcDaysSince(rebuiltMs, options.nowMs);
103
+ const sourceMemories = /* @__PURE__ */ new Map();
104
+ const pending = [];
105
+ for (const id of options.sourceMemoryIds) {
106
+ const state = batch.states.get(id);
107
+ let safeId = true;
108
+ try {
109
+ assertSafePathSegment(id, "sourceMemoryId");
110
+ } catch {
111
+ safeId = false;
112
+ }
113
+ if (!state && !safeId) return null;
114
+ const candidates = state ? [state.path, path.join(options.memoryDir, "cold", state.pathRel)] : unprojectedCandidatePaths(options.memoryDir, id, days);
115
+ let found = false;
116
+ for (const candidate of candidates) {
117
+ const memory = await readMemoryFile(storage, rootReal, candidate, options.abortSignal);
118
+ if (memory?.frontmatter.id !== id) continue;
119
+ sourceMemories.set(id, memory);
120
+ found = true;
121
+ break;
122
+ }
123
+ const absentKey = `${options.memoryDir}\0${id}`;
124
+ if (!found && safeId && (absentSourceIds.get(absentKey) ?? 0) <= options.nowMs) pending.push(id);
125
+ }
126
+ if (pending.length === 0) return sourceMemories;
127
+ const wanted = new Set(pending);
128
+ const walked = [
129
+ ...await storage.collectActiveMemoryPaths({ abortSignal: options.abortSignal }),
130
+ ...await storage.collectColdMemoryPaths({ abortSignal: options.abortSignal })
131
+ ];
132
+ for (const filePath of walked) {
133
+ throwIfAborted(options.abortSignal, "harmonic retrieval aborted");
134
+ if (!wanted.has(path.basename(filePath, ".md"))) continue;
135
+ const memory = await readMemoryFile(storage, null, filePath, options.abortSignal);
136
+ if (memory && wanted.has(memory.frontmatter.id)) sourceMemories.set(memory.frontmatter.id, memory);
137
+ }
138
+ if (absentSourceIds.size > ABSENT_SOURCE_MAX_ENTRIES) absentSourceIds.clear();
139
+ for (const id of pending) {
140
+ if (!sourceMemories.has(id)) absentSourceIds.set(`${options.memoryDir}\0${id}`, options.nowMs + ABSENT_SOURCE_TTL_MS);
141
+ }
142
+ return sourceMemories;
143
+ }
144
+ async function readCorpusSourceMemories(options) {
44
145
  const sourceMemories = /* @__PURE__ */ new Map();
45
146
  try {
46
- const { StorageManager } = await import("./storage.js");
47
147
  const storage = new StorageManager(options.memoryDir);
48
148
  const [hotMemories, coldMemories] = await Promise.all([
49
149
  storage.readAllMemories({ abortSignal: options.abortSignal }),
@@ -53,12 +153,28 @@ async function readSourceMemories(options) {
53
153
  throwIfAborted(options.abortSignal, "harmonic retrieval aborted");
54
154
  sourceMemories.set(memory.frontmatter.id, memory);
55
155
  }
56
- } catch {
156
+ } catch (err) {
57
157
  throwIfAborted(options.abortSignal, "harmonic retrieval aborted");
158
+ if (err instanceof SecureStoreLockedError) return /* @__PURE__ */ new Map();
58
159
  sourceMemories.clear();
59
160
  }
60
161
  return sourceMemories;
61
162
  }
163
+ async function readSourceMemories(options) {
164
+ try {
165
+ const indexed = await readIndexedSourceMemories({
166
+ memoryDir: options.memoryDir,
167
+ abortSignal: options.abortSignal,
168
+ sourceMemoryIds: options.sourceMemoryIds,
169
+ nowMs: options.nowMs ?? Date.now()
170
+ });
171
+ if (indexed) return indexed;
172
+ } catch (err) {
173
+ throwIfAborted(options.abortSignal, "harmonic retrieval aborted");
174
+ if (err instanceof SecureStoreLockedError) return /* @__PURE__ */ new Map();
175
+ }
176
+ return readCorpusSourceMemories(options);
177
+ }
62
178
  function parseSourceMemoryInsertedAt(node) {
63
179
  const insertedAtById = /* @__PURE__ */ new Map();
64
180
  const insertedAtRaw = node.metadata?.[HARMONIC_SOURCE_MEMORY_INSERTED_AT_KEY];
@@ -214,8 +330,13 @@ async function readCueAnchors(options) {
214
330
  async function readProjectedHarmonicGraph(options) {
215
331
  throwIfAborted(options.abortSignal, "harmonic retrieval aborted");
216
332
  const nodes = await readAbstractionNodes(options);
217
- const sourceBacked = nodes.some((node) => (node.sourceMemoryIds?.length ?? 0) > 0);
218
- const sourceMemories = sourceBacked ? await readSourceMemories(options) : /* @__PURE__ */ new Map();
333
+ const sourceMemoryIds = [...new Set(nodes.flatMap((node) => node.sourceMemoryIds ?? []))];
334
+ const sourceMemories = sourceMemoryIds.length > 0 ? await readSourceMemories({
335
+ memoryDir: options.memoryDir,
336
+ abortSignal: options.abortSignal,
337
+ sourceMemoryIds,
338
+ nowMs: options.nowMs
339
+ }) : /* @__PURE__ */ new Map();
219
340
  const nowMs = options.nowMs ?? Date.now();
220
341
  const legacyCompatibleNodeRefs = /* @__PURE__ */ new Set();
221
342
  const projectedNodes = nodes.flatMap((node) => {
@@ -318,4 +439,4 @@ export {
318
439
  readProjectedHarmonicGraph,
319
440
  searchHarmonicRetrieval
320
441
  };
321
- //# sourceMappingURL=chunk-PQKZLBCJ.js.map
442
+ //# sourceMappingURL=chunk-LMZV3H4W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/harmonic-retrieval.ts"],"sourcesContent":["import path from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { realpath } from \"node:fs/promises\";\nimport { listJsonFilesStrict, readJsonFile } from \"./json-store.js\";\nimport { throwIfAborted } from \"./abort-error.js\";\nimport { inferMemoryStatus, toMemoryPathRel } from \"./memory-lifecycle-ledger-utils.js\";\n import {\n HARMONIC_SOURCE_MEMORY_INSERTED_AT_KEY,\n resolveAbstractionNodeStoreDir,\n validateAbstractionNode,\n type AbstractionNode,\n } from \"./abstraction-nodes.js\";\nimport { resolveCueAnchorStoreDir, validateCueAnchor, type CueAnchor, type CueAnchorType } from \"./cue-anchors.js\";\nimport { compareDeterministicStrings } from \"./deterministic-order.js\";\nimport { countRecallTokenOverlap, normalizeRecallTokens } from \"./recall-tokenization.js\";\nimport { stripAttributesSuffix } from \"./structured-attributes.js\";\nimport { isValidityExpiredNow } from \"./temporal-validity.js\";\nimport { assertSafePathSegment, isRecord } from \"./store-contract.js\";\nimport { isSupportPassportPrivateMemory } from \"./support-passport/card-projection.js\";\nimport type { MemoryFile } from \"./types.js\";\nimport { readProjectedMemoryStates } from \"./memory-projection-batch.js\";\nimport { SecureStoreLockedError } from \"./secure-store/secure-fs.js\";\nimport { StorageManager } from \"./storage.js\";\nimport { RECALL_FALLBACK_DIRS } from \"./utils/category-dir.js\";\nimport { isPathInsideStorageRoot } from \"./storage-paths.js\";\n\n\ntype SourceMemoryMap = Map<string, MemoryFile>;\n\n// `rootReal` set: a direct probe, which skips the corpus walk's symlink\n// hardening, so the resolved file must stay inside the memory root. Null: the\n// path came from the contained corpus walk and is already trusted.\nasync function readMemoryFile(\n storage: StorageManager,\n rootReal: string | null,\n filePath: string,\n abortSignal?: AbortSignal,\n): Promise<MemoryFile | null> {\n throwIfAborted(abortSignal, \"harmonic retrieval aborted\");\n if (!existsSync(filePath)) return null;\n try {\n if (rootReal !== null && !isPathInsideStorageRoot(rootReal, await realpath(filePath))) return null;\n return await storage.readMemoryByPath(filePath);\n } catch (err) {\n throwIfAborted(abortSignal, \"harmonic retrieval aborted\");\n if (err instanceof SecureStoreLockedError) throw err;\n return null;\n }\n}\n\n// An index older than this is treated as unusable: the date window needed to\n// cover \"created since the last rebuild\" would stop being cheap.\nconst INDEX_MAX_AGE_MS = 7 * 86_400_000;\nconst DAY_MS = 86_400_000;\n\nfunction utcDaysSince(rebuiltMs: number, nowMs: number): string[] {\n const days: string[] = [];\n for (let day = Math.floor((rebuiltMs - DAY_MS) / DAY_MS) * DAY_MS; day <= nowMs; day += DAY_MS) {\n days.push(new Date(day).toISOString().slice(0, 10));\n }\n return days;\n}\n\n// Source ids confirmed absent by a corpus path walk. A node only references a\n// source after the source file exists, so a confirmed absence stays true unless\n// the file is restored later; the short TTL bounds that. Without this, one\n// dangling id (a hard-deleted fact) would force a walk on every recall.\nconst ABSENT_SOURCE_TTL_MS = 10 * 60_000;\nconst ABSENT_SOURCE_MAX_ENTRIES = 4096;\nconst absentSourceIds = new Map<string, number>(); // `${memoryDir}\\0${id}` -> expiry ms\n\n// Memories the projection has no row for were written after its last rebuild, so\n// their dated directory is normally one of `days`. Hot and cold tiers are probed\n// by exact path. Only recall-corpus categories are probed: `questions/` is a queue\n// and `artifacts/` is outside the recall surface, so neither can be a source.\nfunction unprojectedCandidatePaths(memoryDir: string, id: string, days: string[]): string[] {\n const paths: string[] = [];\n for (const root of [memoryDir, path.join(memoryDir, \"cold\")]) {\n for (const dir of RECALL_FALLBACK_DIRS) {\n paths.push(path.join(root, dir, `${id}.md`));\n for (const day of days) paths.push(path.join(root, dir, day, `${id}.md`));\n }\n }\n return paths;\n}\n\n/**\n * Resolve only the source ids the abstraction nodes reference. Returns null when\n * the projection is absent, unreadable, too old, or not known to cover every\n * active memory (a scoped or pre-`complete` rebuild), so the caller keeps the\n * full-corpus scan. Every file is read from disk, so status, tags and validity\n * are current; the index only says where to look. An id the cheap probes cannot\n * place (an import filed under an old date, a tier root outside the memory dir)\n * is looked up by one contained path-only walk, never a frontmatter parse of the\n * corpus.\n */\nasync function readIndexedSourceMemories(options: {\n memoryDir: string;\n abortSignal?: AbortSignal;\n sourceMemoryIds: string[];\n nowMs: number;\n}): Promise<SourceMemoryMap | null> {\n // The ids go to SQL as bound parameters, so any id the projection holds is safe to look up.\n const batch = readProjectedMemoryStates(options.memoryDir, options.sourceMemoryIds);\n const rebuiltMs = Date.parse(batch?.rebuiltAt ?? \"\");\n if (!batch?.complete || !Number.isFinite(rebuiltMs) || options.nowMs - rebuiltMs > INDEX_MAX_AGE_MS) return null;\n const rootReal = await realpath(options.memoryDir).catch(() => null);\n if (rootReal === null) return null;\n\n const storage = new StorageManager(options.memoryDir);\n const days = utcDaysSince(rebuiltMs, options.nowMs);\n const sourceMemories: SourceMemoryMap = new Map();\n const pending: string[] = [];\n for (const id of options.sourceMemoryIds) {\n const state = batch.states.get(id);\n // An id is only ever joined into a path when it is a single safe segment.\n let safeId = true;\n try {\n assertSafePathSegment(id, \"sourceMemoryId\");\n } catch {\n safeId = false;\n }\n // An unprojected id that is not a single path segment cannot be probed or\n // matched by filename, and the scan keys sources by frontmatter id, so only\n // the scan can place it. Rare (legacy/imported ids); worst case is the old cost.\n if (!state && !safeId) return null;\n // state.path was containment-checked by the projection reader.\n const candidates = state\n ? [state.path, path.join(options.memoryDir, \"cold\", state.pathRel)]\n : unprojectedCandidatePaths(options.memoryDir, id, days);\n let found = false;\n for (const candidate of candidates) {\n const memory = await readMemoryFile(storage, rootReal, candidate, options.abortSignal);\n if (memory?.frontmatter.id !== id) continue;\n sourceMemories.set(id, memory);\n found = true;\n break;\n }\n const absentKey = `${options.memoryDir}\\0${id}`;\n if (!found && safeId && (absentSourceIds.get(absentKey) ?? 0) <= options.nowMs) pending.push(id);\n }\n if (pending.length === 0) return sourceMemories;\n\n const wanted = new Set(pending);\n const walked = [\n ...(await storage.collectActiveMemoryPaths({ abortSignal: options.abortSignal })),\n ...(await storage.collectColdMemoryPaths({ abortSignal: options.abortSignal })),\n ];\n for (const filePath of walked) {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n if (!wanted.has(path.basename(filePath, \".md\"))) continue;\n const memory = await readMemoryFile(storage, null, filePath, options.abortSignal);\n if (memory && wanted.has(memory.frontmatter.id)) sourceMemories.set(memory.frontmatter.id, memory);\n }\n if (absentSourceIds.size > ABSENT_SOURCE_MAX_ENTRIES) absentSourceIds.clear();\n for (const id of pending) {\n if (!sourceMemories.has(id)) absentSourceIds.set(`${options.memoryDir}\\0${id}`, options.nowMs + ABSENT_SOURCE_TTL_MS);\n }\n return sourceMemories;\n}\n\nasync function readCorpusSourceMemories(options: {\n memoryDir: string;\n abortSignal?: AbortSignal;\n}): Promise<SourceMemoryMap> {\n const sourceMemories: SourceMemoryMap = new Map();\n try {\n const storage = new StorageManager(options.memoryDir);\n const [hotMemories, coldMemories] = await Promise.all([\n storage.readAllMemories({ abortSignal: options.abortSignal }),\n storage.readAllColdMemories(),\n ]);\n for (const memory of [...hotMemories, ...coldMemories]) {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n sourceMemories.set(memory.frontmatter.id, memory);\n }\n } catch (err) {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n if (err instanceof SecureStoreLockedError) return new Map();\n // Source validation fails closed when the authorized memory directory is\n // unreadable. Source-less nodes remain eligible for retrieval.\n sourceMemories.clear();\n }\n return sourceMemories;\n}\n\nasync function readSourceMemories(options: {\n memoryDir: string;\n abortSignal?: AbortSignal;\n sourceMemoryIds: string[];\n nowMs?: number;\n}): Promise<SourceMemoryMap> {\n try {\n const indexed = await readIndexedSourceMemories({\n memoryDir: options.memoryDir,\n abortSignal: options.abortSignal,\n sourceMemoryIds: options.sourceMemoryIds,\n nowMs: options.nowMs ?? Date.now(),\n });\n if (indexed) return indexed;\n } catch (err) {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n if (err instanceof SecureStoreLockedError) return new Map();\n }\n return readCorpusSourceMemories(options);\n}\n\nfunction parseSourceMemoryInsertedAt(node: AbstractionNode): Map<string, string> {\n const insertedAtById = new Map<string, string>();\n const insertedAtRaw = node.metadata?.[HARMONIC_SOURCE_MEMORY_INSERTED_AT_KEY];\n if (!insertedAtRaw) return insertedAtById;\n try {\n const parsed = JSON.parse(insertedAtRaw) as unknown;\n if (!isRecord(parsed)) return insertedAtById;\n for (const [memoryId, value] of Object.entries(parsed)) {\n if (typeof value === \"string\") insertedAtById.set(memoryId, value);\n }\n } catch {\n // Malformed insertion metadata leaves ordering on the recordedAt fallback.\n }\n return insertedAtById;\n}\n\nfunction projectSourceBackedNode(\n node: AbstractionNode,\n sourceMemories: SourceMemoryMap,\n memoryDir: string,\n temporalExpiredInInjection: boolean,\n nowMs: number\n): AbstractionNode | null {\n const sourceMemoryIds = node.sourceMemoryIds ?? [];\n if (sourceMemoryIds.length === 0) return node;\n\n const activeSourceMemoryIds = sourceMemoryIds.filter((memoryId) => {\n const memory = sourceMemories.get(memoryId);\n return (\n memory !== undefined &&\n // #2332: a private support-passport record leaves the eligible set the\n // same way a rejected one does — a node title or anchor attribution\n // rebuilt from it would leak governed metadata into the deep-recall\n // frontier (and every other graph reader) before any content check runs.\n !isSupportPassportPrivateMemory(memory) &&\n inferMemoryStatus(memory.frontmatter, toMemoryPathRel(memoryDir, memory.path)) === \"active\" &&\n (temporalExpiredInInjection || !isValidityExpiredNow(memory.frontmatter, nowMs))\n );\n });\n if (activeSourceMemoryIds.length === 0) return null;\n\n // Newest-first source order keeps the projected title and summary on the most\n // recently inserted facts. Equal or missing timestamps fall back to ascending\n // id order, which matches the stored sourceMemoryIds order.\n const insertedAtById = parseSourceMemoryInsertedAt(node);\n const insertedAtMs = (memoryId: string): number => {\n const parsedMs = Date.parse(insertedAtById.get(memoryId) ?? \"\");\n return Number.isFinite(parsedMs) ? parsedMs : Date.parse(node.recordedAt);\n };\n activeSourceMemoryIds.sort(\n (left, right) =>\n insertedAtMs(right) - insertedAtMs(left) || compareDeterministicStrings(left, right)\n );\n\n const activeMemories = activeSourceMemoryIds.flatMap((memoryId) => {\n const memory = sourceMemories.get(memoryId);\n return memory ? [memory] : [];\n });\n const activeContents = activeMemories.map((memory) =>\n memory.frontmatter.structuredAttributes ? stripAttributesSuffix(memory.content) : memory.content\n );\n let metadata: Record<string, string> | undefined;\n const activeInsertedAt = activeSourceMemoryIds.flatMap((memoryId) => {\n const value = insertedAtById.get(memoryId);\n return typeof value === \"string\" ? [[memoryId, value] as const] : [];\n });\n if (activeInsertedAt.length > 0) {\n metadata = {\n [HARMONIC_SOURCE_MEMORY_INSERTED_AT_KEY]: JSON.stringify(Object.fromEntries(activeInsertedAt)),\n };\n }\n\n return {\n ...node,\n sourceMemoryIds: activeSourceMemoryIds,\n title: activeContents[0]?.slice(0, 80) ?? node.title,\n summary: activeContents.slice(0, 3).join(\"; \").slice(0, 400),\n tags: [...new Set(activeMemories.flatMap((memory) => memory.frontmatter.tags))].sort(compareDeterministicStrings),\n entityRefs: [\n ...new Set(\n activeMemories.flatMap((memory) =>\n typeof memory.frontmatter.entityRef === \"string\" ? [memory.frontmatter.entityRef] : []\n )\n ),\n ].sort(compareDeterministicStrings),\n metadata,\n };\n}\n\nfunction anchorMatchesProjectedNode(\n anchor: CueAnchor,\n nodeRef: string,\n node: AbstractionNode,\n allowLegacyAttribution: boolean\n): boolean {\n const activeSourceMemoryIds = node.sourceMemoryIds ?? [];\n if (activeSourceMemoryIds.length === 0) return true;\n if (!anchor.sourceMemoryIdsByNodeRef) return allowLegacyAttribution;\n const anchorSourceMemoryIds = anchor.sourceMemoryIdsByNodeRef[nodeRef] ?? [];\n return anchorSourceMemoryIds.some((sourceMemoryId) => activeSourceMemoryIds.includes(sourceMemoryId));\n}\n\nexport interface HarmonicMatchedAnchor {\n anchorId: string;\n anchorType: CueAnchorType;\n anchorValue: string;\n}\n\nexport interface HarmonicRetrievalResult {\n node: AbstractionNode;\n score: number;\n nodeScore: number;\n anchorScore: number;\n matchedFields: string[];\n matchedAnchors: HarmonicMatchedAnchor[];\n}\n\ninterface HarmonicCandidate {\n node: AbstractionNode;\n nodeScore: number;\n anchorScore: number;\n matchedFields: Set<string>;\n matchedAnchors: Map<string, HarmonicMatchedAnchor>;\n}\n\nfunction scoreNode(node: AbstractionNode, queryTokens: Set<string>): { score: number; matchedFields: string[] } {\n const matchedFields: string[] = [];\n let score = 0;\n\n const titleMatches = countRecallTokenOverlap(queryTokens, node.title);\n if (titleMatches > 0) {\n score += titleMatches * 3;\n matchedFields.push(\"title\");\n }\n\n const summaryMatches = countRecallTokenOverlap(queryTokens, node.summary);\n if (summaryMatches > 0) {\n score += summaryMatches * 3;\n matchedFields.push(\"summary\");\n }\n\n const tagMatches = countRecallTokenOverlap(queryTokens, node.tags?.join(\" \"));\n if (tagMatches > 0) {\n score += tagMatches * 2;\n matchedFields.push(\"tags\");\n }\n\n const entityMatches = countRecallTokenOverlap(queryTokens, node.entityRefs?.join(\" \"));\n if (entityMatches > 0) {\n score += entityMatches * 2;\n matchedFields.push(\"entityRefs\");\n }\n\n const kindMatches = countRecallTokenOverlap(queryTokens, `${node.kind} ${node.abstractionLevel}`);\n if (kindMatches > 0) {\n score += kindMatches;\n matchedFields.push(\"kind\");\n }\n\n return { score, matchedFields };\n}\n\nfunction scoreAnchor(\n anchor: CueAnchor,\n queryTokens: Set<string>,\n eligibleNodeTags: readonly string[]\n): { score: number; matchedFields: string[] } {\n const matchedFields: string[] = [];\n let score = 0;\n\n const valueMatches = countRecallTokenOverlap(queryTokens, anchor.anchorValue);\n const normalizedMatches = countRecallTokenOverlap(queryTokens, anchor.normalizedCue);\n const cueMatches = Math.max(valueMatches, normalizedMatches);\n if (cueMatches > 0) {\n score += cueMatches * 4;\n if (valueMatches > 0) matchedFields.push(\"anchorValue\");\n if (normalizedMatches > 0) matchedFields.push(\"anchor\");\n }\n\n const typeMatches = countRecallTokenOverlap(queryTokens, anchor.anchorType);\n if (typeMatches > 0) {\n score += typeMatches;\n matchedFields.push(\"anchorType\");\n }\n\n const tagMatches = countRecallTokenOverlap(queryTokens, eligibleNodeTags.join(\" \"));\n if (tagMatches > 0) {\n score += tagMatches * 2;\n matchedFields.push(\"anchorTags\");\n }\n\n return { score, matchedFields };\n}\n\nexport async function readAbstractionNodes(options: {\n memoryDir: string;\n abstractionNodeStoreDir?: string;\n}): Promise<AbstractionNode[]> {\n const rootDir = resolveAbstractionNodeStoreDir(options.memoryDir, options.abstractionNodeStoreDir);\n const files = await listJsonFilesStrict(path.join(rootDir, \"nodes\"), { allowMissingDirectory: true });\n const nodes: AbstractionNode[] = [];\n for (const filePath of files) {\n try {\n nodes.push(validateAbstractionNode(await readJsonFile(filePath)));\n } catch {\n // fail-open: invalid artifacts stay visible via status tooling instead of recall\n }\n }\n return nodes;\n}\n\nexport async function readCueAnchors(options: {\n memoryDir: string;\n abstractionNodeStoreDir?: string;\n}): Promise<CueAnchor[]> {\n const abstractionRoot = resolveAbstractionNodeStoreDir(options.memoryDir, options.abstractionNodeStoreDir);\n const rootDir = resolveCueAnchorStoreDir(abstractionRoot);\n const files = await listJsonFilesStrict(rootDir, { allowMissingDirectory: true });\n const anchors: CueAnchor[] = [];\n for (const filePath of files) {\n try {\n anchors.push(validateCueAnchor(await readJsonFile(filePath)));\n } catch {\n // fail-open: invalid artifacts stay visible via status tooling instead of recall\n }\n }\n return anchors;\n}\n\nexport interface ProjectedHarmonicGraph {\n nodes: AbstractionNode[];\n anchors: CueAnchor[];\n}\n\n/**\n * Read nodes + anchors and project BOTH against the namespace's current active\n * memories. This is the single projection every graph reader shares: a raw\n * `readAbstractionNodes` / `readCueAnchors` pair still carries the stored title,\n * summary, tags, and anchor attribution of a memory that was later rejected,\n * quarantined, or otherwise moved out of the active set, so a second reader\n * that skipped the projection could leak governed metadata even when the\n * memory itself is excluded from the final results.\n *\n * - A node whose every source memory left the active set is dropped.\n * - A surviving node's title/summary/tags/entityRefs are rebuilt from its\n * active sources only.\n * - An anchor keeps a node reference only while its attribution runs through\n * one of that node's surviving active sources, and is dropped once no\n * reference survives.\n */\nexport async function readProjectedHarmonicGraph(options: {\n memoryDir: string;\n abstractionNodeStoreDir?: string;\n anchorsEnabled: boolean;\n abortSignal?: AbortSignal;\n temporalExpiredInInjection?: boolean;\n nowMs?: number;\n}): Promise<ProjectedHarmonicGraph> {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n const nodes = await readAbstractionNodes(options);\n const sourceMemoryIds = [...new Set(nodes.flatMap((node) => node.sourceMemoryIds ?? []))];\n const sourceMemories: SourceMemoryMap = sourceMemoryIds.length > 0\n ? await readSourceMemories({\n memoryDir: options.memoryDir,\n abortSignal: options.abortSignal,\n sourceMemoryIds,\n nowMs: options.nowMs,\n })\n : new Map();\n const nowMs = options.nowMs ?? Date.now();\n // A node whose full stored source set survived projection keeps legacy\n // anchor attribution (an anchor written before per-node source ids existed).\n const legacyCompatibleNodeRefs = new Set<string>();\n const projectedNodes = nodes.flatMap((node) => {\n const projected = projectSourceBackedNode(\n node,\n sourceMemories,\n options.memoryDir,\n options.temporalExpiredInInjection === true,\n nowMs\n );\n if (\n projected &&\n (node.sourceMemoryIds?.length ?? 0) > 0 &&\n projected.sourceMemoryIds?.length === node.sourceMemoryIds?.length\n ) {\n legacyCompatibleNodeRefs.add(node.nodeId);\n }\n return projected ? [projected] : [];\n });\n if (!options.anchorsEnabled) return { nodes: projectedNodes, anchors: [] };\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n const nodeIndex = new Map(projectedNodes.map((node) => [node.nodeId, node]));\n const anchors = (await readCueAnchors(options)).flatMap((anchor) => {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n const nodeRefs = anchor.nodeRefs.filter((nodeRef) => {\n const node = nodeIndex.get(nodeRef);\n return (\n node !== undefined &&\n anchorMatchesProjectedNode(anchor, nodeRef, node, legacyCompatibleNodeRefs.has(nodeRef))\n );\n });\n return nodeRefs.length > 0 ? [{ ...anchor, nodeRefs }] : [];\n });\n return { nodes: projectedNodes, anchors };\n}\n\nexport async function searchHarmonicRetrieval(options: {\n memoryDir: string;\n abstractionNodeStoreDir?: string;\n query: string;\n maxResults: number;\n sessionKey?: string;\n anchorsEnabled: boolean;\n abortSignal?: AbortSignal;\n temporalExpiredInInjection?: boolean;\n}): Promise<HarmonicRetrievalResult[]> {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n const queryTokens = new Set(normalizeRecallTokens(options.query, [\"what\", \"which\"]));\n if (queryTokens.size === 0 || options.maxResults <= 0) return [];\n\n // One projection for every graph reader: nodes and anchors both arrive\n // already narrowed to the namespace's current active memories.\n const { nodes: eligibleNodes, anchors } = await readProjectedHarmonicGraph(options);\n const candidates = new Map<string, HarmonicCandidate>();\n\n for (const node of eligibleNodes) {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n const { score, matchedFields } = scoreNode(node, queryTokens);\n if (score <= 0) continue;\n candidates.set(node.nodeId, {\n node,\n nodeScore: score,\n anchorScore: 0,\n matchedFields: new Set(matchedFields),\n matchedAnchors: new Map(),\n });\n }\n\n if (options.anchorsEnabled) {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n const nodeIndex = new Map(eligibleNodes.map((node) => [node.nodeId, node]));\n for (const anchor of anchors) {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n // `nodeRefs` are the projection's surviving references already.\n const eligibleNodeRefs = anchor.nodeRefs;\n const eligibleNodeTags = new Set(eligibleNodeRefs.flatMap((nodeRef) => nodeIndex.get(nodeRef)?.tags ?? []));\n const eligibleAnchorTags = anchor.tags?.filter((tag) => eligibleNodeTags.has(tag)) ?? [];\n const { score, matchedFields } = scoreAnchor(anchor, queryTokens, eligibleAnchorTags);\n if (score <= 0) continue;\n for (const nodeRef of eligibleNodeRefs) {\n const node = nodeIndex.get(nodeRef);\n if (!node) continue;\n const existing = candidates.get(nodeRef) ?? {\n node,\n nodeScore: 0,\n anchorScore: 0,\n matchedFields: new Set<string>(),\n matchedAnchors: new Map<string, HarmonicMatchedAnchor>(),\n };\n existing.anchorScore += score;\n existing.matchedFields.add(\"anchor\");\n for (const field of matchedFields) existing.matchedFields.add(field);\n existing.matchedAnchors.set(anchor.anchorId, {\n anchorId: anchor.anchorId,\n anchorType: anchor.anchorType,\n anchorValue: anchor.anchorValue,\n });\n candidates.set(nodeRef, existing);\n }\n }\n }\n\n return [...candidates.values()]\n .map((candidate) => {\n let score = candidate.nodeScore + candidate.anchorScore;\n if (options.sessionKey && candidate.node.sessionKey === options.sessionKey) score += 0.5;\n return {\n node: candidate.node,\n score,\n nodeScore: candidate.nodeScore,\n anchorScore: candidate.anchorScore,\n matchedFields: [...candidate.matchedFields].sort(),\n matchedAnchors: [...candidate.matchedAnchors.values()].sort(\n (left, right) =>\n left.anchorType.localeCompare(right.anchorType) || left.anchorValue.localeCompare(right.anchorValue)\n ),\n };\n })\n .filter((result) => result.nodeScore > 0 || result.anchorScore > 0)\n .sort(\n (left, right) =>\n right.score - left.score ||\n right.anchorScore - left.anchorScore ||\n right.node.recordedAt.localeCompare(left.node.recordedAt)\n )\n .slice(0, options.maxResults);\n}\n"],"mappings":"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","names":[]}
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-NHLLKEKK.js";
12
12
  import {
13
13
  parseConfig
14
- } from "./chunk-QAIVTLL2.js";
14
+ } from "./chunk-BLHPADUX.js";
15
15
  import {
16
16
  resolveObjectiveStateStoreDir,
17
17
  validateObjectiveStateSnapshot
@@ -268,4 +268,4 @@ export {
268
268
  recordResumeBundle,
269
269
  getResumeBundleStatus
270
270
  };
271
- //# sourceMappingURL=chunk-MZOQ26LH.js.map
271
+ //# sourceMappingURL=chunk-LQGX5TCI.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listNamespaces
3
- } from "./chunk-73R4HOOK.js";
3
+ } from "./chunk-PT6DQK5T.js";
4
4
  import {
5
5
  capabilityAllowsNamespace
6
6
  } from "./chunk-IG747LRN.js";
@@ -282,4 +282,4 @@ export {
282
282
  computeServiceCorpusWatermarks,
283
283
  computeServiceCorpusCensus
284
284
  };
285
- //# sourceMappingURL=chunk-TRN56SPQ.js.map
285
+ //# sourceMappingURL=chunk-M2OPC4BD.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runLocationSync
3
- } from "./chunk-PQ7EB5AD.js";
3
+ } from "./chunk-SQPC6MUM.js";
4
4
  import {
5
5
  log
6
6
  } from "./chunk-3WCASNQZ.js";
@@ -58,4 +58,4 @@ export {
58
58
  LOCATION_SYNC_DEFAULT_INTERVAL_MS,
59
59
  startLocationAutoSync
60
60
  };
61
- //# sourceMappingURL=chunk-LXJZUNLX.js.map
61
+ //# sourceMappingURL=chunk-NBK24POV.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  raceRecallAbort,
3
3
  throwIfRecallAborted
4
- } from "./chunk-NT2Q6AHC.js";
4
+ } from "./chunk-PCO3P7WJ.js";
5
5
  import {
6
6
  emitExtractionLlmFailureError,
7
7
  recordExtractionLlmFailure,
@@ -1093,4 +1093,4 @@ export {
1093
1093
  ExtractionDeadlineError,
1094
1094
  ExtractionRunCoordinator
1095
1095
  };
1096
- //# sourceMappingURL=chunk-7X7A7KVN.js.map
1096
+ //# sourceMappingURL=chunk-NLYOOGZ7.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveCorpusNamespaceRoots
3
- } from "./chunk-TRN56SPQ.js";
3
+ } from "./chunk-M2OPC4BD.js";
4
4
  import {
5
5
  capabilityAllowsNamespace
6
6
  } from "./chunk-IG747LRN.js";
@@ -200,4 +200,4 @@ async function readAggregateExtractionWatermark(options) {
200
200
  export {
201
201
  readAggregateExtractionWatermark
202
202
  };
203
- //# sourceMappingURL=chunk-G5I5ZT6O.js.map
203
+ //# sourceMappingURL=chunk-OSDAF7HH.js.map
@@ -1,3 +1,6 @@
1
+ import {
2
+ LanceDbBackend
3
+ } from "./chunk-S7LWX2PQ.js";
1
4
  import {
2
5
  MeilisearchBackend
3
6
  } from "./chunk-T2YX56QI.js";
@@ -13,18 +16,15 @@ import {
13
16
  import {
14
17
  EmbedHelper
15
18
  } from "./chunk-5BUCKFRE.js";
16
- import {
17
- LanceDbBackend
18
- } from "./chunk-S7LWX2PQ.js";
19
19
  import {
20
20
  createConversationIndexBackend
21
- } from "./chunk-TFA6HPOA.js";
21
+ } from "./chunk-QCP75JGO.js";
22
22
  import {
23
23
  FaissConversationIndexAdapter
24
24
  } from "./chunk-F4TWWUMP.js";
25
25
  import {
26
26
  QmdClient
27
- } from "./chunk-B3OFQP5Y.js";
27
+ } from "./chunk-IB63OVUB.js";
28
28
  import {
29
29
  resolveIndexingCapabilities,
30
30
  resolvePipelineProcessingCapabilities,
@@ -179,4 +179,4 @@ export {
179
179
  createConversationSearchBackend,
180
180
  createConversationIndexRuntime
181
181
  };
182
- //# sourceMappingURL=chunk-EZ3F4YIN.js.map
182
+ //# sourceMappingURL=chunk-OV7EYM6M.js.map
@@ -46,16 +46,16 @@ import {
46
46
  } from "./chunk-2FLFJTCI.js";
47
47
  import {
48
48
  getOperation
49
- } from "./chunk-6WRHNA4I.js";
49
+ } from "./chunk-JFDKPW54.js";
50
50
  import {
51
51
  WHO_KNOWS_MCP_TOOLS
52
- } from "./chunk-T6RQNV7E.js";
52
+ } from "./chunk-KHOINMCN.js";
53
53
  import {
54
54
  PROMOTION_CANDIDATES_MCP_TOOLS
55
55
  } from "./chunk-PO7NXNGC.js";
56
56
  import {
57
57
  validateRequest
58
- } from "./chunk-OFGTRDWX.js";
58
+ } from "./chunk-SIYZDT2V.js";
59
59
  import {
60
60
  assertOperationAllowed,
61
61
  capabilityAllowsOp,
@@ -4023,4 +4023,4 @@ export {
4023
4023
  MCP_MIGRATED_OPERATIONS,
4024
4024
  EngramMcpServer
4025
4025
  };
4026
- //# sourceMappingURL=chunk-AU43D3IT.js.map
4026
+ //# sourceMappingURL=chunk-P57VR7AI.js.map
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-TBBDFYXW.js";
11
11
  import {
12
12
  parseQmdExplain
13
- } from "./chunk-B3OFQP5Y.js";
13
+ } from "./chunk-IB63OVUB.js";
14
14
  import {
15
15
  parseFlexibleIsoTimestamp
16
16
  } from "./chunk-P7FMDTKL.js";
@@ -645,4 +645,4 @@ export {
645
645
  appendMemoryToGraphContext,
646
646
  resolvePersistedMemoryRelativePath
647
647
  };
648
- //# sourceMappingURL=chunk-NT2Q6AHC.js.map
648
+ //# sourceMappingURL=chunk-PCO3P7WJ.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  NamespaceStorageRouter
3
- } from "./chunk-KMN2JE4D.js";
3
+ } from "./chunk-CVQWNACA.js";
4
4
  import {
5
5
  namespaceCollectionName
6
- } from "./chunk-BKVCTTEN.js";
6
+ } from "./chunk-GUD6FYQG.js";
7
7
  import {
8
8
  isSafeRouteNamespace
9
9
  } from "./chunk-PCXDUHQH.js";
@@ -213,4 +213,4 @@ export {
213
213
  verifyNamespaces,
214
214
  runNamespaceMigration
215
215
  };
216
- //# sourceMappingURL=chunk-73R4HOOK.js.map
216
+ //# sourceMappingURL=chunk-PT6DQK5T.js.map
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-3UXOZBHV.js";
15
15
  import {
16
16
  StorageManager
17
- } from "./chunk-E4XLFYHV.js";
17
+ } from "./chunk-LHOIYLKH.js";
18
18
  import {
19
19
  OKF_PROFILE_TYPE,
20
20
  okfTypeForMemory
@@ -272,4 +272,4 @@ export {
272
272
  exportOkfBundle,
273
273
  firstHeading
274
274
  };
275
- //# sourceMappingURL=chunk-O43AAJFQ.js.map
275
+ //# sourceMappingURL=chunk-PTGPU4DC.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  buildStandup,
3
3
  parseStandupDate
4
- } from "./chunk-S2GR3T7W.js";
4
+ } from "./chunk-RNYVAQX2.js";
5
5
  import {
6
6
  backfillMemoryStorage,
7
7
  runLocationBackfill,
@@ -9,23 +9,23 @@ import {
9
9
  runLocationDay,
10
10
  runLocationStatus,
11
11
  runLocationSync
12
- } from "./chunk-PQ7EB5AD.js";
12
+ } from "./chunk-SQPC6MUM.js";
13
13
  import {
14
14
  externalWikiSearchOperation
15
- } from "./chunk-KFHEZJQZ.js";
15
+ } from "./chunk-BAREPCLY.js";
16
16
  import {
17
17
  DECISION_SUBCOMMANDS,
18
18
  DELTA_SUBCOMMANDS,
19
19
  defineOperation,
20
20
  isCodegraphToolName
21
- } from "./chunk-6WRHNA4I.js";
21
+ } from "./chunk-JFDKPW54.js";
22
22
  import {
23
23
  CorrectionContractError
24
24
  } from "./chunk-QLK3SL7Q.js";
25
25
  import {
26
26
  memoryStoreRequestSchema,
27
27
  retainedCategoryAlias
28
- } from "./chunk-OFGTRDWX.js";
28
+ } from "./chunk-SIYZDT2V.js";
29
29
  import {
30
30
  serializeMutations,
31
31
  withHeldFileLock
@@ -1914,4 +1914,4 @@ export {
1914
1914
  codegraphIngestTracesOperation,
1915
1915
  REGISTERED_OPERATIONS
1916
1916
  };
1917
- //# sourceMappingURL=chunk-STQC2FYQ.js.map
1917
+ //# sourceMappingURL=chunk-PWVBVIOP.js.map
@@ -1,3 +1,7 @@
1
+ import {
2
+ searchConversationIndex,
3
+ searchConversationIndexFaissFailOpen
4
+ } from "./chunk-A7Q43EUZ.js";
1
5
  import {
2
6
  failOpenFaissHealth
3
7
  } from "./chunk-F4TWWUMP.js";
@@ -5,10 +9,6 @@ import {
5
9
  rebuildConversationChunksFailOpen,
6
10
  upsertConversationChunksFailOpen
7
11
  } from "./chunk-72A4L5JJ.js";
8
- import {
9
- searchConversationIndex,
10
- searchConversationIndexFaissFailOpen
11
- } from "./chunk-A7Q43EUZ.js";
12
12
 
13
13
  // src/conversation-index/backend.ts
14
14
  function createConversationIndexBackend(options) {
@@ -235,4 +235,4 @@ function createFaissBackend(getFaiss) {
235
235
  export {
236
236
  createConversationIndexBackend
237
237
  };
238
- //# sourceMappingURL=chunk-TFA6HPOA.js.map
238
+ //# sourceMappingURL=chunk-QCP75JGO.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-5HFVWYHL.js";
4
4
  import {
5
5
  isGenericRecallExcludedPath
6
- } from "./chunk-JWFTPRYD.js";
6
+ } from "./chunk-2EZB2DL5.js";
7
7
  import {
8
8
  planRecallMode
9
9
  } from "./chunk-CSAKJVXW.js";
@@ -132,4 +132,4 @@ async function findExpectedMemory(orchestrator, namespaces, expect) {
132
132
  export {
133
133
  runRecallWhy
134
134
  };
135
- //# sourceMappingURL=chunk-SIGDETMB.js.map
135
+ //# sourceMappingURL=chunk-R4NGLTUS.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseFrontmatter
3
- } from "./chunk-E4XLFYHV.js";
3
+ } from "./chunk-LHOIYLKH.js";
4
4
  import {
5
5
  activityDigestPath,
6
6
  isValidActivityDate
@@ -199,4 +199,4 @@ export {
199
199
  buildStandup,
200
200
  standupHelp
201
201
  };
202
- //# sourceMappingURL=chunk-S2GR3T7W.js.map
202
+ //# sourceMappingURL=chunk-RNYVAQX2.js.map
@@ -3,7 +3,7 @@ import {
3
3
  readNamespaceMaintenanceLastRanStatuses,
4
4
  readNamespaceMaintenanceStatuses,
5
5
  runNamespaceMaintenancePlan
6
- } from "./chunk-JRDL3FGM.js";
6
+ } from "./chunk-YFET6A4I.js";
7
7
  import {
8
8
  analyzeSessionIntegrity,
9
9
  applySessionRepair,
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-CMTINOFS.js";
15
15
  import {
16
16
  summarizeCorpusAndReplica
17
- } from "./chunk-VV2MVHCJ.js";
17
+ } from "./chunk-DAVONFNK.js";
18
18
  import {
19
19
  readJudgeVerdictStats
20
20
  } from "./chunk-OZKOPQCM.js";
@@ -38,17 +38,17 @@ import {
38
38
  } from "./chunk-YBPYIAA5.js";
39
39
  import {
40
40
  parseConfig
41
- } from "./chunk-QAIVTLL2.js";
41
+ } from "./chunk-BLHPADUX.js";
42
42
  import {
43
43
  readAggregateExtractionWatermark
44
- } from "./chunk-G5I5ZT6O.js";
44
+ } from "./chunk-OSDAF7HH.js";
45
45
  import {
46
46
  listMemoryGovernanceRuns,
47
47
  readMemoryGovernanceRunArtifact
48
- } from "./chunk-VO2BNAA2.js";
48
+ } from "./chunk-A5N6ZEUW.js";
49
49
  import {
50
50
  listNamespaces
51
- } from "./chunk-73R4HOOK.js";
51
+ } from "./chunk-PT6DQK5T.js";
52
52
  import {
53
53
  analyzeGraphHealth
54
54
  } from "./chunk-2U3R3DDH.js";
@@ -57,7 +57,7 @@ import {
57
57
  } from "./chunk-AWD36R4D.js";
58
58
  import {
59
59
  StorageManager
60
- } from "./chunk-E4XLFYHV.js";
60
+ } from "./chunk-LHOIYLKH.js";
61
61
  import {
62
62
  lintWorkspaceFiles
63
63
  } from "./chunk-DM2T26WE.js";
@@ -1683,4 +1683,4 @@ export {
1683
1683
  runBenchmarkRecall,
1684
1684
  runOperatorRepair
1685
1685
  };
1686
- //# sourceMappingURL=chunk-PZ2QQULY.js.map
1686
+ //# sourceMappingURL=chunk-RU744TNX.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-E4XLFYHV.js";
3
+ } from "./chunk-LHOIYLKH.js";
4
4
  import {
5
5
  getCachedRuleMemories,
6
6
  setCachedRuleMemories
@@ -119,4 +119,4 @@ export {
119
119
  compareVerifiedSemanticRuleResults,
120
120
  searchVerifiedSemanticRules
121
121
  };
122
- //# sourceMappingURL=chunk-2OFDC3AK.js.map
122
+ //# sourceMappingURL=chunk-RVQVWDSN.js.map
@@ -5,7 +5,7 @@ import {
5
5
  // src/qmd-preflight.ts
6
6
  var QMD_PROBE_TIMEOUT_MS = 8e3;
7
7
  var QMD_PROBE_RETRY_BACKOFF_MS = [300, 800];
8
- var QMD_SUPPORTED_VERSION = "2.5.3";
8
+ var QMD_SUPPORTED_VERSION = "2.8.3";
9
9
  function classifyProbeFailure(err) {
10
10
  if (err && typeof err === "object") {
11
11
  if ("code" in err) {
@@ -90,6 +90,11 @@ function shouldAutoUpgradeQmd(installedVersion, supportedVersion = QMD_SUPPORTED
90
90
  if (!installed || !supported) return false;
91
91
  return compareQmdVersions(installed, supported) < 0;
92
92
  }
93
+ var QMD_PATCHED_BUILD_MIN = [2, 8, 3];
94
+ function autoUpgradeInstallsStockPackage(supportedVersion) {
95
+ const supported = parseQmdVersion(supportedVersion);
96
+ return supported !== null && compareQmdVersions(supported, QMD_PATCHED_BUILD_MIN) < 0;
97
+ }
93
98
  function getQmdPostInstallProbeTargets(qmdPath, qmdPathSource) {
94
99
  const targets = [
95
100
  { qmdPath: "qmd", source: "auto-path" }
@@ -115,7 +120,8 @@ export {
115
120
  versionAtLeast,
116
121
  resolveQmdCapabilities,
117
122
  shouldAutoUpgradeQmd,
123
+ autoUpgradeInstallsStockPackage,
118
124
  getQmdPostInstallProbeTargets,
119
125
  qmdVersionToString
120
126
  };
121
- //# sourceMappingURL=chunk-ZLQ37WJX.js.map
127
+ //# sourceMappingURL=chunk-SIGAGKNE.js.map