@remnic/core 9.3.720 → 9.3.721

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 (338) hide show
  1. package/dist/access-boundary.d.ts +5 -5
  2. package/dist/access-boundary.js +35 -33
  3. package/dist/access-cli.js +69 -66
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.d.ts +5 -5
  6. package/dist/access-http.js +39 -37
  7. package/dist/access-mcp.d.ts +5 -5
  8. package/dist/access-mcp.js +38 -36
  9. package/dist/access-operations-batch.js +36 -34
  10. package/dist/access-operations.d.ts +5 -5
  11. package/dist/access-operations.js +37 -35
  12. package/dist/access-schema.js +3 -3
  13. package/dist/{access-service-Dw-tK1pa.d.ts → access-service-Dj3I-VBS.d.ts} +3 -3
  14. package/dist/access-service.d.ts +5 -5
  15. package/dist/access-service.js +34 -32
  16. package/dist/access-surface-catalog.d.ts +5 -5
  17. package/dist/action-confidence.d.ts +1 -1
  18. package/dist/active-memory-bridge.d.ts +1 -1
  19. package/dist/active-recall.d.ts +1 -1
  20. package/dist/active-recall.js +4 -2
  21. package/dist/active-recall.js.map +1 -1
  22. package/dist/{auto-sync-24NNS3GU.js → auto-sync-F3KCSQFJ.js} +5 -5
  23. package/dist/behavior-learner.d.ts +1 -1
  24. package/dist/behavior-signals.d.ts +1 -1
  25. package/dist/bootstrap.d.ts +4 -4
  26. package/dist/briefing.d.ts +1 -1
  27. package/dist/briefing.js +11 -9
  28. package/dist/buffer-surprise-report.d.ts +1 -1
  29. package/dist/buffer.d.ts +1 -1
  30. package/dist/calibration.d.ts +1 -1
  31. package/dist/calibration.js +2 -2
  32. package/dist/capabilities.d.ts +1 -1
  33. package/dist/{catalog-B9SPfcsE.d.ts → catalog-F-OEVbRQ.d.ts} +1 -1
  34. package/dist/causal-behavior.d.ts +1 -1
  35. package/dist/causal-behavior.js +2 -2
  36. package/dist/causal-chain.js +2 -2
  37. package/dist/causal-consolidation.d.ts +1 -1
  38. package/dist/causal-consolidation.js +14 -12
  39. package/dist/causal-consolidation.js.map +1 -1
  40. package/dist/causal-retrieval.js +2 -2
  41. package/dist/causal-trajectory-graph.d.ts +1 -1
  42. package/dist/causal-trajectory-graph.js +2 -2
  43. package/dist/causal-trajectory.js +1 -1
  44. package/dist/{chunk-TH7WMHVK.js → chunk-3NN73CM7.js} +2 -2
  45. package/dist/{chunk-ZKUW2MJG.js → chunk-4SF232E6.js} +18 -30
  46. package/dist/chunk-4SF232E6.js.map +1 -0
  47. package/dist/{chunk-DGTDRIUO.js → chunk-4T3BMHKD.js} +2 -2
  48. package/dist/{chunk-RX7EBFFJ.js → chunk-5O42UKXI.js} +2 -2
  49. package/dist/{chunk-5YQN2XYC.js → chunk-6FAMMBQ3.js} +2 -2
  50. package/dist/{chunk-FEB7W5JG.js → chunk-6OIDDKAA.js} +27 -6
  51. package/dist/chunk-6OIDDKAA.js.map +1 -0
  52. package/dist/{chunk-67HG7KFE.js → chunk-6YKIYQU7.js} +2 -2
  53. package/dist/{chunk-V7UUIIR7.js → chunk-7CTNUVHZ.js} +2 -2
  54. package/dist/{chunk-HU4EBIXO.js → chunk-A5XNBK2D.js} +8 -8
  55. package/dist/{chunk-2RBMGTK4.js → chunk-A7TJZLPK.js} +2 -2
  56. package/dist/{chunk-BGQ7WKMT.js → chunk-B7WISIAJ.js} +5 -5
  57. package/dist/{chunk-CYJV5AYC.js → chunk-BXEOHV7K.js} +3 -3
  58. package/dist/chunk-C4X4QGIO.js +60 -0
  59. package/dist/chunk-C4X4QGIO.js.map +1 -0
  60. package/dist/{chunk-RIW3UDDY.js → chunk-D7EBTQ24.js} +2 -2
  61. package/dist/{chunk-IO5NQEGZ.js → chunk-DKT3X5C3.js} +2 -2
  62. package/dist/{chunk-H2AGJ5SV.js → chunk-EBDA5TYA.js} +2 -2
  63. package/dist/{chunk-NBYXOEO7.js → chunk-EDOQM4E4.js} +2 -2
  64. package/dist/{chunk-YMPEGBLL.js → chunk-EEJMD2L2.js} +3 -3
  65. package/dist/{chunk-XROP4ZHB.js → chunk-EHQ5HO5T.js} +4 -4
  66. package/dist/{chunk-ATGRQ2NE.js → chunk-EM2LDXJ2.js} +4 -4
  67. package/dist/{chunk-422TIKIH.js → chunk-EVPNWN7Z.js} +9 -9
  68. package/dist/{chunk-WBHQ5LP5.js → chunk-EXUCUPV2.js} +2 -2
  69. package/dist/{chunk-M3GBOKUX.js → chunk-GDUOCHCD.js} +16 -16
  70. package/dist/{chunk-3XEGHEQ2.js → chunk-GJSL4WG2.js} +2 -2
  71. package/dist/{chunk-2SXMCQEQ.js → chunk-GZQXOQQ2.js} +3 -3
  72. package/dist/{chunk-UUMYB3FR.js → chunk-HCVWF657.js} +11 -11
  73. package/dist/{chunk-ZW5I3UNP.js → chunk-ILFSEIRT.js} +1 -1
  74. package/dist/chunk-ILFSEIRT.js.map +1 -0
  75. package/dist/{chunk-HHSO6VCQ.js → chunk-J3JPB7ZI.js} +2 -2
  76. package/dist/{chunk-Y4I7SOJN.js → chunk-LA3HZKES.js} +78 -78
  77. package/dist/{chunk-LQ6JI4VH.js → chunk-LD53WPMU.js} +4 -4
  78. package/dist/{chunk-NE5WFIY6.js → chunk-LLUGAZ3B.js} +2 -2
  79. package/dist/{chunk-RVLB4E6N.js → chunk-MDBZTH7N.js} +5 -32
  80. package/dist/chunk-MDBZTH7N.js.map +1 -0
  81. package/dist/{chunk-KNN6DAZQ.js → chunk-N77ELJ2D.js} +4 -4
  82. package/dist/{chunk-HTIL3EJK.js → chunk-NXRUUDUF.js} +2 -2
  83. package/dist/{chunk-JV7Q226R.js → chunk-OHTOPFRF.js} +2 -2
  84. package/dist/{chunk-ZG2WP425.js → chunk-ORAK3LNZ.js} +2 -2
  85. package/dist/{chunk-NERBFQNY.js → chunk-PD42EYQN.js} +2 -2
  86. package/dist/chunk-PHK3HARR.js +32 -0
  87. package/dist/chunk-PHK3HARR.js.map +1 -0
  88. package/dist/{chunk-NO4DWSQE.js → chunk-PKMQK2WY.js} +7 -7
  89. package/dist/{chunk-V5EGLYXE.js → chunk-QD6QP5P6.js} +42 -42
  90. package/dist/{chunk-IPJD7WJH.js → chunk-QR67FU5G.js} +2 -2
  91. package/dist/{chunk-ZE7GJ76H.js → chunk-SQNED75R.js} +1 -1
  92. package/dist/{chunk-5CEJH5ZN.js → chunk-TAPSNIMA.js} +4 -4
  93. package/dist/{chunk-PMBWVQ7D.js → chunk-TQT3USCG.js} +2 -2
  94. package/dist/{chunk-LLLG5PTE.js → chunk-TXQCG6SE.js} +3 -3
  95. package/dist/{chunk-6S5ZI7HB.js → chunk-UIXXE6NI.js} +6 -6
  96. package/dist/{chunk-T3XSXAWK.js → chunk-UO5ZHIIH.js} +2 -2
  97. package/dist/{chunk-PPVCZPYA.js → chunk-VCLGUIFM.js} +2 -2
  98. package/dist/{chunk-5J4OL7TJ.js → chunk-VUA4S7P6.js} +4 -4
  99. package/dist/{chunk-HAPVZ4CO.js → chunk-WQYSDPMA.js} +2 -2
  100. package/dist/chunk-XGTBNVIU.js +79 -0
  101. package/dist/chunk-XGTBNVIU.js.map +1 -0
  102. package/dist/{chunk-O6SEGJNV.js → chunk-YEE5KJQQ.js} +2 -2
  103. package/dist/{chunk-WRFKZEO6.js → chunk-YQGHW5ML.js} +4 -4
  104. package/dist/{chunk-DG3ORVCU.js → chunk-Z4RU5VPM.js} +2 -2
  105. package/dist/{chunk-DCWIQFNA.js → chunk-ZUDM75KG.js} +4 -4
  106. package/dist/{cli-qcLCJlOD.d.ts → cli-P_GaYcCY.d.ts} +3 -3
  107. package/dist/cli.d.ts +6 -6
  108. package/dist/cli.js +63 -60
  109. package/dist/compounding/engine.d.ts +1 -1
  110. package/dist/compounding/engine.js +11 -9
  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 +4 -2
  115. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  116. package/dist/connectors/codex-materialize-runner.js +11 -9
  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 +12 -10
  120. package/dist/consolidation-provenance-check.d.ts +1 -1
  121. package/dist/consolidation-undo.d.ts +1 -1
  122. package/dist/contradiction/index.d.ts +1 -1
  123. package/dist/conversation-index/backend.d.ts +1 -1
  124. package/dist/conversation-index/backend.js +2 -2
  125. package/dist/conversation-index/chunker.d.ts +1 -1
  126. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  127. package/dist/conversation-index/indexer.d.ts +1 -1
  128. package/dist/conversation-index/search.d.ts +1 -1
  129. package/dist/day-summary.d.ts +1 -1
  130. package/dist/delinearize.d.ts +1 -1
  131. package/dist/direct-answer-wiring.d.ts +1 -1
  132. package/dist/direct-answer.d.ts +1 -1
  133. package/dist/embedding-fallback.d.ts +1 -1
  134. package/dist/enrichment/index.d.ts +1 -1
  135. package/dist/entity-retrieval.d.ts +1 -1
  136. package/dist/entity-retrieval.js +11 -9
  137. package/dist/entity-schema.d.ts +1 -1
  138. package/dist/explicit-capture.d.ts +4 -4
  139. package/dist/extraction-faithfulness.d.ts +8 -2
  140. package/dist/extraction-faithfulness.js +4 -3
  141. package/dist/extraction-judge-telemetry.d.ts +1 -1
  142. package/dist/extraction-judge-training.d.ts +1 -1
  143. package/dist/extraction-judge.d.ts +1 -1
  144. package/dist/extraction-judge.js +3 -3
  145. package/dist/extraction.d.ts +1 -1
  146. package/dist/extraction.js +5 -4
  147. package/dist/faithfulness-config.d.ts +55 -0
  148. package/dist/faithfulness-config.js +11 -0
  149. package/dist/faithfulness-config.js.map +1 -0
  150. package/dist/fallback-llm.d.ts +1 -1
  151. package/dist/fallback-llm.js +2 -2
  152. package/dist/graph-dashboard-diff.d.ts +1 -1
  153. package/dist/graph-dashboard-key.d.ts +1 -1
  154. package/dist/graph-dashboard-parser.d.ts +1 -1
  155. package/dist/{graph-edge-decay-QDDC6AVV.js → graph-edge-decay-QPRJQ7DL.js} +3 -3
  156. package/dist/graph-edge-reinforcement.d.ts +1 -1
  157. package/dist/graph-snapshot.d.ts +1 -1
  158. package/dist/graph-snapshot.js +3 -3
  159. package/dist/graph.d.ts +1 -1
  160. package/dist/graph.js +2 -2
  161. package/dist/identity-continuity.d.ts +1 -1
  162. package/dist/importance.d.ts +1 -1
  163. package/dist/index.d.ts +9 -9
  164. package/dist/index.js +101 -98
  165. package/dist/index.js.map +1 -1
  166. package/dist/intent.d.ts +1 -1
  167. package/dist/lcm/engine.d.ts +1 -1
  168. package/dist/lcm/engine.js +3 -3
  169. package/dist/lcm/index.d.ts +1 -1
  170. package/dist/lcm/index.js +5 -5
  171. package/dist/lcm/tools.d.ts +1 -1
  172. package/dist/lifecycle.d.ts +1 -1
  173. package/dist/live-connectors-runner.d.ts +1 -1
  174. package/dist/local-llm.d.ts +1 -1
  175. package/dist/local-model-endpoint.d.ts +96 -0
  176. package/dist/local-model-endpoint.js +12 -0
  177. package/dist/local-model-endpoint.js.map +1 -0
  178. package/dist/maintenance/memory-governance.d.ts +1 -1
  179. package/dist/maintenance/memory-governance.js +11 -9
  180. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +11 -9
  181. package/dist/maintenance/rebuild-memory-projection.js +12 -10
  182. package/dist/mcp-memory-inspector-app.d.ts +5 -5
  183. package/dist/memory-action-policy.d.ts +1 -1
  184. package/dist/memory-cache.d.ts +1 -1
  185. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  186. package/dist/memory-projection-store.d.ts +1 -1
  187. package/dist/memory-provenance.d.ts +1 -1
  188. package/dist/memory-worth-outcomes.d.ts +1 -1
  189. package/dist/models-json.d.ts +1 -1
  190. package/dist/namespaces/migrate.d.ts +2 -2
  191. package/dist/namespaces/migrate.js +21 -19
  192. package/dist/namespaces/principal.d.ts +1 -1
  193. package/dist/namespaces/search.d.ts +1 -1
  194. package/dist/namespaces/search.js +9 -9
  195. package/dist/namespaces/storage.d.ts +2 -2
  196. package/dist/namespaces/storage.js +11 -9
  197. package/dist/native-knowledge.d.ts +1 -1
  198. package/dist/operator-toolkit.d.ts +1 -1
  199. package/dist/operator-toolkit.js +30 -27
  200. package/dist/orchestration/maintenance.d.ts +2 -2
  201. package/dist/orchestration/maintenance.js +13 -11
  202. package/dist/{orchestrator-Bg5Fnza6.d.ts → orchestrator-f5xv19kp.d.ts} +3 -3
  203. package/dist/orchestrator.d.ts +4 -4
  204. package/dist/orchestrator.js +54 -52
  205. package/dist/patterns-cli.d.ts +1 -1
  206. package/dist/policy-runtime.d.ts +1 -1
  207. package/dist/provenance.d.ts +1 -1
  208. package/dist/provenance.js +2 -1
  209. package/dist/qmd-recall-cache.d.ts +1 -1
  210. package/dist/qmd.d.ts +1 -1
  211. package/dist/recall-disclosure-escalation.d.ts +1 -1
  212. package/dist/recall-explain-renderer.d.ts +1 -1
  213. package/dist/recall-explain-renderer.js +3 -3
  214. package/dist/recall-planner-llm.d.ts +1 -1
  215. package/dist/recall-planner-llm.js +2 -2
  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 +5 -3
  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/search/embed-helper.d.ts +1 -1
  231. package/dist/search/factory.d.ts +1 -1
  232. package/dist/search/factory.js +8 -8
  233. package/dist/search/index.d.ts +1 -1
  234. package/dist/search/index.js +13 -13
  235. package/dist/search/lancedb-backend.d.ts +1 -1
  236. package/dist/search/lancedb-backend.js +2 -2
  237. package/dist/search/meilisearch-backend.d.ts +1 -1
  238. package/dist/search/meilisearch-backend.js +2 -2
  239. package/dist/search/noop-backend.d.ts +1 -1
  240. package/dist/search/orama-backend.d.ts +1 -1
  241. package/dist/search/orama-backend.js +2 -2
  242. package/dist/search/port.d.ts +1 -1
  243. package/dist/search/remote-backend.d.ts +1 -1
  244. package/dist/{semantic-consolidation-ClOiS6KP.d.ts → semantic-consolidation-BQm1e1Pn.d.ts} +1 -1
  245. package/dist/semantic-consolidation.d.ts +2 -2
  246. package/dist/semantic-consolidation.js +12 -10
  247. package/dist/semantic-rule-promotion.js +11 -9
  248. package/dist/semantic-rule-verifier.d.ts +1 -1
  249. package/dist/semantic-rule-verifier.js +11 -9
  250. package/dist/session-observer-bands.d.ts +1 -1
  251. package/dist/session-observer-state.d.ts +1 -1
  252. package/dist/shared-context/manager.d.ts +1 -1
  253. package/dist/signal.d.ts +1 -1
  254. package/dist/storage.d.ts +1 -1
  255. package/dist/storage.js +10 -8
  256. package/dist/summarizer.d.ts +1 -1
  257. package/dist/summarizer.js +3 -3
  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/backup.js +2 -2
  267. package/dist/transfer/capsule-export.js +2 -2
  268. package/dist/transfer/capsule-import.js +1 -1
  269. package/dist/trust-score-stage.d.ts +1 -1
  270. package/dist/trust-score.d.ts +1 -1
  271. package/dist/{types-BSdUWePh.d.ts → types-DwO1Ot4n.d.ts} +19 -1
  272. package/dist/types.d.ts +1 -1
  273. package/dist/types.js +1 -1
  274. package/dist/utility-runtime.d.ts +1 -1
  275. package/dist/verified-recall.js +11 -9
  276. package/package.json +2 -2
  277. package/src/config.ts +9 -30
  278. package/src/extraction-faithfulness.test.ts +175 -0
  279. package/src/extraction-faithfulness.ts +53 -1
  280. package/src/faithfulness-config.test.ts +96 -0
  281. package/src/faithfulness-config.ts +138 -0
  282. package/src/local-model-endpoint.test.ts +155 -0
  283. package/src/local-model-endpoint.ts +189 -0
  284. package/src/types.ts +19 -1
  285. package/dist/chunk-FEB7W5JG.js.map +0 -1
  286. package/dist/chunk-RVLB4E6N.js.map +0 -1
  287. package/dist/chunk-ZKUW2MJG.js.map +0 -1
  288. package/dist/chunk-ZW5I3UNP.js.map +0 -1
  289. /package/dist/{auto-sync-24NNS3GU.js.map → auto-sync-F3KCSQFJ.js.map} +0 -0
  290. /package/dist/{chunk-TH7WMHVK.js.map → chunk-3NN73CM7.js.map} +0 -0
  291. /package/dist/{chunk-DGTDRIUO.js.map → chunk-4T3BMHKD.js.map} +0 -0
  292. /package/dist/{chunk-RX7EBFFJ.js.map → chunk-5O42UKXI.js.map} +0 -0
  293. /package/dist/{chunk-5YQN2XYC.js.map → chunk-6FAMMBQ3.js.map} +0 -0
  294. /package/dist/{chunk-67HG7KFE.js.map → chunk-6YKIYQU7.js.map} +0 -0
  295. /package/dist/{chunk-V7UUIIR7.js.map → chunk-7CTNUVHZ.js.map} +0 -0
  296. /package/dist/{chunk-HU4EBIXO.js.map → chunk-A5XNBK2D.js.map} +0 -0
  297. /package/dist/{chunk-2RBMGTK4.js.map → chunk-A7TJZLPK.js.map} +0 -0
  298. /package/dist/{chunk-BGQ7WKMT.js.map → chunk-B7WISIAJ.js.map} +0 -0
  299. /package/dist/{chunk-CYJV5AYC.js.map → chunk-BXEOHV7K.js.map} +0 -0
  300. /package/dist/{chunk-RIW3UDDY.js.map → chunk-D7EBTQ24.js.map} +0 -0
  301. /package/dist/{chunk-IO5NQEGZ.js.map → chunk-DKT3X5C3.js.map} +0 -0
  302. /package/dist/{chunk-H2AGJ5SV.js.map → chunk-EBDA5TYA.js.map} +0 -0
  303. /package/dist/{chunk-NBYXOEO7.js.map → chunk-EDOQM4E4.js.map} +0 -0
  304. /package/dist/{chunk-YMPEGBLL.js.map → chunk-EEJMD2L2.js.map} +0 -0
  305. /package/dist/{chunk-XROP4ZHB.js.map → chunk-EHQ5HO5T.js.map} +0 -0
  306. /package/dist/{chunk-ATGRQ2NE.js.map → chunk-EM2LDXJ2.js.map} +0 -0
  307. /package/dist/{chunk-422TIKIH.js.map → chunk-EVPNWN7Z.js.map} +0 -0
  308. /package/dist/{chunk-WBHQ5LP5.js.map → chunk-EXUCUPV2.js.map} +0 -0
  309. /package/dist/{chunk-M3GBOKUX.js.map → chunk-GDUOCHCD.js.map} +0 -0
  310. /package/dist/{chunk-3XEGHEQ2.js.map → chunk-GJSL4WG2.js.map} +0 -0
  311. /package/dist/{chunk-2SXMCQEQ.js.map → chunk-GZQXOQQ2.js.map} +0 -0
  312. /package/dist/{chunk-UUMYB3FR.js.map → chunk-HCVWF657.js.map} +0 -0
  313. /package/dist/{chunk-HHSO6VCQ.js.map → chunk-J3JPB7ZI.js.map} +0 -0
  314. /package/dist/{chunk-Y4I7SOJN.js.map → chunk-LA3HZKES.js.map} +0 -0
  315. /package/dist/{chunk-LQ6JI4VH.js.map → chunk-LD53WPMU.js.map} +0 -0
  316. /package/dist/{chunk-NE5WFIY6.js.map → chunk-LLUGAZ3B.js.map} +0 -0
  317. /package/dist/{chunk-KNN6DAZQ.js.map → chunk-N77ELJ2D.js.map} +0 -0
  318. /package/dist/{chunk-HTIL3EJK.js.map → chunk-NXRUUDUF.js.map} +0 -0
  319. /package/dist/{chunk-JV7Q226R.js.map → chunk-OHTOPFRF.js.map} +0 -0
  320. /package/dist/{chunk-ZG2WP425.js.map → chunk-ORAK3LNZ.js.map} +0 -0
  321. /package/dist/{chunk-NERBFQNY.js.map → chunk-PD42EYQN.js.map} +0 -0
  322. /package/dist/{chunk-NO4DWSQE.js.map → chunk-PKMQK2WY.js.map} +0 -0
  323. /package/dist/{chunk-V5EGLYXE.js.map → chunk-QD6QP5P6.js.map} +0 -0
  324. /package/dist/{chunk-IPJD7WJH.js.map → chunk-QR67FU5G.js.map} +0 -0
  325. /package/dist/{chunk-ZE7GJ76H.js.map → chunk-SQNED75R.js.map} +0 -0
  326. /package/dist/{chunk-5CEJH5ZN.js.map → chunk-TAPSNIMA.js.map} +0 -0
  327. /package/dist/{chunk-PMBWVQ7D.js.map → chunk-TQT3USCG.js.map} +0 -0
  328. /package/dist/{chunk-LLLG5PTE.js.map → chunk-TXQCG6SE.js.map} +0 -0
  329. /package/dist/{chunk-6S5ZI7HB.js.map → chunk-UIXXE6NI.js.map} +0 -0
  330. /package/dist/{chunk-T3XSXAWK.js.map → chunk-UO5ZHIIH.js.map} +0 -0
  331. /package/dist/{chunk-PPVCZPYA.js.map → chunk-VCLGUIFM.js.map} +0 -0
  332. /package/dist/{chunk-5J4OL7TJ.js.map → chunk-VUA4S7P6.js.map} +0 -0
  333. /package/dist/{chunk-HAPVZ4CO.js.map → chunk-WQYSDPMA.js.map} +0 -0
  334. /package/dist/{chunk-O6SEGJNV.js.map → chunk-YEE5KJQQ.js.map} +0 -0
  335. /package/dist/{chunk-WRFKZEO6.js.map → chunk-YQGHW5ML.js.map} +0 -0
  336. /package/dist/{chunk-DG3ORVCU.js.map → chunk-Z4RU5VPM.js.map} +0 -0
  337. /package/dist/{chunk-DCWIQFNA.js.map → chunk-ZUDM75KG.js.map} +0 -0
  338. /package/dist/{graph-edge-decay-QDDC6AVV.js.map → graph-edge-decay-QPRJQ7DL.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import { k as MemoryFrontmatter } from './types-BSdUWePh.js';
1
+ import { k as MemoryFrontmatter } from './types-DwO1Ot4n.js';
2
2
  import './types-gb_SNtjR.js';
3
3
  import './message-parts/index.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { u as BufferTurn, am as ConversationThread } from './types-BSdUWePh.js';
1
+ import { u as BufferTurn, am as ConversationThread } from './types-DwO1Ot4n.js';
2
2
  import './types-gb_SNtjR.js';
3
3
  import './message-parts/index.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { g as MemoryFile } from './types-BSdUWePh.js';
1
+ import { g as MemoryFile } from './types-DwO1Ot4n.js';
2
2
  import { StorageManager } from './storage.js';
3
3
  import { MemoryTier } from './tier-routing.js';
4
4
  import { SearchBackend } from './search/port.js';
@@ -1,4 +1,4 @@
1
- import { g as MemoryFile } from './types-BSdUWePh.js';
1
+ import { g as MemoryFile } from './types-DwO1Ot4n.js';
2
2
  import { LifecycleSignals } from './lifecycle.js';
3
3
  import './types-gb_SNtjR.js';
4
4
  import './message-parts/index.js';
package/dist/topics.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { g as MemoryFile, an as TopicScore } from './types-BSdUWePh.js';
1
+ import { g as MemoryFile, an as TopicScore } from './types-DwO1Ot4n.js';
2
2
  import './types-gb_SNtjR.js';
3
3
  import './message-parts/index.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { P as PluginConfig, T as TranscriptEntry, v as Checkpoint } from './types-BSdUWePh.js';
1
+ import { P as PluginConfig, T as TranscriptEntry, v as Checkpoint } from './types-DwO1Ot4n.js';
2
2
  import { SessionIntegrityReport } from './session-integrity.js';
3
3
  import './types-gb_SNtjR.js';
4
4
  import './message-parts/index.js';
@@ -4,11 +4,11 @@ import {
4
4
  import "../chunk-765K3SAT.js";
5
5
  import "../chunk-X7Y7WX73.js";
6
6
  import "../chunk-J4EB7DNW.js";
7
+ import "../chunk-UI3NYK34.js";
8
+ import "../chunk-GCGJW34D.js";
7
9
  import "../chunk-BJMBJZ2Y.js";
8
10
  import "../chunk-UKJAGEXH.js";
9
11
  import "../chunk-FP2373TW.js";
10
- import "../chunk-UI3NYK34.js";
11
- import "../chunk-GCGJW34D.js";
12
12
  import "../chunk-A6XUJE5D.js";
13
13
  import "../chunk-PZ5AY32C.js";
14
14
  export {
@@ -5,11 +5,11 @@ import {
5
5
  import "../chunk-WEHSQBFR.js";
6
6
  import "../chunk-X7Y7WX73.js";
7
7
  import "../chunk-J4EB7DNW.js";
8
+ import "../chunk-UI3NYK34.js";
9
+ import "../chunk-GCGJW34D.js";
8
10
  import "../chunk-BJMBJZ2Y.js";
9
11
  import "../chunk-UKJAGEXH.js";
10
12
  import "../chunk-FP2373TW.js";
11
- import "../chunk-UI3NYK34.js";
12
- import "../chunk-GCGJW34D.js";
13
13
  import "../chunk-A6XUJE5D.js";
14
14
  import "../chunk-PZ5AY32C.js";
15
15
  export {
@@ -4,10 +4,10 @@ import {
4
4
  import "../chunk-VF4XKTX3.js";
5
5
  import "../chunk-WEHSQBFR.js";
6
6
  import "../chunk-X7Y7WX73.js";
7
+ import "../chunk-GCGJW34D.js";
7
8
  import "../chunk-BJMBJZ2Y.js";
8
9
  import "../chunk-UKJAGEXH.js";
9
10
  import "../chunk-FP2373TW.js";
10
- import "../chunk-GCGJW34D.js";
11
11
  import "../chunk-A6XUJE5D.js";
12
12
  import "../chunk-VS2IYZRU.js";
13
13
  import "../chunk-PZ5AY32C.js";
@@ -1,5 +1,5 @@
1
1
  import { TrustSignals, TrustScoreResult, TrustBand, TrustScoreComponent } from './trust-score.js';
2
- import { F as FaithfulnessFrontmatter, ai as ProvenanceSource, ao as TrustWeights } from './types-BSdUWePh.js';
2
+ import { F as FaithfulnessFrontmatter, ai as ProvenanceSource, ao as TrustWeights } from './types-DwO1Ot4n.js';
3
3
  import './types-gb_SNtjR.js';
4
4
  import './message-parts/index.js';
5
5
 
@@ -1,4 +1,4 @@
1
- import { ao as TrustWeights } from './types-BSdUWePh.js';
1
+ import { ao as TrustWeights } from './types-DwO1Ot4n.js';
2
2
  import './types-gb_SNtjR.js';
3
3
  import './message-parts/index.js';
4
4
 
@@ -1451,12 +1451,30 @@ interface PluginConfig {
1451
1451
  judgeTrainingDir: string;
1452
1452
  /** Gate mode: "off" (default, byte-identical pre-feature), "shadow" (record only), "enforce" (route to pending_review). */
1453
1453
  extractionFaithfulnessGate: "off" | "shadow" | "enforce";
1454
- /** Override model/endpoint; empty string = default routing chain. */
1454
+ /** Override model name; empty string = default routing chain. */
1455
1455
  extractionFaithfulnessModel: string;
1456
+ /**
1457
+ * Base URL of a local openai-compatible endpoint serving a fine-tuned
1458
+ * faithfulness gate (issue #1585 model-lab), e.g.
1459
+ * `http://localhost:11434/v1` (Ollama) or `http://localhost:8000/v1` (vLLM).
1460
+ * Empty string (default) preserves the existing routing chain exactly;
1461
+ * set together with `extractionFaithfulnessModel` to route the gate to the
1462
+ * local model first, falling back to the chain on failure.
1463
+ */
1464
+ extractionFaithfulnessBaseUrl: string;
1456
1465
  /** Context window (chars) around the quote sent to the verifier. Default 400. */
1457
1466
  extractionFaithfulnessContextChars: number;
1458
1467
  /** Per-batch timeout in ms; timeout → tagged error, never blocks writes. Default 8000. */
1459
1468
  extractionFaithfulnessTimeoutMs: number;
1469
+ /**
1470
+ * Correction-intent model-lab pointer (issue #1581 / #1585). When both this
1471
+ * and `correctionIntentBaseUrl` are set, the detection path can route to a
1472
+ * local fine-tuned correction-intent classifier. Empty default keeps the
1473
+ * rule-based passive-correction detector as the sole path (byte-identical).
1474
+ */
1475
+ correctionIntentModel: string;
1476
+ /** Base URL of a local openai-compatible endpoint serving the correction-intent classifier (issue #1585). Empty default = rule-based detection. */
1477
+ correctionIntentBaseUrl: string;
1460
1478
  hourlySummariesEnabled: boolean;
1461
1479
  daySummaryEnabled: boolean;
1462
1480
  /** Timezone override for the day summary cron (issue #1475). */
package/dist/types.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import './types-gb_SNtjR.js';
2
2
  import './message-parts/index.js';
3
- export { av as AccessTrackingEntry, A as ActiveRecallChatType, d as ActiveRecallModelFallbackPolicy, b as ActiveRecallPromptStyle, a as ActiveRecallQueryMode, c as ActiveRecallThinking, J as AgentAccessAuthToken, b9 as AgentAccessHttpConfig, ba as AgentDefaultsConfig, bb as AgentPersona, j as AgentPersonaModelConfig, bc as BehaviorLoopAdjustment, e as BehaviorLoopPolicyState, bd as BehaviorSignalDirection, B as BehaviorSignalEvent, be as BehaviorSignalType, aI as BootstrapOptions, aJ as BootstrapResult, r as BriefingActiveThread, bf as BriefingCalendarSourceError, aV as BriefingConfig, p as BriefingFocus, o as BriefingFollowup, aW as BriefingOpenCommitment, t as BriefingRecentEntity, s as BriefingResult, n as BriefingSections, aX as BriefingWindow, bg as BufferEntryState, aq as BufferState, z as BufferSurpriseEvent, u as BufferTurn, q as CalendarEvent, C as CalendarSource, bh as CaptureMode, bi as ChatConfig, v as Checkpoint, bj as CodexCliReasoningEffort, bk as CodexCompactionFlushMode, aY as CodexCompatConfig, bl as CodexConnectorConfig, aH as CodingContext, bm as CodingKnowledgeConfig, aS as CodingModeConfig, bn as CompressionGuidelineActivationState, N as CompressionGuidelineOptimizerActionSummary, K as CompressionGuidelineOptimizerEventCounts, O as CompressionGuidelineOptimizerRuleUpdate, bo as CompressionGuidelineOptimizerSourceWindow, X as CompressionGuidelineOptimizerState, bp as ConfidenceTier, bq as ConsolidationAction, br as ConsolidationItem, aK as ConsolidationObservation, a1 as ConsolidationResult, a6 as ContinuityImprovementLoop, a4 as ContinuityIncidentCloseInput, a5 as ContinuityIncidentOpenInput, a3 as ContinuityIncidentRecord, bs as ContinuityIncidentState, bt as ContinuityLoopCadence, a7 as ContinuityLoopReviewInput, bu as ContinuityLoopStatus, a8 as ContinuityLoopUpsertInput, bv as ContradictionScanConfig, am as ConversationThread, bw as CronConversationRecallMode, bx as CronRecallMode, aZ as DEFAULT_RECALL_DISCLOSURE, a2 as DaySummaryResult, by as DreamingConfig, bz as DreamingNarrativePromptStyle, bA as DreamsDeepSleepConfig, bB as DreamsLightSleepConfig, aQ as DreamsPhase, bC as DreamsPhaseStatus, bD as DreamsPhasesConfig, bE as DreamsRemConfig, aR as DreamsRunResult, aP as DreamsStatusResult, bF as EngramTraceEvent, au as EntityActivityEntry, E as EntityFile, Y as EntityMention, at as EntityRelationship, Z as EntitySchemaDefinition, _ as EntitySchemaSectionDefinition, $ as EntityStructuredSection, aL as EntityTimelineEntry, a_ as ExtractedFact, bG as ExtractedProcedureStep, bH as ExtractedQuestion, bI as ExtractedReasoningTrace, bJ as ExtractedReasoningTraceStep, bK as ExtractedRelationship, bL as ExtractionPassSource, a0 as ExtractionResult, F as FaithfulnessFrontmatter, as as FileHygieneConfig, G as GatewayConfig, bM as GitHubLiveConnectorConfig, bN as GmailLiveConnectorConfig, bO as GoogleDriveLiveConnectorConfig, bP as HeartbeatConfig, bQ as HeartbeatDetectionMode, H as HourlySummary, I as IdentityInjectionMode, y as ImportanceLevel, a9 as ImportanceScore, w as LifecycleState, L as LiveConnectorsConfig, bR as LlmTraceCallback, bS as LlmTraceEvent, ac as MemoryActionEligibilityContext, a$ as MemoryActionEligibilitySource, W as MemoryActionEvent, bT as MemoryActionOutcome, bU as MemoryActionPolicyDecision, ad as MemoryActionPolicyResult, bV as MemoryActionStatus, U as MemoryActionType, M as MemoryCategory, g as MemoryFile, k as MemoryFrontmatter, aa as MemoryIntent, m as MemoryLifecycleEvent, ae as MemoryLifecycleEventType, af as MemoryLifecycleStateSummary, ap as MemoryLink, bW as MemoryLinkType, b0 as MemoryObservation, bX as MemoryOsPresetName, l as MemoryProjectionCurrentState, b1 as MemoryScope, f as MemoryStatus, aw as MemorySummary, ar as MetaState, bY as ModelApi, bZ as ModelDefinitionConfig, b_ as ModelProviderAuthMode, ag as ModelProviderConfig, b$ as NamespacePolicy, ah as NativeKnowledgeConfig, c0 as NativeKnowledgeFolderRuleConfig, c1 as NativeKnowledgeObsidianVaultConfig, c2 as NativeKnowledgeOpenClawWorkspaceConfig, c3 as NotionLiveConnectorConfig, P as PluginConfig, x as PolicyClass, c4 as PrincipalFromSessionKeyMode, c5 as PrincipalRule, c6 as ProceduralConfig, aj as ProvenanceConfig, ai as ProvenanceSource, ab as QmdSearchExplain, Q as QmdSearchResult, c7 as QuestionEntry, b2 as RECALL_DISCLOSURE_LEVELS, c8 as ReasoningEffort, i as RecallDisclosure, c9 as RecallPipelineConfig, h as RecallPlanMode, ca as RecallSectionConfig, R as RecallTierExplain, cb as RecallTraceEvent, cc as RelevanceFeedback, ak as RetrievalTier, cd as SPECULATIVE_TTL_DAYS, ce as ScopeProfileAutoPromoteConfig, aO as ScopeProfileConfig, aM as ScopeProfileLayerId, aN as ScopeProfilePromotionTarget, cf as ScopeProfileTeamProjectConfig, cg as ScopeTeamConfig, ch as ScoredEntity, D as SecretRef, ci as SemanticChunkingConfigShape, S as SessionObserverBandConfig, cj as SignalLevel, al as SignalScanResult, ck as SlotBehaviorConfig, cl as SlotMismatchMode, an as TopicScore, T as TranscriptEntry, cm as TriggerMode, ao as TrustWeights, V as VerificationState, cn as confidenceTier, b8 as isRecallDisclosure } from './types-BSdUWePh.js';
3
+ export { av as AccessTrackingEntry, A as ActiveRecallChatType, d as ActiveRecallModelFallbackPolicy, b as ActiveRecallPromptStyle, a as ActiveRecallQueryMode, c as ActiveRecallThinking, J as AgentAccessAuthToken, b9 as AgentAccessHttpConfig, ba as AgentDefaultsConfig, bb as AgentPersona, j as AgentPersonaModelConfig, bc as BehaviorLoopAdjustment, e as BehaviorLoopPolicyState, bd as BehaviorSignalDirection, B as BehaviorSignalEvent, be as BehaviorSignalType, aI as BootstrapOptions, aJ as BootstrapResult, r as BriefingActiveThread, bf as BriefingCalendarSourceError, aV as BriefingConfig, p as BriefingFocus, o as BriefingFollowup, aW as BriefingOpenCommitment, t as BriefingRecentEntity, s as BriefingResult, n as BriefingSections, aX as BriefingWindow, bg as BufferEntryState, aq as BufferState, z as BufferSurpriseEvent, u as BufferTurn, q as CalendarEvent, C as CalendarSource, bh as CaptureMode, bi as ChatConfig, v as Checkpoint, bj as CodexCliReasoningEffort, bk as CodexCompactionFlushMode, aY as CodexCompatConfig, bl as CodexConnectorConfig, aH as CodingContext, bm as CodingKnowledgeConfig, aS as CodingModeConfig, bn as CompressionGuidelineActivationState, N as CompressionGuidelineOptimizerActionSummary, K as CompressionGuidelineOptimizerEventCounts, O as CompressionGuidelineOptimizerRuleUpdate, bo as CompressionGuidelineOptimizerSourceWindow, X as CompressionGuidelineOptimizerState, bp as ConfidenceTier, bq as ConsolidationAction, br as ConsolidationItem, aK as ConsolidationObservation, a1 as ConsolidationResult, a6 as ContinuityImprovementLoop, a4 as ContinuityIncidentCloseInput, a5 as ContinuityIncidentOpenInput, a3 as ContinuityIncidentRecord, bs as ContinuityIncidentState, bt as ContinuityLoopCadence, a7 as ContinuityLoopReviewInput, bu as ContinuityLoopStatus, a8 as ContinuityLoopUpsertInput, bv as ContradictionScanConfig, am as ConversationThread, bw as CronConversationRecallMode, bx as CronRecallMode, aZ as DEFAULT_RECALL_DISCLOSURE, a2 as DaySummaryResult, by as DreamingConfig, bz as DreamingNarrativePromptStyle, bA as DreamsDeepSleepConfig, bB as DreamsLightSleepConfig, aQ as DreamsPhase, bC as DreamsPhaseStatus, bD as DreamsPhasesConfig, bE as DreamsRemConfig, aR as DreamsRunResult, aP as DreamsStatusResult, bF as EngramTraceEvent, au as EntityActivityEntry, E as EntityFile, Y as EntityMention, at as EntityRelationship, Z as EntitySchemaDefinition, _ as EntitySchemaSectionDefinition, $ as EntityStructuredSection, aL as EntityTimelineEntry, a_ as ExtractedFact, bG as ExtractedProcedureStep, bH as ExtractedQuestion, bI as ExtractedReasoningTrace, bJ as ExtractedReasoningTraceStep, bK as ExtractedRelationship, bL as ExtractionPassSource, a0 as ExtractionResult, F as FaithfulnessFrontmatter, as as FileHygieneConfig, G as GatewayConfig, bM as GitHubLiveConnectorConfig, bN as GmailLiveConnectorConfig, bO as GoogleDriveLiveConnectorConfig, bP as HeartbeatConfig, bQ as HeartbeatDetectionMode, H as HourlySummary, I as IdentityInjectionMode, y as ImportanceLevel, a9 as ImportanceScore, w as LifecycleState, L as LiveConnectorsConfig, bR as LlmTraceCallback, bS as LlmTraceEvent, ac as MemoryActionEligibilityContext, a$ as MemoryActionEligibilitySource, W as MemoryActionEvent, bT as MemoryActionOutcome, bU as MemoryActionPolicyDecision, ad as MemoryActionPolicyResult, bV as MemoryActionStatus, U as MemoryActionType, M as MemoryCategory, g as MemoryFile, k as MemoryFrontmatter, aa as MemoryIntent, m as MemoryLifecycleEvent, ae as MemoryLifecycleEventType, af as MemoryLifecycleStateSummary, ap as MemoryLink, bW as MemoryLinkType, b0 as MemoryObservation, bX as MemoryOsPresetName, l as MemoryProjectionCurrentState, b1 as MemoryScope, f as MemoryStatus, aw as MemorySummary, ar as MetaState, bY as ModelApi, bZ as ModelDefinitionConfig, b_ as ModelProviderAuthMode, ag as ModelProviderConfig, b$ as NamespacePolicy, ah as NativeKnowledgeConfig, c0 as NativeKnowledgeFolderRuleConfig, c1 as NativeKnowledgeObsidianVaultConfig, c2 as NativeKnowledgeOpenClawWorkspaceConfig, c3 as NotionLiveConnectorConfig, P as PluginConfig, x as PolicyClass, c4 as PrincipalFromSessionKeyMode, c5 as PrincipalRule, c6 as ProceduralConfig, aj as ProvenanceConfig, ai as ProvenanceSource, ab as QmdSearchExplain, Q as QmdSearchResult, c7 as QuestionEntry, b2 as RECALL_DISCLOSURE_LEVELS, c8 as ReasoningEffort, i as RecallDisclosure, c9 as RecallPipelineConfig, h as RecallPlanMode, ca as RecallSectionConfig, R as RecallTierExplain, cb as RecallTraceEvent, cc as RelevanceFeedback, ak as RetrievalTier, cd as SPECULATIVE_TTL_DAYS, ce as ScopeProfileAutoPromoteConfig, aO as ScopeProfileConfig, aM as ScopeProfileLayerId, aN as ScopeProfilePromotionTarget, cf as ScopeProfileTeamProjectConfig, cg as ScopeTeamConfig, ch as ScoredEntity, D as SecretRef, ci as SemanticChunkingConfigShape, S as SessionObserverBandConfig, cj as SignalLevel, al as SignalScanResult, ck as SlotBehaviorConfig, cl as SlotMismatchMode, an as TopicScore, T as TranscriptEntry, cm as TriggerMode, ao as TrustWeights, V as VerificationState, cn as confidenceTier, b8 as isRecallDisclosure } from './types-DwO1Ot4n.js';
package/dist/types.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  SPECULATIVE_TTL_DAYS,
5
5
  confidenceTier,
6
6
  isRecallDisclosure
7
- } from "./chunk-ZW5I3UNP.js";
7
+ } from "./chunk-ILFSEIRT.js";
8
8
  import "./chunk-PZ5AY32C.js";
9
9
  export {
10
10
  DEFAULT_RECALL_DISCLOSURE,
@@ -1,5 +1,5 @@
1
1
  import { TierRoutingPolicy } from './tier-routing.js';
2
- import './types-BSdUWePh.js';
2
+ import './types-DwO1Ot4n.js';
3
3
  import './types-gb_SNtjR.js';
4
4
  import './message-parts/index.js';
5
5
  import './lifecycle.js';
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-H2AGJ5SV.js";
4
+ } from "./chunk-EBDA5TYA.js";
5
5
  import "./chunk-7FL4CNPV.js";
6
6
  import "./chunk-ZBJMUXZH.js";
7
- import "./chunk-422TIKIH.js";
7
+ import "./chunk-EVPNWN7Z.js";
8
8
  import "./chunk-L2B3EE7B.js";
9
9
  import "./chunk-M7XQSUBB.js";
10
10
  import "./chunk-5UZXUTVO.js";
@@ -14,29 +14,31 @@ import "./chunk-6CIAGZ6X.js";
14
14
  import "./chunk-J6A3CX5N.js";
15
15
  import "./chunk-SVOZFLIQ.js";
16
16
  import "./chunk-LTJAMRGI.js";
17
- import "./chunk-ZW5I3UNP.js";
17
+ import "./chunk-ILFSEIRT.js";
18
+ import "./chunk-AWJ2FHCF.js";
19
+ import "./chunk-42JKGUFJ.js";
18
20
  import "./chunk-RULE4VG5.js";
19
21
  import "./chunk-SCU65EZI.js";
20
22
  import "./chunk-MB5RSUW6.js";
21
23
  import "./chunk-6KYMPV2O.js";
22
- import "./chunk-AWJ2FHCF.js";
23
- import "./chunk-42JKGUFJ.js";
24
24
  import "./chunk-DM2T26WE.js";
25
25
  import "./chunk-LDXUBPMO.js";
26
- import "./chunk-FEB7W5JG.js";
26
+ import "./chunk-6OIDDKAA.js";
27
+ import "./chunk-XGTBNVIU.js";
27
28
  import "./chunk-G7D6GZ5J.js";
28
29
  import "./chunk-VF4XKTX3.js";
29
- import "./chunk-5J4OL7TJ.js";
30
+ import "./chunk-VUA4S7P6.js";
30
31
  import "./chunk-IQVQJJL7.js";
31
- import "./chunk-VL7DP3OW.js";
32
32
  import "./chunk-L2EXJQJP.js";
33
+ import "./chunk-VL7DP3OW.js";
33
34
  import "./chunk-RGMVMVMF.js";
34
35
  import "./chunk-N7RWREIQ.js";
35
36
  import "./chunk-J2HSAU72.js";
36
37
  import "./chunk-A6XUJE5D.js";
37
38
  import "./chunk-P7FMDTKL.js";
38
39
  import "./chunk-VS2IYZRU.js";
39
- import "./chunk-RVLB4E6N.js";
40
+ import "./chunk-MDBZTH7N.js";
41
+ import "./chunk-PHK3HARR.js";
40
42
  import "./chunk-5GKPFL3S.js";
41
43
  import "./chunk-4DJQYKMN.js";
42
44
  import "./chunk-EYIEWJNI.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.3.720",
3
+ "version": "9.3.721",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -2966,7 +2966,7 @@
2966
2966
  "core"
2967
2967
  ],
2968
2968
  "peerDependencies": {
2969
- "@remnic/coding-graph": "^9.3.720"
2969
+ "@remnic/coding-graph": "^9.3.721"
2970
2970
  },
2971
2971
  "peerDependenciesMeta": {
2972
2972
  "@remnic/coding-graph": {
package/src/config.ts CHANGED
@@ -49,6 +49,7 @@ import { parseWearablesConfig } from "./wearables/config.js";
49
49
  import { parseProvenanceConfig } from "./provenance.js";
50
50
  import { parseCodingKnowledgeConfig } from "./coding/coding-knowledge-config.js";
51
51
  import { parseChatConfig } from "./chat/chat-config.js";
52
+ import { parseCorrectionIntentConfig, parseFaithfulnessGateConfig } from "./faithfulness-config.js";
52
53
  const DEFAULT_MEMORY_DIR = path.join(
53
54
  resolveHomeDir(),
54
55
  ".openclaw",
@@ -3018,36 +3019,14 @@ export function parseConfig(
3018
3019
  collectJudgeTrainingPairs: coerceBool(cfg.collectJudgeTrainingPairs) === true,
3019
3020
  judgeTrainingDir:
3020
3021
  typeof cfg.judgeTrainingDir === "string" ? cfg.judgeTrainingDir : "",
3021
- // Extraction faithfulness gate (issue #1576). Entailment-verification of
3022
- // extracted facts against verified source spans (#1575). Default "off"
3023
- // (rule 39: byte-identical pre-feature pipeline). Invalid values are
3024
- // rejected listing valid options (rule 51).
3025
- extractionFaithfulnessGate: (() => {
3026
- const v = cfg.extractionFaithfulnessGate;
3027
- if (v === undefined || v === null) return "off";
3028
- // Present-but-invalid (true/1/{}) must reject, not silently disable the gate (Ob4RQ).
3029
- const raw = typeof v === "string" ? v.trim().toLowerCase() : v;
3030
- if (raw === "off" || raw === "shadow" || raw === "enforce") return raw;
3031
- throw new Error(
3032
- `extractionFaithfulnessGate must be one of "off" | "shadow" | "enforce" (got ${JSON.stringify(v)})`,
3033
- );
3034
- })(),
3035
- extractionFaithfulnessModel:
3036
- typeof cfg.extractionFaithfulnessModel === "string"
3037
- ? cfg.extractionFaithfulnessModel
3038
- : "",
3039
- // Issue #1634 (#1576 follow-up): strict-integer validation via
3040
- // parseIntegerAtLeast — reject non-numeric, <=0, non-integer, NaN,
3041
- // Infinity, booleans, objects (gotcha #51). Mirrors qmdDaemonTimeoutMs.
3042
- // Valid CLI-string integers still coerce and clamp to the budget cap.
3043
- extractionFaithfulnessContextChars: Math.min(
3044
- parseIntegerAtLeast(cfg.extractionFaithfulnessContextChars, 400, 1, "extractionFaithfulnessContextChars"),
3045
- 4000,
3046
- ),
3047
- extractionFaithfulnessTimeoutMs: Math.min(
3048
- parseIntegerAtLeast(cfg.extractionFaithfulnessTimeoutMs, 8000, 1, "extractionFaithfulnessTimeoutMs"),
3049
- 60_000,
3050
- ),
3022
+ // Extraction faithfulness gate (issue #1576) + model-lab pointer
3023
+ // `extractionFaithfulnessBaseUrl` (issue #1585), and the correction-intent
3024
+ // model-lab pointer (issue #1581 / #1585). Parsed in faithfulness-config.ts
3025
+ // (extracted from this god file so the block can grow without tripping the
3026
+ // ratchet). Defaults preserve the byte-identical pre-feature pipeline
3027
+ // (rule 39); invalid values reject (rule 51 / #1634).
3028
+ ...parseFaithfulnessGateConfig(cfg),
3029
+ ...parseCorrectionIntentConfig(cfg),
3051
3030
  // Inline source attribution (issue #369). Opt-in to preserve
3052
3031
  // backwards compatibility with existing downstream consumers.
3053
3032
  inlineSourceAttributionEnabled: cfg.inlineSourceAttributionEnabled === true,
@@ -1254,3 +1254,178 @@ test("parseFaithfulnessResponse: object-wrapped arrays unwrap (results/verdicts/
1254
1254
  // A wrapper object with no recognized array key still returns null (no over-match).
1255
1255
  assert.equal(parseFaithfulnessResponse('{"data": {"nested": []}}', 1), null);
1256
1256
  });
1257
+
1258
+ // ---------------------------------------------------------------------------
1259
+ // Issue #1585 model-lab pointer: local fine-tuned endpoint path
1260
+ // ---------------------------------------------------------------------------
1261
+
1262
+ /**
1263
+ * Build a fake fetch that responds for a specific base URL with a canned
1264
+ * openai-compatible chat-completions body. Records the request body so tests
1265
+ * can assert the gate routed to the local model.
1266
+ */
1267
+ function fakeFetchFor(
1268
+ baseUrl: string,
1269
+ responder: (body: Record<string, unknown>) => unknown,
1270
+ ): { fetch: typeof fetch; requests: Array<{ url: string; body: Record<string, unknown> }> } {
1271
+ const requests: Array<{ url: string; body: Record<string, unknown> }> = [];
1272
+ const fake = ((url: string, init: RequestInit) => {
1273
+ requests.push({ url, body: JSON.parse(String(init.body)) });
1274
+ const body = JSON.parse(String(init.body));
1275
+ const payload = responder(body);
1276
+ return Promise.resolve(
1277
+ new Response(JSON.stringify(payload), {
1278
+ status: 200,
1279
+ headers: { "content-type": "application/json" },
1280
+ }),
1281
+ );
1282
+ }) as typeof fetch;
1283
+ return { fetch: fake, requests };
1284
+ }
1285
+
1286
+ test("checkFaithfulnessBatch: local model-lab endpoint is tried first when configured (#1585)", async () => {
1287
+ const inputs = [{ factText: "Fact", quote: "Quote" }];
1288
+ const config = parseConfig({
1289
+ extractionFaithfulnessModel: "remnic-faithfulness-gate-v1",
1290
+ extractionFaithfulnessBaseUrl: "http://localhost:11434/v1",
1291
+ extractionFaithfulnessTimeoutMs: 5000,
1292
+ });
1293
+ const fallbackCalls: Array<{ messages: unknown; options: unknown }> = [];
1294
+ const { fetch: fakeFetch, requests } = fakeFetchFor("http://localhost:11434/v1", (body) => ({
1295
+ model: body.model,
1296
+ choices: [{ message: { content: JSON.stringify([{ index: 0, verdict: "contradicted" }]) } }],
1297
+ }));
1298
+ const result = await checkFaithfulnessBatch(
1299
+ inputs,
1300
+ config,
1301
+ null,
1302
+ stubFallbackLlm("[]", fallbackCalls),
1303
+ fakeFetch,
1304
+ );
1305
+ assert.equal(requests.length, 1, "local model-lab endpoint must be called");
1306
+ assert.equal(requests[0]?.url, "http://localhost:11434/v1/chat/completions");
1307
+ assert.equal(requests[0]?.body.model, "remnic-faithfulness-gate-v1");
1308
+ assert.equal(fallbackCalls.length, 0, "gateway fallback must NOT run when the local endpoint succeeds");
1309
+ assert.equal(result.results[0]?.ok, true);
1310
+ if (result.results[0]?.ok) {
1311
+ assert.equal(result.results[0].verdict, "contradicted", "local model verdict is used");
1312
+ assert.equal(result.results[0].model, "remnic-faithfulness-gate-v1");
1313
+ }
1314
+ });
1315
+
1316
+ test("checkFaithfulnessBatch: local endpoint failure falls back to the configured chain (#1585 graceful)", async () => {
1317
+ const inputs = [{ factText: "Fact", quote: "Quote" }];
1318
+ const config = parseConfig({
1319
+ extractionFaithfulnessModel: "remnic-faithfulness-gate-v1",
1320
+ extractionFaithfulnessBaseUrl: "http://localhost:11434/v1",
1321
+ extractionFaithfulnessTimeoutMs: 5000,
1322
+ });
1323
+ const fallbackCalls: Array<{ messages: unknown; options: unknown }> = [];
1324
+ // Local endpoint returns 500 → caller returns null → gate falls through to fallback.
1325
+ const failingFetch = (() =>
1326
+ Promise.resolve(new Response("err", { status: 500 }))) as unknown as typeof fetch;
1327
+ const result = await checkFaithfulnessBatch(
1328
+ inputs,
1329
+ config,
1330
+ null,
1331
+ stubFallbackLlm(JSON.stringify([{ index: 0, verdict: "entailed" }]), fallbackCalls),
1332
+ failingFetch,
1333
+ );
1334
+ assert.equal(fallbackCalls.length, 1, "must fall back to the configured chain on local-endpoint failure");
1335
+ assert.equal(result.results[0]?.ok, true);
1336
+ if (result.results[0]?.ok) {
1337
+ assert.equal(result.results[0].verdict, "entailed", "fallback chain verdict is used");
1338
+ }
1339
+ });
1340
+
1341
+ test("checkFaithfulnessBatch: a wedged local endpoint falls back to the chain BEFORE the batch timeout (codex P2 — probe budget)", async () => {
1342
+ // The local probe must use a SMALLER budget than the outer batch timeout so a
1343
+ // hanging endpoint returns null and the configured chain runs before the batch
1344
+ // timer fires. extractionFaithfulnessTimeoutMs: 1000 → probe budget = 500ms.
1345
+ const inputs = [{ factText: "Fact", quote: "Quote" }];
1346
+ const config = parseConfig({
1347
+ extractionFaithfulnessModel: "remnic-faithfulness-gate-v1",
1348
+ extractionFaithfulnessBaseUrl: "http://localhost:11434/v1",
1349
+ extractionFaithfulnessTimeoutMs: 1000,
1350
+ });
1351
+ const fallbackCalls: Array<{ messages: unknown; options: unknown }> = [];
1352
+ // A fetch that hangs forever on its own but HONORS the probe's AbortSignal —
1353
+ // the probe's controller aborts it at 500ms (half the batch budget), the call
1354
+ // returns null, and the gate falls through to the configured chain.
1355
+ const wedgedFetch = ((_url: string, init: RequestInit) =>
1356
+ new Promise<Response>((_resolve, reject) => {
1357
+ const sig = init.signal;
1358
+ if (!sig) return;
1359
+ if (sig.aborted) reject(new Error("aborted"));
1360
+ else sig.addEventListener("abort", () => reject(new Error("aborted")), { once: true });
1361
+ })) as unknown as typeof fetch;
1362
+ const result = await checkFaithfulnessBatch(
1363
+ inputs,
1364
+ config,
1365
+ null,
1366
+ stubFallbackLlm(JSON.stringify([{ index: 0, verdict: "entailed" }]), fallbackCalls),
1367
+ wedgedFetch,
1368
+ );
1369
+ assert.equal(
1370
+ fallbackCalls.length,
1371
+ 1,
1372
+ "a wedged local probe must reach the configured chain before the batch budget elapses",
1373
+ );
1374
+ assert.equal(result.results[0]?.ok, true);
1375
+ if (result.results[0]?.ok) {
1376
+ assert.equal(result.results[0].verdict, "entailed", "fallback chain verdict is used");
1377
+ }
1378
+ });
1379
+
1380
+ test("checkFaithfulnessBatch: no local endpoint pointer → byte-identical routing (regression guard)", async () => {
1381
+ // Default config (no baseUrl) must never attempt a local-endpoint fetch.
1382
+ const inputs = [{ factText: "Fact", quote: "Quote" }];
1383
+ const config = baseConfig();
1384
+ let fetchCalled = false;
1385
+ const spyFetch = (() => {
1386
+ fetchCalled = true;
1387
+ return Promise.resolve(new Response("{}", { status: 200 }));
1388
+ }) as unknown as typeof fetch;
1389
+ await checkFaithfulnessBatch(
1390
+ inputs,
1391
+ config,
1392
+ null,
1393
+ stubFallbackLlm(JSON.stringify([{ index: 0, verdict: "entailed" }])),
1394
+ spyFetch,
1395
+ );
1396
+ assert.equal(fetchCalled, false, "no local-endpoint fetch when pointer is unset");
1397
+ });
1398
+
1399
+
1400
+ test("checkFaithfulnessBatch: local-endpoint failure does NOT leak the local model name into the fallback chain (codex P2 PRRT_kwDORJXyws6Otp-L)", async () => {
1401
+ // extractionFaithfulnessModel is the LOCAL served model's name. When the
1402
+ // local endpoint is configured but fails, that name must NOT be forwarded to
1403
+ // the gateway/fallback as options.model — otherwise the configured chain is
1404
+ // forced onto an unavailable local-only model and a local outage becomes
1405
+ // backend_unavailable instead of graceful fallback to the configured chain.
1406
+ const inputs = [{ factText: "Fact", quote: "Quote" }];
1407
+ const config = parseConfig({
1408
+ extractionFaithfulnessModel: "remnic-faithfulness-gate-v1",
1409
+ extractionFaithfulnessBaseUrl: "http://localhost:11434/v1",
1410
+ extractionFaithfulnessTimeoutMs: 5000,
1411
+ });
1412
+ const fallbackCalls: Array<{ messages: unknown; options: unknown }> = [];
1413
+ // Local endpoint returns 500 -> caller returns null -> gate falls through.
1414
+ const failingFetch = (() =>
1415
+ Promise.resolve(new Response("err", { status: 500 }))) as unknown as typeof fetch;
1416
+ const result = await checkFaithfulnessBatch(
1417
+ inputs,
1418
+ config,
1419
+ null,
1420
+ stubFallbackLlm(JSON.stringify([{ index: 0, verdict: "entailed" }]), fallbackCalls),
1421
+ failingFetch,
1422
+ );
1423
+ assert.equal(fallbackCalls.length, 1, "fallback chain must run on local-endpoint failure");
1424
+ const opts = fallbackCalls[0]?.options as Record<string, unknown>;
1425
+ assert.equal(
1426
+ opts?.model,
1427
+ undefined,
1428
+ "local-only model name must NOT leak into the fallback chain on endpoint failure",
1429
+ );
1430
+ assert.equal(result.results[0]?.ok, true);
1431
+ });
@@ -34,6 +34,10 @@ import { log } from "./logger.js";
34
34
  import type { PluginConfig, MemoryFrontmatter, FaithfulnessFrontmatter } from "./types.js";
35
35
  import type { LocalLlmClient } from "./local-llm.js";
36
36
  import { type FallbackLlmClient, gatewayTaskChainOptions } from "./fallback-llm.js";
37
+ import {
38
+ callOpenAiCompatibleChat,
39
+ resolveFaithfulnessGateEndpoint,
40
+ } from "./local-model-endpoint.js";
37
41
  import { extractJsonCandidates } from "./json-extract.js";
38
42
 
39
43
  // Re-export for callers importing from this module.
@@ -280,13 +284,54 @@ async function callFaithfulnessLlm(
280
284
  fallbackLlm: FallbackLlmClient | null,
281
285
  timeoutMs: number,
282
286
  signal?: AbortSignal,
287
+ fetchImpl: typeof fetch = fetch,
283
288
  ): Promise<LlmCallResult> {
284
289
  const messages: Array<{ role: "system" | "user"; content: string }> = [
285
290
  { role: "system", content: systemPrompt },
286
291
  { role: "user", content: userPrompt },
287
292
  ];
288
293
 
289
- const modelOverride = config.extractionFaithfulnessModel || undefined;
294
+ // Issue #1585 model-lab pointer: when an explicit local fine-tuned endpoint
295
+ // is configured (base URL + model name), try it FIRST — it is the cheapest,
296
+ // deterministic path the operator opted into by setting
297
+ // extractionFaithfulnessBaseUrl. Unset (the default) skips this entirely,
298
+ // preserving byte-identical pre-feature routing (rule 39). Any failure
299
+ // (network, non-2xx, malformed body, timeout) returns null and falls through
300
+ // to the configured chain (checklist §4 graceful degradation).
301
+ const localEndpoint = resolveFaithfulnessGateEndpoint(config);
302
+ if (localEndpoint) {
303
+ // Give the local probe a SMALLER budget than the outer batch timeout so a
304
+ // wedged local model returns null (and falls through to the configured
305
+ // chain) before the batch timer fires. The local endpoint is meant to be
306
+ // the fast path; if it cannot answer within half the budget (min 500ms),
307
+ // abandon it and let the fallback chain use the remainder (codex P2 — the
308
+ // advertised graceful fallback must actually reach the chain, not be starved
309
+ // by a hanging probe sharing the full batch budget).
310
+ const probeBudgetMs = Math.max(500, Math.floor(timeoutMs / 2));
311
+ const result = await callOpenAiCompatibleChat(
312
+ localEndpoint,
313
+ messages,
314
+ { temperature: 0.1, maxTokens: 2048, responseFormatJson: true, timeoutMs: probeBudgetMs },
315
+ fetchImpl,
316
+ );
317
+ if (result?.content) {
318
+ return { content: result.content, modelUsed: result.modelUsed };
319
+ }
320
+ log.debug(
321
+ "extraction-faithfulness: local model-lab endpoint unavailable, trying configured chain",
322
+ );
323
+ }
324
+
325
+ // extractionFaithfulnessModel is the LOCAL served model's name (e.g.
326
+ // remnic-faithfulness-gate-v1). When a local endpoint is configured it
327
+ // belongs to that endpoint ONLY — it must NOT leak into the fallback chain
328
+ // as a gateway/local-LLM override, or a local outage forces the configured
329
+ // chain onto an unavailable local-only model and turns graceful fallback
330
+ // into backend_unavailable (codex P2 PRRT_kwDORJXyws6Otp-L). Decouple: the
331
+ // override reaches the fallback chain only when NO local endpoint is
332
+ // configured (the pre-feature model-override contract, preserved
333
+ // byte-identical — rule 39).
334
+ const modelOverride = localEndpoint ? undefined : (config.extractionFaithfulnessModel || undefined);
290
335
 
291
336
  // Skip the local backend when (a) modelSource is "gateway", or (b) a
292
337
  // faithfulness model override is set. The local client always sends
@@ -415,6 +460,12 @@ export async function checkFaithfulnessBatch(
415
460
  config: PluginConfig,
416
461
  localLlm: LocalLlmClient | null,
417
462
  fallbackLlm: FallbackLlmClient | null,
463
+ /**
464
+ * Optional fetch injection (issue #1585). The orchestrator does not pass it
465
+ * (uses global fetch); tests pass a stub to exercise the local model-lab
466
+ * endpoint path without a live server. See callFaithfulnessLlm.
467
+ */
468
+ fetchImpl?: typeof fetch,
418
469
  ): Promise<FaithfulnessBatchResult> {
419
470
  const timeoutMs =
420
471
  typeof config.extractionFaithfulnessTimeoutMs === "number" &&
@@ -486,6 +537,7 @@ export async function checkFaithfulnessBatch(
486
537
  fallbackLlm,
487
538
  timeoutMs,
488
539
  controller.signal,
540
+ fetchImpl,
489
541
  );
490
542
  const settled = await Promise.race([
491
543
  callPromise.then(