@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
|
@@ -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, ...(ctx.sourceConnector ? { 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
|
}
|
|
@@ -1265,6 +1265,52 @@ test("offlineSyncFiles reports symlink requested paths as input errors", async (
|
|
|
1265
1265
|
}
|
|
1266
1266
|
});
|
|
1267
1267
|
|
|
1268
|
+
test("offlineSyncSnapshot and stream expose durable namespace deletion revisions", async () => {
|
|
1269
|
+
const root = await mkdtemp(path.join(os.tmpdir(), "remnic-offline-snapshot-deletions-"));
|
|
1270
|
+
try {
|
|
1271
|
+
const relPath = "facts/deleted.md";
|
|
1272
|
+
const filePath = path.join(root, relPath);
|
|
1273
|
+
await mkdir(path.dirname(filePath), { recursive: true });
|
|
1274
|
+
await writeFile(filePath, "deleted content");
|
|
1275
|
+
const storage = new StorageManager(root);
|
|
1276
|
+
await storage.deleteOfflineSyncFile(filePath);
|
|
1277
|
+
const mtimeMs = (await storage.readDeletionRevisions()).get(relPath);
|
|
1278
|
+
assert.ok(mtimeMs !== undefined);
|
|
1279
|
+
|
|
1280
|
+
const { service } = makeService();
|
|
1281
|
+
(service as unknown as {
|
|
1282
|
+
orchestrator: {
|
|
1283
|
+
config: PluginConfig;
|
|
1284
|
+
getStorage(namespace: string): Promise<StorageManager>;
|
|
1285
|
+
};
|
|
1286
|
+
}).orchestrator.getStorage = async () => storage;
|
|
1287
|
+
|
|
1288
|
+
const snapshot = await service.offlineSyncSnapshot({
|
|
1289
|
+
namespace: "team",
|
|
1290
|
+
principal: "reader",
|
|
1291
|
+
includeContent: false,
|
|
1292
|
+
});
|
|
1293
|
+
const stream = await service.offlineSyncSnapshotStream({
|
|
1294
|
+
namespace: "team",
|
|
1295
|
+
principal: "reader",
|
|
1296
|
+
includeContent: false,
|
|
1297
|
+
});
|
|
1298
|
+
|
|
1299
|
+
assert.deepEqual(snapshot.deletions, [{ path: relPath, mtimeMs }]);
|
|
1300
|
+
assert.deepEqual(stream.deletions, snapshot.deletions);
|
|
1301
|
+
|
|
1302
|
+
await writeFile(filePath, "recreated content");
|
|
1303
|
+
const recreatedStream = await service.offlineSyncSnapshotStream({
|
|
1304
|
+
namespace: "team",
|
|
1305
|
+
principal: "reader",
|
|
1306
|
+
includeContent: false,
|
|
1307
|
+
});
|
|
1308
|
+
assert.deepEqual(recreatedStream.deletions, []);
|
|
1309
|
+
} finally {
|
|
1310
|
+
await rm(root, { recursive: true, force: true });
|
|
1311
|
+
}
|
|
1312
|
+
});
|
|
1313
|
+
|
|
1268
1314
|
test("offlineSyncSnapshot does not trust client base capture time for server fast-base scans", async () => {
|
|
1269
1315
|
const root = await mkdtemp(path.join(os.tmpdir(), "remnic-offline-snapshot-client-clock-"));
|
|
1270
1316
|
try {
|
|
@@ -1294,6 +1340,9 @@ test("offlineSyncSnapshot does not trust client base capture time for server fas
|
|
|
1294
1340
|
async drainPendingMemoryLifecycleEventsForSync() {
|
|
1295
1341
|
return { folded: false, pendingDeferred: false };
|
|
1296
1342
|
},
|
|
1343
|
+
async readDeletionRevisions() {
|
|
1344
|
+
return new Map<string, number>();
|
|
1345
|
+
},
|
|
1297
1346
|
async readOfflineSyncFile(targetPath: string) {
|
|
1298
1347
|
return readFile(targetPath);
|
|
1299
1348
|
},
|
|
@@ -1358,6 +1407,9 @@ test("offlineSyncSnapshot drains pending recall-impression spills so a recorded
|
|
|
1358
1407
|
async drainPendingMemoryLifecycleEventsForSync() {
|
|
1359
1408
|
return { folded: false, pendingDeferred: false };
|
|
1360
1409
|
},
|
|
1410
|
+
async readDeletionRevisions() {
|
|
1411
|
+
return new Map<string, number>();
|
|
1412
|
+
},
|
|
1361
1413
|
async readOfflineSyncFile(targetPath: string) {
|
|
1362
1414
|
return readFile(targetPath);
|
|
1363
1415
|
},
|
|
@@ -1441,6 +1493,9 @@ test("offlineSyncSnapshot does NOT drain the global impression queue during a na
|
|
|
1441
1493
|
lifecycleDrainCalls += 1;
|
|
1442
1494
|
return { folded: false, pendingDeferred: false };
|
|
1443
1495
|
},
|
|
1496
|
+
async readDeletionRevisions() {
|
|
1497
|
+
return new Map<string, number>();
|
|
1498
|
+
},
|
|
1444
1499
|
async readOfflineSyncFile(targetPath: string) {
|
|
1445
1500
|
return readFile(targetPath);
|
|
1446
1501
|
},
|
|
@@ -35,7 +35,7 @@ interface ObserveProbe {
|
|
|
35
35
|
}>;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
function makeObserveProbe(memoryDir: string): ObserveProbe {
|
|
38
|
+
function makeObserveProbe(memoryDir: string, projectScope = true): ObserveProbe {
|
|
39
39
|
const contexts = new Map<string, CodingContext>();
|
|
40
40
|
const lcmCalls: ObserveProbe["lcmCalls"] = [];
|
|
41
41
|
const extractionCalls: ObserveProbe["extractionCalls"] = [];
|
|
@@ -47,7 +47,7 @@ function makeObserveProbe(memoryDir: string): ObserveProbe {
|
|
|
47
47
|
namespacePolicies: [
|
|
48
48
|
{ name: "pi-geek", readPrincipals: ["pi-geek"], writePrincipals: ["pi-geek"] },
|
|
49
49
|
],
|
|
50
|
-
codingMode: { projectScope
|
|
50
|
+
codingMode: { projectScope },
|
|
51
51
|
memoryDir,
|
|
52
52
|
// Disable objective-state snapshots so the probe doesn't need a writable
|
|
53
53
|
// storage backend — the idempotency contract under test is LCM + extraction.
|
|
@@ -274,6 +274,38 @@ test("#1649 review fix: rebinding the session's ambient coding context makes the
|
|
|
274
274
|
}
|
|
275
275
|
});
|
|
276
276
|
|
|
277
|
+
test("#2206 project-scope-off ignores ambient coding context in observe idempotency", async () => {
|
|
278
|
+
const memoryDir = mkdtempSync(join(tmpdir(), "remnic-observe-unscoped-replay-"));
|
|
279
|
+
try {
|
|
280
|
+
const probe = makeObserveProbe(memoryDir, false);
|
|
281
|
+
const service = new EngramAccessService(probe.orch);
|
|
282
|
+
const key = "observe-batch-unscoped-replay-#6";
|
|
283
|
+
const req = observeRequest({
|
|
284
|
+
idempotencyKey: key,
|
|
285
|
+
projectTag: "Acme/Webshop",
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
const first = await service.observe(req);
|
|
289
|
+
assert.equal(first.effectiveNamespace, "default");
|
|
290
|
+
assert.equal(first.scopeDebug?.codingOverlayApplied, false);
|
|
291
|
+
assert.equal(probe.contexts.size, 0, "disabled project scoping must not attach projectTag context");
|
|
292
|
+
probe.contexts.set(req.sessionKey, {
|
|
293
|
+
projectId: "tag:ignored-while-unscoped",
|
|
294
|
+
branch: "changed-branch",
|
|
295
|
+
rootPath: "/projects/ignored",
|
|
296
|
+
defaultBranch: "main",
|
|
297
|
+
});
|
|
298
|
+
assert.ok(probe.contexts.has(req.sessionKey), "the ambient context change must be injected");
|
|
299
|
+
|
|
300
|
+
const replay = await service.observe(req);
|
|
301
|
+
assert.equal(replay.idempotencyReplay, true);
|
|
302
|
+
assert.equal(probe.extractionCalls.length, 1);
|
|
303
|
+
assert.equal(probe.lcmCalls.length, 1);
|
|
304
|
+
} finally {
|
|
305
|
+
rmSync(memoryDir, { recursive: true, force: true });
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
|
|
277
309
|
test("#1649 review fix: projectTag observe replays correctly despite scope resolution side effects", async () => {
|
|
278
310
|
// The fingerprint folds in the RESOLVED writeNamespace (not the raw ambient
|
|
279
311
|
// context). resolveMemoryScopePlan seeds the session context from projectTag
|
|
@@ -34,7 +34,7 @@ import { EngramAccessForbiddenError } from "./access-errors.js";
|
|
|
34
34
|
import { Orchestrator } from "./orchestrator.js";
|
|
35
35
|
import { ExtractionDeadlineError } from "./orchestration/extraction-run.js";
|
|
36
36
|
import { SessionOwnershipError } from "./orchestration/session-context.js";
|
|
37
|
-
import type { EngramAccessObserveRequest } from "./access-service.js";
|
|
37
|
+
import type { EngramAccessObserveRequest, MemoryScopePlan } from "./access-service.js";
|
|
38
38
|
import {
|
|
39
39
|
combineNamespaces,
|
|
40
40
|
lcmSessionKeyForNamespace,
|
|
@@ -910,19 +910,28 @@ test("#2128: post-flush retained cleanup is best effort and receives lifecycle g
|
|
|
910
910
|
}]);
|
|
911
911
|
});
|
|
912
912
|
|
|
913
|
-
test("#2128: post-flush retained cleanup stops on abort or deadline", async () => {
|
|
913
|
+
test("#2128: post-flush retained cleanup stops on abort or deadline", async (t) => {
|
|
914
914
|
const probe = makeParityProbe(withSelfPolicyPrefix("pi-geek"));
|
|
915
|
-
(
|
|
916
|
-
|
|
917
|
-
|
|
915
|
+
let cleanupStarted: (() => void) | undefined;
|
|
916
|
+
const cleanupCalls: Array<{
|
|
917
|
+
sessionKey: string;
|
|
918
|
+
ownerPrincipal: string | undefined;
|
|
919
|
+
options: { abortSignal?: AbortSignal; deadlineMs?: number } | undefined;
|
|
920
|
+
}> = [];
|
|
921
|
+
Object.defineProperty(probe.orch, "buffer", {
|
|
922
|
+
configurable: true,
|
|
923
|
+
value: {
|
|
924
|
+
clearRetainedTurnsForSession: async (
|
|
918
925
|
sessionKey: string,
|
|
919
926
|
ownerPrincipal?: string,
|
|
920
927
|
options?: { abortSignal?: AbortSignal; deadlineMs?: number },
|
|
921
|
-
)
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
928
|
+
) => {
|
|
929
|
+
cleanupCalls.push({ sessionKey, ownerPrincipal, options });
|
|
930
|
+
cleanupStarted?.();
|
|
931
|
+
return new Promise<void>(() => {});
|
|
932
|
+
},
|
|
933
|
+
},
|
|
934
|
+
});
|
|
926
935
|
const service = new EngramAccessService(probe.orch);
|
|
927
936
|
const abortController = new AbortController();
|
|
928
937
|
setTimeout(() => abortController.abort(), 5).unref();
|
|
@@ -941,22 +950,173 @@ test("#2128: post-flush retained cleanup stops on abort or deadline", async () =
|
|
|
941
950
|
]),
|
|
942
951
|
/extraction force-flush aborted/,
|
|
943
952
|
);
|
|
953
|
+
assert.deepEqual(cleanupCalls[0], {
|
|
954
|
+
sessionKey: "pi-geek:cleanup-abort",
|
|
955
|
+
ownerPrincipal: "pi-geek",
|
|
956
|
+
options: { abortSignal: abortController.signal, deadlineMs: undefined },
|
|
957
|
+
});
|
|
944
958
|
|
|
959
|
+
const cleanupStartedPromise = new Promise<void>((resolve) => {
|
|
960
|
+
cleanupStarted = resolve;
|
|
961
|
+
});
|
|
962
|
+
t.mock.timers.enable({ apis: ["setTimeout", "Date"], now: 0 });
|
|
963
|
+
const deadlineFlush = service.extractionForceFlush({
|
|
964
|
+
sessionKey: "pi-geek:cleanup-deadline",
|
|
965
|
+
authenticatedPrincipal: "pi-geek",
|
|
966
|
+
deadlineMs: 5,
|
|
967
|
+
});
|
|
968
|
+
await Promise.race([
|
|
969
|
+
cleanupStartedPromise,
|
|
970
|
+
new Promise<never>((_resolve, reject) =>
|
|
971
|
+
setImmediate(() => reject(new Error("deadline cleanup did not start"))),
|
|
972
|
+
),
|
|
973
|
+
]);
|
|
974
|
+
assert.deepEqual(cleanupCalls[1], {
|
|
975
|
+
sessionKey: "pi-geek:cleanup-deadline",
|
|
976
|
+
ownerPrincipal: "pi-geek",
|
|
977
|
+
options: { abortSignal: undefined, deadlineMs: 5 },
|
|
978
|
+
});
|
|
979
|
+
t.mock.timers.tick(5);
|
|
945
980
|
await assert.rejects(
|
|
946
|
-
|
|
947
|
-
Promise.race([
|
|
948
|
-
service.extractionForceFlush({
|
|
949
|
-
sessionKey: "pi-geek:cleanup-deadline",
|
|
950
|
-
authenticatedPrincipal: "pi-geek",
|
|
951
|
-
deadlineMs: Date.now() + 5,
|
|
952
|
-
}),
|
|
953
|
-
new Promise<never>((_resolve, reject) =>
|
|
954
|
-
setTimeout(() => reject(new Error("deadline cleanup test timed out")), 100),
|
|
955
|
-
),
|
|
956
|
-
]),
|
|
981
|
+
deadlineFlush,
|
|
957
982
|
/replay extraction deadline exceeded \(retained_turn_cleanup\)/,
|
|
958
983
|
);
|
|
959
984
|
});
|
|
985
|
+
test("#2206: an expired force-flush deadline stops before scope resolution", async () => {
|
|
986
|
+
const probe = makeParityProbe({ namespacesEnabled: false } as Partial<PluginConfig>);
|
|
987
|
+
const service = new EngramAccessService(probe.orch);
|
|
988
|
+
let scopeResolutionStarted = false;
|
|
989
|
+
const internals = service as unknown as {
|
|
990
|
+
resolveMemoryScopePlan: (request: unknown) => Promise<never>;
|
|
991
|
+
};
|
|
992
|
+
internals.resolveMemoryScopePlan = async () => {
|
|
993
|
+
scopeResolutionStarted = true;
|
|
994
|
+
throw new Error("scope resolution must not start");
|
|
995
|
+
};
|
|
996
|
+
|
|
997
|
+
await assert.rejects(
|
|
998
|
+
service.extractionForceFlush({
|
|
999
|
+
sessionKey: "expired-scope-resolution",
|
|
1000
|
+
deadlineMs: 1,
|
|
1001
|
+
}),
|
|
1002
|
+
/scope_resolution/,
|
|
1003
|
+
);
|
|
1004
|
+
assert.equal(scopeResolutionStarted, false);
|
|
1005
|
+
});
|
|
1006
|
+
|
|
1007
|
+
test("#2206: abort during scope resolution cancels pre-resolution observe preparations", async () => {
|
|
1008
|
+
const probe = makeParityProbe(withSelfPolicyPrefix("pi-geek"));
|
|
1009
|
+
const service = new EngramAccessService(probe.orch);
|
|
1010
|
+
const abortController = new AbortController();
|
|
1011
|
+
let releaseObserveScope!: () => void;
|
|
1012
|
+
let signalObserveScopeStarted!: () => void;
|
|
1013
|
+
let signalFlushScopeStarted!: () => void;
|
|
1014
|
+
const observeScopeGate = new Promise<void>((resolve) => {
|
|
1015
|
+
releaseObserveScope = resolve;
|
|
1016
|
+
});
|
|
1017
|
+
const observeScopeStarted = new Promise<void>((resolve) => {
|
|
1018
|
+
signalObserveScopeStarted = resolve;
|
|
1019
|
+
});
|
|
1020
|
+
const flushScopeStarted = new Promise<void>((resolve) => {
|
|
1021
|
+
signalFlushScopeStarted = resolve;
|
|
1022
|
+
});
|
|
1023
|
+
const internals = service as unknown as {
|
|
1024
|
+
resolveMemoryScopePlan: (
|
|
1025
|
+
request: EngramAccessObserveRequest & { messages?: unknown },
|
|
1026
|
+
) => Promise<MemoryScopePlan>;
|
|
1027
|
+
};
|
|
1028
|
+
const resolveMemoryScopePlan = internals.resolveMemoryScopePlan.bind(service);
|
|
1029
|
+
internals.resolveMemoryScopePlan = async (request) => {
|
|
1030
|
+
if (request.messages !== undefined) {
|
|
1031
|
+
signalObserveScopeStarted();
|
|
1032
|
+
await observeScopeGate;
|
|
1033
|
+
return resolveMemoryScopePlan(request);
|
|
1034
|
+
}
|
|
1035
|
+
signalFlushScopeStarted();
|
|
1036
|
+
return new Promise<never>(() => {});
|
|
1037
|
+
};
|
|
1038
|
+
|
|
1039
|
+
const observe = service.observe(observeRequest({
|
|
1040
|
+
sessionKey: "pi-geek:abort-scope-resolution",
|
|
1041
|
+
namespace: "pi-geek",
|
|
1042
|
+
authenticatedPrincipal: "pi-geek",
|
|
1043
|
+
skipExtraction: false,
|
|
1044
|
+
}));
|
|
1045
|
+
await observeScopeStarted;
|
|
1046
|
+
const flush = service.extractionForceFlush({
|
|
1047
|
+
sessionKey: "pi-geek:abort-scope-resolution",
|
|
1048
|
+
namespace: "pi-geek",
|
|
1049
|
+
authenticatedPrincipal: "pi-geek",
|
|
1050
|
+
abortSignal: abortController.signal,
|
|
1051
|
+
});
|
|
1052
|
+
await flushScopeStarted;
|
|
1053
|
+
abortController.abort();
|
|
1054
|
+
|
|
1055
|
+
await assert.rejects(flush, /extraction force-flush aborted/);
|
|
1056
|
+
releaseObserveScope();
|
|
1057
|
+
const response = await observe;
|
|
1058
|
+
assert.equal(response.extractionQueued, false);
|
|
1059
|
+
assert.equal(probe.extractionCalls.length, 0);
|
|
1060
|
+
});
|
|
1061
|
+
|
|
1062
|
+
test("#2206: scope-resolution deadline cancels preparations by raw projectTag and cwd hints", async () => {
|
|
1063
|
+
const rawHintCases = [
|
|
1064
|
+
{ projectTag: "Acme/Webshop" },
|
|
1065
|
+
{ cwd: "/workspace/acme/webshop" },
|
|
1066
|
+
];
|
|
1067
|
+
|
|
1068
|
+
for (const rawHintCase of rawHintCases) {
|
|
1069
|
+
const probe = makeParityProbe(withSelfPolicyPrefix("pi-geek"));
|
|
1070
|
+
const service = new EngramAccessService(probe.orch);
|
|
1071
|
+
let releaseObserveScope!: () => void;
|
|
1072
|
+
let signalObserveScopeStarted!: () => void;
|
|
1073
|
+
let flushScopeStarted = false;
|
|
1074
|
+
const observeScopeGate = new Promise<void>((resolve) => {
|
|
1075
|
+
releaseObserveScope = resolve;
|
|
1076
|
+
});
|
|
1077
|
+
const observeScopeStarted = new Promise<void>((resolve) => {
|
|
1078
|
+
signalObserveScopeStarted = resolve;
|
|
1079
|
+
});
|
|
1080
|
+
const internals = service as unknown as {
|
|
1081
|
+
resolveMemoryScopePlan: (
|
|
1082
|
+
request: EngramAccessObserveRequest & { messages?: unknown },
|
|
1083
|
+
) => Promise<MemoryScopePlan>;
|
|
1084
|
+
};
|
|
1085
|
+
const resolveMemoryScopePlan = internals.resolveMemoryScopePlan.bind(service);
|
|
1086
|
+
internals.resolveMemoryScopePlan = async (request) => {
|
|
1087
|
+
if (request.messages !== undefined) {
|
|
1088
|
+
signalObserveScopeStarted();
|
|
1089
|
+
await observeScopeGate;
|
|
1090
|
+
return resolveMemoryScopePlan(request);
|
|
1091
|
+
}
|
|
1092
|
+
flushScopeStarted = true;
|
|
1093
|
+
throw new Error("scope resolution must not start");
|
|
1094
|
+
};
|
|
1095
|
+
|
|
1096
|
+
const observe = service.observe(observeRequest({
|
|
1097
|
+
sessionKey: "pi-geek:raw-hint-deadline",
|
|
1098
|
+
authenticatedPrincipal: "pi-geek",
|
|
1099
|
+
skipExtraction: false,
|
|
1100
|
+
...rawHintCase,
|
|
1101
|
+
}));
|
|
1102
|
+
await observeScopeStarted;
|
|
1103
|
+
await assert.rejects(
|
|
1104
|
+
service.extractionForceFlush({
|
|
1105
|
+
sessionKey: "pi-geek:raw-hint-deadline",
|
|
1106
|
+
authenticatedPrincipal: "pi-geek",
|
|
1107
|
+
deadlineMs: Date.now() - 1,
|
|
1108
|
+
...rawHintCase,
|
|
1109
|
+
}),
|
|
1110
|
+
/scope_resolution/,
|
|
1111
|
+
);
|
|
1112
|
+
assert.equal(flushScopeStarted, false);
|
|
1113
|
+
releaseObserveScope();
|
|
1114
|
+
const response = await observe;
|
|
1115
|
+
assert.equal(response.extractionQueued, false);
|
|
1116
|
+
assert.equal(probe.extractionCalls.length, 0);
|
|
1117
|
+
}
|
|
1118
|
+
});
|
|
1119
|
+
|
|
960
1120
|
test("#2128: aborted or expired extraction force-flush never touches a buffer", async () => {
|
|
961
1121
|
const probe = makeParityProbe(withSelfPolicyPrefix("pi-geek"));
|
|
962
1122
|
const service = new EngramAccessService(probe.orch);
|
|
@@ -981,7 +1141,7 @@ test("#2128: aborted or expired extraction force-flush never touches a buffer",
|
|
|
981
1141
|
}),
|
|
982
1142
|
(error: unknown) =>
|
|
983
1143
|
error instanceof EngramAccessInputError &&
|
|
984
|
-
error.message === "extraction
|
|
1144
|
+
error.message === "replay extraction deadline exceeded (scope_resolution)",
|
|
985
1145
|
);
|
|
986
1146
|
assert.equal(probe.extractionForceFlushCalls.length, 0);
|
|
987
1147
|
});
|
|
@@ -1017,7 +1177,7 @@ test("#2128: self-deps wires force-flush cancellation into the observe tracker",
|
|
|
1017
1177
|
}),
|
|
1018
1178
|
(error: unknown) =>
|
|
1019
1179
|
error instanceof EngramAccessInputError &&
|
|
1020
|
-
error.message === "extraction
|
|
1180
|
+
error.message === "replay extraction deadline exceeded (scope_resolution)",
|
|
1021
1181
|
);
|
|
1022
1182
|
assert.deepEqual(cancellations, [{
|
|
1023
1183
|
sessionKey: "pi-geek:cancel-hook",
|