@remnic/core 9.69.105 → 10.0.1

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 (259) hide show
  1. package/dist/access-admin-ops-surface.js +35 -33
  2. package/dist/access-authorization-probe.js +36 -34
  3. package/dist/access-boundary.js +35 -33
  4. package/dist/access-cli.js +96 -94
  5. package/dist/access-cli.js.map +1 -1
  6. package/dist/access-extraction-force-flush.js +35 -33
  7. package/dist/access-http-briefing.js +36 -34
  8. package/dist/access-http-query.js +37 -35
  9. package/dist/access-http.js +54 -52
  10. package/dist/access-identity-continuity-surface.js +35 -33
  11. package/dist/access-lcm-surface.js +35 -33
  12. package/dist/access-mcp.js +44 -42
  13. package/dist/access-namespace-preflight.js +35 -33
  14. package/dist/access-observe-write-category.js +4 -4
  15. package/dist/access-observe-write-surface.js +35 -33
  16. package/dist/access-operations-batch.js +36 -34
  17. package/dist/access-operations.js +43 -41
  18. package/dist/access-recall-concurrency.js +35 -33
  19. package/dist/access-recall-response.js +35 -33
  20. package/dist/access-recall-surface.js +35 -33
  21. package/dist/access-schema.js +3 -3
  22. package/dist/access-service.js +35 -33
  23. package/dist/access-surface-catalog.js +37 -35
  24. package/dist/access-surface-catalog.js.map +1 -1
  25. package/dist/active-recall.js +11 -9
  26. package/dist/active-recall.js.map +1 -1
  27. package/dist/adapters/index.js +4 -4
  28. package/dist/adapters/registry.js +2 -2
  29. package/dist/briefing.js +10 -8
  30. package/dist/buffer.js +7 -5
  31. package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
  32. package/dist/causal-consolidation.js +11 -9
  33. package/dist/causal-consolidation.js.map +1 -1
  34. package/dist/{chunk-JWFTPRYD.js → chunk-2EZB2DL5.js} +2 -2
  35. package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
  36. package/dist/{chunk-QKCGOECM.js → chunk-34G4U6HS.js} +2 -2
  37. package/dist/{chunk-YI6XIFQV.js → chunk-34TSXVQS.js} +2 -2
  38. package/dist/{chunk-7YQR6XHY.js → chunk-3I375S4J.js} +58 -58
  39. package/dist/{chunk-XQWKB6PY.js → chunk-3UP6NP4C.js} +2 -2
  40. package/dist/{chunk-OFGTRDWX.js → chunk-47I2EK6G.js} +2 -2
  41. package/dist/{chunk-HWGFTTPS.js → chunk-5FLFPTDK.js} +2 -2
  42. package/dist/{chunk-LHDSCWDK.js → chunk-7AUC2YSU.js} +13 -13
  43. package/dist/{chunk-AU43D3IT.js → chunk-7DB7KYSR.js} +4 -4
  44. package/dist/{chunk-VDX2J7OX.js → chunk-7LCGFUMB.js} +4 -4
  45. package/dist/{chunk-CNBGAFDY.js → chunk-A7V7GZ7F.js} +2 -2
  46. package/dist/{chunk-SWXPR5SE.js → chunk-B2UCJX76.js} +2 -2
  47. package/dist/{chunk-KYUVFCT2.js → chunk-BCTDTVSR.js} +2 -2
  48. package/dist/{chunk-6WRHNA4I.js → chunk-BKPV47BK.js} +36 -36
  49. package/dist/{chunk-QAIVTLL2.js → chunk-BLHPADUX.js} +2 -2
  50. package/dist/{chunk-PRNR47DI.js → chunk-BOT276JC.js} +2 -2
  51. package/dist/{chunk-O43AAJFQ.js → chunk-CRZ7BU6R.js} +2 -2
  52. package/dist/{chunk-2OFDC3AK.js → chunk-DDPPV3KA.js} +2 -2
  53. package/dist/{chunk-VYIBRCVW.js → chunk-DHQUQ34W.js} +2 -2
  54. package/dist/{chunk-7NBUE5VY.js → chunk-DPX3J2N4.js} +2 -2
  55. package/dist/{chunk-EWWK65CI.js → chunk-DX3ZODO3.js} +2 -2
  56. package/dist/{chunk-SFDBLCZV.js → chunk-DYZHVVJM.js} +30 -30
  57. package/dist/{chunk-B454SHPU.js → chunk-E7FN5N5E.js} +2 -2
  58. package/dist/{chunk-AWSP3WNM.js → chunk-EJJMDLVB.js} +2 -2
  59. package/dist/{chunk-KFHEZJQZ.js → chunk-EPFNPPWH.js} +2 -2
  60. package/dist/{chunk-VDVHIRCK.js → chunk-EUYNHJTK.js} +2 -2
  61. package/dist/{chunk-T32YYUT2.js → chunk-FB6FQT4P.js} +2 -2
  62. package/dist/{chunk-XTN54NML.js → chunk-G3T6YMBO.js} +4 -4
  63. package/dist/{chunk-JC7QQ2DJ.js → chunk-GS6LTJFW.js} +2 -2
  64. package/dist/{chunk-WR66CTVU.js → chunk-GYLDYYRA.js} +4 -4
  65. package/dist/{chunk-PQKZLBCJ.js → chunk-GZRTH3WZ.js} +1 -1
  66. package/dist/{chunk-STQC2FYQ.js → chunk-HNU5CZ7E.js} +6 -6
  67. package/dist/{chunk-E4XLFYHV.js → chunk-HPEONBM3.js} +2 -2
  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-EZ3F4YIN.js → chunk-JLUS56YZ.js} +5 -5
  73. package/dist/{chunk-UHESJ6TQ.js → chunk-KEGUXZNY.js} +3 -3
  74. package/dist/{chunk-UHESJ6TQ.js.map → chunk-KEGUXZNY.js.map} +1 -1
  75. package/dist/{chunk-J3ZJBX7I.js → chunk-KM2HQZR3.js} +2 -2
  76. package/dist/{chunk-2MMBJE53.js → chunk-LI3OM3NP.js} +7 -7
  77. package/dist/{chunk-MZOQ26LH.js → chunk-LQGX5TCI.js} +2 -2
  78. package/dist/{chunk-KMN2JE4D.js → chunk-LTDWZ2HC.js} +2 -2
  79. package/dist/{chunk-T6RQNV7E.js → chunk-MJ737UIA.js} +2 -2
  80. package/dist/{chunk-7X7A7KVN.js → chunk-NLYOOGZ7.js} +2 -2
  81. package/dist/{chunk-PZ2QQULY.js → chunk-NVZRIHW5.js} +8 -8
  82. package/dist/{chunk-NT2Q6AHC.js → chunk-PCO3P7WJ.js} +2 -2
  83. package/dist/{chunk-VO2BNAA2.js → chunk-PXDEIJL5.js} +2 -2
  84. package/dist/{chunk-LXJZUNLX.js → chunk-QHHWJVVW.js} +2 -2
  85. package/dist/{chunk-XLWMNDQR.js → chunk-QJWZJ7HL.js} +3 -3
  86. package/dist/{chunk-73R4HOOK.js → chunk-QPG72IPU.js} +3 -3
  87. package/dist/{chunk-SIGDETMB.js → chunk-R4NGLTUS.js} +2 -2
  88. package/dist/{chunk-TRN56SPQ.js → chunk-R6NHHKXE.js} +2 -2
  89. package/dist/{chunk-ATFFWIKL.js → chunk-RGGXSN5A.js} +2 -2
  90. package/dist/{chunk-IOMLGJHG.js → chunk-RWZXVCGX.js} +5 -5
  91. package/dist/{chunk-PQ7EB5AD.js → chunk-S3BB34NI.js} +3 -3
  92. package/dist/{chunk-QX3K3INR.js → chunk-SBBZXDVJ.js} +2 -2
  93. package/dist/{chunk-G5I5ZT6O.js → chunk-SFDKLEIY.js} +2 -2
  94. package/dist/{chunk-ZLQ37WJX.js → chunk-SIGAGKNE.js} +8 -2
  95. package/dist/{chunk-ZLQ37WJX.js.map → chunk-SIGAGKNE.js.map} +1 -1
  96. package/dist/chunk-TPSLVZHS.js +102 -0
  97. package/dist/chunk-TPSLVZHS.js.map +1 -0
  98. package/dist/{chunk-TXTRHF3B.js → chunk-TVPDF6CZ.js} +2 -2
  99. package/dist/{chunk-A6WNTVA7.js → chunk-UP3XXGEN.js} +2 -2
  100. package/dist/{chunk-S2GR3T7W.js → chunk-UT7WE7RM.js} +2 -2
  101. package/dist/{chunk-BKVCTTEN.js → chunk-V3NKVYUD.js} +2 -2
  102. package/dist/{chunk-CGBE3N7T.js → chunk-VH76UQK3.js} +2 -2
  103. package/dist/{chunk-Z6EZCN6Z.js → chunk-VKQI47DJ.js} +8 -8
  104. package/dist/{chunk-KV7LFOPF.js → chunk-VSPBXHGR.js} +2 -2
  105. package/dist/{chunk-ZRUC7FD3.js → chunk-VXCTQ3B3.js} +2 -2
  106. package/dist/{chunk-QUNCLKHM.js → chunk-WIVBNNA3.js} +2 -2
  107. package/dist/{chunk-OWV6LKNZ.js → chunk-WWUFQ3AG.js} +2 -2
  108. package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
  109. package/dist/{chunk-GQ6ZF4LD.js → chunk-XG4XXI66.js} +2 -2
  110. package/dist/{chunk-ISX7GVZE.js → chunk-YRULQW5J.js} +4 -4
  111. package/dist/{chunk-VV2MVHCJ.js → chunk-YX5F4V7H.js} +2 -2
  112. package/dist/{chunk-JRDL3FGM.js → chunk-YY5FM5M7.js} +3 -3
  113. package/dist/cli.js +70 -68
  114. package/dist/coding/export-okf-codegraph.js +9 -7
  115. package/dist/coding/export-okf-codegraph.js.map +1 -1
  116. package/dist/compounding/engine.js +10 -8
  117. package/dist/config-qmd.js +1 -1
  118. package/dist/config.js +11 -9
  119. package/dist/connectors/codex-materialize-runner.js +10 -8
  120. package/dist/connectors/index.js +10 -8
  121. package/dist/convergence-refresh.js +12 -10
  122. package/dist/corpus-watermark.js +12 -10
  123. package/dist/deep-recall-http-glue.js +4 -4
  124. package/dist/deep-recall.js +2 -2
  125. package/dist/entity-retrieval.js +10 -8
  126. package/dist/external-wiki-access.js +36 -34
  127. package/dist/extraction.js +14 -12
  128. package/dist/harmonic-retrieval.js +1 -1
  129. package/dist/index.js +118 -116
  130. package/dist/lcm/engine.js +3 -3
  131. package/dist/lcm/index.js +9 -9
  132. package/dist/location/index.js +12 -10
  133. package/dist/maintenance/memory-governance.js +10 -8
  134. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +10 -8
  135. package/dist/maintenance/rebuild-memory-projection.js +11 -9
  136. package/dist/memory-browse-operations.js +36 -34
  137. package/dist/memory-browse.js +7 -5
  138. package/dist/namespaces/migrate.js +11 -9
  139. package/dist/namespaces/search.js +8 -6
  140. package/dist/namespaces/storage.js +10 -8
  141. package/dist/operator-doctor-corpus.js +13 -11
  142. package/dist/operator-toolkit.js +20 -18
  143. package/dist/orchestration/maintenance.js +18 -16
  144. package/dist/orchestrator.js +98 -96
  145. package/dist/qmd-daemon-session.d.ts +45 -0
  146. package/dist/qmd-daemon-session.d.ts.map +1 -0
  147. package/dist/qmd-daemon-session.js +12 -0
  148. package/dist/qmd-daemon-session.js.map +1 -0
  149. package/dist/qmd-mcp-cancel.d.ts +21 -0
  150. package/dist/qmd-mcp-cancel.d.ts.map +1 -0
  151. package/dist/qmd-mcp-cancel.js +11 -0
  152. package/dist/qmd-mcp-cancel.js.map +1 -0
  153. package/dist/qmd-preflight.d.ts +3 -1
  154. package/dist/qmd-preflight.d.ts.map +1 -1
  155. package/dist/qmd-preflight.js +3 -1
  156. package/dist/qmd.d.ts +5 -29
  157. package/dist/qmd.d.ts.map +1 -1
  158. package/dist/qmd.js +6 -2
  159. package/dist/recall-navigation-operations.js +36 -34
  160. package/dist/recall-navigation.js +35 -33
  161. package/dist/recall-state-view-admission.js +7 -5
  162. package/dist/recall-why-service.js +7 -5
  163. package/dist/resume-bundles.js +12 -10
  164. package/dist/search/factory.js +7 -5
  165. package/dist/search/index.js +11 -9
  166. package/dist/semantic-consolidation.js +11 -9
  167. package/dist/semantic-rule-promotion.js +10 -8
  168. package/dist/semantic-rule-verifier.js +10 -8
  169. package/dist/source-agent-qualifier.js +13 -11
  170. package/dist/standup/build.js +10 -8
  171. package/dist/storage.js +9 -7
  172. package/dist/support-passport/index.js +38 -36
  173. package/dist/transfer/backup.js +2 -2
  174. package/dist/transfer/capsule-export.js +2 -2
  175. package/dist/transfer/capsule-import.js +2 -2
  176. package/dist/transfer/export-okf.js +10 -8
  177. package/dist/verified-recall.js +10 -8
  178. package/dist/who-knows-cli.js +11 -9
  179. package/dist/who-knows.js +10 -8
  180. package/package.json +2 -2
  181. package/src/config-qmd.ts +2 -2
  182. package/src/qmd-daemon-session.ts +369 -0
  183. package/src/qmd-mcp-cancel.test.ts +408 -0
  184. package/src/qmd-mcp-cancel.ts +130 -0
  185. package/src/qmd-preflight.ts +10 -1
  186. package/src/qmd-rank-compare.test.ts +100 -0
  187. package/src/qmd.test.ts +16 -1
  188. package/src/qmd.ts +18 -297
  189. package/dist/chunk-B3OFQP5Y.js.map +0 -1
  190. /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  191. /package/dist/{chunk-JWFTPRYD.js.map → chunk-2EZB2DL5.js.map} +0 -0
  192. /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
  193. /package/dist/{chunk-QKCGOECM.js.map → chunk-34G4U6HS.js.map} +0 -0
  194. /package/dist/{chunk-YI6XIFQV.js.map → chunk-34TSXVQS.js.map} +0 -0
  195. /package/dist/{chunk-7YQR6XHY.js.map → chunk-3I375S4J.js.map} +0 -0
  196. /package/dist/{chunk-XQWKB6PY.js.map → chunk-3UP6NP4C.js.map} +0 -0
  197. /package/dist/{chunk-OFGTRDWX.js.map → chunk-47I2EK6G.js.map} +0 -0
  198. /package/dist/{chunk-HWGFTTPS.js.map → chunk-5FLFPTDK.js.map} +0 -0
  199. /package/dist/{chunk-LHDSCWDK.js.map → chunk-7AUC2YSU.js.map} +0 -0
  200. /package/dist/{chunk-AU43D3IT.js.map → chunk-7DB7KYSR.js.map} +0 -0
  201. /package/dist/{chunk-VDX2J7OX.js.map → chunk-7LCGFUMB.js.map} +0 -0
  202. /package/dist/{chunk-CNBGAFDY.js.map → chunk-A7V7GZ7F.js.map} +0 -0
  203. /package/dist/{chunk-SWXPR5SE.js.map → chunk-B2UCJX76.js.map} +0 -0
  204. /package/dist/{chunk-KYUVFCT2.js.map → chunk-BCTDTVSR.js.map} +0 -0
  205. /package/dist/{chunk-6WRHNA4I.js.map → chunk-BKPV47BK.js.map} +0 -0
  206. /package/dist/{chunk-QAIVTLL2.js.map → chunk-BLHPADUX.js.map} +0 -0
  207. /package/dist/{chunk-PRNR47DI.js.map → chunk-BOT276JC.js.map} +0 -0
  208. /package/dist/{chunk-O43AAJFQ.js.map → chunk-CRZ7BU6R.js.map} +0 -0
  209. /package/dist/{chunk-2OFDC3AK.js.map → chunk-DDPPV3KA.js.map} +0 -0
  210. /package/dist/{chunk-VYIBRCVW.js.map → chunk-DHQUQ34W.js.map} +0 -0
  211. /package/dist/{chunk-7NBUE5VY.js.map → chunk-DPX3J2N4.js.map} +0 -0
  212. /package/dist/{chunk-EWWK65CI.js.map → chunk-DX3ZODO3.js.map} +0 -0
  213. /package/dist/{chunk-SFDBLCZV.js.map → chunk-DYZHVVJM.js.map} +0 -0
  214. /package/dist/{chunk-B454SHPU.js.map → chunk-E7FN5N5E.js.map} +0 -0
  215. /package/dist/{chunk-AWSP3WNM.js.map → chunk-EJJMDLVB.js.map} +0 -0
  216. /package/dist/{chunk-KFHEZJQZ.js.map → chunk-EPFNPPWH.js.map} +0 -0
  217. /package/dist/{chunk-VDVHIRCK.js.map → chunk-EUYNHJTK.js.map} +0 -0
  218. /package/dist/{chunk-T32YYUT2.js.map → chunk-FB6FQT4P.js.map} +0 -0
  219. /package/dist/{chunk-XTN54NML.js.map → chunk-G3T6YMBO.js.map} +0 -0
  220. /package/dist/{chunk-JC7QQ2DJ.js.map → chunk-GS6LTJFW.js.map} +0 -0
  221. /package/dist/{chunk-WR66CTVU.js.map → chunk-GYLDYYRA.js.map} +0 -0
  222. /package/dist/{chunk-PQKZLBCJ.js.map → chunk-GZRTH3WZ.js.map} +0 -0
  223. /package/dist/{chunk-STQC2FYQ.js.map → chunk-HNU5CZ7E.js.map} +0 -0
  224. /package/dist/{chunk-E4XLFYHV.js.map → chunk-HPEONBM3.js.map} +0 -0
  225. /package/dist/{chunk-EZ3F4YIN.js.map → chunk-JLUS56YZ.js.map} +0 -0
  226. /package/dist/{chunk-J3ZJBX7I.js.map → chunk-KM2HQZR3.js.map} +0 -0
  227. /package/dist/{chunk-2MMBJE53.js.map → chunk-LI3OM3NP.js.map} +0 -0
  228. /package/dist/{chunk-MZOQ26LH.js.map → chunk-LQGX5TCI.js.map} +0 -0
  229. /package/dist/{chunk-KMN2JE4D.js.map → chunk-LTDWZ2HC.js.map} +0 -0
  230. /package/dist/{chunk-T6RQNV7E.js.map → chunk-MJ737UIA.js.map} +0 -0
  231. /package/dist/{chunk-7X7A7KVN.js.map → chunk-NLYOOGZ7.js.map} +0 -0
  232. /package/dist/{chunk-PZ2QQULY.js.map → chunk-NVZRIHW5.js.map} +0 -0
  233. /package/dist/{chunk-NT2Q6AHC.js.map → chunk-PCO3P7WJ.js.map} +0 -0
  234. /package/dist/{chunk-VO2BNAA2.js.map → chunk-PXDEIJL5.js.map} +0 -0
  235. /package/dist/{chunk-LXJZUNLX.js.map → chunk-QHHWJVVW.js.map} +0 -0
  236. /package/dist/{chunk-XLWMNDQR.js.map → chunk-QJWZJ7HL.js.map} +0 -0
  237. /package/dist/{chunk-73R4HOOK.js.map → chunk-QPG72IPU.js.map} +0 -0
  238. /package/dist/{chunk-SIGDETMB.js.map → chunk-R4NGLTUS.js.map} +0 -0
  239. /package/dist/{chunk-TRN56SPQ.js.map → chunk-R6NHHKXE.js.map} +0 -0
  240. /package/dist/{chunk-ATFFWIKL.js.map → chunk-RGGXSN5A.js.map} +0 -0
  241. /package/dist/{chunk-IOMLGJHG.js.map → chunk-RWZXVCGX.js.map} +0 -0
  242. /package/dist/{chunk-PQ7EB5AD.js.map → chunk-S3BB34NI.js.map} +0 -0
  243. /package/dist/{chunk-QX3K3INR.js.map → chunk-SBBZXDVJ.js.map} +0 -0
  244. /package/dist/{chunk-G5I5ZT6O.js.map → chunk-SFDKLEIY.js.map} +0 -0
  245. /package/dist/{chunk-TXTRHF3B.js.map → chunk-TVPDF6CZ.js.map} +0 -0
  246. /package/dist/{chunk-A6WNTVA7.js.map → chunk-UP3XXGEN.js.map} +0 -0
  247. /package/dist/{chunk-S2GR3T7W.js.map → chunk-UT7WE7RM.js.map} +0 -0
  248. /package/dist/{chunk-BKVCTTEN.js.map → chunk-V3NKVYUD.js.map} +0 -0
  249. /package/dist/{chunk-CGBE3N7T.js.map → chunk-VH76UQK3.js.map} +0 -0
  250. /package/dist/{chunk-Z6EZCN6Z.js.map → chunk-VKQI47DJ.js.map} +0 -0
  251. /package/dist/{chunk-KV7LFOPF.js.map → chunk-VSPBXHGR.js.map} +0 -0
  252. /package/dist/{chunk-ZRUC7FD3.js.map → chunk-VXCTQ3B3.js.map} +0 -0
  253. /package/dist/{chunk-QUNCLKHM.js.map → chunk-WIVBNNA3.js.map} +0 -0
  254. /package/dist/{chunk-OWV6LKNZ.js.map → chunk-WWUFQ3AG.js.map} +0 -0
  255. /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
  256. /package/dist/{chunk-GQ6ZF4LD.js.map → chunk-XG4XXI66.js.map} +0 -0
  257. /package/dist/{chunk-ISX7GVZE.js.map → chunk-YRULQW5J.js.map} +0 -0
  258. /package/dist/{chunk-VV2MVHCJ.js.map → chunk-YX5F4V7H.js.map} +0 -0
  259. /package/dist/{chunk-JRDL3FGM.js.map → chunk-YY5FM5M7.js.map} +0 -0
@@ -0,0 +1,312 @@
1
+ import {
2
+ launchProcess
3
+ } from "./chunk-ZEFVK7XC.js";
4
+ import {
5
+ mergeEnv
6
+ } from "./chunk-P2QRMMVQ.js";
7
+ import {
8
+ abortError,
9
+ throwIfAborted
10
+ } from "./chunk-BTTPKDIL.js";
11
+ import {
12
+ log
13
+ } from "./chunk-3WCASNQZ.js";
14
+
15
+ // src/qmd-daemon-session.ts
16
+ var nextJsonRpcId = 1;
17
+ function sleep(ms) {
18
+ return new Promise((resolve) => setTimeout(resolve, ms));
19
+ }
20
+ function sanitizeForLog(value, max = 200) {
21
+ let out = "";
22
+ const cap = Math.min(value.length, max);
23
+ for (let i = 0; i < cap; i++) {
24
+ const code = value.charCodeAt(i);
25
+ if (code === 27 && value.charCodeAt(i + 1) === 91) {
26
+ i += 2;
27
+ while (i < cap) {
28
+ const next = value.charCodeAt(i);
29
+ const isLetter = next >= 65 && next <= 90 || next >= 97 && next <= 122;
30
+ if (isLetter) break;
31
+ i += 1;
32
+ }
33
+ continue;
34
+ }
35
+ if (code < 32 || code === 127) continue;
36
+ out += value[i] ?? "";
37
+ }
38
+ if (value.length > max) return `${out}\u2026(truncated)`;
39
+ return out;
40
+ }
41
+ function isTimeoutMessage(message) {
42
+ return message.toLowerCase().includes("timed out");
43
+ }
44
+ var QmdDaemonSession = class {
45
+ child = null;
46
+ initialized = false;
47
+ buffer = "";
48
+ startPromise = null;
49
+ pendingRequests = /* @__PURE__ */ new Map();
50
+ qmdPath;
51
+ runtimeEnv;
52
+ indexName;
53
+ spawn;
54
+ constructor(qmdPath, runtimeEnv = {}, indexName, spawn = launchProcess) {
55
+ this.qmdPath = qmdPath;
56
+ this.runtimeEnv = runtimeEnv;
57
+ this.indexName = indexName?.trim() || void 0;
58
+ this.spawn = spawn;
59
+ }
60
+ /** Spawn the qmd mcp child process and perform MCP handshake. */
61
+ async start() {
62
+ if (this.child && !this.child.killed && this.initialized) {
63
+ return true;
64
+ }
65
+ if (this.startPromise) {
66
+ return this.startPromise;
67
+ }
68
+ this.startPromise = (async () => {
69
+ const processAlreadyRunning = this.child != null && !this.child.killed;
70
+ if (!processAlreadyRunning) {
71
+ if (this.child) {
72
+ this.cleanup({ killChild: true });
73
+ }
74
+ try {
75
+ const args = this.indexName ? ["--index", this.indexName, "mcp"] : ["mcp"];
76
+ const child = this.spawn(this.qmdPath, args, {
77
+ env: mergeEnv({ NO_COLOR: "1", ...this.runtimeEnv }),
78
+ stdio: ["pipe", "pipe", "pipe"]
79
+ });
80
+ this.child = child;
81
+ this.buffer = "";
82
+ child.stdout?.on("data", (data) => {
83
+ if (this.child !== child) return;
84
+ this.handleStdoutData(data);
85
+ });
86
+ child.stderr?.on("data", (data) => {
87
+ if (this.child !== child) return;
88
+ const msg = data.toString().trim();
89
+ if (msg) log.debug(`QMD mcp stderr: ${sanitizeForLog(msg)}`);
90
+ });
91
+ child.stdin?.on("error", (err) => {
92
+ log.debug(`QMD mcp stdin error (suppressed): ${err.message}`);
93
+ });
94
+ child.on("error", (err) => {
95
+ if (this.child !== child) return;
96
+ log.debug(`QMD mcp process error: ${err.message}`);
97
+ this.cleanup({ child });
98
+ });
99
+ child.on("close", (code) => {
100
+ if (this.child !== child) return;
101
+ log.debug(`QMD mcp process exited (code ${code})`);
102
+ this.cleanup({ child });
103
+ });
104
+ } catch (err) {
105
+ log.debug(`QMD mcp: failed to spawn process: ${err}`);
106
+ this.cleanup({ killChild: true });
107
+ return false;
108
+ }
109
+ } else {
110
+ log.debug("QMD mcp: process already running, retrying handshake");
111
+ }
112
+ try {
113
+ const result = await this.sendRequest(
114
+ "initialize",
115
+ {
116
+ protocolVersion: "2024-11-05",
117
+ capabilities: {},
118
+ clientInfo: { name: "openclaw-remnic", version: "1.0.0" }
119
+ },
120
+ 6e4
121
+ );
122
+ if (!result) {
123
+ this.cleanup({ killChild: true });
124
+ return false;
125
+ }
126
+ this.sendNotification("notifications/initialized");
127
+ this.initialized = true;
128
+ log.info("QMD mcp: stdio session initialized");
129
+ return true;
130
+ } catch (err) {
131
+ const msg = err instanceof Error ? err.message : String(err);
132
+ if (isTimeoutMessage(msg)) {
133
+ log.debug("QMD mcp: handshake timed out \u2014 process still loading, will retry later");
134
+ this.initialized = false;
135
+ } else {
136
+ log.debug(`QMD mcp: failed to start stdio session: ${err}`);
137
+ this.cleanup({ killChild: true });
138
+ }
139
+ return false;
140
+ } finally {
141
+ this.startPromise = null;
142
+ }
143
+ })();
144
+ return this.startPromise;
145
+ }
146
+ /** Call an MCP tool and return the parsed result. */
147
+ async callTool(name, args, timeoutMs = 3e4, signal) {
148
+ if (!this.child || this.child.killed || !this.initialized) {
149
+ throw new Error("QMD mcp process not running");
150
+ }
151
+ return this.sendRequest("tools/call", { name, arguments: args }, timeoutMs, signal);
152
+ }
153
+ /** Kill stdio process and clear state so the next probe can restart. */
154
+ invalidate() {
155
+ this.cleanup({ killChild: true });
156
+ }
157
+ /** Kill stdio process and wait briefly for the child handle to close. */
158
+ async close(timeoutMs = 1e3) {
159
+ const target = this.child;
160
+ if (!target) {
161
+ this.cleanup({ killChild: true });
162
+ return;
163
+ }
164
+ let closed = false;
165
+ const closedPromise = new Promise((resolve) => {
166
+ target.once("close", () => {
167
+ closed = true;
168
+ resolve();
169
+ });
170
+ });
171
+ this.cleanup({ killChild: true });
172
+ await Promise.race([closedPromise, sleep(timeoutMs)]);
173
+ if (!closed) {
174
+ try {
175
+ target.kill("SIGKILL");
176
+ } catch {
177
+ }
178
+ await Promise.race([closedPromise, sleep(250)]);
179
+ }
180
+ }
181
+ isActive() {
182
+ return this.child !== null && !this.child.killed && this.initialized;
183
+ }
184
+ /** True while the process is spawned but the MCP handshake has not yet completed. */
185
+ isLoading() {
186
+ return this.child !== null && !this.child.killed && !this.initialized;
187
+ }
188
+ sendRequest(method, params, timeoutMs, signal) {
189
+ return new Promise((resolve, reject) => {
190
+ throwIfAborted(signal, `QMD mcp ${method} aborted before request`);
191
+ if (!this.child || !this.child.stdin || this.child.killed) {
192
+ reject(new Error("QMD mcp process not available"));
193
+ return;
194
+ }
195
+ const id = nextJsonRpcId++;
196
+ let written = false;
197
+ const abandon = (reason) => {
198
+ if (!written || method !== "tools/call") return;
199
+ this.sendNotification("notifications/cancelled", { requestId: id, reason });
200
+ };
201
+ const timer = setTimeout(() => {
202
+ this.pendingRequests.delete(id);
203
+ cleanup();
204
+ const reason = `QMD mcp ${method} timed out after ${timeoutMs}ms`;
205
+ abandon(reason);
206
+ reject(new Error(reason));
207
+ }, timeoutMs);
208
+ const onAbort = () => {
209
+ clearTimeout(timer);
210
+ this.pendingRequests.delete(id);
211
+ cleanup();
212
+ abandon("client aborted");
213
+ reject(abortError(`QMD mcp ${method} aborted`));
214
+ };
215
+ const cleanup = () => {
216
+ signal?.removeEventListener("abort", onAbort);
217
+ };
218
+ this.pendingRequests.set(id, { resolve, reject, timer, cleanup });
219
+ signal?.addEventListener("abort", onAbort, { once: true });
220
+ const message = `${JSON.stringify({ jsonrpc: "2.0", id, method, params })}
221
+ `;
222
+ try {
223
+ this.child.stdin.write(message, (err) => {
224
+ if (!err) return;
225
+ written = false;
226
+ clearTimeout(timer);
227
+ this.pendingRequests.delete(id);
228
+ cleanup();
229
+ reject(new Error(`Failed to write to QMD mcp stdin: ${err.message}`));
230
+ });
231
+ written = true;
232
+ } catch (err) {
233
+ written = false;
234
+ clearTimeout(timer);
235
+ this.pendingRequests.delete(id);
236
+ cleanup();
237
+ const messageText = err instanceof Error ? err.message : String(err);
238
+ reject(new Error(`Failed to write to QMD mcp stdin: ${messageText}`));
239
+ }
240
+ });
241
+ }
242
+ sendNotification(method, params) {
243
+ if (!this.child || !this.child.stdin || this.child.killed) return;
244
+ if (this.child.stdin.destroyed) return;
245
+ const msg = { jsonrpc: "2.0", method };
246
+ if (params) msg.params = params;
247
+ try {
248
+ this.child.stdin.write(`${JSON.stringify(msg)}
249
+ `);
250
+ } catch {
251
+ }
252
+ }
253
+ handleStdoutData(data) {
254
+ this.buffer += data.toString();
255
+ let newlineIdx;
256
+ while ((newlineIdx = this.buffer.indexOf("\n")) !== -1) {
257
+ const line = this.buffer.slice(0, newlineIdx).trim();
258
+ this.buffer = this.buffer.slice(newlineIdx + 1);
259
+ if (!line) continue;
260
+ try {
261
+ const msg = JSON.parse(line);
262
+ this.handleMessage(msg);
263
+ } catch {
264
+ log.debug(`QMD mcp: unparseable stdout: ${sanitizeForLog(line, 200)}`);
265
+ }
266
+ }
267
+ }
268
+ handleMessage(msg) {
269
+ if (msg.id !== void 0 && msg.id !== null) {
270
+ const pending = this.pendingRequests.get(msg.id);
271
+ if (pending) {
272
+ clearTimeout(pending.timer);
273
+ this.pendingRequests.delete(msg.id);
274
+ pending.cleanup();
275
+ if (msg.error) {
276
+ pending.reject(new Error(JSON.stringify(msg.error)));
277
+ } else {
278
+ pending.resolve(msg.result);
279
+ }
280
+ }
281
+ return;
282
+ }
283
+ if (msg.method) {
284
+ log.debug(`QMD mcp notification: ${msg.method}`);
285
+ }
286
+ }
287
+ cleanup(opts) {
288
+ const target = opts?.child ?? this.child;
289
+ if (!target) return;
290
+ if (opts?.child && this.child !== opts.child) {
291
+ return;
292
+ }
293
+ if (opts?.killChild && !target.killed) {
294
+ target.kill("SIGTERM");
295
+ }
296
+ this.initialized = false;
297
+ for (const [, pending] of this.pendingRequests) {
298
+ clearTimeout(pending.timer);
299
+ pending.cleanup();
300
+ pending.reject(new Error("QMD mcp process terminated"));
301
+ }
302
+ this.pendingRequests.clear();
303
+ this.startPromise = null;
304
+ this.child = null;
305
+ this.buffer = "";
306
+ }
307
+ };
308
+
309
+ export {
310
+ QmdDaemonSession
311
+ };
312
+ //# sourceMappingURL=chunk-IM2GO42H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/qmd-daemon-session.ts"],"sourcesContent":["import { abortError, throwIfAborted } from \"./abort-error.js\";\nimport { log } from \"./logger.js\";\nimport { type CommandChildProcess, launchProcess } from \"./runtime/child-process.js\";\nimport { mergeEnv } from \"./runtime/env.js\";\n\nexport type QmdRuntimeEnv = Record<string, string | undefined>;\n\nexport type QmdDaemonSpawn = (\n command: string,\n args: string[],\n options?: Record<string, unknown>\n) => CommandChildProcess;\n\ntype PendingRequest = {\n resolve: (value: unknown) => void;\n reject: (reason: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n cleanup: () => void;\n};\n\nlet nextJsonRpcId = 1;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Drop C0 controls and one ANSI CSI sequence. Char scan on purpose:\n * the regex-safety ratchet flags new regular expressions on changed lines.\n */\nfunction sanitizeForLog(value: string, max = 200): string {\n let out = \"\";\n const cap = Math.min(value.length, max);\n for (let i = 0; i < cap; i++) {\n const code = value.charCodeAt(i);\n if (code === 0x1b && value.charCodeAt(i + 1) === 0x5b) {\n i += 2;\n while (i < cap) {\n const next = value.charCodeAt(i);\n const isLetter = (next >= 65 && next <= 90) || (next >= 97 && next <= 122);\n if (isLetter) break;\n i += 1;\n }\n continue;\n }\n if (code < 0x20 || code === 0x7f) continue;\n out += value[i] ?? \"\";\n }\n if (value.length > max) return `${out}…(truncated)`;\n return out;\n}\n\nfunction isTimeoutMessage(message: string): boolean {\n return message.toLowerCase().includes(\"timed out\");\n}\n\n/**\n * One `qmd mcp` child and its JSON-RPC session.\n *\n * Aborting or timing out a `tools/call` writes MCP `notifications/cancelled`\n * and rejects the caller immediately. The SDK drops the tool result once the\n * server's request controller is aborted, so this session does not wait for\n * a response after cancel. The initialize handshake is not cancelled: a slow\n * model load is supposed to stay alive for the next probe.\n *\n * The child is not killed on cancel. Reloading the rerank model costs longer\n * than the recall budget, and a slow query would then take the warm process\n * down on every timeout.\n */\nexport class QmdDaemonSession {\n private child: CommandChildProcess | null = null;\n private initialized = false;\n private buffer = \"\";\n private startPromise: Promise<boolean> | null = null;\n private pendingRequests = new Map<number, PendingRequest>();\n private readonly qmdPath: string;\n private readonly runtimeEnv: QmdRuntimeEnv;\n private readonly indexName?: string;\n private readonly spawn: QmdDaemonSpawn;\n\n constructor(\n qmdPath: string,\n runtimeEnv: QmdRuntimeEnv = {},\n indexName?: string,\n spawn: QmdDaemonSpawn = launchProcess\n ) {\n this.qmdPath = qmdPath;\n this.runtimeEnv = runtimeEnv;\n this.indexName = indexName?.trim() || undefined;\n this.spawn = spawn;\n }\n\n /** Spawn the qmd mcp child process and perform MCP handshake. */\n async start(): Promise<boolean> {\n if (this.child && !this.child.killed && this.initialized) {\n return true;\n }\n if (this.startPromise) {\n return this.startPromise;\n }\n this.startPromise = (async () => {\n const processAlreadyRunning = this.child != null && !this.child.killed;\n if (!processAlreadyRunning) {\n if (this.child) {\n this.cleanup({ killChild: true });\n }\n try {\n const args = this.indexName ? [\"--index\", this.indexName, \"mcp\"] : [\"mcp\"];\n const child = this.spawn(this.qmdPath, args, {\n env: mergeEnv({ NO_COLOR: \"1\", ...this.runtimeEnv }),\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n this.child = child;\n this.buffer = \"\";\n\n child.stdout?.on(\"data\", (data: Buffer) => {\n if (this.child !== child) return;\n this.handleStdoutData(data);\n });\n child.stderr?.on(\"data\", (data: Buffer) => {\n if (this.child !== child) return;\n const msg = data.toString().trim();\n if (msg) log.debug(`QMD mcp stderr: ${sanitizeForLog(msg)}`);\n });\n child.stdin?.on(\"error\", (err) => {\n log.debug(`QMD mcp stdin error (suppressed): ${err.message}`);\n });\n child.on(\"error\", (err) => {\n if (this.child !== child) return;\n log.debug(`QMD mcp process error: ${err.message}`);\n this.cleanup({ child });\n });\n child.on(\"close\", (code) => {\n if (this.child !== child) return;\n log.debug(`QMD mcp process exited (code ${code})`);\n this.cleanup({ child });\n });\n } catch (err) {\n log.debug(`QMD mcp: failed to spawn process: ${err}`);\n this.cleanup({ killChild: true });\n return false;\n }\n } else {\n log.debug(\"QMD mcp: process already running, retrying handshake\");\n }\n\n try {\n const result = await this.sendRequest(\n \"initialize\",\n {\n protocolVersion: \"2024-11-05\",\n capabilities: {},\n clientInfo: { name: \"openclaw-remnic\", version: \"1.0.0\" },\n },\n 60_000\n );\n if (!result) {\n this.cleanup({ killChild: true });\n return false;\n }\n this.sendNotification(\"notifications/initialized\");\n this.initialized = true;\n log.info(\"QMD mcp: stdio session initialized\");\n return true;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (isTimeoutMessage(msg)) {\n log.debug(\"QMD mcp: handshake timed out — process still loading, will retry later\");\n this.initialized = false;\n } else {\n log.debug(`QMD mcp: failed to start stdio session: ${err}`);\n this.cleanup({ killChild: true });\n }\n return false;\n } finally {\n this.startPromise = null;\n }\n })();\n return this.startPromise;\n }\n\n /** Call an MCP tool and return the parsed result. */\n async callTool(\n name: string,\n args: Record<string, unknown>,\n timeoutMs = 30_000,\n signal?: AbortSignal\n ): Promise<unknown> {\n if (!this.child || this.child.killed || !this.initialized) {\n throw new Error(\"QMD mcp process not running\");\n }\n return this.sendRequest(\"tools/call\", { name, arguments: args }, timeoutMs, signal);\n }\n\n /** Kill stdio process and clear state so the next probe can restart. */\n invalidate(): void {\n this.cleanup({ killChild: true });\n }\n\n /** Kill stdio process and wait briefly for the child handle to close. */\n async close(timeoutMs = 1_000): Promise<void> {\n const target = this.child;\n if (!target) {\n this.cleanup({ killChild: true });\n return;\n }\n\n let closed = false;\n const closedPromise = new Promise<void>((resolve) => {\n target.once(\"close\", () => {\n closed = true;\n resolve();\n });\n });\n\n this.cleanup({ killChild: true });\n await Promise.race([closedPromise, sleep(timeoutMs)]);\n if (!closed) {\n try {\n target.kill(\"SIGKILL\");\n } catch {\n // Ignore process-kill races during shutdown.\n }\n await Promise.race([closedPromise, sleep(250)]);\n }\n }\n\n isActive(): boolean {\n return this.child !== null && !this.child.killed && this.initialized;\n }\n\n /** True while the process is spawned but the MCP handshake has not yet completed. */\n isLoading(): boolean {\n return this.child !== null && !this.child.killed && !this.initialized;\n }\n\n private sendRequest(\n method: string,\n params: Record<string, unknown>,\n timeoutMs: number,\n signal?: AbortSignal\n ): Promise<unknown> {\n return new Promise((resolve, reject) => {\n throwIfAborted(signal, `QMD mcp ${method} aborted before request`);\n if (!this.child || !this.child.stdin || this.child.killed) {\n reject(new Error(\"QMD mcp process not available\"));\n return;\n }\n\n const id = nextJsonRpcId++;\n let written = false;\n const abandon = (reason: string) => {\n // Only a tool call that actually went out can be holding the worker.\n // initialize stays running across a slow model load.\n if (!written || method !== \"tools/call\") return;\n this.sendNotification(\"notifications/cancelled\", { requestId: id, reason });\n };\n const timer = setTimeout(() => {\n this.pendingRequests.delete(id);\n cleanup();\n const reason = `QMD mcp ${method} timed out after ${timeoutMs}ms`;\n abandon(reason);\n reject(new Error(reason));\n }, timeoutMs);\n const onAbort = () => {\n clearTimeout(timer);\n this.pendingRequests.delete(id);\n cleanup();\n abandon(\"client aborted\");\n reject(abortError(`QMD mcp ${method} aborted`));\n };\n const cleanup = () => {\n signal?.removeEventListener(\"abort\", onAbort);\n };\n\n this.pendingRequests.set(id, { resolve, reject, timer, cleanup });\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n const message = `${JSON.stringify({ jsonrpc: \"2.0\", id, method, params })}\\n`;\n try {\n this.child.stdin.write(message, (err) => {\n if (!err) return;\n written = false;\n clearTimeout(timer);\n this.pendingRequests.delete(id);\n cleanup();\n reject(new Error(`Failed to write to QMD mcp stdin: ${err.message}`));\n });\n written = true;\n } catch (err) {\n written = false;\n clearTimeout(timer);\n this.pendingRequests.delete(id);\n cleanup();\n const messageText = err instanceof Error ? err.message : String(err);\n reject(new Error(`Failed to write to QMD mcp stdin: ${messageText}`));\n }\n });\n }\n\n private sendNotification(method: string, params?: Record<string, unknown>): void {\n if (!this.child || !this.child.stdin || this.child.killed) return;\n if (this.child.stdin.destroyed) return;\n const msg: Record<string, unknown> = { jsonrpc: \"2.0\", method };\n if (params) msg.params = params;\n try {\n this.child.stdin.write(`${JSON.stringify(msg)}\\n`);\n } catch {\n // Ignore EPIPE / write-after-close\n }\n }\n\n private handleStdoutData(data: Buffer | string): void {\n this.buffer += data.toString();\n let newlineIdx: number;\n // Re-evaluated on every pass so a blank line cannot leave a stale index.\n while ((newlineIdx = this.buffer.indexOf(\"\\n\")) !== -1) {\n const line = this.buffer.slice(0, newlineIdx).trim();\n this.buffer = this.buffer.slice(newlineIdx + 1);\n if (!line) continue;\n try {\n const msg = JSON.parse(line) as Record<string, unknown>;\n this.handleMessage(msg);\n } catch {\n log.debug(`QMD mcp: unparseable stdout: ${sanitizeForLog(line, 200)}`);\n }\n }\n }\n\n private handleMessage(msg: Record<string, unknown>): void {\n if (msg.id !== undefined && msg.id !== null) {\n const pending = this.pendingRequests.get(msg.id as number);\n if (pending) {\n clearTimeout(pending.timer);\n this.pendingRequests.delete(msg.id as number);\n pending.cleanup();\n if (msg.error) {\n pending.reject(new Error(JSON.stringify(msg.error)));\n } else {\n pending.resolve(msg.result);\n }\n }\n return;\n }\n if (msg.method) {\n log.debug(`QMD mcp notification: ${msg.method}`);\n }\n }\n\n private cleanup(opts?: { killChild?: boolean; child?: CommandChildProcess | null }): void {\n const target = opts?.child ?? this.child;\n if (!target) return;\n if (opts?.child && this.child !== opts.child) {\n return;\n }\n if (opts?.killChild && !target.killed) {\n target.kill(\"SIGTERM\");\n }\n this.initialized = false;\n for (const [, pending] of this.pendingRequests) {\n clearTimeout(pending.timer);\n pending.cleanup();\n pending.reject(new Error(\"QMD mcp process terminated\"));\n }\n this.pendingRequests.clear();\n this.startPromise = null;\n this.child = null;\n this.buffer = \"\";\n }\n}\n"],"mappings":"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","names":[]}
@@ -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,9 +16,6 @@ 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
21
  } from "./chunk-TFA6HPOA.js";
@@ -24,7 +24,7 @@ import {
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-JLUS56YZ.js.map
@@ -4,14 +4,14 @@ import {
4
4
 
5
5
  // src/config-qmd.ts
6
6
  function parseQmdSupportedVersion(value) {
7
- if (value === void 0 || value === null) return "2.5.3";
7
+ if (value === void 0 || value === null) return "2.8.3";
8
8
  if (typeof value !== "string") {
9
9
  throw new Error(`qmdSupportedVersion must be a semantic version string; got ${JSON.stringify(value)}`);
10
10
  }
11
11
  const normalized = value.trim();
12
12
  if (!/^\d+\.\d+\.\d+$/.test(normalized)) {
13
13
  throw new Error(
14
- `qmdSupportedVersion must be a semantic version string like "2.5.3"; got ${JSON.stringify(value)}`
14
+ `qmdSupportedVersion must be a semantic version string like "2.8.3"; got ${JSON.stringify(value)}`
15
15
  );
16
16
  }
17
17
  return normalized;
@@ -84,4 +84,4 @@ export {
84
84
  parseQmdDaemonTimeoutMs,
85
85
  parseQmdSubprocessStrategy
86
86
  };
87
- //# sourceMappingURL=chunk-UHESJ6TQ.js.map
87
+ //# sourceMappingURL=chunk-KEGUXZNY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config-qmd.ts"],"sourcesContent":["import { coerceNumber } from \"./connectors/coerce.js\";\n\nexport function parseQmdSupportedVersion(value: unknown): string {\n if (value === undefined || value === null) return \"2.5.3\";\n if (typeof value !== \"string\") {\n throw new Error(`qmdSupportedVersion must be a semantic version string; got ${JSON.stringify(value)}`);\n }\n const normalized = value.trim();\n if (!/^\\d+\\.\\d+\\.\\d+$/.test(normalized)) {\n throw new Error(\n `qmdSupportedVersion must be a semantic version string like \"2.5.3\"; got ${JSON.stringify(value)}`,\n );\n }\n return normalized;\n}\n\nexport function parseQmdGpuBackend(value: unknown): \"auto\" | \"metal\" | \"cuda\" | \"vulkan\" | \"false\" | undefined {\n if (value === undefined || value === null) return undefined;\n if (value === false) return \"false\";\n if (typeof value !== \"string\") {\n throw new Error(`qmdGpuBackend must be one of \"auto\", \"metal\", \"cuda\", \"vulkan\", or false; got ${JSON.stringify(value)}`);\n }\n const normalized = value.trim().toLowerCase();\n if (\n normalized === \"auto\" ||\n normalized === \"metal\" ||\n normalized === \"cuda\" ||\n normalized === \"vulkan\" ||\n normalized === \"false\"\n ) {\n return normalized;\n }\n throw new Error(`qmdGpuBackend must be one of \"auto\", \"metal\", \"cuda\", \"vulkan\", or false; got ${JSON.stringify(value)}`);\n}\n\nexport function parseQmdChunkStrategy(value: unknown): \"auto\" | \"regex\" {\n if (value === undefined || value === null) return \"auto\";\n if (typeof value !== \"string\") {\n throw new Error(`qmdChunkStrategy must be \"auto\" or \"regex\"; got ${JSON.stringify(value)}`);\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"auto\" || normalized === \"regex\") return normalized;\n throw new Error(`qmdChunkStrategy must be \"auto\" or \"regex\"; got ${JSON.stringify(value)}`);\n}\n\n// Issue #1335. Default \"hybrid\" preserves the historical lex+vec+hyde daemon plan.\nexport function parseQmdSearchStrategy(value: unknown): \"hybrid\" | \"lex-vec\" | \"lex\" {\n if (value === undefined || value === null) return \"hybrid\";\n if (typeof value !== \"string\") {\n throw new Error(\n `qmdSearchStrategy must be one of \"hybrid\", \"lex-vec\", or \"lex\"; got ${JSON.stringify(value)}`,\n );\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"hybrid\" || normalized === \"lex-vec\" || normalized === \"lex\") {\n return normalized;\n }\n throw new Error(\n `qmdSearchStrategy must be one of \"hybrid\", \"lex-vec\", or \"lex\"; got ${JSON.stringify(value)}`,\n );\n}\n\n// Issue #1335. Reject non-numeric / non-integer timeouts rather than silently\n// coercing them (gotcha #51), then clamp valid integers to the documented bounds.\nexport function parseQmdDaemonTimeoutMs(value: unknown): number {\n if (value === undefined || value === null) return 60_000;\n const coerced = coerceNumber(value);\n if (coerced === undefined || !Number.isInteger(coerced)) {\n throw new Error(\n `qmdDaemonTimeoutMs must be an integer number of milliseconds between 1000 and 120000; got ${JSON.stringify(value)}`,\n );\n }\n return Math.min(120_000, Math.max(1_000, coerced));\n}\n\n// Issue #1335. Default \"query\" keeps `qmd query` (LLM expansion + rerank) per gotcha #7.\nexport function parseQmdSubprocessStrategy(value: unknown): \"query\" | \"search\" {\n if (value === undefined || value === null) return \"query\";\n if (typeof value !== \"string\") {\n throw new Error(\n `qmdSubprocessStrategy must be one of \"query\" or \"search\"; got ${JSON.stringify(value)}`,\n );\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"query\" || normalized === \"search\") return normalized;\n throw new Error(\n `qmdSubprocessStrategy must be one of \"query\" or \"search\"; got ${JSON.stringify(value)}`,\n );\n}\n"],"mappings":";;;;;AAEO,SAAS,yBAAyB,OAAwB;AAC/D,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,MAAM,8DAA8D,KAAK,UAAU,KAAK,CAAC,EAAE;AAAA,EACvG;AACA,QAAM,aAAa,MAAM,KAAK;AAC9B,MAAI,CAAC,kBAAkB,KAAK,UAAU,GAAG;AACvC,UAAM,IAAI;AAAA,MACR,2EAA2E,KAAK,UAAU,KAAK,CAAC;AAAA,IAClG;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,mBAAmB,OAA4E;AAC7G,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,UAAU,MAAO,QAAO;AAC5B,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,MAAM,iFAAiF,KAAK,UAAU,KAAK,CAAC,EAAE;AAAA,EAC1H;AACA,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MACE,eAAe,UACf,eAAe,WACf,eAAe,UACf,eAAe,YACf,eAAe,SACf;AACA,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,iFAAiF,KAAK,UAAU,KAAK,CAAC,EAAE;AAC1H;AAEO,SAAS,sBAAsB,OAAkC;AACtE,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,MAAM,mDAAmD,KAAK,UAAU,KAAK,CAAC,EAAE;AAAA,EAC5F;AACA,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MAAI,eAAe,UAAU,eAAe,QAAS,QAAO;AAC5D,QAAM,IAAI,MAAM,mDAAmD,KAAK,UAAU,KAAK,CAAC,EAAE;AAC5F;AAGO,SAAS,uBAAuB,OAA8C;AACnF,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI;AAAA,MACR,uEAAuE,KAAK,UAAU,KAAK,CAAC;AAAA,IAC9F;AAAA,EACF;AACA,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MAAI,eAAe,YAAY,eAAe,aAAa,eAAe,OAAO;AAC/E,WAAO;AAAA,EACT;AACA,QAAM,IAAI;AAAA,IACR,uEAAuE,KAAK,UAAU,KAAK,CAAC;AAAA,EAC9F;AACF;AAIO,SAAS,wBAAwB,OAAwB;AAC9D,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,QAAM,UAAU,aAAa,KAAK;AAClC,MAAI,YAAY,UAAa,CAAC,OAAO,UAAU,OAAO,GAAG;AACvD,UAAM,IAAI;AAAA,MACR,6FAA6F,KAAK,UAAU,KAAK,CAAC;AAAA,IACpH;AAAA,EACF;AACA,SAAO,KAAK,IAAI,MAAS,KAAK,IAAI,KAAO,OAAO,CAAC;AACnD;AAGO,SAAS,2BAA2B,OAAoC;AAC7E,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI;AAAA,MACR,iEAAiE,KAAK,UAAU,KAAK,CAAC;AAAA,IACxF;AAAA,EACF;AACA,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MAAI,eAAe,WAAW,eAAe,SAAU,QAAO;AAC9D,QAAM,IAAI;AAAA,IACR,iEAAiE,KAAK,UAAU,KAAK,CAAC;AAAA,EACxF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/config-qmd.ts"],"sourcesContent":["import { coerceNumber } from \"./connectors/coerce.js\";\n\nexport function parseQmdSupportedVersion(value: unknown): string {\n if (value === undefined || value === null) return \"2.8.3\";\n if (typeof value !== \"string\") {\n throw new Error(`qmdSupportedVersion must be a semantic version string; got ${JSON.stringify(value)}`);\n }\n const normalized = value.trim();\n if (!/^\\d+\\.\\d+\\.\\d+$/.test(normalized)) {\n throw new Error(\n `qmdSupportedVersion must be a semantic version string like \"2.8.3\"; got ${JSON.stringify(value)}`,\n );\n }\n return normalized;\n}\n\nexport function parseQmdGpuBackend(value: unknown): \"auto\" | \"metal\" | \"cuda\" | \"vulkan\" | \"false\" | undefined {\n if (value === undefined || value === null) return undefined;\n if (value === false) return \"false\";\n if (typeof value !== \"string\") {\n throw new Error(`qmdGpuBackend must be one of \"auto\", \"metal\", \"cuda\", \"vulkan\", or false; got ${JSON.stringify(value)}`);\n }\n const normalized = value.trim().toLowerCase();\n if (\n normalized === \"auto\" ||\n normalized === \"metal\" ||\n normalized === \"cuda\" ||\n normalized === \"vulkan\" ||\n normalized === \"false\"\n ) {\n return normalized;\n }\n throw new Error(`qmdGpuBackend must be one of \"auto\", \"metal\", \"cuda\", \"vulkan\", or false; got ${JSON.stringify(value)}`);\n}\n\nexport function parseQmdChunkStrategy(value: unknown): \"auto\" | \"regex\" {\n if (value === undefined || value === null) return \"auto\";\n if (typeof value !== \"string\") {\n throw new Error(`qmdChunkStrategy must be \"auto\" or \"regex\"; got ${JSON.stringify(value)}`);\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"auto\" || normalized === \"regex\") return normalized;\n throw new Error(`qmdChunkStrategy must be \"auto\" or \"regex\"; got ${JSON.stringify(value)}`);\n}\n\n// Issue #1335. Default \"hybrid\" preserves the historical lex+vec+hyde daemon plan.\nexport function parseQmdSearchStrategy(value: unknown): \"hybrid\" | \"lex-vec\" | \"lex\" {\n if (value === undefined || value === null) return \"hybrid\";\n if (typeof value !== \"string\") {\n throw new Error(\n `qmdSearchStrategy must be one of \"hybrid\", \"lex-vec\", or \"lex\"; got ${JSON.stringify(value)}`,\n );\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"hybrid\" || normalized === \"lex-vec\" || normalized === \"lex\") {\n return normalized;\n }\n throw new Error(\n `qmdSearchStrategy must be one of \"hybrid\", \"lex-vec\", or \"lex\"; got ${JSON.stringify(value)}`,\n );\n}\n\n// Issue #1335. Reject non-numeric / non-integer timeouts rather than silently\n// coercing them (gotcha #51), then clamp valid integers to the documented bounds.\nexport function parseQmdDaemonTimeoutMs(value: unknown): number {\n if (value === undefined || value === null) return 60_000;\n const coerced = coerceNumber(value);\n if (coerced === undefined || !Number.isInteger(coerced)) {\n throw new Error(\n `qmdDaemonTimeoutMs must be an integer number of milliseconds between 1000 and 120000; got ${JSON.stringify(value)}`,\n );\n }\n return Math.min(120_000, Math.max(1_000, coerced));\n}\n\n// Issue #1335. Default \"query\" keeps `qmd query` (LLM expansion + rerank) per gotcha #7.\nexport function parseQmdSubprocessStrategy(value: unknown): \"query\" | \"search\" {\n if (value === undefined || value === null) return \"query\";\n if (typeof value !== \"string\") {\n throw new Error(\n `qmdSubprocessStrategy must be one of \"query\" or \"search\"; got ${JSON.stringify(value)}`,\n );\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"query\" || normalized === \"search\") return normalized;\n throw new Error(\n `qmdSubprocessStrategy must be one of \"query\" or \"search\"; got ${JSON.stringify(value)}`,\n );\n}\n"],"mappings":";;;;;AAEO,SAAS,yBAAyB,OAAwB;AAC/D,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,MAAM,8DAA8D,KAAK,UAAU,KAAK,CAAC,EAAE;AAAA,EACvG;AACA,QAAM,aAAa,MAAM,KAAK;AAC9B,MAAI,CAAC,kBAAkB,KAAK,UAAU,GAAG;AACvC,UAAM,IAAI;AAAA,MACR,2EAA2E,KAAK,UAAU,KAAK,CAAC;AAAA,IAClG;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,mBAAmB,OAA4E;AAC7G,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,UAAU,MAAO,QAAO;AAC5B,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,MAAM,iFAAiF,KAAK,UAAU,KAAK,CAAC,EAAE;AAAA,EAC1H;AACA,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MACE,eAAe,UACf,eAAe,WACf,eAAe,UACf,eAAe,YACf,eAAe,SACf;AACA,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,iFAAiF,KAAK,UAAU,KAAK,CAAC,EAAE;AAC1H;AAEO,SAAS,sBAAsB,OAAkC;AACtE,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,MAAM,mDAAmD,KAAK,UAAU,KAAK,CAAC,EAAE;AAAA,EAC5F;AACA,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MAAI,eAAe,UAAU,eAAe,QAAS,QAAO;AAC5D,QAAM,IAAI,MAAM,mDAAmD,KAAK,UAAU,KAAK,CAAC,EAAE;AAC5F;AAGO,SAAS,uBAAuB,OAA8C;AACnF,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI;AAAA,MACR,uEAAuE,KAAK,UAAU,KAAK,CAAC;AAAA,IAC9F;AAAA,EACF;AACA,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MAAI,eAAe,YAAY,eAAe,aAAa,eAAe,OAAO;AAC/E,WAAO;AAAA,EACT;AACA,QAAM,IAAI;AAAA,IACR,uEAAuE,KAAK,UAAU,KAAK,CAAC;AAAA,EAC9F;AACF;AAIO,SAAS,wBAAwB,OAAwB;AAC9D,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,QAAM,UAAU,aAAa,KAAK;AAClC,MAAI,YAAY,UAAa,CAAC,OAAO,UAAU,OAAO,GAAG;AACvD,UAAM,IAAI;AAAA,MACR,6FAA6F,KAAK,UAAU,KAAK,CAAC;AAAA,IACpH;AAAA,EACF;AACA,SAAO,KAAK,IAAI,MAAS,KAAK,IAAI,KAAO,OAAO,CAAC;AACnD;AAGO,SAAS,2BAA2B,OAAoC;AAC7E,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI;AAAA,MACR,iEAAiE,KAAK,UAAU,KAAK,CAAC;AAAA,IACxF;AAAA,EACF;AACA,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MAAI,eAAe,WAAW,eAAe,SAAU,QAAO;AAC9D,QAAM,IAAI;AAAA,IACR,iEAAiE,KAAK,UAAU,KAAK,CAAC;AAAA,EACxF;AACF;","names":[]}
@@ -2,7 +2,7 @@ import {
2
2
  WHO_KNOWS_DEFAULT_LIMIT,
3
3
  WHO_KNOWS_MAX_LIMIT,
4
4
  validateWhoKnowsInput
5
- } from "./chunk-T6RQNV7E.js";
5
+ } from "./chunk-MJ737UIA.js";
6
6
 
7
7
  // src/who-knows-cli.ts
8
8
  function extractWhoKnowsRawArgs(rest) {
@@ -74,4 +74,4 @@ export {
74
74
  renderWhoKnowsText,
75
75
  renderWhoKnows
76
76
  };
77
- //# sourceMappingURL=chunk-J3ZJBX7I.js.map
77
+ //# sourceMappingURL=chunk-KM2HQZR3.js.map
@@ -1,6 +1,3 @@
1
- import {
2
- startLocationAutoSync
3
- } from "./chunk-LXJZUNLX.js";
4
1
  import {
5
2
  ensureContradictionScanCron,
6
3
  ensureDaySummaryCron,
@@ -10,16 +7,19 @@ import {
10
7
  ensureProceduralMiningCron,
11
8
  graphEdgeDecayCadenceToCronExpr
12
9
  } from "./chunk-666A3MOW.js";
10
+ import {
11
+ startLocationAutoSync
12
+ } from "./chunk-QHHWJVVW.js";
13
13
  import {
14
14
  rebuildMemoryLifecycleLedger
15
- } from "./chunk-T32YYUT2.js";
15
+ } from "./chunk-FB6FQT4P.js";
16
16
  import {
17
17
  planNamespaceMaintenance,
18
18
  runNamespaceMaintenanceBatchPlan
19
- } from "./chunk-JRDL3FGM.js";
19
+ } from "./chunk-YY5FM5M7.js";
20
20
  import {
21
21
  rebuildMemoryProjection
22
- } from "./chunk-XLWMNDQR.js";
22
+ } from "./chunk-QJWZJ7HL.js";
23
23
  import {
24
24
  DEFAULT_TIMELINE_CATEGORIES,
25
25
  TIMELINE_RESERVED_IDLE,
@@ -2450,4 +2450,4 @@ export {
2450
2450
  ActivitySyncScheduler,
2451
2451
  MaintenanceScheduler
2452
2452
  };
2453
- //# sourceMappingURL=chunk-2MMBJE53.js.map
2453
+ //# sourceMappingURL=chunk-LI3OM3NP.js.map
@@ -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
  StorageManager
3
- } from "./chunk-E4XLFYHV.js";
3
+ } from "./chunk-HPEONBM3.js";
4
4
  import {
5
5
  keyring_exports,
6
6
  secureStoreDir
@@ -412,4 +412,4 @@ export {
412
412
  resolveNamespaceStorageRoot,
413
413
  NamespaceStorageRouter
414
414
  };
415
- //# sourceMappingURL=chunk-KMN2JE4D.js.map
415
+ //# sourceMappingURL=chunk-LTDWZ2HC.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseEntityFile
3
- } from "./chunk-E4XLFYHV.js";
3
+ } from "./chunk-HPEONBM3.js";
4
4
  import {
5
5
  inferMemoryStatus
6
6
  } from "./chunk-7RJUVTVF.js";
@@ -253,4 +253,4 @@ export {
253
253
  WHO_KNOWS_MCP_TOOLS,
254
254
  handleWhoKnowsHttpQuery
255
255
  };
256
- //# sourceMappingURL=chunk-T6RQNV7E.js.map
256
+ //# sourceMappingURL=chunk-MJ737UIA.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
@@ -3,7 +3,7 @@ import {
3
3
  readNamespaceMaintenanceLastRanStatuses,
4
4
  readNamespaceMaintenanceStatuses,
5
5
  runNamespaceMaintenancePlan
6
- } from "./chunk-JRDL3FGM.js";
6
+ } from "./chunk-YY5FM5M7.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-YX5F4V7H.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-SFDKLEIY.js";
45
45
  import {
46
46
  listMemoryGovernanceRuns,
47
47
  readMemoryGovernanceRunArtifact
48
- } from "./chunk-VO2BNAA2.js";
48
+ } from "./chunk-PXDEIJL5.js";
49
49
  import {
50
50
  listNamespaces
51
- } from "./chunk-73R4HOOK.js";
51
+ } from "./chunk-QPG72IPU.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-HPEONBM3.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-NVZRIHW5.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
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-TBBDFYXW.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-E4XLFYHV.js";
6
+ } from "./chunk-HPEONBM3.js";
7
7
  import {
8
8
  bumpMemoryCorpusVersionForDir
9
9
  } from "./chunk-M5GVCJSJ.js";
@@ -765,4 +765,4 @@ export {
765
765
  listMemoryGovernanceRuns,
766
766
  readMemoryGovernanceRunArtifact
767
767
  };
768
- //# sourceMappingURL=chunk-VO2BNAA2.js.map
768
+ //# sourceMappingURL=chunk-PXDEIJL5.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runLocationSync
3
- } from "./chunk-PQ7EB5AD.js";
3
+ } from "./chunk-S3BB34NI.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-QHHWJVVW.js.map