@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
|
@@ -23,8 +23,9 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import path from "node:path";
|
|
25
25
|
|
|
26
|
+
import { abortError } from "../abort-error.js";
|
|
27
|
+
import { launchProcess, launchProcessSync } from "../runtime/child-process.js";
|
|
26
28
|
import { expandTildePath } from "../utils/path.js";
|
|
27
|
-
import { launchProcessSync } from "../runtime/child-process.js";
|
|
28
29
|
|
|
29
30
|
// Re-export so existing callers / tests that imported `expandTildePath` from
|
|
30
31
|
// this module keep working. CLAUDE.md #17 requires consistent `~` expansion
|
|
@@ -64,19 +65,30 @@ export interface GitContext {
|
|
|
64
65
|
defaultBranch: string | null;
|
|
65
66
|
}
|
|
66
67
|
|
|
68
|
+
export interface GitInvokeOptions {
|
|
69
|
+
abortSignal?: AbortSignal;
|
|
70
|
+
timeoutMs?: number;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface GitInvokeResult {
|
|
74
|
+
stdout: string;
|
|
75
|
+
exitCode: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
67
78
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* spawning a real git process.
|
|
79
|
+
* Run `git <args>` with `cwd` as the working directory. Implementations
|
|
80
|
+
* should return non-zero exit codes rather than throwing for command failure.
|
|
71
81
|
*/
|
|
72
82
|
export interface GitInvoker {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
83
|
+
(
|
|
84
|
+
cwd: string,
|
|
85
|
+
args: string[],
|
|
86
|
+
options?: GitInvokeOptions,
|
|
87
|
+
): GitInvokeResult | Promise<GitInvokeResult>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface SyncGitInvoker {
|
|
91
|
+
(cwd: string, args: string[]): GitInvokeResult;
|
|
80
92
|
}
|
|
81
93
|
|
|
82
94
|
// ──────────────────────────────────────────────────────────────────────────
|
|
@@ -85,7 +97,7 @@ export interface GitInvoker {
|
|
|
85
97
|
|
|
86
98
|
const DEFAULT_GIT_TIMEOUT_MS = 2_000;
|
|
87
99
|
|
|
88
|
-
export function
|
|
100
|
+
export function defaultGitInvokerSync(): SyncGitInvoker {
|
|
89
101
|
return (cwd: string, args: string[]) => {
|
|
90
102
|
const result = launchProcessSync("git", args, {
|
|
91
103
|
cwd,
|
|
@@ -93,10 +105,7 @@ export function defaultGitInvoker(): GitInvoker {
|
|
|
93
105
|
timeout: DEFAULT_GIT_TIMEOUT_MS,
|
|
94
106
|
shell: false,
|
|
95
107
|
});
|
|
96
|
-
if (result.error) {
|
|
97
|
-
// Spawn failure (git not on PATH, timeout, etc.). Surface as non-zero.
|
|
98
|
-
return { stdout: "", exitCode: 127 };
|
|
99
|
-
}
|
|
108
|
+
if (result.error) return { stdout: "", exitCode: 127 };
|
|
100
109
|
return {
|
|
101
110
|
stdout: typeof result.stdout === "string" ? result.stdout : "",
|
|
102
111
|
exitCode: typeof result.status === "number" ? result.status : 1,
|
|
@@ -104,6 +113,73 @@ export function defaultGitInvoker(): GitInvoker {
|
|
|
104
113
|
};
|
|
105
114
|
}
|
|
106
115
|
|
|
116
|
+
export function defaultGitInvoker(): GitInvoker {
|
|
117
|
+
return (cwd, args, options = {}) => {
|
|
118
|
+
if (options.abortSignal?.aborted) {
|
|
119
|
+
throw options.abortSignal.reason instanceof Error
|
|
120
|
+
? options.abortSignal.reason
|
|
121
|
+
: abortError("git context resolution aborted");
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const child = launchProcess("git", args, {
|
|
125
|
+
cwd,
|
|
126
|
+
encoding: "utf-8",
|
|
127
|
+
shell: false,
|
|
128
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
129
|
+
});
|
|
130
|
+
const { promise, resolve, reject } = Promise.withResolvers<GitInvokeResult>();
|
|
131
|
+
let stdout = "";
|
|
132
|
+
let settled = false;
|
|
133
|
+
let timer: NodeJS.Timeout | undefined;
|
|
134
|
+
|
|
135
|
+
const cleanup = (): void => {
|
|
136
|
+
clearTimeout(timer);
|
|
137
|
+
options.abortSignal?.removeEventListener("abort", onAbort);
|
|
138
|
+
};
|
|
139
|
+
const finish = (result: GitInvokeResult): void => {
|
|
140
|
+
if (settled) return;
|
|
141
|
+
settled = true;
|
|
142
|
+
cleanup();
|
|
143
|
+
resolve(result);
|
|
144
|
+
};
|
|
145
|
+
const fail = (error: Error): void => {
|
|
146
|
+
if (settled) return;
|
|
147
|
+
settled = true;
|
|
148
|
+
cleanup();
|
|
149
|
+
reject(error);
|
|
150
|
+
};
|
|
151
|
+
const onAbort = (): void => {
|
|
152
|
+
child.kill("SIGTERM");
|
|
153
|
+
fail(
|
|
154
|
+
options.abortSignal?.reason instanceof Error
|
|
155
|
+
? options.abortSignal.reason
|
|
156
|
+
: abortError("git context resolution aborted"),
|
|
157
|
+
);
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
child.stdout?.setEncoding("utf-8");
|
|
161
|
+
child.stdout?.on("data", (chunk: string | Buffer) => {
|
|
162
|
+
stdout += chunk.toString();
|
|
163
|
+
});
|
|
164
|
+
child.once("error", () => finish({ stdout: "", exitCode: 127 }));
|
|
165
|
+
child.once("close", (exitCode: number | null) => {
|
|
166
|
+
finish({ stdout, exitCode: typeof exitCode === "number" ? exitCode : 1 });
|
|
167
|
+
});
|
|
168
|
+
options.abortSignal?.addEventListener("abort", onAbort, { once: true });
|
|
169
|
+
|
|
170
|
+
const timeoutMs = Math.max(
|
|
171
|
+
1,
|
|
172
|
+
Math.min(DEFAULT_GIT_TIMEOUT_MS, options.timeoutMs ?? DEFAULT_GIT_TIMEOUT_MS),
|
|
173
|
+
);
|
|
174
|
+
timer = setTimeout(() => {
|
|
175
|
+
child.kill("SIGTERM");
|
|
176
|
+
finish({ stdout: "", exitCode: 124 });
|
|
177
|
+
}, timeoutMs);
|
|
178
|
+
if (options.abortSignal?.aborted) onAbort();
|
|
179
|
+
return promise;
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
|
|
107
183
|
// ──────────────────────────────────────────────────────────────────────────
|
|
108
184
|
// Stable hashing
|
|
109
185
|
// ──────────────────────────────────────────────────────────────────────────
|
|
@@ -239,17 +315,21 @@ export function normalizeOriginUrl(rawUrl: string): string {
|
|
|
239
315
|
export interface ResolveGitContextOptions {
|
|
240
316
|
/** Inject a git invoker (tests). Defaults to spawning real `git`. */
|
|
241
317
|
invoker?: GitInvoker;
|
|
318
|
+
abortSignal?: AbortSignal;
|
|
319
|
+
/** Absolute epoch deadline shared with the extraction lifecycle. */
|
|
320
|
+
deadlineMs?: number;
|
|
321
|
+
/** Injectable clock for deadline tests. */
|
|
322
|
+
now?: () => number;
|
|
242
323
|
}
|
|
243
324
|
|
|
244
325
|
/**
|
|
245
326
|
* Detect the git project + branch for `cwd`.
|
|
246
327
|
*
|
|
247
|
-
* Returns `null` when
|
|
248
|
-
*
|
|
249
|
-
* - `cwd` is not inside a git worktree
|
|
250
|
-
* - `git` is not available on PATH
|
|
328
|
+
* Returns `null` when `cwd` is invalid, outside a worktree, or git is
|
|
329
|
+
* unavailable. Unexpected command failures also resolve to `null`.
|
|
251
330
|
*
|
|
252
|
-
*
|
|
331
|
+
* Caller cancellation and an exhausted deadline reject so lifecycle callers
|
|
332
|
+
* can stop promptly instead of treating an interrupted probe as "not a repo".
|
|
253
333
|
*/
|
|
254
334
|
export async function resolveGitContext(
|
|
255
335
|
cwd: string,
|
|
@@ -272,9 +352,24 @@ export async function resolveGitContext(
|
|
|
272
352
|
if (!path.isAbsolute(expanded)) return null;
|
|
273
353
|
|
|
274
354
|
const invoker = options.invoker ?? defaultGitInvoker();
|
|
355
|
+
const now = options.now ?? Date.now;
|
|
356
|
+
const invoke = async (probeCwd: string, args: string[]): Promise<GitInvokeResult> => {
|
|
357
|
+
if (options.abortSignal?.aborted) {
|
|
358
|
+
throw options.abortSignal.reason instanceof Error
|
|
359
|
+
? options.abortSignal.reason
|
|
360
|
+
: abortError("git context resolution aborted");
|
|
361
|
+
}
|
|
362
|
+
const remainingMs =
|
|
363
|
+
options.deadlineMs === undefined ? DEFAULT_GIT_TIMEOUT_MS : options.deadlineMs - now();
|
|
364
|
+
if (remainingMs <= 0) throw abortError("git context resolution deadline exceeded");
|
|
365
|
+
return invoker(probeCwd, args, {
|
|
366
|
+
abortSignal: options.abortSignal,
|
|
367
|
+
timeoutMs: Math.min(DEFAULT_GIT_TIMEOUT_MS, remainingMs),
|
|
368
|
+
});
|
|
369
|
+
};
|
|
275
370
|
|
|
276
371
|
// 1. Locate the repo root.
|
|
277
|
-
const topLevel =
|
|
372
|
+
const topLevel = await invoke(expanded, ["rev-parse", "--show-toplevel"]);
|
|
278
373
|
if (topLevel.exitCode !== 0) return null;
|
|
279
374
|
const rootPath = topLevel.stdout.trim();
|
|
280
375
|
if (!rootPath) return null;
|
|
@@ -284,13 +379,13 @@ export async function resolveGitContext(
|
|
|
284
379
|
// HEAD ref is unborn and `--abbrev-ref HEAD` fails, but
|
|
285
380
|
// `symbolic-ref HEAD` still returns the target branch. Fall back
|
|
286
381
|
// so newly-initialized repos get a sensible branch name.
|
|
287
|
-
const branchResult =
|
|
382
|
+
const branchResult = await invoke(rootPath, ["rev-parse", "--abbrev-ref", "HEAD"]);
|
|
288
383
|
let branch: string | null = null;
|
|
289
384
|
if (branchResult.exitCode === 0) {
|
|
290
385
|
const raw = branchResult.stdout.trim();
|
|
291
386
|
branch = raw && raw !== "HEAD" ? raw : null;
|
|
292
387
|
} else {
|
|
293
|
-
const unbornRef =
|
|
388
|
+
const unbornRef = await invoke(rootPath, ["symbolic-ref", "--quiet", "HEAD"]);
|
|
294
389
|
if (unbornRef.exitCode === 0) {
|
|
295
390
|
const raw = unbornRef.stdout.trim();
|
|
296
391
|
const prefix = "refs/heads/";
|
|
@@ -302,7 +397,7 @@ export async function resolveGitContext(
|
|
|
302
397
|
}
|
|
303
398
|
|
|
304
399
|
// 3. Origin URL — optional. Used to derive a stable `projectId`.
|
|
305
|
-
const originResult =
|
|
400
|
+
const originResult = await invoke(rootPath, ["remote", "get-url", "origin"]);
|
|
306
401
|
let projectId: string;
|
|
307
402
|
if (originResult.exitCode === 0) {
|
|
308
403
|
const normalized = normalizeOriginUrl(originResult.stdout);
|
|
@@ -312,7 +407,7 @@ export async function resolveGitContext(
|
|
|
312
407
|
}
|
|
313
408
|
|
|
314
409
|
// 4. Default branch — best effort.
|
|
315
|
-
const headRef =
|
|
410
|
+
const headRef = await invoke(rootPath, ["symbolic-ref", "--quiet", "refs/remotes/origin/HEAD"]);
|
|
316
411
|
let defaultBranch: string | null = null;
|
|
317
412
|
if (headRef.exitCode === 0) {
|
|
318
413
|
const raw = headRef.stdout.trim();
|
|
@@ -330,7 +425,14 @@ export async function resolveGitContext(
|
|
|
330
425
|
defaultBranch,
|
|
331
426
|
};
|
|
332
427
|
} catch {
|
|
333
|
-
|
|
428
|
+
if (options.abortSignal?.aborted) {
|
|
429
|
+
throw options.abortSignal.reason instanceof Error
|
|
430
|
+
? options.abortSignal.reason
|
|
431
|
+
: abortError("git context resolution aborted");
|
|
432
|
+
}
|
|
433
|
+
if (options.deadlineMs !== undefined && (options.now ?? Date.now)() >= options.deadlineMs) {
|
|
434
|
+
throw abortError("git context resolution deadline exceeded");
|
|
435
|
+
}
|
|
334
436
|
return null;
|
|
335
437
|
}
|
|
336
438
|
}
|
package/src/config.test.ts
CHANGED
|
@@ -533,6 +533,30 @@ test("parseConfig initGateTimeoutMs defaults to OpenClaw cold-start budget", ()
|
|
|
533
533
|
assert.equal(result.initGateTimeoutMs, 30_000);
|
|
534
534
|
});
|
|
535
535
|
|
|
536
|
+
test("parseConfig keeps external wiki merge out of default recall", () => {
|
|
537
|
+
assert.equal(parseConfig({}).wikiMergeIntoRecall, false);
|
|
538
|
+
assert.equal(parseConfig({ wikiMergeIntoRecall: false }).wikiMergeIntoRecall, false);
|
|
539
|
+
assert.throws(
|
|
540
|
+
() => parseConfig({ wikiMergeIntoRecall: true }),
|
|
541
|
+
/wikiMergeIntoRecall=true is not supported/,
|
|
542
|
+
);
|
|
543
|
+
assert.throws(
|
|
544
|
+
() => parseConfig({ wikiMergeIntoRecall: "maybe" }),
|
|
545
|
+
/wikiMergeIntoRecall must be a boolean-like value/,
|
|
546
|
+
);
|
|
547
|
+
});
|
|
548
|
+
|
|
549
|
+
test("parseConfig rejects external wiki collections as default memory collections", () => {
|
|
550
|
+
assert.throws(
|
|
551
|
+
() => parseConfig({ qmdCollection: "external-wiki-reading" }),
|
|
552
|
+
/qmdCollection must be a memory collection/,
|
|
553
|
+
);
|
|
554
|
+
assert.throws(
|
|
555
|
+
() => parseConfig({ qmdColdCollection: "external-wiki-archive" }),
|
|
556
|
+
/qmdColdCollection must be a memory collection/,
|
|
557
|
+
);
|
|
558
|
+
});
|
|
559
|
+
|
|
536
560
|
test("parseConfig qmdSearchStrategy defaults to hybrid and validates the enum", () => {
|
|
537
561
|
// Default must equal the historical lex+vec+hyde behavior. Issue #1335.
|
|
538
562
|
assert.equal(parseConfig({}).qmdSearchStrategy, "hybrid");
|
package/src/config.ts
CHANGED
|
@@ -27,6 +27,7 @@ import type {
|
|
|
27
27
|
TrustWeights,
|
|
28
28
|
} from "./types.js";
|
|
29
29
|
import { parseConvergeConfig } from "./converge-config.js";
|
|
30
|
+
import { parseExternalWikiRecallGuard } from "./external-wiki-guard.js";
|
|
30
31
|
import { log } from "./logger.js";
|
|
31
32
|
import { cloneDefaultSessionObserverBands } from "./session-observer-bands.js";
|
|
32
33
|
import { readEnvVar, resolveHomeDir } from "./runtime/env.js";
|
|
@@ -62,6 +63,7 @@ import { parseCodingKnowledgeConfig } from "./coding/coding-knowledge-config.js"
|
|
|
62
63
|
import { parseChatConfig } from "./chat/chat-config.js";
|
|
63
64
|
import { parseCorrectionIntentConfig, parseFaithfulnessGateConfig } from "./faithfulness-config.js";
|
|
64
65
|
import { parseOfflineSyncExcludes } from "./offline-sync.js";
|
|
66
|
+
import { parseExternalWikiRoots } from "./external-wiki-config.js";
|
|
65
67
|
import {
|
|
66
68
|
parseScopeProfiles,
|
|
67
69
|
parseScopeTeams,
|
|
@@ -1558,6 +1560,9 @@ export function parseConfig(
|
|
|
1558
1560
|
"maintenance.namespaceLockStaleMs",
|
|
1559
1561
|
);
|
|
1560
1562
|
|
|
1563
|
+
const { wikiMergeIntoRecall, qmdCollection, qmdColdCollection } =
|
|
1564
|
+
parseExternalWikiRecallGuard(cfg);
|
|
1565
|
+
|
|
1561
1566
|
return {
|
|
1562
1567
|
openaiApiKey: apiKey,
|
|
1563
1568
|
openaiBaseUrl: baseUrl,
|
|
@@ -1608,13 +1613,8 @@ export function parseConfig(
|
|
|
1608
1613
|
typeof cfg.maxMemoryTokens === "number" ? cfg.maxMemoryTokens : 2000,
|
|
1609
1614
|
memoryOsPreset,
|
|
1610
1615
|
qmdEnabled: cfg.qmdEnabled !== false,
|
|
1611
|
-
qmdCollection
|
|
1612
|
-
|
|
1613
|
-
? cfg.qmdCollection
|
|
1614
|
-
// TODO(#403): Keep legacy collection name for backwards compat so existing
|
|
1615
|
-
// installs don't lose their QMD vector store data on upgrade. New installs
|
|
1616
|
-
// can override via qmdCollection config. Consider migrating in a future PR.
|
|
1617
|
-
: "openclaw-engram",
|
|
1616
|
+
qmdCollection,
|
|
1617
|
+
wikiMergeIntoRecall,
|
|
1618
1618
|
qmdMaxResults:
|
|
1619
1619
|
typeof cfg.qmdMaxResults === "number" ? cfg.qmdMaxResults : 8,
|
|
1620
1620
|
qmdEmbeddingBacklogThreshold: (() => {
|
|
@@ -1627,11 +1627,7 @@ export function parseConfig(
|
|
|
1627
1627
|
return Number.isFinite(n) && Number.isInteger(n) && n >= 0 ? n : 1000;
|
|
1628
1628
|
})(),
|
|
1629
1629
|
qmdColdTierEnabled: cfg.qmdColdTierEnabled === true,
|
|
1630
|
-
qmdColdCollection
|
|
1631
|
-
typeof cfg.qmdColdCollection === "string" && cfg.qmdColdCollection.length > 0
|
|
1632
|
-
? cfg.qmdColdCollection
|
|
1633
|
-
// TODO(#403): Keep legacy collection name for backwards compat.
|
|
1634
|
-
: "openclaw-engram-cold",
|
|
1630
|
+
qmdColdCollection,
|
|
1635
1631
|
qmdColdMaxResults:
|
|
1636
1632
|
typeof cfg.qmdColdMaxResults === "number" ? cfg.qmdColdMaxResults : 8,
|
|
1637
1633
|
// Issue #678 PR 2/4: gate hot/cold tier migration (a deep-sleep activity)
|
|
@@ -1705,6 +1701,7 @@ export function parseConfig(
|
|
|
1705
1701
|
? cfg.qmdPath
|
|
1706
1702
|
: undefined,
|
|
1707
1703
|
memoryDir,
|
|
1704
|
+
externalWikis: parseExternalWikiRoots(cfg.externalWikis, memoryDir),
|
|
1708
1705
|
debug: cfg.debug === true,
|
|
1709
1706
|
identityEnabled: cfg.identityEnabled !== false,
|
|
1710
1707
|
identityContinuityEnabled,
|
|
@@ -16,9 +16,11 @@ import path from "node:path";
|
|
|
16
16
|
import test from "node:test";
|
|
17
17
|
|
|
18
18
|
import { EngramMcpServer } from "./access-mcp.js";
|
|
19
|
+
import { getOperation } from "./access-boundary.js";
|
|
19
20
|
import { memoryStoreOperation } from "./access-operations.js";
|
|
20
21
|
import type {
|
|
21
22
|
EngramAccessMemoryStoreRequest,
|
|
23
|
+
EngramAccessRecallRequest,
|
|
22
24
|
EngramAccessService,
|
|
23
25
|
EngramAccessWriteResponse,
|
|
24
26
|
} from "./access-service.js";
|
|
@@ -117,6 +119,26 @@ test("memory_store via MCP with no sourceConnector (operator) → service receiv
|
|
|
117
119
|
);
|
|
118
120
|
});
|
|
119
121
|
|
|
122
|
+
test("recall operation forwards only the server-resolved connector", async () => {
|
|
123
|
+
const captured: EngramAccessRecallRequest[] = [];
|
|
124
|
+
const service = {
|
|
125
|
+
recall: (request: EngramAccessRecallRequest) => {
|
|
126
|
+
captured.push(request);
|
|
127
|
+
return Promise.resolve({});
|
|
128
|
+
},
|
|
129
|
+
} as unknown as EngramAccessService;
|
|
130
|
+
const recallOperation = getOperation("recall");
|
|
131
|
+
assert.ok(recallOperation);
|
|
132
|
+
|
|
133
|
+
await recallOperation.run(
|
|
134
|
+
{ query: "shared namespace query", sourceConnector: "spoofed-client" },
|
|
135
|
+
{ service, sourceConnector: "chatgpt" },
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
assert.equal(captured.length, 1);
|
|
139
|
+
assert.equal(captured[0]?.sourceConnector, "chatgpt");
|
|
140
|
+
});
|
|
141
|
+
|
|
120
142
|
// ---------------------------------------------------------------------------
|
|
121
143
|
// Test 4: client-supplied sourceConnector in args is IGNORED
|
|
122
144
|
// ---------------------------------------------------------------------------
|
|
@@ -217,3 +239,82 @@ test("StorageManager.writeMemory without sourceConnector → frontmatter omits i
|
|
|
217
239
|
await rm(baseDir, { recursive: true, force: true });
|
|
218
240
|
}
|
|
219
241
|
});
|
|
242
|
+
|
|
243
|
+
test("StorageManager classifies connector-attributed tool memories at write time", async () => {
|
|
244
|
+
StorageManager.clearAllStaticCaches();
|
|
245
|
+
const baseDir = await mkdtemp(path.join(os.tmpdir(), "prov-tool-scope-"));
|
|
246
|
+
try {
|
|
247
|
+
const storage = new StorageManager(baseDir);
|
|
248
|
+
await storage.ensureDirectories();
|
|
249
|
+
|
|
250
|
+
const { id } = await storage.writeMemory(
|
|
251
|
+
"fact",
|
|
252
|
+
"Use the search tool with a path argument.",
|
|
253
|
+
{ sourceConnector: "chatgpt" },
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
assert.equal((await storage.getMemoryById(id))?.frontmatter.toolScoped, true);
|
|
257
|
+
} finally {
|
|
258
|
+
StorageManager.clearAllStaticCaches();
|
|
259
|
+
await rm(baseDir, { recursive: true, force: true });
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
test("StorageManager leaves unattributed tool-like memories unpartitioned", async () => {
|
|
264
|
+
StorageManager.clearAllStaticCaches();
|
|
265
|
+
const baseDir = await mkdtemp(path.join(os.tmpdir(), "prov-tool-scope-"));
|
|
266
|
+
try {
|
|
267
|
+
const storage = new StorageManager(baseDir);
|
|
268
|
+
await storage.ensureDirectories();
|
|
269
|
+
|
|
270
|
+
const { id } = await storage.writeMemory(
|
|
271
|
+
"fact",
|
|
272
|
+
"Use the search tool with a path argument.",
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
assert.equal((await storage.getMemoryById(id))?.frontmatter.toolScoped, undefined);
|
|
276
|
+
} finally {
|
|
277
|
+
StorageManager.clearAllStaticCaches();
|
|
278
|
+
await rm(baseDir, { recursive: true, force: true });
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
test("StorageManager preserves an explicit structured tool classification", async () => {
|
|
283
|
+
StorageManager.clearAllStaticCaches();
|
|
284
|
+
const baseDir = await mkdtemp(path.join(os.tmpdir(), "prov-tool-scope-"));
|
|
285
|
+
try {
|
|
286
|
+
const storage = new StorageManager(baseDir);
|
|
287
|
+
await storage.ensureDirectories();
|
|
288
|
+
|
|
289
|
+
const { id } = await storage.writeMemory(
|
|
290
|
+
"procedure",
|
|
291
|
+
"Workflow for locating an implementation",
|
|
292
|
+
{ sourceConnector: "chatgpt", toolScoped: true },
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
assert.equal((await storage.getMemoryById(id))?.frontmatter.toolScoped, true);
|
|
296
|
+
} finally {
|
|
297
|
+
StorageManager.clearAllStaticCaches();
|
|
298
|
+
await rm(baseDir, { recursive: true, force: true });
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
test("StorageManager preserves connector partition metadata on artifacts", async () => {
|
|
302
|
+
StorageManager.clearAllStaticCaches();
|
|
303
|
+
const baseDir = await mkdtemp(path.join(os.tmpdir(), "prov-artifact-tool-scope-"));
|
|
304
|
+
try {
|
|
305
|
+
const storage = new StorageManager(baseDir);
|
|
306
|
+
await storage.ensureDirectories();
|
|
307
|
+
const id = await storage.writeArtifact("Use the search tool with a path argument.", {
|
|
308
|
+
sourceConnector: "chatgpt",
|
|
309
|
+
toolScoped: true,
|
|
310
|
+
});
|
|
311
|
+
const artifact = (await storage.searchArtifacts("search tool", 10)).find(
|
|
312
|
+
(candidate) => candidate.frontmatter.id === id,
|
|
313
|
+
);
|
|
314
|
+
assert.equal(artifact?.frontmatter.sourceConnector, "chatgpt");
|
|
315
|
+
assert.equal(artifact?.frontmatter.toolScoped, true);
|
|
316
|
+
} finally {
|
|
317
|
+
StorageManager.clearAllStaticCaches();
|
|
318
|
+
await rm(baseDir, { recursive: true, force: true });
|
|
319
|
+
}
|
|
320
|
+
});
|
|
@@ -27,6 +27,7 @@ import type { StorageManager } from "./storage.js";
|
|
|
27
27
|
import type { VersioningConfig } from "./page-versioning.js";
|
|
28
28
|
import { bumpMemoryCorpusVersionForDir } from "./memory-corpus-version.js";
|
|
29
29
|
import { requestEntityCanonicalIdReconcile } from "./storage/entity-canonical-id-references.js";
|
|
30
|
+
import { withRawEntityPageMutation } from "./storage/entity-canonical-id-lock.js";
|
|
30
31
|
import { getVersion } from "./page-versioning.js";
|
|
31
32
|
|
|
32
33
|
/**
|
|
@@ -643,6 +644,7 @@ export async function runConsolidationUndo(options: {
|
|
|
643
644
|
}
|
|
644
645
|
try {
|
|
645
646
|
await mkdir(path.dirname(p.sourcePath), { recursive: true });
|
|
647
|
+
await withRawEntityPageMutation(memoryDir, p.sourcePath, async () => {
|
|
646
648
|
// Use exclusive create (wx / O_EXCL) so that if another process
|
|
647
649
|
// recreates the source file between planning and execution, this
|
|
648
650
|
// write fails with EEXIST instead of silently overwriting the new
|
|
@@ -658,6 +660,7 @@ export async function runConsolidationUndo(options: {
|
|
|
658
660
|
// Restored bytes predate the current migration journal and can carry
|
|
659
661
|
// legacy entity references (issue #2213) — request one reconcile pass.
|
|
660
662
|
await requestEntityCanonicalIdReconcile(path.join(memoryDir, "state"));
|
|
663
|
+
});
|
|
661
664
|
result.restores.push({
|
|
662
665
|
entry: p.entry,
|
|
663
666
|
sourcePath: p.sourcePath,
|
|
@@ -9,12 +9,24 @@ type ConvergenceStorage = NonNullable<RebuildMemoryProjectionOptions["storage"]>
|
|
|
9
9
|
export async function refreshConvergedNamespaces(
|
|
10
10
|
namespaces: readonly string[],
|
|
11
11
|
namespaceSearchRouter: Pick<NamespaceSearchRouter, "updateNamespacesDetailed">,
|
|
12
|
-
getStorage: (namespace: string) => Promise<ConvergenceStorage
|
|
12
|
+
getStorage: (namespace: string) => Promise<ConvergenceStorage>,
|
|
13
|
+
searchEnabled: boolean,
|
|
13
14
|
): Promise<void> {
|
|
14
15
|
const targetNamespaces = Array.from(new Set(namespaces.map((namespace) => namespace.trim()).filter(Boolean)));
|
|
15
16
|
if (targetNamespaces.length === 0) return;
|
|
16
17
|
|
|
17
|
-
await namespaceSearchRouter.updateNamespacesDetailed(
|
|
18
|
+
const searchResult = await namespaceSearchRouter.updateNamespacesDetailed(
|
|
19
|
+
targetNamespaces,
|
|
20
|
+
undefined,
|
|
21
|
+
{ strict: true },
|
|
22
|
+
);
|
|
23
|
+
if (searchEnabled) {
|
|
24
|
+
const eligible = new Set(searchResult.eligibleNamespaces);
|
|
25
|
+
const skipped = targetNamespaces.filter((namespace) => !eligible.has(namespace));
|
|
26
|
+
if (skipped.length > 0) {
|
|
27
|
+
throw new Error(`search refresh skipped namespaces: ${skipped.join(", ")}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
18
30
|
|
|
19
31
|
for (const namespace of targetNamespaces) {
|
|
20
32
|
const storage = await getStorage(namespace);
|
|
@@ -25,7 +25,8 @@ import { throwIfAborted } from "../abort-error.js";
|
|
|
25
25
|
import { composeMemoryEnvelope, isMemoryCategory } from "../write-envelope.js";
|
|
26
26
|
import { log } from "../logger.js";
|
|
27
27
|
import { createHash } from "node:crypto";
|
|
28
|
-
import {
|
|
28
|
+
import { REDACTION_RULES_SUBDIR } from "../extraction-redaction-rules.js";
|
|
29
|
+
import { writeFileAtomically } from "../maintenance/atomic-file.js";
|
|
29
30
|
import type { Orchestrator } from "../orchestrator.js";
|
|
30
31
|
import type { MemoryFile, MemoryStatus, PluginConfig } from "../types.js";
|
|
31
32
|
import { stripAttributesSuffix } from "../structured-attributes.js";
|
|
@@ -568,6 +569,7 @@ async function rescopeMemoryFn(
|
|
|
568
569
|
...(fm.entityRef ? { entityRef: fm.entityRef } : {}),
|
|
569
570
|
...(fm.structuredAttributes ? { structuredAttributes: fm.structuredAttributes } : {}),
|
|
570
571
|
...(fm.valid_at ? { validAt: fm.valid_at } : {}),
|
|
572
|
+
...(fm.sourceConnector ? { sourceConnector: fm.sourceConnector } : {}),
|
|
571
573
|
},
|
|
572
574
|
{ source: `correction:rescope:${namespace}` },
|
|
573
575
|
{ salvage: true },
|
|
@@ -581,6 +583,7 @@ async function rescopeMemoryFn(
|
|
|
581
583
|
...(fm.memoryKind ? { memoryKind: fm.memoryKind } : {}),
|
|
582
584
|
...(Array.isArray(fm.links) ? { links: fm.links } : {}),
|
|
583
585
|
...(fm.intentGoal ? { intentGoal: fm.intentGoal } : {}),
|
|
586
|
+
...(fm.toolScoped ? { toolScoped: true as const } : {}),
|
|
584
587
|
});
|
|
585
588
|
if (destBlocked) {
|
|
586
589
|
// #1645: destination tombstone-blocked the rescope (pending_review). Don't
|
|
@@ -703,14 +706,14 @@ async function registerRedactionRuleFn(
|
|
|
703
706
|
namespace: string,
|
|
704
707
|
pattern: string,
|
|
705
708
|
abortSignal?: AbortSignal,
|
|
709
|
+
writeRule: (outputPath: string, content: string) => Promise<unknown> = writeFileAtomically,
|
|
706
710
|
): Promise<void> {
|
|
707
711
|
// Persist the redaction rule under state/ so extraction consults it the
|
|
708
712
|
// same way tombstones are consulted (route through the same chokepoint).
|
|
709
713
|
throwIfAborted(abortSignal, "correction apply aborted");
|
|
710
714
|
const storage = await wiring.orchestrator.getStorage(namespace);
|
|
711
715
|
throwIfAborted(abortSignal, "correction apply aborted");
|
|
712
|
-
const dir = path.join(storage.dir,
|
|
713
|
-
await mkdir(dir, { recursive: true });
|
|
716
|
+
const dir = path.join(storage.dir, REDACTION_RULES_SUBDIR);
|
|
714
717
|
throwIfAborted(abortSignal, "correction apply aborted");
|
|
715
718
|
// Idempotent: filename is a slug + short hash of the full pattern so
|
|
716
719
|
// re-registering the same pattern overwrites rather than duplicates, while
|
|
@@ -721,12 +724,10 @@ async function registerRedactionRuleFn(
|
|
|
721
724
|
const patternHash = createHash("sha256").update(pattern).digest("hex").slice(0, 16);
|
|
722
725
|
const slug = `${slugBase}-${patternHash}`;
|
|
723
726
|
throwIfAborted(abortSignal, "correction apply aborted");
|
|
724
|
-
await
|
|
727
|
+
await writeRule(
|
|
725
728
|
path.join(dir, `${slug}.json`),
|
|
726
729
|
`${JSON.stringify({ pattern, namespace, createdAt: new Date().toISOString() })}\n`,
|
|
727
|
-
"utf-8",
|
|
728
730
|
);
|
|
729
|
-
throwIfAborted(abortSignal, "correction apply aborted");
|
|
730
731
|
}
|
|
731
732
|
|
|
732
733
|
async function appendAuditRecordFn(
|
|
@@ -761,7 +762,6 @@ async function appendAuditRecordFn(
|
|
|
761
762
|
),
|
|
762
763
|
{},
|
|
763
764
|
);
|
|
764
|
-
throwIfAborted(abortSignal, "correction apply aborted");
|
|
765
765
|
return id;
|
|
766
766
|
}
|
|
767
767
|
|
|
@@ -1081,6 +1081,8 @@ export {
|
|
|
1081
1081
|
isEligibleCorrectionCandidate,
|
|
1082
1082
|
applyEditMemory,
|
|
1083
1083
|
appendTombstoneFn,
|
|
1084
|
+
appendAuditRecordFn,
|
|
1085
|
+
registerRedactionRuleFn,
|
|
1084
1086
|
retireMemoryFn,
|
|
1085
1087
|
rescopeMemoryFn,
|
|
1086
1088
|
writeReplacementMemory,
|