@remnic/core 9.3.726 → 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 (318) hide show
  1. package/dist/access-boundary.d.ts +5 -5
  2. package/dist/access-boundary.js +20 -20
  3. package/dist/access-cli.js +42 -42
  4. package/dist/access-http.d.ts +20 -5
  5. package/dist/access-http.js +25 -25
  6. package/dist/access-mcp.d.ts +5 -5
  7. package/dist/access-mcp.js +24 -24
  8. package/dist/access-operations-batch.js +21 -21
  9. package/dist/access-operations.d.ts +5 -5
  10. package/dist/access-operations.js +23 -23
  11. package/dist/access-schema.js +3 -3
  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 +19 -19
  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/behavior-learner.d.ts +1 -1
  21. package/dist/behavior-signals.d.ts +1 -1
  22. package/dist/bootstrap.d.ts +4 -4
  23. package/dist/briefing.d.ts +1 -1
  24. package/dist/briefing.js +7 -7
  25. package/dist/buffer-surprise-report.d.ts +1 -1
  26. package/dist/buffer.d.ts +1 -1
  27. package/dist/calibration.d.ts +1 -1
  28. package/dist/capabilities.d.ts +1 -1
  29. package/dist/{capsule-crypto-GWVG7LGC.js → capsule-crypto-7FJQINUR.js} +2 -2
  30. package/dist/{catalog-CzUb-GyD.d.ts → catalog-bMczlO2G.d.ts} +1 -1
  31. package/dist/causal-behavior.d.ts +1 -1
  32. package/dist/causal-consolidation.d.ts +1 -1
  33. package/dist/causal-consolidation.js +8 -8
  34. package/dist/causal-trajectory-graph.d.ts +1 -1
  35. package/dist/{chunk-Q6D75LVH.js → chunk-27QQC7ZX.js} +75 -14
  36. package/dist/{chunk-Q6D75LVH.js.map → chunk-27QQC7ZX.js.map} +1 -1
  37. package/dist/{chunk-53EEQYE5.js → chunk-2KAYTPPT.js} +7 -7
  38. package/dist/{chunk-OWHERGF2.js → chunk-2NLLXCJG.js} +2 -2
  39. package/dist/{chunk-BIA7ELIB.js → chunk-36SEDFAU.js} +3 -3
  40. package/dist/{chunk-UQSVUEN2.js → chunk-37436GML.js} +2 -2
  41. package/dist/{chunk-RRHHQYJS.js → chunk-3TSTGI6F.js} +2 -2
  42. package/dist/{chunk-FO3HO52S.js → chunk-4H4F3BFL.js} +2 -2
  43. package/dist/{chunk-BEUCACTV.js → chunk-4NOI577P.js} +2 -2
  44. package/dist/{chunk-BBIE7W52.js → chunk-4NR2PDZ5.js} +2 -2
  45. package/dist/{chunk-TQQH2FTX.js → chunk-6PY5YJAV.js} +101 -15
  46. package/dist/{chunk-TQQH2FTX.js.map → chunk-6PY5YJAV.js.map} +1 -1
  47. package/dist/{chunk-PKMQK2WY.js → chunk-773DPI6T.js} +4 -4
  48. package/dist/{chunk-MQVKHFIU.js → chunk-7RLCCNHU.js} +8 -8
  49. package/dist/{chunk-XGTBNVIU.js → chunk-AAD2ZS6P.js} +11 -1
  50. package/dist/chunk-AAD2ZS6P.js.map +1 -0
  51. package/dist/{chunk-EZNDNMRH.js → chunk-AQLOP5F4.js} +2 -2
  52. package/dist/{chunk-UNNDFYUX.js → chunk-ARV3AUOM.js} +5 -5
  53. package/dist/{chunk-NPL7VDM6.js → chunk-ASKXIAHD.js} +2 -2
  54. package/dist/{chunk-K4ZNARDO.js → chunk-CBWI22JN.js} +2 -2
  55. package/dist/{chunk-ZOHMPFOB.js → chunk-CKFLLAIS.js} +3 -3
  56. package/dist/{chunk-DCKNMLEQ.js → chunk-CSRXQ6NB.js} +2 -2
  57. package/dist/{chunk-6AFVIOVZ.js → chunk-CTOQEZSN.js} +2 -2
  58. package/dist/{chunk-7NS7AWMZ.js → chunk-DKJCRGWM.js} +3 -3
  59. package/dist/{chunk-JPUT5NGH.js → chunk-DMQWV6SQ.js} +2 -2
  60. package/dist/{chunk-F3XZN24Z.js → chunk-DRUDC2UX.js} +2 -2
  61. package/dist/{chunk-KJR66XOM.js → chunk-EY6MDMHK.js} +2 -2
  62. package/dist/{chunk-3TUT4PWB.js → chunk-FVZ2ISIX.js} +2 -2
  63. package/dist/{chunk-C4X4QGIO.js → chunk-G6NKALRN.js} +5 -2
  64. package/dist/chunk-G6NKALRN.js.map +1 -0
  65. package/dist/{chunk-6SQQOJ4U.js → chunk-GKRLPHPU.js} +2 -2
  66. package/dist/{chunk-5NWYQUQC.js → chunk-HOHVIVDR.js} +2 -2
  67. package/dist/{chunk-6WAJQKBS.js → chunk-JYLFZWUX.js} +2 -2
  68. package/dist/{chunk-5W7CTZ2E.js → chunk-KQAFEZQX.js} +4 -4
  69. package/dist/{chunk-YTZ3VGC7.js → chunk-M4V2JVSZ.js} +2 -2
  70. package/dist/{chunk-PLG6JHQS.js → chunk-MJIHJ7OG.js} +38 -38
  71. package/dist/{chunk-TA3Y6GEX.js → chunk-MLKWJOAJ.js} +2 -2
  72. package/dist/{chunk-2NBP25BG.js → chunk-N3VNUM4Z.js} +171 -79
  73. package/dist/chunk-N3VNUM4Z.js.map +1 -0
  74. package/dist/{chunk-UKTDXTWX.js → chunk-NSA5ZRUL.js} +6 -6
  75. package/dist/{chunk-DQXPJ6HD.js → chunk-OEEW4KJA.js} +4 -4
  76. package/dist/{chunk-7AG54AF3.js → chunk-PUR2CKX2.js} +1 -1
  77. package/dist/chunk-PUR2CKX2.js.map +1 -0
  78. package/dist/{chunk-5OOA7SGX.js → chunk-R7IYU5DZ.js} +2 -2
  79. package/dist/{chunk-WGTWGDR5.js → chunk-SNKPUJHR.js} +5 -5
  80. package/dist/{chunk-BB57OZWC.js → chunk-UVPL565C.js} +2 -2
  81. package/dist/{chunk-UVYI6VIX.js → chunk-X7Y7WX73.js} +1 -1
  82. package/dist/{chunk-OAHOL3ZC.js → chunk-XPHVAOBT.js} +111 -30
  83. package/dist/chunk-XPHVAOBT.js.map +1 -0
  84. package/dist/{chunk-V7CMKMHM.js → chunk-Y4YD5TYW.js} +3 -3
  85. package/dist/{chunk-MDBZTH7N.js → chunk-YKBHOBJK.js} +44 -10
  86. package/dist/chunk-YKBHOBJK.js.map +1 -0
  87. package/dist/{chunk-3MS3QVX6.js → chunk-YOLZS7NY.js} +2 -2
  88. package/dist/{chunk-6OIDDKAA.js → chunk-YTU7WKYN.js} +35 -9
  89. package/dist/chunk-YTU7WKYN.js.map +1 -0
  90. package/dist/{cli-IOlDHSBT.d.ts → cli-BLME420h.d.ts} +3 -3
  91. package/dist/cli.d.ts +6 -6
  92. package/dist/cli.js +47 -47
  93. package/dist/compat/codex-cli-fallback.d.ts +1 -0
  94. package/dist/compat/codex-cli-fallback.js +22 -0
  95. package/dist/compat/codex-cli-fallback.js.map +1 -0
  96. package/dist/compat/codex-thread-key.d.ts +1 -0
  97. package/dist/compat/codex-thread-key.js +18 -0
  98. package/dist/compat/codex-thread-key.js.map +1 -0
  99. package/dist/compounding/engine.d.ts +1 -1
  100. package/dist/compounding/engine.js +7 -7
  101. package/dist/compounding/preference-consolidator.d.ts +1 -1
  102. package/dist/compression-optimizer.d.ts +1 -1
  103. package/dist/config.d.ts +1 -1
  104. package/dist/config.js +3 -3
  105. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  106. package/dist/connectors/codex-materialize-runner.js +7 -7
  107. package/dist/connectors/codex-materialize.d.ts +1 -1
  108. package/dist/connectors/index.d.ts +1 -1
  109. package/dist/connectors/index.js +7 -7
  110. package/dist/consolidation-provenance-check.d.ts +1 -1
  111. package/dist/consolidation-undo.d.ts +1 -1
  112. package/dist/contradiction/index.d.ts +1 -1
  113. package/dist/conversation-index/backend.d.ts +1 -1
  114. package/dist/conversation-index/chunker.d.ts +1 -1
  115. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  116. package/dist/conversation-index/indexer.d.ts +1 -1
  117. package/dist/conversation-index/search.d.ts +1 -1
  118. package/dist/day-summary.d.ts +1 -1
  119. package/dist/delinearize.d.ts +1 -1
  120. package/dist/direct-answer-wiring.d.ts +1 -1
  121. package/dist/direct-answer.d.ts +1 -1
  122. package/dist/embedding-fallback.d.ts +1 -1
  123. package/dist/enrichment/index.d.ts +1 -1
  124. package/dist/entity-retrieval.d.ts +1 -1
  125. package/dist/entity-retrieval.js +7 -7
  126. package/dist/entity-schema.d.ts +1 -1
  127. package/dist/explicit-capture.d.ts +4 -4
  128. package/dist/extraction-faithfulness.d.ts +1 -1
  129. package/dist/extraction-faithfulness.js +2 -2
  130. package/dist/extraction-judge-telemetry.d.ts +1 -1
  131. package/dist/extraction-judge-training.d.ts +1 -1
  132. package/dist/extraction-judge.d.ts +1 -1
  133. package/dist/extraction.d.ts +1 -1
  134. package/dist/extraction.js +2 -2
  135. package/dist/faithfulness-config.d.ts +1 -0
  136. package/dist/faithfulness-config.js +1 -1
  137. package/dist/fallback-llm.d.ts +1 -1
  138. package/dist/graph-dashboard-diff.d.ts +1 -1
  139. package/dist/graph-dashboard-key.d.ts +1 -1
  140. package/dist/graph-dashboard-parser.d.ts +1 -1
  141. package/dist/graph-edge-reinforcement.d.ts +1 -1
  142. package/dist/graph-snapshot.d.ts +1 -1
  143. package/dist/graph.d.ts +1 -1
  144. package/dist/identity-continuity.d.ts +1 -1
  145. package/dist/importance.d.ts +1 -1
  146. package/dist/index.d.ts +9 -9
  147. package/dist/index.js +61 -61
  148. package/dist/intent.d.ts +1 -1
  149. package/dist/lcm/engine.d.ts +1 -1
  150. package/dist/lcm/engine.js +2 -2
  151. package/dist/lcm/index.d.ts +1 -1
  152. package/dist/lcm/index.js +7 -7
  153. package/dist/lcm/tools.d.ts +1 -1
  154. package/dist/lifecycle.d.ts +1 -1
  155. package/dist/live-connectors-runner.d.ts +1 -1
  156. package/dist/local-llm.d.ts +1 -1
  157. package/dist/local-model-endpoint.d.ts +9 -4
  158. package/dist/local-model-endpoint.js +1 -1
  159. package/dist/maintenance/memory-governance.d.ts +1 -1
  160. package/dist/maintenance/memory-governance.js +7 -7
  161. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +7 -7
  162. package/dist/maintenance/rebuild-memory-projection.js +8 -8
  163. package/dist/mcp-memory-inspector-app.d.ts +5 -5
  164. package/dist/memory-action-policy.d.ts +1 -1
  165. package/dist/memory-cache.d.ts +1 -1
  166. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  167. package/dist/memory-projection-store.d.ts +1 -1
  168. package/dist/memory-provenance.d.ts +1 -1
  169. package/dist/memory-worth-outcomes.d.ts +1 -1
  170. package/dist/models-json.d.ts +1 -1
  171. package/dist/namespaces/migrate.d.ts +2 -2
  172. package/dist/namespaces/migrate.js +12 -12
  173. package/dist/namespaces/principal.d.ts +1 -1
  174. package/dist/namespaces/search.d.ts +1 -1
  175. package/dist/namespaces/search.js +4 -4
  176. package/dist/namespaces/storage.d.ts +2 -2
  177. package/dist/namespaces/storage.js +7 -7
  178. package/dist/native-knowledge.d.ts +1 -1
  179. package/dist/operator-toolkit.d.ts +1 -1
  180. package/dist/operator-toolkit.js +18 -18
  181. package/dist/orchestration/maintenance.d.ts +2 -2
  182. package/dist/orchestration/maintenance.js +9 -9
  183. package/dist/{orchestrator-C_OMSIMZ.d.ts → orchestrator-DqPAz8ot.d.ts} +3 -3
  184. package/dist/orchestrator.d.ts +4 -4
  185. package/dist/orchestrator.js +30 -30
  186. package/dist/patterns-cli.d.ts +1 -1
  187. package/dist/policy-runtime.d.ts +1 -1
  188. package/dist/provenance.d.ts +1 -1
  189. package/dist/provenance.js +1 -1
  190. package/dist/qmd-recall-cache.d.ts +1 -1
  191. package/dist/qmd.d.ts +1 -1
  192. package/dist/recall-disclosure-escalation.d.ts +1 -1
  193. package/dist/recall-explain-renderer.d.ts +1 -1
  194. package/dist/recall-explain-renderer.js +3 -3
  195. package/dist/recall-planner-llm.d.ts +1 -1
  196. package/dist/recall-state.d.ts +1 -1
  197. package/dist/recall-tag-filter.d.ts +1 -1
  198. package/dist/recall-xray-cli.d.ts +1 -1
  199. package/dist/recall-xray-cli.js +4 -4
  200. package/dist/recall-xray-renderer.d.ts +1 -1
  201. package/dist/recall-xray-renderer.js +3 -3
  202. package/dist/recall-xray.d.ts +1 -1
  203. package/dist/recall-xray.js +2 -2
  204. package/dist/resolve-auth-token.d.ts +1 -1
  205. package/dist/resume-bundles.js +4 -4
  206. package/dist/retrieval-agents.d.ts +1 -1
  207. package/dist/retrieval-tiers.d.ts +1 -1
  208. package/dist/routing/engine.d.ts +1 -1
  209. package/dist/routing/store.d.ts +1 -1
  210. package/dist/schemas.d.ts +22 -22
  211. package/dist/search/embed-helper.d.ts +1 -1
  212. package/dist/search/factory.d.ts +1 -1
  213. package/dist/search/factory.js +3 -3
  214. package/dist/search/index.d.ts +1 -1
  215. package/dist/search/index.js +7 -7
  216. package/dist/search/lancedb-backend.d.ts +1 -1
  217. package/dist/search/meilisearch-backend.d.ts +1 -1
  218. package/dist/search/noop-backend.d.ts +1 -1
  219. package/dist/search/orama-backend.d.ts +1 -1
  220. package/dist/search/port.d.ts +1 -1
  221. package/dist/search/remote-backend.d.ts +1 -1
  222. package/dist/{semantic-consolidation-B8LiYtvx.d.ts → semantic-consolidation-Cl15ksZy.d.ts} +1 -1
  223. package/dist/semantic-consolidation.d.ts +2 -2
  224. package/dist/semantic-consolidation.js +8 -8
  225. package/dist/semantic-rule-promotion.js +7 -7
  226. package/dist/semantic-rule-verifier.d.ts +1 -1
  227. package/dist/semantic-rule-verifier.js +7 -7
  228. package/dist/session-observer-bands.d.ts +1 -1
  229. package/dist/session-observer-state.d.ts +1 -1
  230. package/dist/shared-context/manager.d.ts +1 -1
  231. package/dist/signal.d.ts +1 -1
  232. package/dist/storage.d.ts +1 -1
  233. package/dist/storage.js +6 -6
  234. package/dist/summarizer.d.ts +1 -1
  235. package/dist/summary-snapshot.d.ts +1 -1
  236. package/dist/temporal-supersession.d.ts +1 -1
  237. package/dist/temporal-validity.d.ts +1 -1
  238. package/dist/threading.d.ts +1 -1
  239. package/dist/tier-migration.d.ts +1 -1
  240. package/dist/tier-routing.d.ts +1 -1
  241. package/dist/topics.d.ts +1 -1
  242. package/dist/transcript.d.ts +1 -1
  243. package/dist/transfer/backup.js +2 -2
  244. package/dist/transfer/capsule-export.js +2 -2
  245. package/dist/transfer/capsule-import.js +2 -2
  246. package/dist/transfer/types.d.ts +12 -12
  247. package/dist/trust-score-stage.d.ts +1 -1
  248. package/dist/trust-score.d.ts +1 -1
  249. package/dist/{types-DmTaqob2.d.ts → types-ChQb9D6s.d.ts} +8 -0
  250. package/dist/types.d.ts +1 -1
  251. package/dist/types.js +1 -1
  252. package/dist/utility-runtime.d.ts +1 -1
  253. package/dist/verified-recall.js +7 -7
  254. package/package.json +26 -2
  255. package/src/access-http.ts +68 -1
  256. package/src/admin/admin-surfaces.test.ts +289 -0
  257. package/src/admin/admin-surfaces.ts +138 -7
  258. package/src/bitemporal-dedup-backfill.test.ts +294 -0
  259. package/src/chat/chat-engine.test.ts +66 -1
  260. package/src/chat/chat-http.test.ts +119 -1
  261. package/src/chat/chat-http.ts +252 -97
  262. package/src/chat/chat-session.ts +143 -7
  263. package/src/compat/codex-cli-fallback.ts +23 -0
  264. package/src/compat/codex-subpath-aliases.test.ts +93 -0
  265. package/src/compat/codex-thread-key.ts +23 -0
  266. package/src/extraction-faithfulness.test.ts +240 -0
  267. package/src/extraction-faithfulness.ts +58 -6
  268. package/src/faithfulness-config.ts +16 -1
  269. package/src/local-model-endpoint.ts +24 -3
  270. package/src/orchestrator.ts +200 -8
  271. package/src/provenance-extraction.test.ts +266 -0
  272. package/src/provenance.ts +66 -16
  273. package/src/types.ts +8 -0
  274. package/dist/chunk-2NBP25BG.js.map +0 -1
  275. package/dist/chunk-6OIDDKAA.js.map +0 -1
  276. package/dist/chunk-7AG54AF3.js.map +0 -1
  277. package/dist/chunk-C4X4QGIO.js.map +0 -1
  278. package/dist/chunk-MDBZTH7N.js.map +0 -1
  279. package/dist/chunk-OAHOL3ZC.js.map +0 -1
  280. package/dist/chunk-XGTBNVIU.js.map +0 -1
  281. /package/dist/{capsule-crypto-GWVG7LGC.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  282. /package/dist/{chunk-53EEQYE5.js.map → chunk-2KAYTPPT.js.map} +0 -0
  283. /package/dist/{chunk-OWHERGF2.js.map → chunk-2NLLXCJG.js.map} +0 -0
  284. /package/dist/{chunk-BIA7ELIB.js.map → chunk-36SEDFAU.js.map} +0 -0
  285. /package/dist/{chunk-UQSVUEN2.js.map → chunk-37436GML.js.map} +0 -0
  286. /package/dist/{chunk-RRHHQYJS.js.map → chunk-3TSTGI6F.js.map} +0 -0
  287. /package/dist/{chunk-FO3HO52S.js.map → chunk-4H4F3BFL.js.map} +0 -0
  288. /package/dist/{chunk-BEUCACTV.js.map → chunk-4NOI577P.js.map} +0 -0
  289. /package/dist/{chunk-BBIE7W52.js.map → chunk-4NR2PDZ5.js.map} +0 -0
  290. /package/dist/{chunk-PKMQK2WY.js.map → chunk-773DPI6T.js.map} +0 -0
  291. /package/dist/{chunk-MQVKHFIU.js.map → chunk-7RLCCNHU.js.map} +0 -0
  292. /package/dist/{chunk-EZNDNMRH.js.map → chunk-AQLOP5F4.js.map} +0 -0
  293. /package/dist/{chunk-UNNDFYUX.js.map → chunk-ARV3AUOM.js.map} +0 -0
  294. /package/dist/{chunk-NPL7VDM6.js.map → chunk-ASKXIAHD.js.map} +0 -0
  295. /package/dist/{chunk-K4ZNARDO.js.map → chunk-CBWI22JN.js.map} +0 -0
  296. /package/dist/{chunk-ZOHMPFOB.js.map → chunk-CKFLLAIS.js.map} +0 -0
  297. /package/dist/{chunk-DCKNMLEQ.js.map → chunk-CSRXQ6NB.js.map} +0 -0
  298. /package/dist/{chunk-6AFVIOVZ.js.map → chunk-CTOQEZSN.js.map} +0 -0
  299. /package/dist/{chunk-7NS7AWMZ.js.map → chunk-DKJCRGWM.js.map} +0 -0
  300. /package/dist/{chunk-JPUT5NGH.js.map → chunk-DMQWV6SQ.js.map} +0 -0
  301. /package/dist/{chunk-F3XZN24Z.js.map → chunk-DRUDC2UX.js.map} +0 -0
  302. /package/dist/{chunk-KJR66XOM.js.map → chunk-EY6MDMHK.js.map} +0 -0
  303. /package/dist/{chunk-3TUT4PWB.js.map → chunk-FVZ2ISIX.js.map} +0 -0
  304. /package/dist/{chunk-6SQQOJ4U.js.map → chunk-GKRLPHPU.js.map} +0 -0
  305. /package/dist/{chunk-5NWYQUQC.js.map → chunk-HOHVIVDR.js.map} +0 -0
  306. /package/dist/{chunk-6WAJQKBS.js.map → chunk-JYLFZWUX.js.map} +0 -0
  307. /package/dist/{chunk-5W7CTZ2E.js.map → chunk-KQAFEZQX.js.map} +0 -0
  308. /package/dist/{chunk-YTZ3VGC7.js.map → chunk-M4V2JVSZ.js.map} +0 -0
  309. /package/dist/{chunk-PLG6JHQS.js.map → chunk-MJIHJ7OG.js.map} +0 -0
  310. /package/dist/{chunk-TA3Y6GEX.js.map → chunk-MLKWJOAJ.js.map} +0 -0
  311. /package/dist/{chunk-UKTDXTWX.js.map → chunk-NSA5ZRUL.js.map} +0 -0
  312. /package/dist/{chunk-DQXPJ6HD.js.map → chunk-OEEW4KJA.js.map} +0 -0
  313. /package/dist/{chunk-5OOA7SGX.js.map → chunk-R7IYU5DZ.js.map} +0 -0
  314. /package/dist/{chunk-WGTWGDR5.js.map → chunk-SNKPUJHR.js.map} +0 -0
  315. /package/dist/{chunk-BB57OZWC.js.map → chunk-UVPL565C.js.map} +0 -0
  316. /package/dist/{chunk-UVYI6VIX.js.map → chunk-X7Y7WX73.js.map} +0 -0
  317. /package/dist/{chunk-V7CMKMHM.js.map → chunk-Y4YD5TYW.js.map} +0 -0
  318. /package/dist/{chunk-3MS3QVX6.js.map → chunk-YOLZS7NY.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/local-model-endpoint.ts"],"sourcesContent":["/**\n * Local fine-tuned model endpoint resolver + openai-compatible caller\n * (issue #1585 model-lab integration).\n *\n * Remnic's two classification workloads — the extraction faithfulness gate\n * (#1576) and passive-correction intent detection (#1581) — can run on small\n * fine-tuned models served locally (Ollama / vLLM) instead of prompted\n * frontier LLMs. The model-lab (`model-lab/`) produces those models; this\n * module is the config-side half: it resolves the optional local endpoint\n * pointer from config and, when set, makes a minimal openai-compatible\n * chat-completions call to it.\n *\n * Design:\n * - **Pointers are optional.** Empty defaults preserve the existing routing\n * chain exactly (rule 39 / byte-identical pre-feature). A resolver returns\n * `null` when the pointer is unset, so callers short-circuit before any\n * network.\n * - **Graceful degradation.** A local-endpoint failure (network, non-2xx,\n * malformed body, timeout) returns `null`; callers fall back to the\n * configured chain (checklist §4 — never block writes on a classifier).\n * - **No inline casts.** The fetch JSON is narrowed with `in` / `typeof`\n * guards (project rule: never assert a shape to read one property).\n * - **Injectable fetch.** `callOpenAiCompatibleChat` takes an optional\n * `fetchImpl` so the caller is unit-testable without a live server.\n */\n\nimport type { PluginConfig } from \"./types.js\";\n\n/** A resolved local endpoint: where to call + which model to name. */\nexport interface LocalModelEndpoint {\n /** Base URL, e.g. `http://localhost:11434/v1` (no trailing slash required). */\n baseUrl: string;\n /** Model name the server expects, e.g. `remnic-faithfulness-gate-v1`. */\n model: string;\n}\n\n/** A chat message in the openai-compatible shape this caller sends. */\nexport interface EndpointChatMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n}\n\n/** Options for a single local-endpoint chat call. */\nexport interface EndpointChatOptions {\n /** Per-call timeout in ms. The caller's batch AbortSignal is NOT forwarded\n * (matches the local-LLM precedent: each attempt is bounded by its own\n * timer so one slow server can't starve the batch). */\n timeoutMs: number;\n /** Sampling temperature — classification wants low entropy (0.0–0.2). */\n temperature?: number;\n /** Max output tokens. */\n maxTokens?: number;\n /** Request JSON-object output (the gate emits a JSON verdict array). */\n responseFormatJson?: boolean;\n}\n\n/** Result of a local-endpoint chat call. */\nexport interface EndpointChatResult {\n content: string;\n /** The model the server reports it used (falls back to the requested name). */\n modelUsed: string;\n}\n\n/**\n * Resolve the faithfulness-gate local endpoint from config (issue #1585).\n *\n * Returns the endpoint only when BOTH a base URL and a model name are\n * configured; otherwise `null` (gate uses its existing routing chain). The\n * gate's verifier needs a model identity, so a base URL alone is intentionally\n * insufficient — silently calling whatever the server's default model is would\n * be an unreviewed behavioral change.\n */\nexport function resolveFaithfulnessGateEndpoint(\n config: Pick<PluginConfig, \"extractionFaithfulnessModel\" | \"extractionFaithfulnessBaseUrl\">,\n): LocalModelEndpoint | null {\n const baseUrl = config.extractionFaithfulnessBaseUrl.trim();\n const model = config.extractionFaithfulnessModel.trim();\n if (!baseUrl || !model) return null;\n return { baseUrl, model };\n}\n\n/**\n * Resolve the correction-intent local endpoint from config (issue #1581/#1585).\n *\n * Same contract as the gate resolver. Consumption by the model-backed\n * detector is the consuming child's job — the rule-based\n * `detectPassiveCorrections` remains the default path; this pointer lets a\n * future model-backed detector route to a fine-tuned local classifier when an\n * operator configures one.\n */\nexport function resolveCorrectionIntentEndpoint(\n config: Pick<PluginConfig, \"correctionIntentModel\" | \"correctionIntentBaseUrl\">,\n): LocalModelEndpoint | null {\n const baseUrl = config.correctionIntentBaseUrl.trim();\n const model = config.correctionIntentModel.trim();\n if (!baseUrl || !model) return null;\n return { baseUrl, model };\n}\n\ntype FetchLike = typeof fetch;\n\n/**\n * Make an openai-compatible chat-completions call to a local endpoint.\n *\n * POSTs to `${baseUrl}/chat/completions` with `{ model, messages, ... }` and\n * returns the first choice's content. Any failure (non-2xx, network error,\n * malformed body, timeout) returns `null` so callers fall back gracefully.\n *\n * The response is narrowed with runtime guards — never an unchecked cast — so\n * a surprising server response fails closed (`null`) rather than reading a\n * fabricated field.\n */\nexport async function callOpenAiCompatibleChat(\n endpoint: LocalModelEndpoint,\n messages: EndpointChatMessage[],\n options: EndpointChatOptions,\n fetchImpl: FetchLike = fetch,\n): Promise<EndpointChatResult | null> {\n const url = joinBaseUrl(endpoint.baseUrl, \"/chat/completions\");\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), options.timeoutMs);\n try {\n const body: Record<string, unknown> = {\n model: endpoint.model,\n messages,\n temperature: options.temperature ?? 0.1,\n };\n if (typeof options.maxTokens === \"number\") {\n body.max_tokens = options.maxTokens;\n }\n if (options.responseFormatJson) {\n body.response_format = { type: \"json_object\" };\n }\n let response: Response;\n try {\n response = await fetchImpl(url, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n } catch {\n // Network error or abort — fail closed, let the caller fall back.\n return null;\n }\n if (!response.ok) return null;\n const parsed: unknown = await response.json().catch(() => null);\n const content = extractFirstChoiceContent(parsed);\n if (content === null) return null;\n return { content, modelUsed: extractModel(parsed) ?? endpoint.model };\n } finally {\n clearTimeout(timer);\n }\n}\n\n/** Join a base URL and a path, tolerating a trailing slash on the base. */\nfunction joinBaseUrl(base: string, path: string): string {\n return base.endsWith(\"/\") ? `${base.slice(0, -1)}${path}` : `${base}${path}`;\n}\n\n/**\n * Narrow the openai-compatible response and pull the first choice's content.\n *\n * `in` / `typeof` guards only — no `as` cast (project rule). Returns `null`\n * for any shape that isn't `{ choices: [{ message: { content: string } }, …] }`.\n */\nfunction extractFirstChoiceContent(data: unknown): string | null {\n if (!data || typeof data !== \"object\") return null;\n // After `in`, TS narrows the property to `unknown` — read it directly, no cast.\n if (!(\"choices\" in data) || !Array.isArray(data.choices)) return null;\n const choices: unknown[] = data.choices;\n for (const choice of choices) {\n if (!choice || typeof choice !== \"object\") continue;\n if (!(\"message\" in choice)) continue;\n const message = choice.message;\n if (!message || typeof message !== \"object\") continue;\n if (!(\"content\" in message)) continue;\n const content = message.content;\n if (typeof content === \"string\" && content.length > 0) return content;\n }\n return null;\n}\n\n/** Narrow the `model` field from the response (best-effort, may be absent). */\nfunction extractModel(data: unknown): string | null {\n if (!data || typeof data !== \"object\" || !(\"model\" in data)) return null;\n const model = data.model;\n return typeof model === \"string\" && model.length > 0 ? model : null;\n}\n"],"mappings":";AAwEO,SAAS,gCACd,QAC2B;AAC3B,QAAM,UAAU,OAAO,8BAA8B,KAAK;AAC1D,QAAM,QAAQ,OAAO,4BAA4B,KAAK;AACtD,MAAI,CAAC,WAAW,CAAC,MAAO,QAAO;AAC/B,SAAO,EAAE,SAAS,MAAM;AAC1B;AAWO,SAAS,gCACd,QAC2B;AAC3B,QAAM,UAAU,OAAO,wBAAwB,KAAK;AACpD,QAAM,QAAQ,OAAO,sBAAsB,KAAK;AAChD,MAAI,CAAC,WAAW,CAAC,MAAO,QAAO;AAC/B,SAAO,EAAE,SAAS,MAAM;AAC1B;AAeA,eAAsB,yBACpB,UACA,UACA,SACA,YAAuB,OACa;AACpC,QAAM,MAAM,YAAY,SAAS,SAAS,mBAAmB;AAC7D,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,QAAQ,WAAW,MAAM,WAAW,MAAM,GAAG,QAAQ,SAAS;AACpE,MAAI;AACF,UAAM,OAAgC;AAAA,MACpC,OAAO,SAAS;AAAA,MAChB;AAAA,MACA,aAAa,QAAQ,eAAe;AAAA,IACtC;AACA,QAAI,OAAO,QAAQ,cAAc,UAAU;AACzC,WAAK,aAAa,QAAQ;AAAA,IAC5B;AACA,QAAI,QAAQ,oBAAoB;AAC9B,WAAK,kBAAkB,EAAE,MAAM,cAAc;AAAA,IAC/C;AACA,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,UAAU,KAAK;AAAA,QAC9B,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU,IAAI;AAAA,QACzB,QAAQ,WAAW;AAAA,MACrB,CAAC;AAAA,IACH,QAAQ;AAEN,aAAO;AAAA,IACT;AACA,QAAI,CAAC,SAAS,GAAI,QAAO;AACzB,UAAM,SAAkB,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,IAAI;AAC9D,UAAM,UAAU,0BAA0B,MAAM;AAChD,QAAI,YAAY,KAAM,QAAO;AAC7B,WAAO,EAAE,SAAS,WAAW,aAAa,MAAM,KAAK,SAAS,MAAM;AAAA,EACtE,UAAE;AACA,iBAAa,KAAK;AAAA,EACpB;AACF;AAGA,SAAS,YAAY,MAAc,MAAsB;AACvD,SAAO,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;AAC5E;AAQA,SAAS,0BAA0B,MAA8B;AAC/D,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAE9C,MAAI,EAAE,aAAa,SAAS,CAAC,MAAM,QAAQ,KAAK,OAAO,EAAG,QAAO;AACjE,QAAM,UAAqB,KAAK;AAChC,aAAW,UAAU,SAAS;AAC5B,QAAI,CAAC,UAAU,OAAO,WAAW,SAAU;AAC3C,QAAI,EAAE,aAAa,QAAS;AAC5B,UAAM,UAAU,OAAO;AACvB,QAAI,CAAC,WAAW,OAAO,YAAY,SAAU;AAC7C,QAAI,EAAE,aAAa,SAAU;AAC7B,UAAM,UAAU,QAAQ;AACxB,QAAI,OAAO,YAAY,YAAY,QAAQ,SAAS,EAAG,QAAO;AAAA,EAChE;AACA,SAAO;AACT;AAGA,SAAS,aAAa,MAA8B;AAClD,MAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,EAAE,WAAW,MAAO,QAAO;AACpE,QAAM,QAAQ,KAAK;AACnB,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AACjE;","names":[]}