@remnic/core 10.0.76 → 10.0.78

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 (249) hide show
  1. package/dist/access-admin-ops-surface.js +27 -27
  2. package/dist/access-authorization-probe.js +28 -28
  3. package/dist/access-boundary.js +27 -27
  4. package/dist/access-cli.js +78 -77
  5. package/dist/access-cli.js.map +1 -1
  6. package/dist/access-extraction-force-flush.js +27 -27
  7. package/dist/access-http-briefing.js +28 -28
  8. package/dist/access-http-query.js +29 -29
  9. package/dist/access-http.js +45 -45
  10. package/dist/access-identity-continuity-surface.js +27 -27
  11. package/dist/access-lcm-surface.js +27 -27
  12. package/dist/access-mcp.js +37 -37
  13. package/dist/access-namespace-preflight.js +27 -27
  14. package/dist/access-observe-helpers.d.ts.map +1 -1
  15. package/dist/access-observe-helpers.js +1 -1
  16. package/dist/access-observe-write-category.js +5 -5
  17. package/dist/access-observe-write-surface.js +27 -27
  18. package/dist/access-operations-batch.js +29 -29
  19. package/dist/access-operations.js +36 -36
  20. package/dist/access-recall-concurrency.js +27 -27
  21. package/dist/access-recall-response.js +27 -27
  22. package/dist/access-recall-surface.js +27 -27
  23. package/dist/access-schema.js +4 -4
  24. package/dist/access-service.js +27 -27
  25. package/dist/access-surface-catalog.js +29 -29
  26. package/dist/active-recall.js +7 -7
  27. package/dist/briefing.js +8 -8
  28. package/dist/calibration.js +1 -1
  29. package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
  30. package/dist/causal-consolidation.js +9 -9
  31. package/dist/{chunk-Z3CKK5RR.js → chunk-2XG7QECM.js} +3 -3
  32. package/dist/{chunk-BZTA7DR4.js → chunk-35RSL5B4.js} +3 -3
  33. package/dist/{chunk-3GGCMRO7.js → chunk-3RYP4OTZ.js} +2 -2
  34. package/dist/{chunk-VEQVXNWR.js → chunk-446H5UUO.js} +4 -4
  35. package/dist/{chunk-XC7OYOQC.js → chunk-4BCX6YLW.js} +2 -2
  36. package/dist/{chunk-RXGFITWS.js → chunk-4HLPFYF2.js} +7 -7
  37. package/dist/{chunk-WIAXVBQH.js → chunk-65SKM4BF.js} +2 -2
  38. package/dist/{chunk-VEWTHVX2.js → chunk-6HERQLF4.js} +2 -2
  39. package/dist/{chunk-4DLZ2ITE.js → chunk-6OGFQ5GH.js} +2 -2
  40. package/dist/{chunk-C44DRDZM.js → chunk-6WULHFNJ.js} +2 -2
  41. package/dist/{chunk-IVXOYE43.js → chunk-7IQ5HYBJ.js} +2 -2
  42. package/dist/{chunk-SZBZOUHR.js → chunk-A45ZOJV4.js} +2 -2
  43. package/dist/chunk-ADJXJKU6.js +74 -0
  44. package/dist/chunk-ADJXJKU6.js.map +1 -0
  45. package/dist/{chunk-DANFOVQG.js → chunk-B7PLF3HW.js} +2 -2
  46. package/dist/{chunk-PBE7NFB5.js → chunk-BNQJKWWZ.js} +4 -4
  47. package/dist/{chunk-AY2UK5XK.js → chunk-BSBGI4BD.js} +2 -2
  48. package/dist/{chunk-AY2UK5XK.js.map → chunk-BSBGI4BD.js.map} +1 -1
  49. package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
  50. package/dist/{chunk-IPHIIRDN.js → chunk-CYTTY4M2.js} +5 -7
  51. package/dist/chunk-CYTTY4M2.js.map +1 -0
  52. package/dist/{chunk-R24RYSQX.js → chunk-CZD654DQ.js} +22 -22
  53. package/dist/{chunk-MBENRPMY.js → chunk-D3WNJF7D.js} +12 -12
  54. package/dist/{chunk-5IQL4N37.js → chunk-D4WBMLPD.js} +2 -2
  55. package/dist/{chunk-FYQUUIPI.js → chunk-DLZGSZVC.js} +4 -4
  56. package/dist/{chunk-YK6SFDP2.js → chunk-DOJBV6WR.js} +4 -4
  57. package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
  58. package/dist/{chunk-FETPTCQZ.js → chunk-E33UJHY3.js} +2 -2
  59. package/dist/{chunk-LJUQPT5G.js → chunk-EFRMEOZQ.js} +3 -3
  60. package/dist/{chunk-HTDXNIO6.js → chunk-HK3CUTAG.js} +2 -2
  61. package/dist/{chunk-FGUWCE5I.js → chunk-HUF4S4MY.js} +2 -2
  62. package/dist/{chunk-6Q6AQ36B.js → chunk-HWHNQVRV.js} +2 -2
  63. package/dist/{chunk-SYDPJUFR.js → chunk-IDGCL5OP.js} +2 -2
  64. package/dist/{chunk-F3FNXE7C.js → chunk-JHJP2IAU.js} +3 -3
  65. package/dist/{chunk-IBQ7LGUJ.js → chunk-JIGHVQF6.js} +6 -6
  66. package/dist/{chunk-P7HNMNN2.js → chunk-K4SVTZWP.js} +7 -7
  67. package/dist/{chunk-KAED7IBB.js → chunk-KDWO22ZK.js} +2 -2
  68. package/dist/{chunk-N6GEGRCT.js → chunk-KYVBGDGA.js} +2 -2
  69. package/dist/{chunk-HB5TNQMM.js → chunk-L7BOS7KV.js} +2 -2
  70. package/dist/{chunk-3MBSD53O.js → chunk-LE4MQ2WF.js} +2 -2
  71. package/dist/{chunk-I4LJJ44E.js → chunk-LNHBYT3F.js} +2 -2
  72. package/dist/{chunk-SHVLNI4L.js → chunk-LU66I56Q.js} +2 -2
  73. package/dist/{chunk-TD5VTVPT.js → chunk-N2H6VC65.js} +3 -3
  74. package/dist/{chunk-L4QYW2HO.js → chunk-NBFHOQIO.js} +2 -2
  75. package/dist/{chunk-KNZDGZSY.js → chunk-NVYY2TJG.js} +2 -2
  76. package/dist/{chunk-7FFGWIBN.js → chunk-PCSQRQPJ.js} +2 -2
  77. package/dist/{chunk-P3AQ2YSX.js → chunk-PFUXPTBT.js} +4 -4
  78. package/dist/{chunk-KQAFEZQX.js → chunk-R45L4TV6.js} +6 -6
  79. package/dist/{chunk-E22CQZ3H.js → chunk-R63X5BQA.js} +12 -12
  80. package/dist/{chunk-PLGBPFEO.js → chunk-RF7QJ736.js} +2 -2
  81. package/dist/{chunk-ZZSFRWKD.js → chunk-RIBCP4DJ.js} +2 -2
  82. package/dist/{chunk-HDN7IVIO.js → chunk-RIZ5NUNN.js} +16 -62
  83. package/dist/chunk-RIZ5NUNN.js.map +1 -0
  84. package/dist/{chunk-HR6NTVYZ.js → chunk-S34XZUTY.js} +172 -39
  85. package/dist/chunk-S34XZUTY.js.map +1 -0
  86. package/dist/{chunk-DEGE32C3.js → chunk-SLORPQZT.js} +2 -2
  87. package/dist/{chunk-6RPPZL7W.js → chunk-SMSJOWVE.js} +2 -2
  88. package/dist/{chunk-X53HJENJ.js → chunk-SPYFXSFZ.js} +2 -2
  89. package/dist/{chunk-IRFQKR4Y.js → chunk-SW6OAWK7.js} +2 -2
  90. package/dist/{chunk-VPEMGBTI.js → chunk-SZEPOUW2.js} +2 -2
  91. package/dist/{chunk-COIQ5N4J.js → chunk-TSITK6QK.js} +2 -2
  92. package/dist/{chunk-HCFNZWFB.js → chunk-VBNXDC7P.js} +2 -2
  93. package/dist/{chunk-FP2AT4WL.js → chunk-VJ3HFCG2.js} +2 -2
  94. package/dist/{chunk-OBQ2NZAR.js → chunk-VKDAJJQP.js} +4 -4
  95. package/dist/{chunk-HZNURRDS.js → chunk-VUROWXFL.js} +2 -2
  96. package/dist/{chunk-G5NH3SSX.js → chunk-X3KFSJLQ.js} +2 -2
  97. package/dist/{chunk-GCJA5KKT.js → chunk-XBNO56HC.js} +2 -2
  98. package/dist/{chunk-GWOFCHPN.js → chunk-YGECOOTF.js} +2 -2
  99. package/dist/{chunk-2R7OCBRR.js → chunk-YK7GOPIE.js} +2 -2
  100. package/dist/{chunk-ELUG6NKQ.js → chunk-YSA4CYTK.js} +2 -2
  101. package/dist/{chunk-233S3MXC.js → chunk-YXUNSOHD.js} +3 -3
  102. package/dist/{chunk-SY4AFWUZ.js → chunk-Z3O7ZOCC.js} +30 -30
  103. package/dist/{chunk-ZG57BEUS.js → chunk-ZAU2OPDW.js} +2 -2
  104. package/dist/cli.js +63 -62
  105. package/dist/coding/export-okf-codegraph.js +7 -7
  106. package/dist/compounding/engine.js +9 -9
  107. package/dist/config.js +7 -7
  108. package/dist/connectors/codex-materialize-runner.js +8 -8
  109. package/dist/connectors/index.js +8 -8
  110. package/dist/convergence-refresh.js +10 -10
  111. package/dist/corpus-watermark.js +10 -10
  112. package/dist/deep-recall-http-glue.js +5 -5
  113. package/dist/entity-retrieval.js +8 -8
  114. package/dist/external-wiki-access.js +28 -28
  115. package/dist/extraction.js +10 -10
  116. package/dist/harmonic-retrieval.js +8 -8
  117. package/dist/index.js +86 -85
  118. package/dist/lcm/engine.js +2 -2
  119. package/dist/lcm/index.js +5 -5
  120. package/dist/local-llm.js +1 -1
  121. package/dist/location/index.js +10 -10
  122. package/dist/maintenance/memory-governance.js +8 -8
  123. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +8 -8
  124. package/dist/maintenance/rebuild-memory-projection-runner.js +10 -10
  125. package/dist/maintenance/rebuild-memory-projection.js +9 -9
  126. package/dist/memory-browse-operations.js +28 -28
  127. package/dist/namespaces/migrate.js +9 -9
  128. package/dist/namespaces/search.js +6 -6
  129. package/dist/namespaces/storage.js +8 -8
  130. package/dist/operator-doctor-corpus.js +11 -11
  131. package/dist/operator-toolkit.js +16 -16
  132. package/dist/orchestration/backlog-scheduler.js +79 -78
  133. package/dist/orchestration/backlog-scheduler.js.map +1 -1
  134. package/dist/orchestration/buffer-drain-runner.js +79 -78
  135. package/dist/orchestration/extraction-queue-snapshot-sharing.d.ts +113 -0
  136. package/dist/orchestration/extraction-queue-snapshot-sharing.d.ts.map +1 -0
  137. package/dist/orchestration/maintenance.js +19 -19
  138. package/dist/orchestration/turn-ingestion.d.ts +3 -0
  139. package/dist/orchestration/turn-ingestion.d.ts.map +1 -1
  140. package/dist/orchestrator.js +78 -77
  141. package/dist/recall-navigation-operations.js +28 -28
  142. package/dist/recall-navigation.js +27 -27
  143. package/dist/resume-bundles.js +10 -9
  144. package/dist/search/factory.js +5 -5
  145. package/dist/search/index.js +5 -5
  146. package/dist/search/lancedb-backend.js +2 -2
  147. package/dist/search/meilisearch-backend.js +2 -2
  148. package/dist/search/orama-backend.js +2 -2
  149. package/dist/semantic-consolidation.js +9 -9
  150. package/dist/semantic-rule-promotion.js +8 -8
  151. package/dist/semantic-rule-verifier.js +8 -8
  152. package/dist/source-agent-qualifier.js +8 -8
  153. package/dist/standup/build.js +8 -8
  154. package/dist/storage.js +7 -7
  155. package/dist/summarizer.js +2 -2
  156. package/dist/support-passport/index.js +30 -30
  157. package/dist/transcript-ownership-digest.d.ts +31 -0
  158. package/dist/transcript-ownership-digest.d.ts.map +1 -0
  159. package/dist/transcript-ownership-digest.js +10 -0
  160. package/dist/transcript-ownership-digest.js.map +1 -0
  161. package/dist/transcript.d.ts +2 -5
  162. package/dist/transcript.d.ts.map +1 -1
  163. package/dist/transcript.js +2 -1
  164. package/dist/transfer/autodetect.js +1 -1
  165. package/dist/transfer/backup.js +2 -2
  166. package/dist/transfer/capsule-export.js +3 -3
  167. package/dist/transfer/capsule-import.js +2 -2
  168. package/dist/transfer/export-okf.js +8 -8
  169. package/dist/verified-recall.js +8 -8
  170. package/dist/who-knows-cli.js +9 -9
  171. package/dist/who-knows.js +8 -8
  172. package/package.json +2 -2
  173. package/src/access-observe-helpers.test.ts +156 -0
  174. package/src/access-observe-helpers.ts +6 -6
  175. package/src/local-llm-qos.test.ts +59 -0
  176. package/src/local-llm.ts +1 -1
  177. package/src/orchestration/extraction-queue-bounded-retention.test.ts +548 -0
  178. package/src/orchestration/extraction-queue-snapshot-sharing.ts +257 -0
  179. package/src/orchestration/turn-ingestion.ts +19 -6
  180. package/src/transcript-ownership-digest.test.ts +403 -0
  181. package/src/transcript-ownership-digest.ts +99 -0
  182. package/src/transcript.ts +14 -76
  183. package/dist/chunk-HDN7IVIO.js.map +0 -1
  184. package/dist/chunk-HR6NTVYZ.js.map +0 -1
  185. package/dist/chunk-IPHIIRDN.js.map +0 -1
  186. /package/dist/{capsule-crypto-7FJQINUR.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
  187. /package/dist/{chunk-Z3CKK5RR.js.map → chunk-2XG7QECM.js.map} +0 -0
  188. /package/dist/{chunk-BZTA7DR4.js.map → chunk-35RSL5B4.js.map} +0 -0
  189. /package/dist/{chunk-3GGCMRO7.js.map → chunk-3RYP4OTZ.js.map} +0 -0
  190. /package/dist/{chunk-VEQVXNWR.js.map → chunk-446H5UUO.js.map} +0 -0
  191. /package/dist/{chunk-XC7OYOQC.js.map → chunk-4BCX6YLW.js.map} +0 -0
  192. /package/dist/{chunk-RXGFITWS.js.map → chunk-4HLPFYF2.js.map} +0 -0
  193. /package/dist/{chunk-WIAXVBQH.js.map → chunk-65SKM4BF.js.map} +0 -0
  194. /package/dist/{chunk-VEWTHVX2.js.map → chunk-6HERQLF4.js.map} +0 -0
  195. /package/dist/{chunk-4DLZ2ITE.js.map → chunk-6OGFQ5GH.js.map} +0 -0
  196. /package/dist/{chunk-C44DRDZM.js.map → chunk-6WULHFNJ.js.map} +0 -0
  197. /package/dist/{chunk-IVXOYE43.js.map → chunk-7IQ5HYBJ.js.map} +0 -0
  198. /package/dist/{chunk-SZBZOUHR.js.map → chunk-A45ZOJV4.js.map} +0 -0
  199. /package/dist/{chunk-DANFOVQG.js.map → chunk-B7PLF3HW.js.map} +0 -0
  200. /package/dist/{chunk-PBE7NFB5.js.map → chunk-BNQJKWWZ.js.map} +0 -0
  201. /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
  202. /package/dist/{chunk-R24RYSQX.js.map → chunk-CZD654DQ.js.map} +0 -0
  203. /package/dist/{chunk-MBENRPMY.js.map → chunk-D3WNJF7D.js.map} +0 -0
  204. /package/dist/{chunk-5IQL4N37.js.map → chunk-D4WBMLPD.js.map} +0 -0
  205. /package/dist/{chunk-FYQUUIPI.js.map → chunk-DLZGSZVC.js.map} +0 -0
  206. /package/dist/{chunk-YK6SFDP2.js.map → chunk-DOJBV6WR.js.map} +0 -0
  207. /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
  208. /package/dist/{chunk-FETPTCQZ.js.map → chunk-E33UJHY3.js.map} +0 -0
  209. /package/dist/{chunk-LJUQPT5G.js.map → chunk-EFRMEOZQ.js.map} +0 -0
  210. /package/dist/{chunk-HTDXNIO6.js.map → chunk-HK3CUTAG.js.map} +0 -0
  211. /package/dist/{chunk-FGUWCE5I.js.map → chunk-HUF4S4MY.js.map} +0 -0
  212. /package/dist/{chunk-6Q6AQ36B.js.map → chunk-HWHNQVRV.js.map} +0 -0
  213. /package/dist/{chunk-SYDPJUFR.js.map → chunk-IDGCL5OP.js.map} +0 -0
  214. /package/dist/{chunk-F3FNXE7C.js.map → chunk-JHJP2IAU.js.map} +0 -0
  215. /package/dist/{chunk-IBQ7LGUJ.js.map → chunk-JIGHVQF6.js.map} +0 -0
  216. /package/dist/{chunk-P7HNMNN2.js.map → chunk-K4SVTZWP.js.map} +0 -0
  217. /package/dist/{chunk-KAED7IBB.js.map → chunk-KDWO22ZK.js.map} +0 -0
  218. /package/dist/{chunk-N6GEGRCT.js.map → chunk-KYVBGDGA.js.map} +0 -0
  219. /package/dist/{chunk-HB5TNQMM.js.map → chunk-L7BOS7KV.js.map} +0 -0
  220. /package/dist/{chunk-3MBSD53O.js.map → chunk-LE4MQ2WF.js.map} +0 -0
  221. /package/dist/{chunk-I4LJJ44E.js.map → chunk-LNHBYT3F.js.map} +0 -0
  222. /package/dist/{chunk-SHVLNI4L.js.map → chunk-LU66I56Q.js.map} +0 -0
  223. /package/dist/{chunk-TD5VTVPT.js.map → chunk-N2H6VC65.js.map} +0 -0
  224. /package/dist/{chunk-L4QYW2HO.js.map → chunk-NBFHOQIO.js.map} +0 -0
  225. /package/dist/{chunk-KNZDGZSY.js.map → chunk-NVYY2TJG.js.map} +0 -0
  226. /package/dist/{chunk-7FFGWIBN.js.map → chunk-PCSQRQPJ.js.map} +0 -0
  227. /package/dist/{chunk-P3AQ2YSX.js.map → chunk-PFUXPTBT.js.map} +0 -0
  228. /package/dist/{chunk-KQAFEZQX.js.map → chunk-R45L4TV6.js.map} +0 -0
  229. /package/dist/{chunk-E22CQZ3H.js.map → chunk-R63X5BQA.js.map} +0 -0
  230. /package/dist/{chunk-PLGBPFEO.js.map → chunk-RF7QJ736.js.map} +0 -0
  231. /package/dist/{chunk-ZZSFRWKD.js.map → chunk-RIBCP4DJ.js.map} +0 -0
  232. /package/dist/{chunk-DEGE32C3.js.map → chunk-SLORPQZT.js.map} +0 -0
  233. /package/dist/{chunk-6RPPZL7W.js.map → chunk-SMSJOWVE.js.map} +0 -0
  234. /package/dist/{chunk-X53HJENJ.js.map → chunk-SPYFXSFZ.js.map} +0 -0
  235. /package/dist/{chunk-IRFQKR4Y.js.map → chunk-SW6OAWK7.js.map} +0 -0
  236. /package/dist/{chunk-VPEMGBTI.js.map → chunk-SZEPOUW2.js.map} +0 -0
  237. /package/dist/{chunk-COIQ5N4J.js.map → chunk-TSITK6QK.js.map} +0 -0
  238. /package/dist/{chunk-HCFNZWFB.js.map → chunk-VBNXDC7P.js.map} +0 -0
  239. /package/dist/{chunk-FP2AT4WL.js.map → chunk-VJ3HFCG2.js.map} +0 -0
  240. /package/dist/{chunk-OBQ2NZAR.js.map → chunk-VKDAJJQP.js.map} +0 -0
  241. /package/dist/{chunk-HZNURRDS.js.map → chunk-VUROWXFL.js.map} +0 -0
  242. /package/dist/{chunk-G5NH3SSX.js.map → chunk-X3KFSJLQ.js.map} +0 -0
  243. /package/dist/{chunk-GCJA5KKT.js.map → chunk-XBNO56HC.js.map} +0 -0
  244. /package/dist/{chunk-GWOFCHPN.js.map → chunk-YGECOOTF.js.map} +0 -0
  245. /package/dist/{chunk-2R7OCBRR.js.map → chunk-YK7GOPIE.js.map} +0 -0
  246. /package/dist/{chunk-ELUG6NKQ.js.map → chunk-YSA4CYTK.js.map} +0 -0
  247. /package/dist/{chunk-233S3MXC.js.map → chunk-YXUNSOHD.js.map} +0 -0
  248. /package/dist/{chunk-SY4AFWUZ.js.map → chunk-Z3O7ZOCC.js.map} +0 -0
  249. /package/dist/{chunk-ZG57BEUS.js.map → chunk-ZAU2OPDW.js.map} +0 -0
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  exportCapsule,
3
3
  isValidCapsuleSince
4
- } from "../chunk-KQAFEZQX.js";
5
- import "../chunk-WEHSQBFR.js";
6
- import "../chunk-X7Y7WX73.js";
4
+ } from "../chunk-R45L4TV6.js";
7
5
  import "../chunk-J4EB7DNW.js";
6
+ import "../chunk-WEHSQBFR.js";
7
+ import "../chunk-DQEMWVMT.js";
8
8
  import "../chunk-BJMBJZ2Y.js";
9
9
  import "../chunk-UKJAGEXH.js";
10
10
  import "../chunk-FP2373TW.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  importCapsule
3
- } from "../chunk-2R7OCBRR.js";
3
+ } from "../chunk-YK7GOPIE.js";
4
4
  import "../chunk-ER7XANP3.js";
5
5
  import "../chunk-M5GVCJSJ.js";
6
6
  import "../chunk-RBOJCG4T.js";
@@ -11,7 +11,7 @@ import "../chunk-7CT3AI52.js";
11
11
  import "../chunk-C64XATK7.js";
12
12
  import "../chunk-42JKGUFJ.js";
13
13
  import "../chunk-WEHSQBFR.js";
14
- import "../chunk-X7Y7WX73.js";
14
+ import "../chunk-DQEMWVMT.js";
15
15
  import "../chunk-BJMBJZ2Y.js";
16
16
  import "../chunk-UKJAGEXH.js";
17
17
  import "../chunk-FP2373TW.js";
@@ -4,28 +4,28 @@ import {
4
4
  exportOkfBundle,
5
5
  firstHeading,
6
6
  parseIncludeStatus
7
- } from "../chunk-I4LJJ44E.js";
7
+ } from "../chunk-LNHBYT3F.js";
8
8
  import {
9
9
  OKF_EXPORT_VERSION
10
10
  } from "../chunk-I7TR2OCU.js";
11
11
  import "../chunk-D24OXEPB.js";
12
12
  import "../chunk-3UXOZBHV.js";
13
- import "../chunk-5IQL4N37.js";
13
+ import "../chunk-D4WBMLPD.js";
14
14
  import "../chunk-UHVXE24Y.js";
15
15
  import "../chunk-QGVCFVX6.js";
16
16
  import "../chunk-IGOW4TJE.js";
17
17
  import "../chunk-G6OFEGUR.js";
18
18
  import "../chunk-7PMOCQOL.js";
19
- import "../chunk-SHVLNI4L.js";
20
- import "../chunk-OBQ2NZAR.js";
19
+ import "../chunk-LU66I56Q.js";
20
+ import "../chunk-VKDAJJQP.js";
21
21
  import "../chunk-OVZIYLBZ.js";
22
22
  import "../chunk-EXYT52NR.js";
23
- import "../chunk-YK6SFDP2.js";
24
- import "../chunk-P3AQ2YSX.js";
23
+ import "../chunk-DOJBV6WR.js";
24
+ import "../chunk-PFUXPTBT.js";
25
25
  import "../chunk-CYEPCZN5.js";
26
- import "../chunk-FYQUUIPI.js";
27
- import "../chunk-Y5NLBXPV.js";
26
+ import "../chunk-DLZGSZVC.js";
28
27
  import "../chunk-WNEVEMJ3.js";
28
+ import "../chunk-Y5NLBXPV.js";
29
29
  import "../chunk-TFA6HPOA.js";
30
30
  import "../chunk-F4TWWUMP.js";
31
31
  import "../chunk-72A4L5JJ.js";
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-GCJA5KKT.js";
4
+ } from "./chunk-XBNO56HC.js";
5
5
  import "./chunk-B7RWBZXW.js";
6
- import "./chunk-5IQL4N37.js";
6
+ import "./chunk-D4WBMLPD.js";
7
7
  import "./chunk-UHVXE24Y.js";
8
8
  import "./chunk-QGVCFVX6.js";
9
9
  import "./chunk-IGOW4TJE.js";
10
10
  import "./chunk-G6OFEGUR.js";
11
11
  import "./chunk-7PMOCQOL.js";
12
- import "./chunk-SHVLNI4L.js";
13
- import "./chunk-OBQ2NZAR.js";
12
+ import "./chunk-LU66I56Q.js";
13
+ import "./chunk-VKDAJJQP.js";
14
14
  import "./chunk-OVZIYLBZ.js";
15
15
  import "./chunk-EXYT52NR.js";
16
- import "./chunk-YK6SFDP2.js";
17
- import "./chunk-P3AQ2YSX.js";
16
+ import "./chunk-DOJBV6WR.js";
17
+ import "./chunk-PFUXPTBT.js";
18
18
  import "./chunk-CYEPCZN5.js";
19
- import "./chunk-FYQUUIPI.js";
20
- import "./chunk-Y5NLBXPV.js";
19
+ import "./chunk-DLZGSZVC.js";
21
20
  import "./chunk-WNEVEMJ3.js";
21
+ import "./chunk-Y5NLBXPV.js";
22
22
  import "./chunk-TFA6HPOA.js";
23
23
  import "./chunk-F4TWWUMP.js";
24
24
  import "./chunk-72A4L5JJ.js";
@@ -4,24 +4,24 @@ import {
4
4
  renderWhoKnows,
5
5
  renderWhoKnowsJson,
6
6
  renderWhoKnowsText
7
- } from "./chunk-6RPPZL7W.js";
8
- import "./chunk-ELUG6NKQ.js";
9
- import "./chunk-5IQL4N37.js";
7
+ } from "./chunk-SMSJOWVE.js";
8
+ import "./chunk-YSA4CYTK.js";
9
+ import "./chunk-D4WBMLPD.js";
10
10
  import "./chunk-UHVXE24Y.js";
11
11
  import "./chunk-QGVCFVX6.js";
12
12
  import "./chunk-IGOW4TJE.js";
13
13
  import "./chunk-G6OFEGUR.js";
14
14
  import "./chunk-7PMOCQOL.js";
15
- import "./chunk-SHVLNI4L.js";
16
- import "./chunk-OBQ2NZAR.js";
15
+ import "./chunk-LU66I56Q.js";
16
+ import "./chunk-VKDAJJQP.js";
17
17
  import "./chunk-OVZIYLBZ.js";
18
18
  import "./chunk-EXYT52NR.js";
19
- import "./chunk-YK6SFDP2.js";
20
- import "./chunk-P3AQ2YSX.js";
19
+ import "./chunk-DOJBV6WR.js";
20
+ import "./chunk-PFUXPTBT.js";
21
21
  import "./chunk-CYEPCZN5.js";
22
- import "./chunk-FYQUUIPI.js";
23
- import "./chunk-Y5NLBXPV.js";
22
+ import "./chunk-DLZGSZVC.js";
24
23
  import "./chunk-WNEVEMJ3.js";
24
+ import "./chunk-Y5NLBXPV.js";
25
25
  import "./chunk-TFA6HPOA.js";
26
26
  import "./chunk-F4TWWUMP.js";
27
27
  import "./chunk-72A4L5JJ.js";
package/dist/who-knows.js CHANGED
@@ -9,23 +9,23 @@ import {
9
9
  loadWhoKnowsEntities,
10
10
  tokenizeTopic,
11
11
  validateWhoKnowsInput
12
- } from "./chunk-ELUG6NKQ.js";
13
- import "./chunk-5IQL4N37.js";
12
+ } from "./chunk-YSA4CYTK.js";
13
+ import "./chunk-D4WBMLPD.js";
14
14
  import "./chunk-UHVXE24Y.js";
15
15
  import "./chunk-QGVCFVX6.js";
16
16
  import "./chunk-IGOW4TJE.js";
17
17
  import "./chunk-G6OFEGUR.js";
18
18
  import "./chunk-7PMOCQOL.js";
19
- import "./chunk-SHVLNI4L.js";
20
- import "./chunk-OBQ2NZAR.js";
19
+ import "./chunk-LU66I56Q.js";
20
+ import "./chunk-VKDAJJQP.js";
21
21
  import "./chunk-OVZIYLBZ.js";
22
22
  import "./chunk-EXYT52NR.js";
23
- import "./chunk-YK6SFDP2.js";
24
- import "./chunk-P3AQ2YSX.js";
23
+ import "./chunk-DOJBV6WR.js";
24
+ import "./chunk-PFUXPTBT.js";
25
25
  import "./chunk-CYEPCZN5.js";
26
- import "./chunk-FYQUUIPI.js";
27
- import "./chunk-Y5NLBXPV.js";
26
+ import "./chunk-DLZGSZVC.js";
28
27
  import "./chunk-WNEVEMJ3.js";
28
+ import "./chunk-Y5NLBXPV.js";
29
29
  import "./chunk-TFA6HPOA.js";
30
30
  import "./chunk-F4TWWUMP.js";
31
31
  import "./chunk-72A4L5JJ.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "10.0.76",
3
+ "version": "10.0.78",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3386,7 +3386,7 @@
3386
3386
  "core"
3387
3387
  ],
3388
3388
  "peerDependencies": {
3389
- "@remnic/coding-graph": "^10.0.76"
3389
+ "@remnic/coding-graph": "^10.0.78"
3390
3390
  },
3391
3391
  "peerDependenciesMeta": {
3392
3392
  "@remnic/coding-graph": {
@@ -1,4 +1,6 @@
1
1
  import assert from "node:assert/strict";
2
+ import { spawn } from "node:child_process";
3
+ import { fileURLToPath } from "node:url";
2
4
  /**
3
5
  * PendingObserveExtractionTracker settle hygiene — issue: `track`'s settle
4
6
  * callback only removed the pending entry when the extraction SUCCEEDED or
@@ -70,3 +72,157 @@ test("a wait overlapping a failing extraction still surfaces the error", async (
70
72
  reject(new Error("extraction failed"));
71
73
  await waiter;
72
74
  });
75
+
76
+ /**
77
+ * Controller retention — issue: `track` copied every prior controller of the
78
+ * key into a fresh Set per tracked extraction, and never-settling promise
79
+ * chains keep every generation reachable, so overlapping stalled tracks grew
80
+ * quadratically (HeapRepro: ~543MB at 6000 tracks; measured 212.8MB at 4000
81
+ * pre-fix vs 4.2MB with the shared per-key set). The fix reuses one Set per
82
+ * key; `abortTracked` iterates a snapshot so a reentrant `track` fired from
83
+ * an abort listener keeps prior semantics (not aborted by the in-flight
84
+ * pass, iteration terminates).
85
+ */
86
+ function stalled(): Promise<void> {
87
+ const { promise } = Promise.withResolvers<void>();
88
+ return promise;
89
+ }
90
+
91
+ function rejectingAfter(controller: AbortController): Promise<void> {
92
+ const { promise, reject } = Promise.withResolvers<void>();
93
+ controller.signal.addEventListener("abort", () => reject(controller.signal.reason), { once: true });
94
+ return promise;
95
+ }
96
+
97
+ // Runs the retention loop in one short-lived child process with --expose-gc,
98
+ // so CI exercises it without exposing gc to the whole test tree. The
99
+ // assertion keeps a wide margin (4.2MB measured post-fix vs 212.8MB pre-fix
100
+ // at the same track count), not a fixed runner heap limit.
101
+ function drain(stream: NodeJS.ReadableStream): Promise<string> {
102
+ return new Promise((resolve) => {
103
+ const chunks: string[] = [];
104
+ stream.on("data", (chunk) => chunks.push(String(chunk)));
105
+ stream.on("end", () => resolve(chunks.join("")));
106
+ });
107
+ }
108
+
109
+ async function retainedHeapInChild(): Promise<number> {
110
+ const trackerSource = fileURLToPath(new URL("./access-observe-helpers.js", import.meta.url));
111
+ const child = spawn(
112
+ process.execPath,
113
+ [
114
+ "--expose-gc",
115
+ "--input-type=module",
116
+ "--import",
117
+ "tsx",
118
+ "-e",
119
+ `import { pathToFileURL } from "node:url";
120
+ const { PendingObserveExtractionTracker } = await import(pathToFileURL(process.argv.at(-1)));
121
+ gc();
122
+ const before = process.memoryUsage().heapUsed;
123
+ const tracker = new PendingObserveExtractionTracker();
124
+ const key = tracker.key("session-a", "alice", "default");
125
+ for (let i = 0; i < 4000; i++) tracker.track(key, new Promise(() => {}), new AbortController());
126
+ gc();
127
+ console.log(JSON.stringify(process.memoryUsage().heapUsed - before));`,
128
+ trackerSource,
129
+ ],
130
+ { cwd: fileURLToPath(new URL("..", import.meta.url)), stdio: ["ignore", "pipe", "pipe"] },
131
+ );
132
+ const [stdout, stderr, code] = await Promise.all([
133
+ drain(child.stdout),
134
+ drain(child.stderr),
135
+ new Promise<number | null>((resolve) => child.on("close", resolve)),
136
+ ]);
137
+ assert.equal(code, 0, `retention child failed (${code}): ${stderr.slice(0, 400)}`);
138
+ const lastLine = stdout.trim().split("\n").at(-1);
139
+ assert.ok(lastLine !== undefined, `retention child printed no output: ${stderr.slice(0, 400)}`);
140
+ return JSON.parse(lastLine);
141
+ }
142
+
143
+ test("retained heap stays bounded across overlapping stalled tracks", { timeout: 15000 }, async () => {
144
+ const retained = await retainedHeapInChild();
145
+ assert.ok(
146
+ retained < 32 * 1024 * 1024,
147
+ `retained ${(retained / 1048576).toFixed(1)}MB for 4000 tracks; quadratic controller-set copies keep dead generations alive`,
148
+ );
149
+ });
150
+
151
+ test("cancel still aborts every distinct controller across overlapping tracks", () => {
152
+ const tracker = new PendingObserveExtractionTracker();
153
+ const key = tracker.key("session-a", "alice", "default");
154
+ const controllers = Array.from({ length: 50 }, () => new AbortController());
155
+ for (const controller of controllers) {
156
+ tracker.track(key, stalled(), controller);
157
+ }
158
+ tracker.cancel("session-a", "alice", "default");
159
+ for (const controller of controllers) {
160
+ assert.ok(controller.signal.aborted, "every tracked controller must be aborted");
161
+ }
162
+ });
163
+
164
+ test("a controller admitted by a reentrant track during cancel is not aborted by that pass", () => {
165
+ const tracker = new PendingObserveExtractionTracker();
166
+ const key = tracker.key("session-a", "alice", "default");
167
+ const first = new AbortController();
168
+ const reentrant = new AbortController();
169
+ first.signal.addEventListener(
170
+ "abort",
171
+ () => {
172
+ tracker.track(key, stalled(), reentrant);
173
+ },
174
+ { once: true },
175
+ );
176
+ tracker.track(key, stalled(), first);
177
+ tracker.cancel("session-a", "alice", "default");
178
+ assert.ok(first.signal.aborted);
179
+ assert.equal(reentrant.signal.aborted, false, "prior behavior: the in-flight abort pass must not abort later admissions");
180
+ });
181
+
182
+ test("each key aborts and cleans up in isolation", { timeout: 2000 }, async () => {
183
+ const tracker = new PendingObserveExtractionTracker();
184
+ const keyA = tracker.key("session-a", "alice", "default");
185
+ const keyB = tracker.key("session-b", "bob", "default");
186
+ const controllerA = new AbortController();
187
+ const controllerB = new AbortController();
188
+ tracker.track(keyA, rejectingAfter(controllerA), controllerA);
189
+ tracker.track(keyB, stalled(), controllerB);
190
+ tracker.cancel("session-a", "alice", "default");
191
+ assert.ok(controllerA.signal.aborted);
192
+ assert.equal(controllerB.signal.aborted, false);
193
+ await settle();
194
+ await tracker.wait("session-a", "alice", "default");
195
+ });
196
+
197
+ test("an aborted chain entry settles once every generation settles and cleans up", { timeout: 2000 }, async () => {
198
+ const tracker = new PendingObserveExtractionTracker();
199
+ const key = tracker.key("session-a", "alice", "default");
200
+ const first = new AbortController();
201
+ tracker.track(key, rejectingAfter(first), first);
202
+ const second = new AbortController();
203
+ const { promise: secondExtraction, resolve } = Promise.withResolvers<void>();
204
+ tracker.track(key, secondExtraction, second);
205
+ first.abort(preemptedExtractionError());
206
+ resolve();
207
+ await settle();
208
+ await tracker.wait("session-a", "alice", "default");
209
+ });
210
+
211
+ test("wait surfaces a chained non-preempted rejection", async () => {
212
+ const tracker = new PendingObserveExtractionTracker();
213
+ const key = tracker.key("session-a", "alice", "default");
214
+ tracker.track(key, Promise.resolve(), new AbortController());
215
+ tracker.track(key, Promise.reject(new Error("extraction failed")), new AbortController());
216
+ await assert.rejects(tracker.wait("session-a", "alice", "default"), /extraction failed/);
217
+ });
218
+
219
+ test("a wait overlapping a preempted rejection returns without throwing", { timeout: 2000 }, async () => {
220
+ const tracker = new PendingObserveExtractionTracker();
221
+ const key = tracker.key("session-a", "alice", "default");
222
+ const controller = new AbortController();
223
+ tracker.track(key, rejectingAfter(controller), controller);
224
+ const waiter = tracker.wait("session-a", "alice", "default");
225
+ await Promise.resolve();
226
+ controller.abort(preemptedExtractionError());
227
+ await waiter;
228
+ });
@@ -142,11 +142,9 @@ export class PendingObserveExtractionTracker {
142
142
  if (rejected) throw rejected.reason;
143
143
  })
144
144
  : extraction;
145
- const entry = {
146
- promise,
147
- running: previous?.running ?? extraction,
148
- controllers: new Set(previous ? [...previous.controllers, controller] : [controller]),
149
- };
145
+ const controllers = previous?.controllers ?? new Set<AbortController>();
146
+ controllers.add(controller);
147
+ const entry = { promise, running: previous?.running ?? extraction, controllers };
150
148
  this.entries.set(key, entry);
151
149
  // Any settle (success OR rejection — preemption is just one rejection
152
150
  // kind) ends the pending entry; leaving a settled failure tracked wedged
@@ -201,7 +199,9 @@ export class PendingObserveExtractionTracker {
201
199
  (principal !== undefined && entryPrincipal !== (principal ?? "")) ||
202
200
  (namespace !== undefined && entryNamespace !== (namespace ?? ""))
203
201
  ) continue;
204
- for (const controller of entry.controllers) controller.abort(reason);
202
+ // Snapshot: an abort listener may track() synchronously; iterating the
203
+ // shared live set would abort that new admission or never terminate.
204
+ for (const controller of [...entry.controllers]) controller.abort(reason);
205
205
  }
206
206
  }
207
207
 
@@ -337,3 +337,62 @@ test("LocalLlmClient resolves queued work to null when request execution throws"
337
337
 
338
338
  assert.equal(result, null);
339
339
  });
340
+
341
+ test("LocalLlmClient includes queue wait in the exhausted-abort warning", async () => {
342
+ const logs: string[] = [];
343
+ initLogger(
344
+ {
345
+ info(msg: string) {
346
+ logs.push(`info:${msg}`);
347
+ },
348
+ warn(msg: string) {
349
+ logs.push(`warn:${msg}`);
350
+ },
351
+ error(msg: string) {
352
+ logs.push(`error:${msg}`);
353
+ },
354
+ debug(msg: string) {
355
+ logs.push(`debug:${msg}`);
356
+ },
357
+ },
358
+ true,
359
+ );
360
+
361
+ const originalNow = Date.now;
362
+ let now = originalNow();
363
+ Date.now = () => now;
364
+ const client = new LocalLlmClient(createConfig());
365
+ client["isAvailable"] = true;
366
+ client["lastHealthCheck"] = Date.now();
367
+ const originalFetch = globalThis.fetch;
368
+ const holderResponse = Promise.withResolvers<Response>();
369
+ let calls = 0;
370
+ globalThis.fetch = async () => {
371
+ calls += 1;
372
+ if (calls === 1) return await holderResponse.promise;
373
+ throw new DOMException("request aborted", "AbortError");
374
+ };
375
+
376
+ try {
377
+ const holder = client.chatCompletion(
378
+ [{ role: "user", content: "hold" }],
379
+ { operation: "queue-holder", priority: "background" },
380
+ );
381
+ await tick();
382
+ const summarize = client.chatCompletion(
383
+ [{ role: "user", content: "summarize" }],
384
+ { operation: "lcm-summarize", priority: "background" },
385
+ );
386
+ now += 50;
387
+ holderResponse.resolve(okResponse("held"));
388
+ await holder;
389
+ assert.equal(await summarize, null);
390
+ assert.match(
391
+ logs.join("\n"),
392
+ /local LLM request aborted after \d+ attempt\(s\): op=lcm-summarize timeoutMs=\d+ model=test-local-model promptChars=\d+ durationMs=\d+ waitMs=50/,
393
+ );
394
+ } finally {
395
+ globalThis.fetch = originalFetch;
396
+ Date.now = originalNow;
397
+ }
398
+ });
package/src/local-llm.ts CHANGED
@@ -1093,7 +1093,7 @@ export class LocalLlmClient {
1093
1093
  if (!response) {
1094
1094
  if (lastAbortError) {
1095
1095
  log.warn(
1096
- `local LLM request aborted after ${maxAttempts} attempt(s): op=${operation} timeoutMs=${effectiveTimeoutMs} model=${this.config.localLlmModel} promptChars=${promptChars} durationMs=${Date.now() - startedAtMs}`,
1096
+ `local LLM request aborted after ${maxAttempts} attempt(s): op=${operation} timeoutMs=${effectiveTimeoutMs} model=${this.config.localLlmModel} promptChars=${promptChars} durationMs=${Date.now() - startedAtMs}${queueMeta ? ` waitMs=${startedAtMs - queueMeta.enqueuedAtMs}` : ""}`,
1097
1097
  );
1098
1098
  } else {
1099
1099
  log.warn(