@remnic/core 9.69.77 → 9.69.79

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 (211) hide show
  1. package/dist/access-admin-ops-surface.js +12 -12
  2. package/dist/access-authorization-probe.js +13 -13
  3. package/dist/access-boundary.js +12 -12
  4. package/dist/access-cli.js +53 -53
  5. package/dist/access-extraction-force-flush.js +12 -12
  6. package/dist/access-http-briefing.js +13 -13
  7. package/dist/access-http-lcm-compaction.d.ts +2 -1
  8. package/dist/access-http-lcm-compaction.d.ts.map +1 -1
  9. package/dist/access-http-lcm-compaction.js +1 -1
  10. package/dist/access-http-lifecycle-flush.d.ts.map +1 -1
  11. package/dist/access-http-lifecycle-flush.js +2 -2
  12. package/dist/access-http-query.js +14 -14
  13. package/dist/access-http.js +30 -30
  14. package/dist/access-identity-continuity-surface.js +12 -12
  15. package/dist/access-lcm-surface.js +12 -12
  16. package/dist/access-mcp.js +21 -21
  17. package/dist/access-namespace-preflight.js +12 -12
  18. package/dist/access-observe-write-surface.js +12 -12
  19. package/dist/access-operations-batch.js +13 -13
  20. package/dist/access-operations.js +20 -20
  21. package/dist/access-recall-concurrency.js +12 -12
  22. package/dist/access-recall-response.js +12 -12
  23. package/dist/access-recall-surface.js +12 -12
  24. package/dist/access-service-helpers.d.ts +1 -0
  25. package/dist/access-service-helpers.d.ts.map +1 -1
  26. package/dist/access-service-helpers.js +1 -1
  27. package/dist/access-service.js +12 -12
  28. package/dist/access-surface-catalog.js +14 -14
  29. package/dist/active-recall.js +2 -2
  30. package/dist/briefing.js +2 -2
  31. package/dist/causal-consolidation.js +3 -3
  32. package/dist/{chunk-TIDEL77O.js → chunk-2BPPGNAQ.js} +4 -3
  33. package/dist/chunk-2BPPGNAQ.js.map +1 -0
  34. package/dist/{chunk-3AGCSD42.js → chunk-3GN2PEOT.js} +2 -2
  35. package/dist/{chunk-RGX4DGOG.js → chunk-3XQYM4RE.js} +2 -2
  36. package/dist/{chunk-GATQP7CE.js → chunk-4V44AA7O.js} +2 -2
  37. package/dist/{chunk-RRMIACBG.js → chunk-55FCXCXJ.js} +7 -3
  38. package/dist/{chunk-RRMIACBG.js.map → chunk-55FCXCXJ.js.map} +1 -1
  39. package/dist/{chunk-2L5FSNPC.js → chunk-5FNZ3G6X.js} +40 -11
  40. package/dist/chunk-5FNZ3G6X.js.map +1 -0
  41. package/dist/{chunk-7QXTCONH.js → chunk-7QK5TUTW.js} +2 -2
  42. package/dist/{chunk-OJ3TV57W.js → chunk-7UUKRS3J.js} +2 -2
  43. package/dist/{chunk-DCPAAAIC.js → chunk-AXDOF4VI.js} +2 -2
  44. package/dist/{chunk-RKTT72XV.js → chunk-B47OHVFT.js} +4 -4
  45. package/dist/chunk-B47OHVFT.js.map +1 -0
  46. package/dist/{chunk-NYZRJW5X.js → chunk-BJX3VQWZ.js} +2 -2
  47. package/dist/{chunk-3QL24R5Y.js → chunk-C2WWQ4OR.js} +1 -1
  48. package/dist/chunk-C2WWQ4OR.js.map +1 -0
  49. package/dist/{chunk-CDEI5S5W.js → chunk-C7JAUNFC.js} +2 -2
  50. package/dist/{chunk-MQQPONTM.js → chunk-CK5U7JGH.js} +2 -2
  51. package/dist/{chunk-RDUM6BKQ.js → chunk-CRKWSSS4.js} +2 -2
  52. package/dist/{chunk-XNYTMLPS.js → chunk-DGAWEJVI.js} +2 -2
  53. package/dist/{chunk-GZ3R6XOE.js → chunk-DJSJ4ULL.js} +22 -12
  54. package/dist/chunk-DJSJ4ULL.js.map +1 -0
  55. package/dist/{chunk-SUSMEKBE.js → chunk-EU3N5MK3.js} +3 -3
  56. package/dist/{chunk-QJAGDPY7.js → chunk-FYAU4S6E.js} +3 -3
  57. package/dist/{chunk-LEP46X5Y.js → chunk-GEX5NI36.js} +2 -2
  58. package/dist/{chunk-X3NZ2HAO.js → chunk-GZAGLCQH.js} +2 -2
  59. package/dist/{chunk-AVO2CBIL.js → chunk-HKFJ3PF3.js} +2 -2
  60. package/dist/{chunk-K2SXIWEV.js → chunk-IA3X2Y4K.js} +2 -2
  61. package/dist/{chunk-QIDMGBUY.js → chunk-IMAP236M.js} +2 -2
  62. package/dist/{chunk-OHRIBMSS.js → chunk-JS3S2HVG.js} +2 -2
  63. package/dist/{chunk-FVK5NQ3V.js → chunk-JVY556FW.js} +2 -2
  64. package/dist/{chunk-3K3PITOE.js → chunk-JXMECXMF.js} +2 -2
  65. package/dist/{chunk-NGFRFDSK.js → chunk-KERNN6BC.js} +2 -2
  66. package/dist/{chunk-LZLJK2IA.js → chunk-L2LBMKSI.js} +5 -5
  67. package/dist/{chunk-NHV6WCM5.js → chunk-ML2MVAEZ.js} +1 -1
  68. package/dist/{chunk-TPDBFYEG.js → chunk-MMCO4SRG.js} +17 -6
  69. package/dist/chunk-MMCO4SRG.js.map +1 -0
  70. package/dist/{chunk-GXQ5GDUH.js → chunk-N3MNDVJO.js} +2 -2
  71. package/dist/{chunk-WGXWZE3K.js → chunk-NAYBHNGN.js} +2 -2
  72. package/dist/{chunk-X33QB7LW.js → chunk-NKFLHW7J.js} +2 -2
  73. package/dist/{chunk-GARVFCV6.js → chunk-NMBX4D7P.js} +2 -2
  74. package/dist/{chunk-A2XDQ3JW.js → chunk-OM5BIPBR.js} +2 -2
  75. package/dist/{chunk-ALOMLIRC.js → chunk-Q5TRJ4BX.js} +26 -21
  76. package/dist/chunk-Q5TRJ4BX.js.map +1 -0
  77. package/dist/{chunk-ZYBLNHUB.js → chunk-QB75LKQQ.js} +3 -3
  78. package/dist/{chunk-2CH6MMO2.js → chunk-RDEUG2M2.js} +5 -5
  79. package/dist/{chunk-5X7ZTLFS.js → chunk-RIEX7NOZ.js} +2 -2
  80. package/dist/{chunk-ZWWF7PI5.js → chunk-S42HZILI.js} +2 -2
  81. package/dist/{chunk-YUAOU2B2.js → chunk-S55WTPFJ.js} +3 -5
  82. package/dist/chunk-S55WTPFJ.js.map +1 -0
  83. package/dist/{chunk-RMG22TH2.js → chunk-SQDKX4RW.js} +2 -2
  84. package/dist/{chunk-2GKLHU2D.js → chunk-SV72F4DS.js} +2 -2
  85. package/dist/{chunk-FMT52ROU.js → chunk-SVZWVZ7E.js} +11 -11
  86. package/dist/chunk-SVZWVZ7E.js.map +1 -0
  87. package/dist/{chunk-6MJGDUC7.js → chunk-T4BE5KJM.js} +3 -3
  88. package/dist/{chunk-7DZHRPCO.js → chunk-T4QGUXCV.js} +2 -2
  89. package/dist/{chunk-IILMR37Z.js → chunk-TEV2JGU5.js} +12 -12
  90. package/dist/{chunk-UKB7ZDKK.js → chunk-TIQZNDZ5.js} +2 -2
  91. package/dist/{chunk-7WO66MKJ.js → chunk-UNJOB4DY.js} +2 -2
  92. package/dist/{chunk-DSQWTXHP.js → chunk-W75BBBSY.js} +8 -8
  93. package/dist/{chunk-YL273SOF.js → chunk-WB2I2EQK.js} +2 -2
  94. package/dist/{chunk-CYCE3L2I.js → chunk-X22B4KTI.js} +18 -18
  95. package/dist/cli.js +42 -42
  96. package/dist/coding/export-okf-codegraph.js +1 -1
  97. package/dist/compounding/engine.js +2 -2
  98. package/dist/config.js +2 -2
  99. package/dist/connectors/codex-materialize-runner.js +2 -2
  100. package/dist/connectors/index.js +2 -2
  101. package/dist/convergence-refresh.js +4 -4
  102. package/dist/corpus-watermark.js +4 -4
  103. package/dist/entity-retrieval.js +2 -2
  104. package/dist/external-wiki-access.js +13 -13
  105. package/dist/extraction.js +2 -2
  106. package/dist/harmonic-retrieval.js +1 -1
  107. package/dist/index.js +53 -53
  108. package/dist/lcm/engine.d.ts +2 -2
  109. package/dist/lcm/engine.d.ts.map +1 -1
  110. package/dist/lcm/engine.js +2 -2
  111. package/dist/lcm/index.js +2 -2
  112. package/dist/lcm/queue.d.ts +1 -1
  113. package/dist/lcm/queue.d.ts.map +1 -1
  114. package/dist/lcm/queue.js +1 -1
  115. package/dist/lifecycle/seed-graduation.d.ts.map +1 -1
  116. package/dist/location/index.js +4 -4
  117. package/dist/maintenance/memory-governance.js +2 -2
  118. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +2 -2
  119. package/dist/maintenance/rebuild-memory-projection.js +3 -3
  120. package/dist/memory-browse-operations.js +13 -13
  121. package/dist/namespaces/migrate.js +3 -3
  122. package/dist/namespaces/storage.js +2 -2
  123. package/dist/operator-doctor-corpus.js +5 -5
  124. package/dist/operator-toolkit.js +11 -11
  125. package/dist/orchestration/lifecycle-policy-coordinator.d.ts.map +1 -1
  126. package/dist/orchestration/maintenance.js +10 -10
  127. package/dist/orchestrator.js +53 -53
  128. package/dist/recall-navigation-operations.js +13 -13
  129. package/dist/recall-navigation.js +12 -12
  130. package/dist/resume-bundles.js +3 -3
  131. package/dist/semantic-consolidation.js +3 -3
  132. package/dist/semantic-rule-promotion.js +2 -2
  133. package/dist/semantic-rule-verifier.js +2 -2
  134. package/dist/source-agent-qualifier.js +2 -2
  135. package/dist/standup/build.js +2 -2
  136. package/dist/storage.d.ts.map +1 -1
  137. package/dist/storage.js +1 -1
  138. package/dist/support-passport/index.js +15 -15
  139. package/dist/transfer/export-okf.js +2 -2
  140. package/dist/verified-recall.js +2 -2
  141. package/dist/who-knows-cli.js +3 -3
  142. package/dist/who-knows.js +2 -2
  143. package/package.json +2 -2
  144. package/src/access-http-extraction-force-flush.test.ts +6 -2
  145. package/src/access-http-lcm-compaction.abort.test.ts +60 -0
  146. package/src/access-http-lcm-compaction.ts +20 -9
  147. package/src/access-http-lifecycle-flush.ts +1 -0
  148. package/src/access-http.test.ts +4 -2
  149. package/src/access-operations-batch.ts +1 -1
  150. package/src/access-service-helpers.ts +1 -0
  151. package/src/access-service.ts +2 -2
  152. package/src/lcm/engine.ts +39 -9
  153. package/src/lcm/queue.test.ts +19 -0
  154. package/src/lcm/queue.ts +16 -5
  155. package/src/lcm-engine.test.ts +72 -0
  156. package/src/lifecycle/seed-graduation.test.ts +124 -0
  157. package/src/lifecycle/seed-graduation.ts +7 -2
  158. package/src/orchestration/lifecycle-policy-coordinator.ts +6 -1
  159. package/src/storage.ts +2 -4
  160. package/dist/chunk-2L5FSNPC.js.map +0 -1
  161. package/dist/chunk-3QL24R5Y.js.map +0 -1
  162. package/dist/chunk-ALOMLIRC.js.map +0 -1
  163. package/dist/chunk-FMT52ROU.js.map +0 -1
  164. package/dist/chunk-GZ3R6XOE.js.map +0 -1
  165. package/dist/chunk-RKTT72XV.js.map +0 -1
  166. package/dist/chunk-TIDEL77O.js.map +0 -1
  167. package/dist/chunk-TPDBFYEG.js.map +0 -1
  168. package/dist/chunk-YUAOU2B2.js.map +0 -1
  169. /package/dist/{chunk-3AGCSD42.js.map → chunk-3GN2PEOT.js.map} +0 -0
  170. /package/dist/{chunk-RGX4DGOG.js.map → chunk-3XQYM4RE.js.map} +0 -0
  171. /package/dist/{chunk-GATQP7CE.js.map → chunk-4V44AA7O.js.map} +0 -0
  172. /package/dist/{chunk-7QXTCONH.js.map → chunk-7QK5TUTW.js.map} +0 -0
  173. /package/dist/{chunk-OJ3TV57W.js.map → chunk-7UUKRS3J.js.map} +0 -0
  174. /package/dist/{chunk-DCPAAAIC.js.map → chunk-AXDOF4VI.js.map} +0 -0
  175. /package/dist/{chunk-NYZRJW5X.js.map → chunk-BJX3VQWZ.js.map} +0 -0
  176. /package/dist/{chunk-CDEI5S5W.js.map → chunk-C7JAUNFC.js.map} +0 -0
  177. /package/dist/{chunk-MQQPONTM.js.map → chunk-CK5U7JGH.js.map} +0 -0
  178. /package/dist/{chunk-RDUM6BKQ.js.map → chunk-CRKWSSS4.js.map} +0 -0
  179. /package/dist/{chunk-XNYTMLPS.js.map → chunk-DGAWEJVI.js.map} +0 -0
  180. /package/dist/{chunk-SUSMEKBE.js.map → chunk-EU3N5MK3.js.map} +0 -0
  181. /package/dist/{chunk-QJAGDPY7.js.map → chunk-FYAU4S6E.js.map} +0 -0
  182. /package/dist/{chunk-LEP46X5Y.js.map → chunk-GEX5NI36.js.map} +0 -0
  183. /package/dist/{chunk-X3NZ2HAO.js.map → chunk-GZAGLCQH.js.map} +0 -0
  184. /package/dist/{chunk-AVO2CBIL.js.map → chunk-HKFJ3PF3.js.map} +0 -0
  185. /package/dist/{chunk-K2SXIWEV.js.map → chunk-IA3X2Y4K.js.map} +0 -0
  186. /package/dist/{chunk-QIDMGBUY.js.map → chunk-IMAP236M.js.map} +0 -0
  187. /package/dist/{chunk-OHRIBMSS.js.map → chunk-JS3S2HVG.js.map} +0 -0
  188. /package/dist/{chunk-FVK5NQ3V.js.map → chunk-JVY556FW.js.map} +0 -0
  189. /package/dist/{chunk-3K3PITOE.js.map → chunk-JXMECXMF.js.map} +0 -0
  190. /package/dist/{chunk-NGFRFDSK.js.map → chunk-KERNN6BC.js.map} +0 -0
  191. /package/dist/{chunk-LZLJK2IA.js.map → chunk-L2LBMKSI.js.map} +0 -0
  192. /package/dist/{chunk-NHV6WCM5.js.map → chunk-ML2MVAEZ.js.map} +0 -0
  193. /package/dist/{chunk-GXQ5GDUH.js.map → chunk-N3MNDVJO.js.map} +0 -0
  194. /package/dist/{chunk-WGXWZE3K.js.map → chunk-NAYBHNGN.js.map} +0 -0
  195. /package/dist/{chunk-X33QB7LW.js.map → chunk-NKFLHW7J.js.map} +0 -0
  196. /package/dist/{chunk-GARVFCV6.js.map → chunk-NMBX4D7P.js.map} +0 -0
  197. /package/dist/{chunk-A2XDQ3JW.js.map → chunk-OM5BIPBR.js.map} +0 -0
  198. /package/dist/{chunk-ZYBLNHUB.js.map → chunk-QB75LKQQ.js.map} +0 -0
  199. /package/dist/{chunk-2CH6MMO2.js.map → chunk-RDEUG2M2.js.map} +0 -0
  200. /package/dist/{chunk-5X7ZTLFS.js.map → chunk-RIEX7NOZ.js.map} +0 -0
  201. /package/dist/{chunk-ZWWF7PI5.js.map → chunk-S42HZILI.js.map} +0 -0
  202. /package/dist/{chunk-RMG22TH2.js.map → chunk-SQDKX4RW.js.map} +0 -0
  203. /package/dist/{chunk-2GKLHU2D.js.map → chunk-SV72F4DS.js.map} +0 -0
  204. /package/dist/{chunk-6MJGDUC7.js.map → chunk-T4BE5KJM.js.map} +0 -0
  205. /package/dist/{chunk-7DZHRPCO.js.map → chunk-T4QGUXCV.js.map} +0 -0
  206. /package/dist/{chunk-IILMR37Z.js.map → chunk-TEV2JGU5.js.map} +0 -0
  207. /package/dist/{chunk-UKB7ZDKK.js.map → chunk-TIQZNDZ5.js.map} +0 -0
  208. /package/dist/{chunk-7WO66MKJ.js.map → chunk-UNJOB4DY.js.map} +0 -0
  209. /package/dist/{chunk-DSQWTXHP.js.map → chunk-W75BBBSY.js.map} +0 -0
  210. /package/dist/{chunk-YL273SOF.js.map → chunk-WB2I2EQK.js.map} +0 -0
  211. /package/dist/{chunk-CYCE3L2I.js.map → chunk-X22B4KTI.js.map} +0 -0
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-ZCUTSMR2.js";
14
14
  import {
15
15
  StorageManager
16
- } from "./chunk-YUAOU2B2.js";
16
+ } from "./chunk-S55WTPFJ.js";
17
17
  import {
18
18
  excludeSupportPassportPrivateMemories
19
19
  } from "./chunk-PWPIERBM.js";
@@ -134,4 +134,4 @@ export {
134
134
  runCodexMaterialize,
135
135
  runPostConsolidationMaterialize
136
136
  };
137
- //# sourceMappingURL=chunk-MQQPONTM.js.map
137
+ //# sourceMappingURL=chunk-CK5U7JGH.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listNamespaces
3
- } from "./chunk-XNYTMLPS.js";
3
+ } from "./chunk-DGAWEJVI.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-RDUM6BKQ.js.map
285
+ //# sourceMappingURL=chunk-CRKWSSS4.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  NamespaceStorageRouter
3
- } from "./chunk-GXQ5GDUH.js";
3
+ } from "./chunk-N3MNDVJO.js";
4
4
  import {
5
5
  namespaceCollectionName
6
6
  } from "./chunk-RJLV4BKR.js";
@@ -213,4 +213,4 @@ export {
213
213
  verifyNamespaces,
214
214
  runNamespaceMigration
215
215
  };
216
- //# sourceMappingURL=chunk-XNYTMLPS.js.map
216
+ //# sourceMappingURL=chunk-DGAWEJVI.js.map
@@ -17,20 +17,27 @@ async function runLcmCompactionFlushHttp({
17
17
  recordWriteRateLimitHit,
18
18
  resolveNamespace,
19
19
  defaultNamespace,
20
- resolveRequestPrincipal
20
+ resolveRequestPrincipal,
21
+ abortSignal
21
22
  }) {
23
+ abortSignal?.throwIfAborted();
22
24
  ensureWriteRateLimitAvailable();
23
25
  const requestedNamespaces = body.namespaces;
24
26
  if (requestedNamespaces === void 0) {
25
- const result = await service.lcmCompactionFlush({
26
- sessionKey: body.sessionKey,
27
- namespace: resolveNamespace(body.namespace),
28
- ...body.cwd !== void 0 ? { cwd: body.cwd } : {},
29
- ...body.projectTag !== void 0 ? { projectTag: body.projectTag } : {},
30
- authenticatedPrincipal: resolveRequestPrincipal()
31
- });
32
- recordWriteRateLimitHit();
33
- return result;
27
+ try {
28
+ const result = await service.lcmCompactionFlush({
29
+ sessionKey: body.sessionKey,
30
+ namespace: resolveNamespace(body.namespace),
31
+ ...body.cwd !== void 0 ? { cwd: body.cwd } : {},
32
+ ...body.projectTag !== void 0 ? { projectTag: body.projectTag } : {},
33
+ authenticatedPrincipal: resolveRequestPrincipal(),
34
+ ...abortSignal !== void 0 ? { abortSignal } : {}
35
+ });
36
+ abortSignal?.throwIfAborted();
37
+ return result;
38
+ } finally {
39
+ recordWriteRateLimitHit();
40
+ }
34
41
  }
35
42
  const resolutionOutcomes = await Promise.allSettled(
36
43
  requestedNamespaces.map(async (requestedNamespace) => {
@@ -50,6 +57,7 @@ async function runLcmCompactionFlushHttp({
50
57
  uniqueResolvedNamespaces.push(outcome.value);
51
58
  }
52
59
  }
60
+ abortSignal?.throwIfAborted();
53
61
  const serviceOutcomes = await Promise.allSettled(
54
62
  uniqueResolvedNamespaces.map(
55
63
  ({ namespace }) => service.lcmCompactionFlush({
@@ -57,7 +65,8 @@ async function runLcmCompactionFlushHttp({
57
65
  namespace,
58
66
  ...body.cwd !== void 0 ? { cwd: body.cwd } : {},
59
67
  ...body.projectTag !== void 0 ? { projectTag: body.projectTag } : {},
60
- authenticatedPrincipal: resolveRequestPrincipal()
68
+ authenticatedPrincipal: resolveRequestPrincipal(),
69
+ ...abortSignal !== void 0 ? { abortSignal } : {}
61
70
  })
62
71
  )
63
72
  );
@@ -77,6 +86,7 @@ async function runLcmCompactionFlushHttp({
77
86
  return serviceOutcome?.status === "fulfilled" ? { status: "fulfilled", namespace: requestedNamespace, result: serviceOutcome.value } : { status: "rejected", namespace: requestedNamespace };
78
87
  });
79
88
  recordWriteRateLimitHit();
89
+ abortSignal?.throwIfAborted();
80
90
  return {
81
91
  enabled: results.every((result) => result.status === "fulfilled" && result.result.enabled !== false),
82
92
  flushed: results.every((result) => result.status === "fulfilled" && result.result.flushed !== false),
@@ -133,4 +143,4 @@ export {
133
143
  handleLcmCompactionFlushHttp,
134
144
  runLcmCompactionRecordHttp
135
145
  };
136
- //# sourceMappingURL=chunk-GZ3R6XOE.js.map
146
+ //# sourceMappingURL=chunk-DJSJ4ULL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/access-http-lcm-compaction.ts"],"sourcesContent":["import type { ServerResponse } from \"node:http\";\n\nimport type { LcmCompactionFlushRequest, LcmCompactionRecordRequest } from \"./access-schema.js\";\nimport type {\n EngramAccessLcmCompactionFlushResponse,\n EngramAccessLcmCompactionRecordResponse,\n EngramAccessService,\n} from \"./access-service.js\";\n\ntype LcmCompactionService = Pick<EngramAccessService, \"lcmCompactionFlush\" | \"lcmCompactionRecord\">;\ntype JsonResponder = (res: ServerResponse, status: number, payload: unknown) => void;\n\nexport interface LcmCompactionFlushHttpOptions {\n body: LcmCompactionFlushRequest;\n service: LcmCompactionService;\n response: ServerResponse;\n ensureWriteRateLimitAvailable: () => void;\n recordWriteRateLimitHit: () => void;\n resolveNamespace: (namespace?: string) => string | undefined;\n defaultNamespace?: string;\n resolveRequestPrincipal: () => string | undefined;\n respondJson: JsonResponder;\n}\n\nexport function respondAccessCapabilitiesHttp(response: ServerResponse): void {\n response.statusCode = 200;\n response.setHeader(\"content-type\", \"application/json; charset=utf-8\");\n response.end(JSON.stringify({\n lcmCompactionFlushBatch: true,\n offlineSyncConvergenceComplete: true,\n // POST /engram|remnic/v1/memories/search — HTTP clients probe this before\n // using the route so they can degrade against an older daemon.\n memoriesSearch: true,\n }, null, 2));\n}\n\nexport interface LcmCompactionFlushRunnerOptions {\n body: LcmCompactionFlushRequest;\n service: LcmCompactionService;\n ensureWriteRateLimitAvailable: () => void;\n recordWriteRateLimitHit: () => void;\n resolveNamespace: (namespace?: string) => string | undefined;\n defaultNamespace?: string;\n resolveRequestPrincipal: () => string | undefined;\n abortSignal?: AbortSignal;\n}\n\ntype LcmCompactionFlushBatchResult =\n | {\n namespace: string;\n status: \"fulfilled\";\n result: EngramAccessLcmCompactionFlushResponse;\n }\n | { namespace: string; status: \"rejected\" };\n\ntype LcmCompactionFlushHttpResult =\n | EngramAccessLcmCompactionFlushResponse\n | {\n enabled: boolean;\n flushed: boolean;\n sessionKey: string;\n namespaces: string[];\n results: LcmCompactionFlushBatchResult[];\n };\n\nexport async function runLcmCompactionFlushHttp({\n body,\n service,\n ensureWriteRateLimitAvailable,\n recordWriteRateLimitHit,\n resolveNamespace,\n defaultNamespace,\n resolveRequestPrincipal,\n abortSignal,\n}: LcmCompactionFlushRunnerOptions): Promise<LcmCompactionFlushHttpResult> {\n abortSignal?.throwIfAborted();\n ensureWriteRateLimitAvailable();\n const requestedNamespaces = body.namespaces;\n if (requestedNamespaces === undefined) {\n try {\n const result = await service.lcmCompactionFlush({\n sessionKey: body.sessionKey,\n namespace: resolveNamespace(body.namespace),\n ...(body.cwd !== undefined ? { cwd: body.cwd } : {}),\n ...(body.projectTag !== undefined ? { projectTag: body.projectTag } : {}),\n authenticatedPrincipal: resolveRequestPrincipal(),\n ...(abortSignal !== undefined ? { abortSignal } : {}),\n });\n abortSignal?.throwIfAborted();\n return result;\n } finally {\n recordWriteRateLimitHit();\n }\n }\n const resolutionOutcomes = await Promise.allSettled(\n requestedNamespaces.map(async (requestedNamespace) => {\n const namespace = resolveNamespace(requestedNamespace);\n return {\n requestedNamespace,\n namespace,\n effectiveNamespace: namespace ?? defaultNamespace ?? \"\",\n };\n })\n );\n const uniqueResolvedNamespaces: Array<{\n requestedNamespace: string;\n namespace: string | undefined;\n effectiveNamespace: string;\n }> = [];\n const queuedEffectiveNamespaces = new Set<string>();\n for (const outcome of resolutionOutcomes) {\n if (outcome.status === \"fulfilled\" && !queuedEffectiveNamespaces.has(outcome.value.effectiveNamespace)) {\n queuedEffectiveNamespaces.add(outcome.value.effectiveNamespace);\n uniqueResolvedNamespaces.push(outcome.value);\n }\n }\n abortSignal?.throwIfAborted();\n const serviceOutcomes = await Promise.allSettled(\n uniqueResolvedNamespaces.map(({ namespace }) =>\n service.lcmCompactionFlush({\n sessionKey: body.sessionKey,\n namespace,\n ...(body.cwd !== undefined ? { cwd: body.cwd } : {}),\n ...(body.projectTag !== undefined ? { projectTag: body.projectTag } : {}),\n authenticatedPrincipal: resolveRequestPrincipal(),\n ...(abortSignal !== undefined ? { abortSignal } : {}),\n })\n )\n );\n const serviceOutcomesByEffectiveNamespace = new Map<\n string,\n PromiseSettledResult<EngramAccessLcmCompactionFlushResponse>\n >();\n for (const [index, resolved] of uniqueResolvedNamespaces.entries()) {\n const serviceOutcome = serviceOutcomes[index];\n if (serviceOutcome !== undefined) {\n serviceOutcomesByEffectiveNamespace.set(resolved.effectiveNamespace, serviceOutcome);\n }\n }\n const results = resolutionOutcomes.map((outcome, index): LcmCompactionFlushBatchResult => {\n const requestedNamespace = requestedNamespaces[index] ?? \"\";\n if (outcome.status === \"rejected\") {\n return { status: \"rejected\", namespace: requestedNamespace };\n }\n const serviceOutcome = serviceOutcomesByEffectiveNamespace.get(outcome.value.effectiveNamespace);\n return serviceOutcome?.status === \"fulfilled\"\n ? { status: \"fulfilled\", namespace: requestedNamespace, result: serviceOutcome.value }\n : { status: \"rejected\", namespace: requestedNamespace };\n });\n recordWriteRateLimitHit();\n abortSignal?.throwIfAborted();\n return {\n enabled: results.every((result) => result.status === \"fulfilled\" && result.result.enabled !== false),\n flushed: results.every((result) => result.status === \"fulfilled\" && result.result.flushed !== false),\n sessionKey: body.sessionKey,\n namespaces: requestedNamespaces,\n results,\n };\n}\nexport async function handleLcmCompactionFlushHttp({\n body,\n service,\n response,\n ensureWriteRateLimitAvailable,\n recordWriteRateLimitHit,\n resolveNamespace,\n defaultNamespace,\n resolveRequestPrincipal,\n respondJson,\n}: LcmCompactionFlushHttpOptions): Promise<void> {\n const result = await runLcmCompactionFlushHttp({\n body,\n service,\n ensureWriteRateLimitAvailable,\n recordWriteRateLimitHit,\n resolveNamespace,\n defaultNamespace,\n resolveRequestPrincipal,\n });\n respondJson(response, 200, result);\n}\n\nexport interface LcmCompactionRecordHttpOptions {\n body: LcmCompactionRecordRequest;\n service: LcmCompactionService;\n ensureWriteRateLimitAvailable: () => void;\n recordWriteRateLimitHit: () => void;\n resolveNamespace: (namespace?: string) => string | undefined;\n resolveRequestPrincipal: () => string | undefined;\n}\n\nexport async function runLcmCompactionRecordHttp({\n body,\n service,\n ensureWriteRateLimitAvailable,\n recordWriteRateLimitHit,\n resolveNamespace,\n resolveRequestPrincipal,\n}: LcmCompactionRecordHttpOptions): Promise<EngramAccessLcmCompactionRecordResponse> {\n ensureWriteRateLimitAvailable();\n const response = await service.lcmCompactionRecord({\n sessionKey: body.sessionKey,\n namespace: resolveNamespace(body.namespace),\n tokensBefore: body.tokensBefore,\n tokensAfter: body.tokensAfter,\n authenticatedPrincipal: resolveRequestPrincipal(),\n });\n recordWriteRateLimitHit();\n return response;\n}\n"],"mappings":"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","names":[]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  resolveDefaultNamespaceRoot
3
- } from "./chunk-GXQ5GDUH.js";
3
+ } from "./chunk-N3MNDVJO.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-YUAOU2B2.js";
6
+ } from "./chunk-S55WTPFJ.js";
7
7
  import {
8
8
  composeLocationDayBody,
9
9
  composeLocationDayMeta,
@@ -728,4 +728,4 @@ export {
728
728
  runLocationBackfill,
729
729
  runLocationCliCommand
730
730
  };
731
- //# sourceMappingURL=chunk-SUSMEKBE.js.map
731
+ //# sourceMappingURL=chunk-EU3N5MK3.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  hasMemoryData
3
- } from "./chunk-YL273SOF.js";
3
+ } from "./chunk-WB2I2EQK.js";
4
4
  import {
5
5
  resolveNamespaceStorageRoot
6
- } from "./chunk-GXQ5GDUH.js";
6
+ } from "./chunk-N3MNDVJO.js";
7
7
  import {
8
8
  getConfiguredNamespaces
9
9
  } from "./chunk-OWYHHW67.js";
@@ -724,4 +724,4 @@ export {
724
724
  runNamespaceMaintenancePlan,
725
725
  runNamespaceMaintenanceBatchPlan
726
726
  };
727
- //# sourceMappingURL=chunk-QJAGDPY7.js.map
727
+ //# sourceMappingURL=chunk-FYAU4S6E.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SupportPassportCreateGrantRequestSchema,
3
3
  defineOperation
4
- } from "./chunk-FMT52ROU.js";
4
+ } from "./chunk-SVZWVZ7E.js";
5
5
  import {
6
6
  SupportPassportCardCategorySchema,
7
7
  SupportPassportMemoryIdSchema,
@@ -220,4 +220,4 @@ var supportPassportGrantAskOperation = defineOperation({
220
220
  result: await ctx.service.supportPassportAskGrant(grantId, secret, question, ctx.abortSignal)
221
221
  })
222
222
  });
223
- //# sourceMappingURL=chunk-LEP46X5Y.js.map
223
+ //# sourceMappingURL=chunk-GEX5NI36.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-6ET2VII7.js";
8
8
  import {
9
9
  StorageManager
10
- } from "./chunk-YUAOU2B2.js";
10
+ } from "./chunk-S55WTPFJ.js";
11
11
  import {
12
12
  parseContinuityImprovementLoops
13
13
  } from "./chunk-LDXUBPMO.js";
@@ -1283,4 +1283,4 @@ export {
1283
1283
  defaultTierMigrationCycleBudget,
1284
1284
  CompoundingEngine
1285
1285
  };
1286
- //# sourceMappingURL=chunk-X3NZ2HAO.js.map
1286
+ //# sourceMappingURL=chunk-GZAGLCQH.js.map
@@ -2,7 +2,7 @@ import {
2
2
  SupportPassportError,
3
3
  SupportPassportOwnerCreateGrantRequestSchema,
4
4
  getOperation
5
- } from "./chunk-FMT52ROU.js";
5
+ } from "./chunk-SVZWVZ7E.js";
6
6
 
7
7
  // src/support-passport/access-http.ts
8
8
  var OWNER_ROOT = "/engram/v1/support-passport";
@@ -137,4 +137,4 @@ export {
137
137
  SUPPORT_PASSPORT_OWNER_HTTP_ROUTES,
138
138
  handleSupportPassportOwnerHttp
139
139
  };
140
- //# sourceMappingURL=chunk-AVO2CBIL.js.map
140
+ //# sourceMappingURL=chunk-HKFJ3PF3.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-YUAOU2B2.js";
3
+ } from "./chunk-S55WTPFJ.js";
4
4
  import {
5
5
  composeMemoryEnvelope
6
6
  } from "./chunk-GDYU6VF4.js";
@@ -546,4 +546,4 @@ export {
546
546
  setSemanticRulePromotionTestHooks,
547
547
  promoteSemanticRuleFromMemory
548
548
  };
549
- //# sourceMappingURL=chunk-K2SXIWEV.js.map
549
+ //# sourceMappingURL=chunk-IA3X2Y4K.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseEntityFile
3
- } from "./chunk-YUAOU2B2.js";
3
+ } from "./chunk-S55WTPFJ.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-QIDMGBUY.js.map
256
+ //# sourceMappingURL=chunk-IMAP236M.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  rebuildMemoryProjection
3
- } from "./chunk-6MJGDUC7.js";
3
+ } from "./chunk-T4BE5KJM.js";
4
4
 
5
5
  // src/convergence-refresh.ts
6
6
  async function refreshConvergedNamespaces(namespaces, namespaceSearchRouter, getStorage, searchEnabled) {
@@ -32,4 +32,4 @@ async function refreshConvergedNamespaces(namespaces, namespaceSearchRouter, get
32
32
  export {
33
33
  refreshConvergedNamespaces
34
34
  };
35
- //# sourceMappingURL=chunk-OHRIBMSS.js.map
35
+ //# sourceMappingURL=chunk-JS3S2HVG.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-TBBDFYXW.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-YUAOU2B2.js";
6
+ } from "./chunk-S55WTPFJ.js";
7
7
  import {
8
8
  bumpMemoryCorpusVersionForDir
9
9
  } from "./chunk-XCB6QDL6.js";
@@ -765,4 +765,4 @@ export {
765
765
  listMemoryGovernanceRuns,
766
766
  readMemoryGovernanceRunArtifact
767
767
  };
768
- //# sourceMappingURL=chunk-FVK5NQ3V.js.map
768
+ //# sourceMappingURL=chunk-JVY556FW.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS,
3
3
  SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES
4
- } from "./chunk-FMT52ROU.js";
4
+ } from "./chunk-SVZWVZ7E.js";
5
5
  import {
6
6
  SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH
7
7
  } from "./chunk-PWPIERBM.js";
@@ -343,4 +343,4 @@ export {
343
343
  parseSupportPassportModelJob,
344
344
  SupportPassportModelBridge
345
345
  };
346
- //# sourceMappingURL=chunk-3K3PITOE.js.map
346
+ //# sourceMappingURL=chunk-JXMECXMF.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  defineOperation
3
- } from "./chunk-FMT52ROU.js";
3
+ } from "./chunk-SVZWVZ7E.js";
4
4
  import {
5
5
  EngramAccessInputError
6
6
  } from "./chunk-3MUKQQ7A.js";
@@ -92,4 +92,4 @@ defineOperation({
92
92
  };
93
93
  }
94
94
  });
95
- //# sourceMappingURL=chunk-NGFRFDSK.js.map
95
+ //# sourceMappingURL=chunk-KERNN6BC.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  startLocationAutoSync
3
- } from "./chunk-NYZRJW5X.js";
3
+ } from "./chunk-BJX3VQWZ.js";
4
4
  import {
5
5
  ensureContradictionScanCron,
6
6
  ensureDaySummaryCron,
@@ -12,14 +12,14 @@ import {
12
12
  } from "./chunk-666A3MOW.js";
13
13
  import {
14
14
  rebuildMemoryLifecycleLedger
15
- } from "./chunk-A2XDQ3JW.js";
15
+ } from "./chunk-OM5BIPBR.js";
16
16
  import {
17
17
  planNamespaceMaintenance,
18
18
  runNamespaceMaintenanceBatchPlan
19
- } from "./chunk-QJAGDPY7.js";
19
+ } from "./chunk-FYAU4S6E.js";
20
20
  import {
21
21
  rebuildMemoryProjection
22
- } from "./chunk-6MJGDUC7.js";
22
+ } from "./chunk-T4BE5KJM.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-LZLJK2IA.js.map
2453
+ //# sourceMappingURL=chunk-L2LBMKSI.js.map
@@ -318,4 +318,4 @@ export {
318
318
  readProjectedHarmonicGraph,
319
319
  searchHarmonicRetrieval
320
320
  };
321
- //# sourceMappingURL=chunk-NHV6WCM5.js.map
321
+ //# sourceMappingURL=chunk-ML2MVAEZ.js.map
@@ -41,13 +41,24 @@ var LcmWorkQueue = class {
41
41
  this.idleWaiters.push(resolve);
42
42
  });
43
43
  }
44
- async whenSessionIdle(sessionId) {
45
- if (!this.pending.has(sessionId) && !this.inFlightSessions.has(sessionId))
46
- return;
47
- await new Promise((resolve) => {
44
+ async whenSessionIdle(sessionId, abortSignal) {
45
+ abortSignal?.throwIfAborted();
46
+ if (!this.pending.has(sessionId) && !this.inFlightSessions.has(sessionId)) return;
47
+ await new Promise((resolve, reject) => {
48
+ const finish = () => {
49
+ abortSignal?.removeEventListener("abort", onAbort);
50
+ resolve();
51
+ };
52
+ const onAbort = () => {
53
+ const remaining = (this.sessionIdleWaiters.get(sessionId) ?? []).filter((waiter) => waiter !== finish);
54
+ if (remaining.length === 0) this.sessionIdleWaiters.delete(sessionId);
55
+ else this.sessionIdleWaiters.set(sessionId, remaining);
56
+ reject(abortSignal?.reason instanceof Error ? abortSignal.reason : new DOMException("Aborted", "AbortError"));
57
+ };
48
58
  const waiters = this.sessionIdleWaiters.get(sessionId) ?? [];
49
- waiters.push(resolve);
59
+ waiters.push(finish);
50
60
  this.sessionIdleWaiters.set(sessionId, waiters);
61
+ abortSignal?.addEventListener("abort", onAbort, { once: true });
51
62
  });
52
63
  }
53
64
  startAvailableJobs() {
@@ -127,4 +138,4 @@ var LcmWorkQueue = class {
127
138
  export {
128
139
  LcmWorkQueue
129
140
  };
130
- //# sourceMappingURL=chunk-TPDBFYEG.js.map
141
+ //# sourceMappingURL=chunk-MMCO4SRG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lcm/queue.ts"],"sourcesContent":["export interface LcmObserveMessage {\n role: string;\n content: string;\n parts?: import(\"../message-parts/index.js\").LcmMessagePartInput[];\n rawContent?: unknown;\n sourceFormat?: import(\"../message-parts/index.js\").MessagePartSourceFormat;\n}\n\nexport interface LcmWorkQueueHooks {\n onJobStart?: (input: {\n sessionId: string;\n depth: number;\n inFlight: number;\n waitMs: number;\n }) => void;\n onJobFinish?: (input: {\n sessionId: string;\n depth: number;\n inFlight: number;\n waitMs: number;\n runMs: number;\n totalMs: number;\n error?: unknown;\n }) => void;\n}\n\nexport interface LcmWorkQueueOptions {\n concurrency?: number;\n worker: (sessionId: string, messages: LcmObserveMessage[]) => Promise<void>;\n hooks?: LcmWorkQueueHooks;\n}\n\ninterface PendingJob {\n sessionId: string;\n messages: LcmObserveMessage[];\n enqueuedAt: number;\n}\n\n/**\n * Small keyed work queue for LCM observe processing.\n *\n * Jobs are coalesced per session while they are pending. A session can have\n * at most one in-flight job at a time, and the queue processes jobs FIFO up to\n * the configured concurrency limit.\n */\nexport class LcmWorkQueue {\n private readonly concurrency: number;\n private readonly worker: (\n sessionId: string,\n messages: LcmObserveMessage[],\n ) => Promise<void>;\n private readonly hooks: LcmWorkQueueHooks;\n private readonly pending = new Map<string, PendingJob>();\n private readonly inFlightSessions = new Set<string>();\n private inFlight = 0;\n private readonly idleWaiters: Array<() => void> = [];\n private readonly sessionIdleWaiters = new Map<string, Array<() => void>>();\n private drainScheduled = false;\n\n constructor(options: LcmWorkQueueOptions) {\n this.concurrency = Math.max(1, Math.floor(options.concurrency ?? 1));\n this.worker = options.worker;\n this.hooks = options.hooks ?? {};\n }\n\n enqueue(sessionId: string, messages: LcmObserveMessage[]): void {\n if (messages.length === 0) return;\n\n const now = Date.now();\n const existing = this.pending.get(sessionId);\n if (existing) {\n existing.messages.push(...messages.map((message) => ({ ...message })));\n } else {\n this.pending.set(sessionId, {\n sessionId,\n messages: messages.map((message) => ({ ...message })),\n enqueuedAt: now,\n });\n }\n\n this.scheduleDrain();\n }\n\n get depth(): number {\n return this.pending.size;\n }\n\n get inFlightCount(): number {\n return this.inFlight;\n }\n\n async whenIdle(): Promise<void> {\n if (this.depth === 0 && this.inFlight === 0) return;\n await new Promise<void>((resolve) => {\n this.idleWaiters.push(resolve);\n });\n }\n\n async whenSessionIdle(sessionId: string, abortSignal?: AbortSignal): Promise<void> {\n abortSignal?.throwIfAborted();\n if (!this.pending.has(sessionId) && !this.inFlightSessions.has(sessionId)) return;\n await new Promise<void>((resolve, reject) => {\n const finish = (): void => {\n abortSignal?.removeEventListener(\"abort\", onAbort);\n resolve();\n };\n const onAbort = (): void => {\n const remaining = (this.sessionIdleWaiters.get(sessionId) ?? []).filter((waiter) => waiter !== finish);\n if (remaining.length === 0) this.sessionIdleWaiters.delete(sessionId);\n else this.sessionIdleWaiters.set(sessionId, remaining);\n reject(abortSignal?.reason instanceof Error ? abortSignal.reason : new DOMException(\"Aborted\", \"AbortError\"));\n };\n const waiters = this.sessionIdleWaiters.get(sessionId) ?? [];\n waiters.push(finish);\n this.sessionIdleWaiters.set(sessionId, waiters);\n abortSignal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n }\n\n private startAvailableJobs(): void {\n while (this.inFlight < this.concurrency && this.pending.size > 0) {\n const next = Array.from(this.pending.entries()).find(\n ([sessionId]) => !this.inFlightSessions.has(sessionId),\n );\n if (!next) break;\n\n const [sessionId, job] = next;\n this.pending.delete(sessionId);\n this.inFlight++;\n this.inFlightSessions.add(sessionId);\n\n const startedAt = Date.now();\n const waitMs = startedAt - job.enqueuedAt;\n this.hooks.onJobStart?.({\n sessionId,\n depth: this.depth,\n inFlight: this.inFlight,\n waitMs,\n });\n\n void this.runJob(job, startedAt, waitMs);\n }\n\n this.resolveIdleWaitersIfNeeded();\n }\n\n private scheduleDrain(): void {\n if (this.drainScheduled) return;\n this.drainScheduled = true;\n\n queueMicrotask(() => {\n this.drainScheduled = false;\n this.startAvailableJobs();\n });\n }\n\n private async runJob(\n job: PendingJob,\n startedAt: number,\n waitMs: number,\n ): Promise<void> {\n let error: unknown;\n\n try {\n await this.worker(job.sessionId, job.messages);\n } catch (err) {\n error = err;\n } finally {\n const finishedAt = Date.now();\n const runMs = finishedAt - startedAt;\n const totalMs = finishedAt - job.enqueuedAt;\n\n this.inFlight--;\n this.inFlightSessions.delete(job.sessionId);\n this.hooks.onJobFinish?.({\n sessionId: job.sessionId,\n depth: this.depth,\n inFlight: this.inFlight,\n waitMs,\n runMs,\n totalMs,\n error,\n });\n\n if (this.pending.size > 0) {\n this.scheduleDrain();\n } else {\n this.resolveIdleWaitersIfNeeded();\n }\n this.resolveSessionIdleWaitersIfNeeded(job.sessionId);\n }\n }\n\n private resolveIdleWaitersIfNeeded(): void {\n if (this.depth !== 0 || this.inFlight !== 0) return;\n\n const waiters = this.idleWaiters.splice(0, this.idleWaiters.length);\n for (const resolve of waiters) resolve();\n }\n\n private resolveSessionIdleWaitersIfNeeded(sessionId: string): void {\n if (this.pending.has(sessionId) || this.inFlightSessions.has(sessionId))\n return;\n\n const waiters = this.sessionIdleWaiters.get(sessionId);\n if (!waiters || waiters.length === 0) return;\n\n this.sessionIdleWaiters.delete(sessionId);\n for (const resolve of waiters) resolve();\n }\n}\n"],"mappings":"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","names":["sessionId"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-YUAOU2B2.js";
3
+ } from "./chunk-S55WTPFJ.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-GXQ5GDUH.js.map
415
+ //# sourceMappingURL=chunk-N3MNDVJO.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  computeCorpusWatermarks,
6
6
  resolveCorpusNamespaceRoots
7
- } from "./chunk-RDUM6BKQ.js";
7
+ } from "./chunk-CRKWSSS4.js";
8
8
 
9
9
  // src/operator-doctor-corpus.ts
10
10
  var DIGEST_PREFIX_LENGTH = 12;
@@ -78,4 +78,4 @@ export {
78
78
  corpusWatermarksFromCheck,
79
79
  summarizeCorpusAndReplica
80
80
  };
81
- //# sourceMappingURL=chunk-WGXWZE3K.js.map
81
+ //# sourceMappingURL=chunk-NAYBHNGN.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-YUAOU2B2.js";
3
+ } from "./chunk-S55WTPFJ.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-X33QB7LW.js.map
122
+ //# sourceMappingURL=chunk-NKFLHW7J.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getOperation
3
- } from "./chunk-FMT52ROU.js";
3
+ } from "./chunk-SVZWVZ7E.js";
4
4
  import {
5
5
  EngramAccessInputError
6
6
  } from "./chunk-3MUKQQ7A.js";
@@ -21,4 +21,4 @@ async function respondBriefingHttp(options) {
21
21
  export {
22
22
  respondBriefingHttp
23
23
  };
24
- //# sourceMappingURL=chunk-GARVFCV6.js.map
24
+ //# sourceMappingURL=chunk-NMBX4D7P.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-KJTKLXTH.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-YUAOU2B2.js";
6
+ } from "./chunk-S55WTPFJ.js";
7
7
  import {
8
8
  assertInjectedStorageRooted
9
9
  } from "./chunk-JE334SIA.js";
@@ -260,4 +260,4 @@ export {
260
260
  backupExistingLedger,
261
261
  rebuildMemoryLifecycleLedger
262
262
  };
263
- //# sourceMappingURL=chunk-A2XDQ3JW.js.map
263
+ //# sourceMappingURL=chunk-OM5BIPBR.js.map