@remnic/core 9.65.7 → 9.66.0

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 (713) hide show
  1. package/dist/access-admin-ops-surface.d.ts +15 -14
  2. package/dist/access-admin-ops-surface.js +65 -62
  3. package/dist/access-authorization-probe.d.ts +15 -14
  4. package/dist/access-authorization-probe.js +66 -63
  5. package/dist/access-boundary.d.ts +15 -14
  6. package/dist/access-boundary.js +65 -62
  7. package/dist/access-citation-namespace.js +3 -3
  8. package/dist/access-cli.js +182 -174
  9. package/dist/access-cli.js.map +1 -1
  10. package/dist/access-coding-context-resolution.d.ts +2 -2
  11. package/dist/access-coding-context-resolution.js +2 -2
  12. package/dist/access-extraction-force-flush.d.ts +15 -14
  13. package/dist/access-extraction-force-flush.js +65 -62
  14. package/dist/access-health-types.d.ts +2 -2
  15. package/dist/access-http-lcm-compaction.d.ts +15 -14
  16. package/dist/access-http-lifecycle-flush.d.ts +15 -14
  17. package/dist/access-http-offline-stream.d.ts +15 -14
  18. package/dist/access-http-query.d.ts +3 -3
  19. package/dist/access-http-query.js +67 -64
  20. package/dist/access-http.d.ts +16 -15
  21. package/dist/access-http.js +87 -84
  22. package/dist/access-identity-continuity-surface.d.ts +13 -12
  23. package/dist/access-identity-continuity-surface.js +65 -62
  24. package/dist/access-lcm-surface.d.ts +15 -14
  25. package/dist/access-lcm-surface.js +65 -62
  26. package/dist/access-mcp-output-schemas.js +1 -1
  27. package/dist/access-mcp.d.ts +15 -14
  28. package/dist/access-mcp.js +77 -74
  29. package/dist/access-memory-search-fanout.d.ts +3 -3
  30. package/dist/{access-namespace-preflight-8VYKmRX0.d.ts → access-namespace-preflight-CLWUoMyW.d.ts} +1 -1
  31. package/dist/access-namespace-preflight.d.ts +4 -4
  32. package/dist/access-namespace-preflight.js +65 -62
  33. package/dist/access-observe-write-surface.d.ts +15 -14
  34. package/dist/access-observe-write-surface.js +65 -62
  35. package/dist/access-offline-manifest.d.ts +13 -12
  36. package/dist/access-offline-manifest.js +16 -16
  37. package/dist/access-operations-batch.js +69 -66
  38. package/dist/access-operations.d.ts +16 -15
  39. package/dist/access-operations.js +74 -71
  40. package/dist/access-recall-concurrency.d.ts +15 -14
  41. package/dist/access-recall-concurrency.js +65 -62
  42. package/dist/access-recall-response.d.ts +15 -14
  43. package/dist/access-recall-response.js +65 -62
  44. package/dist/access-recall-surface.d.ts +15 -14
  45. package/dist/access-recall-surface.js +65 -62
  46. package/dist/access-schema.js +7 -7
  47. package/dist/{access-service-Crk__Git.d.ts → access-service-CEUE1Isj.d.ts} +14 -14
  48. package/dist/access-service-helpers.d.ts +15 -14
  49. package/dist/access-service.d.ts +15 -14
  50. package/dist/access-service.js +65 -62
  51. package/dist/access-surface-catalog.d.ts +15 -14
  52. package/dist/access-surface-catalog.js +69 -64
  53. package/dist/access-surface-catalog.js.map +1 -1
  54. package/dist/access-wearables-meetings-surface.d.ts +6 -4
  55. package/dist/action-confidence.d.ts +2 -2
  56. package/dist/active-context-config.d.ts +27 -0
  57. package/dist/active-context-config.js +14 -0
  58. package/dist/active-context-transform.d.ts +267 -0
  59. package/dist/active-context-transform.js +31 -0
  60. package/dist/active-memory-bridge.d.ts +2 -2
  61. package/dist/active-memory-bridge.js +2 -2
  62. package/dist/active-recall.d.ts +2 -2
  63. package/dist/active-recall.js +17 -16
  64. package/dist/active-recall.js.map +1 -1
  65. package/dist/adapters/index.js +7 -7
  66. package/dist/adapters/registry.js +3 -3
  67. package/dist/ambient-provenance.d.ts +2 -2
  68. package/dist/artifact-search.d.ts +2 -2
  69. package/dist/{auto-sync-XVMLL2RH.js → auto-sync-Q6Q2FVSC.js} +10 -10
  70. package/dist/behavior-learner.d.ts +2 -2
  71. package/dist/behavior-signals.d.ts +2 -2
  72. package/dist/bootstrap.d.ts +13 -12
  73. package/dist/briefing-window.d.ts +5 -3
  74. package/dist/briefing.d.ts +5 -3
  75. package/dist/briefing.js +33 -33
  76. package/dist/buffer-surprise-report.d.ts +2 -2
  77. package/dist/buffer-turn-helpers.d.ts +2 -2
  78. package/dist/buffer.d.ts +5 -3
  79. package/dist/buffer.js +24 -8
  80. package/dist/bulk-import/index.d.ts +4 -4
  81. package/dist/calibration.d.ts +2 -2
  82. package/dist/calibration.js +1 -1
  83. package/dist/capabilities.d.ts +2 -2
  84. package/dist/{capsule-merge-SGIVB3WA.js → capsule-merge-SEHERWWP.js} +4 -4
  85. package/dist/{catalog-DybwVNW3.d.ts → catalog-D1HgugTA.d.ts} +1 -1
  86. package/dist/causal-behavior.d.ts +4 -4
  87. package/dist/causal-consolidation.d.ts +2 -2
  88. package/dist/causal-consolidation.js +34 -34
  89. package/dist/causal-trajectory-graph.d.ts +2 -2
  90. package/dist/{chunk-CFGU52XJ.js → chunk-23CVL7HS.js} +2 -2
  91. package/dist/{chunk-PO7NXBG2.js → chunk-2GF27PGH.js} +5 -5
  92. package/dist/{chunk-6CPUQ5D6.js → chunk-2LBAFHOQ.js} +15 -15
  93. package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
  94. package/dist/{chunk-IP4ZNT4U.js → chunk-33MFRY25.js} +2 -2
  95. package/dist/{chunk-VFYRYFLL.js → chunk-3TSU662L.js} +3 -3
  96. package/dist/chunk-43HUVDTD.js +114 -0
  97. package/dist/chunk-43HUVDTD.js.map +1 -0
  98. package/dist/{chunk-VXVZ2GM3.js → chunk-4FHRZD5T.js} +2 -2
  99. package/dist/{chunk-FP7YTTVO.js → chunk-4OFKZAJG.js} +2 -1
  100. package/dist/chunk-4OFKZAJG.js.map +1 -0
  101. package/dist/{chunk-5VPQSRQO.js → chunk-4STAANV7.js} +3 -3
  102. package/dist/{chunk-46WM6JX2.js → chunk-4ZWCQJNM.js} +5 -5
  103. package/dist/{chunk-LLQCM2U2.js → chunk-56IV4J5W.js} +617 -167
  104. package/dist/chunk-56IV4J5W.js.map +1 -0
  105. package/dist/{chunk-52II7PB6.js → chunk-645WOU5I.js} +4 -4
  106. package/dist/{chunk-YKWFK7XA.js → chunk-6CEGSTBD.js} +7 -7
  107. package/dist/{chunk-I7EX6KSH.js → chunk-6QDXA26G.js} +264 -210
  108. package/dist/chunk-6QDXA26G.js.map +1 -0
  109. package/dist/{chunk-GEPACVWN.js → chunk-6RUHELWR.js} +3 -3
  110. package/dist/{chunk-ZAOHJDKH.js → chunk-72OIT7KS.js} +4 -4
  111. package/dist/{chunk-KQAFEZQX.js → chunk-7LCGFUMB.js} +4 -4
  112. package/dist/{chunk-7TCGNUVP.js → chunk-7UTDHQZ5.js} +3 -3
  113. package/dist/{chunk-5HK3CJAR.js → chunk-7XOG75AU.js} +3 -3
  114. package/dist/{chunk-7BDZTALN.js → chunk-AJTG3CP7.js} +12 -2
  115. package/dist/chunk-AJTG3CP7.js.map +1 -0
  116. package/dist/{chunk-2LWQSV6A.js → chunk-AL3UYZ5N.js} +3 -2
  117. package/dist/chunk-AL3UYZ5N.js.map +1 -0
  118. package/dist/chunk-B32WYRXX.js +77 -0
  119. package/dist/chunk-B32WYRXX.js.map +1 -0
  120. package/dist/{chunk-C24UZSFW.js → chunk-CEH2AFXG.js} +6 -6
  121. package/dist/{chunk-YOXVZJFM.js → chunk-CFVTRUR3.js} +2 -2
  122. package/dist/{chunk-ACOC27BB.js → chunk-CN4VKV3S.js} +2 -2
  123. package/dist/{chunk-PMVPCZJZ.js → chunk-CTCGHNWN.js} +6 -6
  124. package/dist/{chunk-EGBDFJ36.js → chunk-DD5JFCWM.js} +2 -2
  125. package/dist/{chunk-T42L3S6A.js → chunk-DDX6KIXF.js} +2 -2
  126. package/dist/{chunk-JIYDRBVZ.js → chunk-DJORULH3.js} +2 -2
  127. package/dist/{chunk-WTOZBZNN.js → chunk-DMEHOEC7.js} +6 -6
  128. package/dist/{chunk-OPPBTPUU.js → chunk-DUAJKRR2.js} +4 -4
  129. package/dist/{chunk-XDL5CYZN.js → chunk-EEOUMG3J.js} +2 -1
  130. package/dist/{chunk-XDL5CYZN.js.map → chunk-EEOUMG3J.js.map} +1 -1
  131. package/dist/{chunk-SVVIASVX.js → chunk-EFQCDJZ2.js} +7 -7
  132. package/dist/{chunk-Q57GOHLF.js → chunk-EGALNSZ4.js} +3 -3
  133. package/dist/{chunk-KCT36JAW.js → chunk-ESNFSSO4.js} +2 -2
  134. package/dist/{chunk-XQ3HXAQH.js → chunk-ET2CNMLD.js} +4 -4
  135. package/dist/{chunk-Z4U3UN56.js → chunk-EZSCW4EM.js} +6 -6
  136. package/dist/{chunk-F6QHHRWP.js → chunk-FESUGFIL.js} +3 -3
  137. package/dist/{chunk-S3K2CIK5.js → chunk-FKKGCGYL.js} +3 -3
  138. package/dist/{chunk-BWGCOLEL.js → chunk-FTTJRVB7.js} +2 -2
  139. package/dist/{chunk-JAQXUGLN.js → chunk-FYWLSFFS.js} +2 -2
  140. package/dist/{chunk-BJTHRFFC.js → chunk-GEJKYA7D.js} +77 -36
  141. package/dist/chunk-GEJKYA7D.js.map +1 -0
  142. package/dist/chunk-GSKINLAK.js +267 -0
  143. package/dist/chunk-GSKINLAK.js.map +1 -0
  144. package/dist/{chunk-OPGL46PX.js → chunk-GX6FTSYH.js} +2 -2
  145. package/dist/{chunk-A32YEQAM.js → chunk-H7VDIF2V.js} +2 -2
  146. package/dist/{chunk-PDDSFELN.js → chunk-HJXA6ZM7.js} +2 -2
  147. package/dist/{chunk-RGCF4XNH.js → chunk-HNPE66LB.js} +8 -8
  148. package/dist/{chunk-SEA6M7SS.js → chunk-I5VB44ZK.js} +2 -2
  149. package/dist/{chunk-SDEPLF7V.js → chunk-IBJ6U753.js} +2 -2
  150. package/dist/{chunk-EUYWQ7TS.js → chunk-IEZ6CGTW.js} +2 -2
  151. package/dist/{chunk-RQE4TITU.js → chunk-IHGMRDEE.js} +431 -1834
  152. package/dist/chunk-IHGMRDEE.js.map +1 -0
  153. package/dist/{chunk-3RI5Y7KU.js → chunk-IVIAHQBR.js} +2 -2
  154. package/dist/{chunk-7WR462EM.js → chunk-J3OND5QT.js} +4 -4
  155. package/dist/{chunk-UW5NPZJ2.js → chunk-JALOAKSZ.js} +59 -7
  156. package/dist/chunk-JALOAKSZ.js.map +1 -0
  157. package/dist/{chunk-T3JQTCCO.js → chunk-JI7U6AS3.js} +4 -4
  158. package/dist/{chunk-DVYRD4HY.js → chunk-JRRQ747T.js} +36 -7
  159. package/dist/chunk-JRRQ747T.js.map +1 -0
  160. package/dist/{chunk-I32NKXE2.js → chunk-JTWZKNUH.js} +5 -5
  161. package/dist/chunk-K66OY4EI.js +202 -0
  162. package/dist/chunk-K66OY4EI.js.map +1 -0
  163. package/dist/{chunk-XAB6STPO.js → chunk-KODXCHXJ.js} +17 -3
  164. package/dist/chunk-KODXCHXJ.js.map +1 -0
  165. package/dist/{chunk-ZPUIRTIZ.js → chunk-KOLJJN5G.js} +12 -75
  166. package/dist/chunk-KOLJJN5G.js.map +1 -0
  167. package/dist/{chunk-FMQ4MOQO.js → chunk-KXIXO76C.js} +32 -19
  168. package/dist/chunk-KXIXO76C.js.map +1 -0
  169. package/dist/{chunk-VKCAHCBI.js → chunk-L4X4PJYK.js} +2 -2
  170. package/dist/chunk-LB7WCZHY.js +553 -0
  171. package/dist/chunk-LB7WCZHY.js.map +1 -0
  172. package/dist/{chunk-W4BMEGQA.js → chunk-LUDBXTBJ.js} +8 -8
  173. package/dist/{chunk-I4343FIA.js → chunk-MAH64N55.js} +28 -10
  174. package/dist/chunk-MAH64N55.js.map +1 -0
  175. package/dist/{chunk-RIAM7DND.js → chunk-ME35HVDJ.js} +2 -2
  176. package/dist/{chunk-H63EDPFJ.js → chunk-MI2OTWV5.js} +15 -2
  177. package/dist/{chunk-H63EDPFJ.js.map → chunk-MI2OTWV5.js.map} +1 -1
  178. package/dist/{chunk-LBFFNDFM.js → chunk-MINHJ55X.js} +1 -1
  179. package/dist/chunk-MINHJ55X.js.map +1 -0
  180. package/dist/{chunk-NG3MBQV4.js → chunk-MJRGVXPQ.js} +2 -2
  181. package/dist/{chunk-773TRRGT.js → chunk-MJUCDM3C.js} +2 -2
  182. package/dist/{chunk-7F27PCSN.js → chunk-MN5NOOI7.js} +2 -2
  183. package/dist/{chunk-JCWY73FK.js → chunk-N4F7ZSSG.js} +2 -2
  184. package/dist/{chunk-TR7DGXGI.js → chunk-NACLNNFQ.js} +5 -5
  185. package/dist/{chunk-LC2BDILZ.js → chunk-NBP4EX5N.js} +2 -2
  186. package/dist/{chunk-ZVPVTPGI.js → chunk-NNZFPYYX.js} +4 -4
  187. package/dist/{chunk-MFOSZUIT.js → chunk-NPIBN2VL.js} +2 -2
  188. package/dist/{chunk-IY7UXD3J.js → chunk-O57GM3FR.js} +2 -2
  189. package/dist/{chunk-I2HTKOOP.js → chunk-O7ERGZDA.js} +5 -5
  190. package/dist/{chunk-GTSVEEP3.js → chunk-OAJMQKQR.js} +3 -3
  191. package/dist/{chunk-HSZMX3ZJ.js → chunk-ODW5GDFE.js} +2 -2
  192. package/dist/{chunk-D4QVPP3G.js → chunk-PEBH5DCK.js} +18 -11
  193. package/dist/chunk-PEBH5DCK.js.map +1 -0
  194. package/dist/{chunk-J2WC5LF4.js → chunk-QBC33MPY.js} +2 -1
  195. package/dist/{chunk-EOHKUWXW.js → chunk-QCRJMU5V.js} +2 -2
  196. package/dist/chunk-QJCWK2A7.js +1466 -0
  197. package/dist/chunk-QJCWK2A7.js.map +1 -0
  198. package/dist/{chunk-THG4GYIE.js → chunk-RDGKVH6T.js} +11 -7
  199. package/dist/{chunk-THG4GYIE.js.map → chunk-RDGKVH6T.js.map} +1 -1
  200. package/dist/{chunk-5DH6PG4B.js → chunk-RZ3IZIJG.js} +3 -3
  201. package/dist/{chunk-AAXJNINV.js → chunk-SN4JXNLL.js} +2 -2
  202. package/dist/chunk-TB2MJRI6.js +866 -0
  203. package/dist/chunk-TB2MJRI6.js.map +1 -0
  204. package/dist/{chunk-7PHI6GUI.js → chunk-TEZ2HTC7.js} +42 -2
  205. package/dist/chunk-TEZ2HTC7.js.map +1 -0
  206. package/dist/{chunk-SVSRPG6M.js → chunk-TNGH4ZYI.js} +2 -2
  207. package/dist/{chunk-HZNYJN77.js → chunk-TNXNECAN.js} +6 -6
  208. package/dist/{chunk-JOEJG4SD.js → chunk-TVW4C7PV.js} +5 -5
  209. package/dist/{chunk-UFKPQBXH.js → chunk-U62OK7BB.js} +2 -2
  210. package/dist/{chunk-R2MZCYA6.js → chunk-UNUMFURP.js} +3 -3
  211. package/dist/{chunk-AX7UXCHJ.js → chunk-UYA36DQ7.js} +2 -1
  212. package/dist/chunk-UYA36DQ7.js.map +1 -0
  213. package/dist/{chunk-AFR6AIM4.js → chunk-VCKWULAK.js} +112 -87
  214. package/dist/chunk-VCKWULAK.js.map +1 -0
  215. package/dist/chunk-VOSWUO3K.js +100 -0
  216. package/dist/chunk-VOSWUO3K.js.map +1 -0
  217. package/dist/{chunk-YRVAKONL.js → chunk-VQ4AMTGZ.js} +1 -1
  218. package/dist/{chunk-3BCULS4U.js → chunk-VQNRICAQ.js} +145 -507
  219. package/dist/chunk-VQNRICAQ.js.map +1 -0
  220. package/dist/{chunk-RAIUTAZZ.js → chunk-WKAXBXVA.js} +2 -2
  221. package/dist/{chunk-ZIJDI4CP.js → chunk-WKJFIMVN.js} +2 -2
  222. package/dist/{chunk-SXIMQLGV.js → chunk-WVGXCBOC.js} +2 -2
  223. package/dist/{chunk-7BEPVIH3.js → chunk-X5YYSAZX.js} +4 -4
  224. package/dist/{chunk-FZEEWOI2.js → chunk-XJJYSX6F.js} +2 -2
  225. package/dist/{chunk-F635GAL7.js → chunk-XKNHFDTT.js} +33 -13
  226. package/dist/chunk-XKNHFDTT.js.map +1 -0
  227. package/dist/{chunk-UG6VXIOK.js → chunk-XSTNGNJP.js} +2 -2
  228. package/dist/{chunk-YDPAE2RD.js → chunk-YFLLGRXO.js} +2 -2
  229. package/dist/{chunk-EZ25VE3G.js → chunk-YNDLCWXS.js} +4 -4
  230. package/dist/{chunk-ANJXPFRS.js → chunk-YXFCALVT.js} +14 -14
  231. package/dist/{chunk-Q4WONDMJ.js → chunk-YYGZJPOK.js} +2 -2
  232. package/dist/{chunk-5HERQ5FX.js → chunk-Z3YEGSR4.js} +10 -10
  233. package/dist/{chunk-YWSQD2IB.js → chunk-ZJPM7GZ3.js} +2 -2
  234. package/dist/{chunk-5S4LQOPE.js → chunk-ZW4VXELZ.js} +2 -2
  235. package/dist/{cli-B322UMvB.d.ts → cli-BEkm2MEf.d.ts} +5 -5
  236. package/dist/cli.d.ts +17 -16
  237. package/dist/cli.js +126 -120
  238. package/dist/coding/export-okf-codegraph.d.ts +56 -0
  239. package/dist/coding/export-okf-codegraph.js +526 -0
  240. package/dist/coding/export-okf-codegraph.js.map +1 -0
  241. package/dist/coding/pre-action-gate.d.ts +2 -2
  242. package/dist/compounding/engine.d.ts +5 -3
  243. package/dist/compounding/engine.js +34 -34
  244. package/dist/compounding/preference-consolidator.d.ts +4 -4
  245. package/dist/compression-optimizer.d.ts +2 -2
  246. package/dist/config-security.js +2 -2
  247. package/dist/config.d.ts +2 -2
  248. package/dist/config.js +17 -16
  249. package/dist/connectors/codex-materialize-runner.d.ts +2 -2
  250. package/dist/connectors/codex-materialize-runner.js +33 -33
  251. package/dist/connectors/codex-materialize.d.ts +2 -2
  252. package/dist/connectors/index.d.ts +2 -2
  253. package/dist/connectors/index.js +33 -33
  254. package/dist/consolidation-provenance-check.d.ts +5 -3
  255. package/dist/consolidation-provenance-check.js +5 -5
  256. package/dist/consolidation-undo.d.ts +5 -3
  257. package/dist/consolidation-undo.js +3 -3
  258. package/dist/context-summary.d.ts +43 -0
  259. package/dist/context-summary.js +14 -0
  260. package/dist/context-summary.js.map +1 -0
  261. package/dist/contradiction/index.d.ts +6 -4
  262. package/dist/contradiction/index.js +10 -10
  263. package/dist/{contradiction-scan-AKUWPX5N.js → contradiction-scan-NOYMFG66.js} +3 -3
  264. package/dist/contradiction-scan-NOYMFG66.js.map +1 -0
  265. package/dist/converge-config.d.ts +2 -2
  266. package/dist/convergence-refresh.d.ts +5 -3
  267. package/dist/convergence-refresh.js +36 -36
  268. package/dist/conversation-index/backend.d.ts +2 -2
  269. package/dist/conversation-index/chunker.d.ts +2 -2
  270. package/dist/conversation-index/faiss-adapter.d.ts +2 -2
  271. package/dist/conversation-index/indexer.d.ts +2 -2
  272. package/dist/conversation-index/search.d.ts +2 -2
  273. package/dist/corpus-watermark.d.ts +2 -2
  274. package/dist/corpus-watermark.js +35 -35
  275. package/dist/cross-lingual-recall.d.ts +2 -2
  276. package/dist/dashboard-runtime.js +2 -2
  277. package/dist/day-summary.d.ts +2 -2
  278. package/dist/delinearize.d.ts +2 -2
  279. package/dist/dependency-propagation-config.d.ts +2 -2
  280. package/dist/{dependency-propagation-delivery-BGcNairQ.d.ts → dependency-propagation-delivery-BCpeo14F.d.ts} +1 -1
  281. package/dist/direct-answer-wiring.d.ts +2 -2
  282. package/dist/direct-answer.d.ts +2 -2
  283. package/dist/embedding-fallback.d.ts +2 -2
  284. package/dist/enrichment/index.d.ts +2 -2
  285. package/dist/entity-origin-fields.d.ts +2 -2
  286. package/dist/entity-retrieval.d.ts +5 -3
  287. package/dist/entity-retrieval.js +34 -34
  288. package/dist/entity-schema.d.ts +2 -2
  289. package/dist/episodic-context.d.ts +2 -2
  290. package/dist/eval-trajectory-contracts.d.ts +2 -2
  291. package/dist/eval-trajectory-store.d.ts +2 -2
  292. package/dist/eval-trajectory.d.ts +2 -2
  293. package/dist/event-order-recall.js +3 -3
  294. package/dist/explicit-capture.d.ts +13 -12
  295. package/dist/explicit-capture.js +12 -12
  296. package/dist/external-wiki-access.d.ts +15 -14
  297. package/dist/external-wiki-access.js +66 -63
  298. package/dist/external-wiki-collection-registration.d.ts +2 -2
  299. package/dist/external-wiki-collection.d.ts +2 -2
  300. package/dist/external-wiki-mcp-tools.d.ts +15 -14
  301. package/dist/extraction-error-classification.d.ts +2 -2
  302. package/dist/extraction-faithfulness.d.ts +2 -2
  303. package/dist/extraction-faithfulness.js +2 -2
  304. package/dist/extraction-judge-telemetry.d.ts +2 -2
  305. package/dist/extraction-judge-training.d.ts +2 -2
  306. package/dist/extraction-judge.d.ts +2 -2
  307. package/dist/extraction-judge.js +2 -2
  308. package/dist/extraction-liveness.d.ts +2 -2
  309. package/dist/extraction-normalization.d.ts +2 -2
  310. package/dist/extraction-prompt.d.ts +2 -2
  311. package/dist/extraction-source-grounding-rules.d.ts +2 -2
  312. package/dist/extraction-source-grounding.d.ts +2 -2
  313. package/dist/extraction.d.ts +2 -2
  314. package/dist/extraction.js +47 -44
  315. package/dist/fallback-llm.d.ts +8 -2
  316. package/dist/fallback-llm.js +1 -1
  317. package/dist/{first-start-migration-4NETATFF.js → first-start-migration-KHIMCBIC.js} +3 -3
  318. package/dist/{forget-SZ2BXDGF.js → forget-2AE4MDK3.js} +3 -3
  319. package/dist/graph-dashboard-diff.d.ts +2 -2
  320. package/dist/graph-dashboard-key.d.ts +2 -2
  321. package/dist/graph-dashboard-parser.d.ts +2 -2
  322. package/dist/graph-edge-reinforcement.d.ts +2 -2
  323. package/dist/graph-path-reconstruction.d.ts +2 -2
  324. package/dist/graph-path-scoring.d.ts +2 -2
  325. package/dist/graph-snapshot.d.ts +2 -2
  326. package/dist/graph.d.ts +2 -2
  327. package/dist/harmonic-retrieval.js +1 -1
  328. package/dist/importance.d.ts +2 -2
  329. package/dist/importers/index.d.ts +2 -2
  330. package/dist/in-flight-reads.d.ts +2 -2
  331. package/dist/{index-By2QUAMh.d.ts → index-D_pyMUaP.d.ts} +2 -2
  332. package/dist/index.d.ts +261 -30
  333. package/dist/index.js +321 -257
  334. package/dist/intent.d.ts +2 -2
  335. package/dist/lcm/engine.d.ts +3 -3
  336. package/dist/lcm/engine.js +5 -4
  337. package/dist/lcm/index.d.ts +4 -3
  338. package/dist/lcm/index.js +12 -11
  339. package/dist/lcm/summarizer.d.ts +4 -6
  340. package/dist/lcm/summarizer.js +2 -1
  341. package/dist/lcm/tools.d.ts +4 -4
  342. package/dist/lifecycle.d.ts +2 -2
  343. package/dist/live-connectors-runner.d.ts +2 -2
  344. package/dist/local-llm.d.ts +2 -2
  345. package/dist/local-model-endpoint.d.ts +2 -2
  346. package/dist/location/index.d.ts +315 -6
  347. package/dist/location/index.js +151 -19
  348. package/dist/maintenance/memory-governance.d.ts +2 -2
  349. package/dist/maintenance/memory-governance.js +34 -34
  350. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +5 -3
  351. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +33 -33
  352. package/dist/maintenance/rebuild-memory-projection.d.ts +5 -3
  353. package/dist/maintenance/rebuild-memory-projection.js +35 -35
  354. package/dist/{maintenance-Dm2McrIx.d.ts → maintenance-DDUX9d6D.d.ts} +3 -3
  355. package/dist/mcp-memory-inspector-app.d.ts +15 -14
  356. package/dist/mcp-read-only-tools.js +1 -1
  357. package/dist/memory-action-policy.d.ts +18 -3
  358. package/dist/memory-action-policy.js +3 -1
  359. package/dist/memory-cache.d.ts +2 -2
  360. package/dist/memory-controller.d.ts +2 -2
  361. package/dist/memory-controller.js +2 -2
  362. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -2
  363. package/dist/memory-projection-mutations.js +3 -3
  364. package/dist/memory-projection-store.d.ts +2 -2
  365. package/dist/memory-projection-store.js +1 -1
  366. package/dist/memory-provenance.d.ts +2 -2
  367. package/dist/memory-snapshot.d.ts +2 -2
  368. package/dist/memory-subject-cli.d.ts +15 -14
  369. package/dist/memory-subject.d.ts +15 -14
  370. package/dist/memory-subject.js +5 -5
  371. package/dist/memory-worth-outcomes.d.ts +5 -3
  372. package/dist/models-json.d.ts +2 -2
  373. package/dist/namespaces/migrate.d.ts +6 -4
  374. package/dist/namespaces/migrate.js +34 -34
  375. package/dist/namespaces/principal.d.ts +2 -2
  376. package/dist/namespaces/search.d.ts +2 -2
  377. package/dist/namespaces/search.js +8 -8
  378. package/dist/namespaces/storage.d.ts +6 -4
  379. package/dist/namespaces/storage.js +33 -33
  380. package/dist/native-knowledge.d.ts +2 -2
  381. package/dist/offline-sync-file-io.js +3 -3
  382. package/dist/offline-sync-impression-drain.d.ts +2 -2
  383. package/dist/offline-sync-impression-drain.js +9 -9
  384. package/dist/offline-sync.js +4 -4
  385. package/dist/operator-doctor-corpus.d.ts +2 -2
  386. package/dist/operator-doctor-corpus.js +36 -36
  387. package/dist/operator-doctor-replica.d.ts +2 -2
  388. package/dist/operator-toolkit.d.ts +6 -4
  389. package/dist/operator-toolkit.js +56 -55
  390. package/dist/orchestration/compression-guideline-coordinator.d.ts +5 -3
  391. package/dist/orchestration/maintenance.d.ts +7 -5
  392. package/dist/orchestration/maintenance.js +48 -47
  393. package/dist/{orchestrator-Co1DyfuP.d.ts → orchestrator-3F4jihCo.d.ts} +8 -8
  394. package/dist/orchestrator.d.ts +13 -12
  395. package/dist/orchestrator.js +182 -174
  396. package/dist/page-versioning.js +3 -3
  397. package/dist/patterns-cli.d.ts +2 -2
  398. package/dist/{pipeline-DotMnb6y.d.ts → pipeline-CB1dj6Uh.d.ts} +1 -1
  399. package/dist/policy-runtime.d.ts +2 -2
  400. package/dist/proactive-contention.d.ts +2 -2
  401. package/dist/provenance.d.ts +2 -2
  402. package/dist/{public-http-PJRtnSi-.d.ts → public-http-34-JIAGQ.d.ts} +1 -1
  403. package/dist/{purge-GB7PZHT2.js → purge-OP6BEDFY.js} +2 -2
  404. package/dist/{qmd-BP0n11fR.d.ts → qmd-edLLZXc5.d.ts} +1 -1
  405. package/dist/qmd-preflight.d.ts +3 -3
  406. package/dist/qmd-recall-cache.d.ts +2 -2
  407. package/dist/qmd.d.ts +3 -3
  408. package/dist/qmd.js +4 -4
  409. package/dist/recall-concurrency-config.d.ts +2 -2
  410. package/dist/recall-disclosure-escalation.d.ts +2 -2
  411. package/dist/recall-explain-renderer.d.ts +2 -2
  412. package/dist/recall-explain-renderer.js +3 -3
  413. package/dist/recall-memory-map.d.ts +2 -2
  414. package/dist/recall-planner-llm.d.ts +2 -2
  415. package/dist/recall-planner-llm.js +1 -1
  416. package/dist/recall-state.d.ts +2 -2
  417. package/dist/recall-tag-filter.d.ts +2 -2
  418. package/dist/recall-timings.d.ts +2 -2
  419. package/dist/recall-xray-cli.d.ts +2 -2
  420. package/dist/recall-xray-cli.js +4 -4
  421. package/dist/recall-xray-renderer.d.ts +2 -2
  422. package/dist/recall-xray-renderer.js +3 -3
  423. package/dist/recall-xray.d.ts +2 -2
  424. package/dist/recall-xray.js +2 -2
  425. package/dist/reconcile/cursor.d.ts +2 -2
  426. package/dist/reconcile/manifest.d.ts +2 -2
  427. package/dist/reconcile/manifest.js +5 -5
  428. package/dist/reconcile/plan.d.ts +2 -2
  429. package/dist/replay/normalizers/chatgpt.d.ts +2 -2
  430. package/dist/replay/normalizers/claude.d.ts +2 -2
  431. package/dist/replay/normalizers/openclaw.d.ts +2 -2
  432. package/dist/replay/normalizers/shared.d.ts +2 -2
  433. package/dist/replay/runner.d.ts +2 -2
  434. package/dist/replay/types.d.ts +2 -2
  435. package/dist/replica-divergence.d.ts +2 -2
  436. package/dist/replica-peers-config.d.ts +2 -2
  437. package/dist/{resolution-4552BNRV.js → resolution-4DLI3IOR.js} +11 -11
  438. package/dist/resolution-4DLI3IOR.js.map +1 -0
  439. package/dist/resolve-auth-token.d.ts +2 -2
  440. package/dist/resume-bundles.js +18 -17
  441. package/dist/retrieval-agents.d.ts +3 -3
  442. package/dist/retrieval-tiers.d.ts +2 -2
  443. package/dist/routing/engine.d.ts +2 -2
  444. package/dist/routing/store.d.ts +2 -2
  445. package/dist/salvage-envelope.d.ts +2 -2
  446. package/dist/salvage-envelope.js +7 -7
  447. package/dist/schemas.d.ts +572 -107
  448. package/dist/schemas.js +3 -1
  449. package/dist/{scope-profiles-6ChZKTy-.d.ts → scope-profiles-BF2lu81V.d.ts} +1 -1
  450. package/dist/search/document-scanner.js +1 -1
  451. package/dist/search/embed-helper.d.ts +2 -2
  452. package/dist/search/factory.d.ts +2 -2
  453. package/dist/search/factory.js +7 -7
  454. package/dist/search/index.d.ts +2 -2
  455. package/dist/search/index.js +13 -13
  456. package/dist/search/lancedb-backend.d.ts +2 -2
  457. package/dist/search/lancedb-backend.js +1 -1
  458. package/dist/search/meilisearch-backend.d.ts +2 -2
  459. package/dist/search/meilisearch-backend.js +1 -1
  460. package/dist/search/noop-backend.d.ts +2 -2
  461. package/dist/search/orama-backend.d.ts +2 -2
  462. package/dist/search/orama-backend.js +1 -1
  463. package/dist/search/port.d.ts +2 -2
  464. package/dist/search/remote-backend.d.ts +2 -2
  465. package/dist/secure-store/index.js +3 -3
  466. package/dist/{semantic-consolidation-DziYcW5J.d.ts → semantic-consolidation-5OuWXBRt.d.ts} +1 -1
  467. package/dist/semantic-consolidation.d.ts +3 -3
  468. package/dist/semantic-consolidation.js +37 -37
  469. package/dist/semantic-rule-promotion.js +33 -33
  470. package/dist/semantic-rule-verifier.d.ts +2 -2
  471. package/dist/semantic-rule-verifier.js +33 -33
  472. package/dist/{service-C7rIBuK_.d.ts → service-CrqEhLXD.d.ts} +2 -2
  473. package/dist/session-observer-bands.d.ts +2 -2
  474. package/dist/session-observer-state.d.ts +2 -2
  475. package/dist/shared-context/manager.d.ts +2 -2
  476. package/dist/signal.d.ts +2 -2
  477. package/dist/source-agent-qualifier.d.ts +2 -2
  478. package/dist/source-agent-qualifier.js +42 -39
  479. package/dist/standup/build.d.ts +16 -0
  480. package/dist/standup/build.js +17 -0
  481. package/dist/standup/build.js.map +1 -0
  482. package/dist/{storage-B1hEx8Xg.d.ts → storage-BQn-xnxm.d.ts} +4 -1
  483. package/dist/storage.d.ts +5 -3
  484. package/dist/storage.js +32 -32
  485. package/dist/subject-config.d.ts +2 -2
  486. package/dist/subject-config.js +6 -6
  487. package/dist/summarizer.d.ts +2 -2
  488. package/dist/summarizer.js +2 -2
  489. package/dist/summary-snapshot.d.ts +2 -2
  490. package/dist/support-passport/index.d.ts +20 -19
  491. package/dist/support-passport/index.js +68 -65
  492. package/dist/temporal-supersession.d.ts +3 -3
  493. package/dist/temporal-timeline-recall.d.ts +2 -2
  494. package/dist/temporal-validity.d.ts +2 -2
  495. package/dist/threading.d.ts +2 -2
  496. package/dist/tier-migration.d.ts +5 -3
  497. package/dist/tier-routing.d.ts +2 -2
  498. package/dist/tier-routing.js +2 -2
  499. package/dist/{tier-stats-4B5IJ3NE.js → tier-stats-2TOW3QNL.js} +3 -3
  500. package/dist/topics.d.ts +2 -2
  501. package/dist/transcript.d.ts +2 -2
  502. package/dist/transfer/capsule-export.js +2 -2
  503. package/dist/transfer/capsule-import.js +5 -5
  504. package/dist/transfer/export-okf.d.ts +39 -0
  505. package/dist/transfer/export-okf.js +112 -0
  506. package/dist/transfer/export-okf.js.map +1 -0
  507. package/dist/transfer/types.d.ts +12 -12
  508. package/dist/trust-score-stage.d.ts +2 -2
  509. package/dist/trust-score.d.ts +2 -2
  510. package/dist/{types-BHDNxGTT.d.ts → types-BRpcNjHZ.d.ts} +119 -3
  511. package/dist/types.d.ts +2 -2
  512. package/dist/types.js +1 -1
  513. package/dist/utility-runtime.d.ts +2 -2
  514. package/dist/verified-recall.js +33 -33
  515. package/dist/who-knows-cli.d.ts +15 -14
  516. package/dist/who-knows-cli.js +34 -34
  517. package/dist/who-knows.d.ts +15 -14
  518. package/dist/who-knows.js +33 -33
  519. package/dist/write-envelope.d.ts +2 -2
  520. package/dist/write-envelope.js +6 -6
  521. package/package.json +54 -3
  522. package/src/access-admin-ops-surface.ts +6 -1
  523. package/src/access-boundary.ts +1 -0
  524. package/src/access-http.ts +3 -1
  525. package/src/access-mcp-output-schemas.ts +1 -0
  526. package/src/access-mcp.ts +3 -3
  527. package/src/access-operations.ts +1 -0
  528. package/src/access-service-offline-file-content.test.ts +63 -0
  529. package/src/access-surface-catalog.ts +2 -0
  530. package/src/active-context-config.ts +98 -0
  531. package/src/active-context-transform.test.ts +533 -0
  532. package/src/active-context-transform.ts +981 -0
  533. package/src/activity/config.test.ts +1 -0
  534. package/src/activity/config.ts +21 -1
  535. package/src/activity/index.ts +1 -0
  536. package/src/activity/timeline/build.ts +279 -0
  537. package/src/activity/timeline/categories.ts +111 -0
  538. package/src/activity/timeline/classify.ts +110 -0
  539. package/src/activity/timeline/corrections.ts +145 -0
  540. package/src/activity/timeline/index.ts +6 -0
  541. package/src/activity/timeline/timeline.test.ts +277 -0
  542. package/src/activity/timeline/types.ts +106 -0
  543. package/src/activity/types.ts +6 -0
  544. package/src/cli/okf-commands.ts +45 -0
  545. package/src/cli.ts +2 -2
  546. package/src/coding/export-okf-codegraph.test.ts +381 -0
  547. package/src/coding/export-okf-codegraph.ts +565 -0
  548. package/src/config.test.ts +1 -0
  549. package/src/config.ts +3 -5
  550. package/src/context-summary.ts +182 -0
  551. package/src/extraction-prompt-safety.test.ts +14 -2
  552. package/src/extraction.ts +21 -1
  553. package/src/fallback-llm.test.ts +134 -0
  554. package/src/fallback-llm.ts +77 -5
  555. package/src/index.ts +4 -11
  556. package/src/lcm/summarizer.ts +14 -93
  557. package/src/location/access-operations.ts +17 -8
  558. package/src/location/backfill.ts +137 -0
  559. package/src/location/config.test.ts +3 -0
  560. package/src/location/config.ts +46 -2
  561. package/src/location/http-glue.ts +1 -1
  562. package/src/location/index.ts +3 -0
  563. package/src/location/intervals.ts +1 -0
  564. package/src/location/matching.test.ts +65 -0
  565. package/src/location/matching.ts +354 -0
  566. package/src/location/mcp-tools.ts +2 -1
  567. package/src/location/surfaces.test.ts +15 -2
  568. package/src/location/surfaces.ts +95 -18
  569. package/src/location/tagging.test.ts +119 -0
  570. package/src/location/tagging.ts +277 -0
  571. package/src/location/types.ts +23 -1
  572. package/src/mcp-read-only-tools.ts +1 -0
  573. package/src/memory-action-policy.ts +28 -0
  574. package/src/memory-projection-store.ts +3 -1
  575. package/src/okf/cli.ts +18 -5
  576. package/src/okf/config.ts +5 -0
  577. package/src/okf/index-files.test.ts +60 -0
  578. package/src/okf/index-files.ts +114 -0
  579. package/src/okf/render.ts +133 -0
  580. package/src/okf/type-mapping.test.ts +3 -0
  581. package/src/okf/type-mapping.ts +2 -0
  582. package/src/orchestration/extraction-run.ts +2 -1
  583. package/src/orchestration/generic-recall-paths.ts +4 -3
  584. package/src/schemas.ts +17 -1
  585. package/src/standup/access-operations.ts +14 -0
  586. package/src/standup/build.test.ts +34 -0
  587. package/src/standup/build.ts +115 -0
  588. package/src/standup/http-glue.ts +15 -0
  589. package/src/standup/mcp-tools.ts +16 -0
  590. package/src/storage/context-transform-ledger.ts +39 -0
  591. package/src/storage/secure-line-reader.ts +50 -1
  592. package/src/storage.ts +4 -1
  593. package/src/support-passport/card-projection.ts +1 -0
  594. package/src/support-passport/card-service-commit-forwarding.test.ts +1 -0
  595. package/src/support-passport/card-service.test.ts +75 -1
  596. package/src/support-passport/card-service.ts +6 -3
  597. package/src/support-passport/card-state.ts +5 -1
  598. package/src/support-passport/offline-sync-guard.ts +14 -1
  599. package/src/transfer/export-okf.test.ts +164 -0
  600. package/src/transfer/export-okf.ts +286 -0
  601. package/src/types.ts +2 -3
  602. package/dist/chunk-2LWQSV6A.js.map +0 -1
  603. package/dist/chunk-3BCULS4U.js.map +0 -1
  604. package/dist/chunk-7BDZTALN.js.map +0 -1
  605. package/dist/chunk-7PHI6GUI.js.map +0 -1
  606. package/dist/chunk-AFR6AIM4.js.map +0 -1
  607. package/dist/chunk-AX7UXCHJ.js.map +0 -1
  608. package/dist/chunk-BJTHRFFC.js.map +0 -1
  609. package/dist/chunk-D4QVPP3G.js.map +0 -1
  610. package/dist/chunk-DVYRD4HY.js.map +0 -1
  611. package/dist/chunk-F635GAL7.js.map +0 -1
  612. package/dist/chunk-FMQ4MOQO.js.map +0 -1
  613. package/dist/chunk-FP7YTTVO.js.map +0 -1
  614. package/dist/chunk-I4343FIA.js.map +0 -1
  615. package/dist/chunk-I7EX6KSH.js.map +0 -1
  616. package/dist/chunk-LBFFNDFM.js.map +0 -1
  617. package/dist/chunk-LLQCM2U2.js.map +0 -1
  618. package/dist/chunk-RQE4TITU.js.map +0 -1
  619. package/dist/chunk-UW5NPZJ2.js.map +0 -1
  620. package/dist/chunk-XAB6STPO.js.map +0 -1
  621. package/dist/chunk-ZPUIRTIZ.js.map +0 -1
  622. package/dist/types-CM86alG1.d.ts +0 -89
  623. /package/dist/{contradiction-scan-AKUWPX5N.js.map → active-context-config.js.map} +0 -0
  624. /package/dist/{resolution-4552BNRV.js.map → active-context-transform.js.map} +0 -0
  625. /package/dist/{auto-sync-XVMLL2RH.js.map → auto-sync-Q6Q2FVSC.js.map} +0 -0
  626. /package/dist/{capsule-merge-SGIVB3WA.js.map → capsule-merge-SEHERWWP.js.map} +0 -0
  627. /package/dist/{chunk-CFGU52XJ.js.map → chunk-23CVL7HS.js.map} +0 -0
  628. /package/dist/{chunk-PO7NXBG2.js.map → chunk-2GF27PGH.js.map} +0 -0
  629. /package/dist/{chunk-6CPUQ5D6.js.map → chunk-2LBAFHOQ.js.map} +0 -0
  630. /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
  631. /package/dist/{chunk-IP4ZNT4U.js.map → chunk-33MFRY25.js.map} +0 -0
  632. /package/dist/{chunk-VFYRYFLL.js.map → chunk-3TSU662L.js.map} +0 -0
  633. /package/dist/{chunk-VXVZ2GM3.js.map → chunk-4FHRZD5T.js.map} +0 -0
  634. /package/dist/{chunk-5VPQSRQO.js.map → chunk-4STAANV7.js.map} +0 -0
  635. /package/dist/{chunk-46WM6JX2.js.map → chunk-4ZWCQJNM.js.map} +0 -0
  636. /package/dist/{chunk-52II7PB6.js.map → chunk-645WOU5I.js.map} +0 -0
  637. /package/dist/{chunk-YKWFK7XA.js.map → chunk-6CEGSTBD.js.map} +0 -0
  638. /package/dist/{chunk-GEPACVWN.js.map → chunk-6RUHELWR.js.map} +0 -0
  639. /package/dist/{chunk-ZAOHJDKH.js.map → chunk-72OIT7KS.js.map} +0 -0
  640. /package/dist/{chunk-KQAFEZQX.js.map → chunk-7LCGFUMB.js.map} +0 -0
  641. /package/dist/{chunk-7TCGNUVP.js.map → chunk-7UTDHQZ5.js.map} +0 -0
  642. /package/dist/{chunk-5HK3CJAR.js.map → chunk-7XOG75AU.js.map} +0 -0
  643. /package/dist/{chunk-C24UZSFW.js.map → chunk-CEH2AFXG.js.map} +0 -0
  644. /package/dist/{chunk-YOXVZJFM.js.map → chunk-CFVTRUR3.js.map} +0 -0
  645. /package/dist/{chunk-ACOC27BB.js.map → chunk-CN4VKV3S.js.map} +0 -0
  646. /package/dist/{chunk-PMVPCZJZ.js.map → chunk-CTCGHNWN.js.map} +0 -0
  647. /package/dist/{chunk-EGBDFJ36.js.map → chunk-DD5JFCWM.js.map} +0 -0
  648. /package/dist/{chunk-T42L3S6A.js.map → chunk-DDX6KIXF.js.map} +0 -0
  649. /package/dist/{chunk-JIYDRBVZ.js.map → chunk-DJORULH3.js.map} +0 -0
  650. /package/dist/{chunk-WTOZBZNN.js.map → chunk-DMEHOEC7.js.map} +0 -0
  651. /package/dist/{chunk-OPPBTPUU.js.map → chunk-DUAJKRR2.js.map} +0 -0
  652. /package/dist/{chunk-SVVIASVX.js.map → chunk-EFQCDJZ2.js.map} +0 -0
  653. /package/dist/{chunk-Q57GOHLF.js.map → chunk-EGALNSZ4.js.map} +0 -0
  654. /package/dist/{chunk-KCT36JAW.js.map → chunk-ESNFSSO4.js.map} +0 -0
  655. /package/dist/{chunk-XQ3HXAQH.js.map → chunk-ET2CNMLD.js.map} +0 -0
  656. /package/dist/{chunk-Z4U3UN56.js.map → chunk-EZSCW4EM.js.map} +0 -0
  657. /package/dist/{chunk-F6QHHRWP.js.map → chunk-FESUGFIL.js.map} +0 -0
  658. /package/dist/{chunk-S3K2CIK5.js.map → chunk-FKKGCGYL.js.map} +0 -0
  659. /package/dist/{chunk-BWGCOLEL.js.map → chunk-FTTJRVB7.js.map} +0 -0
  660. /package/dist/{chunk-JAQXUGLN.js.map → chunk-FYWLSFFS.js.map} +0 -0
  661. /package/dist/{chunk-OPGL46PX.js.map → chunk-GX6FTSYH.js.map} +0 -0
  662. /package/dist/{chunk-A32YEQAM.js.map → chunk-H7VDIF2V.js.map} +0 -0
  663. /package/dist/{chunk-PDDSFELN.js.map → chunk-HJXA6ZM7.js.map} +0 -0
  664. /package/dist/{chunk-RGCF4XNH.js.map → chunk-HNPE66LB.js.map} +0 -0
  665. /package/dist/{chunk-SEA6M7SS.js.map → chunk-I5VB44ZK.js.map} +0 -0
  666. /package/dist/{chunk-SDEPLF7V.js.map → chunk-IBJ6U753.js.map} +0 -0
  667. /package/dist/{chunk-EUYWQ7TS.js.map → chunk-IEZ6CGTW.js.map} +0 -0
  668. /package/dist/{chunk-3RI5Y7KU.js.map → chunk-IVIAHQBR.js.map} +0 -0
  669. /package/dist/{chunk-7WR462EM.js.map → chunk-J3OND5QT.js.map} +0 -0
  670. /package/dist/{chunk-T3JQTCCO.js.map → chunk-JI7U6AS3.js.map} +0 -0
  671. /package/dist/{chunk-I32NKXE2.js.map → chunk-JTWZKNUH.js.map} +0 -0
  672. /package/dist/{chunk-VKCAHCBI.js.map → chunk-L4X4PJYK.js.map} +0 -0
  673. /package/dist/{chunk-W4BMEGQA.js.map → chunk-LUDBXTBJ.js.map} +0 -0
  674. /package/dist/{chunk-RIAM7DND.js.map → chunk-ME35HVDJ.js.map} +0 -0
  675. /package/dist/{chunk-NG3MBQV4.js.map → chunk-MJRGVXPQ.js.map} +0 -0
  676. /package/dist/{chunk-773TRRGT.js.map → chunk-MJUCDM3C.js.map} +0 -0
  677. /package/dist/{chunk-7F27PCSN.js.map → chunk-MN5NOOI7.js.map} +0 -0
  678. /package/dist/{chunk-JCWY73FK.js.map → chunk-N4F7ZSSG.js.map} +0 -0
  679. /package/dist/{chunk-TR7DGXGI.js.map → chunk-NACLNNFQ.js.map} +0 -0
  680. /package/dist/{chunk-LC2BDILZ.js.map → chunk-NBP4EX5N.js.map} +0 -0
  681. /package/dist/{chunk-ZVPVTPGI.js.map → chunk-NNZFPYYX.js.map} +0 -0
  682. /package/dist/{chunk-MFOSZUIT.js.map → chunk-NPIBN2VL.js.map} +0 -0
  683. /package/dist/{chunk-IY7UXD3J.js.map → chunk-O57GM3FR.js.map} +0 -0
  684. /package/dist/{chunk-I2HTKOOP.js.map → chunk-O7ERGZDA.js.map} +0 -0
  685. /package/dist/{chunk-GTSVEEP3.js.map → chunk-OAJMQKQR.js.map} +0 -0
  686. /package/dist/{chunk-HSZMX3ZJ.js.map → chunk-ODW5GDFE.js.map} +0 -0
  687. /package/dist/{chunk-J2WC5LF4.js.map → chunk-QBC33MPY.js.map} +0 -0
  688. /package/dist/{chunk-EOHKUWXW.js.map → chunk-QCRJMU5V.js.map} +0 -0
  689. /package/dist/{chunk-5DH6PG4B.js.map → chunk-RZ3IZIJG.js.map} +0 -0
  690. /package/dist/{chunk-AAXJNINV.js.map → chunk-SN4JXNLL.js.map} +0 -0
  691. /package/dist/{chunk-SVSRPG6M.js.map → chunk-TNGH4ZYI.js.map} +0 -0
  692. /package/dist/{chunk-HZNYJN77.js.map → chunk-TNXNECAN.js.map} +0 -0
  693. /package/dist/{chunk-JOEJG4SD.js.map → chunk-TVW4C7PV.js.map} +0 -0
  694. /package/dist/{chunk-UFKPQBXH.js.map → chunk-U62OK7BB.js.map} +0 -0
  695. /package/dist/{chunk-R2MZCYA6.js.map → chunk-UNUMFURP.js.map} +0 -0
  696. /package/dist/{chunk-YRVAKONL.js.map → chunk-VQ4AMTGZ.js.map} +0 -0
  697. /package/dist/{chunk-RAIUTAZZ.js.map → chunk-WKAXBXVA.js.map} +0 -0
  698. /package/dist/{chunk-ZIJDI4CP.js.map → chunk-WKJFIMVN.js.map} +0 -0
  699. /package/dist/{chunk-SXIMQLGV.js.map → chunk-WVGXCBOC.js.map} +0 -0
  700. /package/dist/{chunk-7BEPVIH3.js.map → chunk-X5YYSAZX.js.map} +0 -0
  701. /package/dist/{chunk-FZEEWOI2.js.map → chunk-XJJYSX6F.js.map} +0 -0
  702. /package/dist/{chunk-UG6VXIOK.js.map → chunk-XSTNGNJP.js.map} +0 -0
  703. /package/dist/{chunk-YDPAE2RD.js.map → chunk-YFLLGRXO.js.map} +0 -0
  704. /package/dist/{chunk-EZ25VE3G.js.map → chunk-YNDLCWXS.js.map} +0 -0
  705. /package/dist/{chunk-ANJXPFRS.js.map → chunk-YXFCALVT.js.map} +0 -0
  706. /package/dist/{chunk-Q4WONDMJ.js.map → chunk-YYGZJPOK.js.map} +0 -0
  707. /package/dist/{chunk-5HERQ5FX.js.map → chunk-Z3YEGSR4.js.map} +0 -0
  708. /package/dist/{chunk-YWSQD2IB.js.map → chunk-ZJPM7GZ3.js.map} +0 -0
  709. /package/dist/{chunk-5S4LQOPE.js.map → chunk-ZW4VXELZ.js.map} +0 -0
  710. /package/dist/{first-start-migration-4NETATFF.js.map → first-start-migration-KHIMCBIC.js.map} +0 -0
  711. /package/dist/{forget-SZ2BXDGF.js.map → forget-2AE4MDK3.js.map} +0 -0
  712. /package/dist/{purge-GB7PZHT2.js.map → purge-OP6BEDFY.js.map} +0 -0
  713. /package/dist/{tier-stats-4B5IJ3NE.js.map → tier-stats-2TOW3QNL.js.map} +0 -0
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Pure context summary seam (issue #2347).
3
+ *
4
+ * The only shared summary path: `LcmSummarizer` and active-context
5
+ * transforms both call `summarizeContextPure`. No DAG writes, no model
6
+ * client construction — callers inject the model seam (`SummarizeFn`).
7
+ */
8
+ import { looksLikeMechanicalTelemetryTranscript } from "./telemetry-transcript.js";
9
+ import { estimateTokenCount } from "./token-estimate.js";
10
+
11
+ /** Model seam injected by the caller (orchestrator LLM path or a test stub). */
12
+ export type SummarizeFn = (
13
+ text: string,
14
+ targetTokens: number,
15
+ aggressive: boolean,
16
+ ) => Promise<string | null>;
17
+
18
+ export type ContextSummaryMethod = "deterministic" | "llm" | "auto";
19
+
20
+ export interface PureContextSummaryResult {
21
+ text: string;
22
+ method: "llm" | "deterministic";
23
+ /** True when the requested path degraded (auto mode only). */
24
+ fallback: boolean;
25
+ modelUsed?: string;
26
+ /**
27
+ * Escalation level preserved for LCM callers: 0 normal LLM, 1 aggressive
28
+ * LLM, 2 deterministic truncation. Undefined when never escalated.
29
+ */
30
+ escalation?: number;
31
+ }
32
+
33
+ export interface SummarizeContextPureOptions {
34
+ /** LLM seam. Required for `llm`; without it `auto` degrades to deterministic. */
35
+ llm?: SummarizeFn;
36
+ /** Hard ceiling for deterministic truncation output. */
37
+ deterministicMaxTokens?: number;
38
+ /** Route obvious mechanical telemetry straight to truncation. */
39
+ telemetryPrefilterEnabled?: boolean;
40
+ /** Recorded verbatim in the result for telemetry. */
41
+ modelUsed?: string;
42
+ }
43
+
44
+ /** Thrown when `llm` mode cannot produce usable text (no silent fallback). */
45
+ export class ContextSummaryUnavailableError extends Error {
46
+ constructor(reason: string) {
47
+ super(`context summary unavailable: ${reason}`);
48
+ this.name = "ContextSummaryUnavailableError";
49
+ }
50
+ }
51
+
52
+ const DEFAULT_DETERMINISTIC_MAX_TOKENS = 256;
53
+ /** LLM output tolerance before an attempt is rejected as too long (LCM parity). */
54
+ const OUTPUT_TOKEN_TOLERANCE = 1.5;
55
+ const MIN_DETERMINISTIC_TOKENS = 1;
56
+
57
+ /**
58
+ * Summarize text through the shared seam.
59
+ *
60
+ * - `deterministic`: safe truncation only, never throws, never calls the LLM.
61
+ * - `llm`: exactly one non-aggressive LLM call; failure or unusable output
62
+ * throws {@link ContextSummaryUnavailableError} (fallback is not allowed).
63
+ * - `auto`: escalation ladder (LLM → aggressive LLM → deterministic), with
64
+ * `fallback: true` and an `escalation` level on degradation.
65
+ */
66
+ export async function summarizeContextPure(
67
+ text: string,
68
+ targetTokens: number,
69
+ method: ContextSummaryMethod,
70
+ options: SummarizeContextPureOptions = {},
71
+ ): Promise<PureContextSummaryResult> {
72
+ const deterministicMaxTokens = Math.max(
73
+ MIN_DETERMINISTIC_TOKENS,
74
+ options.deterministicMaxTokens ?? DEFAULT_DETERMINISTIC_MAX_TOKENS,
75
+ );
76
+
77
+ if (method === "deterministic") {
78
+ return {
79
+ text: deterministicTruncate(text, Math.min(targetTokens, deterministicMaxTokens)),
80
+ method: "deterministic",
81
+ fallback: false,
82
+ };
83
+ }
84
+
85
+ const usableLlm = options.llm ?? null;
86
+ if (method === "llm") {
87
+ if (!usableLlm) {
88
+ throw new ContextSummaryUnavailableError("no llm seam configured");
89
+ }
90
+ const result = await attemptLlm(usableLlm, text, targetTokens, false);
91
+ if (result === null) {
92
+ throw new ContextSummaryUnavailableError("llm path failed");
93
+ }
94
+ return { text: result, method: "llm", fallback: false, modelUsed: options.modelUsed };
95
+ }
96
+
97
+ // auto
98
+ if (options.telemetryPrefilterEnabled && looksLikeMechanicalTelemetryTranscript(text)) {
99
+ return {
100
+ text: deterministicTruncate(text, Math.min(targetTokens, deterministicMaxTokens)),
101
+ method: "deterministic",
102
+ fallback: true,
103
+ escalation: 2,
104
+ };
105
+ }
106
+
107
+ if (usableLlm) {
108
+ const normal = await attemptLlm(usableLlm, text, targetTokens, false);
109
+ if (normal !== null) {
110
+ return { text: normal, method: "llm", fallback: false, escalation: 0, modelUsed: options.modelUsed };
111
+ }
112
+ const aggressiveTarget = Math.max(32, Math.ceil(targetTokens * 0.5));
113
+ const aggressive = await attemptLlm(usableLlm, text, aggressiveTarget, true);
114
+ if (aggressive !== null) {
115
+ return { text: aggressive, method: "llm", fallback: true, escalation: 1, modelUsed: options.modelUsed };
116
+ }
117
+ }
118
+
119
+ return {
120
+ text: deterministicTruncate(text, deterministicMaxTokens),
121
+ method: "deterministic",
122
+ fallback: true,
123
+ escalation: 2,
124
+ };
125
+ }
126
+
127
+ /** One LLM attempt; null on error, empty, or over-tolerance output. */
128
+ async function attemptLlm(
129
+ llm: SummarizeFn,
130
+ text: string,
131
+ targetTokens: number,
132
+ aggressive: boolean,
133
+ ): Promise<string | null> {
134
+ try {
135
+ const result = await llm(text, targetTokens, aggressive);
136
+ if (!result || result.trim().length === 0) return null;
137
+ if (estimateTokenCount(result) > targetTokens * OUTPUT_TOKEN_TOLERANCE) return null;
138
+ return result;
139
+ } catch {
140
+ return null;
141
+ }
142
+ }
143
+
144
+ /** Deterministic truncation: first and last sentence, plus middle truncation. */
145
+ export function deterministicTruncate(text: string, maxTokens: number): string {
146
+ if (maxTokens <= 0 || estimateTokenCount(text) <= maxTokens) return text;
147
+
148
+ const sentences = text.split(/(?<=[.!?])\s+/).filter((s) => s.length > 0);
149
+ if (sentences.length <= 2) return clampToTokenBudget(text, maxTokens);
150
+
151
+ const first = sentences[0];
152
+ const last = sentences[sentences.length - 1];
153
+ const render = (middle: string[], truncated: boolean): string =>
154
+ `${first} ${middle.join(" ")}${truncated ? " [...] " : " "}${last}`;
155
+
156
+ const base = render([], false);
157
+ if (estimateTokenCount(base) > maxTokens) return clampToTokenBudget(text, maxTokens);
158
+ if (estimateTokenCount(render([], true)) > maxTokens) return base;
159
+
160
+ const middle: string[] = [];
161
+ for (let i = 1; i < sentences.length - 1; i++) {
162
+ const candidate = [...middle, sentences[i]];
163
+ const truncated = i < sentences.length - 2;
164
+ if (estimateTokenCount(render(candidate, truncated)) > maxTokens) break;
165
+ middle.push(sentences[i]);
166
+ }
167
+
168
+ const truncated = middle.length < sentences.length - 2;
169
+ return clampToTokenBudget(render(middle, truncated), maxTokens);
170
+ }
171
+
172
+ function clampToTokenBudget(text: string, maxTokens: number): string {
173
+ const codePoints = [...text];
174
+ let low = 0;
175
+ let high = codePoints.length;
176
+ while (low < high) {
177
+ const mid = Math.ceil((low + high) / 2);
178
+ if (estimateTokenCount(codePoints.slice(0, mid).join("")) <= maxTokens) low = mid;
179
+ else high = mid - 1;
180
+ }
181
+ return codePoints.slice(0, low).join("");
182
+ }
@@ -1,5 +1,6 @@
1
1
  import assert from "node:assert/strict";
2
2
  import test from "node:test";
3
+ import type { FallbackLlmOptions } from "./fallback-llm.js";
3
4
 
4
5
  import { parseConfig } from "./config.js";
5
6
  import { ExtractionEngine } from "./extraction.js";
@@ -111,7 +112,11 @@ type LocalLlmFixture = {
111
112
  };
112
113
 
113
114
  type GatewayFixture = {
114
- parseWithSchemaDetailed(messages: ChatMessage[]): Promise<unknown>;
115
+ parseWithSchemaDetailed(
116
+ messages: ChatMessage[],
117
+ schema: unknown,
118
+ options?: FallbackLlmOptions,
119
+ ): Promise<unknown>;
115
120
  };
116
121
 
117
122
  type DirectClientFixture = {
@@ -283,11 +288,13 @@ test("gateway extraction prompt uses placeholders and accepts an empty question
283
288
  const engine = new ExtractionEngine(parseConfig({ modelSource: "gateway" }));
284
289
  let calls = 0;
285
290
  let prompt = "";
291
+ let nativeSchema: Record<string, unknown> | undefined;
286
292
 
287
293
  const fallbackLlm: GatewayFixture = {
288
- async parseWithSchemaDetailed(messages: ChatMessage[]) {
294
+ async parseWithSchemaDetailed(messages: ChatMessage[], _schema, options) {
289
295
  calls += 1;
290
296
  prompt = messages[0]?.content ?? "";
297
+ nativeSchema = options?.jsonSchema?.schema;
291
298
  return { modelUsed: "fixture-gateway", result: SOURCE_GROUNDED_EXTRACTION };
292
299
  },
293
300
  };
@@ -298,6 +305,11 @@ test("gateway extraction prompt uses placeholders and accepts an empty question
298
305
  assert.equal(calls, 1);
299
306
  assertSourceGroundedResult(result);
300
307
  assertSafeExtractionPrompt(prompt);
308
+ assert.match(prompt, /Return only valid JSON matching this shape/);
309
+ assert.equal(nativeSchema?.type, "object");
310
+ const properties = nativeSchema?.properties as Record<string, Record<string, unknown>>;
311
+ assert.equal(properties.facts?.type, "array");
312
+ assert.equal((properties.facts?.items as Record<string, unknown>)?.type, "object");
301
313
  });
302
314
 
303
315
  test("direct extraction prompt uses placeholders and accepts an empty question list", async () => {
package/src/extraction.ts CHANGED
@@ -7,6 +7,7 @@ import { shouldRunProactivePass } from "./proactive-contention.js";
7
7
  import { FallbackLlmClient, fallbackLlmRuntimeContextFromConfig, gatewayTaskChainOptions } from "./fallback-llm.js";
8
8
  import { revalidateDependentsViaLlm, type RevalidationFastChatCompletion } from "./orchestration/dependency-revalidation.js";
9
9
  import {
10
+ ExtractionProviderOutputSchema,
10
11
  ExtractionResultSchema,
11
12
  ConsolidationResultSchema,
12
13
  IdentityConsolidationResultSchema,
@@ -60,6 +61,7 @@ import {
60
61
  buildProfileConsolidationSystemPrompt,
61
62
  eventTimePromptInstruction,
62
63
  } from "./extraction-prompt.js";
64
+ import { zodToJsonSchema } from "zod-to-json-schema";
63
65
  import {
64
66
  containsExtractionPlaceholder,
65
67
  extractionAttributes,
@@ -77,6 +79,14 @@ type ExtractedRelationshipResult = NonNullable<ExtractionResult["relationships"]
77
79
 
78
80
  const PROACTIVE_MIN_CONFIDENCE = 0.8;
79
81
 
82
+ const EXTRACTION_PROVIDER_JSON_SCHEMA = zodToJsonSchema(
83
+ ExtractionProviderOutputSchema,
84
+ {
85
+ $refStrategy: "none",
86
+ effectStrategy: "input",
87
+ },
88
+ ) as Record<string, unknown>;
89
+
80
90
  function extractionEntityType(value: unknown): ExtractedEntityResult["type"] | undefined {
81
91
  const type = extractionText(value);
82
92
  if (
@@ -1289,7 +1299,12 @@ export class ExtractionEngine {
1289
1299
  this.profiler.startSpan("gateway-fallback", extractionTraceId);
1290
1300
  try {
1291
1301
  const messages = [
1292
- { role: "system" as const, content: buildExtractionInstructions(this.config, existingEntities, ambientCapture) },
1302
+ {
1303
+ role: "system" as const,
1304
+ content:
1305
+ buildExtractionInstructions(this.config, existingEntities, ambientCapture) +
1306
+ `\n\nReturn only valid JSON matching this shape. Placeholder text describes field shape only and is never source evidence:\n${EXTRACTION_RESPONSE_SHAPE}`,
1307
+ },
1293
1308
  { role: "user" as const, content: conversation },
1294
1309
  ];
1295
1310
 
@@ -1302,6 +1317,11 @@ export class ExtractionEngine {
1302
1317
  temperature: 0.3,
1303
1318
  maxTokens: this.config.extractionMaxOutputTokens,
1304
1319
  timeoutMs: this.config.localLlmTimeoutMs,
1320
+ jsonSchema: {
1321
+ name: "extraction_result",
1322
+ schema: EXTRACTION_PROVIDER_JSON_SCHEMA,
1323
+ strict: false,
1324
+ },
1305
1325
  signal,
1306
1326
  }),
1307
1327
  );
@@ -12,6 +12,70 @@ import {
12
12
  clearSecretCache,
13
13
  } from "./resolve-provider-secret.js";
14
14
 
15
+ test("fallback llm sends native JSON schema to chat completions", { concurrency: false }, async () => {
16
+ clearModelsJsonCache();
17
+ clearSecretCache();
18
+ const llm = new FallbackLlmClient({
19
+ agents: { defaults: { model: { primary: "openai/test-model" } } },
20
+ models: { providers: { openai: { baseUrl: "https://openai.example/v1", api: "openai-completions", apiKey: "key", models: [] } } },
21
+ });
22
+ const originalFetch = globalThis.fetch;
23
+ let captured: Record<string, unknown> = {};
24
+ globalThis.fetch = (async (_url, init) => {
25
+ captured = JSON.parse(String(init?.body ?? "{}")) as Record<string, unknown>;
26
+ return new Response(JSON.stringify({ choices: [{ message: { content: '{"ok":true}' } }] }), { status: 200 });
27
+ }) as typeof fetch;
28
+ try {
29
+ await llm.chatCompletion([{ role: "user", content: "test" }], {
30
+ jsonSchema: { name: "test_result", schema: { type: "object", properties: { ok: { type: "boolean" } } }, strict: false },
31
+ });
32
+ assert.deepEqual(captured.response_format, {
33
+ type: "json_schema",
34
+ json_schema: {
35
+ name: "test_result",
36
+ strict: false,
37
+ schema: { type: "object", properties: { ok: { type: "boolean" } } },
38
+ },
39
+ });
40
+ } finally {
41
+ globalThis.fetch = originalFetch;
42
+ clearModelsJsonCache();
43
+ clearSecretCache();
44
+ }
45
+ });
46
+
47
+ test("fallback llm retries without native schema when the provider rejects it", { concurrency: false }, async () => {
48
+ clearModelsJsonCache();
49
+ clearSecretCache();
50
+ const llm = new FallbackLlmClient({
51
+ agents: { defaults: { model: { primary: "openai/test-model" } } },
52
+ models: { providers: { openai: { baseUrl: "https://openai.example/v1", api: "openai-completions", apiKey: "key", models: [] } } },
53
+ });
54
+ const originalFetch = globalThis.fetch;
55
+ const bodies: Array<Record<string, unknown>> = [];
56
+ globalThis.fetch = (async (_url, init) => {
57
+ const body = JSON.parse(String(init?.body ?? "{}")) as Record<string, unknown>;
58
+ bodies.push(body);
59
+ if (body.response_format) {
60
+ return new Response('response_format json_schema is unsupported', { status: 400 });
61
+ }
62
+ return new Response(JSON.stringify({ choices: [{ message: { content: '{"ok":true}' } }] }), { status: 200 });
63
+ }) as typeof fetch;
64
+ try {
65
+ const response = await llm.chatCompletion([{ role: "user", content: "test" }], {
66
+ jsonSchema: { name: "test_result", schema: { type: "object" } },
67
+ });
68
+ assert.equal(response?.content, '{"ok":true}');
69
+ assert.equal(bodies.length, 2);
70
+ assert.ok(bodies[0]?.response_format);
71
+ assert.equal(bodies[1]?.response_format, undefined);
72
+ } finally {
73
+ globalThis.fetch = originalFetch;
74
+ clearModelsJsonCache();
75
+ clearSecretCache();
76
+ }
77
+ });
78
+
15
79
  test("fallback llm prefers the active gateway provider config over models.json", { concurrency: false }, async () => {
16
80
  __setModelsJsonForTest({
17
81
  "custom-provider": {
@@ -1711,3 +1775,73 @@ test("fallback llm redacts provider error bodies for sensitive calls", { concurr
1711
1775
  function disableGatewaySecretResolverForTest(): void {
1712
1776
  __setGatewayResolverForTest(async () => null);
1713
1777
  }
1778
+
1779
+ test("fallback llm does not retry schema-stripping for unrelated unsupported errors", { concurrency: false }, async () => {
1780
+ clearModelsJsonCache();
1781
+ clearSecretCache();
1782
+ const llm = new FallbackLlmClient({
1783
+ agents: { defaults: { model: { primary: "openai/test-model" } } },
1784
+ models: { providers: { openai: { baseUrl: "https://openai.example/v1", api: "openai-completions", apiKey: "key", models: [] } } },
1785
+ });
1786
+ const originalFetch = globalThis.fetch;
1787
+ const bodies: Array<Record<string, unknown>> = [];
1788
+ globalThis.fetch = (async (_url, init) => {
1789
+ const body = JSON.parse(String(init?.body ?? "{}")) as Record<string, unknown>;
1790
+ bodies.push(body);
1791
+ // Unrelated provider error: "unsupported" without schema/format context.
1792
+ return new Response(JSON.stringify({ error: { message: "'temperature' is unsupported with this model" } }), { status: 400 });
1793
+ }) as typeof fetch;
1794
+ try {
1795
+ const response = await llm.chatCompletion([{ role: "user", content: "test" }], {
1796
+ jsonSchema: { name: "test_result", schema: { type: "object" } },
1797
+ });
1798
+ assert.equal(response, null);
1799
+ // Exactly one request: no schema-stripping duplicate for unrelated errors.
1800
+ assert.equal(bodies.length, 1);
1801
+ } finally {
1802
+ globalThis.fetch = originalFetch;
1803
+ clearModelsJsonCache();
1804
+ clearSecretCache();
1805
+ }
1806
+ });
1807
+
1808
+ test("fallback llm retries without responsesJsonSchema when the Responses API rejects it and degrades the rest of the chain", { concurrency: false }, async () => {
1809
+ clearModelsJsonCache();
1810
+ clearSecretCache();
1811
+ const llm = new FallbackLlmClient({
1812
+ agents: { defaults: { model: { primary: "openai/test-model", fallbacks: ["openai/test-model-2"] } } },
1813
+ models: { providers: { openai: { baseUrl: "https://openai.example/v1", api: "openai-responses", apiKey: "key", models: [] } } },
1814
+ });
1815
+ const originalFetch = globalThis.fetch;
1816
+ const bodies: Array<Record<string, unknown>> = [];
1817
+ globalThis.fetch = (async (_url, init) => {
1818
+ const body = JSON.parse(String(init?.body ?? "{}")) as Record<string, unknown>;
1819
+ bodies.push(body);
1820
+ if ((body as { text?: { format?: unknown } }).text?.format) {
1821
+ return new Response('text.format json_schema is unsupported', { status: 400 });
1822
+ }
1823
+ // Model 1 always fails content-wise; model 2 succeeds.
1824
+ const model = String(body.model ?? "");
1825
+ if (model.endsWith("test-model")) {
1826
+ return new Response(JSON.stringify({ output_text: "not json" }), { status: 200 });
1827
+ }
1828
+ return new Response(JSON.stringify({ output_text: '{"ok":true}' }), { status: 200 });
1829
+ }) as typeof fetch;
1830
+ try {
1831
+ const response = await llm.chatCompletion([{ role: "user", content: "test" }], {
1832
+ responsesJsonSchema: { name: "test_result", schema: { type: "object" } },
1833
+ acceptResponse: (r) => r.content.includes("ok"),
1834
+ });
1835
+ assert.ok(response?.content.includes("ok"));
1836
+ // model1: schema attempt (rejected) + unstructured retry (bad output)
1837
+ // model2: unstructured only — the schema must NOT be re-sent chain-wide.
1838
+ assert.equal(bodies.length, 3);
1839
+ assert.ok((bodies[0] as { text?: { format?: unknown } }).text?.format);
1840
+ assert.equal((bodies[1] as { text?: { format?: unknown } }).text?.format, undefined);
1841
+ assert.equal((bodies[2] as { text?: { format?: unknown } }).text?.format, undefined);
1842
+ } finally {
1843
+ globalThis.fetch = originalFetch;
1844
+ clearModelsJsonCache();
1845
+ clearSecretCache();
1846
+ }
1847
+ });
@@ -27,6 +27,8 @@ export interface FallbackLlmOptions {
27
27
  store?: boolean;
28
28
  /** Request strict JSON output when a route uses the Responses API. */
29
29
  responsesJsonSchema?: { name: string; schema: Record<string, unknown> };
30
+ /** Request provider-native structured output on supported JSON transports. */
31
+ jsonSchema?: { name: string; schema: Record<string, unknown>; strict?: boolean };
30
32
  /** Hide provider error details that could echo private request content. */
31
33
  redactProviderErrors?: boolean;
32
34
  /** Explicit "provider/model" override to try before the configured chain. */
@@ -108,6 +110,22 @@ interface ModelRef {
108
110
  modelString: string;
109
111
  }
110
112
 
113
+ function isUnsupportedJsonSchemaError(error: unknown): boolean {
114
+ const message = error instanceof Error ? error.message : String(error);
115
+ // Require an HTTP status plus explicit schema/format context. A bare
116
+ // "unsupported" (e.g. "'temperature' is unsupported with this model") must
117
+ // NOT trigger the schema-stripping retry, or we pay a duplicate request
118
+ // for unrelated provider errors.
119
+ if (!/\b(?:400|404|422)\b/.test(message)) {
120
+ return false;
121
+ }
122
+ if (/(?:response[_ ]?format|json[_ ]?schema|structured[_ ]?output)/i.test(message)) {
123
+ return true;
124
+ }
125
+ // "unsupported" only counts when adjacent to schema/format terminology.
126
+ return /\bunsupported\b[\s\S]{0,40}\b(?:schema|format)\b/i.test(message);
127
+ }
128
+
111
129
  const PROVIDER_ALIASES: Record<string, readonly string[]> = {
112
130
  "openai-codex": ["codex"],
113
131
  codex: ["openai-codex"],
@@ -199,8 +217,9 @@ export class FallbackLlmClient {
199
217
  }
200
218
 
201
219
  const runChain = async (
202
- runOptions: FallbackLlmOptions,
220
+ initialOptions: FallbackLlmOptions,
203
221
  ): Promise<FallbackLlmResponse | null> => {
222
+ let runOptions = initialOptions;
204
223
  let lastRejectedResponse: FallbackLlmResponse | null = null;
205
224
  // Try each model in the chain
206
225
  for (let i = 0; i < models.length; i++) {
@@ -232,6 +251,47 @@ export class FallbackLlmClient {
232
251
  if (runOptions.signal?.aborted) {
233
252
  throw abortReason(runOptions.signal);
234
253
  }
254
+ if (
255
+ (runOptions.jsonSchema || runOptions.responsesJsonSchema) &&
256
+ isUnsupportedJsonSchemaError(err)
257
+ ) {
258
+ log.debug(`fallback LLM: ${model.modelString} rejected native JSON schema; retrying without it`);
259
+ // Degrade to prompt-only for the REST of the chain too, so an
260
+ // N-model chain where every provider rejects structured output
261
+ // costs N+1 requests instead of 2N.
262
+ runOptions = {
263
+ ...runOptions,
264
+ jsonSchema: undefined,
265
+ responsesJsonSchema: undefined,
266
+ };
267
+ try {
268
+ const result = await this.tryModel(model, messages, runOptions);
269
+ if (result) {
270
+ const response = {
271
+ content: result.content,
272
+ modelUsed: model.modelString,
273
+ usage: result.usage,
274
+ };
275
+ if (!runOptions.acceptResponse || runOptions.acceptResponse(response)) {
276
+ return response;
277
+ }
278
+ lastRejectedResponse = response;
279
+ log.debug(`fallback LLM: ${model.modelString} unstructured retry output rejected by acceptResponse, trying next model...`);
280
+ continue;
281
+ }
282
+ } catch (retryError) {
283
+ if (runOptions.signal?.aborted) throw abortReason(runOptions.signal);
284
+ const retryErrorMsg = runOptions.redactProviderErrors
285
+ ? "provider error details redacted"
286
+ : retryError instanceof Error
287
+ ? retryError.message
288
+ : String(retryError);
289
+ log.debug(
290
+ `fallback LLM: ${model.modelString} unstructured retry failed (${retryErrorMsg})`,
291
+ );
292
+ }
293
+ continue;
294
+ }
235
295
  const errorMsg = runOptions.redactProviderErrors
236
296
  ? "provider error details redacted"
237
297
  : err instanceof Error
@@ -736,6 +796,18 @@ export class FallbackLlmClient {
736
796
  ...buildChatCompletionTokenLimit(modelId, options.maxTokens ?? 4096, {
737
797
  assumeOpenAI,
738
798
  }),
799
+ ...(options.jsonSchema
800
+ ? {
801
+ response_format: {
802
+ type: "json_schema",
803
+ json_schema: {
804
+ name: options.jsonSchema.name,
805
+ strict: options.jsonSchema.strict ?? false,
806
+ schema: options.jsonSchema.schema,
807
+ },
808
+ },
809
+ }
810
+ : {}),
739
811
  };
740
812
 
741
813
  const response = await fetch(url, {
@@ -891,14 +963,14 @@ export class FallbackLlmClient {
891
963
  assumeOpenAI: shouldAssumeOpenAiChatCompletions(config.baseUrl),
892
964
  }),
893
965
  ...(options.store === undefined ? {} : { store: options.store }),
894
- ...(options.responsesJsonSchema
966
+ ...(options.jsonSchema || options.responsesJsonSchema
895
967
  ? {
896
968
  text: {
897
969
  format: {
898
970
  type: "json_schema",
899
- name: options.responsesJsonSchema.name,
900
- strict: true,
901
- schema: options.responsesJsonSchema.schema,
971
+ name: (options.jsonSchema ?? options.responsesJsonSchema)!.name,
972
+ strict: (options.jsonSchema?.strict ?? (options.responsesJsonSchema ? true : false)),
973
+ schema: (options.jsonSchema ?? options.responsesJsonSchema)!.schema,
902
974
  },
903
975
  },
904
976
  }
package/src/index.ts CHANGED
@@ -1,17 +1,10 @@
1
1
  /**
2
- * @remnic/core
3
- *
4
- * Framework-agnostic Remnic memory engine.
5
- *
6
- * Exports the orchestrator, config parsing, storage, search,
7
- * extraction, graph, trust zones, and access layer.
8
- *
9
- * This package has ZERO OpenClaw imports — it can be consumed by
10
- * any host adapter (CLI, HTTP server, MCP server, etc.).
11
- *
2
+ * @remnic/core — framework-agnostic Remnic memory engine.
3
+ * Zero OpenClaw imports. Any host adapter can consume this package.
12
4
  */
13
-
14
5
  export { collapseWhitespace, displayWidth, graphemeUnits, padEndDisplay, truncateCodePointSafe, truncateGraphemeSafe } from "./whitespace.js";
6
+ export * from "./context-summary.js";
7
+ export * from "./active-context-transform.js";
15
8
 
16
9
  // ---------------------------------------------------------------------------
17
10
  // Plugin entry resolution