@remnic/core 9.45.3 → 9.45.5
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/abort-error.d.ts +2 -1
- package/dist/abort-error.js +3 -1
- package/dist/access-admin-ops-surface.d.ts +14 -10
- package/dist/access-admin-ops-surface.js +84 -75
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +14 -10
- package/dist/access-authorization-probe.js +85 -76
- package/dist/access-boundary.d.ts +15 -11
- package/dist/access-boundary.js +84 -75
- package/dist/access-citation-namespace.js +2 -2
- package/dist/access-cli.js +191 -177
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +16 -0
- package/dist/access-coding-context-resolution.js +13 -0
- package/dist/access-coding-context-resolution.js.map +1 -0
- package/dist/access-extraction-force-flush.d.ts +14 -10
- package/dist/access-extraction-force-flush.js +84 -75
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-lcm-compaction.d.ts +16 -12
- package/dist/access-http-lcm-compaction.js +3 -3
- package/dist/access-http-lifecycle-flush.d.ts +14 -10
- package/dist/access-http-lifecycle-flush.js +2 -2
- package/dist/access-http-offline-stream.d.ts +123 -0
- package/dist/access-http-offline-stream.js +10 -0
- package/dist/access-http-offline-stream.js.map +1 -0
- package/dist/access-http-query.js +84 -75
- package/dist/access-http.d.ts +15 -11
- package/dist/access-http.js +104 -90
- package/dist/access-identity-continuity-surface.d.ts +9 -8
- package/dist/access-identity-continuity-surface.js +84 -75
- package/dist/access-lcm-surface.d.ts +14 -10
- package/dist/access-lcm-surface.js +84 -75
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp.d.ts +14 -10
- package/dist/access-mcp.js +95 -82
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-5yZ4g6F8.d.ts → access-namespace-preflight-CWUDwB4M.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +84 -75
- package/dist/access-observe-helpers.d.ts +1 -0
- package/dist/access-observe-helpers.js +1 -1
- package/dist/access-observe-write-surface.d.ts +16 -10
- package/dist/access-observe-write-surface.js +84 -75
- package/dist/access-offline-manifest.d.ts +104 -0
- package/dist/access-offline-manifest.js +45 -0
- package/dist/access-offline-manifest.js.map +1 -0
- package/dist/access-operations-batch.js +86 -77
- package/dist/access-operations.d.ts +18 -14
- package/dist/access-operations.js +91 -79
- package/dist/access-recall-concurrency.d.ts +16 -26
- package/dist/access-recall-concurrency.js +86 -76
- package/dist/access-recall-response.d.ts +18 -14
- package/dist/access-recall-response.js +84 -75
- package/dist/access-recall-surface.d.ts +29 -24
- package/dist/access-recall-surface.js +84 -75
- package/dist/access-schema.d.ts +84 -84
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-CiJRsgAB.d.ts → access-service-CNN89xyn.d.ts} +25 -16
- package/dist/access-service-helpers.d.ts +14 -10
- package/dist/access-service.d.ts +14 -10
- package/dist/access-service.js +84 -75
- package/dist/access-surface-catalog.d.ts +14 -10
- package/dist/access-surface-catalog.js +4 -0
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +4 -3
- package/dist/action-confidence.d.ts +2 -1
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +10 -8
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/{auto-sync-5OE5QOZB.js → auto-sync-UPTUVE4X.js} +6 -6
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-learner.js +1 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +9 -8
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +24 -22
- 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 +12 -11
- package/dist/bulk-import/index.d.ts +4 -3
- package/dist/calibration.d.ts +2 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/{capsule-merge-IDWJPCWK.js → capsule-merge-Q6AR3XL7.js} +67 -54
- package/dist/capsule-merge-Q6AR3XL7.js.map +1 -0
- package/dist/{catalog-scBmy0sO.d.ts → catalog-bctMURhN.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 +28 -26
- 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.js +1 -1
- package/dist/{chunk-E5UK4VPE.js → chunk-2FSTB6BJ.js} +5 -5
- package/dist/{chunk-5ZE7QHTK.js → chunk-2X2T2UVE.js} +5 -5
- package/dist/{chunk-P4DRWEYC.js → chunk-3COYXTGM.js} +2 -2
- package/dist/{chunk-5IVLTFOV.js → chunk-44N6ESJ4.js} +2 -2
- package/dist/{chunk-DL7ZD3JH.js → chunk-4FBVAGV3.js} +14 -9
- package/dist/chunk-4FBVAGV3.js.map +1 -0
- package/dist/{chunk-WOCNN776.js → chunk-4POAMKV6.js} +100 -41
- package/dist/chunk-4POAMKV6.js.map +1 -0
- package/dist/{chunk-HO3QBJEY.js → chunk-5546W5SI.js} +2 -2
- package/dist/{chunk-AAIUERNB.js → chunk-5QJQHBLE.js} +6 -6
- package/dist/{chunk-6CZPDBJS.js → chunk-5U7ID3EZ.js} +3 -3
- package/dist/{chunk-RN7DY3FC.js → chunk-6ISC4AVB.js} +31 -12
- package/dist/chunk-6ISC4AVB.js.map +1 -0
- package/dist/chunk-773TRRGT.js +36 -0
- package/dist/chunk-773TRRGT.js.map +1 -0
- package/dist/chunk-7T4TOGMS.js +242 -0
- package/dist/chunk-7T4TOGMS.js.map +1 -0
- package/dist/{chunk-DLVPUX7U.js → chunk-7YKVM5H3.js} +8 -6
- package/dist/chunk-7YKVM5H3.js.map +1 -0
- package/dist/chunk-7YQ6ESEA.js +322 -0
- package/dist/chunk-7YQ6ESEA.js.map +1 -0
- package/dist/{chunk-DNWXFTLD.js → chunk-A4IJCD2Z.js} +2 -2
- package/dist/{chunk-3CE77VAP.js → chunk-A4JMGKCD.js} +87 -74
- package/dist/chunk-A4JMGKCD.js.map +1 -0
- package/dist/chunk-A5KNZSNA.js +26 -0
- package/dist/chunk-A5KNZSNA.js.map +1 -0
- package/dist/{chunk-PKNLM44P.js → chunk-AC5OWJLV.js} +9 -9
- package/dist/{chunk-LZ4LDKHZ.js → chunk-AMAUBUKY.js} +6 -6
- package/dist/{chunk-CUM2BBPN.js → chunk-AUMWZSE7.js} +19 -10
- package/dist/chunk-AUMWZSE7.js.map +1 -0
- package/dist/{chunk-BUE5E2HL.js → chunk-BGLY7EEM.js} +5 -314
- package/dist/chunk-BGLY7EEM.js.map +1 -0
- package/dist/chunk-BIPBQQFI.js +44 -0
- package/dist/chunk-BIPBQQFI.js.map +1 -0
- package/dist/{chunk-S5SLVSVY.js → chunk-BQIFZ2MP.js} +5 -5
- package/dist/chunk-BTTPKDIL.js +34 -0
- package/dist/{chunk-PVGDJXVK.js.map → chunk-BTTPKDIL.js.map} +1 -1
- package/dist/chunk-CK5KOVHW.js +69 -0
- package/dist/chunk-CK5KOVHW.js.map +1 -0
- package/dist/{chunk-Q6IP2ARR.js → chunk-CSOYVTRX.js} +2 -2
- package/dist/{chunk-XOQSEF7X.js → chunk-CVILPI77.js} +6 -6
- package/dist/{chunk-VWAXN2BN.js → chunk-CX4ZUMC6.js} +91 -83
- package/dist/chunk-CX4ZUMC6.js.map +1 -0
- package/dist/{chunk-NVRYW264.js → chunk-DAJPRXBR.js} +16 -13
- package/dist/chunk-DAJPRXBR.js.map +1 -0
- package/dist/{chunk-J7VGGECD.js → chunk-DZPFMQZ7.js} +1 -1
- package/dist/chunk-DZPFMQZ7.js.map +1 -0
- package/dist/{chunk-4LMA77JH.js → chunk-E5XQIWAL.js} +3 -3
- package/dist/{chunk-WUNIWKY4.js → chunk-ELIL2A37.js} +6 -6
- package/dist/{chunk-OQ5PRDDS.js → chunk-ERZ2R42X.js} +6 -6
- package/dist/{chunk-U7GW7NE7.js → chunk-FIK3CQNA.js} +10 -10
- package/dist/{chunk-D3J5SLQK.js → chunk-FR27HBBA.js} +81 -20
- package/dist/chunk-FR27HBBA.js.map +1 -0
- package/dist/{chunk-E6PNLPGJ.js → chunk-FUCYDRE5.js} +838 -480
- package/dist/chunk-FUCYDRE5.js.map +1 -0
- package/dist/{chunk-HZFHQ4AQ.js → chunk-G7A5HLUS.js} +23 -17
- package/dist/chunk-G7A5HLUS.js.map +1 -0
- package/dist/{chunk-33PLLLL7.js → chunk-GFCVUY6G.js} +6 -6
- package/dist/{chunk-HREE4JHI.js → chunk-GODSPTOT.js} +477 -278
- package/dist/chunk-GODSPTOT.js.map +1 -0
- package/dist/{chunk-S2NCTZGJ.js → chunk-GRUYA45P.js} +15 -15
- package/dist/chunk-GRUYA45P.js.map +1 -0
- package/dist/{chunk-VUPTKTDV.js → chunk-GUAL4PQH.js} +3 -3
- package/dist/{chunk-CINZGPSJ.js → chunk-GUMZC2BO.js} +2 -2
- package/dist/{chunk-H24WNPA2.js → chunk-GWFSVJ4P.js} +3 -3
- package/dist/{chunk-7XC2HX75.js → chunk-GYPQL6XN.js} +157 -16
- package/dist/chunk-GYPQL6XN.js.map +1 -0
- package/dist/{chunk-TSH56VPU.js → chunk-HAYSYUAB.js} +2 -2
- package/dist/{chunk-PDLBLTOK.js → chunk-HC3PBX23.js} +9 -9
- package/dist/{chunk-TDHTVMPG.js → chunk-HFPASSFV.js} +7 -2
- package/dist/chunk-HFPASSFV.js.map +1 -0
- package/dist/chunk-J2WC5LF4.js +395 -0
- package/dist/chunk-J2WC5LF4.js.map +1 -0
- package/dist/{chunk-KXB4VXHY.js → chunk-JIYDRBVZ.js} +2 -2
- package/dist/chunk-JV3C2MNQ.js +74 -0
- package/dist/chunk-JV3C2MNQ.js.map +1 -0
- package/dist/{chunk-HLPD7B7P.js → chunk-JZH4LWHB.js} +2 -2
- package/dist/{chunk-AV5ZEH4M.js → chunk-KVJRXN2E.js} +2 -2
- package/dist/{chunk-WFTIGIIS.js → chunk-L6CQ7WIW.js} +5 -5
- package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
- package/dist/{chunk-EJUEXZHX.js → chunk-LLJMAULE.js} +2 -2
- package/dist/{chunk-N5Z4EVOR.js → chunk-LNEWDF2A.js} +36 -11
- package/dist/chunk-LNEWDF2A.js.map +1 -0
- package/dist/{chunk-QN25OCUF.js → chunk-LPYDOLSM.js} +5 -5
- package/dist/{chunk-AS7YMSL6.js → chunk-M23RF3LJ.js} +4 -4
- package/dist/{chunk-OAEQLRCY.js → chunk-MO4HSXHZ.js} +5 -5
- package/dist/{chunk-ECK75GDJ.js → chunk-N3LL5NEU.js} +43 -24
- package/dist/chunk-N3LL5NEU.js.map +1 -0
- package/dist/chunk-NEF7LR5J.js +29 -0
- package/dist/chunk-NEF7LR5J.js.map +1 -0
- package/dist/{chunk-3F2LKUMU.js → chunk-NIS256NW.js} +2 -2
- package/dist/{chunk-YIAA2X3D.js → chunk-NK5RGJ65.js} +3 -3
- package/dist/chunk-NLDVVWCL.js +84 -0
- package/dist/chunk-NLDVVWCL.js.map +1 -0
- package/dist/{chunk-4J7G5SY4.js → chunk-NZBZ7IS2.js} +72 -24
- package/dist/chunk-NZBZ7IS2.js.map +1 -0
- package/dist/{chunk-3TBLDMJA.js → chunk-O4KMGRXE.js} +5 -2
- package/dist/chunk-O4KMGRXE.js.map +1 -0
- package/dist/{chunk-7TWUCYER.js → chunk-PNRA7FAD.js} +7 -7
- package/dist/{chunk-5I4M26Q7.js → chunk-QBSFOKY6.js} +4 -4
- package/dist/{chunk-E53DSZEN.js → chunk-QR6G5KF4.js} +3 -3
- package/dist/{chunk-CJ2ZR7UA.js → chunk-QUENPGWZ.js} +261 -211
- package/dist/chunk-QUENPGWZ.js.map +1 -0
- package/dist/{chunk-4UH4BTGK.js → chunk-QVJPH7SH.js} +84 -84
- package/dist/{chunk-UYLMNVY6.js → chunk-R3KHKU7M.js} +16 -9
- package/dist/chunk-R3KHKU7M.js.map +1 -0
- package/dist/{chunk-JBPKEARU.js → chunk-RKNJBZ55.js} +4 -4
- package/dist/{chunk-WDISJRMG.js → chunk-RMMVQQA6.js} +2 -2
- package/dist/{chunk-JVLCVFQ4.js → chunk-RNHVVMFN.js} +3 -3
- package/dist/{chunk-QJAQNXWI.js → chunk-RVO6TCTU.js} +81 -84
- package/dist/chunk-RVO6TCTU.js.map +1 -0
- package/dist/chunk-S2HLHAZ4.js +16 -0
- package/dist/chunk-S2HLHAZ4.js.map +1 -0
- package/dist/{chunk-KWMXR7XS.js → chunk-S2V7RUCL.js} +8 -1
- package/dist/{chunk-KWMXR7XS.js.map → chunk-S2V7RUCL.js.map} +1 -1
- package/dist/{chunk-5SM35XZR.js → chunk-S5NZBKKQ.js} +2 -2
- package/dist/{chunk-VNA7W7QF.js → chunk-SVH57F5Z.js} +12 -4
- package/dist/chunk-SVH57F5Z.js.map +1 -0
- package/dist/{chunk-WIPEXG6R.js → chunk-SXIMQLGV.js} +2 -2
- package/dist/{chunk-RVLJEII5.js → chunk-SYUBB3WM.js} +256 -187
- package/dist/chunk-SYUBB3WM.js.map +1 -0
- package/dist/{chunk-VCD4PSK2.js → chunk-TQZ4DVBC.js} +7 -4
- package/dist/chunk-TQZ4DVBC.js.map +1 -0
- package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
- package/dist/{chunk-YV32N67O.js → chunk-URS5GSM7.js} +1 -1
- package/dist/chunk-URS5GSM7.js.map +1 -0
- package/dist/{chunk-4B77XSG5.js → chunk-UV72DEZD.js} +5 -5
- package/dist/{chunk-BJKPPZ6Z.js → chunk-UW66OZTD.js} +2 -2
- package/dist/{chunk-XYTOI63Z.js → chunk-V2TNYF6Q.js} +19 -11
- package/dist/chunk-V2TNYF6Q.js.map +1 -0
- package/dist/{chunk-S2BBISHU.js → chunk-VANZKHTN.js} +3 -3
- package/dist/chunk-VHFXP27N.js +250 -0
- package/dist/chunk-VHFXP27N.js.map +1 -0
- package/dist/chunk-VL35ZFSZ.js +102 -0
- package/dist/chunk-VL35ZFSZ.js.map +1 -0
- package/dist/{chunk-3Y224NYC.js → chunk-VYISFWVX.js} +2 -2
- package/dist/{chunk-JE7EK33X.js → chunk-W2V7UESE.js} +2 -2
- package/dist/{chunk-TIHMZFIV.js → chunk-W3IC7QOY.js} +3 -3
- package/dist/{chunk-NRV4Y3PM.js → chunk-W4FBGYGK.js} +1 -1
- package/dist/{chunk-P2BM76KT.js → chunk-WAS4HV46.js} +174 -43
- package/dist/chunk-WAS4HV46.js.map +1 -0
- package/dist/{chunk-57QKLRBV.js → chunk-WB7JSQCP.js} +2 -1
- package/dist/chunk-WB7JSQCP.js.map +1 -0
- package/dist/{chunk-A5OJCXZL.js → chunk-WZ3TOIDW.js} +15 -4
- package/dist/chunk-WZ3TOIDW.js.map +1 -0
- package/dist/{chunk-MU7ZHSZE.js → chunk-WZFAPHIK.js} +2 -2
- package/dist/{chunk-T2TTP3KU.js → chunk-X4IDNPOS.js} +2 -2
- package/dist/{chunk-UVIKWC7M.js → chunk-XAGYS7X6.js} +17 -17
- package/dist/{chunk-BLAKS3CP.js → chunk-XL3TATMJ.js} +3 -3
- package/dist/{chunk-W4XJFLAL.js → chunk-XPRJSHNI.js} +2 -2
- package/dist/{chunk-5TFP4CUL.js → chunk-XQ3HXAQH.js} +14 -11
- package/dist/chunk-XQ3HXAQH.js.map +1 -0
- package/dist/{chunk-E6EE5B67.js → chunk-YK6BDDHP.js} +4 -4
- package/dist/{chunk-ES36HTSC.js → chunk-YLHM5BQQ.js} +3 -3
- package/dist/{chunk-ULARSG5Z.js → chunk-YN6ASZUG.js} +10 -8
- package/dist/{chunk-ULARSG5Z.js.map → chunk-YN6ASZUG.js.map} +1 -1
- package/dist/{chunk-VOUOLGIP.js → chunk-YRFAYOFQ.js} +11 -13
- package/dist/chunk-YRFAYOFQ.js.map +1 -0
- package/dist/{chunk-IKKWIPYN.js → chunk-YYQAKIDJ.js} +37 -1
- package/dist/chunk-YYQAKIDJ.js.map +1 -0
- package/dist/{chunk-GF22HWS2.js → chunk-Z54EM5YZ.js} +4 -4
- package/dist/{chunk-64UDOIMI.js → chunk-ZLQ37WJX.js} +2 -2
- package/dist/{cli-BUGN3d6_.d.ts → cli-BHBswmUa.d.ts} +5 -5
- package/dist/cli.d.ts +16 -12
- package/dist/cli.js +138 -123
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +25 -23
- 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 +10 -8
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +24 -22
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +27 -25
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-provenance-check.js +4 -4
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/consolidation-undo.js +10 -7
- package/dist/consolidation-undo.js.map +1 -1
- package/dist/contradiction/index.d.ts +3 -2
- package/dist/converge-config.d.ts +2 -1
- package/dist/convergence-refresh.d.ts +4 -3
- package/dist/convergence-refresh.js +28 -26
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/backend.js +2 -2
- 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 +43 -41
- package/dist/day-summary.d.ts +2 -1
- package/dist/delinearize.d.ts +2 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer-wiring.js +2 -2
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/embedding-fallback.js +2 -2
- package/dist/enrichment/index.d.ts +2 -1
- package/dist/entity-retrieval-boundaries.js +1 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +25 -23
- package/dist/entity-schema.d.ts +2 -1
- package/dist/explicit-capture.d.ts +9 -8
- package/dist/explicit-capture.js +11 -9
- package/dist/external-wiki-access.d.ts +127 -0
- package/dist/external-wiki-access.js +187 -0
- package/dist/external-wiki-access.js.map +1 -0
- package/dist/external-wiki-cli.d.ts +13 -0
- package/dist/external-wiki-cli.js +10 -0
- package/dist/external-wiki-cli.js.map +1 -0
- package/dist/external-wiki-collection-registration.d.ts +39 -0
- package/dist/external-wiki-collection-registration.js +79 -0
- package/dist/external-wiki-collection-registration.js.map +1 -0
- package/dist/external-wiki-collection.d.ts +50 -0
- package/dist/external-wiki-collection.js +387 -0
- package/dist/external-wiki-collection.js.map +1 -0
- package/dist/external-wiki-config.d.ts +13 -0
- package/dist/external-wiki-config.js +13 -0
- package/dist/external-wiki-config.js.map +1 -0
- package/dist/external-wiki-guard.d.ts +11 -0
- package/dist/external-wiki-guard.js +18 -0
- package/dist/external-wiki-guard.js.map +1 -0
- package/dist/external-wiki-mcp-tools.d.ts +123 -0
- package/dist/external-wiki-mcp-tools.js +8 -0
- package/dist/external-wiki-mcp-tools.js.map +1 -0
- package/dist/external-wiki-search.d.ts +42 -0
- package/dist/external-wiki-search.js +11 -0
- package/dist/external-wiki-search.js.map +1 -0
- package/dist/external-wiki.d.ts +39 -0
- package/dist/external-wiki.js +14 -0
- package/dist/external-wiki.js.map +1 -0
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +2 -1
- package/dist/extraction-judge-telemetry.d.ts +2 -1
- package/dist/extraction-judge-training.d.ts +2 -1
- package/dist/extraction-judge.d.ts +2 -1
- package/dist/extraction-liveness.d.ts +2 -1
- package/dist/extraction-source-grounding-helpers.d.ts +5 -3
- package/dist/extraction-source-grounding-helpers.js +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +2 -1
- package/dist/extraction-source-grounding-rules.js +2 -2
- package/dist/extraction-source-grounding.d.ts +2 -1
- package/dist/extraction-source-grounding.js +5 -5
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +46 -43
- package/dist/fallback-llm.d.ts +2 -1
- package/dist/{first-start-migration-F2QJD66E.js → first-start-migration-ZSHEFEI3.js} +10 -12
- package/dist/{first-start-migration-F2QJD66E.js.map → first-start-migration-ZSHEFEI3.js.map} +1 -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-reinforcement.d.ts +2 -1
- package/dist/graph-snapshot.d.ts +2 -1
- package/dist/graph.d.ts +2 -1
- package/dist/harmonic-retrieval.js +2 -2
- package/dist/importance.d.ts +2 -1
- package/dist/importers/index.d.ts +2 -1
- package/dist/in-flight-reads.d.ts +2 -1
- package/dist/index.d.ts +443 -430
- package/dist/index.js +304 -269
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +7 -7
- 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.d.ts +2 -1
- package/dist/local-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +25 -23
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +25 -23
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +27 -25
- package/dist/{maintenance-LbuS2rUA.d.ts → maintenance-CoRikzIt.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +14 -10
- package/dist/mcp-read-only-tools.js +1 -1
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.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 +10 -0
- package/dist/memory-snapshot.js +8 -0
- package/dist/memory-snapshot.js.map +1 -0
- 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 +41 -39
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +18 -18
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +24 -22
- 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 +11 -9
- package/dist/offline-sync.d.ts +29 -3
- package/dist/offline-sync.js +6 -2
- package/dist/operator-doctor-corpus.d.ts +2 -1
- package/dist/operator-doctor-corpus.js +46 -44
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-doctor-replica.js +3 -3
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +60 -55
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +37 -33
- package/dist/{orchestrator-rHiWt32X.d.ts → orchestrator-BJeq7Pw1.d.ts} +14 -7
- package/dist/orchestrator.d.ts +9 -8
- package/dist/orchestrator.js +200 -186
- package/dist/page-versioning.js +3 -3
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-W_97O8BV.d.ts → pipeline-CNjY4wk3.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/policy-runtime.js +1 -1
- package/dist/proactive-contention.d.ts +2 -1
- package/dist/provenance.d.ts +2 -1
- package/dist/provenance.js +2 -2
- package/dist/{qmd-LWtMofAf.d.ts → qmd-C0UDZidt.d.ts} +9 -7
- package/dist/qmd-preflight.d.ts +5 -4
- package/dist/qmd-preflight.js +2 -2
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +4 -3
- package/dist/qmd.js +8 -8
- 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-planner-llm.d.ts +2 -1
- 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 +8 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +12 -2
- package/dist/reconcile/cursor.js +46 -7
- package/dist/reconcile/cursor.js.map +1 -1
- package/dist/reconcile/manifest.d.ts +9 -2
- package/dist/reconcile/manifest.js +15 -268
- package/dist/reconcile/manifest.js.map +1 -1
- package/dist/reconcile/plan.d.ts +4 -1
- package/dist/reconcile/plan.js +4 -4
- 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-divergence.js +2 -2
- package/dist/replica-peers-config.d.ts +2 -1
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resume-bundles.js +12 -10
- package/dist/retrieval-agents.d.ts +4 -3
- package/dist/retrieval-agents.js +2 -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/schemas.d.ts +54 -54
- package/dist/{scope-profiles-BiQKOE-p.d.ts → scope-profiles-BJzp2F5A.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/embed-helper.js +3 -3
- package/dist/search/factory.d.ts +4 -2
- package/dist/search/factory.js +20 -18
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +20 -20
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/lancedb-backend.js +4 -4
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.js +4 -4
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/orama-backend.js +4 -4
- package/dist/search/port.d.ts +18 -1
- package/dist/search/port.js +1 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/search/remote-backend.js +2 -2
- package/dist/secure-store/index.js +2 -2
- package/dist/{semantic-consolidation-dHYCyqgh.d.ts → semantic-consolidation-D4KAZO2G.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +26 -24
- package/dist/semantic-rule-promotion.js +24 -22
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +25 -23
- package/dist/{service-DJG3KCQ4.d.ts → service-DWC4tq7p.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 +10 -9
- package/dist/shared-context/manager.js +2 -2
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +43 -40
- package/dist/{storage-F9FVh-w9.d.ts → storage-DPGjB-8e.d.ts} +28 -13
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +26 -24
- package/dist/summarizer.d.ts +2 -1
- package/dist/summarizer.js +5 -5
- package/dist/summary-snapshot.d.ts +2 -1
- 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-migration.js +1 -1
- package/dist/tier-routing.d.ts +2 -1
- package/dist/tool-scoped-memory.d.ts +5 -1
- package/dist/tool-scoped-memory.js +3 -1
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transfer/capsule-import.js +4 -4
- package/dist/transfer/types.d.ts +66 -66
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-rEwubvim.d.ts → types-yX_FwERf.d.ts} +8 -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 +25 -23
- package/dist/write-envelope.d.ts +2 -1
- package/package.json +2 -2
- package/src/abort-error.ts +17 -0
- package/src/access-admin-ops-surface.ts +1 -0
- package/src/access-boundary.ts +1 -0
- package/src/access-coding-context-resolution.ts +42 -0
- package/src/access-extraction-force-flush.ts +38 -2
- package/src/access-http-lcm-compaction.ts +5 -2
- package/src/access-http-offline-stream.ts +80 -0
- package/src/access-http.test.ts +310 -3
- package/src/access-http.ts +84 -77
- package/src/access-mcp-output-schemas.ts +36 -0
- package/src/access-mcp.test.ts +95 -1
- package/src/access-mcp.ts +7 -9
- package/src/access-observe-helpers.ts +64 -22
- package/src/access-observe-write-surface.ts +8 -0
- package/src/access-offline-manifest.ts +54 -0
- package/src/access-operations-batch.ts +3 -3
- package/src/access-operations.ts +13 -7
- package/src/access-recall-concurrency.ts +3 -27
- package/src/access-recall-surface.ts +3 -0
- package/src/access-service-health.test.ts +32 -7
- package/src/access-service-namespace.test.ts +55 -0
- package/src/access-service-observe-idempotency.test.ts +34 -2
- package/src/access-service-observe-lcm-parity.test.ts +183 -23
- package/src/access-service-observe-scope.test.ts +160 -1
- package/src/access-service-offline-file-content.test.ts +345 -1
- package/src/access-service.ts +88 -62
- package/src/access-surface-catalog.ts +4 -0
- package/src/admin/admin-surfaces.ts +2 -0
- package/src/binary-lifecycle/pipeline.test.ts +106 -1
- package/src/binary-lifecycle/pipeline.ts +3 -0
- package/src/coding/git-context.test.ts +47 -0
- package/src/coding/git-context.ts +129 -27
- package/src/config.test.ts +24 -0
- package/src/config.ts +9 -12
- package/src/connector-provenance.test.ts +101 -0
- package/src/consolidation-undo.ts +3 -0
- package/src/convergence-refresh.ts +14 -2
- package/src/correction/correction-access-wiring.ts +9 -7
- package/src/correction/correction-executor.test.ts +206 -2
- package/src/correction/correction-executor.ts +29 -20
- package/src/correction/correction-planner.test.ts +36 -0
- package/src/correction/correction-planner.ts +9 -15
- package/src/correction/correction-service.ts +3 -1
- package/src/correction/correction-storage-integration.test.ts +77 -0
- package/src/correction/correction-surfaces.test.ts +41 -28
- package/src/correction/passive-capture.test.ts +59 -0
- package/src/correction/passive-capture.ts +4 -1
- package/src/entity-retrieval-boundaries.ts +17 -4
- package/src/entity-retrieval.ts +27 -6
- package/src/external-wiki-access.test.ts +65 -0
- package/src/external-wiki-access.ts +31 -0
- package/src/external-wiki-cli.ts +100 -0
- package/src/external-wiki-collection-registration.test.ts +163 -0
- package/src/external-wiki-collection-registration.ts +101 -0
- package/src/external-wiki-collection.test.ts +502 -0
- package/src/external-wiki-collection.ts +503 -0
- package/src/external-wiki-config.test.ts +135 -0
- package/src/external-wiki-config.ts +100 -0
- package/src/external-wiki-guard.ts +83 -0
- package/src/external-wiki-mcp-tools.ts +23 -0
- package/src/external-wiki-search.test.ts +367 -0
- package/src/external-wiki-search.ts +362 -0
- package/src/external-wiki.test.ts +240 -0
- package/src/external-wiki.ts +427 -0
- package/src/extraction-scope-source-agent.test.ts +21 -0
- package/src/extraction-source-grounding-helpers.ts +243 -53
- package/src/extraction-source-grounding-rules.ts +133 -39
- package/src/extraction-source-grounding.test.ts +363 -33
- package/src/extraction-timeout.test.ts +1 -0
- package/src/extraction-watermark.test.ts +150 -7
- package/src/extraction.ts +8 -1
- package/src/index.ts +9 -5
- package/src/maintenance/first-start-migration.ts +11 -11
- package/src/mcp-read-only-tools.ts +1 -0
- package/src/memory-snapshot.ts +15 -0
- package/src/offline-sync.test.ts +194 -0
- package/src/offline-sync.ts +217 -13
- package/src/orchestration/external-wiki-recall-guard.test.ts +94 -0
- package/src/orchestration/extraction-persist.ts +19 -2
- package/src/orchestration/extraction-run-helpers.ts +37 -19
- package/src/orchestration/extraction-run.test.ts +171 -2
- package/src/orchestration/extraction-run.ts +11 -13
- package/src/orchestration/extraction-watermark.ts +106 -17
- package/src/orchestration/generic-recall-paths.ts +14 -0
- package/src/orchestration/orchestrator-helpers.ts +2 -0
- package/src/orchestration/orchestrator-init.ts +9 -0
- package/src/orchestration/recall-internal-deps.ts +6 -0
- package/src/orchestration/recall-internal.ts +154 -33
- package/src/orchestration/recall-rerank-coordinator.ts +60 -25
- package/src/orchestration/recall-search-pipeline.test.ts +75 -1
- package/src/orchestration/recall-search-pipeline.ts +50 -10
- package/src/orchestrator-convergence-refresh.test.ts +36 -2
- package/src/orchestrator.ts +13 -3
- package/src/page-versioning.ts +5 -19
- package/src/procedural/procedure-recall.ts +5 -1
- package/src/provenance-surfaces.test.ts +3 -0
- package/src/qmd-client.test.ts +78 -17
- package/src/qmd.test.ts +24 -0
- package/src/qmd.ts +224 -315
- package/src/recall-explain-renderer.ts +3 -0
- package/src/recall-rerank-coordinator.test.ts +61 -0
- package/src/recall-xray-renderer.test.ts +6 -0
- package/src/recall-xray.test.ts +88 -1
- package/src/recall-xray.ts +15 -0
- package/src/reconcile/cursor.test.ts +48 -0
- package/src/reconcile/cursor.ts +58 -11
- package/src/reconcile/manifest.test.ts +4 -0
- package/src/reconcile/manifest.ts +41 -51
- package/src/reconcile/plan.test.ts +4 -0
- package/src/reconcile/plan.ts +28 -16
- package/src/search/factory.ts +6 -6
- package/src/search/port.ts +25 -9
- package/src/secure-store/secure-fs.ts +20 -12
- package/src/secure-store/secure-store.test.ts +41 -2
- package/src/spaces/index.test.ts +61 -2
- package/src/spaces/index.ts +44 -18
- package/src/storage/entity-alias-config.ts +97 -0
- package/src/storage/entity-canonical-id-lock.ts +53 -23
- package/src/storage/entity-canonical-id-migration.ts +53 -22
- package/src/storage/entity-canonical-id-references.ts +3 -0
- package/src/storage/entity-id-safety.ts +7 -0
- package/src/storage/entity-store.ts +6 -2
- package/src/storage/memory-frontmatter-metadata.ts +4 -9
- package/src/storage/memory-migration-serialization.ts +10 -15
- package/src/storage/tombstone-blocked-capture-mutation.ts +52 -64
- package/src/storage/tombstone-blocked-capture-sync.ts +244 -199
- package/src/storage-contract/cache-coherence.test.ts +99 -0
- package/src/storage-deletion-revisions.test.ts +91 -0
- package/src/storage-fact-hash-index-defer.test.ts +460 -170
- package/src/storage.ts +572 -284
- package/src/testing/subjects/first-start-tier-migration.test.ts +75 -0
- package/src/tier-migration.ts +10 -12
- package/src/tool-scoped-memory.ts +10 -0
- package/src/transfer/capsule-import.ts +13 -0
- package/src/transfer/capsule-merge.ts +13 -0
- package/src/trust-score-recall-paths.test.ts +75 -1
- package/src/types.ts +7 -3
- package/dist/capsule-merge-IDWJPCWK.js.map +0 -1
- package/dist/chunk-3CE77VAP.js.map +0 -1
- package/dist/chunk-3TBLDMJA.js.map +0 -1
- package/dist/chunk-4J7G5SY4.js.map +0 -1
- package/dist/chunk-57QKLRBV.js.map +0 -1
- package/dist/chunk-5TFP4CUL.js.map +0 -1
- package/dist/chunk-7XC2HX75.js.map +0 -1
- package/dist/chunk-A5OJCXZL.js.map +0 -1
- package/dist/chunk-BUE5E2HL.js.map +0 -1
- package/dist/chunk-CJ2ZR7UA.js.map +0 -1
- package/dist/chunk-CUM2BBPN.js.map +0 -1
- package/dist/chunk-D3J5SLQK.js.map +0 -1
- package/dist/chunk-DL7ZD3JH.js.map +0 -1
- package/dist/chunk-DLVPUX7U.js.map +0 -1
- package/dist/chunk-E6PNLPGJ.js.map +0 -1
- package/dist/chunk-ECK75GDJ.js.map +0 -1
- package/dist/chunk-HREE4JHI.js.map +0 -1
- package/dist/chunk-HZFHQ4AQ.js.map +0 -1
- package/dist/chunk-IKKWIPYN.js.map +0 -1
- package/dist/chunk-J7VGGECD.js.map +0 -1
- package/dist/chunk-N5Z4EVOR.js.map +0 -1
- package/dist/chunk-NVRYW264.js.map +0 -1
- package/dist/chunk-P2BM76KT.js.map +0 -1
- package/dist/chunk-PVGDJXVK.js +0 -21
- package/dist/chunk-QJAQNXWI.js.map +0 -1
- package/dist/chunk-RN7DY3FC.js.map +0 -1
- package/dist/chunk-RVLJEII5.js.map +0 -1
- package/dist/chunk-S2NCTZGJ.js.map +0 -1
- package/dist/chunk-TDHTVMPG.js.map +0 -1
- package/dist/chunk-UYLMNVY6.js.map +0 -1
- package/dist/chunk-VCD4PSK2.js.map +0 -1
- package/dist/chunk-VNA7W7QF.js.map +0 -1
- package/dist/chunk-VOUOLGIP.js.map +0 -1
- package/dist/chunk-VWAXN2BN.js.map +0 -1
- package/dist/chunk-WOCNN776.js.map +0 -1
- package/dist/chunk-XYTOI63Z.js.map +0 -1
- package/dist/chunk-YV32N67O.js.map +0 -1
- /package/dist/{auto-sync-5OE5QOZB.js.map → auto-sync-UPTUVE4X.js.map} +0 -0
- /package/dist/{chunk-E5UK4VPE.js.map → chunk-2FSTB6BJ.js.map} +0 -0
- /package/dist/{chunk-5ZE7QHTK.js.map → chunk-2X2T2UVE.js.map} +0 -0
- /package/dist/{chunk-P4DRWEYC.js.map → chunk-3COYXTGM.js.map} +0 -0
- /package/dist/{chunk-5IVLTFOV.js.map → chunk-44N6ESJ4.js.map} +0 -0
- /package/dist/{chunk-HO3QBJEY.js.map → chunk-5546W5SI.js.map} +0 -0
- /package/dist/{chunk-AAIUERNB.js.map → chunk-5QJQHBLE.js.map} +0 -0
- /package/dist/{chunk-6CZPDBJS.js.map → chunk-5U7ID3EZ.js.map} +0 -0
- /package/dist/{chunk-DNWXFTLD.js.map → chunk-A4IJCD2Z.js.map} +0 -0
- /package/dist/{chunk-PKNLM44P.js.map → chunk-AC5OWJLV.js.map} +0 -0
- /package/dist/{chunk-LZ4LDKHZ.js.map → chunk-AMAUBUKY.js.map} +0 -0
- /package/dist/{chunk-S5SLVSVY.js.map → chunk-BQIFZ2MP.js.map} +0 -0
- /package/dist/{chunk-Q6IP2ARR.js.map → chunk-CSOYVTRX.js.map} +0 -0
- /package/dist/{chunk-XOQSEF7X.js.map → chunk-CVILPI77.js.map} +0 -0
- /package/dist/{chunk-4LMA77JH.js.map → chunk-E5XQIWAL.js.map} +0 -0
- /package/dist/{chunk-WUNIWKY4.js.map → chunk-ELIL2A37.js.map} +0 -0
- /package/dist/{chunk-OQ5PRDDS.js.map → chunk-ERZ2R42X.js.map} +0 -0
- /package/dist/{chunk-U7GW7NE7.js.map → chunk-FIK3CQNA.js.map} +0 -0
- /package/dist/{chunk-33PLLLL7.js.map → chunk-GFCVUY6G.js.map} +0 -0
- /package/dist/{chunk-VUPTKTDV.js.map → chunk-GUAL4PQH.js.map} +0 -0
- /package/dist/{chunk-CINZGPSJ.js.map → chunk-GUMZC2BO.js.map} +0 -0
- /package/dist/{chunk-H24WNPA2.js.map → chunk-GWFSVJ4P.js.map} +0 -0
- /package/dist/{chunk-TSH56VPU.js.map → chunk-HAYSYUAB.js.map} +0 -0
- /package/dist/{chunk-PDLBLTOK.js.map → chunk-HC3PBX23.js.map} +0 -0
- /package/dist/{chunk-KXB4VXHY.js.map → chunk-JIYDRBVZ.js.map} +0 -0
- /package/dist/{chunk-HLPD7B7P.js.map → chunk-JZH4LWHB.js.map} +0 -0
- /package/dist/{chunk-AV5ZEH4M.js.map → chunk-KVJRXN2E.js.map} +0 -0
- /package/dist/{chunk-WFTIGIIS.js.map → chunk-L6CQ7WIW.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
- /package/dist/{chunk-EJUEXZHX.js.map → chunk-LLJMAULE.js.map} +0 -0
- /package/dist/{chunk-QN25OCUF.js.map → chunk-LPYDOLSM.js.map} +0 -0
- /package/dist/{chunk-AS7YMSL6.js.map → chunk-M23RF3LJ.js.map} +0 -0
- /package/dist/{chunk-OAEQLRCY.js.map → chunk-MO4HSXHZ.js.map} +0 -0
- /package/dist/{chunk-3F2LKUMU.js.map → chunk-NIS256NW.js.map} +0 -0
- /package/dist/{chunk-YIAA2X3D.js.map → chunk-NK5RGJ65.js.map} +0 -0
- /package/dist/{chunk-7TWUCYER.js.map → chunk-PNRA7FAD.js.map} +0 -0
- /package/dist/{chunk-5I4M26Q7.js.map → chunk-QBSFOKY6.js.map} +0 -0
- /package/dist/{chunk-E53DSZEN.js.map → chunk-QR6G5KF4.js.map} +0 -0
- /package/dist/{chunk-4UH4BTGK.js.map → chunk-QVJPH7SH.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-RKNJBZ55.js.map} +0 -0
- /package/dist/{chunk-WDISJRMG.js.map → chunk-RMMVQQA6.js.map} +0 -0
- /package/dist/{chunk-JVLCVFQ4.js.map → chunk-RNHVVMFN.js.map} +0 -0
- /package/dist/{chunk-5SM35XZR.js.map → chunk-S5NZBKKQ.js.map} +0 -0
- /package/dist/{chunk-WIPEXG6R.js.map → chunk-SXIMQLGV.js.map} +0 -0
- /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
- /package/dist/{chunk-4B77XSG5.js.map → chunk-UV72DEZD.js.map} +0 -0
- /package/dist/{chunk-BJKPPZ6Z.js.map → chunk-UW66OZTD.js.map} +0 -0
- /package/dist/{chunk-S2BBISHU.js.map → chunk-VANZKHTN.js.map} +0 -0
- /package/dist/{chunk-3Y224NYC.js.map → chunk-VYISFWVX.js.map} +0 -0
- /package/dist/{chunk-JE7EK33X.js.map → chunk-W2V7UESE.js.map} +0 -0
- /package/dist/{chunk-TIHMZFIV.js.map → chunk-W3IC7QOY.js.map} +0 -0
- /package/dist/{chunk-NRV4Y3PM.js.map → chunk-W4FBGYGK.js.map} +0 -0
- /package/dist/{chunk-MU7ZHSZE.js.map → chunk-WZFAPHIK.js.map} +0 -0
- /package/dist/{chunk-T2TTP3KU.js.map → chunk-X4IDNPOS.js.map} +0 -0
- /package/dist/{chunk-UVIKWC7M.js.map → chunk-XAGYS7X6.js.map} +0 -0
- /package/dist/{chunk-BLAKS3CP.js.map → chunk-XL3TATMJ.js.map} +0 -0
- /package/dist/{chunk-W4XJFLAL.js.map → chunk-XPRJSHNI.js.map} +0 -0
- /package/dist/{chunk-E6EE5B67.js.map → chunk-YK6BDDHP.js.map} +0 -0
- /package/dist/{chunk-ES36HTSC.js.map → chunk-YLHM5BQQ.js.map} +0 -0
- /package/dist/{chunk-GF22HWS2.js.map → chunk-Z54EM5YZ.js.map} +0 -0
- /package/dist/{chunk-64UDOIMI.js.map → chunk-ZLQ37WJX.js.map} +0 -0
package/src/access-http.ts
CHANGED
|
@@ -18,6 +18,10 @@ import {
|
|
|
18
18
|
type EngramAccessWriteResponse,
|
|
19
19
|
} from "./access-service.js";
|
|
20
20
|
import { maybeHandleLifecycleFlush, type LifecycleFlushHttpDeps } from "./access-http-lifecycle-flush.js";
|
|
21
|
+
import {
|
|
22
|
+
respondOfflineManifestStream,
|
|
23
|
+
respondOfflineSnapshotStream,
|
|
24
|
+
} from "./access-http-offline-stream.js";
|
|
21
25
|
import { nonEmptyQueryParam, optionalQueryString, positiveIntQueryParam } from "./access-http-query.js";
|
|
22
26
|
import { CorrectionContractError } from "./correction/correction-contract.js";
|
|
23
27
|
import { WearablesInputError } from "./wearables/errors.js"; import { respondMeetingsList, respondMeetingsGet, respondMeetingsBuild } from "./meetings/http-glue.js";
|
|
@@ -42,7 +46,7 @@ import { projectTagProjectId } from "./coding/coding-namespace.js";
|
|
|
42
46
|
import { getOperation, type OperationName } from "./access-boundary.js";
|
|
43
47
|
import { authorizationProbeNamespaces, probeOperationAuthorization } from "./access-authorization-probe.js";
|
|
44
48
|
import { resolveQueryNamespaceWritablePreflight } from "./access-namespace-preflight.js";
|
|
45
|
-
import {
|
|
49
|
+
import { respondAccessCapabilitiesHttp } from "./access-http-lcm-compaction.js";
|
|
46
50
|
import {
|
|
47
51
|
assertOperationAllowed,
|
|
48
52
|
capabilityAllowsOp,
|
|
@@ -898,7 +902,7 @@ export class EngramAccessHttpServer {
|
|
|
898
902
|
});
|
|
899
903
|
return;
|
|
900
904
|
}
|
|
901
|
-
if (req.method === "GET" && pathname === "/engram/v1/capabilities") return
|
|
905
|
+
if (req.method === "GET" && pathname === "/engram/v1/capabilities") return respondAccessCapabilitiesHttp(res);
|
|
902
906
|
if (req.method === "GET" && pathname === "/engram/v1/authorization") {
|
|
903
907
|
res.setHeader("cache-control", "no-store");
|
|
904
908
|
const probe = probeOperationAuthorization(tokenCapabilityStore.getStore(), parsed.searchParams.getAll("op"));
|
|
@@ -910,11 +914,6 @@ export class EngramAccessHttpServer {
|
|
|
910
914
|
}
|
|
911
915
|
|
|
912
916
|
if (req.method === "GET" && pathname === "/engram/v1/adapters") {
|
|
913
|
-
// Issue #1850 round 5 (finding 1): adapter metadata is served after
|
|
914
|
-
// auth but was NOT op-gated, so a deny-all or narrow-ops token reached
|
|
915
|
-
// it. enforceTokenOp fail-closes it under the per-token ops allow-list;
|
|
916
|
-
// no-op for unrestricted/legacy tokens. There is no namespace axis —
|
|
917
|
-
// adapter metadata is not tenant-scoped.
|
|
918
917
|
this.enforceTokenOp("adapters_status"); // boundary dispatch (issue #1850)
|
|
919
918
|
const identity = this.resolveAdapterIdentity(req);
|
|
920
919
|
this.respondJson(res, 200, {
|
|
@@ -958,6 +957,21 @@ export class EngramAccessHttpServer {
|
|
|
958
957
|
}
|
|
959
958
|
return;
|
|
960
959
|
}
|
|
960
|
+
if (
|
|
961
|
+
req.method === "POST" &&
|
|
962
|
+
(pathname === "/engram/v1/external-wikis/search" ||
|
|
963
|
+
pathname === "/remnic/v1/external-wikis/search")
|
|
964
|
+
) {
|
|
965
|
+
this.enforceTokenOp("external_wiki_search");
|
|
966
|
+
const operation = getOperation("external_wiki_search");
|
|
967
|
+
if (!operation) throw new EngramAccessInputError("external_wiki_search operation is not registered");
|
|
968
|
+
const output = await operation.run(await this.readJsonBody(req), { service: this.service });
|
|
969
|
+
if (!output || typeof output !== "object" || !("result" in output)) {
|
|
970
|
+
throw new Error("external_wiki_search returned an invalid operation result");
|
|
971
|
+
}
|
|
972
|
+
this.respondJson(res, 200, output.result);
|
|
973
|
+
return;
|
|
974
|
+
}
|
|
961
975
|
|
|
962
976
|
if (req.method === "POST" && pathname === "/engram/v1/recall") {
|
|
963
977
|
this.enforceTokenOp("recall"); // boundary dispatch (issue #1525)
|
|
@@ -1055,6 +1069,7 @@ export class EngramAccessHttpServer {
|
|
|
1055
1069
|
query: body.query ?? "",
|
|
1056
1070
|
sessionKey: body.sessionKey,
|
|
1057
1071
|
authenticatedPrincipal: this.resolveRequestPrincipal(req),
|
|
1072
|
+
sourceConnector: this.resolveConnector(req),
|
|
1058
1073
|
idempotencyKey: body.idempotencyKey,
|
|
1059
1074
|
namespace: this.resolveNamespace(req, body.namespace),
|
|
1060
1075
|
topK: body.topK,
|
|
@@ -1078,10 +1093,6 @@ export class EngramAccessHttpServer {
|
|
|
1078
1093
|
return;
|
|
1079
1094
|
}
|
|
1080
1095
|
|
|
1081
|
-
// Attach / clear coding-agent context for a session (issue #569 PR 5).
|
|
1082
|
-
// Mirrors `setCodingContext` on the access service. Connectors call this
|
|
1083
|
-
// at session start after resolving a git context for the cwd; `remnic
|
|
1084
|
-
// doctor` (PR 8) surfaces the attached context.
|
|
1085
1096
|
if (req.method === "POST" && pathname === "/engram/v1/coding-context") {
|
|
1086
1097
|
this.enforceTokenOp("set_coding_context"); // boundary dispatch (issue #1525)
|
|
1087
1098
|
const body = await this.readValidatedBody(req, "setCodingContext");
|
|
@@ -1142,6 +1153,20 @@ export class EngramAccessHttpServer {
|
|
|
1142
1153
|
return;
|
|
1143
1154
|
}
|
|
1144
1155
|
|
|
1156
|
+
if (
|
|
1157
|
+
req.method === "GET" &&
|
|
1158
|
+
(pathname === "/engram/v1/offline-sync/capabilities" ||
|
|
1159
|
+
pathname === "/remnic/v1/offline-sync/capabilities")
|
|
1160
|
+
) {
|
|
1161
|
+
this.enforceTokenOp("offline_sync_snapshot");
|
|
1162
|
+
this.respondJson(res, 200, {
|
|
1163
|
+
version: 1,
|
|
1164
|
+
convergenceFinalization: true,
|
|
1165
|
+
manifestStream: true,
|
|
1166
|
+
});
|
|
1167
|
+
return;
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1145
1170
|
if (
|
|
1146
1171
|
req.method === "GET" &&
|
|
1147
1172
|
(pathname === "/engram/v1/offline-sync/snapshot" || pathname === "/remnic/v1/offline-sync/snapshot")
|
|
@@ -1215,10 +1240,44 @@ export class EngramAccessHttpServer {
|
|
|
1215
1240
|
includeContent: false,
|
|
1216
1241
|
signal: this.createRequestAbortSignal(req, res),
|
|
1217
1242
|
});
|
|
1218
|
-
await
|
|
1243
|
+
await respondOfflineSnapshotStream(res, result, correlationIdStore.getStore());
|
|
1244
|
+
return;
|
|
1245
|
+
}
|
|
1246
|
+
if (
|
|
1247
|
+
req.method === "GET" &&
|
|
1248
|
+
(pathname === "/engram/v1/offline-sync/manifest-stream" ||
|
|
1249
|
+
pathname === "/remnic/v1/offline-sync/manifest-stream")
|
|
1250
|
+
) {
|
|
1251
|
+
this.enforceTokenOp("offline_sync_snapshot_stream");
|
|
1252
|
+
const includeTranscriptsRaw = parsed.searchParams.get("include_transcripts");
|
|
1253
|
+
const includeContentRaw = parsed.searchParams.get("content");
|
|
1254
|
+
if (
|
|
1255
|
+
includeTranscriptsRaw !== null &&
|
|
1256
|
+
includeTranscriptsRaw !== "true" &&
|
|
1257
|
+
includeTranscriptsRaw !== "false"
|
|
1258
|
+
) {
|
|
1259
|
+
throw new EngramAccessInputError(
|
|
1260
|
+
`include_transcripts must be one of: true, false (got: ${includeTranscriptsRaw})`,
|
|
1261
|
+
);
|
|
1262
|
+
}
|
|
1263
|
+
if (includeContentRaw !== null && includeContentRaw !== "false") {
|
|
1264
|
+
throw new EngramAccessInputError("manifest-stream content must be false");
|
|
1265
|
+
}
|
|
1266
|
+
const namespaceParam = parsed.searchParams.get("namespace");
|
|
1267
|
+
const result = await this.service.offlineSyncManifestStream({
|
|
1268
|
+
namespace: this.resolveNamespace(
|
|
1269
|
+
req,
|
|
1270
|
+
namespaceParam && namespaceParam.length > 0 ? namespaceParam : undefined,
|
|
1271
|
+
),
|
|
1272
|
+
principal: this.resolveRequestPrincipal(req),
|
|
1273
|
+
includeTranscripts: includeTranscriptsRaw !== "false",
|
|
1274
|
+
signal: this.createRequestAbortSignal(req, res),
|
|
1275
|
+
});
|
|
1276
|
+
await respondOfflineManifestStream(res, result, correlationIdStore.getStore());
|
|
1219
1277
|
return;
|
|
1220
1278
|
}
|
|
1221
1279
|
|
|
1280
|
+
|
|
1222
1281
|
if (
|
|
1223
1282
|
req.method === "POST" &&
|
|
1224
1283
|
(pathname === "/engram/v1/offline-sync/snapshot" || pathname === "/remnic/v1/offline-sync/snapshot")
|
|
@@ -1323,6 +1382,7 @@ export class EngramAccessHttpServer {
|
|
|
1323
1382
|
return;
|
|
1324
1383
|
}
|
|
1325
1384
|
|
|
1385
|
+
|
|
1326
1386
|
if (
|
|
1327
1387
|
req.method === "POST" &&
|
|
1328
1388
|
(
|
|
@@ -1330,7 +1390,8 @@ export class EngramAccessHttpServer {
|
|
|
1330
1390
|
pathname === "/remnic/v1/offline-sync/convergence-complete"
|
|
1331
1391
|
)
|
|
1332
1392
|
) {
|
|
1333
|
-
|
|
1393
|
+
void getOperation("offline_sync_apply_file_content");
|
|
1394
|
+
this.enforceTokenAnyOf(["offline_sync_apply_file_content", "offline_sync_apply"]);
|
|
1334
1395
|
const namespaceParams = parsed.searchParams.getAll("namespace").filter(Boolean);
|
|
1335
1396
|
const requestedNamespaces: Array<string | undefined> =
|
|
1336
1397
|
namespaceParams.length > 0 ? namespaceParams : [undefined];
|
|
@@ -1386,9 +1447,6 @@ export class EngramAccessHttpServer {
|
|
|
1386
1447
|
return;
|
|
1387
1448
|
}
|
|
1388
1449
|
|
|
1389
|
-
// Tier-explain (issue #518): structured per-result annotation from
|
|
1390
|
-
// the direct-answer retrieval tier. Orthogonal to /recall/explain
|
|
1391
|
-
// above, which returns a graph-path explanation document.
|
|
1392
1450
|
if (req.method === "GET" && pathname === "/engram/v1/recall/tier-explain") {
|
|
1393
1451
|
this.enforceTokenOp("recall_tier_explain"); // boundary dispatch (issue #1525)
|
|
1394
1452
|
const sessionParam = parsed.searchParams.get("session");
|
|
@@ -1486,6 +1544,7 @@ export class EngramAccessHttpServer {
|
|
|
1486
1544
|
namespace,
|
|
1487
1545
|
budget,
|
|
1488
1546
|
authenticatedPrincipal: this.resolveRequestPrincipal(req),
|
|
1547
|
+
sourceConnector: this.resolveConnector(req),
|
|
1489
1548
|
...(disclosure !== undefined ? { disclosure } : {}),
|
|
1490
1549
|
});
|
|
1491
1550
|
} catch (err) {
|
|
@@ -1526,11 +1585,6 @@ export class EngramAccessHttpServer {
|
|
|
1526
1585
|
return;
|
|
1527
1586
|
}
|
|
1528
1587
|
|
|
1529
|
-
// -- Wearables (Limitless / Bee / Omi transcript ingestion). All
|
|
1530
|
-
// behavior + validation lives in WearablesService; these routes
|
|
1531
|
-
// translate transport shape only. Service validation errors map
|
|
1532
|
-
// to 400 via respondWearablesError; backend faults bubble to the
|
|
1533
|
-
// global 500 handler.
|
|
1534
1588
|
if (
|
|
1535
1589
|
req.method === "GET" &&
|
|
1536
1590
|
(pathname === "/engram/v1/wearables/status" || pathname === "/remnic/v1/wearables/status")
|
|
@@ -3370,62 +3424,6 @@ export class EngramAccessHttpServer {
|
|
|
3370
3424
|
res.end(body);
|
|
3371
3425
|
}
|
|
3372
3426
|
|
|
3373
|
-
private async respondOfflineSnapshotStream(
|
|
3374
|
-
res: ServerResponse,
|
|
3375
|
-
snapshot: Awaited<ReturnType<EngramAccessService["offlineSyncSnapshotStream"]>>,
|
|
3376
|
-
): Promise<void> {
|
|
3377
|
-
res.statusCode = 200;
|
|
3378
|
-
res.setHeader("content-type", "application/x-ndjson; charset=utf-8");
|
|
3379
|
-
res.setHeader("cache-control", "no-store");
|
|
3380
|
-
const cid = correlationIdStore.getStore();
|
|
3381
|
-
if (cid) {
|
|
3382
|
-
res.setHeader("x-request-id", cid);
|
|
3383
|
-
}
|
|
3384
|
-
const waitForDrainOrClose = async (): Promise<boolean> => new Promise((resolve, reject) => {
|
|
3385
|
-
const cleanup = () => {
|
|
3386
|
-
res.off("drain", onDrain);
|
|
3387
|
-
res.off("close", onClose);
|
|
3388
|
-
res.off("error", onError);
|
|
3389
|
-
};
|
|
3390
|
-
const onDrain = () => {
|
|
3391
|
-
cleanup();
|
|
3392
|
-
resolve(true);
|
|
3393
|
-
};
|
|
3394
|
-
const onClose = () => {
|
|
3395
|
-
cleanup();
|
|
3396
|
-
resolve(false);
|
|
3397
|
-
};
|
|
3398
|
-
const onError = (error: Error) => {
|
|
3399
|
-
cleanup();
|
|
3400
|
-
reject(error);
|
|
3401
|
-
};
|
|
3402
|
-
res.once("drain", onDrain);
|
|
3403
|
-
res.once("close", onClose);
|
|
3404
|
-
res.once("error", onError);
|
|
3405
|
-
});
|
|
3406
|
-
const writeLine = async (payload: unknown): Promise<boolean> => {
|
|
3407
|
-
if (res.destroyed || res.writableEnded) return false;
|
|
3408
|
-
if (res.write(`${JSON.stringify(payload)}\n`)) return true;
|
|
3409
|
-
if (res.destroyed || res.writableEnded) return false;
|
|
3410
|
-
return waitForDrainOrClose();
|
|
3411
|
-
};
|
|
3412
|
-
if (!await writeLine({
|
|
3413
|
-
type: "snapshot",
|
|
3414
|
-
namespace: snapshot.namespace,
|
|
3415
|
-
format: snapshot.format,
|
|
3416
|
-
schemaVersion: snapshot.schemaVersion,
|
|
3417
|
-
createdAt: snapshot.createdAt,
|
|
3418
|
-
sourceId: snapshot.sourceId,
|
|
3419
|
-
includeTranscripts: snapshot.includeTranscripts,
|
|
3420
|
-
})) return;
|
|
3421
|
-
for await (const file of snapshot.files) {
|
|
3422
|
-
if (!await writeLine({ type: "file", file })) return;
|
|
3423
|
-
}
|
|
3424
|
-
if (!res.destroyed && !res.writableEnded) {
|
|
3425
|
-
res.end();
|
|
3426
|
-
}
|
|
3427
|
-
}
|
|
3428
|
-
|
|
3429
3427
|
private respondBinary(
|
|
3430
3428
|
res: ServerResponse,
|
|
3431
3429
|
status: number,
|
|
@@ -3856,6 +3854,15 @@ export class EngramAccessHttpServer {
|
|
|
3856
3854
|
void getOperation(op); // preserve the registration side-effect assertion
|
|
3857
3855
|
assertOperationAllowed(tokenCapabilityStore.getStore(), op);
|
|
3858
3856
|
}
|
|
3857
|
+
|
|
3858
|
+
private enforceTokenAnyOf(ops: readonly OperationName[]): void {
|
|
3859
|
+
for (const op of ops) void getOperation(op);
|
|
3860
|
+
const capabilities = tokenCapabilityStore.getStore();
|
|
3861
|
+
if (ops.some((op) => capabilityAllowsOp(capabilities, op))) return;
|
|
3862
|
+
throw new EngramAccessForbiddenError(
|
|
3863
|
+
`token is not permitted to call any required operation: ${ops.join(", ")}`,
|
|
3864
|
+
);
|
|
3865
|
+
}
|
|
3859
3866
|
|
|
3860
3867
|
/**
|
|
3861
3868
|
* Operator/admin routes are unrestricted-only surfaces: a scoped
|
|
@@ -260,6 +260,42 @@ const TOOL_OUTPUT_SCHEMAS: Readonly<Record<string, Record<string, unknown>>> = {
|
|
|
260
260
|
guidelineVersion: { type: ["number", "null"] } as const,
|
|
261
261
|
}),
|
|
262
262
|
memory_search: objectSchema({ query: T_STRING, results: T_ARRAY, count: T_NUMBER }),
|
|
263
|
+
external_wiki_search: objectSchema({
|
|
264
|
+
query: T_STRING,
|
|
265
|
+
hits: {
|
|
266
|
+
type: "array",
|
|
267
|
+
items: {
|
|
268
|
+
type: "object",
|
|
269
|
+
properties: {
|
|
270
|
+
wikiId: T_STRING,
|
|
271
|
+
title: T_STRING,
|
|
272
|
+
path: T_STRING,
|
|
273
|
+
snippet: T_STRING,
|
|
274
|
+
score: T_NUMBER,
|
|
275
|
+
rank: T_NUMBER,
|
|
276
|
+
citations: {
|
|
277
|
+
type: "array",
|
|
278
|
+
items: {
|
|
279
|
+
type: "object",
|
|
280
|
+
properties: {
|
|
281
|
+
path: T_STRING,
|
|
282
|
+
lineStart: T_NUMBER,
|
|
283
|
+
lineEnd: T_NUMBER,
|
|
284
|
+
note: T_STRING,
|
|
285
|
+
},
|
|
286
|
+
required: ["path", "lineStart", "lineEnd", "note"],
|
|
287
|
+
additionalProperties: false,
|
|
288
|
+
},
|
|
289
|
+
},
|
|
290
|
+
indexBlurb: T_STRING,
|
|
291
|
+
},
|
|
292
|
+
required: ["wikiId", "title", "path", "snippet", "score", "rank", "citations"],
|
|
293
|
+
additionalProperties: false,
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
count: T_NUMBER,
|
|
297
|
+
degradedWikiIds: T_ARRAY,
|
|
298
|
+
}, ["query", "hits", "count", "degradedWikiIds"]),
|
|
263
299
|
memory_profile: objectSchema({ profile: T_STRING }),
|
|
264
300
|
memory_entities_list: objectSchema({ entities: T_ARRAY, count: T_NUMBER }),
|
|
265
301
|
memory_questions: objectSchema({ questions: T_ARRAY, count: T_NUMBER }),
|
package/src/access-mcp.test.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import assert from "node:assert/strict";
|
|
10
|
-
import { mkdtemp, rm } from "node:fs/promises";
|
|
10
|
+
import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
11
11
|
import os from "node:os";
|
|
12
12
|
import path from "node:path";
|
|
13
13
|
import test from "node:test";
|
|
@@ -1283,3 +1283,97 @@ test("MCP graph_edge_decay_run: unrestricted and legacy tokens reach the handler
|
|
|
1283
1283
|
await rm(dir, { recursive: true, force: true });
|
|
1284
1284
|
}
|
|
1285
1285
|
});
|
|
1286
|
+
|
|
1287
|
+
function readMcpResult(response: unknown): Record<string, unknown> {
|
|
1288
|
+
assert.ok(response && typeof response === "object" && "result" in response);
|
|
1289
|
+
const result = response.result;
|
|
1290
|
+
assert.ok(result && typeof result === "object");
|
|
1291
|
+
return Object.fromEntries(Object.entries(result));
|
|
1292
|
+
}
|
|
1293
|
+
|
|
1294
|
+
test("MCP external_wiki_search exposes aliases and dispatches the stable result", async () => {
|
|
1295
|
+
const rootDir = await mkdtemp(path.join(os.tmpdir(), "remnic-mcp-external-wiki-"));
|
|
1296
|
+
await mkdir(path.join(rootDir, "wiki"), { recursive: true });
|
|
1297
|
+
await writeFile(
|
|
1298
|
+
path.join(rootDir, "INDEX.md"),
|
|
1299
|
+
"- [[wiki/retrieval|Retrieval Architecture]] - cited hybrid retrieval\n",
|
|
1300
|
+
"utf8",
|
|
1301
|
+
);
|
|
1302
|
+
await writeFile(
|
|
1303
|
+
path.join(rootDir, "wiki", "retrieval.md"),
|
|
1304
|
+
"# Retrieval Architecture\n\nHybrid retrieval keeps cited sources.\n",
|
|
1305
|
+
"utf8",
|
|
1306
|
+
);
|
|
1307
|
+
try {
|
|
1308
|
+
const service = {
|
|
1309
|
+
...makeMockService(),
|
|
1310
|
+
configRef: {
|
|
1311
|
+
externalWikis: [{
|
|
1312
|
+
id: "reading",
|
|
1313
|
+
rootDir,
|
|
1314
|
+
enabled: true,
|
|
1315
|
+
pagesDir: "wiki",
|
|
1316
|
+
indexFile: "INDEX.md",
|
|
1317
|
+
indexInQmd: false,
|
|
1318
|
+
includeInDefaultRecall: false,
|
|
1319
|
+
}],
|
|
1320
|
+
},
|
|
1321
|
+
} as unknown as EngramAccessService;
|
|
1322
|
+
const server = new EngramMcpServer(service);
|
|
1323
|
+
|
|
1324
|
+
const listed = await server.handleRequest({
|
|
1325
|
+
jsonrpc: "2.0",
|
|
1326
|
+
id: 1,
|
|
1327
|
+
method: "tools/list",
|
|
1328
|
+
params: {},
|
|
1329
|
+
});
|
|
1330
|
+
const listedResult = readMcpResult(listed);
|
|
1331
|
+
assert.ok(Array.isArray(listedResult.tools));
|
|
1332
|
+
const toolNames = listedResult.tools.flatMap((tool) =>
|
|
1333
|
+
tool && typeof tool === "object" && "name" in tool && typeof tool.name === "string"
|
|
1334
|
+
? [tool.name]
|
|
1335
|
+
: []
|
|
1336
|
+
);
|
|
1337
|
+
assert.ok(toolNames.includes("remnic.external_wiki_search"));
|
|
1338
|
+
assert.ok(toolNames.includes("engram.external_wiki_search"));
|
|
1339
|
+
|
|
1340
|
+
let canonicalResult: unknown;
|
|
1341
|
+
for (const name of ["remnic.external_wiki_search", "engram.external_wiki_search"]) {
|
|
1342
|
+
const response = await server.handleRequest(makeToolRequest(name, {
|
|
1343
|
+
query: "hybrid retrieval",
|
|
1344
|
+
limit: 3,
|
|
1345
|
+
wikiId: "reading",
|
|
1346
|
+
maxCharsPerHit: 400,
|
|
1347
|
+
}));
|
|
1348
|
+
const result = readMcpResult(response);
|
|
1349
|
+
assert.equal(result.isError, false);
|
|
1350
|
+
assert.ok(result.structuredContent && typeof result.structuredContent === "object");
|
|
1351
|
+
if (canonicalResult === undefined) canonicalResult = result.structuredContent;
|
|
1352
|
+
else assert.deepEqual(result.structuredContent, canonicalResult);
|
|
1353
|
+
}
|
|
1354
|
+
assert.ok(canonicalResult && typeof canonicalResult === "object" && "hits" in canonicalResult);
|
|
1355
|
+
assert.ok(Array.isArray(canonicalResult.hits));
|
|
1356
|
+
assert.equal(canonicalResult.hits.length, 1);
|
|
1357
|
+
const firstHit = canonicalResult.hits[0];
|
|
1358
|
+
assert.ok(firstHit && typeof firstHit === "object" && "path" in firstHit);
|
|
1359
|
+
assert.equal(firstHit.path, "wiki/retrieval.md");
|
|
1360
|
+
} finally {
|
|
1361
|
+
await rm(rootDir, { recursive: true, force: true });
|
|
1362
|
+
}
|
|
1363
|
+
});
|
|
1364
|
+
|
|
1365
|
+
test("MCP external_wiki_search rejects an empty query before service dispatch", async () => {
|
|
1366
|
+
let configRead = false;
|
|
1367
|
+
const service = {
|
|
1368
|
+
...makeMockService(),
|
|
1369
|
+
get configRef() {
|
|
1370
|
+
configRead = true;
|
|
1371
|
+
return parseConfig({ memoryDir: os.tmpdir(), externalWikis: [] });
|
|
1372
|
+
},
|
|
1373
|
+
} as unknown as EngramAccessService;
|
|
1374
|
+
const server = new EngramMcpServer(service);
|
|
1375
|
+
|
|
1376
|
+
const response = await server.handleRequest(makeToolRequest("remnic.external_wiki_search", { query: " " }));
|
|
1377
|
+
assert.equal(readMcpResult(response).isError, true);
|
|
1378
|
+
assert.equal(configRead, false);
|
|
1379
|
+
});
|
package/src/access-mcp.ts
CHANGED
|
@@ -43,7 +43,10 @@ import type { RecallDisclosure, RecallPlanMode } from "./types.js";
|
|
|
43
43
|
import { expandTildePath } from "./utils/path.js";
|
|
44
44
|
|
|
45
45
|
import { applyToolOutputSchemas } from "./access-mcp-output-schemas.js";
|
|
46
|
-
import { MCP_READ_ONLY_TOOL_SUFFIXES } from "./mcp-read-only-tools.js";
|
|
46
|
+
import { MCP_READ_ONLY_TOOL_SUFFIXES } from "./mcp-read-only-tools.js";
|
|
47
|
+
import { MEETINGS_MCP_TOOLS } from "./meetings/mcp-tools.js";
|
|
48
|
+
import { WEARABLES_MCP_TOOLS } from "./wearables/mcp-tools.js";
|
|
49
|
+
import { EXTERNAL_WIKI_MCP_TOOLS } from "./external-wiki-mcp-tools.js";
|
|
47
50
|
import { abortError, isAbortError } from "./abort-error.js";
|
|
48
51
|
type JsonRpcId = string | number | null;
|
|
49
52
|
|
|
@@ -152,16 +155,10 @@ function withToolAliases(tool: McpTool, emitLegacyTools = true): McpTool[] {
|
|
|
152
155
|
return emitLegacyTools ? [canonicalTool, tool] : [canonicalTool];
|
|
153
156
|
}
|
|
154
157
|
|
|
155
|
-
/**
|
|
156
|
-
* MCP tool name (legacy `engram.*` form, since {@link toLegacyToolName}
|
|
157
|
-
* canonicalizes incoming calls) → boundary operation it dispatches through.
|
|
158
|
-
* A tool appears here once its `access-operations.ts` registration lands and
|
|
159
|
-
* its surface-local validation is deleted. The fitness test
|
|
160
|
-
* (`access-surface-catalog.test.ts`) asserts this map and the catalog agree.
|
|
161
|
-
*/
|
|
162
158
|
const MCP_MIGRATED_OPERATIONS: Readonly<Record<string, OperationName>> = {
|
|
163
159
|
"engram.memory_get": "memory_get",
|
|
164
160
|
"engram.memory_search": "memory_search",
|
|
161
|
+
"engram.external_wiki_search": "external_wiki_search",
|
|
165
162
|
"engram.memory_store": "memory_store",
|
|
166
163
|
"engram.coding_decision": "coding_decision",
|
|
167
164
|
"engram.coding_architecture": "coding_architecture",
|
|
@@ -1427,7 +1424,7 @@ export class EngramMcpServer {
|
|
|
1427
1424
|
additionalProperties: false,
|
|
1428
1425
|
},
|
|
1429
1426
|
},
|
|
1430
|
-
|
|
1427
|
+
...EXTERNAL_WIKI_MCP_TOOLS,
|
|
1431
1428
|
{
|
|
1432
1429
|
name: "engram.memory_search",
|
|
1433
1430
|
description:
|
|
@@ -2740,6 +2737,7 @@ export class EngramMcpServer {
|
|
|
2740
2737
|
const result = (await op.run(envelope, {
|
|
2741
2738
|
service: this.service,
|
|
2742
2739
|
authenticatedPrincipal: effectivePrincipal,
|
|
2740
|
+
...(sourceConnector ? { sourceConnector } : {}),
|
|
2743
2741
|
...(abortSignal ? { abortSignal } : {}),
|
|
2744
2742
|
})) as { result: unknown };
|
|
2745
2743
|
throwMcpAbort(abortSignal, "MCP recall aborted before postprocessing");
|
|
@@ -3,10 +3,31 @@ type PendingObservePreparation = {
|
|
|
3
3
|
scopeHint?: string;
|
|
4
4
|
principal?: string;
|
|
5
5
|
namespace?: string;
|
|
6
|
+
scopeResolved: boolean;
|
|
7
|
+
resolvedScopeFences: Array<{ principal?: string; namespace?: string }>;
|
|
6
8
|
released: Promise<void>;
|
|
7
9
|
release: () => void;
|
|
8
10
|
};
|
|
9
11
|
|
|
12
|
+
function resolvedScopesMatch(
|
|
13
|
+
left: { principal?: string; namespace?: string },
|
|
14
|
+
right: { principal?: string; namespace?: string },
|
|
15
|
+
): boolean {
|
|
16
|
+
return left.principal === right.principal && left.namespace === right.namespace;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function preparationMatchesScope(
|
|
20
|
+
reservation: PendingObservePreparation,
|
|
21
|
+
principal: string | undefined,
|
|
22
|
+
namespace: string | undefined,
|
|
23
|
+
scopeHint: string | undefined,
|
|
24
|
+
): boolean {
|
|
25
|
+
if (reservation.scopeResolved) {
|
|
26
|
+
return resolvedScopesMatch(reservation, { principal, namespace });
|
|
27
|
+
}
|
|
28
|
+
return reservation.scopeHint === undefined || scopeHint === undefined || reservation.scopeHint === scopeHint;
|
|
29
|
+
}
|
|
30
|
+
|
|
10
31
|
export type PendingObservePreparationHandle = {
|
|
11
32
|
isCancelled(): boolean;
|
|
12
33
|
setScope(principal?: string, namespace?: string): void;
|
|
@@ -40,6 +61,8 @@ export class PendingObserveExtractionTracker {
|
|
|
40
61
|
let resolveReleased: () => void = () => {};
|
|
41
62
|
const reservation: PendingObservePreparation = {
|
|
42
63
|
cancelled: false,
|
|
64
|
+
scopeResolved: false,
|
|
65
|
+
resolvedScopeFences: [],
|
|
43
66
|
scopeHint,
|
|
44
67
|
released: new Promise<void>((resolve) => {
|
|
45
68
|
resolveReleased = resolve;
|
|
@@ -61,15 +84,38 @@ export class PendingObserveExtractionTracker {
|
|
|
61
84
|
setScope: (principal, namespace) => {
|
|
62
85
|
reservation.principal = principal;
|
|
63
86
|
reservation.namespace = namespace;
|
|
87
|
+
reservation.scopeResolved = true;
|
|
88
|
+
if (reservation.resolvedScopeFences.some((fence) => resolvedScopesMatch(reservation, fence))) {
|
|
89
|
+
reservation.cancelled = true;
|
|
90
|
+
}
|
|
64
91
|
},
|
|
65
92
|
release: reservation.release,
|
|
66
93
|
};
|
|
67
94
|
}
|
|
68
95
|
|
|
69
|
-
private async waitForPreparations(
|
|
96
|
+
private async waitForPreparations(
|
|
97
|
+
sessionKey: string,
|
|
98
|
+
principal: string | undefined,
|
|
99
|
+
namespace: string | undefined,
|
|
100
|
+
scopeHint: string | undefined,
|
|
101
|
+
): Promise<void> {
|
|
70
102
|
while (true) {
|
|
71
|
-
const
|
|
72
|
-
|
|
103
|
+
const reservations = [...(this.preparations.get(sessionKey) ?? [])];
|
|
104
|
+
for (const reservation of reservations) {
|
|
105
|
+
if (
|
|
106
|
+
!reservation.cancelled &&
|
|
107
|
+
!reservation.scopeResolved &&
|
|
108
|
+
!preparationMatchesScope(reservation, principal, namespace, scopeHint) &&
|
|
109
|
+
!reservation.resolvedScopeFences.some((fence) =>
|
|
110
|
+
resolvedScopesMatch(fence, { principal, namespace }),
|
|
111
|
+
)
|
|
112
|
+
) {
|
|
113
|
+
reservation.resolvedScopeFences.push({ principal, namespace });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const pending = reservations.filter(
|
|
117
|
+
(reservation) =>
|
|
118
|
+
!reservation.cancelled && preparationMatchesScope(reservation, principal, namespace, scopeHint),
|
|
73
119
|
);
|
|
74
120
|
if (pending.length === 0) return;
|
|
75
121
|
await Promise.all(pending.map((reservation) => reservation.released));
|
|
@@ -103,6 +149,19 @@ export class PendingObserveExtractionTracker {
|
|
|
103
149
|
});
|
|
104
150
|
}
|
|
105
151
|
|
|
152
|
+
cancelPreparations(sessionKey: string, scopeHint?: string): void {
|
|
153
|
+
for (const reservation of this.preparations.get(sessionKey) ?? []) {
|
|
154
|
+
if (
|
|
155
|
+
scopeHint !== undefined &&
|
|
156
|
+
reservation.scopeHint !== undefined &&
|
|
157
|
+
reservation.scopeHint !== scopeHint
|
|
158
|
+
) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
reservation.cancelled = true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
106
165
|
cancel(
|
|
107
166
|
sessionKey: string,
|
|
108
167
|
principal?: string,
|
|
@@ -110,24 +169,7 @@ export class PendingObserveExtractionTracker {
|
|
|
110
169
|
scopeHint?: string,
|
|
111
170
|
): void {
|
|
112
171
|
for (const reservation of this.preparations.get(sessionKey) ?? []) {
|
|
113
|
-
|
|
114
|
-
principal === undefined ||
|
|
115
|
-
reservation.principal === undefined ||
|
|
116
|
-
reservation.principal === principal;
|
|
117
|
-
const namespaceMatches =
|
|
118
|
-
namespace === undefined ||
|
|
119
|
-
reservation.namespace === undefined ||
|
|
120
|
-
reservation.namespace === namespace;
|
|
121
|
-
const resolvedScopeMatches =
|
|
122
|
-
namespace !== undefined &&
|
|
123
|
-
reservation.namespace === namespace &&
|
|
124
|
-
principalMatches;
|
|
125
|
-
const scopeHintMismatch =
|
|
126
|
-
(reservation.scopeHint !== undefined && reservation.scopeHint !== scopeHint) ||
|
|
127
|
-
(reservation.scopeHint === undefined && scopeHint !== undefined);
|
|
128
|
-
if ((!resolvedScopeMatches && scopeHintMismatch) || !principalMatches || !namespaceMatches) {
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
172
|
+
if (!preparationMatchesScope(reservation, principal, namespace, scopeHint)) continue;
|
|
131
173
|
reservation.cancelled = true;
|
|
132
174
|
}
|
|
133
175
|
|
|
@@ -158,7 +200,7 @@ export class PendingObserveExtractionTracker {
|
|
|
158
200
|
registerCancellation?.(abortTracked);
|
|
159
201
|
abortSignal?.addEventListener("abort", abortTracked, { once: true });
|
|
160
202
|
try {
|
|
161
|
-
await this.waitForPreparations(sessionKey);
|
|
203
|
+
await this.waitForPreparations(sessionKey, principal, namespace, scopeHint);
|
|
162
204
|
while (true) {
|
|
163
205
|
const entry = this.entries.get(key);
|
|
164
206
|
if (!entry) return;
|
|
@@ -110,6 +110,10 @@ export interface AccessObserveWriteSurfaceDeps {
|
|
|
110
110
|
authenticatedPrincipal?: string;
|
|
111
111
|
}
|
|
112
112
|
): Promise<MemoryScopePlan>;
|
|
113
|
+
cancelPendingObservePreparations?(
|
|
114
|
+
sessionKey: string,
|
|
115
|
+
scopeHint?: string,
|
|
116
|
+
): void;
|
|
113
117
|
cancelPendingObserveExtractions?(
|
|
114
118
|
sessionKey: string,
|
|
115
119
|
principal?: string,
|
|
@@ -132,6 +136,10 @@ export class AccessObserveWriteSurface {
|
|
|
132
136
|
private quarantineStoreInstance?: WriteQuarantineStore;
|
|
133
137
|
private readonly pendingObserveExtractions = new PendingObserveExtractionTracker();
|
|
134
138
|
|
|
139
|
+
public cancelPendingObservePreparations(sessionKey: string, scopeHint?: string): void {
|
|
140
|
+
this.pendingObserveExtractions.cancelPreparations(sessionKey, scopeHint);
|
|
141
|
+
}
|
|
142
|
+
|
|
135
143
|
public cancelPendingObserveExtractions(
|
|
136
144
|
sessionKey: string,
|
|
137
145
|
principal?: string,
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as nodePath from "node:path";
|
|
2
|
+
import type { Orchestrator } from "./orchestrator.js";
|
|
3
|
+
import { iterateOfflineSyncSnapshotFileRecords } from "./offline-sync.js";
|
|
4
|
+
import { offlineSyncStorageForSnapshot } from "./offline-sync-impression-drain.js";
|
|
5
|
+
import {
|
|
6
|
+
buildReconcileManifestFile,
|
|
7
|
+
RECONCILE_MANIFEST_FORMAT,
|
|
8
|
+
RECONCILE_MANIFEST_SCHEMA_VERSION,
|
|
9
|
+
type ReconcileManifest,
|
|
10
|
+
type ReconcileManifestFile,
|
|
11
|
+
type ReconcileMemoryParser,
|
|
12
|
+
} from "./reconcile/manifest.js";
|
|
13
|
+
|
|
14
|
+
export interface OfflineSyncManifestRequest {
|
|
15
|
+
includeTranscripts?: boolean;
|
|
16
|
+
signal?: AbortSignal;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface OfflineSyncManifestStreamResponse extends Omit<ReconcileManifest, "files"> {
|
|
20
|
+
namespace: string;
|
|
21
|
+
files: AsyncIterable<ReconcileManifestFile>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export async function createOfflineSyncManifestStream(
|
|
25
|
+
orchestrator: Orchestrator,
|
|
26
|
+
namespace: string,
|
|
27
|
+
userExcludeRegexps: RegExp[],
|
|
28
|
+
options: OfflineSyncManifestRequest,
|
|
29
|
+
parseMemory: ReconcileMemoryParser,
|
|
30
|
+
): Promise<OfflineSyncManifestStreamResponse> {
|
|
31
|
+
const storage = await offlineSyncStorageForSnapshot(orchestrator, namespace);
|
|
32
|
+
const snapshotFiles = iterateOfflineSyncSnapshotFileRecords({
|
|
33
|
+
root: storage.dir,
|
|
34
|
+
includeContent: false,
|
|
35
|
+
includeTranscripts: options.includeTranscripts !== false,
|
|
36
|
+
readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),
|
|
37
|
+
signal: options.signal,
|
|
38
|
+
userExcludeRegexps,
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
namespace,
|
|
42
|
+
format: RECONCILE_MANIFEST_FORMAT,
|
|
43
|
+
schemaVersion: RECONCILE_MANIFEST_SCHEMA_VERSION,
|
|
44
|
+
files: (async function* () {
|
|
45
|
+
for await (const file of snapshotFiles) {
|
|
46
|
+
yield await buildReconcileManifestFile(
|
|
47
|
+
file,
|
|
48
|
+
async ({ path }) => storage.readOfflineSyncFile(nodePath.join(storage.dir, path)),
|
|
49
|
+
parseMemory,
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
})(),
|
|
53
|
+
};
|
|
54
|
+
}
|