@remnic/core 9.69.39 → 9.69.41
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 +16 -14
- package/dist/access-admin-ops-surface.js +75 -74
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +16 -14
- package/dist/access-authorization-probe.js +76 -75
- package/dist/access-boundary.d.ts +16 -14
- package/dist/access-boundary.js +75 -74
- package/dist/access-cli.js +173 -170
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +1 -1
- package/dist/access-extraction-force-flush.d.ts +16 -14
- package/dist/access-extraction-force-flush.js +75 -74
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-briefing.d.ts +16 -14
- package/dist/access-http-briefing.js +76 -75
- package/dist/access-http-lcm-compaction.d.ts +16 -14
- package/dist/access-http-lifecycle-flush.d.ts +16 -14
- package/dist/access-http-offline-stream.d.ts +16 -14
- package/dist/access-http-query.d.ts +2 -2
- package/dist/access-http-query.js +77 -76
- package/dist/access-http.d.ts +17 -15
- package/dist/access-http.js +95 -92
- package/dist/access-identity-continuity-surface.d.ts +13 -12
- package/dist/access-identity-continuity-surface.js +75 -74
- package/dist/access-lcm-surface.d.ts +16 -14
- package/dist/access-lcm-surface.js +75 -74
- package/dist/access-mcp-shared-context-tools.d.ts +156 -0
- package/dist/access-mcp-shared-context-tools.js +8 -0
- package/dist/access-mcp.d.ts +16 -14
- package/dist/access-mcp.js +86 -83
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight-DY4z6L5X.d.ts → access-namespace-preflight-DWsMc9Dh.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +75 -74
- package/dist/access-observe-transcript.d.ts +13 -12
- package/dist/access-observe-write-category.d.ts +1 -1
- package/dist/access-observe-write-category.js +4 -4
- package/dist/access-observe-write-surface.d.ts +16 -14
- package/dist/access-observe-write-surface.js +75 -74
- package/dist/access-offline-manifest.d.ts +37 -13
- package/dist/access-offline-manifest.js +15 -11
- package/dist/access-operations-batch.js +79 -77
- package/dist/access-operations.d.ts +16 -14
- package/dist/access-operations.js +84 -82
- package/dist/access-recall-concurrency.d.ts +16 -14
- package/dist/access-recall-concurrency.js +75 -74
- package/dist/access-recall-response.d.ts +16 -14
- package/dist/access-recall-response.js +75 -74
- package/dist/access-recall-surface.d.ts +16 -14
- package/dist/access-recall-surface.js +75 -74
- package/dist/access-schema.d.ts +5 -3
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-MY4bsr_Q.d.ts → access-service-Cisy5YDq.d.ts} +14 -9
- package/dist/access-service-helpers.d.ts +16 -14
- package/dist/access-service.d.ts +16 -14
- package/dist/access-service.js +75 -74
- package/dist/access-surface-catalog.d.ts +16 -14
- package/dist/access-surface-catalog.js +77 -76
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +6 -5
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-memory-bridge.js +3 -3
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +10 -9
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +1 -1
- package/dist/ambient-provenance.d.ts +1 -1
- package/dist/artifact-search.d.ts +1 -1
- package/dist/{auto-sync-RP4C6ZPF.js → auto-sync-7PGUFY7U.js} +7 -7
- package/dist/background-generation-config.d.ts +1 -1
- package/dist/background-generation-config.js +3 -1
- package/dist/background-generation.d.ts +1 -1
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +13 -12
- package/dist/briefing-window.d.ts +2 -2
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +23 -23
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-turn-helpers.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/buffer.js +7 -7
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +3 -2
- package/dist/calibration.js +2 -2
- package/dist/capabilities.d.ts +1 -1
- package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
- package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-3MNURAQ3.js} +2 -2
- package/dist/{catalog-CW87xGx8.d.ts → catalog-wcX1QhtQ.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +29 -28
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-YFTNZMGR.js → chunk-27NO2KVB.js} +31 -8
- package/dist/chunk-27NO2KVB.js.map +1 -0
- package/dist/{chunk-M6RORUO5.js → chunk-2EYZ32LH.js} +24 -2
- package/dist/{chunk-M6RORUO5.js.map → chunk-2EYZ32LH.js.map} +1 -1
- package/dist/{chunk-XH3HGI2N.js → chunk-2HQPE2NM.js} +2 -2
- package/dist/{chunk-3EKVN2OP.js → chunk-2ZG2LLZT.js} +2 -2
- package/dist/{chunk-6EHM2AV7.js → chunk-3BLHPQHT.js} +5 -5
- package/dist/{chunk-YKREX63Z.js → chunk-3D75XIYO.js} +5 -3
- package/dist/chunk-3D75XIYO.js.map +1 -0
- package/dist/{chunk-J272ODKJ.js → chunk-42DJ235G.js} +2 -2
- package/dist/{chunk-F4EHXVP7.js → chunk-46RII65S.js} +2 -2
- package/dist/{chunk-YUW66UAH.js → chunk-4AX5OYKC.js} +2 -2
- package/dist/{chunk-AECJY3GJ.js → chunk-4IGOLIWM.js} +2 -2
- package/dist/{chunk-2ZTDRNCS.js → chunk-54QPOE45.js} +2 -2
- package/dist/{chunk-O4M4BDIJ.js → chunk-563X6JJX.js} +2 -2
- package/dist/{chunk-IL6ODG6M.js → chunk-5EQT62HH.js} +2 -2
- package/dist/{chunk-JKKII6GX.js → chunk-6MQMYXSQ.js} +2 -2
- package/dist/{chunk-TVVEYCNW.js → chunk-7K5Q6COX.js} +4 -4
- package/dist/{chunk-BV4ZKIZH.js → chunk-7ZLC4DTZ.js} +5 -4
- package/dist/{chunk-WBM2MVBK.js → chunk-A4OIJYCV.js} +2 -2
- package/dist/{chunk-RLJHJQUY.js → chunk-AFJHNHAM.js} +8 -8
- package/dist/{chunk-6YAIN5XJ.js → chunk-AIVRD66I.js} +44 -6
- package/dist/chunk-AIVRD66I.js.map +1 -0
- package/dist/{chunk-OEDW4ER7.js → chunk-AJBWVDRV.js} +2 -1
- package/dist/chunk-AJBWVDRV.js.map +1 -0
- package/dist/{chunk-4RZLTZVM.js → chunk-AKABVXFS.js} +2 -2
- package/dist/{chunk-M6HBPLBA.js → chunk-AUSRUOMQ.js} +2 -2
- package/dist/{chunk-QHT7MOUF.js → chunk-BTPCP535.js} +25 -14
- package/dist/chunk-BTPCP535.js.map +1 -0
- package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
- package/dist/{chunk-Q7CLGFA7.js → chunk-C3G6MW4W.js} +3 -3
- package/dist/{chunk-O76F5QPP.js → chunk-D6PY63OM.js} +2 -2
- package/dist/{chunk-BD7JTBYP.js → chunk-D7MAYFQP.js} +2 -2
- package/dist/{chunk-LMLGBG6H.js → chunk-DBB5JPSL.js} +2 -2
- package/dist/{chunk-TSP5WH72.js → chunk-DIXZQTGY.js} +2 -2
- package/dist/{chunk-P4ZAEYKG.js → chunk-DM5CU5J7.js} +7 -4
- package/dist/chunk-DM5CU5J7.js.map +1 -0
- package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
- package/dist/{chunk-UHRZ324M.js → chunk-E3I3NDUP.js} +4 -4
- package/dist/{chunk-AENM6GKU.js → chunk-E4LMQTST.js} +2 -2
- package/dist/{chunk-YDVAM7S4.js → chunk-EH3HNCAM.js} +13 -8
- package/dist/chunk-EH3HNCAM.js.map +1 -0
- package/dist/{chunk-MUTVRKKY.js → chunk-EMSYMYXO.js} +14 -14
- package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
- package/dist/{chunk-FXHOZGSE.js → chunk-F5H6YG5P.js} +2 -2
- package/dist/{chunk-TRLOFIQC.js → chunk-FGFC2EFR.js} +14 -13
- package/dist/chunk-FGFC2EFR.js.map +1 -0
- package/dist/{chunk-TNSCIPBQ.js → chunk-G6NQ3L4T.js} +2 -2
- package/dist/{chunk-ZMWSYUUL.js → chunk-GCBIXUPT.js} +2 -2
- package/dist/{chunk-EYKIDK33.js → chunk-GMH5QPUU.js} +22 -22
- package/dist/chunk-GMH5QPUU.js.map +1 -0
- package/dist/{chunk-4BCHFSC7.js → chunk-GWNSKQDA.js} +3 -3
- package/dist/{chunk-JDX2OA4R.js → chunk-HNHIHXSD.js} +2 -2
- package/dist/{chunk-GG5FHZJJ.js → chunk-I33QYUAF.js} +6 -6
- package/dist/{chunk-LPYYY4AP.js → chunk-I46BYY7U.js} +653 -328
- package/dist/chunk-I46BYY7U.js.map +1 -0
- package/dist/{chunk-CZTPU65V.js → chunk-ICN37XHG.js} +74 -27
- package/dist/chunk-ICN37XHG.js.map +1 -0
- package/dist/chunk-IFBSZGW3.js +42 -0
- package/dist/chunk-IFBSZGW3.js.map +1 -0
- package/dist/{chunk-AAZEKXUP.js → chunk-IYIPXAIJ.js} +2 -2
- package/dist/{chunk-ACY4ZPF7.js → chunk-J2MGTGKC.js} +10 -5
- package/dist/chunk-J2MGTGKC.js.map +1 -0
- package/dist/chunk-JATHBCAV.js +94 -0
- package/dist/chunk-JATHBCAV.js.map +1 -0
- package/dist/{chunk-5U7K4W6K.js → chunk-JDOBQPJY.js} +3 -3
- package/dist/{chunk-TG3FAM2S.js → chunk-JL4TQYM5.js} +48 -1
- package/dist/{chunk-TG3FAM2S.js.map → chunk-JL4TQYM5.js.map} +1 -1
- package/dist/{chunk-UZZ7SQT3.js → chunk-JMWUPUE6.js} +2 -2
- package/dist/{chunk-ENBPQEVU.js → chunk-JSD7Q7LD.js} +2 -2
- package/dist/{chunk-QTQ6XKGT.js → chunk-K5D2XVNN.js} +4 -4
- package/dist/chunk-K5D2XVNN.js.map +1 -0
- package/dist/{chunk-3CBI2ZSA.js → chunk-KG2OOAFF.js} +20 -12
- package/dist/chunk-KG2OOAFF.js.map +1 -0
- package/dist/{chunk-Q432REND.js → chunk-KJLLPG26.js} +2 -2
- package/dist/{chunk-JTQR6L2N.js → chunk-KLUC2GSG.js} +6 -6
- package/dist/{chunk-OB3XMWX5.js → chunk-KVO2BTA4.js} +2 -2
- package/dist/{chunk-PCOVEDPK.js → chunk-KZJM7R4F.js} +3 -3
- package/dist/{chunk-X4TD4O2F.js → chunk-LE2KZ72G.js} +3 -3
- package/dist/{chunk-HIP6DKJJ.js → chunk-LQVXSRAJ.js} +2 -2
- package/dist/{chunk-A7GQBJP5.js → chunk-LVFI5LG7.js} +7 -7
- package/dist/{chunk-FWWWUPOE.js → chunk-MCMS4VUK.js} +25 -15
- package/dist/chunk-MCMS4VUK.js.map +1 -0
- package/dist/{chunk-5SPCMAUC.js → chunk-N6XTC56E.js} +13 -81
- package/dist/chunk-N6XTC56E.js.map +1 -0
- package/dist/{chunk-VBSNUH4J.js → chunk-ND7MAIJC.js} +2 -2
- package/dist/{chunk-TNZNSMVJ.js → chunk-NYWCFC3K.js} +301 -348
- package/dist/chunk-NYWCFC3K.js.map +1 -0
- package/dist/{chunk-54NX5EG4.js → chunk-P66QH6R6.js} +2 -2
- package/dist/{chunk-62D2PAAM.js → chunk-PAAJWQH5.js} +4 -4
- package/dist/{chunk-TA4C3XB7.js → chunk-PFKIOYJH.js} +2 -2
- package/dist/{chunk-WIWLX65T.js → chunk-PGGPRF6J.js} +2 -2
- package/dist/{chunk-V6EGNVUT.js → chunk-PIWFNPQT.js} +4 -4
- package/dist/{chunk-BLDBT6HZ.js → chunk-PJRKLB4Z.js} +18 -2
- package/dist/chunk-PJRKLB4Z.js.map +1 -0
- package/dist/{chunk-4JVQRFZD.js → chunk-PLJ2MQFT.js} +11 -11
- package/dist/{chunk-4RX5O34R.js → chunk-PQ42DJNG.js} +2 -2
- package/dist/{chunk-37CAEC7E.js → chunk-PWPIERBM.js} +4 -4
- package/dist/{chunk-ZEGL7YCC.js → chunk-Q62GA5U2.js} +2 -2
- package/dist/{chunk-CC37E3QM.js → chunk-QKCXRS5A.js} +16 -1
- package/dist/chunk-QKCXRS5A.js.map +1 -0
- package/dist/{chunk-WKDFJXW5.js → chunk-QM2SPLKQ.js} +1 -1
- package/dist/chunk-QM2SPLKQ.js.map +1 -0
- package/dist/{chunk-GAS7KYC7.js → chunk-RQQO3ORQ.js} +2 -2
- package/dist/{chunk-UZEHHXYC.js → chunk-S4MJTIPG.js} +85 -81
- package/dist/chunk-S4MJTIPG.js.map +1 -0
- package/dist/chunk-SK7D34OL.js +68 -0
- package/dist/chunk-SK7D34OL.js.map +1 -0
- package/dist/{chunk-LQNRVPTV.js → chunk-TRTLWUDD.js} +164 -130
- package/dist/chunk-TRTLWUDD.js.map +1 -0
- package/dist/{chunk-JXN77SGO.js → chunk-U2VDCFXW.js} +1 -1
- package/dist/chunk-U2VDCFXW.js.map +1 -0
- package/dist/{chunk-CWTCMZGE.js → chunk-UHSOPTNB.js} +132 -6
- package/dist/chunk-UHSOPTNB.js.map +1 -0
- package/dist/{chunk-3NPNBVFR.js → chunk-UZGHKD3T.js} +2 -2
- package/dist/{chunk-IQEJIOEU.js → chunk-V2EXYQEQ.js} +20 -12
- package/dist/chunk-V2EXYQEQ.js.map +1 -0
- package/dist/{chunk-OPBFP4TF.js → chunk-V2TOGJPM.js} +46 -13
- package/dist/chunk-V2TOGJPM.js.map +1 -0
- package/dist/{chunk-VJIE4D2I.js → chunk-V62YYBBY.js} +4 -4
- package/dist/{chunk-KQAFEZQX.js → chunk-VDX2J7OX.js} +2 -2
- package/dist/{chunk-6H2G7RFT.js → chunk-VNQRRUNS.js} +11 -10
- package/dist/chunk-VNQRRUNS.js.map +1 -0
- package/dist/{chunk-6AGWBKQU.js → chunk-VSN2DMQK.js} +2 -2
- package/dist/{chunk-ZHXSOMYH.js → chunk-VVX5PZFS.js} +2 -2
- package/dist/{chunk-GI4ZBWPQ.js → chunk-W7UV2ZCA.js} +3 -3
- package/dist/{chunk-GMIQV6DD.js → chunk-WBQ4ONQJ.js} +2 -2
- package/dist/{chunk-FNHLI2RE.js → chunk-WFMQN7JE.js} +3 -3
- package/dist/{chunk-MVAQ2WM3.js → chunk-WGZHSQDV.js} +9 -5
- package/dist/chunk-WGZHSQDV.js.map +1 -0
- package/dist/{chunk-IYKZJVL5.js → chunk-WN2OXGGH.js} +1 -1
- package/dist/chunk-WN2OXGGH.js.map +1 -0
- package/dist/{chunk-ZBW7A667.js → chunk-WPGA4RYI.js} +2 -2
- package/dist/{chunk-YQNNHLCG.js → chunk-WPGR3RW4.js} +2 -2
- package/dist/{chunk-SV4Z2S67.js → chunk-WUUGE7QC.js} +54 -21
- package/dist/chunk-WUUGE7QC.js.map +1 -0
- package/dist/{chunk-NXGSONWM.js → chunk-WZIO3TW6.js} +2 -2
- package/dist/{chunk-ZZUVBZL2.js → chunk-X2QPKLPL.js} +2 -2
- package/dist/{chunk-5HYUUFMQ.js → chunk-XCPNH2MG.js} +259 -10
- package/dist/chunk-XCPNH2MG.js.map +1 -0
- package/dist/{chunk-VSL63CFJ.js → chunk-XRS65T4O.js} +9 -9
- package/dist/{chunk-5N4MZLEH.js → chunk-YFXAWGMR.js} +2 -2
- package/dist/{chunk-KQW3YGEN.js → chunk-YR5QT4SR.js} +32 -9
- package/dist/chunk-YR5QT4SR.js.map +1 -0
- package/dist/{chunk-CARRTDKC.js → chunk-Z22M4JCY.js} +4 -3
- package/dist/chunk-Z22M4JCY.js.map +1 -0
- package/dist/{chunk-D545Z7UH.js → chunk-Z535ADTC.js} +3 -3
- package/dist/{chunk-B36GUU6T.js → chunk-Z7NBT6AK.js} +38 -5
- package/dist/chunk-Z7NBT6AK.js.map +1 -0
- package/dist/{chunk-5YCNDC3C.js → chunk-ZX6NNFSY.js} +3 -3
- package/dist/{chunk-3N3PBBEH.js → chunk-ZYSOT6HD.js} +2 -2
- package/dist/{chunk-MCRVQ5YQ.js → chunk-ZZEIL3MI.js} +2 -2
- package/dist/{cli-DGq0MNpO.d.ts → cli-CUlMlS2N.d.ts} +5 -5
- package/dist/cli.d.ts +18 -16
- package/dist/cli.js +129 -126
- package/dist/coding/export-okf-codegraph.d.ts +1 -1
- package/dist/coding/export-okf-codegraph.js +22 -22
- package/dist/coding/pre-action-gate.d.ts +1 -1
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +25 -25
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +10 -9
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +25 -25
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/codex-materialize.js +2 -2
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +25 -25
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/contradiction/index.d.ts +6 -5
- package/dist/contradiction/index.js +4 -4
- package/dist/{contradiction-scan-BSGKZHYJ.js → contradiction-scan-GVD4JJ7B.js} +4 -4
- package/dist/converge-config.d.ts +1 -1
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +26 -26
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/corpus-watermark.d.ts +1 -1
- package/dist/corpus-watermark.js +25 -25
- package/dist/cross-lingual-recall.d.ts +1 -1
- package/dist/dashboard-runtime.js +2 -2
- package/dist/day-summary.d.ts +1 -1
- package/dist/deep-recall-config.d.ts +12 -1
- package/dist/deep-recall-config.js +5 -3
- package/dist/deep-recall-http-glue.d.ts +19 -15
- package/dist/deep-recall-http-glue.js +7 -4
- package/dist/deep-recall-mcp-tools.d.ts +16 -14
- package/dist/deep-recall-policy-llm.d.ts +14 -3
- package/dist/deep-recall-policy-llm.js +3 -3
- package/dist/deep-recall-seeds.d.ts +4 -1
- package/dist/deep-recall-seeds.js +1 -1
- package/dist/deep-recall.d.ts +12 -1
- package/dist/deep-recall.js +3 -2
- package/dist/delinearize.d.ts +1 -1
- package/dist/dependency-propagation-config.d.ts +1 -1
- package/dist/{dependency-propagation-delivery-Cq1ekOwV.d.ts → dependency-propagation-delivery-BDDjImQn.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-origin-fields.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +24 -24
- package/dist/entity-schema.d.ts +1 -1
- package/dist/episodic-context.d.ts +1 -1
- package/dist/eval-trajectory-contracts.d.ts +1 -1
- package/dist/eval-trajectory-store.d.ts +1 -1
- package/dist/eval-trajectory.d.ts +1 -1
- package/dist/explicit-capture.d.ts +13 -12
- package/dist/explicit-capture.js +3 -3
- package/dist/external-wiki-access.d.ts +16 -14
- package/dist/external-wiki-access.js +76 -75
- package/dist/external-wiki-collection-registration.d.ts +1 -1
- package/dist/external-wiki-collection.d.ts +1 -1
- package/dist/external-wiki-mcp-tools.d.ts +16 -14
- package/dist/extraction-error-classification.d.ts +14 -3
- package/dist/extraction-error-classification.js +5 -3
- package/dist/extraction-faithfulness.d.ts +4 -3
- package/dist/extraction-faithfulness.js +3 -3
- package/dist/extraction-judge-telemetry.d.ts +4 -3
- package/dist/extraction-judge-training.d.ts +4 -3
- package/dist/extraction-judge.d.ts +4 -3
- package/dist/extraction-judge.js +3 -3
- package/dist/extraction-liveness.d.ts +1 -1
- package/dist/extraction-normalization.d.ts +1 -1
- package/dist/extraction-prompt.d.ts +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +1 -1
- package/dist/extraction-source-grounding.d.ts +1 -1
- package/dist/extraction-span-config.d.ts +1 -1
- package/dist/extraction-span-materialize.d.ts +1 -1
- package/dist/extraction.d.ts +4 -4
- package/dist/extraction.js +40 -38
- package/dist/fallback-llm-codex-subscription.d.ts +65 -10
- package/dist/fallback-llm-codex-subscription.js +19 -1
- package/dist/fallback-llm.d.ts +25 -28
- package/dist/fallback-llm.js +4 -3
- package/dist/{first-start-migration-ZWMV5CX4.js → first-start-migration-L3UFX5CU.js} +4 -4
- package/dist/{generic-recall-paths-BcySh_f9.d.ts → generic-recall-paths-CpDzNO_I.d.ts} +1 -1
- package/dist/graph-append-error.d.ts +1 -1
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-jsonl.d.ts +1 -1
- package/dist/graph-path-reconstruction.d.ts +1 -1
- package/dist/graph-path-scoring.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/harmonic-retrieval.js +3 -3
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/importers/test-utils.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/{index-DWOb4wz9.d.ts → index-CtmmCJoo.d.ts} +3 -3
- package/dist/index.d.ts +80 -40
- package/dist/index.js +316 -296
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +11 -11
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm-DpXIvm6F.d.ts +247 -0
- package/dist/local-llm-config.d.ts +4 -1
- package/dist/local-llm-config.js +4 -2
- package/dist/local-llm-helpers.d.ts +18 -69
- package/dist/local-llm-helpers.js +1 -1
- package/dist/local-llm.d.ts +3 -170
- package/dist/local-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/location/index.d.ts +3 -3
- package/dist/location/index.js +25 -25
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +24 -24
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +23 -23
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +25 -25
- package/dist/{maintenance-CW9wCzMP.d.ts → maintenance-CNgoLsoM.d.ts} +13 -6
- package/dist/mcp-memory-inspector-app.d.ts +16 -14
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-controller.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-snapshot.d.ts +1 -1
- package/dist/memory-subject-cli.d.ts +16 -14
- package/dist/memory-subject.d.ts +16 -14
- package/dist/memory-worth-outcomes.d.ts +2 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +3 -3
- package/dist/namespaces/migrate.js +24 -24
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +12 -1
- package/dist/namespaces/search.js +9 -9
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +23 -23
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/operator-doctor-corpus.d.ts +1 -1
- package/dist/operator-doctor-corpus.js +26 -26
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +45 -44
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +36 -36
- package/dist/{orchestrator-ComHLm49.d.ts → orchestrator-DT7ybIFz.d.ts} +32 -11
- package/dist/orchestrator.d.ts +13 -12
- package/dist/orchestrator.js +176 -171
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-CiYcqqhl.d.ts → pipeline-CgBEmHcz.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/proactive-contention.d.ts +2 -2
- package/dist/provenance.d.ts +1 -1
- package/dist/{public-http-CuK4_Cb1.d.ts → public-http-C8P8fyiO.d.ts} +1 -1
- package/dist/{qmd-qXD4vatU.d.ts → qmd-BkY8KpCh.d.ts} +2 -2
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/qmd.js +2 -2
- package/dist/recall-concurrency-config.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +1 -1
- package/dist/recall-navigate-access.d.ts +1 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +1 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +1 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +3 -2
- package/dist/recall-planner-llm.js +4 -3
- package/dist/recall-planner-llm.js.map +1 -1
- package/dist/recall-state-view-admission.d.ts +13 -3
- package/dist/recall-state-view-admission.js +9 -9
- package/dist/recall-state-view-anchors.d.ts +1 -1
- package/dist/recall-state-view-anchors.js +2 -2
- 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 +10 -1
- package/dist/recall-state-view.js +5 -3
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +1 -1
- package/dist/reconcile/cursor.js +2 -2
- package/dist/reconcile/manifest.d.ts +1 -1
- package/dist/reconcile/manifest.js +4 -4
- package/dist/reconcile/plan.d.ts +1 -1
- package/dist/reconcile/plan.js +2 -2
- package/dist/replay/normalizers/chatgpt.d.ts +1 -1
- package/dist/replay/normalizers/claude.d.ts +1 -1
- package/dist/replay/normalizers/openclaw.d.ts +1 -1
- package/dist/replay/normalizers/shared.d.ts +1 -1
- package/dist/replay/runner.d.ts +1 -1
- package/dist/replay/types.d.ts +1 -1
- package/dist/replica-divergence.d.ts +1 -1
- package/dist/replica-peers-config.d.ts +1 -1
- package/dist/{resolution-4GG3QZRJ.js → resolution-LXFQQ4AE.js} +5 -5
- package/dist/resolution-LXFQQ4AE.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +12 -11
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/salvage-envelope.d.ts +1 -1
- package/dist/{scope-profiles-BT9rqC3w.d.ts → scope-profiles-BBPjZ9jb.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/factory.js +8 -8
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +12 -12
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/lancedb-backend.js +2 -2
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.js +2 -2
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/orama-backend.js +2 -2
- package/dist/search/port.d.ts +2 -2
- package/dist/search/port.js +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/search/remote-backend.js +2 -2
- package/dist/{semantic-consolidation-CmZi7thY.d.ts → semantic-consolidation-BPFFVO84.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +26 -26
- package/dist/semantic-rule-promotion.js +23 -23
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +23 -23
- package/dist/{service-CLkA7AQB.d.ts → service-jKcr6Jvr.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +1 -1
- package/dist/shared-context/manager.js +2 -2
- package/dist/shared-context/write-output-controls.d.ts +34 -0
- package/dist/shared-context/write-output-controls.js +10 -0
- package/dist/shared-context/write-output-controls.js.map +1 -0
- package/dist/signal.d.ts +1 -1
- package/dist/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +31 -31
- package/dist/source-attribution.d.ts +23 -1
- package/dist/source-attribution.js +13 -3
- package/dist/standup/build.js +23 -23
- package/dist/{storage-wvX01lht.d.ts → storage-C-0Ah5OY.d.ts} +2 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +22 -22
- package/dist/subject-config.d.ts +1 -1
- package/dist/summarizer.d.ts +1 -1
- package/dist/summarizer.js +6 -6
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/support-passport/index.d.ts +18 -17
- package/dist/support-passport/index.js +78 -77
- package/dist/task-llm-config.d.ts +16 -0
- package/dist/task-llm-config.js +12 -0
- package/dist/task-llm-config.js.map +1 -0
- package/dist/temporal-supersession.d.ts +2 -2
- package/dist/temporal-timeline-recall.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +2 -2
- package/dist/tier-routing.d.ts +1 -1
- package/dist/tier-routing.js +3 -3
- package/dist/{tier-stats-LUSUUNU6.js → tier-stats-VK5PCO2L.js} +4 -4
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -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 +1 -1
- package/dist/transfer/export-okf.js +23 -23
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-Cyr32ABj.d.ts → types-cK5LydjL.d.ts} +6 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +23 -23
- package/dist/who-knows-cli.d.ts +16 -14
- package/dist/who-knows-cli.js +24 -24
- package/dist/who-knows.d.ts +16 -14
- package/dist/who-knows.js +23 -23
- package/dist/write-envelope.d.ts +1 -1
- package/package.json +12 -2
- package/src/access-category-alias.test.ts +93 -0
- package/src/access-http.ts +1 -1
- package/src/access-mcp-shared-context-tools.ts +103 -0
- package/src/access-mcp.ts +4 -74
- package/src/access-offline-manifest.ts +52 -2
- package/src/access-operations-batch.ts +45 -2
- package/src/access-schema.ts +9 -4
- package/src/access-service.ts +14 -7
- package/src/activity/config.test.ts +61 -0
- package/src/activity/config.ts +40 -1
- package/src/activity/timeline/analysis-provider.ts +8 -2
- package/src/activity/timeline/analysis-run.test.ts +82 -0
- package/src/activity/timeline/publish-cli.test.ts +30 -0
- package/src/activity/timeline/publish-cli.ts +7 -0
- package/src/activity/timeline/query.ts +8 -1
- package/src/activity/timeline/regenerate.test.ts +130 -2
- package/src/activity/timeline/regenerate.ts +14 -6
- package/src/activity/vault-frontmatter.test.ts +99 -1
- package/src/activity/vault-frontmatter.ts +131 -0
- package/src/activity/vault-publish.ts +6 -0
- package/src/activity/vault-publisher.test.ts +172 -0
- package/src/activity/vault-publisher.ts +69 -15
- package/src/activity/vault-region.test.ts +7 -2
- package/src/activity/vault-region.ts +7 -3
- package/src/background-generation-config.ts +32 -6
- package/src/background-generation.test.ts +10 -1
- package/src/cli/deep-recall-commands.ts +22 -10
- package/src/cli/timeline-publish-commands.ts +9 -0
- package/src/config.test.ts +170 -43
- package/src/config.ts +22 -5
- package/src/dedup/merge.test.ts +283 -0
- package/src/deep-recall-boundary.test.ts +66 -0
- package/src/deep-recall-cli.test.ts +82 -0
- package/src/deep-recall-config.test.ts +56 -0
- package/src/deep-recall-config.ts +32 -0
- package/src/deep-recall-http-glue.ts +10 -10
- package/src/deep-recall-policy-llm.test.ts +242 -0
- package/src/deep-recall-policy-llm.ts +37 -7
- package/src/deep-recall-seeds.test.ts +53 -0
- package/src/deep-recall-seeds.ts +7 -1
- package/src/deep-recall-surface.test.ts +93 -0
- package/src/deep-recall.test.ts +121 -0
- package/src/deep-recall.ts +88 -28
- package/src/extraction-error-classification.ts +36 -1
- package/src/extraction-timeout.test.ts +110 -1
- package/src/extraction.test.ts +19 -1
- package/src/extraction.ts +23 -21
- package/src/fallback-llm-codex-subscription.ts +220 -12
- package/src/fallback-llm-parse-failure.test.ts +156 -0
- package/src/fallback-llm.test.ts +178 -0
- package/src/fallback-llm.ts +200 -198
- package/src/index.ts +1 -0
- package/src/local-llm-config.ts +11 -10
- package/src/local-llm-headers-timeout.test.ts +30 -0
- package/src/local-llm-helpers.ts +28 -0
- package/src/local-llm.ts +8 -19
- package/src/meetings/config.test.ts +58 -0
- package/src/namespaces/search.test.ts +51 -1
- package/src/namespaces/search.ts +48 -3
- package/src/orchestration/extraction-persist-promotion.test.ts +228 -2
- package/src/orchestration/extraction-persist-promotion.ts +17 -14
- package/src/orchestration/extraction-persist.ts +1 -1
- package/src/orchestration/orchestrator-helpers.test.ts +104 -0
- package/src/orchestration/orchestrator-init.ts +366 -106
- package/src/orchestration/recall-entry.ts +15 -1
- package/src/orchestration/recall-internal.ts +6 -11
- package/src/orchestration/recall-section-coordinator.ts +65 -28
- package/src/orchestration/recall-state-view-pipeline.test.ts +8 -2
- package/src/orchestration/semantic-merge-commit-effects.ts +45 -16
- package/src/orchestration/semantic-merge-persist.ts +23 -36
- package/src/orchestration/semantic-merge-promotion-payload.ts +62 -6
- package/src/orchestration/startup-collection-checks.ts +85 -0
- package/src/orchestrator-flush.test.ts +7 -0
- package/src/orchestrator-init.test.ts +1539 -0
- package/src/orchestrator.ts +7 -0
- package/src/providers/codex-subscription.test.ts +127 -0
- package/src/providers/codex-subscription.ts +1 -1
- package/src/qmd.ts +21 -10
- package/src/recall-state-view-admission.ts +11 -1
- package/src/recall-state-view-budget.test.ts +424 -0
- package/src/recall-state-view-cron-intent.test.ts +268 -0
- package/src/recall-state-view-widen.test.ts +14 -5
- package/src/recall-state-view-widen.ts +8 -1
- package/src/recall-state-view.ts +35 -18
- package/src/reconcile-identity-cache.test.ts +82 -1
- package/src/search/port.ts +1 -1
- package/src/shared-context/envelope-io.ts +25 -0
- package/src/shared-context/envelope-wiring.test.ts +4 -2
- package/src/shared-context/manager.ts +1 -0
- package/src/shared-context/write-output-controls.test.ts +192 -0
- package/src/shared-context/write-output-controls.ts +72 -0
- package/src/source-attribution.test.ts +39 -0
- package/src/source-attribution.ts +72 -0
- package/src/storage/cas-revision-store.test.ts +4 -0
- package/src/storage/cas-revision-store.ts +104 -12
- package/src/storage-frontmatter-cas.test.ts +19 -17
- package/src/summarizer.ts +5 -1
- package/src/task-llm-config.test.ts +124 -0
- package/src/task-llm-config.ts +88 -0
- package/src/testing/subjects/startup-discovery-lifecycle.test.ts +273 -0
- package/src/types.ts +6 -0
- package/dist/chunk-3CBI2ZSA.js.map +0 -1
- package/dist/chunk-5HYUUFMQ.js.map +0 -1
- package/dist/chunk-5SPCMAUC.js.map +0 -1
- package/dist/chunk-6H2G7RFT.js.map +0 -1
- package/dist/chunk-6YAIN5XJ.js.map +0 -1
- package/dist/chunk-ACY4ZPF7.js.map +0 -1
- package/dist/chunk-B36GUU6T.js.map +0 -1
- package/dist/chunk-BLDBT6HZ.js.map +0 -1
- package/dist/chunk-CARRTDKC.js.map +0 -1
- package/dist/chunk-CC37E3QM.js.map +0 -1
- package/dist/chunk-CWTCMZGE.js.map +0 -1
- package/dist/chunk-CZTPU65V.js.map +0 -1
- package/dist/chunk-EYKIDK33.js.map +0 -1
- package/dist/chunk-FWWWUPOE.js.map +0 -1
- package/dist/chunk-IQEJIOEU.js.map +0 -1
- package/dist/chunk-IYKZJVL5.js.map +0 -1
- package/dist/chunk-JXN77SGO.js.map +0 -1
- package/dist/chunk-KQW3YGEN.js.map +0 -1
- package/dist/chunk-LPYYY4AP.js.map +0 -1
- package/dist/chunk-LQNRVPTV.js.map +0 -1
- package/dist/chunk-MVAQ2WM3.js.map +0 -1
- package/dist/chunk-OEDW4ER7.js.map +0 -1
- package/dist/chunk-OPBFP4TF.js.map +0 -1
- package/dist/chunk-P4ZAEYKG.js.map +0 -1
- package/dist/chunk-QHT7MOUF.js.map +0 -1
- package/dist/chunk-QTQ6XKGT.js.map +0 -1
- package/dist/chunk-SV4Z2S67.js.map +0 -1
- package/dist/chunk-TNZNSMVJ.js.map +0 -1
- package/dist/chunk-TRLOFIQC.js.map +0 -1
- package/dist/chunk-UZEHHXYC.js.map +0 -1
- package/dist/chunk-WKDFJXW5.js.map +0 -1
- package/dist/chunk-YDVAM7S4.js.map +0 -1
- package/dist/chunk-YFTNZMGR.js.map +0 -1
- package/dist/chunk-YKREX63Z.js.map +0 -1
- /package/dist/{capsule-crypto-7FJQINUR.js.map → access-mcp-shared-context-tools.js.map} +0 -0
- /package/dist/{auto-sync-RP4C6ZPF.js.map → auto-sync-7PGUFY7U.js.map} +0 -0
- /package/dist/{contradiction-scan-BSGKZHYJ.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
- /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-3MNURAQ3.js.map} +0 -0
- /package/dist/{chunk-XH3HGI2N.js.map → chunk-2HQPE2NM.js.map} +0 -0
- /package/dist/{chunk-3EKVN2OP.js.map → chunk-2ZG2LLZT.js.map} +0 -0
- /package/dist/{chunk-6EHM2AV7.js.map → chunk-3BLHPQHT.js.map} +0 -0
- /package/dist/{chunk-J272ODKJ.js.map → chunk-42DJ235G.js.map} +0 -0
- /package/dist/{chunk-F4EHXVP7.js.map → chunk-46RII65S.js.map} +0 -0
- /package/dist/{chunk-YUW66UAH.js.map → chunk-4AX5OYKC.js.map} +0 -0
- /package/dist/{chunk-AECJY3GJ.js.map → chunk-4IGOLIWM.js.map} +0 -0
- /package/dist/{chunk-2ZTDRNCS.js.map → chunk-54QPOE45.js.map} +0 -0
- /package/dist/{chunk-O4M4BDIJ.js.map → chunk-563X6JJX.js.map} +0 -0
- /package/dist/{chunk-IL6ODG6M.js.map → chunk-5EQT62HH.js.map} +0 -0
- /package/dist/{chunk-JKKII6GX.js.map → chunk-6MQMYXSQ.js.map} +0 -0
- /package/dist/{chunk-TVVEYCNW.js.map → chunk-7K5Q6COX.js.map} +0 -0
- /package/dist/{chunk-BV4ZKIZH.js.map → chunk-7ZLC4DTZ.js.map} +0 -0
- /package/dist/{chunk-WBM2MVBK.js.map → chunk-A4OIJYCV.js.map} +0 -0
- /package/dist/{chunk-RLJHJQUY.js.map → chunk-AFJHNHAM.js.map} +0 -0
- /package/dist/{chunk-4RZLTZVM.js.map → chunk-AKABVXFS.js.map} +0 -0
- /package/dist/{chunk-M6HBPLBA.js.map → chunk-AUSRUOMQ.js.map} +0 -0
- /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
- /package/dist/{chunk-Q7CLGFA7.js.map → chunk-C3G6MW4W.js.map} +0 -0
- /package/dist/{chunk-O76F5QPP.js.map → chunk-D6PY63OM.js.map} +0 -0
- /package/dist/{chunk-BD7JTBYP.js.map → chunk-D7MAYFQP.js.map} +0 -0
- /package/dist/{chunk-LMLGBG6H.js.map → chunk-DBB5JPSL.js.map} +0 -0
- /package/dist/{chunk-TSP5WH72.js.map → chunk-DIXZQTGY.js.map} +0 -0
- /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
- /package/dist/{chunk-UHRZ324M.js.map → chunk-E3I3NDUP.js.map} +0 -0
- /package/dist/{chunk-AENM6GKU.js.map → chunk-E4LMQTST.js.map} +0 -0
- /package/dist/{chunk-MUTVRKKY.js.map → chunk-EMSYMYXO.js.map} +0 -0
- /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
- /package/dist/{chunk-FXHOZGSE.js.map → chunk-F5H6YG5P.js.map} +0 -0
- /package/dist/{chunk-TNSCIPBQ.js.map → chunk-G6NQ3L4T.js.map} +0 -0
- /package/dist/{chunk-ZMWSYUUL.js.map → chunk-GCBIXUPT.js.map} +0 -0
- /package/dist/{chunk-4BCHFSC7.js.map → chunk-GWNSKQDA.js.map} +0 -0
- /package/dist/{chunk-JDX2OA4R.js.map → chunk-HNHIHXSD.js.map} +0 -0
- /package/dist/{chunk-GG5FHZJJ.js.map → chunk-I33QYUAF.js.map} +0 -0
- /package/dist/{chunk-AAZEKXUP.js.map → chunk-IYIPXAIJ.js.map} +0 -0
- /package/dist/{chunk-5U7K4W6K.js.map → chunk-JDOBQPJY.js.map} +0 -0
- /package/dist/{chunk-UZZ7SQT3.js.map → chunk-JMWUPUE6.js.map} +0 -0
- /package/dist/{chunk-ENBPQEVU.js.map → chunk-JSD7Q7LD.js.map} +0 -0
- /package/dist/{chunk-Q432REND.js.map → chunk-KJLLPG26.js.map} +0 -0
- /package/dist/{chunk-JTQR6L2N.js.map → chunk-KLUC2GSG.js.map} +0 -0
- /package/dist/{chunk-OB3XMWX5.js.map → chunk-KVO2BTA4.js.map} +0 -0
- /package/dist/{chunk-PCOVEDPK.js.map → chunk-KZJM7R4F.js.map} +0 -0
- /package/dist/{chunk-X4TD4O2F.js.map → chunk-LE2KZ72G.js.map} +0 -0
- /package/dist/{chunk-HIP6DKJJ.js.map → chunk-LQVXSRAJ.js.map} +0 -0
- /package/dist/{chunk-A7GQBJP5.js.map → chunk-LVFI5LG7.js.map} +0 -0
- /package/dist/{chunk-VBSNUH4J.js.map → chunk-ND7MAIJC.js.map} +0 -0
- /package/dist/{chunk-54NX5EG4.js.map → chunk-P66QH6R6.js.map} +0 -0
- /package/dist/{chunk-62D2PAAM.js.map → chunk-PAAJWQH5.js.map} +0 -0
- /package/dist/{chunk-TA4C3XB7.js.map → chunk-PFKIOYJH.js.map} +0 -0
- /package/dist/{chunk-WIWLX65T.js.map → chunk-PGGPRF6J.js.map} +0 -0
- /package/dist/{chunk-V6EGNVUT.js.map → chunk-PIWFNPQT.js.map} +0 -0
- /package/dist/{chunk-4JVQRFZD.js.map → chunk-PLJ2MQFT.js.map} +0 -0
- /package/dist/{chunk-4RX5O34R.js.map → chunk-PQ42DJNG.js.map} +0 -0
- /package/dist/{chunk-37CAEC7E.js.map → chunk-PWPIERBM.js.map} +0 -0
- /package/dist/{chunk-ZEGL7YCC.js.map → chunk-Q62GA5U2.js.map} +0 -0
- /package/dist/{chunk-GAS7KYC7.js.map → chunk-RQQO3ORQ.js.map} +0 -0
- /package/dist/{chunk-3NPNBVFR.js.map → chunk-UZGHKD3T.js.map} +0 -0
- /package/dist/{chunk-VJIE4D2I.js.map → chunk-V62YYBBY.js.map} +0 -0
- /package/dist/{chunk-KQAFEZQX.js.map → chunk-VDX2J7OX.js.map} +0 -0
- /package/dist/{chunk-6AGWBKQU.js.map → chunk-VSN2DMQK.js.map} +0 -0
- /package/dist/{chunk-ZHXSOMYH.js.map → chunk-VVX5PZFS.js.map} +0 -0
- /package/dist/{chunk-GI4ZBWPQ.js.map → chunk-W7UV2ZCA.js.map} +0 -0
- /package/dist/{chunk-GMIQV6DD.js.map → chunk-WBQ4ONQJ.js.map} +0 -0
- /package/dist/{chunk-FNHLI2RE.js.map → chunk-WFMQN7JE.js.map} +0 -0
- /package/dist/{chunk-ZBW7A667.js.map → chunk-WPGA4RYI.js.map} +0 -0
- /package/dist/{chunk-YQNNHLCG.js.map → chunk-WPGR3RW4.js.map} +0 -0
- /package/dist/{chunk-NXGSONWM.js.map → chunk-WZIO3TW6.js.map} +0 -0
- /package/dist/{chunk-ZZUVBZL2.js.map → chunk-X2QPKLPL.js.map} +0 -0
- /package/dist/{chunk-VSL63CFJ.js.map → chunk-XRS65T4O.js.map} +0 -0
- /package/dist/{chunk-5N4MZLEH.js.map → chunk-YFXAWGMR.js.map} +0 -0
- /package/dist/{chunk-D545Z7UH.js.map → chunk-Z535ADTC.js.map} +0 -0
- /package/dist/{chunk-5YCNDC3C.js.map → chunk-ZX6NNFSY.js.map} +0 -0
- /package/dist/{chunk-3N3PBBEH.js.map → chunk-ZYSOT6HD.js.map} +0 -0
- /package/dist/{chunk-MCRVQ5YQ.js.map → chunk-ZZEIL3MI.js.map} +0 -0
- /package/dist/{resolution-4GG3QZRJ.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
- /package/dist/{first-start-migration-ZWMV5CX4.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
- /package/dist/{tier-stats-LUSUUNU6.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
|
@@ -482,6 +482,78 @@ export function lastCitationMarkerForTemplate(
|
|
|
482
482
|
return last;
|
|
483
483
|
}
|
|
484
484
|
|
|
485
|
+
/**
|
|
486
|
+
* True when a template can be matched and stripped later. All-placeholder
|
|
487
|
+
* templates such as `{agent}{sessionId}` have no literal anchors.
|
|
488
|
+
*/
|
|
489
|
+
export function citationTemplateIsDetectable(template: string): boolean {
|
|
490
|
+
if (typeof template !== "string" || template.length === 0) return false;
|
|
491
|
+
if (template === DEFAULT_CITATION_FORMAT) return true;
|
|
492
|
+
PLACEHOLDER_REGEX.lastIndex = 0;
|
|
493
|
+
if (!PLACEHOLDER_REGEX.test(template)) {
|
|
494
|
+
PLACEHOLDER_REGEX.lastIndex = 0;
|
|
495
|
+
return true;
|
|
496
|
+
}
|
|
497
|
+
PLACEHOLDER_REGEX.lastIndex = 0;
|
|
498
|
+
return templateMatcher(template) !== null;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Templates the merge path may lift, preserve, or strip: the default
|
|
503
|
+
* format, the current format when it is detectable, then any prior
|
|
504
|
+
* configured formats the caller still holds. Undetectable shapes are
|
|
505
|
+
* dropped so we never hash or attach a marker we cannot re-match.
|
|
506
|
+
*/
|
|
507
|
+
export function citationTemplatesToRecognize(
|
|
508
|
+
primary: string | undefined,
|
|
509
|
+
extra: readonly string[] = [],
|
|
510
|
+
): string[] {
|
|
511
|
+
const out: string[] = [];
|
|
512
|
+
const add = (template: string | undefined): void => {
|
|
513
|
+
if (typeof template !== "string" || template.length === 0) return;
|
|
514
|
+
if (!citationTemplateIsDetectable(template)) return;
|
|
515
|
+
if (!out.includes(template)) out.push(template);
|
|
516
|
+
};
|
|
517
|
+
add(DEFAULT_CITATION_FORMAT);
|
|
518
|
+
add(primary);
|
|
519
|
+
for (const template of extra) add(template);
|
|
520
|
+
return out;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* Prior formats the caller still holds, if any. Absent or malformed
|
|
525
|
+
* history is ignored — fail safe, do not invent templates.
|
|
526
|
+
*/
|
|
527
|
+
export function citationTemplatesForMerge(config: {
|
|
528
|
+
inlineSourceAttributionFormat?: string;
|
|
529
|
+
inlineSourceAttributionFormatHistory?: unknown;
|
|
530
|
+
}): string[] {
|
|
531
|
+
const raw = config.inlineSourceAttributionFormatHistory;
|
|
532
|
+
const extra = Array.isArray(raw)
|
|
533
|
+
? raw.filter((value): value is string => typeof value === "string" && value.length > 0)
|
|
534
|
+
: [];
|
|
535
|
+
return citationTemplatesToRecognize(config.inlineSourceAttributionFormat, extra);
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
export function lastRecognizedCitationMarker(
|
|
539
|
+
text: string,
|
|
540
|
+
templates: readonly string[],
|
|
541
|
+
): string | null {
|
|
542
|
+
for (const template of templates) {
|
|
543
|
+
const marker = lastCitationMarkerForTemplate(text, template);
|
|
544
|
+
if (marker) return marker;
|
|
545
|
+
}
|
|
546
|
+
return null;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
export function stripRecognizedCitations(text: string, templates: readonly string[]): string {
|
|
550
|
+
let out = text;
|
|
551
|
+
for (const template of templates) {
|
|
552
|
+
out = stripCitationForTemplate(out, template);
|
|
553
|
+
}
|
|
554
|
+
return out;
|
|
555
|
+
}
|
|
556
|
+
|
|
485
557
|
/**
|
|
486
558
|
* Attach an inline citation to fact text.
|
|
487
559
|
*
|
|
@@ -226,6 +226,7 @@ test("an evidenced gated recovery defers a reserve-only marker to the path-locke
|
|
|
226
226
|
status: "present",
|
|
227
227
|
revision: b.pendingRevision,
|
|
228
228
|
committedDigest: store.digestContent("landed bytes"),
|
|
229
|
+
committedSemanticFingerprint: store.digestContent("landed bytes"),
|
|
229
230
|
});
|
|
230
231
|
});
|
|
231
232
|
});
|
|
@@ -258,6 +259,7 @@ test("recoverPendingRevision publishes a crashed reservation whose write landed
|
|
|
258
259
|
status: "present",
|
|
259
260
|
revision: b.pendingRevision,
|
|
260
261
|
committedDigest: store.digestContent("new durable bytes"),
|
|
262
|
+
committedSemanticFingerprint: store.digestContent("new durable bytes"),
|
|
261
263
|
});
|
|
262
264
|
assert.equal(await store.recoverPendingRevision(target), "committed", "idempotent");
|
|
263
265
|
});
|
|
@@ -361,6 +363,7 @@ test("beginRevisionTransaction with expectedContent persists expectedDigest in p
|
|
|
361
363
|
status: "present",
|
|
362
364
|
revision: txn2.pendingRevision,
|
|
363
365
|
committedDigest: store.digestContent(expectedContent),
|
|
366
|
+
committedSemanticFingerprint: store.digestContent(expectedContent),
|
|
364
367
|
});
|
|
365
368
|
});
|
|
366
369
|
});
|
|
@@ -425,6 +428,7 @@ test("legacy pending shards without writeLanded treat expectedDigest as already
|
|
|
425
428
|
status: "present",
|
|
426
429
|
revision: "2026-08-01T00:00:00.000Z",
|
|
427
430
|
committedDigest: expectedDigest,
|
|
431
|
+
committedSemanticFingerprint: expectedDigest,
|
|
428
432
|
});
|
|
429
433
|
});
|
|
430
434
|
});
|
|
@@ -35,6 +35,15 @@ type CasRevisionShard = {
|
|
|
35
35
|
writeLanded?: boolean;
|
|
36
36
|
/** #2813 (P1 B): sha256 hex digest of the durable memory file when committed. */
|
|
37
37
|
committedDigest?: string | null;
|
|
38
|
+
/** #2870: sha256 of the durable file's canonical SEMANTIC text — the
|
|
39
|
+
* file with the access-telemetry frontmatter keys (`accessCount:`,
|
|
40
|
+
* `lastAccessed:`) stripped, the same exclusion set
|
|
41
|
+
* `invalidationCommitFingerprint` applies to parsed records. Promotion
|
|
42
|
+
* binds to THIS, never to the byte digest: an access-tracking flush
|
|
43
|
+
* rewrites exactly those two lines without minting a receipt
|
|
44
|
+
* (`isSemanticFrontmatterChange` is false), and must not invalidate a
|
|
45
|
+
* valid promotion. null means the file was absent at commit. */
|
|
46
|
+
committedSemanticFingerprint?: string | null;
|
|
38
47
|
};
|
|
39
48
|
|
|
40
49
|
type CasRevisionMetadata = {
|
|
@@ -51,7 +60,7 @@ type CasRevisionMetadata = {
|
|
|
51
60
|
* `readRevision` collapses this into `undefined`; callers that transact
|
|
52
61
|
* on receipt identity MUST refuse instead. */
|
|
53
62
|
export type CasRevisionReadStatus =
|
|
54
|
-
| { status: "present"; revision: string; committedDigest?: string }
|
|
63
|
+
| { status: "present"; revision: string; committedDigest?: string; committedSemanticFingerprint?: string }
|
|
55
64
|
| { status: "absent" }
|
|
56
65
|
| { status: "unavailable"; reason: string };
|
|
57
66
|
|
|
@@ -78,7 +87,7 @@ export interface CasRevisionTransaction {
|
|
|
78
87
|
type CasShardView =
|
|
79
88
|
| { kind: "missing" }
|
|
80
89
|
| { kind: "foreign" }
|
|
81
|
-
| { kind: "committed"; revision: string; committedDigest?: string; foreign: boolean }
|
|
90
|
+
| { kind: "committed"; revision: string; committedDigest?: string; committedSemanticFingerprint?: string; foreign: boolean }
|
|
82
91
|
| {
|
|
83
92
|
kind: "pending";
|
|
84
93
|
revision: string;
|
|
@@ -89,6 +98,29 @@ type CasShardView =
|
|
|
89
98
|
writeLanded?: boolean;
|
|
90
99
|
};
|
|
91
100
|
|
|
101
|
+
const ACCESS_TELEMETRY_FRONTMATTER_KEY = /^(?:accessCount|lastAccessed):/;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* #2870: canonical SEMANTIC text of a durable memory file — the file with
|
|
105
|
+
* the access-telemetry frontmatter keys (`accessCount:`, `lastAccessed:`)
|
|
106
|
+
* removed. This is the file-level twin of `invalidationCommitFingerprint`
|
|
107
|
+
* (deletion-revision-store.ts): the same exclusion set, computed without
|
|
108
|
+
* parsing, so the CAS receipt can record it at commit time from the same
|
|
109
|
+
* bytes the digests come from. Only TOP-LEVEL frontmatter lines are
|
|
110
|
+
* stripped — serialized frontmatter is flat `key: value` lines, and nested
|
|
111
|
+
* blocks (links:) are indented and never match. A file without a leading
|
|
112
|
+
* frontmatter block is returned unchanged.
|
|
113
|
+
*/
|
|
114
|
+
export function canonicalSemanticFileText(raw: string): string {
|
|
115
|
+
const lines = raw.split("\n");
|
|
116
|
+
if (lines[0] !== "---") return raw;
|
|
117
|
+
const closing = lines.indexOf("---", 1);
|
|
118
|
+
if (closing === -1) return raw;
|
|
119
|
+
const frontmatter = lines
|
|
120
|
+
.slice(1, closing)
|
|
121
|
+
.filter((line) => !ACCESS_TELEMETRY_FRONTMATTER_KEY.test(line));
|
|
122
|
+
return [...lines.slice(0, 1), ...frontmatter, ...lines.slice(closing)].join("\n");
|
|
123
|
+
}
|
|
92
124
|
const CAS_REVISION_LOCK_STALE_MS = 60_000;
|
|
93
125
|
const CAS_REVISION_LOCK_MAX_WAIT_MS = 120_000;
|
|
94
126
|
const SHA256_HEX = /^[0-9a-f]{64}$/;
|
|
@@ -252,6 +284,10 @@ export class CasRevisionStore {
|
|
|
252
284
|
const foreign = root.path !== relativePath;
|
|
253
285
|
const committedDigest =
|
|
254
286
|
typeof root.committedDigest === "string" ? root.committedDigest : undefined;
|
|
287
|
+
const committedSemanticFingerprint =
|
|
288
|
+
typeof root.committedSemanticFingerprint === "string"
|
|
289
|
+
? root.committedSemanticFingerprint
|
|
290
|
+
: undefined;
|
|
255
291
|
return root.state === "pending"
|
|
256
292
|
? {
|
|
257
293
|
kind: "pending",
|
|
@@ -262,7 +298,13 @@ export class CasRevisionStore {
|
|
|
262
298
|
expectedDigest: root.expectedDigest as string | null | undefined,
|
|
263
299
|
...(typeof root.writeLanded === "boolean" ? { writeLanded: root.writeLanded } : {}),
|
|
264
300
|
}
|
|
265
|
-
: {
|
|
301
|
+
: {
|
|
302
|
+
kind: "committed",
|
|
303
|
+
revision: root.revision,
|
|
304
|
+
committedDigest,
|
|
305
|
+
committedSemanticFingerprint,
|
|
306
|
+
foreign,
|
|
307
|
+
};
|
|
266
308
|
}
|
|
267
309
|
// Pre-two-phase shard: a full-shape match reads as committed; anything
|
|
268
310
|
// else keeps the legacy fall-through (legacy metadata, then absence).
|
|
@@ -274,14 +316,26 @@ export class CasRevisionStore {
|
|
|
274
316
|
) {
|
|
275
317
|
const committedDigest =
|
|
276
318
|
typeof root.committedDigest === "string" ? root.committedDigest : undefined;
|
|
277
|
-
|
|
319
|
+
const committedSemanticFingerprint =
|
|
320
|
+
typeof root.committedSemanticFingerprint === "string"
|
|
321
|
+
? root.committedSemanticFingerprint
|
|
322
|
+
: undefined;
|
|
323
|
+
return {
|
|
324
|
+
kind: "committed",
|
|
325
|
+
revision: root.revision,
|
|
326
|
+
committedDigest,
|
|
327
|
+
committedSemanticFingerprint,
|
|
328
|
+
foreign: false,
|
|
329
|
+
};
|
|
278
330
|
}
|
|
279
331
|
return { kind: "foreign" };
|
|
280
332
|
}
|
|
281
333
|
|
|
282
|
-
private async readStandingRevision(relativePath: string): Promise<
|
|
334
|
+
private async readStandingRevision(relativePath: string): Promise<
|
|
335
|
+
{ revision: string; committedDigest?: string; committedSemanticFingerprint?: string } | undefined
|
|
336
|
+
> {
|
|
283
337
|
try {
|
|
284
|
-
return
|
|
338
|
+
return await this.readStandingRevisionStrict(relativePath);
|
|
285
339
|
} catch (error) {
|
|
286
340
|
log.warn(`CasRevisionStore failed to read standing revision for ${relativePath}: ${error}`);
|
|
287
341
|
return undefined;
|
|
@@ -299,7 +353,9 @@ export class CasRevisionStore {
|
|
|
299
353
|
* refuse instead of mistaking the failure for absence. */
|
|
300
354
|
private async readStandingRevisionStrict(
|
|
301
355
|
relativePath: string,
|
|
302
|
-
): Promise<
|
|
356
|
+
): Promise<
|
|
357
|
+
{ revision: string; committedDigest?: string; committedSemanticFingerprint?: string } | undefined
|
|
358
|
+
> {
|
|
303
359
|
const { shardPath } = await this.getSafeShardInfo(relativePath);
|
|
304
360
|
const view = await this.readShardView(shardPath, relativePath);
|
|
305
361
|
if (view.kind === "pending") {
|
|
@@ -308,7 +364,11 @@ export class CasRevisionStore {
|
|
|
308
364
|
);
|
|
309
365
|
}
|
|
310
366
|
if (view.kind === "committed" && !view.foreign) {
|
|
311
|
-
return {
|
|
367
|
+
return {
|
|
368
|
+
revision: view.revision,
|
|
369
|
+
committedDigest: view.committedDigest,
|
|
370
|
+
committedSemanticFingerprint: view.committedSemanticFingerprint,
|
|
371
|
+
};
|
|
312
372
|
}
|
|
313
373
|
const legacyMap = await this.readLegacyMetadata();
|
|
314
374
|
const legacyRev = legacyMap.get(relativePath);
|
|
@@ -326,6 +386,7 @@ export class CasRevisionStore {
|
|
|
326
386
|
baselineDigest?: string | null;
|
|
327
387
|
expectedDigest?: string | null;
|
|
328
388
|
committedDigest?: string | null;
|
|
389
|
+
committedSemanticFingerprint?: string | null;
|
|
329
390
|
writeLanded?: boolean;
|
|
330
391
|
},
|
|
331
392
|
): Promise<void> {
|
|
@@ -335,6 +396,9 @@ export class CasRevisionStore {
|
|
|
335
396
|
if (evidence?.committedDigest !== undefined) {
|
|
336
397
|
payload.committedDigest = evidence.committedDigest;
|
|
337
398
|
}
|
|
399
|
+
if (evidence?.committedSemanticFingerprint !== undefined) {
|
|
400
|
+
payload.committedSemanticFingerprint = evidence.committedSemanticFingerprint;
|
|
401
|
+
}
|
|
338
402
|
} else {
|
|
339
403
|
payload = { version: 1, path: relativePath, revision, state };
|
|
340
404
|
if (previous !== undefined) payload.previous = previous;
|
|
@@ -401,7 +465,7 @@ export class CasRevisionStore {
|
|
|
401
465
|
async readRevision(filePath: string): Promise<string | undefined> {
|
|
402
466
|
try {
|
|
403
467
|
const relativePath = await this.resolveRelativePath(filePath);
|
|
404
|
-
return await this.readStandingRevision(relativePath);
|
|
468
|
+
return (await this.readStandingRevision(relativePath))?.revision;
|
|
405
469
|
} catch (error) {
|
|
406
470
|
log.warn(`CasRevisionStore.readRevision failed for ${filePath}: ${error}`);
|
|
407
471
|
return undefined;
|
|
@@ -426,6 +490,9 @@ export class CasRevisionStore {
|
|
|
426
490
|
...(standing.committedDigest !== undefined
|
|
427
491
|
? { committedDigest: standing.committedDigest }
|
|
428
492
|
: {}),
|
|
493
|
+
...(standing.committedSemanticFingerprint !== undefined
|
|
494
|
+
? { committedSemanticFingerprint: standing.committedSemanticFingerprint }
|
|
495
|
+
: {}),
|
|
429
496
|
};
|
|
430
497
|
} catch (error) {
|
|
431
498
|
return { status: "unavailable", reason: error instanceof Error ? error.message : String(error) };
|
|
@@ -477,19 +544,34 @@ export class CasRevisionStore {
|
|
|
477
544
|
}
|
|
478
545
|
|
|
479
546
|
public async digestDurableFile(filePath: string): Promise<string | null> {
|
|
547
|
+
const bytes = await this.readDurableBytes(filePath);
|
|
548
|
+
return bytes === null ? null : createHash("sha256").update(bytes).digest("hex");
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/** #2870: canonical SEMANTIC fingerprint of the durable file — its text
|
|
552
|
+
* with the access-telemetry frontmatter keys stripped
|
|
553
|
+
* ({@link canonicalSemanticFileText}), hashed. Null means the file was
|
|
554
|
+
* absent. A fingerprint, never memory content. */
|
|
555
|
+
public async semanticFingerprintDurableFile(filePath: string): Promise<string | null> {
|
|
556
|
+
const bytes = await this.readDurableBytes(filePath);
|
|
557
|
+
return bytes === null
|
|
558
|
+
? null
|
|
559
|
+
: createHash("sha256").update(canonicalSemanticFileText(bytes.toString("utf8"))).digest("hex");
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
private async readDurableBytes(filePath: string): Promise<Buffer | null> {
|
|
480
563
|
const relativePath = await this.resolveRelativePath(filePath);
|
|
481
564
|
const baseDir = path.resolve(this.baseDir);
|
|
482
565
|
const target = await resolveSafeStoragePath(baseDir, relativePath);
|
|
483
|
-
let bytes: Buffer;
|
|
484
566
|
try {
|
|
485
|
-
|
|
567
|
+
return await readFile(target);
|
|
486
568
|
} catch (error) {
|
|
487
569
|
if (isErrnoCode(error, "ENOENT")) return null;
|
|
488
570
|
throw new Error(
|
|
489
571
|
`CAS revision evidence: durable memory file ${relativePath} is unreadable: ${error instanceof Error ? error.message : String(error)}`,
|
|
490
572
|
);
|
|
491
573
|
}
|
|
492
|
-
|
|
574
|
+
|
|
493
575
|
}
|
|
494
576
|
|
|
495
577
|
/** #2807: mark the reserved write as landed. Verifies a pre-recorded
|
|
@@ -531,8 +613,14 @@ export class CasRevisionStore {
|
|
|
531
613
|
if (outcome === "commit") {
|
|
532
614
|
const committedDigest =
|
|
533
615
|
view.expectedDigest ?? (await this.digestDurableFile(relativePath));
|
|
616
|
+
// #2870: publish the canonical semantic fingerprint alongside the
|
|
617
|
+
// byte digest so promotion can bind semantic identity without
|
|
618
|
+
// refusing on access-only telemetry flushes.
|
|
619
|
+
const committedSemanticFingerprint =
|
|
620
|
+
await this.semanticFingerprintDurableFile(relativePath);
|
|
534
621
|
await this.writeShard(shardPath, relativePath, token, lock, "committed", undefined, {
|
|
535
622
|
committedDigest,
|
|
623
|
+
committedSemanticFingerprint,
|
|
536
624
|
});
|
|
537
625
|
} else if (view.previous !== undefined) {
|
|
538
626
|
await this.writeShard(shardPath, relativePath, view.previous, lock, "committed");
|
|
@@ -577,8 +665,11 @@ export class CasRevisionStore {
|
|
|
577
665
|
if (fileWriteLanded) {
|
|
578
666
|
const committedDigest =
|
|
579
667
|
view.expectedDigest ?? (await this.digestDurableFile(relativePath));
|
|
668
|
+
const committedSemanticFingerprint =
|
|
669
|
+
await this.semanticFingerprintDurableFile(relativePath);
|
|
580
670
|
await this.writeShard(shardPath, relativePath, view.revision, lock, "committed", undefined, {
|
|
581
671
|
committedDigest,
|
|
672
|
+
committedSemanticFingerprint,
|
|
582
673
|
});
|
|
583
674
|
} else if (view.previous !== undefined) {
|
|
584
675
|
await this.writeShard(shardPath, relativePath, view.previous, lock, "committed");
|
|
@@ -623,6 +714,7 @@ export class CasRevisionStore {
|
|
|
623
714
|
if (view.expectedDigest !== undefined && currentDigest === view.expectedDigest) {
|
|
624
715
|
await this.writeShard(shardPath, relativePath, view.revision, lock, "committed", undefined, {
|
|
625
716
|
committedDigest: view.expectedDigest,
|
|
717
|
+
committedSemanticFingerprint: await this.semanticFingerprintDurableFile(relativePath),
|
|
626
718
|
});
|
|
627
719
|
return "committed";
|
|
628
720
|
}
|
|
@@ -267,11 +267,13 @@ test("readCasRevisionStatus distinguishes present, absent, and unavailable recei
|
|
|
267
267
|
assert.equal(await storage.writeMemoryFrontmatter(memory, { status: "archived" }), true);
|
|
268
268
|
const standing = await storage.readCasRevision(memory.path);
|
|
269
269
|
assert.ok(standing);
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
270
|
+
const archived = await storage.readCasRevisionStatus(memory.path);
|
|
271
|
+
assert.equal(archived.status, "present");
|
|
272
|
+
assert.equal(archived.revision, standing);
|
|
273
|
+
assert.equal(
|
|
274
|
+
archived.status === "present" ? archived.committedDigest : undefined,
|
|
275
|
+
createHash("sha256").update(await readFile(memory.path)).digest("hex"),
|
|
276
|
+
);
|
|
275
277
|
|
|
276
278
|
// A torn shard write: the receipt EXISTS but cannot be read. That is
|
|
277
279
|
// unavailability — never absence — while the fail-open read keeps
|
|
@@ -554,11 +556,13 @@ test("a receipt publication failure after the memory write recovers from recorde
|
|
|
554
556
|
|
|
555
557
|
// #2807: writeLanded recorded evidence, so the next unlocked read
|
|
556
558
|
// publishes the reserved token with the intended file digest.
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
559
|
+
const published = await storage.readCasRevisionStatus(before.path);
|
|
560
|
+
assert.equal(published.status, "present");
|
|
561
|
+
assert.equal(published.revision, reserved);
|
|
562
|
+
assert.equal(
|
|
563
|
+
published.status === "present" ? published.committedDigest : undefined,
|
|
564
|
+
createHash("sha256").update(onDisk).digest("hex"),
|
|
565
|
+
);
|
|
562
566
|
assert.equal(
|
|
563
567
|
await storage.updateMemory(created.id, "Second body after evidence recovery."),
|
|
564
568
|
true,
|
|
@@ -676,13 +680,11 @@ test("restart after a crash between write and commit publishes the reserved rece
|
|
|
676
680
|
|
|
677
681
|
const restarted = new StorageManager(dir);
|
|
678
682
|
const landedBytes = await readFile(memory.path);
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
committedDigest: createHash("sha256").update(landedBytes).digest("hex"),
|
|
685
|
-
},
|
|
683
|
+
const restartedStatus = await restarted.readCasRevisionStatus(memory.path);
|
|
684
|
+
assert.ok(
|
|
685
|
+
restartedStatus.status === "present" &&
|
|
686
|
+
restartedStatus.revision === reserved &&
|
|
687
|
+
restartedStatus.committedDigest === createHash("sha256").update(landedBytes).digest("hex"),
|
|
686
688
|
"the first read after restart publishes the reserved token from writeLanded evidence",
|
|
687
689
|
);
|
|
688
690
|
assert.equal(
|
package/src/summarizer.ts
CHANGED
|
@@ -223,7 +223,11 @@ export class HourlySummarizer {
|
|
|
223
223
|
if (this.config.backgroundGeneration) {
|
|
224
224
|
try {
|
|
225
225
|
const text = await completeBackgroundGeneration(this.config, [
|
|
226
|
-
{
|
|
226
|
+
{
|
|
227
|
+
role: "system",
|
|
228
|
+
content:
|
|
229
|
+
"You are a conversation summarization system. Summarize the following conversation transcript into 3-5 concise bullet points.\n\nGuidelines:\n- Focus on what was accomplished, decided, or discussed\n- Include specific topics, projects, or entities mentioned\n- Note any significant user requests or agent actions\n- Keep bullets brief but informative (1-2 sentences each)\n- Skip trivial greetings or meta-conversation\n- Use present tense for ongoing work, past for completed items\n\nRespond with valid JSON only, matching this schema:\n{\"bullets\": [\"bullet 1\", \"bullet 2\", \"bullet 3\"]}",
|
|
230
|
+
},
|
|
227
231
|
{ role: "user", content: `Summarize this conversation:\n\n${conversation}` },
|
|
228
232
|
]);
|
|
229
233
|
const parsed = parseBackgroundGenerationJson(text, (value) => HourlySummarySchema.parse(value));
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
|
|
4
|
+
import { parseConfig } from "./config.js";
|
|
5
|
+
import { initLogger, resetLogger } from "./logger.js";
|
|
6
|
+
import { parseTaskLlmConfig, resetTaskLlmLegacyWarningsForTest } from "./task-llm-config.js";
|
|
7
|
+
|
|
8
|
+
function captureWarns(): string[] {
|
|
9
|
+
const warns: string[] = [];
|
|
10
|
+
initLogger(
|
|
11
|
+
{
|
|
12
|
+
info() {},
|
|
13
|
+
warn(msg) {
|
|
14
|
+
warns.push(msg);
|
|
15
|
+
},
|
|
16
|
+
error() {},
|
|
17
|
+
},
|
|
18
|
+
false,
|
|
19
|
+
{ timestamps: false },
|
|
20
|
+
);
|
|
21
|
+
return warns;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
test("taskLlmTimeoutMs wins over legacy localLlmTimeoutMs", () => {
|
|
25
|
+
resetTaskLlmLegacyWarningsForTest();
|
|
26
|
+
const parsed = parseTaskLlmConfig({
|
|
27
|
+
taskLlmTimeoutMs: 90_000,
|
|
28
|
+
localLlmTimeoutMs: 12_000,
|
|
29
|
+
});
|
|
30
|
+
assert.equal(parsed.timeoutMs, 90_000);
|
|
31
|
+
assert.equal(parsed.localTimeoutMs, 12_000);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test("taskLlmFallback wins over legacy localLlmFallback", () => {
|
|
35
|
+
resetTaskLlmLegacyWarningsForTest();
|
|
36
|
+
const parsed = parseTaskLlmConfig({
|
|
37
|
+
taskLlmFallback: false,
|
|
38
|
+
localLlmFallback: true,
|
|
39
|
+
});
|
|
40
|
+
assert.equal(parsed.fallback, false);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("legacy localLlmTimeoutMs is read when taskLlmTimeoutMs is absent and warns once", () => {
|
|
44
|
+
resetTaskLlmLegacyWarningsForTest();
|
|
45
|
+
const warns = captureWarns();
|
|
46
|
+
try {
|
|
47
|
+
const first = parseTaskLlmConfig({ localLlmTimeoutMs: 45_000 });
|
|
48
|
+
const second = parseTaskLlmConfig({ localLlmTimeoutMs: 45_000 });
|
|
49
|
+
assert.equal(first.timeoutMs, 45_000);
|
|
50
|
+
assert.equal(second.timeoutMs, 45_000);
|
|
51
|
+
const legacyWarns = warns.filter((line) => line.includes("localLlmTimeoutMs is a legacy alias for taskLlmTimeoutMs"));
|
|
52
|
+
assert.equal(legacyWarns.length, 1);
|
|
53
|
+
} finally {
|
|
54
|
+
resetLogger();
|
|
55
|
+
resetTaskLlmLegacyWarningsForTest();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("legacy localLlmFallback is read when taskLlmFallback is absent and warns once", () => {
|
|
60
|
+
resetTaskLlmLegacyWarningsForTest();
|
|
61
|
+
const warns = captureWarns();
|
|
62
|
+
try {
|
|
63
|
+
const first = parseTaskLlmConfig({ localLlmFallback: false });
|
|
64
|
+
const second = parseTaskLlmConfig({ localLlmFallback: false });
|
|
65
|
+
assert.equal(first.fallback, false);
|
|
66
|
+
assert.equal(second.fallback, false);
|
|
67
|
+
const legacyWarns = warns.filter((line) => line.includes("localLlmFallback is a legacy alias for taskLlmFallback"));
|
|
68
|
+
assert.equal(legacyWarns.length, 1);
|
|
69
|
+
} finally {
|
|
70
|
+
resetLogger();
|
|
71
|
+
resetTaskLlmLegacyWarningsForTest();
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
test("neither key uses defaults and does not warn", () => {
|
|
76
|
+
resetTaskLlmLegacyWarningsForTest();
|
|
77
|
+
const warns = captureWarns();
|
|
78
|
+
try {
|
|
79
|
+
const parsed = parseTaskLlmConfig({});
|
|
80
|
+
assert.equal(parsed.timeoutMs, 180_000);
|
|
81
|
+
assert.equal(parsed.localTimeoutMs, 180_000);
|
|
82
|
+
assert.equal(parsed.fallback, true);
|
|
83
|
+
assert.equal(warns.some((line) => line.includes("legacy alias")), false);
|
|
84
|
+
} finally {
|
|
85
|
+
resetLogger();
|
|
86
|
+
resetTaskLlmLegacyWarningsForTest();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test("present-with-undefined taskLlmTimeoutMs does not fall through to the legacy key", () => {
|
|
91
|
+
resetTaskLlmLegacyWarningsForTest();
|
|
92
|
+
const parsed = parseTaskLlmConfig({
|
|
93
|
+
taskLlmTimeoutMs: undefined,
|
|
94
|
+
localLlmTimeoutMs: 12_000,
|
|
95
|
+
});
|
|
96
|
+
assert.equal(parsed.timeoutMs, 180_000);
|
|
97
|
+
assert.equal(parsed.localTimeoutMs, 12_000);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test("taskLlmFallback coerces string false", () => {
|
|
101
|
+
resetTaskLlmLegacyWarningsForTest();
|
|
102
|
+
const parsed = parseTaskLlmConfig({ taskLlmFallback: "false" });
|
|
103
|
+
assert.equal(parsed.fallback, false);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
test("parseConfig wires taskLlmTimeoutMs onto PluginConfig and keeps localLlmTimeoutMs independent", () => {
|
|
107
|
+
resetTaskLlmLegacyWarningsForTest();
|
|
108
|
+
const cfg = parseConfig({
|
|
109
|
+
taskLlmTimeoutMs: 90_000,
|
|
110
|
+
localLlmTimeoutMs: 12_000,
|
|
111
|
+
taskLlmFallback: false,
|
|
112
|
+
});
|
|
113
|
+
assert.equal(cfg.taskLlmTimeoutMs, 90_000);
|
|
114
|
+
assert.equal(cfg.localLlmTimeoutMs, 12_000);
|
|
115
|
+
assert.equal(cfg.localLlmFallback, false);
|
|
116
|
+
assert.equal(cfg.taskLlmFallback, false);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test("parseConfig legacy-only timeout still populates taskLlmTimeoutMs", () => {
|
|
120
|
+
resetTaskLlmLegacyWarningsForTest();
|
|
121
|
+
const cfg = parseConfig({ localLlmTimeoutMs: 600_000 });
|
|
122
|
+
assert.equal(cfg.taskLlmTimeoutMs, 600_000);
|
|
123
|
+
assert.equal(cfg.localLlmTimeoutMs, 600_000);
|
|
124
|
+
});
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Honest names for the gateway/task LLM chain (issue #2967).
|
|
3
|
+
*
|
|
4
|
+
* `FallbackLlmClient` is the primary configured path in gateway mode, not a
|
|
5
|
+
* secondary recovery path. `taskLlmTimeoutMs` / `taskLlmFallback` are the
|
|
6
|
+
* current keys. `localLlmTimeoutMs` / `localLlmFallback` remain documented
|
|
7
|
+
* legacy aliases, read only when the corresponding new key is absent.
|
|
8
|
+
*/
|
|
9
|
+
import { coerceBool, coerceNumber } from "./connectors/coerce.js";
|
|
10
|
+
import { log } from "./logger.js";
|
|
11
|
+
|
|
12
|
+
const DEFAULT_TIMEOUT_MS = 180_000;
|
|
13
|
+
const MIN_TIMEOUT_MS = 1;
|
|
14
|
+
const MAX_TIMEOUT_MS = 86_400_000;
|
|
15
|
+
|
|
16
|
+
const warnedLegacy = new Set<string>();
|
|
17
|
+
|
|
18
|
+
export function resetTaskLlmLegacyWarningsForTest(): void {
|
|
19
|
+
warnedLegacy.clear();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function warnLegacyOnce(legacyKey: string, currentKey: string, extra: string): void {
|
|
23
|
+
if (warnedLegacy.has(legacyKey)) return;
|
|
24
|
+
warnedLegacy.add(legacyKey);
|
|
25
|
+
log.warn(
|
|
26
|
+
`config: ${legacyKey} is a legacy alias for ${currentKey}; set ${currentKey} instead. ${legacyKey} still works when ${currentKey} is absent. ${extra}`,
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function parseBoundedIntegerMs(value: unknown, fallback: number): number {
|
|
31
|
+
const coerced = coerceNumber(value);
|
|
32
|
+
if (coerced === undefined) return fallback;
|
|
33
|
+
return Math.min(MAX_TIMEOUT_MS, Math.max(MIN_TIMEOUT_MS, Math.floor(coerced)));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function hasOwnKey(raw: Record<string, unknown>, key: string): boolean {
|
|
37
|
+
return Object.hasOwn(raw, key);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface ParsedTaskLlmConfig {
|
|
41
|
+
timeoutMs: number;
|
|
42
|
+
localTimeoutMs: number;
|
|
43
|
+
fallback: boolean;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Resolve task-LLM timeout and local→task fallback.
|
|
48
|
+
*
|
|
49
|
+
* New key wins when present (including present-with-`undefined`, which takes
|
|
50
|
+
* the default rather than falling through to the legacy key). Legacy keys are
|
|
51
|
+
* read only when the new key is absent, and warn once per process.
|
|
52
|
+
*/
|
|
53
|
+
export function parseTaskLlmConfig(cfg: Record<string, unknown>): ParsedTaskLlmConfig {
|
|
54
|
+
const localTimeoutMs = hasOwnKey(cfg, "localLlmTimeoutMs")
|
|
55
|
+
? parseBoundedIntegerMs(cfg.localLlmTimeoutMs, DEFAULT_TIMEOUT_MS)
|
|
56
|
+
: DEFAULT_TIMEOUT_MS;
|
|
57
|
+
|
|
58
|
+
let timeoutMs: number;
|
|
59
|
+
if (hasOwnKey(cfg, "taskLlmTimeoutMs")) {
|
|
60
|
+
timeoutMs = parseBoundedIntegerMs(cfg.taskLlmTimeoutMs, DEFAULT_TIMEOUT_MS);
|
|
61
|
+
} else if (hasOwnKey(cfg, "localLlmTimeoutMs")) {
|
|
62
|
+
warnLegacyOnce(
|
|
63
|
+
"localLlmTimeoutMs",
|
|
64
|
+
"taskLlmTimeoutMs",
|
|
65
|
+
"localLlmTimeoutMs remains the local-endpoint timeout; without taskLlmTimeoutMs it also sizes the gateway/task chain.",
|
|
66
|
+
);
|
|
67
|
+
timeoutMs = localTimeoutMs;
|
|
68
|
+
} else {
|
|
69
|
+
timeoutMs = DEFAULT_TIMEOUT_MS;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
let fallback: boolean;
|
|
73
|
+
if (hasOwnKey(cfg, "taskLlmFallback")) {
|
|
74
|
+
const coerced = coerceBool(cfg.taskLlmFallback, "taskLlmFallback");
|
|
75
|
+
fallback = coerced !== undefined ? coerced : true;
|
|
76
|
+
} else if (hasOwnKey(cfg, "localLlmFallback")) {
|
|
77
|
+
warnLegacyOnce(
|
|
78
|
+
"localLlmFallback",
|
|
79
|
+
"taskLlmFallback",
|
|
80
|
+
"taskLlmFallback is the current name for using the gateway/task chain when the local path fails.",
|
|
81
|
+
);
|
|
82
|
+
fallback = cfg.localLlmFallback !== false;
|
|
83
|
+
} else {
|
|
84
|
+
fallback = true;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return { timeoutMs, localTimeoutMs, fallback };
|
|
88
|
+
}
|