@remnic/core 9.45.2 → 9.45.4
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 -76
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +14 -10
- package/dist/access-authorization-probe.js +85 -77
- package/dist/access-boundary.d.ts +15 -11
- package/dist/access-boundary.js +84 -76
- package/dist/access-citation-namespace.js +2 -2
- package/dist/access-cli.js +193 -181
- 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 -76
- 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 -76
- package/dist/access-http.d.ts +15 -10
- package/dist/access-http.js +105 -92
- package/dist/access-identity-continuity-surface.d.ts +9 -8
- package/dist/access-identity-continuity-surface.js +84 -76
- package/dist/access-lcm-surface.d.ts +14 -10
- package/dist/access-lcm-surface.js +84 -76
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp.d.ts +14 -10
- package/dist/access-mcp.js +95 -83
- 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 -76
- 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 -76
- 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 -78
- package/dist/access-operations.d.ts +18 -14
- package/dist/access-operations.js +91 -80
- package/dist/access-recall-concurrency.d.ts +16 -26
- package/dist/access-recall-concurrency.js +86 -77
- package/dist/access-recall-response.d.ts +18 -14
- package/dist/access-recall-response.js +84 -76
- package/dist/access-recall-surface.d.ts +29 -24
- package/dist/access-recall-surface.js +84 -76
- package/dist/access-schema.d.ts +84 -84
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-CiJRsgAB.d.ts → access-service-CsU-ljFD.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 -76
- 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 +7 -7
- package/dist/adapters/registry.js +3 -3
- 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 +23 -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 +27 -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-VUPTKTDV.js → chunk-2MRHJNWL.js} +3 -3
- package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
- package/dist/{chunk-5IVLTFOV.js → chunk-44N6ESJ4.js} +2 -2
- 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-U7GW7NE7.js → chunk-5CEECY6P.js} +10 -10
- package/dist/{chunk-4UH4BTGK.js → chunk-5SNZSWWR.js} +82 -82
- package/dist/{chunk-6CZPDBJS.js → chunk-5U7ID3EZ.js} +3 -3
- package/dist/{chunk-GF22HWS2.js → chunk-6NNNURLK.js} +7 -7
- package/dist/chunk-773TRRGT.js +36 -0
- package/dist/chunk-773TRRGT.js.map +1 -0
- package/dist/chunk-7CITSYSH.js +242 -0
- package/dist/chunk-7CITSYSH.js.map +1 -0
- package/dist/{chunk-227UFSEQ.js → chunk-7RZJWZ46.js} +5 -5
- package/dist/{chunk-E5UK4VPE.js → chunk-7SHJHPTY.js} +5 -5
- package/dist/{chunk-UVIKWC7M.js → chunk-7YERSTN7.js} +17 -17
- package/dist/{chunk-DLVPUX7U.js → chunk-7YKVM5H3.js} +8 -6
- package/dist/chunk-7YKVM5H3.js.map +1 -0
- 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-S2NCTZGJ.js → chunk-AJQ57VV3.js} +15 -15
- package/dist/chunk-AJQ57VV3.js.map +1 -0
- package/dist/{chunk-CUM2BBPN.js → chunk-AUMWZSE7.js} +19 -10
- package/dist/chunk-AUMWZSE7.js.map +1 -0
- package/dist/{chunk-XYTOI63Z.js → chunk-BGHFOD5A.js} +19 -11
- package/dist/chunk-BGHFOD5A.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-E53DSZEN.js → chunk-C26TE27X.js} +3 -3
- package/dist/{chunk-LZ4LDKHZ.js → chunk-CLB32OHM.js} +6 -6
- package/dist/{chunk-Q6IP2ARR.js → chunk-CSOYVTRX.js} +2 -2
- package/dist/{chunk-XOQSEF7X.js → chunk-CVILPI77.js} +6 -6
- package/dist/chunk-D3I2MCN7.js +29 -0
- package/dist/chunk-D3I2MCN7.js.map +1 -0
- package/dist/{chunk-A5OJCXZL.js → chunk-DSUAAZZX.js} +15 -4
- package/dist/chunk-DSUAAZZX.js.map +1 -0
- package/dist/{chunk-HREE4JHI.js → chunk-DYVMXPCF.js} +486 -287
- package/dist/chunk-DYVMXPCF.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-PDLBLTOK.js → chunk-EITZHSX6.js} +9 -9
- package/dist/{chunk-D3J5SLQK.js → chunk-EJHEWCGQ.js} +81 -20
- package/dist/chunk-EJHEWCGQ.js.map +1 -0
- package/dist/{chunk-WUNIWKY4.js → chunk-ELIL2A37.js} +6 -6
- package/dist/{chunk-E6PNLPGJ.js → chunk-FZP32336.js} +806 -470
- package/dist/chunk-FZP32336.js.map +1 -0
- package/dist/{chunk-4L6HUREQ.js → chunk-G7A5HLUS.js} +23 -17
- package/dist/chunk-G7A5HLUS.js.map +1 -0
- 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-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-PKNLM44P.js → chunk-JH6BPLOP.js} +9 -9
- 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-AV5ZEH4M.js → chunk-KVJRXN2E.js} +2 -2
- package/dist/{chunk-JVLCVFQ4.js → chunk-KXEFRMCF.js} +3 -3
- package/dist/{chunk-WFTIGIIS.js → chunk-L6CQ7WIW.js} +5 -5
- 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-AS7YMSL6.js → chunk-M23RF3LJ.js} +4 -4
- package/dist/{chunk-UYLMNVY6.js → chunk-MDISBSYA.js} +16 -9
- package/dist/chunk-MDISBSYA.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-OQ5PRDDS.js → chunk-NTOIP2E6.js} +6 -6
- package/dist/{chunk-HLPD7B7P.js → chunk-NUEQKLNB.js} +2 -2
- 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-33PLLLL7.js → chunk-P7NGM24P.js} +6 -6
- package/dist/{chunk-7TWUCYER.js → chunk-PNRA7FAD.js} +7 -7
- package/dist/{chunk-5I4M26Q7.js → chunk-QBSFOKY6.js} +4 -4
- package/dist/{chunk-QJAQNXWI.js → chunk-QCECHYZL.js} +76 -79
- package/dist/chunk-QCECHYZL.js.map +1 -0
- package/dist/{chunk-P4DRWEYC.js → chunk-QVSBTCVP.js} +2 -2
- package/dist/{chunk-AAIUERNB.js → chunk-R5RFK3CB.js} +6 -6
- package/dist/{chunk-WDISJRMG.js → chunk-RMMVQQA6.js} +2 -2
- 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-OAEQLRCY.js → chunk-TN76AKO3.js} +5 -5
- package/dist/{chunk-QN25OCUF.js → chunk-TQ4GD737.js} +5 -5
- 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-DNWXFTLD.js → chunk-TYISDI6B.js} +2 -2
- package/dist/{chunk-4LMA77JH.js → chunk-U2VLVBBH.js} +3 -3
- package/dist/{chunk-5ZE7QHTK.js → chunk-ULVR5KG7.js} +5 -5
- package/dist/{chunk-NVRYW264.js → chunk-UQWIKLQK.js} +18 -15
- package/dist/chunk-UQWIKLQK.js.map +1 -0
- 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-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-3Y224NYC.js → chunk-VYISFWVX.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-WGP57SR3.js +68 -0
- package/dist/chunk-WGP57SR3.js.map +1 -0
- package/dist/{chunk-ECK75GDJ.js → chunk-WQIHRA5F.js} +43 -24
- package/dist/chunk-WQIHRA5F.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-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-VWAXN2BN.js → chunk-XSFHWBQO.js} +93 -31
- package/dist/chunk-XSFHWBQO.js.map +1 -0
- package/dist/{chunk-DL7ZD3JH.js → chunk-XTAUXTDO.js} +14 -9
- package/dist/chunk-XTAUXTDO.js.map +1 -0
- package/dist/{chunk-JE7EK33X.js → chunk-Y7HRYCNW.js} +2 -2
- package/dist/{chunk-E6EE5B67.js → chunk-YK6BDDHP.js} +4 -4
- package/dist/{chunk-ES36HTSC.js → chunk-YLHM5BQQ.js} +3 -3
- package/dist/{chunk-RN7DY3FC.js → chunk-YMAQDHQM.js} +31 -12
- package/dist/chunk-YMAQDHQM.js.map +1 -0
- 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-IKKWIPYN.js → chunk-YYQAKIDJ.js} +37 -1
- package/dist/chunk-YYQAKIDJ.js.map +1 -0
- package/dist/{chunk-BJKPPZ6Z.js → chunk-ZFGZ6PZ2.js} +2 -2
- package/dist/{chunk-CJ2ZR7UA.js → chunk-ZI32MKDW.js} +267 -214
- package/dist/chunk-ZI32MKDW.js.map +1 -0
- package/dist/{chunk-64UDOIMI.js → chunk-ZLQ37WJX.js} +2 -2
- package/dist/chunk-ZMAYKGPN.js +351 -0
- package/dist/chunk-ZMAYKGPN.js.map +1 -0
- package/dist/{cli-BUGN3d6_.d.ts → cli-BBHDtG36.d.ts} +5 -5
- package/dist/cli.d.ts +16 -12
- package/dist/cli.js +138 -124
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +24 -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 +23 -22
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +26 -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 +27 -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 +42 -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 +24 -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 +186 -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 +96 -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 +43 -0
- package/dist/external-wiki.js +16 -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 +45 -43
- package/dist/fallback-llm.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-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 +732 -720
- package/dist/index.js +291 -259
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +8 -8
- 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 +24 -23
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +24 -23
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +26 -25
- package/dist/{maintenance-LbuS2rUA.d.ts → maintenance-D2mveyCd.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-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 +40 -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 +23 -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 +45 -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 +59 -55
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +36 -33
- package/dist/{orchestrator-rHiWt32X.d.ts → orchestrator-DJYlwiUv.d.ts} +14 -7
- package/dist/orchestrator.d.ts +9 -8
- package/dist/orchestrator.js +201 -189
- 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 +5 -5
- 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 +6 -2
- 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 +76 -76
- 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 +22 -22
- 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 +25 -24
- package/dist/semantic-rule-promotion.js +23 -22
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +24 -23
- package/dist/{service-DJG3KCQ4.d.ts → service-BeDxSqE-.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 +42 -40
- package/dist/{storage-F9FVh-w9.d.ts → storage-DfjxusTE.d.ts} +24 -12
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +25 -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-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 +24 -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 +79 -0
- package/src/access-http.test.ts +310 -3
- package/src/access-http.ts +85 -21
- 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 +138 -3
- 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 +86 -59
- 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/converge-conflict-policy-type.test.ts +15 -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 +92 -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 +301 -0
- package/src/external-wiki-search.ts +362 -0
- package/src/external-wiki.test.ts +240 -0
- package/src/external-wiki.ts +453 -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 +8 -0
- package/src/mcp-read-only-tools.ts +1 -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 +29 -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-deletion-revisions.test.ts +91 -0
- package/src/storage-fact-hash-index-defer.test.ts +446 -163
- package/src/storage.ts +534 -245
- 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-4L6HUREQ.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-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-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-VUPTKTDV.js.map → chunk-2MRHJNWL.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.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-U7GW7NE7.js.map → chunk-5CEECY6P.js.map} +0 -0
- /package/dist/{chunk-4UH4BTGK.js.map → chunk-5SNZSWWR.js.map} +0 -0
- /package/dist/{chunk-6CZPDBJS.js.map → chunk-5U7ID3EZ.js.map} +0 -0
- /package/dist/{chunk-GF22HWS2.js.map → chunk-6NNNURLK.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-7RZJWZ46.js.map} +0 -0
- /package/dist/{chunk-E5UK4VPE.js.map → chunk-7SHJHPTY.js.map} +0 -0
- /package/dist/{chunk-UVIKWC7M.js.map → chunk-7YERSTN7.js.map} +0 -0
- /package/dist/{chunk-S5SLVSVY.js.map → chunk-BQIFZ2MP.js.map} +0 -0
- /package/dist/{chunk-E53DSZEN.js.map → chunk-C26TE27X.js.map} +0 -0
- /package/dist/{chunk-LZ4LDKHZ.js.map → chunk-CLB32OHM.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-PDLBLTOK.js.map → chunk-EITZHSX6.js.map} +0 -0
- /package/dist/{chunk-WUNIWKY4.js.map → chunk-ELIL2A37.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-PKNLM44P.js.map → chunk-JH6BPLOP.js.map} +0 -0
- /package/dist/{chunk-KXB4VXHY.js.map → chunk-JIYDRBVZ.js.map} +0 -0
- /package/dist/{chunk-AV5ZEH4M.js.map → chunk-KVJRXN2E.js.map} +0 -0
- /package/dist/{chunk-JVLCVFQ4.js.map → chunk-KXEFRMCF.js.map} +0 -0
- /package/dist/{chunk-WFTIGIIS.js.map → chunk-L6CQ7WIW.js.map} +0 -0
- /package/dist/{chunk-EJUEXZHX.js.map → chunk-LLJMAULE.js.map} +0 -0
- /package/dist/{chunk-AS7YMSL6.js.map → chunk-M23RF3LJ.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-OQ5PRDDS.js.map → chunk-NTOIP2E6.js.map} +0 -0
- /package/dist/{chunk-HLPD7B7P.js.map → chunk-NUEQKLNB.js.map} +0 -0
- /package/dist/{chunk-33PLLLL7.js.map → chunk-P7NGM24P.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-P4DRWEYC.js.map → chunk-QVSBTCVP.js.map} +0 -0
- /package/dist/{chunk-AAIUERNB.js.map → chunk-R5RFK3CB.js.map} +0 -0
- /package/dist/{chunk-WDISJRMG.js.map → chunk-RMMVQQA6.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-OAEQLRCY.js.map → chunk-TN76AKO3.js.map} +0 -0
- /package/dist/{chunk-QN25OCUF.js.map → chunk-TQ4GD737.js.map} +0 -0
- /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
- /package/dist/{chunk-DNWXFTLD.js.map → chunk-TYISDI6B.js.map} +0 -0
- /package/dist/{chunk-4LMA77JH.js.map → chunk-U2VLVBBH.js.map} +0 -0
- /package/dist/{chunk-5ZE7QHTK.js.map → chunk-ULVR5KG7.js.map} +0 -0
- /package/dist/{chunk-4B77XSG5.js.map → chunk-UV72DEZD.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-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-BLAKS3CP.js.map → chunk-XL3TATMJ.js.map} +0 -0
- /package/dist/{chunk-W4XJFLAL.js.map → chunk-XPRJSHNI.js.map} +0 -0
- /package/dist/{chunk-JE7EK33X.js.map → chunk-Y7HRYCNW.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-BJKPPZ6Z.js.map → chunk-ZFGZ6PZ2.js.map} +0 -0
- /package/dist/{chunk-64UDOIMI.js.map → chunk-ZLQ37WJX.js.map} +0 -0
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
|
+
}
|
|
@@ -88,7 +88,7 @@ defineOperation({ name: "recall", description: "Semantic recall.", schema: stric
|
|
|
88
88
|
if (input.tags !== undefined) { if (!Array.isArray(input.tags) || !input.tags.every((t) => typeof t === "string")) throw new EngramAccessInputError("tags must be an array of strings"); tags = input.tags; }
|
|
89
89
|
let tagMatch: "any" | "all" | undefined;
|
|
90
90
|
if (input.tagMatch !== undefined) { if (input.tagMatch !== "any" && input.tagMatch !== "all") throw new EngramAccessInputError("tagMatch must be one of: any, all"); tagMatch = input.tagMatch; }
|
|
91
|
-
const result = await ctx.service.recall({ query: typeof input.query === "string" ? input.query : "", sessionKey: optStr(input.sessionKey), authenticatedPrincipal: ctx.authenticatedPrincipal, namespace: optStr(input.namespace), topK: optNum(input.topK), mode: optStr(input.mode) as RecallPlanMode | "auto" | undefined, includeDebug: input.includeDebug === true, disclosure, cwd: optStr(input.cwd), projectTag: optStr(input.projectTag), asOf: optStr(input.asOf), ...(tags ? { tags } : {}), ...(tagMatch ? { tagMatch } : {}), ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) });
|
|
91
|
+
const result = await ctx.service.recall({ query: typeof input.query === "string" ? input.query : "", sessionKey: optStr(input.sessionKey), authenticatedPrincipal: ctx.authenticatedPrincipal, sourceConnector: ctx.sourceConnector, namespace: optStr(input.namespace), topK: optNum(input.topK), mode: optStr(input.mode) as RecallPlanMode | "auto" | undefined, includeDebug: input.includeDebug === true, disclosure, cwd: optStr(input.cwd), projectTag: optStr(input.projectTag), asOf: optStr(input.asOf), ...(tags ? { tags } : {}), ...(tagMatch ? { tagMatch } : {}), ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) });
|
|
92
92
|
return { result };
|
|
93
93
|
},
|
|
94
94
|
});
|
|
@@ -115,7 +115,7 @@ defineOperation({ name: "recall_xray", description: "X-ray recall.", schema: str
|
|
|
115
115
|
let budget: number | undefined;
|
|
116
116
|
if (input.budget !== undefined) { const p = typeof input.budget === "number" ? input.budget : typeof input.budget === "string" ? Number(input.budget) : undefined; if (p === undefined || !Number.isFinite(p) || p <= 0 || !Number.isInteger(p)) throw new EngramAccessInputError("recall_xray: budget expects a positive integer"); budget = p; }
|
|
117
117
|
const dr = optStr(input.disclosure);
|
|
118
|
-
return { result: await ctx.service.recallXray({ query: defStr(input.query, ""), sessionKey: optStr(input.sessionKey), namespace: optStr(input.namespace), budget, authenticatedPrincipal: ctx.authenticatedPrincipal, ...(dr && dr !== "" ? { disclosure: dr as RecallDisclosure } : {}), ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) }) };
|
|
118
|
+
return { result: await ctx.service.recallXray({ query: defStr(input.query, ""), sessionKey: optStr(input.sessionKey), namespace: optStr(input.namespace), budget, authenticatedPrincipal: ctx.authenticatedPrincipal, sourceConnector: ctx.sourceConnector, ...(dr && dr !== "" ? { disclosure: dr as RecallDisclosure } : {}), ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) }) };
|
|
119
119
|
},
|
|
120
120
|
});
|
|
121
121
|
defineOperation({ name: "namespace_writable", description: "Read-only preflight: is a namespace writable for the caller's principal?", allowedByOps: ["namespace_writable", "observe", "memory_store"], schema: strictSchema({ namespace: S.str, sessionKey: S.str, op: S.str, cwd: S.str, projectTag: S.str }), handler: async (input, ctx) => {
|
|
@@ -163,7 +163,7 @@ defineOperation({ name: "chatgpt_memory_inspector", description: "Memory inspect
|
|
|
163
163
|
if (input.currentContextScopes !== undefined) ii.currentContextScopes = input.currentContextScopes as string[];
|
|
164
164
|
if (input.allowUnverifiedPreview !== undefined) ii.allowUnverifiedPreview = input.allowUnverifiedPreview as boolean;
|
|
165
165
|
const rsk = ii.sessionKey ?? (ctx.authenticatedPrincipal ? "remnic:chatgpt-memory-inspector:" + randomUUID() : undefined);
|
|
166
|
-
const xr = await ctx.service.recallXray({ query: ii.query, sessionKey: rsk, namespace: ii.namespace, currentContextScopes: ii.currentContextScopes, authenticatedPrincipal: ctx.authenticatedPrincipal, mode: "full", disclosure: "chunk", includeRecall: true, ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) });
|
|
166
|
+
const xr = await ctx.service.recallXray({ query: ii.query, sessionKey: rsk, namespace: ii.namespace, currentContextScopes: ii.currentContextScopes, authenticatedPrincipal: ctx.authenticatedPrincipal, sourceConnector: ctx.sourceConnector, mode: "full", disclosure: "chunk", includeRecall: true, ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) });
|
|
167
167
|
const x = xr.snapshotFound === true ? (xr.snapshot ?? null) : null;
|
|
168
168
|
const r = xr.recall ?? { query: ii.query, namespace: ii.namespace ?? x?.namespace ?? "global", context: "", count: 0, memoryIds: [], results: [], fallbackUsed: false, sourcesUsed: [], disclosure: "chunk" as const };
|
|
169
169
|
const ac = await ctx.service.actionConfidence(buildChatGptMemoryInspectorActionRequest(ii, r, x));
|
package/src/access-operations.ts
CHANGED
|
@@ -18,6 +18,7 @@ import { defineOperation } from "./access-boundary.js";
|
|
|
18
18
|
import { memoryStoreRequestSchema, type MemoryStoreRequest } from "./access-schema.js";
|
|
19
19
|
import { EngramAccessInputError } from "./access-service.js";
|
|
20
20
|
import { CorrectionContractError } from "./correction/correction-contract.js";
|
|
21
|
+
import { externalWikiSearchOperation } from "./external-wiki-access.js";
|
|
21
22
|
import type {
|
|
22
23
|
EngramAccessMemoryResponse,
|
|
23
24
|
EngramAccessWriteResponse,
|
|
@@ -401,13 +402,16 @@ export const memoryCorrectPlanOperation = defineOperation<
|
|
|
401
402
|
schema: memoryCorrectPlanSchema as z.ZodType<MemoryCorrectPlanInput>,
|
|
402
403
|
handler: async (input, ctx) => {
|
|
403
404
|
try {
|
|
404
|
-
const result = await ctx.service.correctionPlan(
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
405
|
+
const result = await ctx.service.correctionPlan(
|
|
406
|
+
{
|
|
407
|
+
text: input.text,
|
|
408
|
+
...(input.targetIds ? { targetIds: input.targetIds } : {}),
|
|
409
|
+
...(input.sessionKey ? { sessionKey: input.sessionKey } : {}),
|
|
410
|
+
...(input.namespace ? { namespace: input.namespace } : {}),
|
|
411
|
+
...(ctx.authenticatedPrincipal ? { principal: ctx.authenticatedPrincipal } : {}),
|
|
412
|
+
},
|
|
413
|
+
ctx.abortSignal ? { abortSignal: ctx.abortSignal } : undefined,
|
|
414
|
+
);
|
|
411
415
|
return { result };
|
|
412
416
|
} catch (err) {
|
|
413
417
|
if (err instanceof CorrectionContractError) throw new EngramAccessInputError(err.message);
|
|
@@ -461,6 +465,7 @@ export const memoryCorrectApplyOperation = defineOperation<
|
|
|
461
465
|
...(input.sessionKey ? { sessionKey: input.sessionKey } : {}),
|
|
462
466
|
...(input.namespace ? { namespace: input.namespace } : {}),
|
|
463
467
|
...(ctx.authenticatedPrincipal ? { principal: ctx.authenticatedPrincipal } : {}),
|
|
468
|
+
...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}),
|
|
464
469
|
});
|
|
465
470
|
return { result };
|
|
466
471
|
} catch (err) {
|
|
@@ -684,6 +689,7 @@ import "./relay/mission-access.js";
|
|
|
684
689
|
export const REGISTERED_OPERATIONS = [
|
|
685
690
|
memoryGetOperation.spec.name,
|
|
686
691
|
memorySearchOperation.spec.name,
|
|
692
|
+
externalWikiSearchOperation.spec.name,
|
|
687
693
|
memoryStoreOperation.spec.name,
|
|
688
694
|
codingDecisionOperation.spec.name,
|
|
689
695
|
codingArchitectureOperation.spec.name,
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* module. `raceAbort` and `attachFlightAbort` need no host (they operate on the
|
|
14
14
|
* caller signal / flight object alone).
|
|
15
15
|
*/
|
|
16
|
-
import { abortError, throwIfAborted } from "./abort-error.js";
|
|
16
|
+
import { abortError, raceAbort, throwIfAborted } from "./abort-error.js";
|
|
17
17
|
import { hashAccessIdempotencyPayload } from "./access-idempotency.js";
|
|
18
18
|
import {
|
|
19
19
|
EngramAccessInputError,
|
|
@@ -27,6 +27,8 @@ import {
|
|
|
27
27
|
toBudgetWarning,
|
|
28
28
|
} from "./cross-namespace-budget.js";
|
|
29
29
|
|
|
30
|
+
export { raceAbort } from "./abort-error.js";
|
|
31
|
+
|
|
30
32
|
/**
|
|
31
33
|
* Per-principal recall concurrency slot (issue #1906). `active` counts
|
|
32
34
|
* in-flight recalls holding a permit; `waiters` is the FIFO queue of callers
|
|
@@ -199,32 +201,6 @@ export async function withRecallConcurrency<T>(
|
|
|
199
201
|
}
|
|
200
202
|
}
|
|
201
203
|
|
|
202
|
-
/**
|
|
203
|
-
* Race `p` against `signal` (issue #1906). A single-flight caller waits on
|
|
204
|
-
* the shared flight promise but must be able to leave on its own abort. The
|
|
205
|
-
* abort listener is removed as soon as the race settles (either `p` won or
|
|
206
|
-
* the abort fired) so a settled-first promise never leaks a listener on a
|
|
207
|
-
* long-lived signal.
|
|
208
|
-
*
|
|
209
|
-
* Pre-check the signal BEFORE building the race: an already-aborted signal
|
|
210
|
-
* must win even when `p` is already fulfilled. `Promise.race` settles from
|
|
211
|
-
* already-resolved members in array order, so a fulfilled `p` (index 0) would
|
|
212
|
-
* otherwise beat the synchronously-rejected abort racer (index 1) and let an
|
|
213
|
-
* aborted caller proceed into its own persistence + budget accounting before
|
|
214
|
-
* the next abort check runs (round 15 #1).
|
|
215
|
-
*/
|
|
216
|
-
export function raceAbort<T>(p: Promise<T>, signal?: AbortSignal): Promise<T> {
|
|
217
|
-
if (!signal) return p;
|
|
218
|
-
if (signal.aborted) return Promise.reject(abortError("operation aborted"));
|
|
219
|
-
let onAbort: (() => void) | undefined;
|
|
220
|
-
const racer = new Promise<never>((_resolve, reject) => {
|
|
221
|
-
onAbort = () => reject(abortError("operation aborted"));
|
|
222
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
223
|
-
});
|
|
224
|
-
return Promise.race([p, racer]).finally(() => {
|
|
225
|
-
if (onAbort) signal.removeEventListener("abort", onAbort);
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
204
|
|
|
229
205
|
/**
|
|
230
206
|
* Attach a caller to a single-flight recall (issue #1906 review). Increments
|
|
@@ -862,6 +862,7 @@ export class AccessRecallSurface {
|
|
|
862
862
|
contextComposition = composition;
|
|
863
863
|
},
|
|
864
864
|
...(authenticatedPrincipal ? { principalOverride: authenticatedPrincipal } : {}),
|
|
865
|
+
...(request.sourceConnector ? { sourceConnector: request.sourceConnector } : {}),
|
|
865
866
|
...(asOf !== undefined ? { asOf } : {}),
|
|
866
867
|
...(request.includeLowConfidence === true ? { includeLowConfidence: true } : {}),
|
|
867
868
|
...(request.abortSignal ? { abortSignal: request.abortSignal } : {}),
|
|
@@ -943,6 +944,7 @@ export class AccessRecallSurface {
|
|
|
943
944
|
namespace?: string;
|
|
944
945
|
budget?: number;
|
|
945
946
|
authenticatedPrincipal?: string;
|
|
947
|
+
sourceConnector?: string;
|
|
946
948
|
/**
|
|
947
949
|
* Disclosure depth used to shape per-result payload (issue #677
|
|
948
950
|
* PR 3/4). When set, each X-ray result is decorated with the
|
|
@@ -1095,6 +1097,7 @@ export class AccessRecallSurface {
|
|
|
1095
1097
|
...(authenticatedPrincipal
|
|
1096
1098
|
? { principalOverride: authenticatedPrincipal }
|
|
1097
1099
|
: {}),
|
|
1100
|
+
...(request.sourceConnector ? { sourceConnector: request.sourceConnector } : {}),
|
|
1098
1101
|
...(request.currentContextScopes !== undefined
|
|
1099
1102
|
? { currentContextScopes: request.currentContextScopes }
|
|
1100
1103
|
: {}),
|
|
@@ -474,10 +474,12 @@ test("health keeps namespace QMD failures scoped to the namespace", async () =>
|
|
|
474
474
|
}
|
|
475
475
|
});
|
|
476
476
|
|
|
477
|
-
test("health surfaces extraction liveness as degraded when the buffer is non-empty and the watermark is stale", async () => {
|
|
477
|
+
test("health surfaces extraction liveness as degraded when the buffer is non-empty and the watermark is stale", async (t) => {
|
|
478
|
+
const nowMs = Date.parse("2026-07-30T12:00:00.000Z");
|
|
479
|
+
t.mock.timers.enable({ apis: ["Date"], now: nowMs });
|
|
478
480
|
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-liveness-"));
|
|
479
481
|
try {
|
|
480
|
-
const oldTs = new Date(
|
|
482
|
+
const oldTs = new Date(nowMs - 10_000).toISOString();
|
|
481
483
|
const config = parseConfig({ memoryDir, qmdEnabled: false, extractionLiveness: { staleWindowMs: 1000 } });
|
|
482
484
|
const service = new EngramAccessService({
|
|
483
485
|
config,
|
|
@@ -506,16 +508,25 @@ test("health surfaces extraction liveness as degraded when the buffer is non-emp
|
|
|
506
508
|
assert.equal(health.extraction.bufferedSessionCount, 3);
|
|
507
509
|
assert.equal(health.extraction.pendingTurnCount, 12);
|
|
508
510
|
assert.equal(health.extraction.lastExtractionAt, oldTs);
|
|
509
|
-
|
|
510
|
-
assert.ok(
|
|
511
|
-
oldestAge >= 10_000 && oldestAge < 60_000,
|
|
512
|
-
`oldest buffered turn age reflects the ~10s offset, not merely non-negative (got ${oldestAge}ms)`,
|
|
513
|
-
);
|
|
511
|
+
assert.equal(health.extraction.oldestBufferedTurnAgeMs, 10_000);
|
|
514
512
|
assert.ok(
|
|
515
513
|
health.extraction.degradedReason !== null && health.extraction.degradedReason.length > 0,
|
|
516
514
|
"degraded reason is populated",
|
|
517
515
|
);
|
|
516
|
+
const scopedHealth = await tokenCapabilityStore.run(
|
|
517
|
+
{ version: TOKEN_CAPABILITIES_VERSION, namespaces: ["default"] },
|
|
518
|
+
() => service.health(),
|
|
519
|
+
);
|
|
520
|
+
assert.equal(scopedHealth.extraction.lastExtractionAt, null);
|
|
521
|
+
assert.equal(scopedHealth.extraction.degraded, true);
|
|
522
|
+
assert.equal(scopedHealth.extraction.bufferedSessionCount, 3);
|
|
523
|
+
assert.equal(scopedHealth.extraction.pendingTurnCount, 12);
|
|
524
|
+
assert.equal(scopedHealth.extraction.oldestBufferedTurnAgeMs, 10_000);
|
|
525
|
+
assert.match(scopedHealth.extraction.degradedReason ?? "", /3 buffered session/);
|
|
526
|
+
assert.match(scopedHealth.extraction.degradedReason ?? "", /12 turn\(s\) pending extraction/);
|
|
527
|
+
assert.doesNotMatch(scopedHealth.extraction.degradedReason ?? "", /last succeeded|unreadable/);
|
|
518
528
|
} finally {
|
|
529
|
+
t.mock.timers.reset();
|
|
519
530
|
await rm(memoryDir, { recursive: true, force: true });
|
|
520
531
|
}
|
|
521
532
|
});
|
|
@@ -672,6 +683,13 @@ test("health reports extraction liveness degraded when the buffer read fails (§
|
|
|
672
683
|
assert.equal(health.extraction.degraded, true, "an unreadable buffer must not report a healthy pipeline");
|
|
673
684
|
assert.match(health.extraction.degradedReason ?? "", /unreadable/);
|
|
674
685
|
assert.match(health.extraction.degradedReason ?? "", /buffer file corrupt/);
|
|
686
|
+
const scopedHealth = await tokenCapabilityStore.run(
|
|
687
|
+
{ version: TOKEN_CAPABILITIES_VERSION, namespaces: ["default"] },
|
|
688
|
+
() => service.health(),
|
|
689
|
+
);
|
|
690
|
+
assert.equal(scopedHealth.extraction.lastExtractionAt, null);
|
|
691
|
+
assert.match(scopedHealth.extraction.degradedReason ?? "", /extraction buffer unreadable/);
|
|
692
|
+
assert.doesNotMatch(scopedHealth.extraction.degradedReason ?? "", /buffer file corrupt/);
|
|
675
693
|
} finally {
|
|
676
694
|
await rm(memoryDir, { recursive: true, force: true });
|
|
677
695
|
}
|
|
@@ -702,6 +720,13 @@ test("health reports extraction liveness degraded when the watermark (meta) read
|
|
|
702
720
|
assert.equal(health.extraction.degraded, true, "an unreadable watermark must not report a healthy pipeline");
|
|
703
721
|
assert.match(health.extraction.degradedReason ?? "", /watermark unreadable/);
|
|
704
722
|
assert.match(health.extraction.degradedReason ?? "", /meta\.json unreadable/);
|
|
723
|
+
const scopedHealth = await tokenCapabilityStore.run(
|
|
724
|
+
{ version: TOKEN_CAPABILITIES_VERSION, namespaces: ["default"] },
|
|
725
|
+
() => service.health(),
|
|
726
|
+
);
|
|
727
|
+
assert.equal(scopedHealth.extraction.lastExtractionAt, null);
|
|
728
|
+
assert.match(scopedHealth.extraction.degradedReason ?? "", /extraction watermark unreadable/);
|
|
729
|
+
assert.doesNotMatch(scopedHealth.extraction.degradedReason ?? "", /meta\.json unreadable/);
|
|
705
730
|
} finally {
|
|
706
731
|
await rm(memoryDir, { recursive: true, force: true });
|
|
707
732
|
}
|