@remnic/core 9.69.37 → 9.69.39
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 +14 -12
- package/dist/access-admin-ops-surface.js +86 -83
- package/dist/access-authorization-probe.d.ts +14 -12
- package/dist/access-authorization-probe.js +87 -84
- package/dist/access-boundary.d.ts +14 -12
- package/dist/access-boundary.js +86 -83
- package/dist/access-cli.js +197 -191
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +2 -1
- package/dist/access-extraction-force-flush.d.ts +14 -12
- package/dist/access-extraction-force-flush.js +86 -83
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-briefing.d.ts +14 -12
- package/dist/access-http-briefing.js +87 -84
- package/dist/access-http-lcm-compaction.d.ts +14 -12
- package/dist/access-http-lifecycle-flush.d.ts +14 -12
- package/dist/access-http-offline-stream.d.ts +14 -12
- package/dist/access-http-query.d.ts +3 -2
- package/dist/access-http-query.js +88 -85
- package/dist/access-http.d.ts +15 -13
- package/dist/access-http.js +108 -105
- package/dist/access-identity-continuity-surface.d.ts +12 -10
- package/dist/access-identity-continuity-surface.js +86 -83
- package/dist/access-lcm-surface.d.ts +14 -12
- package/dist/access-lcm-surface.js +86 -83
- package/dist/access-mcp.d.ts +14 -12
- package/dist/access-mcp.js +97 -94
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-CV5cHujx.d.ts → access-namespace-preflight-DY4z6L5X.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +86 -83
- package/dist/access-observe-transcript.d.ts +12 -10
- package/dist/access-observe-write-category.d.ts +37 -0
- package/dist/access-observe-write-category.js +34 -0
- package/dist/access-observe-write-surface.d.ts +17 -15
- package/dist/access-observe-write-surface.js +86 -83
- package/dist/access-offline-manifest.d.ts +12 -10
- package/dist/access-offline-manifest.js +15 -15
- package/dist/access-operations-batch.js +91 -88
- package/dist/access-operations.d.ts +17 -30
- package/dist/access-operations.js +96 -93
- package/dist/access-recall-concurrency.d.ts +14 -12
- package/dist/access-recall-concurrency.js +86 -83
- package/dist/access-recall-response.d.ts +14 -12
- package/dist/access-recall-response.js +86 -83
- package/dist/access-recall-surface.d.ts +14 -12
- package/dist/access-recall-surface.js +86 -83
- package/dist/access-schema.d.ts +210 -107
- package/dist/access-schema.js +9 -15
- package/dist/{access-service-DwHC7lcV.d.ts → access-service-MY4bsr_Q.d.ts} +101 -77
- package/dist/access-service-helpers.d.ts +14 -12
- package/dist/access-service.d.ts +14 -12
- package/dist/access-service.js +86 -83
- package/dist/access-surface-catalog.d.ts +14 -12
- package/dist/access-surface-catalog.js +88 -85
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +5 -3
- package/dist/action-confidence.d.ts +2 -1
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-memory-bridge.js +3 -3
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +20 -17
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +2 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +2 -1
- package/dist/artifact-search.d.ts +2 -1
- package/dist/{auto-sync-FSRJDU63.js → auto-sync-RP4C6ZPF.js} +11 -9
- package/dist/{auto-sync-FSRJDU63.js.map → auto-sync-RP4C6ZPF.js.map} +1 -1
- package/dist/background-generation-config.d.ts +10 -0
- package/dist/background-generation-config.js +9 -0
- package/dist/background-generation.d.ts +25 -0
- package/dist/background-generation.js +11 -0
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +12 -10
- package/dist/briefing-window.d.ts +3 -2
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +27 -26
- package/dist/buffer-surprise-report.d.ts +2 -1
- package/dist/buffer-turn-helpers.d.ts +2 -1
- package/dist/buffer.d.ts +3 -2
- package/dist/buffer.js +8 -8
- package/dist/bulk-import/index.d.ts +4 -3
- package/dist/calibration.d.ts +3 -1
- package/dist/calibration.js +4 -2
- package/dist/calibration.js.map +1 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
- package/dist/{capsule-merge-ZCXUPLNJ.js → capsule-merge-IPG4IOFP.js} +2 -2
- package/dist/{catalog-Cl4H8N89.d.ts → catalog-CW87xGx8.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.d.ts +2 -1
- package/dist/causal-consolidation.js +29 -28
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.d.ts +2 -1
- package/dist/causal-trajectory-graph.js +2 -2
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-YHU5XUF4.js → chunk-27MKMTBY.js} +2 -2
- package/dist/{chunk-TK4FHQRN.js → chunk-2J3V5QEO.js} +4 -4
- package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
- package/dist/chunk-2QG4SLZI.js +44 -0
- package/dist/chunk-2QG4SLZI.js.map +1 -0
- package/dist/{chunk-TFRDUD3M.js → chunk-2ZTDRNCS.js} +2 -2
- package/dist/{chunk-PWPIERBM.js → chunk-37CAEC7E.js} +4 -4
- package/dist/{chunk-X7BCM2NA.js → chunk-3EKVN2OP.js} +2 -2
- package/dist/{chunk-S2ULTQZR.js → chunk-3N3PBBEH.js} +2 -2
- package/dist/{chunk-XCF3SFHD.js → chunk-3NPNBVFR.js} +2 -2
- package/dist/{chunk-JO5TQAKW.js → chunk-4BCHFSC7.js} +3 -3
- package/dist/{chunk-Q6D7EUSQ.js → chunk-4JVQRFZD.js} +10 -10
- package/dist/{chunk-YEDVOYL2.js → chunk-4RX5O34R.js} +2 -2
- package/dist/{chunk-JMPYZJQN.js → chunk-4RZLTZVM.js} +4 -4
- package/dist/{chunk-Q7JK6YEB.js → chunk-54NX5EG4.js} +2 -2
- package/dist/{chunk-GWK7FEUL.js → chunk-5FAGCOZD.js} +4 -4
- package/dist/{chunk-2PUE5P7C.js → chunk-5N4MZLEH.js} +5 -5
- package/dist/{chunk-B2YKTE7P.js → chunk-5SPCMAUC.js} +10 -10
- package/dist/{chunk-3OHISDDW.js → chunk-5U7K4W6K.js} +2 -2
- package/dist/{chunk-CYEMS2PG.js → chunk-5YCNDC3C.js} +3 -3
- package/dist/{chunk-PAAJWQH5.js → chunk-62D2PAAM.js} +4 -4
- package/dist/{chunk-52II7PB6.js → chunk-645WOU5I.js} +4 -4
- package/dist/chunk-6AGWBKQU.js +94 -0
- package/dist/chunk-6AGWBKQU.js.map +1 -0
- package/dist/{chunk-326KUXIR.js → chunk-6EHM2AV7.js} +6 -6
- package/dist/{chunk-YM7YN37H.js → chunk-6ET2VII7.js} +2 -2
- package/dist/chunk-6H2G7RFT.js +58 -0
- package/dist/chunk-6H2G7RFT.js.map +1 -0
- package/dist/{chunk-A2YQL2FF.js → chunk-6P4REYKL.js} +5 -5
- package/dist/{chunk-7RKBPXY6.js → chunk-6YAIN5XJ.js} +2 -2
- package/dist/{chunk-2L5FSNPC.js → chunk-A7GQBJP5.js} +10 -10
- package/dist/{chunk-UYVXIY6C.js → chunk-AAZEKXUP.js} +2 -2
- package/dist/{chunk-JR6PP7UM.js → chunk-ACY4ZPF7.js} +28 -2
- package/dist/chunk-ACY4ZPF7.js.map +1 -0
- package/dist/{chunk-IQZ6ISFX.js → chunk-AECJY3GJ.js} +2 -2
- package/dist/{chunk-76DRU7C4.js → chunk-AENM6GKU.js} +2 -2
- package/dist/{chunk-KTRXQQFN.js → chunk-B36GUU6T.js} +4 -4
- package/dist/{chunk-TLHNF6GA.js → chunk-BV4ZKIZH.js} +1 -1
- package/dist/{chunk-ZWEZXVYH.js → chunk-CEO4DONG.js} +2 -2
- package/dist/chunk-CWTCMZGE.js +858 -0
- package/dist/chunk-CWTCMZGE.js.map +1 -0
- package/dist/{chunk-ZEPVWLCN.js → chunk-CZTPU65V.js} +25 -25
- package/dist/{chunk-TRU6JBOI.js → chunk-D545Z7UH.js} +3 -3
- package/dist/{chunk-6E5GYDIE.js → chunk-DGS34QSY.js} +2 -2
- package/dist/{chunk-65RENJGB.js → chunk-E2AWJ7KQ.js} +8 -4
- package/dist/chunk-E2AWJ7KQ.js.map +1 -0
- package/dist/{chunk-6Z3WW2MW.js → chunk-ENBPQEVU.js} +3 -3
- package/dist/{chunk-DOKKRZPH.js → chunk-EYKIDK33.js} +21 -19
- package/dist/chunk-EYKIDK33.js.map +1 -0
- package/dist/{chunk-PNEDMJ53.js → chunk-F4EHXVP7.js} +2 -2
- package/dist/{chunk-JPKZTCWZ.js → chunk-FNHLI2RE.js} +3 -3
- package/dist/{chunk-D2DIYEFW.js → chunk-FWWWUPOE.js} +12 -36
- package/dist/chunk-FWWWUPOE.js.map +1 -0
- package/dist/{chunk-M3MYMWXG.js → chunk-FXHOZGSE.js} +2 -2
- package/dist/{chunk-SAKA6PPL.js → chunk-GAS7KYC7.js} +5 -5
- package/dist/{chunk-LSLCFCCQ.js → chunk-GDYU6VF4.js} +1 -1
- package/dist/chunk-GDYU6VF4.js.map +1 -0
- package/dist/{chunk-2AR5JFD7.js → chunk-GG5FHZJJ.js} +6 -6
- package/dist/{chunk-WS3WNLST.js → chunk-GI4ZBWPQ.js} +3 -3
- package/dist/{chunk-JYR4LH76.js → chunk-GMIQV6DD.js} +2 -2
- package/dist/{chunk-WIKO4SCR.js → chunk-H3TKENU4.js} +5 -5
- package/dist/{chunk-ZLN7AROH.js → chunk-HIP6DKJJ.js} +5 -5
- package/dist/{chunk-SF6RFI5Z.js → chunk-HWLIMQE2.js} +2 -2
- package/dist/{chunk-JZYECQWN.js → chunk-IL6ODG6M.js} +2 -2
- package/dist/{chunk-GNR6YEWZ.js → chunk-IQEJIOEU.js} +6 -6
- package/dist/{chunk-BICNRVEC.js → chunk-IWO6QXWJ.js} +2 -2
- package/dist/{chunk-RN3MVLW3.js → chunk-IYKZJVL5.js} +1 -1
- package/dist/chunk-IYKZJVL5.js.map +1 -0
- package/dist/{chunk-42DJ235G.js → chunk-J272ODKJ.js} +2 -2
- package/dist/{chunk-R3TLVTWW.js → chunk-JDX2OA4R.js} +3 -3
- package/dist/{chunk-G5MO3VQA.js → chunk-JKKII6GX.js} +2 -2
- package/dist/{chunk-L5OXE4PX.js → chunk-JTQR6L2N.js} +3 -3
- package/dist/{chunk-VDX2J7OX.js → chunk-KQAFEZQX.js} +2 -2
- package/dist/{chunk-AKE4GGQ3.js → chunk-KQW3YGEN.js} +2 -2
- package/dist/{chunk-LMMQKZK3.js → chunk-L63GFNKL.js} +1 -1
- package/dist/{chunk-BRZWWUCJ.js → chunk-LMLGBG6H.js} +2 -2
- package/dist/{chunk-3IXB77DA.js → chunk-LPYYY4AP.js} +318 -278
- package/dist/chunk-LPYYY4AP.js.map +1 -0
- package/dist/{chunk-YEN4TREG.js → chunk-LQNRVPTV.js} +54 -567
- package/dist/chunk-LQNRVPTV.js.map +1 -0
- package/dist/{chunk-CQ7SSBO4.js → chunk-M6HBPLBA.js} +2 -2
- package/dist/chunk-MCRVQ5YQ.js +14 -0
- package/dist/chunk-MCRVQ5YQ.js.map +1 -0
- package/dist/{chunk-3YMDY3ZF.js → chunk-MUTVRKKY.js} +16 -16
- package/dist/{chunk-FCFAYMTU.js → chunk-NXGSONWM.js} +2 -2
- package/dist/{chunk-4WGAMREC.js → chunk-O4M4BDIJ.js} +2 -2
- package/dist/{chunk-5SYI2F47.js → chunk-O76F5QPP.js} +2 -2
- package/dist/{chunk-SROIT6QY.js → chunk-OPBFP4TF.js} +28 -11
- package/dist/chunk-OPBFP4TF.js.map +1 -0
- package/dist/{chunk-7MJBKZPU.js → chunk-P4ZAEYKG.js} +68 -34
- package/dist/chunk-P4ZAEYKG.js.map +1 -0
- package/dist/{chunk-57GDHV2D.js → chunk-PCOVEDPK.js} +6 -6
- package/dist/{chunk-PPTOAHTZ.js → chunk-PGAB2V53.js} +2 -2
- package/dist/{chunk-HHDTBYDJ.js → chunk-Q432REND.js} +2 -2
- package/dist/{chunk-XAITGGX5.js → chunk-Q4AUIFUA.js} +4 -4
- package/dist/{chunk-5LLQAUMI.js → chunk-Q7CLGFA7.js} +3 -3
- package/dist/{chunk-KUK56OPR.js → chunk-QHT7MOUF.js} +12 -12
- package/dist/{chunk-W6IJMWTZ.js → chunk-QTQ6XKGT.js} +4 -4
- package/dist/{chunk-FLLORID2.js → chunk-RLJHJQUY.js} +9 -9
- package/dist/{chunk-353KGBKY.js → chunk-RW4QNB4J.js} +4 -4
- package/dist/{chunk-GWQVMKUJ.js → chunk-SCXURCVT.js} +3 -3
- package/dist/{chunk-FQXJAC3T.js → chunk-SGUDMW2K.js} +4 -4
- package/dist/{chunk-LSDEIZ76.js → chunk-TA4C3XB7.js} +6 -6
- package/dist/{chunk-YIZ2EUUL.js → chunk-TNZNSMVJ.js} +94 -94
- package/dist/{chunk-CIYUWSMZ.js → chunk-TRLOFIQC.js} +2 -2
- package/dist/{chunk-TL7NLM2L.js → chunk-TSP5WH72.js} +2 -2
- package/dist/{chunk-3K6UFW5B.js → chunk-UHRZ324M.js} +8 -8
- package/dist/{chunk-JLXWRQNR.js → chunk-UZEHHXYC.js} +170 -167
- package/dist/chunk-UZEHHXYC.js.map +1 -0
- package/dist/{chunk-A5UQ52YQ.js → chunk-UZZ7SQT3.js} +5 -5
- package/dist/{chunk-GHX5PNXW.js → chunk-VBSNUH4J.js} +2 -2
- package/dist/{chunk-MR6LQVZ5.js → chunk-VJIE4D2I.js} +3 -3
- package/dist/{chunk-OTPXEE6W.js → chunk-VSL63CFJ.js} +15 -12
- package/dist/chunk-VSL63CFJ.js.map +1 -0
- package/dist/{chunk-2JGGZICG.js → chunk-WBM2MVBK.js} +2 -2
- package/dist/{chunk-CD3C4BJN.js → chunk-WIWLX65T.js} +2 -2
- package/dist/{chunk-GDDSXVWR.js → chunk-X4TD4O2F.js} +3 -3
- package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
- package/dist/{chunk-FPQDZCUX.js → chunk-XH3HGI2N.js} +2 -2
- package/dist/{chunk-C6KRO3SU.js → chunk-XVDZFTN5.js} +4 -4
- package/dist/{chunk-3SL52JKD.js → chunk-XVZA6VXC.js} +4 -4
- package/dist/chunk-YDVAM7S4.js +221 -0
- package/dist/chunk-YDVAM7S4.js.map +1 -0
- package/dist/chunk-YFTNZMGR.js +71 -0
- package/dist/chunk-YFTNZMGR.js.map +1 -0
- package/dist/{chunk-VELCIWJZ.js → chunk-YKREX63Z.js} +19 -10
- package/dist/chunk-YKREX63Z.js.map +1 -0
- package/dist/{chunk-BLHX5FQW.js → chunk-YUW66UAH.js} +2 -2
- package/dist/{chunk-DOQLHCSS.js → chunk-ZBW7A667.js} +2 -2
- package/dist/{chunk-4DPDIOVA.js → chunk-ZEGL7YCC.js} +2 -2
- package/dist/{chunk-VVX5PZFS.js → chunk-ZHXSOMYH.js} +2 -2
- package/dist/{chunk-GCBIXUPT.js → chunk-ZMWSYUUL.js} +2 -2
- package/dist/{chunk-X2QPKLPL.js → chunk-ZZUVBZL2.js} +2 -2
- package/dist/{cli-1mzd5TM4.d.ts → cli-DGq0MNpO.d.ts} +5 -5
- package/dist/cli-fallback.d.ts +4 -2
- package/dist/cli-fallback.js +3 -1
- package/dist/cli.d.ts +16 -14
- package/dist/cli.js +139 -134
- package/dist/coding/export-okf-codegraph.d.ts +2 -1
- package/dist/coding/export-okf-codegraph.js +26 -25
- package/dist/coding/export-okf-codegraph.js.map +1 -1
- package/dist/coding/pre-action-gate.d.ts +2 -1
- package/dist/coding/pre-action-gate.js +2 -2
- package/dist/compat/codex-cli-fallback.d.ts +1 -1
- package/dist/compat/codex-cli-fallback.js +3 -1
- package/dist/compat/codex-cli-fallback.js.map +1 -1
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +27 -26
- package/dist/compounding/preference-consolidator.d.ts +2 -1
- package/dist/compression-optimizer.d.ts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +18 -15
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +26 -25
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +29 -28
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/contradiction/index.d.ts +5 -3
- package/dist/contradiction/index.js +7 -7
- package/dist/{contradiction-scan-GVD4JJ7B.js → contradiction-scan-BSGKZHYJ.js} +4 -4
- package/dist/contradiction-scan-BSGKZHYJ.js.map +1 -0
- package/dist/converge-config.d.ts +2 -1
- package/dist/convergence-refresh.d.ts +3 -2
- package/dist/convergence-refresh.js +29 -28
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/chunker.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/indexer.d.ts +2 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/corpus-watermark.d.ts +2 -1
- package/dist/corpus-watermark.js +29 -28
- package/dist/cross-lingual-recall.d.ts +2 -1
- package/dist/day-summary.d.ts +2 -1
- package/dist/deep-recall-http-glue.d.ts +14 -12
- package/dist/deep-recall-http-glue.js +4 -14
- package/dist/deep-recall-mcp-tools.d.ts +14 -12
- package/dist/deep-recall-policy-llm.d.ts +3 -1
- package/dist/deep-recall-policy-llm.js +5 -3
- package/dist/deep-recall-seeds.d.ts +2 -1
- package/dist/delinearize.d.ts +2 -1
- package/dist/dependency-propagation-config.d.ts +2 -1
- package/dist/{dependency-propagation-delivery-Bua2ApHV.d.ts → dependency-propagation-delivery-Cq1ekOwV.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/enrichment/index.d.ts +2 -1
- package/dist/entity-origin-fields.d.ts +2 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +28 -27
- package/dist/entity-schema.d.ts +2 -1
- package/dist/episodic-context.d.ts +2 -1
- package/dist/eval-trajectory-contracts.d.ts +2 -1
- package/dist/eval-trajectory-store.d.ts +2 -1
- package/dist/eval-trajectory.d.ts +2 -1
- package/dist/event-order-recall.js +3 -3
- package/dist/explicit-capture.d.ts +12 -10
- package/dist/explicit-capture.js +6 -6
- package/dist/external-wiki-access.d.ts +14 -12
- package/dist/external-wiki-access.js +87 -84
- package/dist/external-wiki-collection-registration.d.ts +2 -1
- package/dist/external-wiki-collection.d.ts +2 -1
- package/dist/external-wiki-mcp-tools.d.ts +14 -12
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +3 -1
- package/dist/extraction-faithfulness.js +5 -3
- package/dist/extraction-judge-telemetry.d.ts +3 -1
- package/dist/extraction-judge-training.d.ts +3 -1
- package/dist/extraction-judge.d.ts +3 -1
- package/dist/extraction-judge.js +5 -3
- package/dist/extraction-liveness.d.ts +2 -1
- package/dist/extraction-normalization.d.ts +2 -1
- package/dist/extraction-prompt.d.ts +2 -1
- package/dist/extraction-source-grounding-rules.d.ts +2 -1
- package/dist/extraction-source-grounding.d.ts +2 -1
- package/dist/extraction-source-grounding.js +3 -3
- package/dist/extraction-span-config.d.ts +2 -1
- package/dist/extraction-span-materialize.d.ts +2 -1
- package/dist/extraction-span-materialize.js +2 -2
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +46 -45
- package/dist/fallback-llm-codex-subscription.d.ts +79 -0
- package/dist/fallback-llm-codex-subscription.js +22 -0
- package/dist/fallback-llm-codex-subscription.js.map +1 -0
- package/dist/fallback-llm.d.ts +5 -1
- package/dist/fallback-llm.js +4 -2
- package/dist/{first-start-migration-GZ45G5FS.js → first-start-migration-ZWMV5CX4.js} +6 -6
- package/dist/{generic-recall-paths-DJBADojG.d.ts → generic-recall-paths-BcySh_f9.d.ts} +1 -1
- package/dist/graph-append-error.d.ts +2 -1
- package/dist/graph-dashboard-diff.d.ts +2 -1
- package/dist/graph-dashboard-key.d.ts +2 -1
- package/dist/graph-dashboard-parser.d.ts +2 -1
- package/dist/{graph-edge-decay-ROSUPDX3.js → graph-edge-decay-MKIRZ762.js} +5 -5
- package/dist/graph-edge-decay-MKIRZ762.js.map +1 -0
- package/dist/graph-edge-reinforcement.d.ts +2 -1
- package/dist/graph-jsonl.d.ts +2 -1
- package/dist/graph-jsonl.js +3 -3
- package/dist/graph-path-reconstruction.d.ts +2 -1
- package/dist/graph-path-scoring.d.ts +2 -1
- package/dist/graph-snapshot.d.ts +2 -1
- package/dist/graph-snapshot.js +3 -3
- package/dist/graph.d.ts +2 -1
- package/dist/graph.js +2 -2
- package/dist/harmonic-retrieval.js +3 -3
- package/dist/importance.d.ts +2 -1
- package/dist/importers/index.d.ts +2 -1
- package/dist/importers/test-utils.d.ts +2 -1
- package/dist/in-flight-reads.d.ts +2 -1
- package/dist/{index-Bsy8ygLL.d.ts → index-DWOb4wz9.d.ts} +2 -2
- package/dist/index.d.ts +713 -705
- package/dist/index.js +419 -346
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +4 -4
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +12 -12
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/local-llm-config.d.ts +7 -1
- package/dist/local-llm-config.js +12 -0
- package/dist/local-llm.d.ts +2 -1
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/location/index.d.ts +4 -3
- package/dist/location/index.js +60 -59
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +26 -25
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +27 -26
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +28 -27
- package/dist/{maintenance-DItyBwTC.d.ts → maintenance-CW9wCzMP.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +14 -12
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-controller.d.ts +2 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/memory-projection-store.d.ts +2 -1
- package/dist/memory-provenance.d.ts +2 -1
- package/dist/memory-snapshot.d.ts +2 -1
- package/dist/memory-subject-cli.d.ts +14 -12
- package/dist/memory-subject.d.ts +14 -12
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/models-json.d.ts +2 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +27 -26
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +6 -6
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +26 -25
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/offline-sync-impression-drain.d.ts +2 -1
- package/dist/offline-sync-impression-drain.js +4 -4
- package/dist/operator-doctor-corpus.d.ts +2 -1
- package/dist/operator-doctor-corpus.js +30 -29
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +53 -49
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +39 -38
- package/dist/{orchestrator-DBUX-aAM.d.ts → orchestrator-ComHLm49.d.ts} +22 -11
- package/dist/orchestrator.d.ts +12 -10
- package/dist/orchestrator.js +224 -218
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-BqgcOk1Z.d.ts → pipeline-CiYcqqhl.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/proactive-contention.d.ts +2 -1
- package/dist/provenance.d.ts +2 -1
- package/dist/provenance.js +2 -2
- package/dist/{public-http-CqtZ5kv3.d.ts → public-http-CuK4_Cb1.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +3 -2
- package/dist/{qmd-BD0ikV_Y.d.ts → qmd-qXD4vatU.d.ts} +1 -1
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +3 -2
- package/dist/recall-concurrency-config.d.ts +2 -1
- package/dist/recall-disclosure-escalation.d.ts +2 -1
- package/dist/recall-explain-renderer.d.ts +2 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +2 -1
- package/dist/recall-navigate-access.d.ts +2 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +2 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +2 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +3 -1
- package/dist/recall-planner-llm.js +4 -2
- package/dist/recall-planner-llm.js.map +1 -1
- package/dist/recall-state-view-admission.d.ts +3 -2
- package/dist/recall-state-view-admission.js +9 -9
- package/dist/recall-state-view-anchors.d.ts +85 -0
- package/dist/recall-state-view-anchors.js +21 -0
- package/dist/recall-state-view-anchors.js.map +1 -0
- package/dist/recall-state-view-inject.js +2 -2
- package/dist/recall-state-view-render.js +2 -2
- package/dist/recall-state-view-widen.js +2 -2
- package/dist/recall-state-view-wire.js +3 -3
- package/dist/recall-state-view.d.ts +37 -1
- package/dist/recall-state-view.js +11 -3
- package/dist/recall-state.d.ts +2 -1
- package/dist/recall-tag-filter.d.ts +2 -1
- package/dist/recall-timings.d.ts +2 -1
- package/dist/recall-xray-cli.d.ts +2 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +2 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +2 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +2 -1
- package/dist/reconcile/cursor.js +2 -2
- package/dist/reconcile/manifest.d.ts +2 -1
- package/dist/reconcile/manifest.js +4 -4
- package/dist/reconcile/plan.d.ts +2 -1
- package/dist/reconcile/plan.js +2 -2
- package/dist/replay/normalizers/chatgpt.d.ts +2 -1
- package/dist/replay/normalizers/claude.d.ts +2 -1
- package/dist/replay/normalizers/openclaw.d.ts +2 -1
- package/dist/replay/normalizers/shared.d.ts +2 -1
- package/dist/replay/runner.d.ts +2 -1
- package/dist/replay/types.d.ts +2 -1
- package/dist/replica-divergence.d.ts +2 -1
- package/dist/replica-peers-config.d.ts +2 -1
- package/dist/{resolution-OHJZG45O.js → resolution-4GG3QZRJ.js} +8 -8
- package/dist/resolution-4GG3QZRJ.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resume-bundles.js +19 -16
- package/dist/retrieval-agents.d.ts +3 -2
- package/dist/retrieval-tiers.d.ts +2 -1
- package/dist/routing/engine.d.ts +2 -1
- package/dist/routing/store.d.ts +2 -1
- package/dist/salvage-envelope.d.ts +2 -1
- package/dist/salvage-envelope.js +2 -2
- package/dist/schemas.d.ts +160 -160
- package/dist/{scope-profiles-BIJMsd0B.d.ts → scope-profiles-BT9rqC3w.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/factory.d.ts +2 -1
- package/dist/search/factory.js +5 -5
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +13 -13
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/{semantic-consolidation-D7sJocll.d.ts → semantic-consolidation-CmZi7thY.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +27 -26
- package/dist/semantic-rule-promotion.js +26 -25
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +26 -25
- package/dist/{service-fwgEngUj.d.ts → service-CLkA7AQB.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +2 -1
- package/dist/session-observer-state.d.ts +2 -1
- package/dist/shared-context/manager.d.ts +8 -7
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +41 -40
- package/dist/standup/build.js +27 -26
- package/dist/{storage-Cbll3-Tk.d.ts → storage-wvX01lht.d.ts} +1 -1
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +25 -24
- package/dist/subject-config.d.ts +2 -1
- package/dist/subject-config.js +2 -2
- package/dist/summarizer.d.ts +2 -1
- package/dist/summarizer.js +6 -3
- package/dist/summary-snapshot.d.ts +2 -1
- package/dist/support-passport/index.d.ts +17 -15
- package/dist/support-passport/index.js +92 -89
- package/dist/temporal-supersession.d.ts +3 -2
- package/dist/temporal-timeline-recall.d.ts +2 -1
- package/dist/temporal-validity.d.ts +2 -1
- package/dist/threading.d.ts +2 -1
- package/dist/tier-migration.d.ts +3 -2
- package/dist/tier-routing.d.ts +2 -1
- package/dist/tier-routing.js +3 -3
- package/dist/{tier-stats-VK5PCO2L.js → tier-stats-LUSUUNU6.js} +4 -4
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +3 -3
- package/dist/transfer/export-okf.d.ts +2 -1
- package/dist/transfer/export-okf.js +26 -25
- package/dist/transfer/types.d.ts +78 -78
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-48sPkWB0.d.ts → types-Cyr32ABj.d.ts} +3 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -1
- package/dist/verified-recall.js +26 -25
- package/dist/who-knows-cli.d.ts +14 -12
- package/dist/who-knows-cli.js +27 -26
- package/dist/who-knows.d.ts +14 -12
- package/dist/who-knows.js +26 -25
- package/dist/write-envelope.d.ts +7 -1
- package/dist/write-envelope.js +1 -1
- package/package.json +2 -2
- package/src/access-boundary.ts +21 -6
- package/src/access-category-alias.test.ts +488 -51
- package/src/access-http.test.ts +249 -0
- package/src/access-http.ts +2 -0
- package/src/access-mcp.test.ts +2 -2
- package/src/access-observe-write-category.ts +25 -0
- package/src/access-observe-write-surface.ts +58 -57
- package/src/access-operations-batch.ts +28 -2
- package/src/access-operations.ts +6 -4
- package/src/access-schema.ts +106 -50
- package/src/access-service.ts +23 -9
- package/src/background-generation-config.ts +79 -0
- package/src/background-generation.test.ts +123 -0
- package/src/background-generation.ts +52 -0
- package/src/cli-fallback.ts +8 -2
- package/src/config.test.ts +172 -0
- package/src/config.ts +2 -43
- package/src/fallback-llm-codex-subscription.ts +168 -0
- package/src/fallback-llm.test.ts +46 -0
- package/src/fallback-llm.ts +60 -48
- package/src/index.ts +2 -16
- package/src/local-llm-config.ts +84 -0
- package/src/orchestration/recall-internal.ts +91 -74
- package/src/orchestration/recall-rerank-coordinator.ts +41 -4
- package/src/orchestration/recall-search-pipeline.ts +25 -18
- package/src/orchestration/recall-state-view-pipeline.test.ts +89 -0
- package/src/providers/codex-subscription.test.ts +804 -1
- package/src/providers/codex-subscription.ts +407 -65
- package/src/recall-rerank-coordinator.test.ts +153 -0
- package/src/recall-state-view-anchors.ts +163 -0
- package/src/recall-state-view-widen.ts +21 -7
- package/src/recall-state-view-zero-diff.test.ts +30 -0
- package/src/recall-state-view.test.ts +161 -0
- package/src/recall-state-view.ts +206 -35
- package/src/summarizer.ts +25 -0
- package/src/trust-score-recall-paths.test.ts +1 -1
- package/src/types.ts +3 -2
- package/src/write-envelope.ts +5 -0
- package/dist/chunk-255PC37A.js +0 -120
- package/dist/chunk-255PC37A.js.map +0 -1
- package/dist/chunk-3IXB77DA.js.map +0 -1
- package/dist/chunk-65RENJGB.js.map +0 -1
- package/dist/chunk-7MJBKZPU.js.map +0 -1
- package/dist/chunk-D2DIYEFW.js.map +0 -1
- package/dist/chunk-DOKKRZPH.js.map +0 -1
- package/dist/chunk-JLXWRQNR.js.map +0 -1
- package/dist/chunk-JR6PP7UM.js.map +0 -1
- package/dist/chunk-LSLCFCCQ.js.map +0 -1
- package/dist/chunk-OTPXEE6W.js.map +0 -1
- package/dist/chunk-RN3MVLW3.js.map +0 -1
- package/dist/chunk-SROIT6QY.js.map +0 -1
- package/dist/chunk-VELCIWJZ.js.map +0 -1
- package/dist/chunk-YEN4TREG.js.map +0 -1
- /package/dist/{capsule-crypto-YO5QJ6L3.js.map → access-observe-write-category.js.map} +0 -0
- /package/dist/{contradiction-scan-GVD4JJ7B.js.map → background-generation-config.js.map} +0 -0
- /package/dist/{graph-edge-decay-ROSUPDX3.js.map → background-generation.js.map} +0 -0
- /package/dist/{resolution-OHJZG45O.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
- /package/dist/{capsule-merge-ZCXUPLNJ.js.map → capsule-merge-IPG4IOFP.js.map} +0 -0
- /package/dist/{chunk-YHU5XUF4.js.map → chunk-27MKMTBY.js.map} +0 -0
- /package/dist/{chunk-TK4FHQRN.js.map → chunk-2J3V5QEO.js.map} +0 -0
- /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
- /package/dist/{chunk-TFRDUD3M.js.map → chunk-2ZTDRNCS.js.map} +0 -0
- /package/dist/{chunk-PWPIERBM.js.map → chunk-37CAEC7E.js.map} +0 -0
- /package/dist/{chunk-X7BCM2NA.js.map → chunk-3EKVN2OP.js.map} +0 -0
- /package/dist/{chunk-S2ULTQZR.js.map → chunk-3N3PBBEH.js.map} +0 -0
- /package/dist/{chunk-XCF3SFHD.js.map → chunk-3NPNBVFR.js.map} +0 -0
- /package/dist/{chunk-JO5TQAKW.js.map → chunk-4BCHFSC7.js.map} +0 -0
- /package/dist/{chunk-Q6D7EUSQ.js.map → chunk-4JVQRFZD.js.map} +0 -0
- /package/dist/{chunk-YEDVOYL2.js.map → chunk-4RX5O34R.js.map} +0 -0
- /package/dist/{chunk-JMPYZJQN.js.map → chunk-4RZLTZVM.js.map} +0 -0
- /package/dist/{chunk-Q7JK6YEB.js.map → chunk-54NX5EG4.js.map} +0 -0
- /package/dist/{chunk-GWK7FEUL.js.map → chunk-5FAGCOZD.js.map} +0 -0
- /package/dist/{chunk-2PUE5P7C.js.map → chunk-5N4MZLEH.js.map} +0 -0
- /package/dist/{chunk-B2YKTE7P.js.map → chunk-5SPCMAUC.js.map} +0 -0
- /package/dist/{chunk-3OHISDDW.js.map → chunk-5U7K4W6K.js.map} +0 -0
- /package/dist/{chunk-CYEMS2PG.js.map → chunk-5YCNDC3C.js.map} +0 -0
- /package/dist/{chunk-PAAJWQH5.js.map → chunk-62D2PAAM.js.map} +0 -0
- /package/dist/{chunk-52II7PB6.js.map → chunk-645WOU5I.js.map} +0 -0
- /package/dist/{chunk-326KUXIR.js.map → chunk-6EHM2AV7.js.map} +0 -0
- /package/dist/{chunk-YM7YN37H.js.map → chunk-6ET2VII7.js.map} +0 -0
- /package/dist/{chunk-A2YQL2FF.js.map → chunk-6P4REYKL.js.map} +0 -0
- /package/dist/{chunk-7RKBPXY6.js.map → chunk-6YAIN5XJ.js.map} +0 -0
- /package/dist/{chunk-2L5FSNPC.js.map → chunk-A7GQBJP5.js.map} +0 -0
- /package/dist/{chunk-UYVXIY6C.js.map → chunk-AAZEKXUP.js.map} +0 -0
- /package/dist/{chunk-IQZ6ISFX.js.map → chunk-AECJY3GJ.js.map} +0 -0
- /package/dist/{chunk-76DRU7C4.js.map → chunk-AENM6GKU.js.map} +0 -0
- /package/dist/{chunk-KTRXQQFN.js.map → chunk-B36GUU6T.js.map} +0 -0
- /package/dist/{chunk-TLHNF6GA.js.map → chunk-BV4ZKIZH.js.map} +0 -0
- /package/dist/{chunk-ZWEZXVYH.js.map → chunk-CEO4DONG.js.map} +0 -0
- /package/dist/{chunk-ZEPVWLCN.js.map → chunk-CZTPU65V.js.map} +0 -0
- /package/dist/{chunk-TRU6JBOI.js.map → chunk-D545Z7UH.js.map} +0 -0
- /package/dist/{chunk-6E5GYDIE.js.map → chunk-DGS34QSY.js.map} +0 -0
- /package/dist/{chunk-6Z3WW2MW.js.map → chunk-ENBPQEVU.js.map} +0 -0
- /package/dist/{chunk-PNEDMJ53.js.map → chunk-F4EHXVP7.js.map} +0 -0
- /package/dist/{chunk-JPKZTCWZ.js.map → chunk-FNHLI2RE.js.map} +0 -0
- /package/dist/{chunk-M3MYMWXG.js.map → chunk-FXHOZGSE.js.map} +0 -0
- /package/dist/{chunk-SAKA6PPL.js.map → chunk-GAS7KYC7.js.map} +0 -0
- /package/dist/{chunk-2AR5JFD7.js.map → chunk-GG5FHZJJ.js.map} +0 -0
- /package/dist/{chunk-WS3WNLST.js.map → chunk-GI4ZBWPQ.js.map} +0 -0
- /package/dist/{chunk-JYR4LH76.js.map → chunk-GMIQV6DD.js.map} +0 -0
- /package/dist/{chunk-WIKO4SCR.js.map → chunk-H3TKENU4.js.map} +0 -0
- /package/dist/{chunk-ZLN7AROH.js.map → chunk-HIP6DKJJ.js.map} +0 -0
- /package/dist/{chunk-SF6RFI5Z.js.map → chunk-HWLIMQE2.js.map} +0 -0
- /package/dist/{chunk-JZYECQWN.js.map → chunk-IL6ODG6M.js.map} +0 -0
- /package/dist/{chunk-GNR6YEWZ.js.map → chunk-IQEJIOEU.js.map} +0 -0
- /package/dist/{chunk-BICNRVEC.js.map → chunk-IWO6QXWJ.js.map} +0 -0
- /package/dist/{chunk-42DJ235G.js.map → chunk-J272ODKJ.js.map} +0 -0
- /package/dist/{chunk-R3TLVTWW.js.map → chunk-JDX2OA4R.js.map} +0 -0
- /package/dist/{chunk-G5MO3VQA.js.map → chunk-JKKII6GX.js.map} +0 -0
- /package/dist/{chunk-L5OXE4PX.js.map → chunk-JTQR6L2N.js.map} +0 -0
- /package/dist/{chunk-VDX2J7OX.js.map → chunk-KQAFEZQX.js.map} +0 -0
- /package/dist/{chunk-AKE4GGQ3.js.map → chunk-KQW3YGEN.js.map} +0 -0
- /package/dist/{chunk-LMMQKZK3.js.map → chunk-L63GFNKL.js.map} +0 -0
- /package/dist/{chunk-BRZWWUCJ.js.map → chunk-LMLGBG6H.js.map} +0 -0
- /package/dist/{chunk-CQ7SSBO4.js.map → chunk-M6HBPLBA.js.map} +0 -0
- /package/dist/{chunk-3YMDY3ZF.js.map → chunk-MUTVRKKY.js.map} +0 -0
- /package/dist/{chunk-FCFAYMTU.js.map → chunk-NXGSONWM.js.map} +0 -0
- /package/dist/{chunk-4WGAMREC.js.map → chunk-O4M4BDIJ.js.map} +0 -0
- /package/dist/{chunk-5SYI2F47.js.map → chunk-O76F5QPP.js.map} +0 -0
- /package/dist/{chunk-57GDHV2D.js.map → chunk-PCOVEDPK.js.map} +0 -0
- /package/dist/{chunk-PPTOAHTZ.js.map → chunk-PGAB2V53.js.map} +0 -0
- /package/dist/{chunk-HHDTBYDJ.js.map → chunk-Q432REND.js.map} +0 -0
- /package/dist/{chunk-XAITGGX5.js.map → chunk-Q4AUIFUA.js.map} +0 -0
- /package/dist/{chunk-5LLQAUMI.js.map → chunk-Q7CLGFA7.js.map} +0 -0
- /package/dist/{chunk-KUK56OPR.js.map → chunk-QHT7MOUF.js.map} +0 -0
- /package/dist/{chunk-W6IJMWTZ.js.map → chunk-QTQ6XKGT.js.map} +0 -0
- /package/dist/{chunk-FLLORID2.js.map → chunk-RLJHJQUY.js.map} +0 -0
- /package/dist/{chunk-353KGBKY.js.map → chunk-RW4QNB4J.js.map} +0 -0
- /package/dist/{chunk-GWQVMKUJ.js.map → chunk-SCXURCVT.js.map} +0 -0
- /package/dist/{chunk-FQXJAC3T.js.map → chunk-SGUDMW2K.js.map} +0 -0
- /package/dist/{chunk-LSDEIZ76.js.map → chunk-TA4C3XB7.js.map} +0 -0
- /package/dist/{chunk-YIZ2EUUL.js.map → chunk-TNZNSMVJ.js.map} +0 -0
- /package/dist/{chunk-CIYUWSMZ.js.map → chunk-TRLOFIQC.js.map} +0 -0
- /package/dist/{chunk-TL7NLM2L.js.map → chunk-TSP5WH72.js.map} +0 -0
- /package/dist/{chunk-3K6UFW5B.js.map → chunk-UHRZ324M.js.map} +0 -0
- /package/dist/{chunk-A5UQ52YQ.js.map → chunk-UZZ7SQT3.js.map} +0 -0
- /package/dist/{chunk-GHX5PNXW.js.map → chunk-VBSNUH4J.js.map} +0 -0
- /package/dist/{chunk-MR6LQVZ5.js.map → chunk-VJIE4D2I.js.map} +0 -0
- /package/dist/{chunk-2JGGZICG.js.map → chunk-WBM2MVBK.js.map} +0 -0
- /package/dist/{chunk-CD3C4BJN.js.map → chunk-WIWLX65T.js.map} +0 -0
- /package/dist/{chunk-GDDSXVWR.js.map → chunk-X4TD4O2F.js.map} +0 -0
- /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
- /package/dist/{chunk-FPQDZCUX.js.map → chunk-XH3HGI2N.js.map} +0 -0
- /package/dist/{chunk-C6KRO3SU.js.map → chunk-XVDZFTN5.js.map} +0 -0
- /package/dist/{chunk-3SL52JKD.js.map → chunk-XVZA6VXC.js.map} +0 -0
- /package/dist/{chunk-BLHX5FQW.js.map → chunk-YUW66UAH.js.map} +0 -0
- /package/dist/{chunk-DOQLHCSS.js.map → chunk-ZBW7A667.js.map} +0 -0
- /package/dist/{chunk-4DPDIOVA.js.map → chunk-ZEGL7YCC.js.map} +0 -0
- /package/dist/{chunk-VVX5PZFS.js.map → chunk-ZHXSOMYH.js.map} +0 -0
- /package/dist/{chunk-GCBIXUPT.js.map → chunk-ZMWSYUUL.js.map} +0 -0
- /package/dist/{chunk-X2QPKLPL.js.map → chunk-ZZUVBZL2.js.map} +0 -0
- /package/dist/{first-start-migration-GZ45G5FS.js.map → first-start-migration-ZWMV5CX4.js.map} +0 -0
- /package/dist/{tier-stats-VK5PCO2L.js.map → tier-stats-LUSUUNU6.js.map} +0 -0
package/src/access-schema.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// field-level detail so consumers get clear feedback on malformed requests.
|
|
4
4
|
|
|
5
5
|
import { z } from "zod";
|
|
6
|
-
|
|
6
|
+
|
|
7
7
|
import type { MemoryCategory } from "./types.js";
|
|
8
8
|
import {
|
|
9
9
|
ACTION_CONFIDENCE_CONTEXT_READINESS,
|
|
@@ -267,86 +267,114 @@ export const deepRecallRequestSchema = z.object({
|
|
|
267
267
|
// ---------------------------------------------------------------------------
|
|
268
268
|
|
|
269
269
|
const writeContentSchema = z.string().min(1, "content is required").max(50000);
|
|
270
|
+
// ---------------------------------------------------------------------------
|
|
271
|
+
// Category wire contract (issue #2829): truthful input/output modeling.
|
|
272
|
+
// ---------------------------------------------------------------------------
|
|
273
|
+
|
|
274
|
+
/** Canonical input spellings — exactly the `MemoryCategory` union. */
|
|
275
|
+
const MEMORY_CATEGORY_CANONICAL_INPUT = [
|
|
276
|
+
"fact", "preference", "correction", "entity", "decision",
|
|
277
|
+
"relationship", "principle", "commitment", "moment", "skill", "rule", "procedure",
|
|
278
|
+
"reasoning_trace",
|
|
279
|
+
] as const satisfies readonly MemoryCategory[];
|
|
280
|
+
|
|
270
281
|
/**
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
*
|
|
276
|
-
* near-misses like `projection` reject like any other invalid category.
|
|
277
|
-
* Aliases are NOT enum members: the write-surface funnel coerces them to
|
|
278
|
-
* "fact" and reports the coercion on the response. Everything else rejects
|
|
279
|
-
* naming the full valid set plus a "use fact" hint so callers learn the
|
|
280
|
-
* canonical name.
|
|
282
|
+
* Compatibility alias spellings admitted on input. The four project-shaped
|
|
283
|
+
* categories fleet telemetry actually shows do not exist in the taxonomy;
|
|
284
|
+
* they parse to the canonical "fact". Exact match only — no trimming, no
|
|
285
|
+
* case folding, so near-misses like `projection` or `Project_State` reject
|
|
286
|
+
* like any other invalid category, with the full valid list in the error.
|
|
281
287
|
*/
|
|
282
|
-
const
|
|
283
|
-
project
|
|
284
|
-
project_state
|
|
285
|
-
"project-state"
|
|
286
|
-
project_update
|
|
288
|
+
const MEMORY_CATEGORY_ALIAS_INPUT = [
|
|
289
|
+
"project",
|
|
290
|
+
"project_state",
|
|
291
|
+
"project-state",
|
|
292
|
+
"project_update",
|
|
293
|
+
] as const;
|
|
294
|
+
|
|
295
|
+
export type MemoryCategoryAlias = (typeof MEMORY_CATEGORY_ALIAS_INPUT)[number];
|
|
296
|
+
|
|
297
|
+
const MEMORY_CATEGORY_ALIAS_TO_CANONICAL: Readonly<
|
|
298
|
+
Record<MemoryCategoryAlias, Extract<MemoryCategory, "fact">>
|
|
299
|
+
> = {
|
|
300
|
+
project: "fact",
|
|
301
|
+
project_state: "fact",
|
|
302
|
+
"project-state": "fact",
|
|
303
|
+
project_update: "fact",
|
|
287
304
|
};
|
|
288
305
|
|
|
306
|
+
export function isMemoryCategoryAlias(value: string): value is MemoryCategoryAlias {
|
|
307
|
+
return Object.prototype.hasOwnProperty.call(MEMORY_CATEGORY_ALIAS_TO_CANONICAL, value);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/** Coercion diagnostic for a write whose input category was a compat alias. */
|
|
289
311
|
export interface CategoryAliasCoercion {
|
|
290
|
-
from:
|
|
312
|
+
from: MemoryCategoryAlias;
|
|
291
313
|
to: "fact";
|
|
292
314
|
}
|
|
293
315
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
316
|
+
/** Boundary-derived coercion note for a retained raw spelling. */
|
|
317
|
+
export function categoryAliasCoercion(rawCategory: string | undefined): CategoryAliasCoercion | undefined {
|
|
318
|
+
return rawCategory !== undefined && isMemoryCategoryAlias(rawCategory)
|
|
319
|
+
? { from: rawCategory, to: "fact" }
|
|
320
|
+
: undefined;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Recover the retained alias spelling from a pre-parse raw envelope: the
|
|
325
|
+
* `rawCategory` minted by a previous parse of the same schema (the HTTP/MCP
|
|
326
|
+
* validate-then-dispatch double pass) or an as-yet-untransformed alias
|
|
327
|
+
* `category` (single-parse callers like the CLI store command).
|
|
328
|
+
*/
|
|
329
|
+
export function retainedCategoryAlias(rawInput: unknown): MemoryCategoryAlias | undefined {
|
|
330
|
+
if (!rawInput || typeof rawInput !== "object") return undefined;
|
|
331
|
+
const spelling = (rawInput as Record<string, unknown>).rawCategory;
|
|
332
|
+
return typeof spelling === "string" && isMemoryCategoryAlias(spelling) ? spelling : undefined;
|
|
302
333
|
}
|
|
303
334
|
|
|
304
335
|
/**
|
|
305
|
-
*
|
|
306
|
-
*
|
|
307
|
-
*
|
|
336
|
+
* An idempotent replay returns the FIRST request's stored response, whose
|
|
337
|
+
* coercion note names that request's spelling. Rewrite the note from the
|
|
338
|
+
* CURRENT request's retained spelling so every response identifies what its
|
|
308
339
|
* caller actually sent; the stored idempotent result is reused untouched.
|
|
309
340
|
*/
|
|
310
|
-
export function reapplyCategoryCoercion<T extends
|
|
341
|
+
export function reapplyCategoryCoercion<T extends object>(
|
|
311
342
|
response: T,
|
|
312
343
|
categoryCoercion: CategoryAliasCoercion | undefined,
|
|
313
|
-
): T {
|
|
344
|
+
): T & { categoryCoercion?: CategoryAliasCoercion } {
|
|
345
|
+
const restamped: T & { categoryCoercion?: CategoryAliasCoercion } = { ...response };
|
|
314
346
|
if (categoryCoercion !== undefined) {
|
|
315
|
-
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
return response;
|
|
347
|
+
restamped.categoryCoercion = categoryCoercion;
|
|
348
|
+
} else {
|
|
349
|
+
delete restamped.categoryCoercion;
|
|
319
350
|
}
|
|
320
|
-
|
|
321
|
-
return rest as T;
|
|
351
|
+
return restamped;
|
|
322
352
|
}
|
|
323
353
|
|
|
324
|
-
const
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
});
|
|
334
|
-
})
|
|
335
|
-
.optional() as unknown as z.ZodType<MemoryCategory | undefined, z.ZodTypeDef, MemoryCategory | undefined>
|
|
354
|
+
const categoryWireSchema = z.enum(
|
|
355
|
+
[...MEMORY_CATEGORY_CANONICAL_INPUT, ...MEMORY_CATEGORY_ALIAS_INPUT],
|
|
356
|
+
{
|
|
357
|
+
errorMap: () => ({
|
|
358
|
+
message:
|
|
359
|
+
`category must be one of: ${[...MEMORY_CATEGORY_CANONICAL_INPUT, ...MEMORY_CATEGORY_ALIAS_INPUT].join(", ")}; ` +
|
|
360
|
+
'for project state/facts use "fact"',
|
|
361
|
+
}),
|
|
362
|
+
},
|
|
336
363
|
);
|
|
364
|
+
|
|
337
365
|
const confidenceSchema = z.number().min(0).max(1).optional();
|
|
338
366
|
const tagsSchema = z.array(z.string().max(256)).max(50).optional();
|
|
339
367
|
const entityRefSchema = z.string().trim().max(512).optional();
|
|
340
368
|
const ttlSchema = z.string().trim().max(128).optional();
|
|
341
369
|
const sourceReasonSchema = z.string().trim().max(2000).optional();
|
|
342
370
|
|
|
343
|
-
|
|
371
|
+
const memoryStoreRequestShape = z.object({
|
|
344
372
|
schemaVersion: schemaVersionSchema,
|
|
345
373
|
idempotencyKey: idempotencyKeySchema,
|
|
346
374
|
dryRun: dryRunSchema,
|
|
347
375
|
sessionKey: sessionKeySchema,
|
|
348
376
|
content: writeContentSchema,
|
|
349
|
-
category:
|
|
377
|
+
category: categoryWireSchema.optional(),
|
|
350
378
|
confidence: confidenceSchema,
|
|
351
379
|
namespace: namespaceSchema,
|
|
352
380
|
tags: tagsSchema,
|
|
@@ -361,6 +389,34 @@ export const memoryStoreRequestSchema = z.object({
|
|
|
361
389
|
projectTag: projectTagSchema,
|
|
362
390
|
});
|
|
363
391
|
|
|
392
|
+
/**
|
|
393
|
+
* Parsed memory-store request (issue #2829): the category transform maps
|
|
394
|
+
* compat aliases to the canonical "fact" DURING parsing, so the output type
|
|
395
|
+
* stays the finite `MemoryCategory` union — never an alias spelling. The raw
|
|
396
|
+
* spelling travels separately on `rawCategory`, minted only by the transform
|
|
397
|
+
* (zod strips it from client bodies), for the write surface's coercion note
|
|
398
|
+
* and idempotent-replay rebuild.
|
|
399
|
+
*/
|
|
400
|
+
export type MemoryStoreParsedRequest = Omit<z.infer<typeof memoryStoreRequestShape>, "category"> & {
|
|
401
|
+
category?: MemoryCategory;
|
|
402
|
+
rawCategory?: MemoryCategoryAlias;
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
export const memoryStoreRequestSchema = memoryStoreRequestShape.transform(
|
|
406
|
+
(request): MemoryStoreParsedRequest => {
|
|
407
|
+
if (request.category === undefined || !isMemoryCategoryAlias(request.category)) {
|
|
408
|
+
// Spread so the narrowed canonical category, not the wide wire union,
|
|
409
|
+
// becomes the output type.
|
|
410
|
+
return { ...request, category: request.category };
|
|
411
|
+
}
|
|
412
|
+
return {
|
|
413
|
+
...request,
|
|
414
|
+
category: MEMORY_CATEGORY_ALIAS_TO_CANONICAL[request.category],
|
|
415
|
+
rawCategory: request.category,
|
|
416
|
+
};
|
|
417
|
+
},
|
|
418
|
+
);
|
|
419
|
+
|
|
364
420
|
export const suggestionSubmitRequestSchema = memoryStoreRequestSchema;
|
|
365
421
|
|
|
366
422
|
// ---------------------------------------------------------------------------
|
package/src/access-service.ts
CHANGED
|
@@ -290,8 +290,8 @@ import {
|
|
|
290
290
|
recordMemoryOutcome,
|
|
291
291
|
} from "./memory-worth-outcomes.js";
|
|
292
292
|
import type { LcmMessagePartInput, MessagePartSourceFormat } from "./message-parts/index.js";
|
|
293
|
-
import type { ObserveRequest, RecallRequest } from "./access-schema.js";
|
|
294
|
-
import {
|
|
293
|
+
import type { CategoryAliasCoercion, ObserveRequest, RecallRequest } from "./access-schema.js";
|
|
294
|
+
import { splitCanonicalWriteRequest } from "./access-observe-write-category.js";
|
|
295
295
|
import { recordObjectiveStateSnapshotsFromObservedMessages } from "./objective-state-writers.js";
|
|
296
296
|
import { objectiveStateStoreOverrideForNamespace } from "./objective-state.js";
|
|
297
297
|
import { offlineSyncStorageForSnapshot } from "./offline-sync-impression-drain.js";
|
|
@@ -959,15 +959,29 @@ export interface MemoryScopePlan {
|
|
|
959
959
|
warnings: string[];
|
|
960
960
|
}
|
|
961
961
|
|
|
962
|
+
/**
|
|
963
|
+
* Raw `category` spelling retained at the request boundary when the wire
|
|
964
|
+
* schema's canonicalizing transform mapped a compat alias to "fact"
|
|
965
|
+
* (issue #2829). Diagnostic only: drives the response's `categoryCoercion`
|
|
966
|
+
* note and survives quarantine parking for replay. Never reaches the write
|
|
967
|
+
* candidate or the idempotency fingerprint, and never parses from client
|
|
968
|
+
* input (the wire schema strips it).
|
|
969
|
+
*/
|
|
970
|
+
export interface RetainedCategorySpelling {
|
|
971
|
+
rawCategory?: string;
|
|
972
|
+
}
|
|
973
|
+
|
|
962
974
|
export interface EngramAccessMemoryStoreRequest
|
|
963
975
|
extends EngramAccessWriteEnvelope,
|
|
964
976
|
ExplicitCaptureInput,
|
|
965
|
-
CodingScopedWriteInput
|
|
977
|
+
CodingScopedWriteInput,
|
|
978
|
+
RetainedCategorySpelling {}
|
|
966
979
|
|
|
967
980
|
export interface EngramAccessSuggestionSubmitRequest
|
|
968
981
|
extends EngramAccessWriteEnvelope,
|
|
969
982
|
ExplicitCaptureInput,
|
|
970
|
-
CodingScopedWriteInput
|
|
983
|
+
CodingScopedWriteInput,
|
|
984
|
+
RetainedCategorySpelling {}
|
|
971
985
|
|
|
972
986
|
export interface EngramAccessWriteResponse {
|
|
973
987
|
schemaVersion: 1;
|
|
@@ -981,7 +995,7 @@ export interface EngramAccessWriteResponse {
|
|
|
981
995
|
duplicateOf?: string;
|
|
982
996
|
idempotencyKey?: string;
|
|
983
997
|
idempotencyReplay?: boolean;
|
|
984
|
-
/**
|
|
998
|
+
/** Present when a project-shaped category alias was coerced to "fact" (#2780/#2829). */
|
|
985
999
|
categoryCoercion?: CategoryAliasCoercion;
|
|
986
1000
|
}
|
|
987
1001
|
|
|
@@ -2941,8 +2955,8 @@ export class EngramAccessService extends SupportPassportAccessServiceBase {
|
|
|
2941
2955
|
async peekMemoryStoreIdempotency(
|
|
2942
2956
|
rawRequest: EngramAccessMemoryStoreRequest
|
|
2943
2957
|
): Promise<EngramAccessIdempotencyStatus> {
|
|
2944
|
-
// #2780: fingerprint the
|
|
2945
|
-
const { request } =
|
|
2958
|
+
// #2780/#2829: fingerprint the canonical category (schema transform already mapped aliases).
|
|
2959
|
+
const { canonical: request } = splitCanonicalWriteRequest(rawRequest);
|
|
2946
2960
|
const namespace = await this.resolveCodingScopedWriteNamespace(request);
|
|
2947
2961
|
const schemaVersion = request.schemaVersion ?? ENGRAM_ACCESS_WRITE_SCHEMA_VERSION;
|
|
2948
2962
|
if (schemaVersion !== ENGRAM_ACCESS_WRITE_SCHEMA_VERSION) {
|
|
@@ -2979,8 +2993,8 @@ export class EngramAccessService extends SupportPassportAccessServiceBase {
|
|
|
2979
2993
|
async peekSuggestionSubmitIdempotency(
|
|
2980
2994
|
rawRequest: EngramAccessSuggestionSubmitRequest
|
|
2981
2995
|
): Promise<EngramAccessIdempotencyStatus> {
|
|
2982
|
-
// #2780: fingerprint the
|
|
2983
|
-
const { request } =
|
|
2996
|
+
// #2780/#2829: fingerprint the canonical category (schema transform already mapped aliases).
|
|
2997
|
+
const { canonical: request } = splitCanonicalWriteRequest(rawRequest);
|
|
2984
2998
|
const namespace = await this.resolveCodingScopedWriteNamespace(request);
|
|
2985
2999
|
const schemaVersion = request.schemaVersion ?? ENGRAM_ACCESS_WRITE_SCHEMA_VERSION;
|
|
2986
3000
|
if (schemaVersion !== ENGRAM_ACCESS_WRITE_SCHEMA_VERSION) {
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { isLoopbackHost } from "./runtime/http-transport.js";
|
|
2
|
+
|
|
3
|
+
export interface BackgroundGenerationConfig {
|
|
4
|
+
/** Full chat-completions URL. Never used as the global OpenAI base URL. */
|
|
5
|
+
endpoint: string;
|
|
6
|
+
/** Loopback bearer from the generated client file. */
|
|
7
|
+
token: string;
|
|
8
|
+
timeoutSeconds: number;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function stripTrailingSlashes(value: string): string {
|
|
12
|
+
let end = value.length;
|
|
13
|
+
while (end > 0 && value.charCodeAt(end - 1) === 47) {
|
|
14
|
+
end -= 1;
|
|
15
|
+
}
|
|
16
|
+
return end === value.length ? value : value.slice(0, end);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function parseBackgroundEndpoint(value: string, keyName: string): string {
|
|
20
|
+
const trimmed = stripTrailingSlashes(value.trim());
|
|
21
|
+
let parsed: URL;
|
|
22
|
+
try {
|
|
23
|
+
parsed = new URL(trimmed);
|
|
24
|
+
} catch {
|
|
25
|
+
throw new Error(`${keyName} must be an absolute HTTP or HTTPS URL`);
|
|
26
|
+
}
|
|
27
|
+
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") {
|
|
28
|
+
throw new Error(`${keyName} must use HTTP or HTTPS`);
|
|
29
|
+
}
|
|
30
|
+
if (parsed.protocol === "http:" && !isLoopbackHost(parsed.hostname)) {
|
|
31
|
+
throw new Error(`${keyName} must use HTTPS unless the host is loopback`);
|
|
32
|
+
}
|
|
33
|
+
if (parsed.username || parsed.password || parsed.search || parsed.hash) {
|
|
34
|
+
throw new Error(
|
|
35
|
+
`${keyName} must not include credentials, query parameters, or fragments`,
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
return trimmed;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function parseBackgroundGenerationObject(
|
|
42
|
+
raw: unknown,
|
|
43
|
+
keyName: string,
|
|
44
|
+
): BackgroundGenerationConfig {
|
|
45
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
46
|
+
throw new Error(`${keyName} must be an object`);
|
|
47
|
+
}
|
|
48
|
+
const record = raw as Record<string, unknown>;
|
|
49
|
+
const endpointRaw = record.endpoint;
|
|
50
|
+
if (typeof endpointRaw !== "string" || endpointRaw.trim().length === 0) {
|
|
51
|
+
throw new Error(`${keyName} must include an endpoint URL`);
|
|
52
|
+
}
|
|
53
|
+
const tokenRaw = record.token;
|
|
54
|
+
if (typeof tokenRaw !== "string" || tokenRaw.length === 0) {
|
|
55
|
+
throw new Error(`${keyName} must include a token`);
|
|
56
|
+
}
|
|
57
|
+
const timeoutRaw = record.timeoutSeconds;
|
|
58
|
+
let timeoutSeconds = 120;
|
|
59
|
+
if (timeoutRaw !== undefined) {
|
|
60
|
+
const parsed = typeof timeoutRaw === "number" ? timeoutRaw : Number(timeoutRaw);
|
|
61
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
62
|
+
throw new Error(`${keyName} timeoutSeconds must be a finite number > 0`);
|
|
63
|
+
}
|
|
64
|
+
timeoutSeconds = parsed;
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
endpoint: parseBackgroundEndpoint(endpointRaw, `${keyName}.endpoint`),
|
|
68
|
+
token: tokenRaw,
|
|
69
|
+
timeoutSeconds,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function parseBackgroundGeneration(
|
|
74
|
+
cfg: Record<string, unknown>,
|
|
75
|
+
): BackgroundGenerationConfig | undefined {
|
|
76
|
+
const explicitRaw = cfg.backgroundGeneration;
|
|
77
|
+
if (explicitRaw === undefined || explicitRaw === null) return undefined;
|
|
78
|
+
return parseBackgroundGenerationObject(explicitRaw, "backgroundGeneration");
|
|
79
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import test from "node:test";
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
completeBackgroundGeneration,
|
|
9
|
+
parseBackgroundGenerationJson,
|
|
10
|
+
} from "./background-generation.js";
|
|
11
|
+
import { parseConfig } from "./config.js";
|
|
12
|
+
import { HourlySummarizer } from "./summarizer.js";
|
|
13
|
+
|
|
14
|
+
test("completeBackgroundGeneration posts to the dedicated endpoint with the bearer", async () => {
|
|
15
|
+
const calls: Array<{ url: string; init: RequestInit }> = [];
|
|
16
|
+
const fetchImpl: typeof fetch = async (url, init) => {
|
|
17
|
+
calls.push({ url: String(url), init: init ?? {} });
|
|
18
|
+
return new Response(
|
|
19
|
+
JSON.stringify({
|
|
20
|
+
choices: [{ message: { content: '{"bullets":["one"]}' } }],
|
|
21
|
+
}),
|
|
22
|
+
{ status: 200, headers: { "content-type": "application/json" } },
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const text = await completeBackgroundGeneration(
|
|
27
|
+
{
|
|
28
|
+
backgroundGeneration: {
|
|
29
|
+
endpoint: "http://127.0.0.1:8765/v1/chat/completions",
|
|
30
|
+
token: "bridge-token-fixture",
|
|
31
|
+
timeoutSeconds: 12,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
[{ role: "user", content: "summarize" }],
|
|
35
|
+
fetchImpl,
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
assert.equal(text, '{"bullets":["one"]}');
|
|
39
|
+
assert.equal(calls.length, 1);
|
|
40
|
+
assert.equal(calls[0]?.url, "http://127.0.0.1:8765/v1/chat/completions");
|
|
41
|
+
const headers = new Headers(calls[0]?.init.headers);
|
|
42
|
+
assert.equal(headers.get("authorization"), "Bearer bridge-token-fixture");
|
|
43
|
+
assert.equal(headers.get("content-type"), "application/json");
|
|
44
|
+
assert.equal(
|
|
45
|
+
calls[0]?.init.body,
|
|
46
|
+
JSON.stringify({ messages: [{ role: "user", content: "summarize" }] }),
|
|
47
|
+
);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test("completeBackgroundGeneration refuses an unconfigured client", async () => {
|
|
51
|
+
await assert.rejects(
|
|
52
|
+
() => completeBackgroundGeneration({}, [{ role: "user", content: "x" }]),
|
|
53
|
+
/not configured/,
|
|
54
|
+
);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("parseBackgroundGenerationJson keeps the first valid candidate", () => {
|
|
58
|
+
const parsed = parseBackgroundGenerationJson(
|
|
59
|
+
'preamble {"bullets":["kept"]} trailing',
|
|
60
|
+
(value) => {
|
|
61
|
+
const record = value as { bullets?: string[] };
|
|
62
|
+
if (!Array.isArray(record.bullets)) throw new Error("no bullets");
|
|
63
|
+
return record.bullets;
|
|
64
|
+
},
|
|
65
|
+
);
|
|
66
|
+
assert.deepEqual(parsed, ["kept"]);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
test("HourlySummarizer uses backgroundGeneration and not openaiBaseUrl", async () => {
|
|
70
|
+
const memoryDir = mkdtempSync(path.join(tmpdir(), "remnic-bg-summary-"));
|
|
71
|
+
const previousFetch = globalThis.fetch;
|
|
72
|
+
const previousXdg = process.env.XDG_CONFIG_HOME;
|
|
73
|
+
process.env.XDG_CONFIG_HOME = memoryDir;
|
|
74
|
+
const calls: string[] = [];
|
|
75
|
+
try {
|
|
76
|
+
const config = parseConfig({
|
|
77
|
+
memoryDir,
|
|
78
|
+
openaiApiKey: "keep-me",
|
|
79
|
+
openaiBaseUrl: "http://127.0.0.1:9999/v1",
|
|
80
|
+
backgroundGeneration: {
|
|
81
|
+
endpoint: "http://127.0.0.1:8765/v1/chat/completions",
|
|
82
|
+
token: "bridge-token-fixture",
|
|
83
|
+
timeoutSeconds: 12,
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
globalThis.fetch = (async (url) => {
|
|
87
|
+
calls.push(String(url));
|
|
88
|
+
if (String(url) !== "http://127.0.0.1:8765/v1/chat/completions") {
|
|
89
|
+
return new Response("not the bridge", { status: 404 });
|
|
90
|
+
}
|
|
91
|
+
return new Response(
|
|
92
|
+
JSON.stringify({
|
|
93
|
+
choices: [{ message: { content: '{"bullets":["bridge-only"]}' } }],
|
|
94
|
+
}),
|
|
95
|
+
{ status: 200, headers: { "content-type": "application/json" } },
|
|
96
|
+
);
|
|
97
|
+
}) as typeof fetch;
|
|
98
|
+
|
|
99
|
+
const summarizer = new HourlySummarizer(config);
|
|
100
|
+
const summary = await summarizer.generateSummary(
|
|
101
|
+
"session-bridge",
|
|
102
|
+
new Date("2026-08-23T10:00:00.000Z"),
|
|
103
|
+
[
|
|
104
|
+
{
|
|
105
|
+
timestamp: "2026-08-23T10:01:00.000Z",
|
|
106
|
+
role: "user",
|
|
107
|
+
content: "ship the bridge",
|
|
108
|
+
sessionKey: "session-bridge",
|
|
109
|
+
turnId: "t1",
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
assert.deepEqual(summary?.bullets, ["bridge-only"]);
|
|
115
|
+
assert.deepEqual(calls, ["http://127.0.0.1:8765/v1/chat/completions"]);
|
|
116
|
+
assert.equal(config.openaiBaseUrl, "http://127.0.0.1:9999/v1");
|
|
117
|
+
} finally {
|
|
118
|
+
globalThis.fetch = previousFetch;
|
|
119
|
+
if (previousXdg === undefined) delete process.env.XDG_CONFIG_HOME;
|
|
120
|
+
else process.env.XDG_CONFIG_HOME = previousXdg;
|
|
121
|
+
rmSync(memoryDir, { recursive: true, force: true });
|
|
122
|
+
}
|
|
123
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { extractJsonCandidates } from "./json-extract.js";
|
|
2
|
+
import type { PluginConfig } from "./types.js";
|
|
3
|
+
|
|
4
|
+
export type BackgroundGenerationMessage = {
|
|
5
|
+
role: string;
|
|
6
|
+
content: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export async function completeBackgroundGeneration(
|
|
10
|
+
config: Pick<PluginConfig, "backgroundGeneration">,
|
|
11
|
+
messages: BackgroundGenerationMessage[],
|
|
12
|
+
fetchImpl: typeof fetch = fetch,
|
|
13
|
+
): Promise<string> {
|
|
14
|
+
const background = config.backgroundGeneration;
|
|
15
|
+
if (!background) {
|
|
16
|
+
throw new Error("backgroundGeneration is not configured");
|
|
17
|
+
}
|
|
18
|
+
const response = await fetchImpl(background.endpoint, {
|
|
19
|
+
method: "POST",
|
|
20
|
+
headers: {
|
|
21
|
+
"content-type": "application/json",
|
|
22
|
+
authorization: `Bearer ${background.token}`,
|
|
23
|
+
},
|
|
24
|
+
body: JSON.stringify({ messages }),
|
|
25
|
+
signal: AbortSignal.timeout(Math.max(1, background.timeoutSeconds) * 1000),
|
|
26
|
+
});
|
|
27
|
+
if (!response.ok) {
|
|
28
|
+
throw new Error(`background generation failed (${response.status})`);
|
|
29
|
+
}
|
|
30
|
+
const payload = (await response.json()) as {
|
|
31
|
+
choices?: Array<{ message?: { content?: string } }>;
|
|
32
|
+
};
|
|
33
|
+
const text = payload.choices?.[0]?.message?.content;
|
|
34
|
+
if (typeof text !== "string" || text.length === 0) {
|
|
35
|
+
throw new Error("background generation returned no content");
|
|
36
|
+
}
|
|
37
|
+
return text;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function parseBackgroundGenerationJson<T>(
|
|
41
|
+
text: string,
|
|
42
|
+
parse: (value: unknown) => T,
|
|
43
|
+
): T | null {
|
|
44
|
+
for (const candidate of extractJsonCandidates(text)) {
|
|
45
|
+
try {
|
|
46
|
+
return parse(JSON.parse(candidate));
|
|
47
|
+
} catch {
|
|
48
|
+
// keep trying candidates
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
package/src/cli-fallback.ts
CHANGED
|
@@ -59,6 +59,11 @@ export function isCodexCliFallbackRunnerRegistered(): boolean {
|
|
|
59
59
|
return processRunner !== undefined;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
+
/** Current process-local Codex CLI runner, if any. */
|
|
63
|
+
export function getCodexCliFallbackRunnerForProcess(): CodexCliFallbackRunner | undefined {
|
|
64
|
+
return processRunner;
|
|
65
|
+
}
|
|
66
|
+
|
|
62
67
|
/**
|
|
63
68
|
* Registers the process-local Codex CLI transport. Core itself stays free of
|
|
64
69
|
* child_process here; hosts and benchmark runtimes opt in, and the
|
|
@@ -79,14 +84,15 @@ export async function callCodexCliFallback(
|
|
|
79
84
|
modelId: string,
|
|
80
85
|
messages: CodexCliFallbackMessage[],
|
|
81
86
|
options: CodexCliFallbackOptions = {},
|
|
87
|
+
runner: CodexCliFallbackRunner | undefined = processRunner,
|
|
82
88
|
): Promise<CodexCliFallbackResult> {
|
|
83
|
-
if (!
|
|
89
|
+
if (!runner) {
|
|
84
90
|
throw new Error(
|
|
85
91
|
'codex-cli fallback transport is not registered; install a runner with setCodexCliFallbackRunnerForProcess() before using api: "codex-cli"',
|
|
86
92
|
);
|
|
87
93
|
}
|
|
88
94
|
|
|
89
|
-
return await
|
|
95
|
+
return await runner({
|
|
90
96
|
config: normalizeCodexCliFallbackConfig(config),
|
|
91
97
|
modelId: normalizeCodexCliModel(modelId),
|
|
92
98
|
messages,
|