@remnic/core 9.3.725 → 9.3.727

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 (352) hide show
  1. package/dist/access-boundary.d.ts +5 -5
  2. package/dist/access-boundary.js +28 -27
  3. package/dist/access-cli.js +65 -63
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.d.ts +20 -5
  6. package/dist/access-http.js +34 -33
  7. package/dist/access-mcp.d.ts +5 -5
  8. package/dist/access-mcp.js +31 -30
  9. package/dist/access-operations-batch.js +29 -28
  10. package/dist/access-operations.d.ts +5 -5
  11. package/dist/access-operations.js +30 -29
  12. package/dist/{access-service-B2PlPtxh.d.ts → access-service-Bgpjxo4f.d.ts} +36 -4
  13. package/dist/access-service.d.ts +5 -5
  14. package/dist/access-service.js +27 -26
  15. package/dist/access-surface-catalog.d.ts +5 -5
  16. package/dist/action-confidence.d.ts +1 -1
  17. package/dist/active-memory-bridge.d.ts +1 -1
  18. package/dist/active-recall.d.ts +1 -1
  19. package/dist/active-recall.js +3 -3
  20. package/dist/adapters/index.js +4 -4
  21. package/dist/adapters/registry.js +2 -2
  22. package/dist/behavior-learner.d.ts +1 -1
  23. package/dist/behavior-signals.d.ts +1 -1
  24. package/dist/bootstrap.d.ts +4 -4
  25. package/dist/briefing.d.ts +1 -1
  26. package/dist/briefing.js +9 -8
  27. package/dist/buffer-surprise-report.d.ts +1 -1
  28. package/dist/buffer.d.ts +1 -1
  29. package/dist/calibration.d.ts +1 -1
  30. package/dist/capabilities.d.ts +1 -1
  31. package/dist/{catalog-CzUb-GyD.d.ts → catalog-bMczlO2G.d.ts} +1 -1
  32. package/dist/causal-behavior.d.ts +1 -1
  33. package/dist/causal-consolidation.d.ts +1 -1
  34. package/dist/causal-consolidation.js +10 -9
  35. package/dist/causal-consolidation.js.map +1 -1
  36. package/dist/causal-trajectory-graph.d.ts +1 -1
  37. package/dist/{chunk-KGZF2VO3.js → chunk-27QQC7ZX.js} +80 -19
  38. package/dist/{chunk-KGZF2VO3.js.map → chunk-27QQC7ZX.js.map} +1 -1
  39. package/dist/{chunk-HCVWF657.js → chunk-2KAYTPPT.js} +12 -12
  40. package/dist/{chunk-4SF232E6.js → chunk-36SEDFAU.js} +19 -7
  41. package/dist/chunk-36SEDFAU.js.map +1 -0
  42. package/dist/{chunk-ZK2L72VN.js → chunk-37436GML.js} +2 -2
  43. package/dist/{chunk-SC2YAWRF.js → chunk-3TSTGI6F.js} +2 -2
  44. package/dist/{chunk-FACTVMXQ.js → chunk-4H4F3BFL.js} +2 -2
  45. package/dist/{chunk-WAFDHKES.js → chunk-4NOI577P.js} +2 -2
  46. package/dist/{chunk-YQMPUYHE.js → chunk-4NR2PDZ5.js} +2 -2
  47. package/dist/{chunk-TAPSNIMA.js → chunk-5CEJH5ZN.js} +4 -4
  48. package/dist/{chunk-FN6QP7JQ.js → chunk-6PY5YJAV.js} +100 -14
  49. package/dist/{chunk-FN6QP7JQ.js.map → chunk-6PY5YJAV.js.map} +1 -1
  50. package/dist/{chunk-PKMQK2WY.js → chunk-773DPI6T.js} +4 -4
  51. package/dist/{chunk-4R3CGCI5.js → chunk-7RLCCNHU.js} +15 -12
  52. package/dist/chunk-7RLCCNHU.js.map +1 -0
  53. package/dist/{chunk-XGTBNVIU.js → chunk-AAD2ZS6P.js} +11 -1
  54. package/dist/chunk-AAD2ZS6P.js.map +1 -0
  55. package/dist/{chunk-Z3FGC3QE.js → chunk-AQLOP5F4.js} +139 -30
  56. package/dist/chunk-AQLOP5F4.js.map +1 -0
  57. package/dist/{chunk-FXCIOLRB.js → chunk-ASKXIAHD.js} +2 -2
  58. package/dist/{chunk-5OPYYPJN.js → chunk-CBWI22JN.js} +2 -2
  59. package/dist/{chunk-ZOHMPFOB.js → chunk-CKFLLAIS.js} +3 -3
  60. package/dist/{chunk-GZQXOQQ2.js → chunk-CSRXQ6NB.js} +5 -5
  61. package/dist/{chunk-QR67FU5G.js → chunk-CTOQEZSN.js} +2 -2
  62. package/dist/{chunk-ZUDM75KG.js → chunk-DCWIQFNA.js} +4 -4
  63. package/dist/{chunk-6CWGS2LY.js → chunk-DKJCRGWM.js} +3 -3
  64. package/dist/{chunk-JJJCVCCQ.js → chunk-DMQWV6SQ.js} +2 -2
  65. package/dist/{chunk-F3XZN24Z.js → chunk-DRUDC2UX.js} +2 -2
  66. package/dist/{chunk-4WZ3J7M6.js → chunk-EY6MDMHK.js} +2 -2
  67. package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
  68. package/dist/{chunk-C4X4QGIO.js → chunk-G6NKALRN.js} +5 -2
  69. package/dist/chunk-G6NKALRN.js.map +1 -0
  70. package/dist/{chunk-6SQQOJ4U.js → chunk-GKRLPHPU.js} +2 -2
  71. package/dist/{chunk-D7EBTQ24.js → chunk-HOHVIVDR.js} +2 -2
  72. package/dist/{chunk-RKNJBZ55.js → chunk-JBPKEARU.js} +4 -4
  73. package/dist/{chunk-UBHVAGO7.js → chunk-JYLFZWUX.js} +2 -2
  74. package/dist/{chunk-LD53WPMU.js → chunk-LQ6JI4VH.js} +4 -4
  75. package/dist/chunk-LTHVM4XN.js +109 -0
  76. package/dist/chunk-LTHVM4XN.js.map +1 -0
  77. package/dist/{chunk-WM7DNKBD.js → chunk-M4V2JVSZ.js} +2 -2
  78. package/dist/{chunk-I2HL5M6T.js → chunk-MJIHJ7OG.js} +52 -52
  79. package/dist/{chunk-J334N6QV.js → chunk-MLKWJOAJ.js} +2 -2
  80. package/dist/{chunk-C6BWLYW5.js → chunk-N3VNUM4Z.js} +171 -79
  81. package/dist/chunk-N3VNUM4Z.js.map +1 -0
  82. package/dist/{chunk-DF3I6JGP.js → chunk-NSA5ZRUL.js} +15 -15
  83. package/dist/{chunk-VI5SGGXB.js → chunk-OEEW4KJA.js} +4 -4
  84. package/dist/{chunk-7AG54AF3.js → chunk-PUR2CKX2.js} +1 -1
  85. package/dist/chunk-PUR2CKX2.js.map +1 -0
  86. package/dist/{chunk-NT36GU6X.js → chunk-R7IYU5DZ.js} +2 -2
  87. package/dist/{chunk-TT5U3UDO.js → chunk-SNKPUJHR.js} +4 -4
  88. package/dist/{chunk-T55EGZSJ.js → chunk-UVPL565C.js} +2 -2
  89. package/dist/chunk-W5H6ZRPT.js +14 -0
  90. package/dist/chunk-W5H6ZRPT.js.map +1 -0
  91. package/dist/{chunk-YQGHW5ML.js → chunk-WRFKZEO6.js} +4 -4
  92. package/dist/{chunk-KLFYKC3K.js → chunk-XPHVAOBT.js} +195 -74
  93. package/dist/chunk-XPHVAOBT.js.map +1 -0
  94. package/dist/{chunk-H7HUQIY7.js → chunk-Y4YD5TYW.js} +3 -3
  95. package/dist/{chunk-MDBZTH7N.js → chunk-YKBHOBJK.js} +44 -10
  96. package/dist/chunk-YKBHOBJK.js.map +1 -0
  97. package/dist/{chunk-YUYPWJD3.js → chunk-YOLZS7NY.js} +2 -2
  98. package/dist/{chunk-6OIDDKAA.js → chunk-YTU7WKYN.js} +35 -9
  99. package/dist/chunk-YTU7WKYN.js.map +1 -0
  100. package/dist/{cli-IOlDHSBT.d.ts → cli-BLME420h.d.ts} +3 -3
  101. package/dist/cli.d.ts +6 -6
  102. package/dist/cli.js +60 -59
  103. package/dist/compat/codex-cli-fallback.d.ts +1 -0
  104. package/dist/compat/codex-cli-fallback.js +22 -0
  105. package/dist/compat/codex-cli-fallback.js.map +1 -0
  106. package/dist/compat/codex-thread-key.d.ts +1 -0
  107. package/dist/compat/codex-thread-key.js +18 -0
  108. package/dist/compat/codex-thread-key.js.map +1 -0
  109. package/dist/compounding/engine.d.ts +1 -1
  110. package/dist/compounding/engine.js +9 -8
  111. package/dist/compounding/preference-consolidator.d.ts +1 -1
  112. package/dist/compression-optimizer.d.ts +1 -1
  113. package/dist/config.d.ts +1 -1
  114. package/dist/config.js +3 -3
  115. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  116. package/dist/connectors/codex-materialize-runner.js +9 -8
  117. package/dist/connectors/codex-materialize.d.ts +1 -1
  118. package/dist/connectors/index.d.ts +1 -1
  119. package/dist/connectors/index.js +9 -8
  120. package/dist/consolidation-provenance-check.d.ts +1 -1
  121. package/dist/consolidation-undo.d.ts +1 -1
  122. package/dist/content-hash.d.ts +14 -0
  123. package/dist/content-hash.js +10 -0
  124. package/dist/content-hash.js.map +1 -0
  125. package/dist/contradiction/index.d.ts +1 -1
  126. package/dist/conversation-index/backend.d.ts +1 -1
  127. package/dist/conversation-index/backend.js +2 -2
  128. package/dist/conversation-index/chunker.d.ts +1 -1
  129. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  130. package/dist/conversation-index/indexer.d.ts +1 -1
  131. package/dist/conversation-index/search.d.ts +1 -1
  132. package/dist/dashboard-runtime.js +2 -2
  133. package/dist/day-summary.d.ts +1 -1
  134. package/dist/delinearize.d.ts +1 -1
  135. package/dist/direct-answer-wiring.d.ts +1 -1
  136. package/dist/direct-answer.d.ts +1 -1
  137. package/dist/embedding-fallback.d.ts +1 -1
  138. package/dist/enrichment/index.d.ts +1 -1
  139. package/dist/entity-retrieval.d.ts +1 -1
  140. package/dist/entity-retrieval.js +9 -8
  141. package/dist/entity-schema.d.ts +1 -1
  142. package/dist/explicit-capture.d.ts +4 -4
  143. package/dist/extraction-faithfulness.d.ts +1 -1
  144. package/dist/extraction-faithfulness.js +2 -2
  145. package/dist/extraction-judge-telemetry.d.ts +1 -1
  146. package/dist/extraction-judge-training.d.ts +1 -1
  147. package/dist/extraction-judge.d.ts +1 -1
  148. package/dist/extraction-redaction-rules.d.ts +33 -0
  149. package/dist/extraction-redaction-rules.js +14 -0
  150. package/dist/extraction-redaction-rules.js.map +1 -0
  151. package/dist/extraction.d.ts +1 -1
  152. package/dist/extraction.js +3 -3
  153. package/dist/faithfulness-config.d.ts +1 -0
  154. package/dist/faithfulness-config.js +1 -1
  155. package/dist/fallback-llm.d.ts +1 -1
  156. package/dist/{forget-OEE5OELK.js → forget-WYLR4ZFV.js} +2 -2
  157. package/dist/graph-dashboard-diff.d.ts +1 -1
  158. package/dist/graph-dashboard-key.d.ts +1 -1
  159. package/dist/graph-dashboard-parser.d.ts +1 -1
  160. package/dist/graph-edge-reinforcement.d.ts +1 -1
  161. package/dist/graph-snapshot.d.ts +1 -1
  162. package/dist/graph.d.ts +1 -1
  163. package/dist/identity-continuity.d.ts +1 -1
  164. package/dist/importance.d.ts +1 -1
  165. package/dist/index.d.ts +9 -9
  166. package/dist/index.js +107 -105
  167. package/dist/index.js.map +1 -1
  168. package/dist/intent.d.ts +1 -1
  169. package/dist/lcm/engine.d.ts +1 -1
  170. package/dist/lcm/engine.js +2 -2
  171. package/dist/lcm/index.d.ts +1 -1
  172. package/dist/lcm/index.js +4 -4
  173. package/dist/lcm/tools.d.ts +1 -1
  174. package/dist/lifecycle.d.ts +1 -1
  175. package/dist/live-connectors-runner.d.ts +1 -1
  176. package/dist/local-llm.d.ts +1 -1
  177. package/dist/local-model-endpoint.d.ts +9 -4
  178. package/dist/local-model-endpoint.js +1 -1
  179. package/dist/maintenance/memory-governance.d.ts +1 -1
  180. package/dist/maintenance/memory-governance.js +9 -8
  181. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +9 -8
  182. package/dist/maintenance/rebuild-memory-projection.js +10 -9
  183. package/dist/mcp-memory-inspector-app.d.ts +5 -5
  184. package/dist/memory-action-policy.d.ts +1 -1
  185. package/dist/memory-cache.d.ts +1 -1
  186. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  187. package/dist/memory-projection-store.d.ts +1 -1
  188. package/dist/memory-provenance.d.ts +1 -1
  189. package/dist/memory-worth-outcomes.d.ts +1 -1
  190. package/dist/models-json.d.ts +1 -1
  191. package/dist/namespaces/migrate.d.ts +2 -2
  192. package/dist/namespaces/migrate.js +19 -18
  193. package/dist/namespaces/principal.d.ts +1 -1
  194. package/dist/namespaces/search.d.ts +1 -1
  195. package/dist/namespaces/search.js +9 -9
  196. package/dist/namespaces/storage.d.ts +2 -2
  197. package/dist/namespaces/storage.js +9 -8
  198. package/dist/native-knowledge.d.ts +1 -1
  199. package/dist/operator-toolkit.d.ts +1 -1
  200. package/dist/operator-toolkit.js +28 -27
  201. package/dist/orchestration/maintenance.d.ts +2 -2
  202. package/dist/orchestration/maintenance.js +11 -10
  203. package/dist/{orchestrator-C_OMSIMZ.d.ts → orchestrator-DqPAz8ot.d.ts} +3 -3
  204. package/dist/orchestrator.d.ts +4 -4
  205. package/dist/orchestrator.js +51 -49
  206. package/dist/patterns-cli.d.ts +1 -1
  207. package/dist/policy-runtime.d.ts +1 -1
  208. package/dist/provenance.d.ts +1 -1
  209. package/dist/provenance.js +1 -1
  210. package/dist/qmd-recall-cache.d.ts +1 -1
  211. package/dist/qmd.d.ts +1 -1
  212. package/dist/recall-disclosure-escalation.d.ts +1 -1
  213. package/dist/recall-explain-renderer.d.ts +1 -1
  214. package/dist/recall-explain-renderer.js +3 -3
  215. package/dist/recall-planner-llm.d.ts +1 -1
  216. package/dist/recall-state.d.ts +1 -1
  217. package/dist/recall-tag-filter.d.ts +1 -1
  218. package/dist/recall-xray-cli.d.ts +1 -1
  219. package/dist/recall-xray-cli.js +4 -4
  220. package/dist/recall-xray-renderer.d.ts +1 -1
  221. package/dist/recall-xray-renderer.js +3 -3
  222. package/dist/recall-xray.d.ts +1 -1
  223. package/dist/recall-xray.js +2 -2
  224. package/dist/resolve-auth-token.d.ts +1 -1
  225. package/dist/resume-bundles.js +4 -4
  226. package/dist/retrieval-agents.d.ts +1 -1
  227. package/dist/retrieval-tiers.d.ts +1 -1
  228. package/dist/routing/engine.d.ts +1 -1
  229. package/dist/routing/store.d.ts +1 -1
  230. package/dist/schemas.d.ts +22 -22
  231. package/dist/search/embed-helper.d.ts +1 -1
  232. package/dist/search/factory.d.ts +1 -1
  233. package/dist/search/factory.js +8 -8
  234. package/dist/search/index.d.ts +1 -1
  235. package/dist/search/index.js +14 -14
  236. package/dist/search/lancedb-backend.d.ts +1 -1
  237. package/dist/search/lancedb-backend.js +2 -2
  238. package/dist/search/meilisearch-backend.d.ts +1 -1
  239. package/dist/search/meilisearch-backend.js +2 -2
  240. package/dist/search/noop-backend.d.ts +1 -1
  241. package/dist/search/orama-backend.d.ts +1 -1
  242. package/dist/search/orama-backend.js +2 -2
  243. package/dist/search/port.d.ts +1 -1
  244. package/dist/search/remote-backend.d.ts +1 -1
  245. package/dist/{semantic-consolidation-B8LiYtvx.d.ts → semantic-consolidation-Cl15ksZy.d.ts} +1 -1
  246. package/dist/semantic-consolidation.d.ts +2 -2
  247. package/dist/semantic-consolidation.js +10 -9
  248. package/dist/semantic-rule-promotion.js +9 -8
  249. package/dist/semantic-rule-verifier.d.ts +1 -1
  250. package/dist/semantic-rule-verifier.js +9 -8
  251. package/dist/session-observer-bands.d.ts +1 -1
  252. package/dist/session-observer-state.d.ts +1 -1
  253. package/dist/shared-context/manager.d.ts +1 -1
  254. package/dist/signal.d.ts +1 -1
  255. package/dist/storage.d.ts +3 -3
  256. package/dist/storage.js +9 -8
  257. package/dist/summarizer.d.ts +1 -1
  258. package/dist/summary-snapshot.d.ts +1 -1
  259. package/dist/temporal-supersession.d.ts +1 -1
  260. package/dist/temporal-validity.d.ts +1 -1
  261. package/dist/threading.d.ts +1 -1
  262. package/dist/tier-migration.d.ts +1 -1
  263. package/dist/tier-routing.d.ts +1 -1
  264. package/dist/topics.d.ts +1 -1
  265. package/dist/transcript.d.ts +1 -1
  266. package/dist/transfer/types.d.ts +12 -12
  267. package/dist/trust-score-stage.d.ts +1 -1
  268. package/dist/trust-score.d.ts +1 -1
  269. package/dist/{types-DmTaqob2.d.ts → types-ChQb9D6s.d.ts} +8 -0
  270. package/dist/types.d.ts +1 -1
  271. package/dist/types.js +1 -1
  272. package/dist/utility-runtime.d.ts +1 -1
  273. package/dist/verified-recall.js +9 -8
  274. package/package.json +26 -2
  275. package/src/access-http.ts +68 -1
  276. package/src/admin/admin-surfaces.test.ts +289 -0
  277. package/src/admin/admin-surfaces.ts +138 -7
  278. package/src/bitemporal-dedup-backfill.test.ts +294 -0
  279. package/src/chat/chat-engine.test.ts +66 -1
  280. package/src/chat/chat-http.test.ts +119 -1
  281. package/src/chat/chat-http.ts +252 -97
  282. package/src/chat/chat-session.ts +143 -7
  283. package/src/compat/codex-cli-fallback.ts +23 -0
  284. package/src/compat/codex-subpath-aliases.test.ts +93 -0
  285. package/src/compat/codex-thread-key.ts +23 -0
  286. package/src/config.test.ts +50 -0
  287. package/src/config.ts +21 -4
  288. package/src/content-hash.ts +24 -0
  289. package/src/correction/correction-access-wiring.ts +104 -19
  290. package/src/correction/correction-contract.ts +68 -10
  291. package/src/correction/correction-executor.test.ts +112 -2
  292. package/src/correction/correction-executor.ts +65 -5
  293. package/src/correction/correction-planner.test.ts +47 -0
  294. package/src/correction/correction-planner.ts +40 -1
  295. package/src/correction/correction-storage-integration.test.ts +183 -0
  296. package/src/extraction-faithfulness.test.ts +240 -0
  297. package/src/extraction-faithfulness.ts +58 -6
  298. package/src/extraction-redaction-rules.test.ts +213 -0
  299. package/src/extraction-redaction-rules.ts +208 -0
  300. package/src/faithfulness-config.ts +16 -1
  301. package/src/local-model-endpoint.ts +24 -3
  302. package/src/orchestrator.ts +252 -9
  303. package/src/provenance-extraction.test.ts +266 -0
  304. package/src/provenance.ts +66 -16
  305. package/src/storage.ts +6 -10
  306. package/src/types.ts +8 -0
  307. package/dist/chunk-4R3CGCI5.js.map +0 -1
  308. package/dist/chunk-4SF232E6.js.map +0 -1
  309. package/dist/chunk-6OIDDKAA.js.map +0 -1
  310. package/dist/chunk-7AG54AF3.js.map +0 -1
  311. package/dist/chunk-C4X4QGIO.js.map +0 -1
  312. package/dist/chunk-C6BWLYW5.js.map +0 -1
  313. package/dist/chunk-KLFYKC3K.js.map +0 -1
  314. package/dist/chunk-MDBZTH7N.js.map +0 -1
  315. package/dist/chunk-XGTBNVIU.js.map +0 -1
  316. package/dist/chunk-Z3FGC3QE.js.map +0 -1
  317. /package/dist/{chunk-HCVWF657.js.map → chunk-2KAYTPPT.js.map} +0 -0
  318. /package/dist/{chunk-ZK2L72VN.js.map → chunk-37436GML.js.map} +0 -0
  319. /package/dist/{chunk-SC2YAWRF.js.map → chunk-3TSTGI6F.js.map} +0 -0
  320. /package/dist/{chunk-FACTVMXQ.js.map → chunk-4H4F3BFL.js.map} +0 -0
  321. /package/dist/{chunk-WAFDHKES.js.map → chunk-4NOI577P.js.map} +0 -0
  322. /package/dist/{chunk-YQMPUYHE.js.map → chunk-4NR2PDZ5.js.map} +0 -0
  323. /package/dist/{chunk-TAPSNIMA.js.map → chunk-5CEJH5ZN.js.map} +0 -0
  324. /package/dist/{chunk-PKMQK2WY.js.map → chunk-773DPI6T.js.map} +0 -0
  325. /package/dist/{chunk-FXCIOLRB.js.map → chunk-ASKXIAHD.js.map} +0 -0
  326. /package/dist/{chunk-5OPYYPJN.js.map → chunk-CBWI22JN.js.map} +0 -0
  327. /package/dist/{chunk-ZOHMPFOB.js.map → chunk-CKFLLAIS.js.map} +0 -0
  328. /package/dist/{chunk-GZQXOQQ2.js.map → chunk-CSRXQ6NB.js.map} +0 -0
  329. /package/dist/{chunk-QR67FU5G.js.map → chunk-CTOQEZSN.js.map} +0 -0
  330. /package/dist/{chunk-ZUDM75KG.js.map → chunk-DCWIQFNA.js.map} +0 -0
  331. /package/dist/{chunk-6CWGS2LY.js.map → chunk-DKJCRGWM.js.map} +0 -0
  332. /package/dist/{chunk-JJJCVCCQ.js.map → chunk-DMQWV6SQ.js.map} +0 -0
  333. /package/dist/{chunk-F3XZN24Z.js.map → chunk-DRUDC2UX.js.map} +0 -0
  334. /package/dist/{chunk-4WZ3J7M6.js.map → chunk-EY6MDMHK.js.map} +0 -0
  335. /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
  336. /package/dist/{chunk-6SQQOJ4U.js.map → chunk-GKRLPHPU.js.map} +0 -0
  337. /package/dist/{chunk-D7EBTQ24.js.map → chunk-HOHVIVDR.js.map} +0 -0
  338. /package/dist/{chunk-RKNJBZ55.js.map → chunk-JBPKEARU.js.map} +0 -0
  339. /package/dist/{chunk-UBHVAGO7.js.map → chunk-JYLFZWUX.js.map} +0 -0
  340. /package/dist/{chunk-LD53WPMU.js.map → chunk-LQ6JI4VH.js.map} +0 -0
  341. /package/dist/{chunk-WM7DNKBD.js.map → chunk-M4V2JVSZ.js.map} +0 -0
  342. /package/dist/{chunk-I2HL5M6T.js.map → chunk-MJIHJ7OG.js.map} +0 -0
  343. /package/dist/{chunk-J334N6QV.js.map → chunk-MLKWJOAJ.js.map} +0 -0
  344. /package/dist/{chunk-DF3I6JGP.js.map → chunk-NSA5ZRUL.js.map} +0 -0
  345. /package/dist/{chunk-VI5SGGXB.js.map → chunk-OEEW4KJA.js.map} +0 -0
  346. /package/dist/{chunk-NT36GU6X.js.map → chunk-R7IYU5DZ.js.map} +0 -0
  347. /package/dist/{chunk-TT5U3UDO.js.map → chunk-SNKPUJHR.js.map} +0 -0
  348. /package/dist/{chunk-T55EGZSJ.js.map → chunk-UVPL565C.js.map} +0 -0
  349. /package/dist/{chunk-YQGHW5ML.js.map → chunk-WRFKZEO6.js.map} +0 -0
  350. /package/dist/{chunk-H7HUQIY7.js.map → chunk-Y4YD5TYW.js.map} +0 -0
  351. /package/dist/{chunk-YUYPWJD3.js.map → chunk-YOLZS7NY.js.map} +0 -0
  352. /package/dist/{forget-OEE5OELK.js.map → forget-WYLR4ZFV.js.map} +0 -0
@@ -1,35 +1,29 @@
1
1
  import {
2
2
  AdapterRegistry
3
- } from "./chunk-RKNJBZ55.js";
3
+ } from "./chunk-JBPKEARU.js";
4
4
  import {
5
5
  WearablesInputError
6
6
  } from "./chunk-7WV3F5DQ.js";
7
7
  import {
8
- ChatEngine,
9
8
  EngramMcpServer,
10
- appendTranscriptEntry,
11
- createChatExecutor,
12
- createChatSession,
13
- createProductionChatLlmAdapter,
9
+ cleanupExpiredChatSessions,
14
10
  loadChatSession,
15
- markPendingPlan,
16
- markPendingPromotion,
17
- markPlanResolved,
18
- markPromotionResolved,
19
- sessionBelongsToPrincipal
20
- } from "./chunk-FN6QP7JQ.js";
11
+ processChatMessage,
12
+ sessionBelongsToPrincipal,
13
+ subscribeChatTranscript
14
+ } from "./chunk-6PY5YJAV.js";
21
15
  import {
22
16
  validateRequest
23
17
  } from "./chunk-FVZ2ISIX.js";
24
18
  import {
25
19
  getOperation
26
- } from "./chunk-NT36GU6X.js";
20
+ } from "./chunk-R7IYU5DZ.js";
27
21
  import {
28
22
  EngramAccessInputError
29
- } from "./chunk-KGZF2VO3.js";
23
+ } from "./chunk-27QQC7ZX.js";
30
24
  import {
31
25
  CorrectionContractError
32
- } from "./chunk-Z3FGC3QE.js";
26
+ } from "./chunk-AQLOP5F4.js";
33
27
  import {
34
28
  isTrustZoneName
35
29
  } from "./chunk-JGSKJHF7.js";
@@ -41,7 +35,7 @@ import {
41
35
  } from "./chunk-DEUNUKTD.js";
42
36
  import {
43
37
  isRecallDisclosure
44
- } from "./chunk-7AG54AF3.js";
38
+ } from "./chunk-PUR2CKX2.js";
45
39
  import {
46
40
  OFFLINE_SYNC_APPLY_MAX_BODY_BYTES,
47
41
  OFFLINE_SYNC_FILE_CONTENT_MAX_CHUNK_BYTES,
@@ -65,6 +59,28 @@ import { fileURLToPath, URL } from "url";
65
59
  import { gunzipSync } from "zlib";
66
60
 
67
61
  // src/chat/chat-http.ts
62
+ import { createHash } from "crypto";
63
+ var chatInFlight = /* @__PURE__ */ new Map();
64
+ function principalFingerprintComponent(principal) {
65
+ return principal === void 0 ? "\0absent" : `${principal}`;
66
+ }
67
+ function chatDedupFingerprint(memoryDir, chatSessionId, principal, message) {
68
+ const messageHash = createHash("sha256").update(message, "utf8").digest("hex").slice(0, 32);
69
+ return `${memoryDir}:${chatSessionId}:${principalFingerprintComponent(principal)}:${messageHash}`;
70
+ }
71
+ function processChatMessageDedup(opts) {
72
+ if (!opts.chatSessionId) {
73
+ return processChatMessage(opts);
74
+ }
75
+ const fp = chatDedupFingerprint(opts.memoryDir, opts.chatSessionId, opts.principal, opts.message);
76
+ const existing = chatInFlight.get(fp);
77
+ if (existing) return existing;
78
+ const pending = processChatMessage(opts).finally(() => {
79
+ chatInFlight.delete(fp);
80
+ });
81
+ chatInFlight.set(fp, pending);
82
+ return pending;
83
+ }
68
84
  async function handleChatMessage(req, res, body, opts, principal) {
69
85
  if (!opts.config?.enabled) {
70
86
  respondJson(res, 404, { error: "chat_disabled", code: "chat_disabled" });
@@ -75,63 +91,43 @@ async function handleChatMessage(req, res, body, opts, principal) {
75
91
  respondJson(res, 400, { error: "message is required", code: "input_error" });
76
92
  return;
77
93
  }
78
- const llm = opts.service.fallbackLlmRef ?? opts.service.localLlmRef;
79
- if (!llm) {
94
+ if (!opts.service.fallbackLlmRef && !opts.service.localLlmRef) {
80
95
  respondJson(res, 503, {
81
96
  error: "No LLM model is available. Configure a local or cloud model.",
82
97
  code: "no_llm"
83
98
  });
84
99
  return;
85
100
  }
86
- const adapter = createProductionChatLlmAdapter(llm);
87
- const requestedSessionId = typeof body.chatSessionId === "string" ? body.chatSessionId : void 0;
88
- let session;
89
- if (requestedSessionId) {
90
- session = await loadChatSession(opts.memoryDir, requestedSessionId);
91
- if (!session) {
101
+ const chatSessionId = typeof body.chatSessionId === "string" ? body.chatSessionId : void 0;
102
+ let result;
103
+ try {
104
+ result = await processChatMessageDedup({
105
+ service: opts.service,
106
+ config: opts.config,
107
+ memoryDir: opts.memoryDir,
108
+ message,
109
+ ...chatSessionId ? { chatSessionId } : {},
110
+ ...principal ? { principal } : {}
111
+ });
112
+ } catch (err) {
113
+ const code = err instanceof Error ? err.message : String(err);
114
+ if (code === "chat_session_not_found") {
92
115
  respondJson(res, 404, { error: "chat_session_not_found", code: "chat_session_not_found" });
93
- return;
94
- }
95
- if (!sessionBelongsToPrincipal(session, principal)) {
116
+ } else if (code === "access_denied") {
96
117
  respondJson(res, 403, { error: "access_denied", code: "access_denied" });
97
- return;
118
+ } else if (code === "chat_session_expired") {
119
+ respondJson(res, 410, { error: "chat_session_expired", code: "chat_session_expired" });
120
+ } else if (code === "chat_disabled") {
121
+ respondJson(res, 404, { error: "chat_disabled", code: "chat_disabled" });
122
+ } else if (code === "no_llm_available" || code === "engine_unavailable") {
123
+ respondJson(res, 503, {
124
+ error: "No LLM model is available. Configure a local or cloud model.",
125
+ code: "no_llm"
126
+ });
127
+ } else {
128
+ respondJson(res, 500, { error: "internal_error", code: "internal_error" });
98
129
  }
99
- } else {
100
- session = await createChatSession(opts.memoryDir, { principal });
101
- }
102
- const executor = createChatExecutor({
103
- service: opts.service,
104
- principal,
105
- ...session.namespace ? { namespace: session.namespace } : {},
106
- ...session.sessionKey ? { sessionKey: session.sessionKey } : {}
107
- });
108
- const engine = new ChatEngine({
109
- llm: adapter,
110
- executor,
111
- maxToolCallsPerTurn: opts.config.maxToolCallsPerTurn,
112
- ...opts.config.model ? { model: opts.config.model } : {},
113
- correctionAvailable: false,
114
- scopeInspectAvailable: false
115
- });
116
- await appendTranscriptEntry(opts.memoryDir, session.id, {
117
- role: "user",
118
- content: message
119
- });
120
- const priorPendingPlanId = session.pendingPlanId;
121
- const priorPendingPromotionId = session.pendingPromotionId;
122
- const result = await engine.processMessage(message, session);
123
- await appendTranscriptEntry(opts.memoryDir, session.id, {
124
- role: "assistant",
125
- content: result.reply
126
- });
127
- if (result.pendingPlan?.planId) {
128
- await markPendingPlan(opts.memoryDir, session.id, result.pendingPlan.planId);
129
- } else if (session.pendingPromotionId && !priorPendingPromotionId) {
130
- await markPendingPromotion(opts.memoryDir, session.id, session.pendingPromotionId);
131
- } else if (priorPendingPlanId && !session.pendingPlanId && !result.error) {
132
- await markPlanResolved(opts.memoryDir, session.id, priorPendingPlanId);
133
- } else if (priorPendingPromotionId && !session.pendingPromotionId && !result.error) {
134
- await markPromotionResolved(opts.memoryDir, session.id, priorPendingPromotionId);
130
+ return;
135
131
  }
136
132
  const wireResult = result.error ? { reply: result.reply, chatSessionId: result.chatSessionId, ...result.pendingPlan ? { pendingPlan: result.pendingPlan } : {} } : result;
137
133
  respondJson(res, 200, wireResult);
@@ -141,12 +137,55 @@ async function handleChatEventsSSE(req, res, chatSessionId, opts, principal) {
141
137
  respondJson(res, 404, { error: "chat_disabled", code: "chat_disabled" });
142
138
  return;
143
139
  }
140
+ let heartbeat;
141
+ let closed = false;
142
+ const writeSse = (chunk) => {
143
+ if (closed) return false;
144
+ try {
145
+ res.write(chunk);
146
+ return true;
147
+ } catch {
148
+ return false;
149
+ }
150
+ };
151
+ const pending = [];
152
+ let bursting = true;
153
+ const unsubscribe = subscribeChatTranscript(opts.memoryDir, chatSessionId, (entry) => {
154
+ if (closed) return;
155
+ if (bursting) {
156
+ pending.push(entry);
157
+ return;
158
+ }
159
+ writeSse(`data: ${JSON.stringify(entry)}
160
+
161
+ `);
162
+ });
163
+ const doCleanup = () => {
164
+ closed = true;
165
+ clearInterval(heartbeat);
166
+ unsubscribe();
167
+ try {
168
+ res.end();
169
+ } catch {
170
+ }
171
+ };
172
+ const unregisterServerCleanup = opts.registerSseCleanup?.(doCleanup) ?? (() => {
173
+ });
174
+ req.on("close", () => {
175
+ doCleanup();
176
+ unregisterServerCleanup();
177
+ });
144
178
  const session = await loadChatSession(opts.memoryDir, chatSessionId);
179
+ if (closed) return;
145
180
  if (!session) {
181
+ unsubscribe();
182
+ unregisterServerCleanup();
146
183
  respondJson(res, 404, { error: "chat_session_not_found", code: "chat_session_not_found" });
147
184
  return;
148
185
  }
149
186
  if (!sessionBelongsToPrincipal(session, principal)) {
187
+ unsubscribe();
188
+ unregisterServerCleanup();
150
189
  respondJson(res, 403, { error: "access_denied", code: "access_denied" });
151
190
  return;
152
191
  }
@@ -155,27 +194,29 @@ async function handleChatEventsSSE(req, res, chatSessionId, opts, principal) {
155
194
  "cache-control": "no-cache",
156
195
  connection: "keep-alive"
157
196
  });
197
+ writeSse("retry: 5000\n\n");
198
+ const deliveredSeqs = /* @__PURE__ */ new Set();
158
199
  for (const entry of session.transcript) {
159
- res.write(`data: ${JSON.stringify(entry)}
200
+ writeSse(`data: ${JSON.stringify(entry)}
160
201
 
161
202
  `);
203
+ deliveredSeqs.add(entry.seq);
162
204
  }
163
- const heartbeat = setInterval(() => {
164
- try {
165
- res.write(`data: ${JSON.stringify({ type: "heartbeat" })}
205
+ bursting = false;
206
+ for (const entry of pending) {
207
+ if (!deliveredSeqs.has(entry.seq)) {
208
+ writeSse(`data: ${JSON.stringify(entry)}
166
209
 
167
210
  `);
168
- } catch {
169
211
  }
212
+ }
213
+ if (closed) return;
214
+ heartbeat = setInterval(() => {
215
+ writeSse(`data: ${JSON.stringify({ type: "heartbeat" })}
216
+
217
+ `);
170
218
  }, 25e3);
171
- heartbeat.unref();
172
- req.on("close", () => {
173
- clearInterval(heartbeat);
174
- try {
175
- res.end();
176
- } catch {
177
- }
178
- });
219
+ heartbeat.unref?.();
179
220
  }
180
221
  function respondJson(res, status, body) {
181
222
  const json = JSON.stringify(body);
@@ -324,6 +365,12 @@ var EngramAccessHttpServer = class {
324
365
  * (Cursor review thread `access-http.ts:232`).
325
366
  */
326
367
  sseCleanupFns = /* @__PURE__ */ new Set();
368
+ /**
369
+ * Periodic chat-session TTL sweep handle (issue #1685 item 1 /
370
+ * #1687 Thread 21). unref'd so it never blocks process exit
371
+ * (rule 47); cleared in `stop()`.
372
+ */
373
+ chatTtlTimer = null;
327
374
  constructor(options) {
328
375
  this.service = options.service;
329
376
  this.host = options.host?.trim() || "127.0.0.1";
@@ -409,10 +456,15 @@ var EngramAccessHttpServer = class {
409
456
  this.server = server;
410
457
  const address = server.address();
411
458
  this.boundPort = typeof address === "object" && address ? address.port : this.requestedPort;
459
+ this.scheduleChatSessionTtlSweep();
412
460
  return this.status();
413
461
  }
414
462
  async stop() {
415
463
  if (!this.server) return;
464
+ if (this.chatTtlTimer) {
465
+ clearInterval(this.chatTtlTimer);
466
+ this.chatTtlTimer = null;
467
+ }
416
468
  const server = this.server;
417
469
  this.server = null;
418
470
  this.boundPort = 0;
@@ -439,6 +491,31 @@ var EngramAccessHttpServer = class {
439
491
  server.close((err) => err ? reject(err) : resolve());
440
492
  });
441
493
  }
494
+ /**
495
+ * Schedule the chat-session TTL sweep: one immediate pass plus a
496
+ * recurring hourly pass (issue #1685 item 1 / #1687 Thread 21). Both
497
+ * are skipped when chat is disabled. The recurring timer is unref'd
498
+ * so it never keeps the event loop alive on its own (rule 47). The
499
+ * sweep itself is best-effort — cleanup failures are swallowed inside
500
+ * `cleanupExpiredChatSessions`.
501
+ */
502
+ scheduleChatSessionTtlSweep() {
503
+ if (this.chatTtlTimer) {
504
+ clearInterval(this.chatTtlTimer);
505
+ this.chatTtlTimer = null;
506
+ }
507
+ const chat = this.service.configRef?.chat;
508
+ if (!chat?.enabled) return;
509
+ const ttlHours = typeof chat.sessionTtlHours === "number" && chat.sessionTtlHours > 0 ? chat.sessionTtlHours : 72;
510
+ void cleanupExpiredChatSessions(this.service.memoryDir, ttlHours).catch(() => {
511
+ });
512
+ const SWEEP_INTERVAL_MS = 60 * 60 * 1e3;
513
+ this.chatTtlTimer = setInterval(() => {
514
+ void cleanupExpiredChatSessions(this.service.memoryDir, ttlHours).catch(() => {
515
+ });
516
+ }, SWEEP_INTERVAL_MS);
517
+ this.chatTtlTimer.unref?.();
518
+ }
442
519
  status() {
443
520
  return {
444
521
  running: this.server !== null,
@@ -1731,7 +1808,22 @@ var EngramAccessHttpServer = class {
1731
1808
  req,
1732
1809
  res,
1733
1810
  chatEventsMatch[1] ?? "",
1734
- { service: this.service, config: this.service.configRef?.chat, memoryDir: this.service.memoryDir },
1811
+ {
1812
+ service: this.service,
1813
+ config: this.service.configRef?.chat,
1814
+ memoryDir: this.service.memoryDir,
1815
+ // Register the chat-SSE disconnect cleanup with this server's
1816
+ // stop() set so an HTTP shutdown forcibly releases the heartbeat
1817
+ // and transcript subscription even when a lingering client never
1818
+ // emits 'close' (cursor Medium review; mirrors handleGraphEventsSSE
1819
+ // which registers in sseCleanupFns at access-http.ts:2604).
1820
+ registerSseCleanup: (cleanup) => {
1821
+ this.sseCleanupFns.add(cleanup);
1822
+ return () => {
1823
+ this.sseCleanupFns.delete(cleanup);
1824
+ };
1825
+ }
1826
+ },
1735
1827
  this.resolveRequestPrincipal(req)
1736
1828
  );
1737
1829
  return;
@@ -2537,4 +2629,4 @@ function positiveIntQueryParam(value, label) {
2537
2629
  export {
2538
2630
  EngramAccessHttpServer
2539
2631
  };
2540
- //# sourceMappingURL=chunk-C6BWLYW5.js.map
2632
+ //# sourceMappingURL=chunk-N3VNUM4Z.js.map