@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-http.test.ts
CHANGED
|
@@ -4058,6 +4058,84 @@ test("PR #1852: token rotation between authorization and write does not stamp th
|
|
|
4058
4058
|
}
|
|
4059
4059
|
});
|
|
4060
4060
|
|
|
4061
|
+
test("issue #2829: memory_store category aliases canonicalize with a retained spelling; near-misses 400", async () => {
|
|
4062
|
+
const captured: Array<Record<string, unknown>> = [];
|
|
4063
|
+
const service = {
|
|
4064
|
+
memoryStore: (req: Record<string, unknown>) => {
|
|
4065
|
+
captured.push(req);
|
|
4066
|
+
return Promise.resolve({
|
|
4067
|
+
schemaVersion: 1,
|
|
4068
|
+
operation: "memory_store",
|
|
4069
|
+
namespace: "default",
|
|
4070
|
+
dryRun: false,
|
|
4071
|
+
accepted: true,
|
|
4072
|
+
queued: false,
|
|
4073
|
+
status: "stored",
|
|
4074
|
+
});
|
|
4075
|
+
},
|
|
4076
|
+
suggestionSubmit: (req: Record<string, unknown>) => {
|
|
4077
|
+
captured.push(req);
|
|
4078
|
+
return Promise.resolve({
|
|
4079
|
+
schemaVersion: 1,
|
|
4080
|
+
operation: "suggestion_submit",
|
|
4081
|
+
namespace: "default",
|
|
4082
|
+
dryRun: false,
|
|
4083
|
+
accepted: true,
|
|
4084
|
+
queued: true,
|
|
4085
|
+
status: "queued_for_review",
|
|
4086
|
+
});
|
|
4087
|
+
},
|
|
4088
|
+
} as unknown as EngramAccessService;
|
|
4089
|
+
|
|
4090
|
+
const server = new EngramAccessHttpServer({
|
|
4091
|
+
service,
|
|
4092
|
+
port: 0,
|
|
4093
|
+
authToken: "test-token",
|
|
4094
|
+
adminConsoleEnabled: false,
|
|
4095
|
+
});
|
|
4096
|
+
const status = await server.start();
|
|
4097
|
+
try {
|
|
4098
|
+
const post = (pathname: string, body: unknown) =>
|
|
4099
|
+
fetch(`http://127.0.0.1:${status.port}${pathname}`, {
|
|
4100
|
+
method: "POST",
|
|
4101
|
+
headers: { authorization: "Bearer test-token", "content-type": "application/json" },
|
|
4102
|
+
body: JSON.stringify(body),
|
|
4103
|
+
});
|
|
4104
|
+
|
|
4105
|
+
const aliased = await post("/engram/v1/memories", {
|
|
4106
|
+
content: "alias over http",
|
|
4107
|
+
category: "project_state",
|
|
4108
|
+
});
|
|
4109
|
+
assert.equal(aliased.status, 201);
|
|
4110
|
+
assert.equal(captured[0]?.category, "fact", "HTTP memory_store must canonicalize the alias");
|
|
4111
|
+
assert.equal(captured[0]?.rawCategory, "project_state", "HTTP memory_store must retain the spelling");
|
|
4112
|
+
|
|
4113
|
+
const suggested = await post("/engram/v1/suggestions", {
|
|
4114
|
+
content: "alias over http suggestion",
|
|
4115
|
+
category: "project_update",
|
|
4116
|
+
});
|
|
4117
|
+
assert.equal(suggested.status, 201);
|
|
4118
|
+
assert.equal(captured[1]?.category, "fact");
|
|
4119
|
+
assert.equal(captured[1]?.rawCategory, "project_update", "the suggestions route forwards the retained spelling");
|
|
4120
|
+
|
|
4121
|
+
const nearMiss = await post("/engram/v1/memories", {
|
|
4122
|
+
content: "near miss over http",
|
|
4123
|
+
category: "projection",
|
|
4124
|
+
});
|
|
4125
|
+
assert.equal(nearMiss.status, 400, "a near-miss category must reject");
|
|
4126
|
+
const nearMissBody = (await nearMiss.json()) as {
|
|
4127
|
+
error?: string;
|
|
4128
|
+
details?: Array<{ field: string; message: string }>;
|
|
4129
|
+
};
|
|
4130
|
+
const categoryDetail = nearMissBody.details?.find((detail) => detail.field === "category");
|
|
4131
|
+
assert.ok(categoryDetail, "the 400 must name the category field");
|
|
4132
|
+
assert.match(categoryDetail.message, /one of: fact/, "the 400 must list valid options");
|
|
4133
|
+
assert.equal(captured.length, 2, "the near-miss must not dispatch");
|
|
4134
|
+
} finally {
|
|
4135
|
+
await server.stop();
|
|
4136
|
+
}
|
|
4137
|
+
});
|
|
4138
|
+
|
|
4061
4139
|
test("PR #1852: static operator token has no connector provenance under rotation", async () => {
|
|
4062
4140
|
// An operator-supplied static token must never acquire connector provenance,
|
|
4063
4141
|
// even when an entries getter is also configured and the static token
|
|
@@ -5003,6 +5081,177 @@ test("HTTP authorization probe verifies requested operation grants without invok
|
|
|
5003
5081
|
}
|
|
5004
5082
|
});
|
|
5005
5083
|
|
|
5084
|
+
test("HTTP authorization probe fails closed for transformed suggestion/memory schemas (#2866)", async () => {
|
|
5085
|
+
const service = {
|
|
5086
|
+
configRef: parseConfig({
|
|
5087
|
+
memoryDir: "/tmp/remnic-http-write-authorization-probe",
|
|
5088
|
+
defaultNamespace: "default",
|
|
5089
|
+
}),
|
|
5090
|
+
memoryStore: () => {
|
|
5091
|
+
throw new Error("authorization probe must not invoke memory_store");
|
|
5092
|
+
},
|
|
5093
|
+
suggestionSubmit: () => {
|
|
5094
|
+
throw new Error("authorization probe must not invoke suggestion_submit");
|
|
5095
|
+
},
|
|
5096
|
+
} as unknown as EngramAccessService;
|
|
5097
|
+
const writeOperations = ["memory_store", "suggestion_submit"] as const;
|
|
5098
|
+
const server = new EngramAccessHttpServer({
|
|
5099
|
+
service,
|
|
5100
|
+
port: 0,
|
|
5101
|
+
authTokenEntriesGetter: () => [
|
|
5102
|
+
{
|
|
5103
|
+
token: "scoped-write-token",
|
|
5104
|
+
capabilities: {
|
|
5105
|
+
version: 1,
|
|
5106
|
+
ops: [...writeOperations],
|
|
5107
|
+
namespaces: ["other"],
|
|
5108
|
+
},
|
|
5109
|
+
},
|
|
5110
|
+
],
|
|
5111
|
+
adminConsoleEnabled: false,
|
|
5112
|
+
});
|
|
5113
|
+
const status = await server.start();
|
|
5114
|
+
const probe = (operation: string, namespace?: string) => {
|
|
5115
|
+
const query = new URLSearchParams({ op: operation });
|
|
5116
|
+
if (namespace !== undefined) query.set("namespace", namespace);
|
|
5117
|
+
return fetch(`http://127.0.0.1:${status.port}/engram/v1/authorization?${query}`, {
|
|
5118
|
+
headers: { authorization: "Bearer scoped-write-token" },
|
|
5119
|
+
});
|
|
5120
|
+
};
|
|
5121
|
+
try {
|
|
5122
|
+
for (const operation of writeOperations) {
|
|
5123
|
+
const missing = await probe(operation);
|
|
5124
|
+
assert.equal(
|
|
5125
|
+
missing.status,
|
|
5126
|
+
403,
|
|
5127
|
+
`${operation} probe must deny the missing/default namespace`,
|
|
5128
|
+
);
|
|
5129
|
+
await missing.text();
|
|
5130
|
+
|
|
5131
|
+
const wrong = await probe(operation, "default");
|
|
5132
|
+
assert.equal(
|
|
5133
|
+
wrong.status,
|
|
5134
|
+
403,
|
|
5135
|
+
`${operation} probe must deny a namespace outside the token scope`,
|
|
5136
|
+
);
|
|
5137
|
+
await wrong.text();
|
|
5138
|
+
|
|
5139
|
+
const allowed = await probe(operation, "other");
|
|
5140
|
+
assert.equal(allowed.status, 200, `${operation} probe must allow the scoped namespace`);
|
|
5141
|
+
assert.deepEqual(await allowed.json(), {
|
|
5142
|
+
authorized: true,
|
|
5143
|
+
operations: [operation],
|
|
5144
|
+
});
|
|
5145
|
+
}
|
|
5146
|
+
} finally {
|
|
5147
|
+
await server.stop();
|
|
5148
|
+
}
|
|
5149
|
+
});
|
|
5150
|
+
|
|
5151
|
+
test("HTTP-MCP tools/call fails closed for memory_store/suggestion_submit aliases (#2866)", async () => {
|
|
5152
|
+
const calls: Array<{ op: string; args: Record<string, unknown> }> = [];
|
|
5153
|
+
const service = {
|
|
5154
|
+
configRef: parseConfig({
|
|
5155
|
+
memoryDir: "/tmp/remnic-mcp-write-authorization-probe",
|
|
5156
|
+
namespacesEnabled: true,
|
|
5157
|
+
defaultNamespace: "default",
|
|
5158
|
+
}),
|
|
5159
|
+
memoryStore: async (args: Record<string, unknown>) => {
|
|
5160
|
+
calls.push({ op: "memory_store", args });
|
|
5161
|
+
return {
|
|
5162
|
+
schemaVersion: 1,
|
|
5163
|
+
operation: "memory_store",
|
|
5164
|
+
namespace: args.namespace ?? "default",
|
|
5165
|
+
dryRun: true,
|
|
5166
|
+
accepted: true,
|
|
5167
|
+
queued: false,
|
|
5168
|
+
status: "validated",
|
|
5169
|
+
};
|
|
5170
|
+
},
|
|
5171
|
+
suggestionSubmit: async (args: Record<string, unknown>) => {
|
|
5172
|
+
calls.push({ op: "suggestion_submit", args });
|
|
5173
|
+
return {
|
|
5174
|
+
schemaVersion: 1,
|
|
5175
|
+
operation: "suggestion_submit",
|
|
5176
|
+
namespace: args.namespace ?? "default",
|
|
5177
|
+
dryRun: true,
|
|
5178
|
+
accepted: true,
|
|
5179
|
+
queued: false,
|
|
5180
|
+
status: "validated",
|
|
5181
|
+
};
|
|
5182
|
+
},
|
|
5183
|
+
} as unknown as EngramAccessService;
|
|
5184
|
+
const server = new EngramAccessHttpServer({
|
|
5185
|
+
service,
|
|
5186
|
+
port: 0,
|
|
5187
|
+
authTokenEntriesGetter: () => [
|
|
5188
|
+
{
|
|
5189
|
+
token: "scoped-write-token",
|
|
5190
|
+
capabilities: {
|
|
5191
|
+
version: 1,
|
|
5192
|
+
ops: ["memory_store", "suggestion_submit"],
|
|
5193
|
+
namespaces: ["ns_a"],
|
|
5194
|
+
},
|
|
5195
|
+
},
|
|
5196
|
+
],
|
|
5197
|
+
adminConsoleEnabled: false,
|
|
5198
|
+
});
|
|
5199
|
+
const status = await server.start();
|
|
5200
|
+
const mcpCall = (name: string, args: Record<string, unknown>) =>
|
|
5201
|
+
fetch(`http://127.0.0.1:${status.port}/mcp`, {
|
|
5202
|
+
method: "POST",
|
|
5203
|
+
headers: {
|
|
5204
|
+
authorization: "Bearer scoped-write-token",
|
|
5205
|
+
"content-type": "application/json",
|
|
5206
|
+
},
|
|
5207
|
+
body: JSON.stringify({
|
|
5208
|
+
jsonrpc: "2.0",
|
|
5209
|
+
id: 1,
|
|
5210
|
+
method: "tools/call",
|
|
5211
|
+
params: { name, arguments: args },
|
|
5212
|
+
}),
|
|
5213
|
+
});
|
|
5214
|
+
const aliases = [
|
|
5215
|
+
"engram.memory_store",
|
|
5216
|
+
"remnic.memory_store",
|
|
5217
|
+
"engram.suggestion_submit",
|
|
5218
|
+
"remnic.suggestion_submit",
|
|
5219
|
+
] as const;
|
|
5220
|
+
try {
|
|
5221
|
+
for (const name of aliases) {
|
|
5222
|
+
const wrong = await mcpCall(name, {
|
|
5223
|
+
content: "aliased write",
|
|
5224
|
+
category: "project_state",
|
|
5225
|
+
namespace: "ns_b",
|
|
5226
|
+
dryRun: true,
|
|
5227
|
+
});
|
|
5228
|
+
assert.equal(wrong.status, 403, `${name} must deny a namespace outside the token scope`);
|
|
5229
|
+
await wrong.text();
|
|
5230
|
+
|
|
5231
|
+
const missing = await mcpCall(name, {
|
|
5232
|
+
content: "aliased write",
|
|
5233
|
+
category: "project_update",
|
|
5234
|
+
dryRun: true,
|
|
5235
|
+
});
|
|
5236
|
+
assert.equal(missing.status, 403, `${name} must deny the missing/default namespace`);
|
|
5237
|
+
await missing.text();
|
|
5238
|
+
}
|
|
5239
|
+
assert.equal(calls.length, 0, "denied MCP writes must not reach the handler");
|
|
5240
|
+
|
|
5241
|
+
const allowed = await mcpCall("engram.memory_store", {
|
|
5242
|
+
content: "aliased write",
|
|
5243
|
+
category: "project",
|
|
5244
|
+
namespace: "ns_a",
|
|
5245
|
+
dryRun: true,
|
|
5246
|
+
});
|
|
5247
|
+
assert.notEqual(allowed.status, 403, "the allowed namespace must proceed past the gate");
|
|
5248
|
+
assert.equal(calls.at(-1)?.op, "memory_store");
|
|
5249
|
+
assert.equal(calls.at(-1)?.args.namespace, "ns_a");
|
|
5250
|
+
} finally {
|
|
5251
|
+
await server.stop();
|
|
5252
|
+
}
|
|
5253
|
+
});
|
|
5254
|
+
|
|
5006
5255
|
test("HTTP authorization probe checks the principal-derived support passport namespace", async () => {
|
|
5007
5256
|
let namespaceResolutions = 0;
|
|
5008
5257
|
const service = {
|
package/src/access-http.ts
CHANGED
|
@@ -2118,6 +2118,8 @@ export class EngramAccessHttpServer extends ReviewDeckAccessHttpBase {
|
|
|
2118
2118
|
sourceReason: body.sourceReason,
|
|
2119
2119
|
cwd: body.cwd,
|
|
2120
2120
|
projectTag: body.projectTag,
|
|
2121
|
+
// #2829: raw alias spelling retained by the schema transform.
|
|
2122
|
+
...(body.rawCategory !== undefined ? { rawCategory: body.rawCategory } : {}),
|
|
2121
2123
|
// Phase 1 provenance: server-resolved connector identity from the
|
|
2122
2124
|
// bearer token (REST path, mirroring the MCP tools/call dispatch).
|
|
2123
2125
|
sourceConnector: this.resolveConnector(req),
|
package/src/access-mcp.test.ts
CHANGED
|
@@ -307,8 +307,8 @@ test("MCP memory write tools admit project-shaped category aliases (#2780)", asy
|
|
|
307
307
|
assert.equal(result?.isError, false, `${toolName} must admit project-shaped category aliases`);
|
|
308
308
|
assert.equal(
|
|
309
309
|
received?.category,
|
|
310
|
-
"
|
|
311
|
-
`${toolName} must
|
|
310
|
+
"fact",
|
|
311
|
+
`${toolName} must dispatch the schema-canonicalized category`
|
|
312
312
|
);
|
|
313
313
|
}
|
|
314
314
|
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Category-alias split + replay restamp for observe/write (#2829).
|
|
3
|
+
* Extracted from access-observe-write-surface.ts to stay under the 1200-line cap.
|
|
4
|
+
*
|
|
5
|
+
* The wire schema already maps an alias to "fact". `rawCategory` is the
|
|
6
|
+
* caller's spelling: it must not reach the write candidate or fingerprint,
|
|
7
|
+
* and a replay must rebuild the note from THIS request's spelling.
|
|
8
|
+
*/
|
|
9
|
+
import {
|
|
10
|
+
categoryAliasCoercion,
|
|
11
|
+
reapplyCategoryCoercion,
|
|
12
|
+
type CategoryAliasCoercion,
|
|
13
|
+
} from "./access-schema.js";
|
|
14
|
+
|
|
15
|
+
export { reapplyCategoryCoercion };
|
|
16
|
+
|
|
17
|
+
export function splitCanonicalWriteRequest<T extends { rawCategory?: string }>(
|
|
18
|
+
request: T,
|
|
19
|
+
): {
|
|
20
|
+
canonical: Omit<T, "rawCategory">;
|
|
21
|
+
categoryCoercion: CategoryAliasCoercion | undefined;
|
|
22
|
+
} {
|
|
23
|
+
const { rawCategory, ...canonical } = request;
|
|
24
|
+
return { canonical, categoryCoercion: categoryAliasCoercion(rawCategory) };
|
|
25
|
+
}
|
|
@@ -29,8 +29,8 @@ import {
|
|
|
29
29
|
type MemoryScopePlan,
|
|
30
30
|
NamespaceNotWritableError,
|
|
31
31
|
} from "./access-service.js";
|
|
32
|
+
import { reapplyCategoryCoercion, splitCanonicalWriteRequest } from "./access-observe-write-category.js";
|
|
32
33
|
import { extractionForceFlush } from "./access-extraction-force-flush.js";
|
|
33
|
-
import { coerceProjectCategoryAlias, reapplyCategoryCoercion } from "./access-schema.js";
|
|
34
34
|
import { ObserveTranscriptPersister, observeTranscriptSessionKey } from "./access-observe-transcript.js";
|
|
35
35
|
import { FileCalendarSource, buildBriefing, parseBriefingFocus, parseBriefingWindow } from "./briefing.js";
|
|
36
36
|
import {
|
|
@@ -486,30 +486,30 @@ export class AccessObserveWriteSurface {
|
|
|
486
486
|
rawRequest: EngramAccessMemoryStoreRequest,
|
|
487
487
|
hooks?: { enforceWriteQuota?: () => void | Promise<void> }
|
|
488
488
|
): Promise<EngramAccessWriteResponse> {
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
// canonical "fact" once and reports the coercion on the response.
|
|
492
|
-
const { request, categoryCoercion } = coerceProjectCategoryAlias(rawRequest);
|
|
489
|
+
const request = rawRequest;
|
|
490
|
+
const { canonical, categoryCoercion } = splitCanonicalWriteRequest(request);
|
|
493
491
|
let namespace: string;
|
|
494
492
|
try {
|
|
495
|
-
namespace = await this.deps.resolveCodingScopedWriteNamespace(
|
|
493
|
+
namespace = await this.deps.resolveCodingScopedWriteNamespace(canonical);
|
|
496
494
|
} catch (err) {
|
|
497
495
|
// A dry run is a no-persist validation, and a replay re-submit sets
|
|
498
496
|
// suppressQuarantine so a still-unwritable target propagates instead of
|
|
499
|
-
// re-parking (issue #1888): never dead-letter either.
|
|
497
|
+
// re-parking (issue #1888): never dead-letter either. Park the FULL
|
|
498
|
+
// request (rawCategory included) so quarantine replay can re-report the
|
|
499
|
+
// alias coercion (Codex review, PR #2826).
|
|
500
500
|
if (request.dryRun !== true && request.suppressQuarantine !== true) {
|
|
501
501
|
await this.parkRejectedWrite(err, "memory_store", request);
|
|
502
502
|
}
|
|
503
503
|
throw err;
|
|
504
504
|
}
|
|
505
|
-
const schemaVersion =
|
|
505
|
+
const schemaVersion = canonical.schemaVersion ?? ENGRAM_ACCESS_WRITE_SCHEMA_VERSION;
|
|
506
506
|
if (schemaVersion !== ENGRAM_ACCESS_WRITE_SCHEMA_VERSION) {
|
|
507
507
|
throw new EngramAccessInputError(`unsupported schemaVersion: ${schemaVersion}`);
|
|
508
508
|
}
|
|
509
509
|
const execute = async (): Promise<EngramAccessWriteResponse> => {
|
|
510
|
-
const candidate = this.deps.validateWriteCandidate(
|
|
511
|
-
if (
|
|
512
|
-
return {
|
|
510
|
+
const candidate = this.deps.validateWriteCandidate(canonical, namespace);
|
|
511
|
+
if (canonical.dryRun === true) {
|
|
512
|
+
return reapplyCategoryCoercion<EngramAccessWriteResponse>({
|
|
513
513
|
schemaVersion: ENGRAM_ACCESS_WRITE_SCHEMA_VERSION,
|
|
514
514
|
operation: "memory_store",
|
|
515
515
|
namespace,
|
|
@@ -517,9 +517,8 @@ export class AccessObserveWriteSurface {
|
|
|
517
517
|
accepted: true,
|
|
518
518
|
queued: false,
|
|
519
519
|
status: "validated",
|
|
520
|
-
idempotencyKey:
|
|
521
|
-
|
|
522
|
-
};
|
|
520
|
+
idempotencyKey: canonical.idempotencyKey?.trim() || undefined,
|
|
521
|
+
}, categoryCoercion);
|
|
523
522
|
}
|
|
524
523
|
const result = await persistExplicitCapture(this.deps.orchestrator, candidate, "memory_store");
|
|
525
524
|
// Seed the session's coding binding ONLY after a real write commits, and
|
|
@@ -529,12 +528,12 @@ export class AccessObserveWriteSurface {
|
|
|
529
528
|
// but never binds the session on a dryRun, replay/conflict, quota
|
|
530
529
|
// rejection, or an explicit-namespace write (which bypasses the overlay),
|
|
531
530
|
// since those don't reach this point or aren't project-scoped (Codex review).
|
|
532
|
-
await this.deps.attachCodingContextAfterScopedWrite(
|
|
531
|
+
await this.deps.attachCodingContextAfterScopedWrite(canonical);
|
|
533
532
|
// #1645 (review thread yG-): a tombstone-blocked capture is pending_review
|
|
534
533
|
// (no active copy) — report it as queued_for_review so the HTTP/MCP caller
|
|
535
534
|
// doesn't read it as a successfully stored active memory.
|
|
536
535
|
const blocked = result.tombstoneBlocked === true && result.duplicateOf === undefined;
|
|
537
|
-
const response
|
|
536
|
+
const response = reapplyCategoryCoercion<EngramAccessWriteResponse>({
|
|
538
537
|
schemaVersion: ENGRAM_ACCESS_WRITE_SCHEMA_VERSION,
|
|
539
538
|
operation: "memory_store",
|
|
540
539
|
namespace,
|
|
@@ -544,9 +543,8 @@ export class AccessObserveWriteSurface {
|
|
|
544
543
|
status: blocked ? "queued_for_review" : result.duplicateOf ? "duplicate" : "stored",
|
|
545
544
|
memoryId: result.id,
|
|
546
545
|
duplicateOf: result.duplicateOf,
|
|
547
|
-
idempotencyKey:
|
|
548
|
-
|
|
549
|
-
};
|
|
546
|
+
idempotencyKey: canonical.idempotencyKey?.trim() || undefined,
|
|
547
|
+
}, categoryCoercion);
|
|
550
548
|
log.info(
|
|
551
549
|
`access-write op=memory_store namespace=${namespace} dryRun=false status=${response.status} memoryId=${response.memoryId ?? "-"} idempotency=${response.idempotencyKey ? "yes" : "no"}`
|
|
552
550
|
);
|
|
@@ -554,22 +552,24 @@ export class AccessObserveWriteSurface {
|
|
|
554
552
|
};
|
|
555
553
|
const response = await this.deps.handleIdempotentWrite({
|
|
556
554
|
operation: "memory_store",
|
|
557
|
-
idempotencyKey:
|
|
555
|
+
idempotencyKey: canonical.idempotencyKey,
|
|
558
556
|
// Shared builder (issue #1989 PR3): byte-parity with the historical
|
|
559
557
|
// inline literal is asserted by access-fingerprint-parity.test.ts.
|
|
558
|
+
// Fingerprints the CANONICAL category, so `fact` and an alias spelling
|
|
559
|
+
// under one idempotency key are the same request (#2829).
|
|
560
560
|
requestFingerprint: buildAccessWriteRequestFingerprint({
|
|
561
561
|
schemaVersion,
|
|
562
562
|
namespace,
|
|
563
|
-
content:
|
|
564
|
-
category:
|
|
565
|
-
confidence:
|
|
566
|
-
tags:
|
|
567
|
-
entityRef:
|
|
568
|
-
ttl:
|
|
569
|
-
sourceReason:
|
|
570
|
-
sourceConnector:
|
|
563
|
+
content: canonical.content,
|
|
564
|
+
category: canonical.category,
|
|
565
|
+
confidence: canonical.confidence,
|
|
566
|
+
tags: canonical.tags,
|
|
567
|
+
entityRef: canonical.entityRef,
|
|
568
|
+
ttl: canonical.ttl,
|
|
569
|
+
sourceReason: canonical.sourceReason,
|
|
570
|
+
sourceConnector: canonical.sourceConnector,
|
|
571
571
|
}),
|
|
572
|
-
skip:
|
|
572
|
+
skip: canonical.dryRun === true,
|
|
573
573
|
beforeExecute: hooks?.enforceWriteQuota,
|
|
574
574
|
execute,
|
|
575
575
|
});
|
|
@@ -581,27 +581,29 @@ export class AccessObserveWriteSurface {
|
|
|
581
581
|
rawRequest: EngramAccessSuggestionSubmitRequest,
|
|
582
582
|
hooks?: { enforceWriteQuota?: () => void | Promise<void> }
|
|
583
583
|
): Promise<EngramAccessWriteResponse> {
|
|
584
|
-
|
|
585
|
-
const {
|
|
584
|
+
const request = rawRequest;
|
|
585
|
+
const { canonical, categoryCoercion } = splitCanonicalWriteRequest(request);
|
|
586
586
|
let namespace: string;
|
|
587
587
|
try {
|
|
588
|
-
namespace = await this.deps.resolveCodingScopedWriteNamespace(
|
|
588
|
+
namespace = await this.deps.resolveCodingScopedWriteNamespace(canonical);
|
|
589
589
|
} catch (err) {
|
|
590
590
|
// A dry run never persists, and a replay re-submit sets suppressQuarantine
|
|
591
591
|
// so a still-unwritable target propagates instead of re-parking (#1888).
|
|
592
|
+
// Park the FULL request (rawCategory included) so quarantine replay can
|
|
593
|
+
// re-report the alias coercion.
|
|
592
594
|
if (request.dryRun !== true && request.suppressQuarantine !== true) {
|
|
593
595
|
await this.parkRejectedWrite(err, "suggestion_submit", request);
|
|
594
596
|
}
|
|
595
597
|
throw err;
|
|
596
598
|
}
|
|
597
|
-
const schemaVersion =
|
|
599
|
+
const schemaVersion = canonical.schemaVersion ?? ENGRAM_ACCESS_WRITE_SCHEMA_VERSION;
|
|
598
600
|
if (schemaVersion !== ENGRAM_ACCESS_WRITE_SCHEMA_VERSION) {
|
|
599
601
|
throw new EngramAccessInputError(`unsupported schemaVersion: ${schemaVersion}`);
|
|
600
602
|
}
|
|
601
603
|
const execute = async (): Promise<EngramAccessWriteResponse> => {
|
|
602
|
-
const candidate = this.deps.validateWriteCandidate(
|
|
603
|
-
if (
|
|
604
|
-
return {
|
|
604
|
+
const candidate = this.deps.validateWriteCandidate(canonical, namespace);
|
|
605
|
+
if (canonical.dryRun === true) {
|
|
606
|
+
return reapplyCategoryCoercion<EngramAccessWriteResponse>({
|
|
605
607
|
schemaVersion: ENGRAM_ACCESS_WRITE_SCHEMA_VERSION,
|
|
606
608
|
operation: "suggestion_submit",
|
|
607
609
|
namespace,
|
|
@@ -609,21 +611,20 @@ export class AccessObserveWriteSurface {
|
|
|
609
611
|
accepted: true,
|
|
610
612
|
queued: true,
|
|
611
613
|
status: "validated",
|
|
612
|
-
idempotencyKey:
|
|
613
|
-
|
|
614
|
-
};
|
|
614
|
+
idempotencyKey: canonical.idempotencyKey?.trim() || undefined,
|
|
615
|
+
}, categoryCoercion);
|
|
615
616
|
}
|
|
616
617
|
const result = await queueExplicitCaptureForReview(
|
|
617
618
|
this.deps.orchestrator,
|
|
618
619
|
candidate,
|
|
619
620
|
"suggestion_submit",
|
|
620
|
-
new Error(
|
|
621
|
+
new Error(canonical.sourceReason?.trim() || "submitted via engram suggestion_submit")
|
|
621
622
|
);
|
|
622
623
|
// Seed the session binding only after a real, project-scoped submit commits
|
|
623
624
|
// (mirrors memory_store / recall; skips dryRun, replay, quota-reject, and
|
|
624
625
|
// explicit-namespace writes — Codex review).
|
|
625
|
-
await this.deps.attachCodingContextAfterScopedWrite(
|
|
626
|
-
const response
|
|
626
|
+
await this.deps.attachCodingContextAfterScopedWrite(canonical);
|
|
627
|
+
const response = reapplyCategoryCoercion<EngramAccessWriteResponse>({
|
|
627
628
|
schemaVersion: ENGRAM_ACCESS_WRITE_SCHEMA_VERSION,
|
|
628
629
|
operation: "suggestion_submit",
|
|
629
630
|
namespace,
|
|
@@ -633,37 +634,37 @@ export class AccessObserveWriteSurface {
|
|
|
633
634
|
status: "queued_for_review",
|
|
634
635
|
memoryId: result.id,
|
|
635
636
|
duplicateOf: result.duplicateOf,
|
|
636
|
-
idempotencyKey:
|
|
637
|
-
|
|
638
|
-
};
|
|
637
|
+
idempotencyKey: canonical.idempotencyKey?.trim() || undefined,
|
|
638
|
+
}, categoryCoercion);
|
|
639
639
|
log.info(
|
|
640
640
|
`access-write op=suggestion_submit namespace=${namespace} dryRun=false status=${response.status} memoryId=${response.memoryId ?? "-"} idempotency=${response.idempotencyKey ? "yes" : "no"}`
|
|
641
641
|
);
|
|
642
642
|
return response;
|
|
643
643
|
};
|
|
644
|
-
const
|
|
644
|
+
const response = await this.deps.handleIdempotentWrite({
|
|
645
645
|
operation: "suggestion_submit",
|
|
646
|
-
idempotencyKey:
|
|
646
|
+
idempotencyKey: canonical.idempotencyKey,
|
|
647
647
|
// Shared builder (issue #1989 PR3): byte-parity with the historical
|
|
648
648
|
// inline literal is asserted by access-fingerprint-parity.test.ts.
|
|
649
|
+
// Fingerprints the CANONICAL category (#2829).
|
|
649
650
|
requestFingerprint: buildAccessWriteRequestFingerprint({
|
|
650
651
|
schemaVersion,
|
|
651
652
|
namespace,
|
|
652
|
-
content:
|
|
653
|
-
category:
|
|
654
|
-
confidence:
|
|
655
|
-
tags:
|
|
656
|
-
entityRef:
|
|
657
|
-
ttl:
|
|
658
|
-
sourceReason:
|
|
659
|
-
sourceConnector:
|
|
653
|
+
content: canonical.content,
|
|
654
|
+
category: canonical.category,
|
|
655
|
+
confidence: canonical.confidence,
|
|
656
|
+
tags: canonical.tags,
|
|
657
|
+
entityRef: canonical.entityRef,
|
|
658
|
+
ttl: canonical.ttl,
|
|
659
|
+
sourceReason: canonical.sourceReason,
|
|
660
|
+
sourceConnector: canonical.sourceConnector,
|
|
660
661
|
}),
|
|
661
|
-
skip:
|
|
662
|
+
skip: canonical.dryRun === true,
|
|
662
663
|
beforeExecute: hooks?.enforceWriteQuota,
|
|
663
664
|
execute,
|
|
664
665
|
});
|
|
665
666
|
// #2780 fix B: rewrite a replayed coercion note from THIS request's raw category.
|
|
666
|
-
return reapplyCategoryCoercion(
|
|
667
|
+
return reapplyCategoryCoercion(response, categoryCoercion);
|
|
667
668
|
}
|
|
668
669
|
|
|
669
670
|
async runObserve(request: EngramAccessObserveRequest): Promise<EngramAccessObserveResponse> {
|
|
@@ -15,7 +15,14 @@ import type { DreamsPhase, RecallDisclosure, RecallPlanMode } from "./types.js";
|
|
|
15
15
|
import type { RemnicChatGptMemoryInspectorInput } from "./mcp-memory-inspector-app.js";
|
|
16
16
|
import { defineOperation } from "./access-boundary.js";
|
|
17
17
|
import { EngramAccessForbiddenError } from "./access-errors.js";
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
type ObserveRequest,
|
|
20
|
+
observeRequestSchema,
|
|
21
|
+
type RecallRequest,
|
|
22
|
+
recallRequestSchema,
|
|
23
|
+
retainedCategoryAlias,
|
|
24
|
+
suggestionSubmitRequestSchema,
|
|
25
|
+
} from "./access-schema.js";
|
|
19
26
|
import { EngramAccessInputError, type EngramAccessService } from "./access-service.js";
|
|
20
27
|
import { enforceNamespaceAllowList, tokenCapabilityStore } from "./access-token-capabilities.js";
|
|
21
28
|
import { projectTagProjectId } from "./coding/coding-namespace.js";
|
|
@@ -227,7 +234,26 @@ defineOperation({ name: "procedure_library_maintenance", description: "Run proce
|
|
|
227
234
|
|
|
228
235
|
// === MEMORY/ENTITY/OBSERVE/LCM ===
|
|
229
236
|
defineOperation({ name: "memory_timeline", description: "Memory timeline.", schema: strictSchema({ memoryId: S.str, namespace: S.str, limit: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.memoryTimeline(optStr(input.memoryId) ?? "", optStr(input.namespace), optNum(input.limit) ?? 200, ctx.authenticatedPrincipal) }) });
|
|
230
|
-
|
|
237
|
+
// Issue #2482/#2829: suggestion_submit validates through the canonical
|
|
238
|
+
// suggestionSubmitRequestSchema — the SAME schema the HTTP transport and the
|
|
239
|
+
// MCP wire parse use, category alias transform included. The raw spelling
|
|
240
|
+
// survives on `ctx.rawInput` for the coercion note.
|
|
241
|
+
defineOperation({
|
|
242
|
+
name: "suggestion_submit",
|
|
243
|
+
description: "Submit suggestion.",
|
|
244
|
+
schema: z.preprocess((data) => stripNullsExcept(data, ["codingContext"]), suggestionSubmitRequestSchema),
|
|
245
|
+
handler: async (input, ctx) => {
|
|
246
|
+
const rawCategory = retainedCategoryAlias(ctx.rawInput);
|
|
247
|
+
return {
|
|
248
|
+
result: await ctx.service.suggestionSubmit({
|
|
249
|
+
...input,
|
|
250
|
+
authenticatedPrincipal: ctx.authenticatedPrincipal,
|
|
251
|
+
...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}),
|
|
252
|
+
...(rawCategory ? { rawCategory } : {}),
|
|
253
|
+
}),
|
|
254
|
+
};
|
|
255
|
+
},
|
|
256
|
+
});
|
|
231
257
|
defineOperation({ name: "entity_get", description: "Get entity.", schema: strictSchema({ name: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.entityGet(optStr(input.name) ?? "", optStr(input.namespace)) }) });
|
|
232
258
|
defineOperation({ name: "review_queue_list", description: "List review queue.", schema: strictSchema({ runId: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.reviewQueue(optStr(input.runId) ?? "", optStr(input.namespace), ctx.authenticatedPrincipal) }) });
|
|
233
259
|
// Issue #2482: observe validates through the canonical observeRequestSchema
|
package/src/access-operations.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import { z } from "zod";
|
|
16
16
|
|
|
17
17
|
import { defineOperation } from "./access-boundary.js";
|
|
18
|
-
import { memoryStoreRequestSchema, type MemoryStoreRequest } from "./access-schema.js";
|
|
18
|
+
import { memoryStoreRequestSchema, retainedCategoryAlias, type MemoryStoreRequest } from "./access-schema.js";
|
|
19
19
|
import { EngramAccessInputError } from "./access-service.js";
|
|
20
20
|
import { CorrectionContractError } from "./correction/correction-contract.js";
|
|
21
21
|
import { externalWikiSearchOperation } from "./external-wiki-access.js";
|
|
@@ -154,16 +154,18 @@ export interface MemoryStoreOutput {
|
|
|
154
154
|
export const memoryStoreOperation = defineOperation<MemoryStoreInput, MemoryStoreOutput>({
|
|
155
155
|
name: "memory_store",
|
|
156
156
|
description: "Store an explicit memory through the access layer.",
|
|
157
|
-
//
|
|
158
|
-
//
|
|
159
|
-
//
|
|
157
|
+
// The canonical wire schema (issue #2482): its category transform already
|
|
158
|
+
// mapped compat aliases to "fact", so `input.category` is finite here. The
|
|
159
|
+
// raw spelling survives on `ctx.rawInput` for the coercion note (#2829).
|
|
160
160
|
schema: memoryStoreRequestSchema,
|
|
161
161
|
handler: async (input, ctx) => {
|
|
162
|
+
const rawCategory = retainedCategoryAlias(ctx.rawInput);
|
|
162
163
|
const result = await ctx.service.memoryStore(
|
|
163
164
|
{
|
|
164
165
|
...input,
|
|
165
166
|
authenticatedPrincipal: ctx.authenticatedPrincipal,
|
|
166
167
|
...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}),
|
|
168
|
+
...(rawCategory ? { rawCategory } : {}),
|
|
167
169
|
},
|
|
168
170
|
// Forward transport-level hooks (e.g. HTTP's atomic write-quota gate)
|
|
169
171
|
// so the hook still fires inside the service's idempotent-write lock —
|