@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.
- package/dist/access-admin-ops-surface.d.ts +15 -14
- package/dist/access-admin-ops-surface.js +65 -62
- package/dist/access-authorization-probe.d.ts +15 -14
- package/dist/access-authorization-probe.js +66 -63
- package/dist/access-boundary.d.ts +15 -14
- package/dist/access-boundary.js +65 -62
- package/dist/access-citation-namespace.js +3 -3
- package/dist/access-cli.js +182 -174
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +2 -2
- package/dist/access-coding-context-resolution.js +2 -2
- package/dist/access-extraction-force-flush.d.ts +15 -14
- package/dist/access-extraction-force-flush.js +65 -62
- package/dist/access-health-types.d.ts +2 -2
- package/dist/access-http-lcm-compaction.d.ts +15 -14
- package/dist/access-http-lifecycle-flush.d.ts +15 -14
- package/dist/access-http-offline-stream.d.ts +15 -14
- package/dist/access-http-query.d.ts +3 -3
- package/dist/access-http-query.js +67 -64
- package/dist/access-http.d.ts +16 -15
- package/dist/access-http.js +87 -84
- package/dist/access-identity-continuity-surface.d.ts +13 -12
- package/dist/access-identity-continuity-surface.js +65 -62
- package/dist/access-lcm-surface.d.ts +15 -14
- package/dist/access-lcm-surface.js +65 -62
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp.d.ts +15 -14
- package/dist/access-mcp.js +77 -74
- package/dist/access-memory-search-fanout.d.ts +3 -3
- package/dist/{access-namespace-preflight-8VYKmRX0.d.ts → access-namespace-preflight-CLWUoMyW.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -4
- package/dist/access-namespace-preflight.js +65 -62
- package/dist/access-observe-write-surface.d.ts +15 -14
- package/dist/access-observe-write-surface.js +65 -62
- package/dist/access-offline-manifest.d.ts +13 -12
- package/dist/access-offline-manifest.js +16 -16
- package/dist/access-operations-batch.js +69 -66
- package/dist/access-operations.d.ts +16 -15
- package/dist/access-operations.js +74 -71
- package/dist/access-recall-concurrency.d.ts +15 -14
- package/dist/access-recall-concurrency.js +65 -62
- package/dist/access-recall-response.d.ts +15 -14
- package/dist/access-recall-response.js +65 -62
- package/dist/access-recall-surface.d.ts +15 -14
- package/dist/access-recall-surface.js +65 -62
- package/dist/access-schema.js +7 -7
- package/dist/{access-service-Crk__Git.d.ts → access-service-CEUE1Isj.d.ts} +14 -14
- package/dist/access-service-helpers.d.ts +15 -14
- package/dist/access-service.d.ts +15 -14
- package/dist/access-service.js +65 -62
- package/dist/access-surface-catalog.d.ts +15 -14
- package/dist/access-surface-catalog.js +69 -64
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +6 -4
- package/dist/action-confidence.d.ts +2 -2
- package/dist/active-context-config.d.ts +27 -0
- package/dist/active-context-config.js +14 -0
- package/dist/active-context-transform.d.ts +267 -0
- package/dist/active-context-transform.js +31 -0
- package/dist/active-memory-bridge.d.ts +2 -2
- package/dist/active-memory-bridge.js +2 -2
- package/dist/active-recall.d.ts +2 -2
- package/dist/active-recall.js +17 -16
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/registry.js +3 -3
- package/dist/ambient-provenance.d.ts +2 -2
- package/dist/artifact-search.d.ts +2 -2
- package/dist/{auto-sync-XVMLL2RH.js → auto-sync-Q6Q2FVSC.js} +10 -10
- package/dist/behavior-learner.d.ts +2 -2
- package/dist/behavior-signals.d.ts +2 -2
- package/dist/bootstrap.d.ts +13 -12
- package/dist/briefing-window.d.ts +5 -3
- package/dist/briefing.d.ts +5 -3
- package/dist/briefing.js +33 -33
- package/dist/buffer-surprise-report.d.ts +2 -2
- package/dist/buffer-turn-helpers.d.ts +2 -2
- package/dist/buffer.d.ts +5 -3
- package/dist/buffer.js +24 -8
- package/dist/bulk-import/index.d.ts +4 -4
- package/dist/calibration.d.ts +2 -2
- package/dist/calibration.js +1 -1
- package/dist/capabilities.d.ts +2 -2
- package/dist/{capsule-merge-SGIVB3WA.js → capsule-merge-SEHERWWP.js} +4 -4
- package/dist/{catalog-DybwVNW3.d.ts → catalog-D1HgugTA.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +4 -4
- package/dist/causal-consolidation.d.ts +2 -2
- package/dist/causal-consolidation.js +34 -34
- package/dist/causal-trajectory-graph.d.ts +2 -2
- package/dist/{chunk-CFGU52XJ.js → chunk-23CVL7HS.js} +2 -2
- package/dist/{chunk-PO7NXBG2.js → chunk-2GF27PGH.js} +5 -5
- package/dist/{chunk-6CPUQ5D6.js → chunk-2LBAFHOQ.js} +15 -15
- package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
- package/dist/{chunk-IP4ZNT4U.js → chunk-33MFRY25.js} +2 -2
- package/dist/{chunk-VFYRYFLL.js → chunk-3TSU662L.js} +3 -3
- package/dist/chunk-43HUVDTD.js +114 -0
- package/dist/chunk-43HUVDTD.js.map +1 -0
- package/dist/{chunk-VXVZ2GM3.js → chunk-4FHRZD5T.js} +2 -2
- package/dist/{chunk-FP7YTTVO.js → chunk-4OFKZAJG.js} +2 -1
- package/dist/chunk-4OFKZAJG.js.map +1 -0
- package/dist/{chunk-5VPQSRQO.js → chunk-4STAANV7.js} +3 -3
- package/dist/{chunk-46WM6JX2.js → chunk-4ZWCQJNM.js} +5 -5
- package/dist/{chunk-LLQCM2U2.js → chunk-56IV4J5W.js} +617 -167
- package/dist/chunk-56IV4J5W.js.map +1 -0
- package/dist/{chunk-52II7PB6.js → chunk-645WOU5I.js} +4 -4
- package/dist/{chunk-YKWFK7XA.js → chunk-6CEGSTBD.js} +7 -7
- package/dist/{chunk-I7EX6KSH.js → chunk-6QDXA26G.js} +264 -210
- package/dist/chunk-6QDXA26G.js.map +1 -0
- package/dist/{chunk-GEPACVWN.js → chunk-6RUHELWR.js} +3 -3
- package/dist/{chunk-ZAOHJDKH.js → chunk-72OIT7KS.js} +4 -4
- package/dist/{chunk-KQAFEZQX.js → chunk-7LCGFUMB.js} +4 -4
- package/dist/{chunk-7TCGNUVP.js → chunk-7UTDHQZ5.js} +3 -3
- package/dist/{chunk-5HK3CJAR.js → chunk-7XOG75AU.js} +3 -3
- package/dist/{chunk-7BDZTALN.js → chunk-AJTG3CP7.js} +12 -2
- package/dist/chunk-AJTG3CP7.js.map +1 -0
- package/dist/{chunk-2LWQSV6A.js → chunk-AL3UYZ5N.js} +3 -2
- package/dist/chunk-AL3UYZ5N.js.map +1 -0
- package/dist/chunk-B32WYRXX.js +77 -0
- package/dist/chunk-B32WYRXX.js.map +1 -0
- package/dist/{chunk-C24UZSFW.js → chunk-CEH2AFXG.js} +6 -6
- package/dist/{chunk-YOXVZJFM.js → chunk-CFVTRUR3.js} +2 -2
- package/dist/{chunk-ACOC27BB.js → chunk-CN4VKV3S.js} +2 -2
- package/dist/{chunk-PMVPCZJZ.js → chunk-CTCGHNWN.js} +6 -6
- package/dist/{chunk-EGBDFJ36.js → chunk-DD5JFCWM.js} +2 -2
- package/dist/{chunk-T42L3S6A.js → chunk-DDX6KIXF.js} +2 -2
- package/dist/{chunk-JIYDRBVZ.js → chunk-DJORULH3.js} +2 -2
- package/dist/{chunk-WTOZBZNN.js → chunk-DMEHOEC7.js} +6 -6
- package/dist/{chunk-OPPBTPUU.js → chunk-DUAJKRR2.js} +4 -4
- package/dist/{chunk-XDL5CYZN.js → chunk-EEOUMG3J.js} +2 -1
- package/dist/{chunk-XDL5CYZN.js.map → chunk-EEOUMG3J.js.map} +1 -1
- package/dist/{chunk-SVVIASVX.js → chunk-EFQCDJZ2.js} +7 -7
- package/dist/{chunk-Q57GOHLF.js → chunk-EGALNSZ4.js} +3 -3
- package/dist/{chunk-KCT36JAW.js → chunk-ESNFSSO4.js} +2 -2
- package/dist/{chunk-XQ3HXAQH.js → chunk-ET2CNMLD.js} +4 -4
- package/dist/{chunk-Z4U3UN56.js → chunk-EZSCW4EM.js} +6 -6
- package/dist/{chunk-F6QHHRWP.js → chunk-FESUGFIL.js} +3 -3
- package/dist/{chunk-S3K2CIK5.js → chunk-FKKGCGYL.js} +3 -3
- package/dist/{chunk-BWGCOLEL.js → chunk-FTTJRVB7.js} +2 -2
- package/dist/{chunk-JAQXUGLN.js → chunk-FYWLSFFS.js} +2 -2
- package/dist/{chunk-BJTHRFFC.js → chunk-GEJKYA7D.js} +77 -36
- package/dist/chunk-GEJKYA7D.js.map +1 -0
- package/dist/chunk-GSKINLAK.js +267 -0
- package/dist/chunk-GSKINLAK.js.map +1 -0
- package/dist/{chunk-OPGL46PX.js → chunk-GX6FTSYH.js} +2 -2
- package/dist/{chunk-A32YEQAM.js → chunk-H7VDIF2V.js} +2 -2
- package/dist/{chunk-PDDSFELN.js → chunk-HJXA6ZM7.js} +2 -2
- package/dist/{chunk-RGCF4XNH.js → chunk-HNPE66LB.js} +8 -8
- package/dist/{chunk-SEA6M7SS.js → chunk-I5VB44ZK.js} +2 -2
- package/dist/{chunk-SDEPLF7V.js → chunk-IBJ6U753.js} +2 -2
- package/dist/{chunk-EUYWQ7TS.js → chunk-IEZ6CGTW.js} +2 -2
- package/dist/{chunk-RQE4TITU.js → chunk-IHGMRDEE.js} +431 -1834
- package/dist/chunk-IHGMRDEE.js.map +1 -0
- package/dist/{chunk-3RI5Y7KU.js → chunk-IVIAHQBR.js} +2 -2
- package/dist/{chunk-7WR462EM.js → chunk-J3OND5QT.js} +4 -4
- package/dist/{chunk-UW5NPZJ2.js → chunk-JALOAKSZ.js} +59 -7
- package/dist/chunk-JALOAKSZ.js.map +1 -0
- package/dist/{chunk-T3JQTCCO.js → chunk-JI7U6AS3.js} +4 -4
- package/dist/{chunk-DVYRD4HY.js → chunk-JRRQ747T.js} +36 -7
- package/dist/chunk-JRRQ747T.js.map +1 -0
- package/dist/{chunk-I32NKXE2.js → chunk-JTWZKNUH.js} +5 -5
- package/dist/chunk-K66OY4EI.js +202 -0
- package/dist/chunk-K66OY4EI.js.map +1 -0
- package/dist/{chunk-XAB6STPO.js → chunk-KODXCHXJ.js} +17 -3
- package/dist/chunk-KODXCHXJ.js.map +1 -0
- package/dist/{chunk-ZPUIRTIZ.js → chunk-KOLJJN5G.js} +12 -75
- package/dist/chunk-KOLJJN5G.js.map +1 -0
- package/dist/{chunk-FMQ4MOQO.js → chunk-KXIXO76C.js} +32 -19
- package/dist/chunk-KXIXO76C.js.map +1 -0
- package/dist/{chunk-VKCAHCBI.js → chunk-L4X4PJYK.js} +2 -2
- package/dist/chunk-LB7WCZHY.js +553 -0
- package/dist/chunk-LB7WCZHY.js.map +1 -0
- package/dist/{chunk-W4BMEGQA.js → chunk-LUDBXTBJ.js} +8 -8
- package/dist/{chunk-I4343FIA.js → chunk-MAH64N55.js} +28 -10
- package/dist/chunk-MAH64N55.js.map +1 -0
- package/dist/{chunk-RIAM7DND.js → chunk-ME35HVDJ.js} +2 -2
- package/dist/{chunk-H63EDPFJ.js → chunk-MI2OTWV5.js} +15 -2
- package/dist/{chunk-H63EDPFJ.js.map → chunk-MI2OTWV5.js.map} +1 -1
- package/dist/{chunk-LBFFNDFM.js → chunk-MINHJ55X.js} +1 -1
- package/dist/chunk-MINHJ55X.js.map +1 -0
- package/dist/{chunk-NG3MBQV4.js → chunk-MJRGVXPQ.js} +2 -2
- package/dist/{chunk-773TRRGT.js → chunk-MJUCDM3C.js} +2 -2
- package/dist/{chunk-7F27PCSN.js → chunk-MN5NOOI7.js} +2 -2
- package/dist/{chunk-JCWY73FK.js → chunk-N4F7ZSSG.js} +2 -2
- package/dist/{chunk-TR7DGXGI.js → chunk-NACLNNFQ.js} +5 -5
- package/dist/{chunk-LC2BDILZ.js → chunk-NBP4EX5N.js} +2 -2
- package/dist/{chunk-ZVPVTPGI.js → chunk-NNZFPYYX.js} +4 -4
- package/dist/{chunk-MFOSZUIT.js → chunk-NPIBN2VL.js} +2 -2
- package/dist/{chunk-IY7UXD3J.js → chunk-O57GM3FR.js} +2 -2
- package/dist/{chunk-I2HTKOOP.js → chunk-O7ERGZDA.js} +5 -5
- package/dist/{chunk-GTSVEEP3.js → chunk-OAJMQKQR.js} +3 -3
- package/dist/{chunk-HSZMX3ZJ.js → chunk-ODW5GDFE.js} +2 -2
- package/dist/{chunk-D4QVPP3G.js → chunk-PEBH5DCK.js} +18 -11
- package/dist/chunk-PEBH5DCK.js.map +1 -0
- package/dist/{chunk-J2WC5LF4.js → chunk-QBC33MPY.js} +2 -1
- package/dist/{chunk-EOHKUWXW.js → chunk-QCRJMU5V.js} +2 -2
- package/dist/chunk-QJCWK2A7.js +1466 -0
- package/dist/chunk-QJCWK2A7.js.map +1 -0
- package/dist/{chunk-THG4GYIE.js → chunk-RDGKVH6T.js} +11 -7
- package/dist/{chunk-THG4GYIE.js.map → chunk-RDGKVH6T.js.map} +1 -1
- package/dist/{chunk-5DH6PG4B.js → chunk-RZ3IZIJG.js} +3 -3
- package/dist/{chunk-AAXJNINV.js → chunk-SN4JXNLL.js} +2 -2
- package/dist/chunk-TB2MJRI6.js +866 -0
- package/dist/chunk-TB2MJRI6.js.map +1 -0
- package/dist/{chunk-7PHI6GUI.js → chunk-TEZ2HTC7.js} +42 -2
- package/dist/chunk-TEZ2HTC7.js.map +1 -0
- package/dist/{chunk-SVSRPG6M.js → chunk-TNGH4ZYI.js} +2 -2
- package/dist/{chunk-HZNYJN77.js → chunk-TNXNECAN.js} +6 -6
- package/dist/{chunk-JOEJG4SD.js → chunk-TVW4C7PV.js} +5 -5
- package/dist/{chunk-UFKPQBXH.js → chunk-U62OK7BB.js} +2 -2
- package/dist/{chunk-R2MZCYA6.js → chunk-UNUMFURP.js} +3 -3
- package/dist/{chunk-AX7UXCHJ.js → chunk-UYA36DQ7.js} +2 -1
- package/dist/chunk-UYA36DQ7.js.map +1 -0
- package/dist/{chunk-AFR6AIM4.js → chunk-VCKWULAK.js} +112 -87
- package/dist/chunk-VCKWULAK.js.map +1 -0
- package/dist/chunk-VOSWUO3K.js +100 -0
- package/dist/chunk-VOSWUO3K.js.map +1 -0
- package/dist/{chunk-YRVAKONL.js → chunk-VQ4AMTGZ.js} +1 -1
- package/dist/{chunk-3BCULS4U.js → chunk-VQNRICAQ.js} +145 -507
- package/dist/chunk-VQNRICAQ.js.map +1 -0
- package/dist/{chunk-RAIUTAZZ.js → chunk-WKAXBXVA.js} +2 -2
- package/dist/{chunk-ZIJDI4CP.js → chunk-WKJFIMVN.js} +2 -2
- package/dist/{chunk-SXIMQLGV.js → chunk-WVGXCBOC.js} +2 -2
- package/dist/{chunk-7BEPVIH3.js → chunk-X5YYSAZX.js} +4 -4
- package/dist/{chunk-FZEEWOI2.js → chunk-XJJYSX6F.js} +2 -2
- package/dist/{chunk-F635GAL7.js → chunk-XKNHFDTT.js} +33 -13
- package/dist/chunk-XKNHFDTT.js.map +1 -0
- package/dist/{chunk-UG6VXIOK.js → chunk-XSTNGNJP.js} +2 -2
- package/dist/{chunk-YDPAE2RD.js → chunk-YFLLGRXO.js} +2 -2
- package/dist/{chunk-EZ25VE3G.js → chunk-YNDLCWXS.js} +4 -4
- package/dist/{chunk-ANJXPFRS.js → chunk-YXFCALVT.js} +14 -14
- package/dist/{chunk-Q4WONDMJ.js → chunk-YYGZJPOK.js} +2 -2
- package/dist/{chunk-5HERQ5FX.js → chunk-Z3YEGSR4.js} +10 -10
- package/dist/{chunk-YWSQD2IB.js → chunk-ZJPM7GZ3.js} +2 -2
- package/dist/{chunk-5S4LQOPE.js → chunk-ZW4VXELZ.js} +2 -2
- package/dist/{cli-B322UMvB.d.ts → cli-BEkm2MEf.d.ts} +5 -5
- package/dist/cli.d.ts +17 -16
- package/dist/cli.js +126 -120
- package/dist/coding/export-okf-codegraph.d.ts +56 -0
- package/dist/coding/export-okf-codegraph.js +526 -0
- package/dist/coding/export-okf-codegraph.js.map +1 -0
- package/dist/coding/pre-action-gate.d.ts +2 -2
- package/dist/compounding/engine.d.ts +5 -3
- package/dist/compounding/engine.js +34 -34
- package/dist/compounding/preference-consolidator.d.ts +4 -4
- package/dist/compression-optimizer.d.ts +2 -2
- package/dist/config-security.js +2 -2
- package/dist/config.d.ts +2 -2
- package/dist/config.js +17 -16
- package/dist/connectors/codex-materialize-runner.d.ts +2 -2
- package/dist/connectors/codex-materialize-runner.js +33 -33
- package/dist/connectors/codex-materialize.d.ts +2 -2
- package/dist/connectors/index.d.ts +2 -2
- package/dist/connectors/index.js +33 -33
- package/dist/consolidation-provenance-check.d.ts +5 -3
- package/dist/consolidation-provenance-check.js +5 -5
- package/dist/consolidation-undo.d.ts +5 -3
- package/dist/consolidation-undo.js +3 -3
- package/dist/context-summary.d.ts +43 -0
- package/dist/context-summary.js +14 -0
- package/dist/context-summary.js.map +1 -0
- package/dist/contradiction/index.d.ts +6 -4
- package/dist/contradiction/index.js +10 -10
- package/dist/{contradiction-scan-AKUWPX5N.js → contradiction-scan-NOYMFG66.js} +3 -3
- package/dist/contradiction-scan-NOYMFG66.js.map +1 -0
- package/dist/converge-config.d.ts +2 -2
- package/dist/convergence-refresh.d.ts +5 -3
- package/dist/convergence-refresh.js +36 -36
- package/dist/conversation-index/backend.d.ts +2 -2
- package/dist/conversation-index/chunker.d.ts +2 -2
- package/dist/conversation-index/faiss-adapter.d.ts +2 -2
- package/dist/conversation-index/indexer.d.ts +2 -2
- package/dist/conversation-index/search.d.ts +2 -2
- package/dist/corpus-watermark.d.ts +2 -2
- package/dist/corpus-watermark.js +35 -35
- package/dist/cross-lingual-recall.d.ts +2 -2
- package/dist/dashboard-runtime.js +2 -2
- package/dist/day-summary.d.ts +2 -2
- package/dist/delinearize.d.ts +2 -2
- package/dist/dependency-propagation-config.d.ts +2 -2
- package/dist/{dependency-propagation-delivery-BGcNairQ.d.ts → dependency-propagation-delivery-BCpeo14F.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +2 -2
- package/dist/direct-answer.d.ts +2 -2
- package/dist/embedding-fallback.d.ts +2 -2
- package/dist/enrichment/index.d.ts +2 -2
- package/dist/entity-origin-fields.d.ts +2 -2
- package/dist/entity-retrieval.d.ts +5 -3
- package/dist/entity-retrieval.js +34 -34
- package/dist/entity-schema.d.ts +2 -2
- package/dist/episodic-context.d.ts +2 -2
- package/dist/eval-trajectory-contracts.d.ts +2 -2
- package/dist/eval-trajectory-store.d.ts +2 -2
- package/dist/eval-trajectory.d.ts +2 -2
- package/dist/event-order-recall.js +3 -3
- package/dist/explicit-capture.d.ts +13 -12
- package/dist/explicit-capture.js +12 -12
- package/dist/external-wiki-access.d.ts +15 -14
- package/dist/external-wiki-access.js +66 -63
- package/dist/external-wiki-collection-registration.d.ts +2 -2
- package/dist/external-wiki-collection.d.ts +2 -2
- package/dist/external-wiki-mcp-tools.d.ts +15 -14
- package/dist/extraction-error-classification.d.ts +2 -2
- package/dist/extraction-faithfulness.d.ts +2 -2
- package/dist/extraction-faithfulness.js +2 -2
- package/dist/extraction-judge-telemetry.d.ts +2 -2
- package/dist/extraction-judge-training.d.ts +2 -2
- package/dist/extraction-judge.d.ts +2 -2
- package/dist/extraction-judge.js +2 -2
- package/dist/extraction-liveness.d.ts +2 -2
- package/dist/extraction-normalization.d.ts +2 -2
- package/dist/extraction-prompt.d.ts +2 -2
- package/dist/extraction-source-grounding-rules.d.ts +2 -2
- package/dist/extraction-source-grounding.d.ts +2 -2
- package/dist/extraction.d.ts +2 -2
- package/dist/extraction.js +47 -44
- package/dist/fallback-llm.d.ts +8 -2
- package/dist/fallback-llm.js +1 -1
- package/dist/{first-start-migration-4NETATFF.js → first-start-migration-KHIMCBIC.js} +3 -3
- package/dist/{forget-SZ2BXDGF.js → forget-2AE4MDK3.js} +3 -3
- package/dist/graph-dashboard-diff.d.ts +2 -2
- package/dist/graph-dashboard-key.d.ts +2 -2
- package/dist/graph-dashboard-parser.d.ts +2 -2
- package/dist/graph-edge-reinforcement.d.ts +2 -2
- package/dist/graph-path-reconstruction.d.ts +2 -2
- package/dist/graph-path-scoring.d.ts +2 -2
- package/dist/graph-snapshot.d.ts +2 -2
- package/dist/graph.d.ts +2 -2
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/importance.d.ts +2 -2
- package/dist/importers/index.d.ts +2 -2
- package/dist/in-flight-reads.d.ts +2 -2
- package/dist/{index-By2QUAMh.d.ts → index-D_pyMUaP.d.ts} +2 -2
- package/dist/index.d.ts +261 -30
- package/dist/index.js +321 -257
- package/dist/intent.d.ts +2 -2
- package/dist/lcm/engine.d.ts +3 -3
- package/dist/lcm/engine.js +5 -4
- package/dist/lcm/index.d.ts +4 -3
- package/dist/lcm/index.js +12 -11
- package/dist/lcm/summarizer.d.ts +4 -6
- package/dist/lcm/summarizer.js +2 -1
- package/dist/lcm/tools.d.ts +4 -4
- package/dist/lifecycle.d.ts +2 -2
- package/dist/live-connectors-runner.d.ts +2 -2
- package/dist/local-llm.d.ts +2 -2
- package/dist/local-model-endpoint.d.ts +2 -2
- package/dist/location/index.d.ts +315 -6
- package/dist/location/index.js +151 -19
- package/dist/maintenance/memory-governance.d.ts +2 -2
- package/dist/maintenance/memory-governance.js +34 -34
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +5 -3
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +33 -33
- package/dist/maintenance/rebuild-memory-projection.d.ts +5 -3
- package/dist/maintenance/rebuild-memory-projection.js +35 -35
- package/dist/{maintenance-Dm2McrIx.d.ts → maintenance-DDUX9d6D.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +15 -14
- package/dist/mcp-read-only-tools.js +1 -1
- package/dist/memory-action-policy.d.ts +18 -3
- package/dist/memory-action-policy.js +3 -1
- package/dist/memory-cache.d.ts +2 -2
- package/dist/memory-controller.d.ts +2 -2
- package/dist/memory-controller.js +2 -2
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -2
- package/dist/memory-projection-mutations.js +3 -3
- package/dist/memory-projection-store.d.ts +2 -2
- package/dist/memory-projection-store.js +1 -1
- package/dist/memory-provenance.d.ts +2 -2
- package/dist/memory-snapshot.d.ts +2 -2
- package/dist/memory-subject-cli.d.ts +15 -14
- package/dist/memory-subject.d.ts +15 -14
- package/dist/memory-subject.js +5 -5
- package/dist/memory-worth-outcomes.d.ts +5 -3
- package/dist/models-json.d.ts +2 -2
- package/dist/namespaces/migrate.d.ts +6 -4
- package/dist/namespaces/migrate.js +34 -34
- package/dist/namespaces/principal.d.ts +2 -2
- package/dist/namespaces/search.d.ts +2 -2
- package/dist/namespaces/search.js +8 -8
- package/dist/namespaces/storage.d.ts +6 -4
- package/dist/namespaces/storage.js +33 -33
- package/dist/native-knowledge.d.ts +2 -2
- package/dist/offline-sync-file-io.js +3 -3
- package/dist/offline-sync-impression-drain.d.ts +2 -2
- package/dist/offline-sync-impression-drain.js +9 -9
- package/dist/offline-sync.js +4 -4
- package/dist/operator-doctor-corpus.d.ts +2 -2
- package/dist/operator-doctor-corpus.js +36 -36
- package/dist/operator-doctor-replica.d.ts +2 -2
- package/dist/operator-toolkit.d.ts +6 -4
- package/dist/operator-toolkit.js +56 -55
- package/dist/orchestration/compression-guideline-coordinator.d.ts +5 -3
- package/dist/orchestration/maintenance.d.ts +7 -5
- package/dist/orchestration/maintenance.js +48 -47
- package/dist/{orchestrator-Co1DyfuP.d.ts → orchestrator-3F4jihCo.d.ts} +8 -8
- package/dist/orchestrator.d.ts +13 -12
- package/dist/orchestrator.js +182 -174
- package/dist/page-versioning.js +3 -3
- package/dist/patterns-cli.d.ts +2 -2
- package/dist/{pipeline-DotMnb6y.d.ts → pipeline-CB1dj6Uh.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -2
- package/dist/proactive-contention.d.ts +2 -2
- package/dist/provenance.d.ts +2 -2
- package/dist/{public-http-PJRtnSi-.d.ts → public-http-34-JIAGQ.d.ts} +1 -1
- package/dist/{purge-GB7PZHT2.js → purge-OP6BEDFY.js} +2 -2
- package/dist/{qmd-BP0n11fR.d.ts → qmd-edLLZXc5.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +3 -3
- package/dist/qmd-recall-cache.d.ts +2 -2
- package/dist/qmd.d.ts +3 -3
- package/dist/qmd.js +4 -4
- package/dist/recall-concurrency-config.d.ts +2 -2
- package/dist/recall-disclosure-escalation.d.ts +2 -2
- package/dist/recall-explain-renderer.d.ts +2 -2
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +2 -2
- package/dist/recall-planner-llm.d.ts +2 -2
- package/dist/recall-planner-llm.js +1 -1
- package/dist/recall-state.d.ts +2 -2
- package/dist/recall-tag-filter.d.ts +2 -2
- package/dist/recall-timings.d.ts +2 -2
- package/dist/recall-xray-cli.d.ts +2 -2
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +2 -2
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +2 -2
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +2 -2
- package/dist/reconcile/manifest.d.ts +2 -2
- package/dist/reconcile/manifest.js +5 -5
- package/dist/reconcile/plan.d.ts +2 -2
- package/dist/replay/normalizers/chatgpt.d.ts +2 -2
- package/dist/replay/normalizers/claude.d.ts +2 -2
- package/dist/replay/normalizers/openclaw.d.ts +2 -2
- package/dist/replay/normalizers/shared.d.ts +2 -2
- package/dist/replay/runner.d.ts +2 -2
- package/dist/replay/types.d.ts +2 -2
- package/dist/replica-divergence.d.ts +2 -2
- package/dist/replica-peers-config.d.ts +2 -2
- package/dist/{resolution-4552BNRV.js → resolution-4DLI3IOR.js} +11 -11
- package/dist/resolution-4DLI3IOR.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +2 -2
- package/dist/resume-bundles.js +18 -17
- package/dist/retrieval-agents.d.ts +3 -3
- package/dist/retrieval-tiers.d.ts +2 -2
- package/dist/routing/engine.d.ts +2 -2
- package/dist/routing/store.d.ts +2 -2
- package/dist/salvage-envelope.d.ts +2 -2
- package/dist/salvage-envelope.js +7 -7
- package/dist/schemas.d.ts +572 -107
- package/dist/schemas.js +3 -1
- package/dist/{scope-profiles-6ChZKTy-.d.ts → scope-profiles-BF2lu81V.d.ts} +1 -1
- package/dist/search/document-scanner.js +1 -1
- package/dist/search/embed-helper.d.ts +2 -2
- package/dist/search/factory.d.ts +2 -2
- package/dist/search/factory.js +7 -7
- package/dist/search/index.d.ts +2 -2
- package/dist/search/index.js +13 -13
- package/dist/search/lancedb-backend.d.ts +2 -2
- package/dist/search/lancedb-backend.js +1 -1
- package/dist/search/meilisearch-backend.d.ts +2 -2
- package/dist/search/meilisearch-backend.js +1 -1
- package/dist/search/noop-backend.d.ts +2 -2
- package/dist/search/orama-backend.d.ts +2 -2
- package/dist/search/orama-backend.js +1 -1
- package/dist/search/port.d.ts +2 -2
- package/dist/search/remote-backend.d.ts +2 -2
- package/dist/secure-store/index.js +3 -3
- package/dist/{semantic-consolidation-DziYcW5J.d.ts → semantic-consolidation-5OuWXBRt.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -3
- package/dist/semantic-consolidation.js +37 -37
- package/dist/semantic-rule-promotion.js +33 -33
- package/dist/semantic-rule-verifier.d.ts +2 -2
- package/dist/semantic-rule-verifier.js +33 -33
- package/dist/{service-C7rIBuK_.d.ts → service-CrqEhLXD.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +2 -2
- package/dist/session-observer-state.d.ts +2 -2
- package/dist/shared-context/manager.d.ts +2 -2
- package/dist/signal.d.ts +2 -2
- package/dist/source-agent-qualifier.d.ts +2 -2
- package/dist/source-agent-qualifier.js +42 -39
- package/dist/standup/build.d.ts +16 -0
- package/dist/standup/build.js +17 -0
- package/dist/standup/build.js.map +1 -0
- package/dist/{storage-B1hEx8Xg.d.ts → storage-BQn-xnxm.d.ts} +4 -1
- package/dist/storage.d.ts +5 -3
- package/dist/storage.js +32 -32
- package/dist/subject-config.d.ts +2 -2
- package/dist/subject-config.js +6 -6
- package/dist/summarizer.d.ts +2 -2
- package/dist/summarizer.js +2 -2
- package/dist/summary-snapshot.d.ts +2 -2
- package/dist/support-passport/index.d.ts +20 -19
- package/dist/support-passport/index.js +68 -65
- package/dist/temporal-supersession.d.ts +3 -3
- package/dist/temporal-timeline-recall.d.ts +2 -2
- package/dist/temporal-validity.d.ts +2 -2
- package/dist/threading.d.ts +2 -2
- package/dist/tier-migration.d.ts +5 -3
- package/dist/tier-routing.d.ts +2 -2
- package/dist/tier-routing.js +2 -2
- package/dist/{tier-stats-4B5IJ3NE.js → tier-stats-2TOW3QNL.js} +3 -3
- package/dist/topics.d.ts +2 -2
- package/dist/transcript.d.ts +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +5 -5
- package/dist/transfer/export-okf.d.ts +39 -0
- package/dist/transfer/export-okf.js +112 -0
- package/dist/transfer/export-okf.js.map +1 -0
- package/dist/transfer/types.d.ts +12 -12
- package/dist/trust-score-stage.d.ts +2 -2
- package/dist/trust-score.d.ts +2 -2
- package/dist/{types-BHDNxGTT.d.ts → types-BRpcNjHZ.d.ts} +119 -3
- package/dist/types.d.ts +2 -2
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -2
- package/dist/verified-recall.js +33 -33
- package/dist/who-knows-cli.d.ts +15 -14
- package/dist/who-knows-cli.js +34 -34
- package/dist/who-knows.d.ts +15 -14
- package/dist/who-knows.js +33 -33
- package/dist/write-envelope.d.ts +2 -2
- package/dist/write-envelope.js +6 -6
- package/package.json +54 -3
- package/src/access-admin-ops-surface.ts +6 -1
- package/src/access-boundary.ts +1 -0
- package/src/access-http.ts +3 -1
- package/src/access-mcp-output-schemas.ts +1 -0
- package/src/access-mcp.ts +3 -3
- package/src/access-operations.ts +1 -0
- package/src/access-service-offline-file-content.test.ts +63 -0
- package/src/access-surface-catalog.ts +2 -0
- package/src/active-context-config.ts +98 -0
- package/src/active-context-transform.test.ts +533 -0
- package/src/active-context-transform.ts +981 -0
- package/src/activity/config.test.ts +1 -0
- package/src/activity/config.ts +21 -1
- package/src/activity/index.ts +1 -0
- package/src/activity/timeline/build.ts +279 -0
- package/src/activity/timeline/categories.ts +111 -0
- package/src/activity/timeline/classify.ts +110 -0
- package/src/activity/timeline/corrections.ts +145 -0
- package/src/activity/timeline/index.ts +6 -0
- package/src/activity/timeline/timeline.test.ts +277 -0
- package/src/activity/timeline/types.ts +106 -0
- package/src/activity/types.ts +6 -0
- package/src/cli/okf-commands.ts +45 -0
- package/src/cli.ts +2 -2
- package/src/coding/export-okf-codegraph.test.ts +381 -0
- package/src/coding/export-okf-codegraph.ts +565 -0
- package/src/config.test.ts +1 -0
- package/src/config.ts +3 -5
- package/src/context-summary.ts +182 -0
- package/src/extraction-prompt-safety.test.ts +14 -2
- package/src/extraction.ts +21 -1
- package/src/fallback-llm.test.ts +134 -0
- package/src/fallback-llm.ts +77 -5
- package/src/index.ts +4 -11
- package/src/lcm/summarizer.ts +14 -93
- package/src/location/access-operations.ts +17 -8
- package/src/location/backfill.ts +137 -0
- package/src/location/config.test.ts +3 -0
- package/src/location/config.ts +46 -2
- package/src/location/http-glue.ts +1 -1
- package/src/location/index.ts +3 -0
- package/src/location/intervals.ts +1 -0
- package/src/location/matching.test.ts +65 -0
- package/src/location/matching.ts +354 -0
- package/src/location/mcp-tools.ts +2 -1
- package/src/location/surfaces.test.ts +15 -2
- package/src/location/surfaces.ts +95 -18
- package/src/location/tagging.test.ts +119 -0
- package/src/location/tagging.ts +277 -0
- package/src/location/types.ts +23 -1
- package/src/mcp-read-only-tools.ts +1 -0
- package/src/memory-action-policy.ts +28 -0
- package/src/memory-projection-store.ts +3 -1
- package/src/okf/cli.ts +18 -5
- package/src/okf/config.ts +5 -0
- package/src/okf/index-files.test.ts +60 -0
- package/src/okf/index-files.ts +114 -0
- package/src/okf/render.ts +133 -0
- package/src/okf/type-mapping.test.ts +3 -0
- package/src/okf/type-mapping.ts +2 -0
- package/src/orchestration/extraction-run.ts +2 -1
- package/src/orchestration/generic-recall-paths.ts +4 -3
- package/src/schemas.ts +17 -1
- package/src/standup/access-operations.ts +14 -0
- package/src/standup/build.test.ts +34 -0
- package/src/standup/build.ts +115 -0
- package/src/standup/http-glue.ts +15 -0
- package/src/standup/mcp-tools.ts +16 -0
- package/src/storage/context-transform-ledger.ts +39 -0
- package/src/storage/secure-line-reader.ts +50 -1
- package/src/storage.ts +4 -1
- package/src/support-passport/card-projection.ts +1 -0
- package/src/support-passport/card-service-commit-forwarding.test.ts +1 -0
- package/src/support-passport/card-service.test.ts +75 -1
- package/src/support-passport/card-service.ts +6 -3
- package/src/support-passport/card-state.ts +5 -1
- package/src/support-passport/offline-sync-guard.ts +14 -1
- package/src/transfer/export-okf.test.ts +164 -0
- package/src/transfer/export-okf.ts +286 -0
- package/src/types.ts +2 -3
- package/dist/chunk-2LWQSV6A.js.map +0 -1
- package/dist/chunk-3BCULS4U.js.map +0 -1
- package/dist/chunk-7BDZTALN.js.map +0 -1
- package/dist/chunk-7PHI6GUI.js.map +0 -1
- package/dist/chunk-AFR6AIM4.js.map +0 -1
- package/dist/chunk-AX7UXCHJ.js.map +0 -1
- package/dist/chunk-BJTHRFFC.js.map +0 -1
- package/dist/chunk-D4QVPP3G.js.map +0 -1
- package/dist/chunk-DVYRD4HY.js.map +0 -1
- package/dist/chunk-F635GAL7.js.map +0 -1
- package/dist/chunk-FMQ4MOQO.js.map +0 -1
- package/dist/chunk-FP7YTTVO.js.map +0 -1
- package/dist/chunk-I4343FIA.js.map +0 -1
- package/dist/chunk-I7EX6KSH.js.map +0 -1
- package/dist/chunk-LBFFNDFM.js.map +0 -1
- package/dist/chunk-LLQCM2U2.js.map +0 -1
- package/dist/chunk-RQE4TITU.js.map +0 -1
- package/dist/chunk-UW5NPZJ2.js.map +0 -1
- package/dist/chunk-XAB6STPO.js.map +0 -1
- package/dist/chunk-ZPUIRTIZ.js.map +0 -1
- package/dist/types-CM86alG1.d.ts +0 -89
- /package/dist/{contradiction-scan-AKUWPX5N.js.map → active-context-config.js.map} +0 -0
- /package/dist/{resolution-4552BNRV.js.map → active-context-transform.js.map} +0 -0
- /package/dist/{auto-sync-XVMLL2RH.js.map → auto-sync-Q6Q2FVSC.js.map} +0 -0
- /package/dist/{capsule-merge-SGIVB3WA.js.map → capsule-merge-SEHERWWP.js.map} +0 -0
- /package/dist/{chunk-CFGU52XJ.js.map → chunk-23CVL7HS.js.map} +0 -0
- /package/dist/{chunk-PO7NXBG2.js.map → chunk-2GF27PGH.js.map} +0 -0
- /package/dist/{chunk-6CPUQ5D6.js.map → chunk-2LBAFHOQ.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
- /package/dist/{chunk-IP4ZNT4U.js.map → chunk-33MFRY25.js.map} +0 -0
- /package/dist/{chunk-VFYRYFLL.js.map → chunk-3TSU662L.js.map} +0 -0
- /package/dist/{chunk-VXVZ2GM3.js.map → chunk-4FHRZD5T.js.map} +0 -0
- /package/dist/{chunk-5VPQSRQO.js.map → chunk-4STAANV7.js.map} +0 -0
- /package/dist/{chunk-46WM6JX2.js.map → chunk-4ZWCQJNM.js.map} +0 -0
- /package/dist/{chunk-52II7PB6.js.map → chunk-645WOU5I.js.map} +0 -0
- /package/dist/{chunk-YKWFK7XA.js.map → chunk-6CEGSTBD.js.map} +0 -0
- /package/dist/{chunk-GEPACVWN.js.map → chunk-6RUHELWR.js.map} +0 -0
- /package/dist/{chunk-ZAOHJDKH.js.map → chunk-72OIT7KS.js.map} +0 -0
- /package/dist/{chunk-KQAFEZQX.js.map → chunk-7LCGFUMB.js.map} +0 -0
- /package/dist/{chunk-7TCGNUVP.js.map → chunk-7UTDHQZ5.js.map} +0 -0
- /package/dist/{chunk-5HK3CJAR.js.map → chunk-7XOG75AU.js.map} +0 -0
- /package/dist/{chunk-C24UZSFW.js.map → chunk-CEH2AFXG.js.map} +0 -0
- /package/dist/{chunk-YOXVZJFM.js.map → chunk-CFVTRUR3.js.map} +0 -0
- /package/dist/{chunk-ACOC27BB.js.map → chunk-CN4VKV3S.js.map} +0 -0
- /package/dist/{chunk-PMVPCZJZ.js.map → chunk-CTCGHNWN.js.map} +0 -0
- /package/dist/{chunk-EGBDFJ36.js.map → chunk-DD5JFCWM.js.map} +0 -0
- /package/dist/{chunk-T42L3S6A.js.map → chunk-DDX6KIXF.js.map} +0 -0
- /package/dist/{chunk-JIYDRBVZ.js.map → chunk-DJORULH3.js.map} +0 -0
- /package/dist/{chunk-WTOZBZNN.js.map → chunk-DMEHOEC7.js.map} +0 -0
- /package/dist/{chunk-OPPBTPUU.js.map → chunk-DUAJKRR2.js.map} +0 -0
- /package/dist/{chunk-SVVIASVX.js.map → chunk-EFQCDJZ2.js.map} +0 -0
- /package/dist/{chunk-Q57GOHLF.js.map → chunk-EGALNSZ4.js.map} +0 -0
- /package/dist/{chunk-KCT36JAW.js.map → chunk-ESNFSSO4.js.map} +0 -0
- /package/dist/{chunk-XQ3HXAQH.js.map → chunk-ET2CNMLD.js.map} +0 -0
- /package/dist/{chunk-Z4U3UN56.js.map → chunk-EZSCW4EM.js.map} +0 -0
- /package/dist/{chunk-F6QHHRWP.js.map → chunk-FESUGFIL.js.map} +0 -0
- /package/dist/{chunk-S3K2CIK5.js.map → chunk-FKKGCGYL.js.map} +0 -0
- /package/dist/{chunk-BWGCOLEL.js.map → chunk-FTTJRVB7.js.map} +0 -0
- /package/dist/{chunk-JAQXUGLN.js.map → chunk-FYWLSFFS.js.map} +0 -0
- /package/dist/{chunk-OPGL46PX.js.map → chunk-GX6FTSYH.js.map} +0 -0
- /package/dist/{chunk-A32YEQAM.js.map → chunk-H7VDIF2V.js.map} +0 -0
- /package/dist/{chunk-PDDSFELN.js.map → chunk-HJXA6ZM7.js.map} +0 -0
- /package/dist/{chunk-RGCF4XNH.js.map → chunk-HNPE66LB.js.map} +0 -0
- /package/dist/{chunk-SEA6M7SS.js.map → chunk-I5VB44ZK.js.map} +0 -0
- /package/dist/{chunk-SDEPLF7V.js.map → chunk-IBJ6U753.js.map} +0 -0
- /package/dist/{chunk-EUYWQ7TS.js.map → chunk-IEZ6CGTW.js.map} +0 -0
- /package/dist/{chunk-3RI5Y7KU.js.map → chunk-IVIAHQBR.js.map} +0 -0
- /package/dist/{chunk-7WR462EM.js.map → chunk-J3OND5QT.js.map} +0 -0
- /package/dist/{chunk-T3JQTCCO.js.map → chunk-JI7U6AS3.js.map} +0 -0
- /package/dist/{chunk-I32NKXE2.js.map → chunk-JTWZKNUH.js.map} +0 -0
- /package/dist/{chunk-VKCAHCBI.js.map → chunk-L4X4PJYK.js.map} +0 -0
- /package/dist/{chunk-W4BMEGQA.js.map → chunk-LUDBXTBJ.js.map} +0 -0
- /package/dist/{chunk-RIAM7DND.js.map → chunk-ME35HVDJ.js.map} +0 -0
- /package/dist/{chunk-NG3MBQV4.js.map → chunk-MJRGVXPQ.js.map} +0 -0
- /package/dist/{chunk-773TRRGT.js.map → chunk-MJUCDM3C.js.map} +0 -0
- /package/dist/{chunk-7F27PCSN.js.map → chunk-MN5NOOI7.js.map} +0 -0
- /package/dist/{chunk-JCWY73FK.js.map → chunk-N4F7ZSSG.js.map} +0 -0
- /package/dist/{chunk-TR7DGXGI.js.map → chunk-NACLNNFQ.js.map} +0 -0
- /package/dist/{chunk-LC2BDILZ.js.map → chunk-NBP4EX5N.js.map} +0 -0
- /package/dist/{chunk-ZVPVTPGI.js.map → chunk-NNZFPYYX.js.map} +0 -0
- /package/dist/{chunk-MFOSZUIT.js.map → chunk-NPIBN2VL.js.map} +0 -0
- /package/dist/{chunk-IY7UXD3J.js.map → chunk-O57GM3FR.js.map} +0 -0
- /package/dist/{chunk-I2HTKOOP.js.map → chunk-O7ERGZDA.js.map} +0 -0
- /package/dist/{chunk-GTSVEEP3.js.map → chunk-OAJMQKQR.js.map} +0 -0
- /package/dist/{chunk-HSZMX3ZJ.js.map → chunk-ODW5GDFE.js.map} +0 -0
- /package/dist/{chunk-J2WC5LF4.js.map → chunk-QBC33MPY.js.map} +0 -0
- /package/dist/{chunk-EOHKUWXW.js.map → chunk-QCRJMU5V.js.map} +0 -0
- /package/dist/{chunk-5DH6PG4B.js.map → chunk-RZ3IZIJG.js.map} +0 -0
- /package/dist/{chunk-AAXJNINV.js.map → chunk-SN4JXNLL.js.map} +0 -0
- /package/dist/{chunk-SVSRPG6M.js.map → chunk-TNGH4ZYI.js.map} +0 -0
- /package/dist/{chunk-HZNYJN77.js.map → chunk-TNXNECAN.js.map} +0 -0
- /package/dist/{chunk-JOEJG4SD.js.map → chunk-TVW4C7PV.js.map} +0 -0
- /package/dist/{chunk-UFKPQBXH.js.map → chunk-U62OK7BB.js.map} +0 -0
- /package/dist/{chunk-R2MZCYA6.js.map → chunk-UNUMFURP.js.map} +0 -0
- /package/dist/{chunk-YRVAKONL.js.map → chunk-VQ4AMTGZ.js.map} +0 -0
- /package/dist/{chunk-RAIUTAZZ.js.map → chunk-WKAXBXVA.js.map} +0 -0
- /package/dist/{chunk-ZIJDI4CP.js.map → chunk-WKJFIMVN.js.map} +0 -0
- /package/dist/{chunk-SXIMQLGV.js.map → chunk-WVGXCBOC.js.map} +0 -0
- /package/dist/{chunk-7BEPVIH3.js.map → chunk-X5YYSAZX.js.map} +0 -0
- /package/dist/{chunk-FZEEWOI2.js.map → chunk-XJJYSX6F.js.map} +0 -0
- /package/dist/{chunk-UG6VXIOK.js.map → chunk-XSTNGNJP.js.map} +0 -0
- /package/dist/{chunk-YDPAE2RD.js.map → chunk-YFLLGRXO.js.map} +0 -0
- /package/dist/{chunk-EZ25VE3G.js.map → chunk-YNDLCWXS.js.map} +0 -0
- /package/dist/{chunk-ANJXPFRS.js.map → chunk-YXFCALVT.js.map} +0 -0
- /package/dist/{chunk-Q4WONDMJ.js.map → chunk-YYGZJPOK.js.map} +0 -0
- /package/dist/{chunk-5HERQ5FX.js.map → chunk-Z3YEGSR4.js.map} +0 -0
- /package/dist/{chunk-YWSQD2IB.js.map → chunk-ZJPM7GZ3.js.map} +0 -0
- /package/dist/{chunk-5S4LQOPE.js.map → chunk-ZW4VXELZ.js.map} +0 -0
- /package/dist/{first-start-migration-4NETATFF.js.map → first-start-migration-KHIMCBIC.js.map} +0 -0
- /package/dist/{forget-SZ2BXDGF.js.map → forget-2AE4MDK3.js.map} +0 -0
- /package/dist/{purge-GB7PZHT2.js.map → purge-OP6BEDFY.js.map} +0 -0
- /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(
|
|
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
|
-
{
|
|
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
|
);
|
package/src/fallback-llm.test.ts
CHANGED
|
@@ -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
|
+
});
|
package/src/fallback-llm.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
900
|
-
strict: true,
|
|
901
|
-
schema: options.responsesJsonSchema
|
|
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
|