@remnic/core 9.45.2 → 9.45.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abort-error.d.ts +2 -1
- package/dist/abort-error.js +3 -1
- package/dist/access-admin-ops-surface.d.ts +14 -10
- package/dist/access-admin-ops-surface.js +84 -76
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +14 -10
- package/dist/access-authorization-probe.js +85 -77
- package/dist/access-boundary.d.ts +15 -11
- package/dist/access-boundary.js +84 -76
- package/dist/access-citation-namespace.js +2 -2
- package/dist/access-cli.js +193 -181
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +16 -0
- package/dist/access-coding-context-resolution.js +13 -0
- package/dist/access-coding-context-resolution.js.map +1 -0
- package/dist/access-extraction-force-flush.d.ts +14 -10
- package/dist/access-extraction-force-flush.js +84 -76
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-lcm-compaction.d.ts +16 -12
- package/dist/access-http-lcm-compaction.js +3 -3
- package/dist/access-http-lifecycle-flush.d.ts +14 -10
- package/dist/access-http-lifecycle-flush.js +2 -2
- package/dist/access-http-offline-stream.d.ts +123 -0
- package/dist/access-http-offline-stream.js +10 -0
- package/dist/access-http-offline-stream.js.map +1 -0
- package/dist/access-http-query.js +84 -76
- package/dist/access-http.d.ts +15 -10
- package/dist/access-http.js +105 -92
- package/dist/access-identity-continuity-surface.d.ts +9 -8
- package/dist/access-identity-continuity-surface.js +84 -76
- package/dist/access-lcm-surface.d.ts +14 -10
- package/dist/access-lcm-surface.js +84 -76
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp.d.ts +14 -10
- package/dist/access-mcp.js +95 -83
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-5yZ4g6F8.d.ts → access-namespace-preflight-CWUDwB4M.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +84 -76
- package/dist/access-observe-helpers.d.ts +1 -0
- package/dist/access-observe-helpers.js +1 -1
- package/dist/access-observe-write-surface.d.ts +16 -10
- package/dist/access-observe-write-surface.js +84 -76
- package/dist/access-offline-manifest.d.ts +104 -0
- package/dist/access-offline-manifest.js +45 -0
- package/dist/access-offline-manifest.js.map +1 -0
- package/dist/access-operations-batch.js +86 -78
- package/dist/access-operations.d.ts +18 -14
- package/dist/access-operations.js +91 -80
- package/dist/access-recall-concurrency.d.ts +16 -26
- package/dist/access-recall-concurrency.js +86 -77
- package/dist/access-recall-response.d.ts +18 -14
- package/dist/access-recall-response.js +84 -76
- package/dist/access-recall-surface.d.ts +29 -24
- package/dist/access-recall-surface.js +84 -76
- package/dist/access-schema.d.ts +84 -84
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-CiJRsgAB.d.ts → access-service-CsU-ljFD.d.ts} +25 -16
- package/dist/access-service-helpers.d.ts +14 -10
- package/dist/access-service.d.ts +14 -10
- package/dist/access-service.js +84 -76
- package/dist/access-surface-catalog.d.ts +14 -10
- package/dist/access-surface-catalog.js +4 -0
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +4 -3
- package/dist/action-confidence.d.ts +2 -1
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +10 -8
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/registry.js +3 -3
- package/dist/{auto-sync-5OE5QOZB.js → auto-sync-UPTUVE4X.js} +6 -6
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-learner.js +1 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +9 -8
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +23 -22
- package/dist/buffer-surprise-report.d.ts +2 -1
- package/dist/buffer-turn-helpers.d.ts +2 -1
- package/dist/buffer.d.ts +3 -2
- package/dist/buffer.js +12 -11
- package/dist/bulk-import/index.d.ts +4 -3
- package/dist/calibration.d.ts +2 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/{capsule-merge-IDWJPCWK.js → capsule-merge-Q6AR3XL7.js} +67 -54
- package/dist/capsule-merge-Q6AR3XL7.js.map +1 -0
- package/dist/{catalog-scBmy0sO.d.ts → catalog-bctMURhN.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.d.ts +2 -1
- package/dist/causal-consolidation.js +27 -26
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.d.ts +2 -1
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-VUPTKTDV.js → chunk-2MRHJNWL.js} +3 -3
- package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
- package/dist/{chunk-5IVLTFOV.js → chunk-44N6ESJ4.js} +2 -2
- package/dist/{chunk-WOCNN776.js → chunk-4POAMKV6.js} +100 -41
- package/dist/chunk-4POAMKV6.js.map +1 -0
- package/dist/{chunk-HO3QBJEY.js → chunk-5546W5SI.js} +2 -2
- package/dist/{chunk-U7GW7NE7.js → chunk-5CEECY6P.js} +10 -10
- package/dist/{chunk-4UH4BTGK.js → chunk-5SNZSWWR.js} +82 -82
- package/dist/{chunk-6CZPDBJS.js → chunk-5U7ID3EZ.js} +3 -3
- package/dist/{chunk-GF22HWS2.js → chunk-6NNNURLK.js} +7 -7
- package/dist/chunk-773TRRGT.js +36 -0
- package/dist/chunk-773TRRGT.js.map +1 -0
- package/dist/chunk-7CITSYSH.js +242 -0
- package/dist/chunk-7CITSYSH.js.map +1 -0
- package/dist/{chunk-227UFSEQ.js → chunk-7RZJWZ46.js} +5 -5
- package/dist/{chunk-E5UK4VPE.js → chunk-7SHJHPTY.js} +5 -5
- package/dist/{chunk-UVIKWC7M.js → chunk-7YERSTN7.js} +17 -17
- package/dist/{chunk-DLVPUX7U.js → chunk-7YKVM5H3.js} +8 -6
- package/dist/chunk-7YKVM5H3.js.map +1 -0
- package/dist/{chunk-3CE77VAP.js → chunk-A4JMGKCD.js} +87 -74
- package/dist/chunk-A4JMGKCD.js.map +1 -0
- package/dist/chunk-A5KNZSNA.js +26 -0
- package/dist/chunk-A5KNZSNA.js.map +1 -0
- package/dist/{chunk-S2NCTZGJ.js → chunk-AJQ57VV3.js} +15 -15
- package/dist/chunk-AJQ57VV3.js.map +1 -0
- package/dist/{chunk-CUM2BBPN.js → chunk-AUMWZSE7.js} +19 -10
- package/dist/chunk-AUMWZSE7.js.map +1 -0
- package/dist/{chunk-XYTOI63Z.js → chunk-BGHFOD5A.js} +19 -11
- package/dist/chunk-BGHFOD5A.js.map +1 -0
- package/dist/{chunk-BUE5E2HL.js → chunk-BGLY7EEM.js} +5 -314
- package/dist/chunk-BGLY7EEM.js.map +1 -0
- package/dist/chunk-BIPBQQFI.js +44 -0
- package/dist/chunk-BIPBQQFI.js.map +1 -0
- package/dist/{chunk-S5SLVSVY.js → chunk-BQIFZ2MP.js} +5 -5
- package/dist/chunk-BTTPKDIL.js +34 -0
- package/dist/{chunk-PVGDJXVK.js.map → chunk-BTTPKDIL.js.map} +1 -1
- package/dist/{chunk-E53DSZEN.js → chunk-C26TE27X.js} +3 -3
- package/dist/{chunk-LZ4LDKHZ.js → chunk-CLB32OHM.js} +6 -6
- package/dist/{chunk-Q6IP2ARR.js → chunk-CSOYVTRX.js} +2 -2
- package/dist/{chunk-XOQSEF7X.js → chunk-CVILPI77.js} +6 -6
- package/dist/chunk-D3I2MCN7.js +29 -0
- package/dist/chunk-D3I2MCN7.js.map +1 -0
- package/dist/{chunk-A5OJCXZL.js → chunk-DSUAAZZX.js} +15 -4
- package/dist/chunk-DSUAAZZX.js.map +1 -0
- package/dist/{chunk-HREE4JHI.js → chunk-DYVMXPCF.js} +486 -287
- package/dist/chunk-DYVMXPCF.js.map +1 -0
- package/dist/{chunk-J7VGGECD.js → chunk-DZPFMQZ7.js} +1 -1
- package/dist/chunk-DZPFMQZ7.js.map +1 -0
- package/dist/{chunk-PDLBLTOK.js → chunk-EITZHSX6.js} +9 -9
- package/dist/{chunk-D3J5SLQK.js → chunk-EJHEWCGQ.js} +81 -20
- package/dist/chunk-EJHEWCGQ.js.map +1 -0
- package/dist/{chunk-WUNIWKY4.js → chunk-ELIL2A37.js} +6 -6
- package/dist/{chunk-E6PNLPGJ.js → chunk-FZP32336.js} +806 -470
- package/dist/chunk-FZP32336.js.map +1 -0
- package/dist/{chunk-4L6HUREQ.js → chunk-G7A5HLUS.js} +23 -17
- package/dist/chunk-G7A5HLUS.js.map +1 -0
- package/dist/{chunk-CINZGPSJ.js → chunk-GUMZC2BO.js} +2 -2
- package/dist/{chunk-H24WNPA2.js → chunk-GWFSVJ4P.js} +3 -3
- package/dist/{chunk-7XC2HX75.js → chunk-GYPQL6XN.js} +157 -16
- package/dist/chunk-GYPQL6XN.js.map +1 -0
- package/dist/{chunk-TSH56VPU.js → chunk-HAYSYUAB.js} +2 -2
- package/dist/{chunk-TDHTVMPG.js → chunk-HFPASSFV.js} +7 -2
- package/dist/chunk-HFPASSFV.js.map +1 -0
- package/dist/chunk-J2WC5LF4.js +395 -0
- package/dist/chunk-J2WC5LF4.js.map +1 -0
- package/dist/{chunk-PKNLM44P.js → chunk-JH6BPLOP.js} +9 -9
- package/dist/{chunk-KXB4VXHY.js → chunk-JIYDRBVZ.js} +2 -2
- package/dist/chunk-JV3C2MNQ.js +74 -0
- package/dist/chunk-JV3C2MNQ.js.map +1 -0
- package/dist/{chunk-AV5ZEH4M.js → chunk-KVJRXN2E.js} +2 -2
- package/dist/{chunk-JVLCVFQ4.js → chunk-KXEFRMCF.js} +3 -3
- package/dist/{chunk-WFTIGIIS.js → chunk-L6CQ7WIW.js} +5 -5
- package/dist/{chunk-EJUEXZHX.js → chunk-LLJMAULE.js} +2 -2
- package/dist/{chunk-N5Z4EVOR.js → chunk-LNEWDF2A.js} +36 -11
- package/dist/chunk-LNEWDF2A.js.map +1 -0
- package/dist/{chunk-AS7YMSL6.js → chunk-M23RF3LJ.js} +4 -4
- package/dist/{chunk-UYLMNVY6.js → chunk-MDISBSYA.js} +16 -9
- package/dist/chunk-MDISBSYA.js.map +1 -0
- package/dist/{chunk-3F2LKUMU.js → chunk-NIS256NW.js} +2 -2
- package/dist/{chunk-YIAA2X3D.js → chunk-NK5RGJ65.js} +3 -3
- package/dist/chunk-NLDVVWCL.js +84 -0
- package/dist/chunk-NLDVVWCL.js.map +1 -0
- package/dist/{chunk-OQ5PRDDS.js → chunk-NTOIP2E6.js} +6 -6
- package/dist/{chunk-HLPD7B7P.js → chunk-NUEQKLNB.js} +2 -2
- package/dist/{chunk-4J7G5SY4.js → chunk-NZBZ7IS2.js} +72 -24
- package/dist/chunk-NZBZ7IS2.js.map +1 -0
- package/dist/{chunk-3TBLDMJA.js → chunk-O4KMGRXE.js} +5 -2
- package/dist/chunk-O4KMGRXE.js.map +1 -0
- package/dist/{chunk-33PLLLL7.js → chunk-P7NGM24P.js} +6 -6
- package/dist/{chunk-7TWUCYER.js → chunk-PNRA7FAD.js} +7 -7
- package/dist/{chunk-5I4M26Q7.js → chunk-QBSFOKY6.js} +4 -4
- package/dist/{chunk-QJAQNXWI.js → chunk-QCECHYZL.js} +76 -79
- package/dist/chunk-QCECHYZL.js.map +1 -0
- package/dist/{chunk-P4DRWEYC.js → chunk-QVSBTCVP.js} +2 -2
- package/dist/{chunk-AAIUERNB.js → chunk-R5RFK3CB.js} +6 -6
- package/dist/{chunk-WDISJRMG.js → chunk-RMMVQQA6.js} +2 -2
- package/dist/{chunk-KWMXR7XS.js → chunk-S2V7RUCL.js} +8 -1
- package/dist/{chunk-KWMXR7XS.js.map → chunk-S2V7RUCL.js.map} +1 -1
- package/dist/{chunk-5SM35XZR.js → chunk-S5NZBKKQ.js} +2 -2
- package/dist/{chunk-VNA7W7QF.js → chunk-SVH57F5Z.js} +12 -4
- package/dist/chunk-SVH57F5Z.js.map +1 -0
- package/dist/{chunk-WIPEXG6R.js → chunk-SXIMQLGV.js} +2 -2
- package/dist/{chunk-RVLJEII5.js → chunk-SYUBB3WM.js} +256 -187
- package/dist/chunk-SYUBB3WM.js.map +1 -0
- package/dist/{chunk-OAEQLRCY.js → chunk-TN76AKO3.js} +5 -5
- package/dist/{chunk-QN25OCUF.js → chunk-TQ4GD737.js} +5 -5
- package/dist/{chunk-VCD4PSK2.js → chunk-TQZ4DVBC.js} +7 -4
- package/dist/chunk-TQZ4DVBC.js.map +1 -0
- package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
- package/dist/{chunk-DNWXFTLD.js → chunk-TYISDI6B.js} +2 -2
- package/dist/{chunk-4LMA77JH.js → chunk-U2VLVBBH.js} +3 -3
- package/dist/{chunk-5ZE7QHTK.js → chunk-ULVR5KG7.js} +5 -5
- package/dist/{chunk-NVRYW264.js → chunk-UQWIKLQK.js} +18 -15
- package/dist/chunk-UQWIKLQK.js.map +1 -0
- package/dist/{chunk-YV32N67O.js → chunk-URS5GSM7.js} +1 -1
- package/dist/chunk-URS5GSM7.js.map +1 -0
- package/dist/{chunk-4B77XSG5.js → chunk-UV72DEZD.js} +5 -5
- package/dist/{chunk-S2BBISHU.js → chunk-VANZKHTN.js} +3 -3
- package/dist/chunk-VHFXP27N.js +250 -0
- package/dist/chunk-VHFXP27N.js.map +1 -0
- package/dist/{chunk-3Y224NYC.js → chunk-VYISFWVX.js} +2 -2
- package/dist/{chunk-TIHMZFIV.js → chunk-W3IC7QOY.js} +3 -3
- package/dist/{chunk-NRV4Y3PM.js → chunk-W4FBGYGK.js} +1 -1
- package/dist/{chunk-P2BM76KT.js → chunk-WAS4HV46.js} +174 -43
- package/dist/chunk-WAS4HV46.js.map +1 -0
- package/dist/{chunk-57QKLRBV.js → chunk-WB7JSQCP.js} +2 -1
- package/dist/chunk-WB7JSQCP.js.map +1 -0
- package/dist/chunk-WGP57SR3.js +68 -0
- package/dist/chunk-WGP57SR3.js.map +1 -0
- package/dist/{chunk-ECK75GDJ.js → chunk-WQIHRA5F.js} +43 -24
- package/dist/chunk-WQIHRA5F.js.map +1 -0
- package/dist/{chunk-MU7ZHSZE.js → chunk-WZFAPHIK.js} +2 -2
- package/dist/{chunk-T2TTP3KU.js → chunk-X4IDNPOS.js} +2 -2
- package/dist/{chunk-BLAKS3CP.js → chunk-XL3TATMJ.js} +3 -3
- package/dist/{chunk-W4XJFLAL.js → chunk-XPRJSHNI.js} +2 -2
- package/dist/{chunk-5TFP4CUL.js → chunk-XQ3HXAQH.js} +14 -11
- package/dist/chunk-XQ3HXAQH.js.map +1 -0
- package/dist/{chunk-VWAXN2BN.js → chunk-XSFHWBQO.js} +93 -31
- package/dist/chunk-XSFHWBQO.js.map +1 -0
- package/dist/{chunk-DL7ZD3JH.js → chunk-XTAUXTDO.js} +14 -9
- package/dist/chunk-XTAUXTDO.js.map +1 -0
- package/dist/{chunk-JE7EK33X.js → chunk-Y7HRYCNW.js} +2 -2
- package/dist/{chunk-E6EE5B67.js → chunk-YK6BDDHP.js} +4 -4
- package/dist/{chunk-ES36HTSC.js → chunk-YLHM5BQQ.js} +3 -3
- package/dist/{chunk-RN7DY3FC.js → chunk-YMAQDHQM.js} +31 -12
- package/dist/chunk-YMAQDHQM.js.map +1 -0
- package/dist/{chunk-ULARSG5Z.js → chunk-YN6ASZUG.js} +10 -8
- package/dist/{chunk-ULARSG5Z.js.map → chunk-YN6ASZUG.js.map} +1 -1
- package/dist/{chunk-IKKWIPYN.js → chunk-YYQAKIDJ.js} +37 -1
- package/dist/chunk-YYQAKIDJ.js.map +1 -0
- package/dist/{chunk-BJKPPZ6Z.js → chunk-ZFGZ6PZ2.js} +2 -2
- package/dist/{chunk-CJ2ZR7UA.js → chunk-ZI32MKDW.js} +267 -214
- package/dist/chunk-ZI32MKDW.js.map +1 -0
- package/dist/{chunk-64UDOIMI.js → chunk-ZLQ37WJX.js} +2 -2
- package/dist/chunk-ZMAYKGPN.js +351 -0
- package/dist/chunk-ZMAYKGPN.js.map +1 -0
- package/dist/{cli-BUGN3d6_.d.ts → cli-BBHDtG36.d.ts} +5 -5
- package/dist/cli.d.ts +16 -12
- package/dist/cli.js +138 -124
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +24 -23
- package/dist/compounding/preference-consolidator.d.ts +2 -1
- package/dist/compression-optimizer.d.ts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +10 -8
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +23 -22
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +26 -25
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-provenance-check.js +4 -4
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/consolidation-undo.js +10 -7
- package/dist/consolidation-undo.js.map +1 -1
- package/dist/contradiction/index.d.ts +3 -2
- package/dist/converge-config.d.ts +2 -1
- package/dist/convergence-refresh.d.ts +4 -3
- package/dist/convergence-refresh.js +27 -26
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/backend.js +2 -2
- package/dist/conversation-index/chunker.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/indexer.d.ts +2 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/corpus-watermark.d.ts +2 -1
- package/dist/corpus-watermark.js +42 -41
- package/dist/day-summary.d.ts +2 -1
- package/dist/delinearize.d.ts +2 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer-wiring.js +2 -2
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/embedding-fallback.js +2 -2
- package/dist/enrichment/index.d.ts +2 -1
- package/dist/entity-retrieval-boundaries.js +1 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +24 -23
- package/dist/entity-schema.d.ts +2 -1
- package/dist/explicit-capture.d.ts +9 -8
- package/dist/explicit-capture.js +11 -9
- package/dist/external-wiki-access.d.ts +127 -0
- package/dist/external-wiki-access.js +186 -0
- package/dist/external-wiki-access.js.map +1 -0
- package/dist/external-wiki-cli.d.ts +13 -0
- package/dist/external-wiki-cli.js +96 -0
- package/dist/external-wiki-cli.js.map +1 -0
- package/dist/external-wiki-collection-registration.d.ts +39 -0
- package/dist/external-wiki-collection-registration.js +79 -0
- package/dist/external-wiki-collection-registration.js.map +1 -0
- package/dist/external-wiki-collection.d.ts +50 -0
- package/dist/external-wiki-collection.js +387 -0
- package/dist/external-wiki-collection.js.map +1 -0
- package/dist/external-wiki-config.d.ts +13 -0
- package/dist/external-wiki-config.js +13 -0
- package/dist/external-wiki-config.js.map +1 -0
- package/dist/external-wiki-guard.d.ts +11 -0
- package/dist/external-wiki-guard.js +18 -0
- package/dist/external-wiki-guard.js.map +1 -0
- package/dist/external-wiki-mcp-tools.d.ts +123 -0
- package/dist/external-wiki-mcp-tools.js +8 -0
- package/dist/external-wiki-mcp-tools.js.map +1 -0
- package/dist/external-wiki-search.d.ts +42 -0
- package/dist/external-wiki-search.js +11 -0
- package/dist/external-wiki-search.js.map +1 -0
- package/dist/external-wiki.d.ts +43 -0
- package/dist/external-wiki.js +16 -0
- package/dist/external-wiki.js.map +1 -0
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +2 -1
- package/dist/extraction-judge-telemetry.d.ts +2 -1
- package/dist/extraction-judge-training.d.ts +2 -1
- package/dist/extraction-judge.d.ts +2 -1
- package/dist/extraction-liveness.d.ts +2 -1
- package/dist/extraction-source-grounding-helpers.d.ts +5 -3
- package/dist/extraction-source-grounding-helpers.js +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +2 -1
- package/dist/extraction-source-grounding-rules.js +2 -2
- package/dist/extraction-source-grounding.d.ts +2 -1
- package/dist/extraction-source-grounding.js +5 -5
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +45 -43
- package/dist/fallback-llm.d.ts +2 -1
- package/dist/graph-dashboard-diff.d.ts +2 -1
- package/dist/graph-dashboard-key.d.ts +2 -1
- package/dist/graph-dashboard-parser.d.ts +2 -1
- package/dist/graph-edge-reinforcement.d.ts +2 -1
- package/dist/graph-snapshot.d.ts +2 -1
- package/dist/graph.d.ts +2 -1
- package/dist/harmonic-retrieval.js +2 -2
- package/dist/importance.d.ts +2 -1
- package/dist/importers/index.d.ts +2 -1
- package/dist/in-flight-reads.d.ts +2 -1
- package/dist/index.d.ts +732 -720
- package/dist/index.js +291 -259
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +8 -8
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/local-llm.d.ts +2 -1
- package/dist/local-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +24 -23
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +24 -23
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +26 -25
- package/dist/{maintenance-LbuS2rUA.d.ts → maintenance-D2mveyCd.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +14 -10
- package/dist/mcp-read-only-tools.js +1 -1
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/memory-projection-store.d.ts +2 -1
- package/dist/memory-provenance.d.ts +2 -1
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/models-json.d.ts +2 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +40 -39
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +18 -18
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +23 -22
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/offline-sync-impression-drain.d.ts +2 -1
- package/dist/offline-sync-impression-drain.js +11 -9
- package/dist/offline-sync.d.ts +29 -3
- package/dist/offline-sync.js +6 -2
- package/dist/operator-doctor-corpus.d.ts +2 -1
- package/dist/operator-doctor-corpus.js +45 -44
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-doctor-replica.js +3 -3
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +59 -55
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +36 -33
- package/dist/{orchestrator-rHiWt32X.d.ts → orchestrator-DJYlwiUv.d.ts} +14 -7
- package/dist/orchestrator.d.ts +9 -8
- package/dist/orchestrator.js +201 -189
- package/dist/page-versioning.js +3 -3
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-W_97O8BV.d.ts → pipeline-CNjY4wk3.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/policy-runtime.js +1 -1
- package/dist/proactive-contention.d.ts +2 -1
- package/dist/provenance.d.ts +2 -1
- package/dist/provenance.js +2 -2
- package/dist/{qmd-LWtMofAf.d.ts → qmd-C0UDZidt.d.ts} +9 -7
- package/dist/qmd-preflight.d.ts +5 -4
- package/dist/qmd-preflight.js +2 -2
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +4 -3
- package/dist/qmd.js +5 -5
- package/dist/recall-concurrency-config.d.ts +2 -1
- package/dist/recall-disclosure-escalation.d.ts +2 -1
- package/dist/recall-explain-renderer.d.ts +2 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +2 -1
- package/dist/recall-planner-llm.d.ts +2 -1
- package/dist/recall-state.d.ts +2 -1
- package/dist/recall-tag-filter.d.ts +2 -1
- package/dist/recall-timings.d.ts +2 -1
- package/dist/recall-xray-cli.d.ts +2 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +2 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +8 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +12 -2
- package/dist/reconcile/cursor.js +46 -7
- package/dist/reconcile/cursor.js.map +1 -1
- package/dist/reconcile/manifest.d.ts +9 -2
- package/dist/reconcile/manifest.js +15 -268
- package/dist/reconcile/manifest.js.map +1 -1
- package/dist/reconcile/plan.d.ts +6 -2
- package/dist/reconcile/plan.js +4 -4
- package/dist/replay/normalizers/chatgpt.d.ts +2 -1
- package/dist/replay/normalizers/claude.d.ts +2 -1
- package/dist/replay/normalizers/openclaw.d.ts +2 -1
- package/dist/replay/normalizers/shared.d.ts +2 -1
- package/dist/replay/runner.d.ts +2 -1
- package/dist/replay/types.d.ts +2 -1
- package/dist/replica-divergence.d.ts +2 -1
- package/dist/replica-divergence.js +2 -2
- package/dist/replica-peers-config.d.ts +2 -1
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resume-bundles.js +12 -10
- package/dist/retrieval-agents.d.ts +4 -3
- package/dist/retrieval-agents.js +2 -2
- package/dist/retrieval-tiers.d.ts +2 -1
- package/dist/routing/engine.d.ts +2 -1
- package/dist/routing/store.d.ts +2 -1
- package/dist/salvage-envelope.d.ts +2 -1
- package/dist/schemas.d.ts +76 -76
- package/dist/{scope-profiles-BiQKOE-p.d.ts → scope-profiles-BJzp2F5A.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/embed-helper.js +3 -3
- package/dist/search/factory.d.ts +4 -2
- package/dist/search/factory.js +20 -18
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +22 -22
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/lancedb-backend.js +4 -4
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.js +4 -4
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/orama-backend.js +4 -4
- package/dist/search/port.d.ts +18 -1
- package/dist/search/port.js +1 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/search/remote-backend.js +2 -2
- package/dist/secure-store/index.js +2 -2
- package/dist/{semantic-consolidation-dHYCyqgh.d.ts → semantic-consolidation-D4KAZO2G.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +25 -24
- package/dist/semantic-rule-promotion.js +23 -22
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +24 -23
- package/dist/{service-DJG3KCQ4.d.ts → service-BeDxSqE-.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +2 -1
- package/dist/session-observer-state.d.ts +2 -1
- package/dist/shared-context/manager.d.ts +10 -9
- package/dist/shared-context/manager.js +2 -2
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +42 -40
- package/dist/{storage-F9FVh-w9.d.ts → storage-DfjxusTE.d.ts} +24 -12
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +25 -24
- package/dist/summarizer.d.ts +2 -1
- package/dist/summarizer.js +5 -5
- package/dist/summary-snapshot.d.ts +2 -1
- package/dist/temporal-supersession.d.ts +3 -2
- package/dist/temporal-timeline-recall.d.ts +2 -1
- package/dist/temporal-validity.d.ts +2 -1
- package/dist/threading.d.ts +2 -1
- package/dist/tier-migration.d.ts +3 -2
- package/dist/tier-routing.d.ts +2 -1
- package/dist/tool-scoped-memory.d.ts +5 -1
- package/dist/tool-scoped-memory.js +3 -1
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transfer/capsule-import.js +4 -4
- package/dist/transfer/types.d.ts +66 -66
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-rEwubvim.d.ts → types-yX_FwERf.d.ts} +8 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -1
- package/dist/verified-recall.js +24 -23
- package/dist/write-envelope.d.ts +2 -1
- package/package.json +2 -2
- package/src/abort-error.ts +17 -0
- package/src/access-admin-ops-surface.ts +1 -0
- package/src/access-boundary.ts +1 -0
- package/src/access-coding-context-resolution.ts +42 -0
- package/src/access-extraction-force-flush.ts +38 -2
- package/src/access-http-lcm-compaction.ts +5 -2
- package/src/access-http-offline-stream.ts +79 -0
- package/src/access-http.test.ts +310 -3
- package/src/access-http.ts +85 -21
- package/src/access-mcp-output-schemas.ts +36 -0
- package/src/access-mcp.test.ts +95 -1
- package/src/access-mcp.ts +7 -9
- package/src/access-observe-helpers.ts +64 -22
- package/src/access-observe-write-surface.ts +8 -0
- package/src/access-offline-manifest.ts +54 -0
- package/src/access-operations-batch.ts +3 -3
- package/src/access-operations.ts +13 -7
- package/src/access-recall-concurrency.ts +3 -27
- package/src/access-recall-surface.ts +3 -0
- package/src/access-service-health.test.ts +32 -7
- package/src/access-service-namespace.test.ts +55 -0
- package/src/access-service-observe-idempotency.test.ts +34 -2
- package/src/access-service-observe-lcm-parity.test.ts +138 -3
- package/src/access-service-observe-scope.test.ts +160 -1
- package/src/access-service-offline-file-content.test.ts +345 -1
- package/src/access-service.ts +86 -59
- package/src/access-surface-catalog.ts +4 -0
- package/src/admin/admin-surfaces.ts +2 -0
- package/src/binary-lifecycle/pipeline.test.ts +106 -1
- package/src/binary-lifecycle/pipeline.ts +3 -0
- package/src/coding/git-context.test.ts +47 -0
- package/src/coding/git-context.ts +129 -27
- package/src/config.test.ts +24 -0
- package/src/config.ts +9 -12
- package/src/connector-provenance.test.ts +101 -0
- package/src/consolidation-undo.ts +3 -0
- package/src/converge-conflict-policy-type.test.ts +15 -0
- package/src/convergence-refresh.ts +14 -2
- package/src/correction/correction-access-wiring.ts +9 -7
- package/src/correction/correction-executor.test.ts +206 -2
- package/src/correction/correction-executor.ts +29 -20
- package/src/correction/correction-planner.test.ts +36 -0
- package/src/correction/correction-planner.ts +9 -15
- package/src/correction/correction-service.ts +3 -1
- package/src/correction/correction-storage-integration.test.ts +77 -0
- package/src/correction/correction-surfaces.test.ts +41 -28
- package/src/correction/passive-capture.test.ts +59 -0
- package/src/correction/passive-capture.ts +4 -1
- package/src/entity-retrieval-boundaries.ts +17 -4
- package/src/entity-retrieval.ts +27 -6
- package/src/external-wiki-access.test.ts +65 -0
- package/src/external-wiki-access.ts +31 -0
- package/src/external-wiki-cli.ts +92 -0
- package/src/external-wiki-collection-registration.test.ts +163 -0
- package/src/external-wiki-collection-registration.ts +101 -0
- package/src/external-wiki-collection.test.ts +502 -0
- package/src/external-wiki-collection.ts +503 -0
- package/src/external-wiki-config.test.ts +135 -0
- package/src/external-wiki-config.ts +100 -0
- package/src/external-wiki-guard.ts +83 -0
- package/src/external-wiki-mcp-tools.ts +23 -0
- package/src/external-wiki-search.test.ts +301 -0
- package/src/external-wiki-search.ts +362 -0
- package/src/external-wiki.test.ts +240 -0
- package/src/external-wiki.ts +453 -0
- package/src/extraction-scope-source-agent.test.ts +21 -0
- package/src/extraction-source-grounding-helpers.ts +243 -53
- package/src/extraction-source-grounding-rules.ts +133 -39
- package/src/extraction-source-grounding.test.ts +363 -33
- package/src/extraction-timeout.test.ts +1 -0
- package/src/extraction-watermark.test.ts +150 -7
- package/src/extraction.ts +8 -1
- package/src/index.ts +8 -0
- package/src/mcp-read-only-tools.ts +1 -0
- package/src/offline-sync.test.ts +194 -0
- package/src/offline-sync.ts +217 -13
- package/src/orchestration/external-wiki-recall-guard.test.ts +94 -0
- package/src/orchestration/extraction-persist.ts +19 -2
- package/src/orchestration/extraction-run-helpers.ts +37 -19
- package/src/orchestration/extraction-run.test.ts +171 -2
- package/src/orchestration/extraction-run.ts +11 -13
- package/src/orchestration/extraction-watermark.ts +106 -17
- package/src/orchestration/generic-recall-paths.ts +14 -0
- package/src/orchestration/orchestrator-helpers.ts +2 -0
- package/src/orchestration/orchestrator-init.ts +9 -0
- package/src/orchestration/recall-internal-deps.ts +6 -0
- package/src/orchestration/recall-internal.ts +154 -33
- package/src/orchestration/recall-rerank-coordinator.ts +60 -25
- package/src/orchestration/recall-search-pipeline.test.ts +75 -1
- package/src/orchestration/recall-search-pipeline.ts +50 -10
- package/src/orchestrator-convergence-refresh.test.ts +36 -2
- package/src/orchestrator.ts +13 -3
- package/src/page-versioning.ts +5 -19
- package/src/procedural/procedure-recall.ts +5 -1
- package/src/provenance-surfaces.test.ts +3 -0
- package/src/qmd-client.test.ts +78 -17
- package/src/qmd.test.ts +24 -0
- package/src/qmd.ts +224 -315
- package/src/recall-explain-renderer.ts +3 -0
- package/src/recall-rerank-coordinator.test.ts +61 -0
- package/src/recall-xray-renderer.test.ts +6 -0
- package/src/recall-xray.test.ts +88 -1
- package/src/recall-xray.ts +15 -0
- package/src/reconcile/cursor.test.ts +48 -0
- package/src/reconcile/cursor.ts +58 -11
- package/src/reconcile/manifest.test.ts +4 -0
- package/src/reconcile/manifest.ts +41 -51
- package/src/reconcile/plan.test.ts +4 -0
- package/src/reconcile/plan.ts +29 -16
- package/src/search/factory.ts +6 -6
- package/src/search/port.ts +25 -9
- package/src/secure-store/secure-fs.ts +20 -12
- package/src/secure-store/secure-store.test.ts +41 -2
- package/src/spaces/index.test.ts +61 -2
- package/src/spaces/index.ts +44 -18
- package/src/storage/entity-alias-config.ts +97 -0
- package/src/storage/entity-canonical-id-lock.ts +53 -23
- package/src/storage/entity-canonical-id-migration.ts +53 -22
- package/src/storage/entity-canonical-id-references.ts +3 -0
- package/src/storage/entity-id-safety.ts +7 -0
- package/src/storage/entity-store.ts +6 -2
- package/src/storage/memory-frontmatter-metadata.ts +4 -9
- package/src/storage/memory-migration-serialization.ts +10 -15
- package/src/storage/tombstone-blocked-capture-mutation.ts +52 -64
- package/src/storage/tombstone-blocked-capture-sync.ts +244 -199
- package/src/storage-deletion-revisions.test.ts +91 -0
- package/src/storage-fact-hash-index-defer.test.ts +446 -163
- package/src/storage.ts +534 -245
- package/src/tool-scoped-memory.ts +10 -0
- package/src/transfer/capsule-import.ts +13 -0
- package/src/transfer/capsule-merge.ts +13 -0
- package/src/trust-score-recall-paths.test.ts +75 -1
- package/src/types.ts +7 -3
- package/dist/capsule-merge-IDWJPCWK.js.map +0 -1
- package/dist/chunk-3CE77VAP.js.map +0 -1
- package/dist/chunk-3TBLDMJA.js.map +0 -1
- package/dist/chunk-4J7G5SY4.js.map +0 -1
- package/dist/chunk-4L6HUREQ.js.map +0 -1
- package/dist/chunk-57QKLRBV.js.map +0 -1
- package/dist/chunk-5TFP4CUL.js.map +0 -1
- package/dist/chunk-7XC2HX75.js.map +0 -1
- package/dist/chunk-A5OJCXZL.js.map +0 -1
- package/dist/chunk-BUE5E2HL.js.map +0 -1
- package/dist/chunk-CJ2ZR7UA.js.map +0 -1
- package/dist/chunk-CUM2BBPN.js.map +0 -1
- package/dist/chunk-D3J5SLQK.js.map +0 -1
- package/dist/chunk-DL7ZD3JH.js.map +0 -1
- package/dist/chunk-DLVPUX7U.js.map +0 -1
- package/dist/chunk-E6PNLPGJ.js.map +0 -1
- package/dist/chunk-ECK75GDJ.js.map +0 -1
- package/dist/chunk-HREE4JHI.js.map +0 -1
- package/dist/chunk-IKKWIPYN.js.map +0 -1
- package/dist/chunk-J7VGGECD.js.map +0 -1
- package/dist/chunk-N5Z4EVOR.js.map +0 -1
- package/dist/chunk-NVRYW264.js.map +0 -1
- package/dist/chunk-P2BM76KT.js.map +0 -1
- package/dist/chunk-PVGDJXVK.js +0 -21
- package/dist/chunk-QJAQNXWI.js.map +0 -1
- package/dist/chunk-RN7DY3FC.js.map +0 -1
- package/dist/chunk-RVLJEII5.js.map +0 -1
- package/dist/chunk-S2NCTZGJ.js.map +0 -1
- package/dist/chunk-TDHTVMPG.js.map +0 -1
- package/dist/chunk-UYLMNVY6.js.map +0 -1
- package/dist/chunk-VCD4PSK2.js.map +0 -1
- package/dist/chunk-VNA7W7QF.js.map +0 -1
- package/dist/chunk-VWAXN2BN.js.map +0 -1
- package/dist/chunk-WOCNN776.js.map +0 -1
- package/dist/chunk-XYTOI63Z.js.map +0 -1
- package/dist/chunk-YV32N67O.js.map +0 -1
- /package/dist/{auto-sync-5OE5QOZB.js.map → auto-sync-UPTUVE4X.js.map} +0 -0
- /package/dist/{chunk-VUPTKTDV.js.map → chunk-2MRHJNWL.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
- /package/dist/{chunk-5IVLTFOV.js.map → chunk-44N6ESJ4.js.map} +0 -0
- /package/dist/{chunk-HO3QBJEY.js.map → chunk-5546W5SI.js.map} +0 -0
- /package/dist/{chunk-U7GW7NE7.js.map → chunk-5CEECY6P.js.map} +0 -0
- /package/dist/{chunk-4UH4BTGK.js.map → chunk-5SNZSWWR.js.map} +0 -0
- /package/dist/{chunk-6CZPDBJS.js.map → chunk-5U7ID3EZ.js.map} +0 -0
- /package/dist/{chunk-GF22HWS2.js.map → chunk-6NNNURLK.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-7RZJWZ46.js.map} +0 -0
- /package/dist/{chunk-E5UK4VPE.js.map → chunk-7SHJHPTY.js.map} +0 -0
- /package/dist/{chunk-UVIKWC7M.js.map → chunk-7YERSTN7.js.map} +0 -0
- /package/dist/{chunk-S5SLVSVY.js.map → chunk-BQIFZ2MP.js.map} +0 -0
- /package/dist/{chunk-E53DSZEN.js.map → chunk-C26TE27X.js.map} +0 -0
- /package/dist/{chunk-LZ4LDKHZ.js.map → chunk-CLB32OHM.js.map} +0 -0
- /package/dist/{chunk-Q6IP2ARR.js.map → chunk-CSOYVTRX.js.map} +0 -0
- /package/dist/{chunk-XOQSEF7X.js.map → chunk-CVILPI77.js.map} +0 -0
- /package/dist/{chunk-PDLBLTOK.js.map → chunk-EITZHSX6.js.map} +0 -0
- /package/dist/{chunk-WUNIWKY4.js.map → chunk-ELIL2A37.js.map} +0 -0
- /package/dist/{chunk-CINZGPSJ.js.map → chunk-GUMZC2BO.js.map} +0 -0
- /package/dist/{chunk-H24WNPA2.js.map → chunk-GWFSVJ4P.js.map} +0 -0
- /package/dist/{chunk-TSH56VPU.js.map → chunk-HAYSYUAB.js.map} +0 -0
- /package/dist/{chunk-PKNLM44P.js.map → chunk-JH6BPLOP.js.map} +0 -0
- /package/dist/{chunk-KXB4VXHY.js.map → chunk-JIYDRBVZ.js.map} +0 -0
- /package/dist/{chunk-AV5ZEH4M.js.map → chunk-KVJRXN2E.js.map} +0 -0
- /package/dist/{chunk-JVLCVFQ4.js.map → chunk-KXEFRMCF.js.map} +0 -0
- /package/dist/{chunk-WFTIGIIS.js.map → chunk-L6CQ7WIW.js.map} +0 -0
- /package/dist/{chunk-EJUEXZHX.js.map → chunk-LLJMAULE.js.map} +0 -0
- /package/dist/{chunk-AS7YMSL6.js.map → chunk-M23RF3LJ.js.map} +0 -0
- /package/dist/{chunk-3F2LKUMU.js.map → chunk-NIS256NW.js.map} +0 -0
- /package/dist/{chunk-YIAA2X3D.js.map → chunk-NK5RGJ65.js.map} +0 -0
- /package/dist/{chunk-OQ5PRDDS.js.map → chunk-NTOIP2E6.js.map} +0 -0
- /package/dist/{chunk-HLPD7B7P.js.map → chunk-NUEQKLNB.js.map} +0 -0
- /package/dist/{chunk-33PLLLL7.js.map → chunk-P7NGM24P.js.map} +0 -0
- /package/dist/{chunk-7TWUCYER.js.map → chunk-PNRA7FAD.js.map} +0 -0
- /package/dist/{chunk-5I4M26Q7.js.map → chunk-QBSFOKY6.js.map} +0 -0
- /package/dist/{chunk-P4DRWEYC.js.map → chunk-QVSBTCVP.js.map} +0 -0
- /package/dist/{chunk-AAIUERNB.js.map → chunk-R5RFK3CB.js.map} +0 -0
- /package/dist/{chunk-WDISJRMG.js.map → chunk-RMMVQQA6.js.map} +0 -0
- /package/dist/{chunk-5SM35XZR.js.map → chunk-S5NZBKKQ.js.map} +0 -0
- /package/dist/{chunk-WIPEXG6R.js.map → chunk-SXIMQLGV.js.map} +0 -0
- /package/dist/{chunk-OAEQLRCY.js.map → chunk-TN76AKO3.js.map} +0 -0
- /package/dist/{chunk-QN25OCUF.js.map → chunk-TQ4GD737.js.map} +0 -0
- /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
- /package/dist/{chunk-DNWXFTLD.js.map → chunk-TYISDI6B.js.map} +0 -0
- /package/dist/{chunk-4LMA77JH.js.map → chunk-U2VLVBBH.js.map} +0 -0
- /package/dist/{chunk-5ZE7QHTK.js.map → chunk-ULVR5KG7.js.map} +0 -0
- /package/dist/{chunk-4B77XSG5.js.map → chunk-UV72DEZD.js.map} +0 -0
- /package/dist/{chunk-S2BBISHU.js.map → chunk-VANZKHTN.js.map} +0 -0
- /package/dist/{chunk-3Y224NYC.js.map → chunk-VYISFWVX.js.map} +0 -0
- /package/dist/{chunk-TIHMZFIV.js.map → chunk-W3IC7QOY.js.map} +0 -0
- /package/dist/{chunk-NRV4Y3PM.js.map → chunk-W4FBGYGK.js.map} +0 -0
- /package/dist/{chunk-MU7ZHSZE.js.map → chunk-WZFAPHIK.js.map} +0 -0
- /package/dist/{chunk-T2TTP3KU.js.map → chunk-X4IDNPOS.js.map} +0 -0
- /package/dist/{chunk-BLAKS3CP.js.map → chunk-XL3TATMJ.js.map} +0 -0
- /package/dist/{chunk-W4XJFLAL.js.map → chunk-XPRJSHNI.js.map} +0 -0
- /package/dist/{chunk-JE7EK33X.js.map → chunk-Y7HRYCNW.js.map} +0 -0
- /package/dist/{chunk-E6EE5B67.js.map → chunk-YK6BDDHP.js.map} +0 -0
- /package/dist/{chunk-ES36HTSC.js.map → chunk-YLHM5BQQ.js.map} +0 -0
- /package/dist/{chunk-BJKPPZ6Z.js.map → chunk-ZFGZ6PZ2.js.map} +0 -0
- /package/dist/{chunk-64UDOIMI.js.map → chunk-ZLQ37WJX.js.map} +0 -0
|
@@ -17,6 +17,7 @@ import path from "node:path";
|
|
|
17
17
|
import { test } from "node:test";
|
|
18
18
|
|
|
19
19
|
import { withTempDir as managedWithTempDir } from "../testing/tmp-dir.js";
|
|
20
|
+
import { writeFileAtomically } from "../maintenance/atomic-file.js";
|
|
20
21
|
import {
|
|
21
22
|
CorrectionContractError,
|
|
22
23
|
MEMORY_CATEGORIES,
|
|
@@ -301,6 +302,41 @@ test("plan persists atomically to state/corrections/pending/<planId>.json and ro
|
|
|
301
302
|
});
|
|
302
303
|
});
|
|
303
304
|
|
|
305
|
+
test("#2206 cancellation after atomic plan commit returns the persisted plan without temp files", async () => {
|
|
306
|
+
await withTempDir(async (dir) => {
|
|
307
|
+
const state: StubState = {
|
|
308
|
+
candidatesById: new Map([["mem-x", makeCandidate({ memoryId: "mem-x", content: "old fact" })]]),
|
|
309
|
+
llmResult: {
|
|
310
|
+
classification: "outdated",
|
|
311
|
+
confidence: 0.9,
|
|
312
|
+
actions: [{ kind: "edit", memoryId: "mem-x", patch: "new fact" }],
|
|
313
|
+
relevance: [{ memoryId: "mem-x", why: "outdated" }],
|
|
314
|
+
warnings: [],
|
|
315
|
+
},
|
|
316
|
+
writeReplacementCalls: 0,
|
|
317
|
+
propagateCalls: 0,
|
|
318
|
+
retireCalls: 0,
|
|
319
|
+
};
|
|
320
|
+
const abortController = new AbortController();
|
|
321
|
+
const deps = makeDeps(dir, state);
|
|
322
|
+
deps.writePlanFile = async (outputPath, content) => {
|
|
323
|
+
await writeFileAtomically(outputPath, content);
|
|
324
|
+
abortController.abort(new Error("correction deadline exceeded"));
|
|
325
|
+
};
|
|
326
|
+
const planner = new CorrectionPlanner(deps);
|
|
327
|
+
|
|
328
|
+
const plan = await planner.plan(
|
|
329
|
+
{ text: "old fact", targetIds: ["mem-x"] },
|
|
330
|
+
["default"],
|
|
331
|
+
{ abortSignal: abortController.signal },
|
|
332
|
+
);
|
|
333
|
+
const pendingDir = path.join(dir, "state", "corrections", "pending");
|
|
334
|
+
assert.equal(abortController.signal.aborted, true);
|
|
335
|
+
assert.equal((await planner.loadPlan("default", plan.planId))?.planId, plan.planId);
|
|
336
|
+
assert.equal((await readdir(pendingDir)).some((name) => name.endsWith(".tmp")), false);
|
|
337
|
+
});
|
|
338
|
+
});
|
|
339
|
+
|
|
304
340
|
test("plan expires after TTL — apply-time rejection is tested in executor; here we verify the timestamp", async () => {
|
|
305
341
|
await withTempDir(async (dir) => {
|
|
306
342
|
const state: StubState = {
|
|
@@ -20,9 +20,10 @@
|
|
|
20
20
|
* only thing it persists is the plan document itself.
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
|
-
import {
|
|
24
|
-
import { mkdir, readFile, rename, unlink, readdir, writeFile } from "node:fs/promises";
|
|
23
|
+
import { readFile, readdir, unlink } from "node:fs/promises";
|
|
25
24
|
import path from "node:path";
|
|
25
|
+
import { throwIfAborted } from "../abort-error.js";
|
|
26
|
+
import { writeFileAtomically } from "../maintenance/atomic-file.js";
|
|
26
27
|
import { serializeMutations } from "../utils/serialize-mutations.js";
|
|
27
28
|
import {
|
|
28
29
|
CORRECTION_TEXT_MAX,
|
|
@@ -109,6 +110,8 @@ export interface PlannerDeps {
|
|
|
109
110
|
}): Promise<string>;
|
|
110
111
|
/** Per-namespace storage dir root (so the plan lands in the right state/). */
|
|
111
112
|
storageDir(namespace: string): Promise<string>;
|
|
113
|
+
/** Atomic persistence seam used by focused lifecycle tests. */
|
|
114
|
+
writePlanFile?: (outputPath: string, content: string) => Promise<unknown>;
|
|
112
115
|
/** Max affected memories per plan (issue config: default 10). */
|
|
113
116
|
readonly maxAffected: number;
|
|
114
117
|
/** Plan TTL in hours (issue config: default 24). */
|
|
@@ -431,13 +434,8 @@ export class CorrectionPlanner {
|
|
|
431
434
|
: plan;
|
|
432
435
|
await serializeMutations(`correction-plan:${target}`, async () => {
|
|
433
436
|
throwIfAborted(abortSignal, "correction planning aborted");
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
throwIfAborted(abortSignal, "correction planning aborted");
|
|
437
|
-
await writeFile(tmp, `${JSON.stringify(persistedPlan)}\n`, "utf-8");
|
|
438
|
-
throwIfAborted(abortSignal, "correction planning aborted");
|
|
439
|
-
// rename() is atomic on POSIX for same-filesystem renames (rule 54).
|
|
440
|
-
await rename(tmp, target);
|
|
437
|
+
const writePlanFile = this.deps.writePlanFile ?? writeFileAtomically;
|
|
438
|
+
await writePlanFile(target, `${JSON.stringify(persistedPlan)}\n`);
|
|
441
439
|
});
|
|
442
440
|
return plan;
|
|
443
441
|
}
|
|
@@ -520,9 +518,7 @@ export class CorrectionPlanner {
|
|
|
520
518
|
: a,
|
|
521
519
|
);
|
|
522
520
|
}
|
|
523
|
-
|
|
524
|
-
await writeFile(tmp, `${JSON.stringify(plan)}\n`, "utf-8");
|
|
525
|
-
await rename(tmp, file);
|
|
521
|
+
await writeFileAtomically(file, `${JSON.stringify(plan)}\n`);
|
|
526
522
|
});
|
|
527
523
|
}
|
|
528
524
|
/**
|
|
@@ -545,9 +541,7 @@ export class CorrectionPlanner {
|
|
|
545
541
|
if (!plan || plan.status !== "applying") return;
|
|
546
542
|
plan.status = "pending";
|
|
547
543
|
delete plan.applyingAt;
|
|
548
|
-
|
|
549
|
-
await writeFile(tmp, `${JSON.stringify(plan)}\n`, "utf-8");
|
|
550
|
-
await rename(tmp, file);
|
|
544
|
+
await writeFileAtomically(file, `${JSON.stringify(plan)}\n`);
|
|
551
545
|
});
|
|
552
546
|
}
|
|
553
547
|
|
|
@@ -52,6 +52,7 @@ export interface CorrectionNamespacePolicy {
|
|
|
52
52
|
namespace: string;
|
|
53
53
|
sessionKey?: string;
|
|
54
54
|
principal?: string;
|
|
55
|
+
abortSignal?: AbortSignal;
|
|
55
56
|
}): Promise<boolean>;
|
|
56
57
|
/** Namespaces the caller may read — scopes the planner's search. */
|
|
57
58
|
readableNamespaces(request: {
|
|
@@ -144,11 +145,12 @@ export class CorrectionService {
|
|
|
144
145
|
abortSignal: opts.abortSignal,
|
|
145
146
|
// Authorize rescope destinations through the namespace policy bound to
|
|
146
147
|
// THIS caller's principal (review thread: authorize-rescope-destination).
|
|
147
|
-
canWriteDestination: (dest) =>
|
|
148
|
+
canWriteDestination: (dest, abortSignal) =>
|
|
148
149
|
this.deps.policy.canWriteNamespace({
|
|
149
150
|
namespace: dest,
|
|
150
151
|
...(opts.sessionKey ? { sessionKey: opts.sessionKey } : {}),
|
|
151
152
|
...(opts.principal ? { principal: opts.principal } : {}),
|
|
153
|
+
...(abortSignal ? { abortSignal } : {}),
|
|
152
154
|
}),
|
|
153
155
|
});
|
|
154
156
|
}
|
|
@@ -16,12 +16,17 @@ import type { MemoryFile } from "../types.js";
|
|
|
16
16
|
|
|
17
17
|
import { StorageManager, ContentHashIndex } from "../storage.js";
|
|
18
18
|
import { sanitizeMemoryContent } from "../sanitize.js";
|
|
19
|
+
import { loadRedactionRules } from "../extraction-redaction-rules.js";
|
|
20
|
+
import { writeFileAtomically } from "../maintenance/atomic-file.js";
|
|
19
21
|
import {
|
|
22
|
+
type CorrectionAccessWiring,
|
|
20
23
|
isEligibleCorrectionCandidate,
|
|
21
24
|
applyEditMemory,
|
|
22
25
|
appendTombstoneFn,
|
|
26
|
+
appendAuditRecordFn,
|
|
23
27
|
retireMemoryFn,
|
|
24
28
|
rescopeMemoryFn,
|
|
29
|
+
registerRedactionRuleFn,
|
|
25
30
|
writeReplacementMemory,
|
|
26
31
|
} from "./correction-access-wiring.js";
|
|
27
32
|
|
|
@@ -292,6 +297,78 @@ test("#2128 tombstone append returns its committed id after cancellation", async
|
|
|
292
297
|
}
|
|
293
298
|
});
|
|
294
299
|
|
|
300
|
+
test("#2206 redaction adapter returns after a committed rule write despite cancellation", async () => {
|
|
301
|
+
const { storage, cleanup } = await makeStorage("remnic-corr-redaction-abort-");
|
|
302
|
+
try {
|
|
303
|
+
const abortController = new AbortController();
|
|
304
|
+
let commitCompleted = false;
|
|
305
|
+
const wiring = {
|
|
306
|
+
orchestrator: { getStorage: async () => storage },
|
|
307
|
+
} as unknown as CorrectionAccessWiring;
|
|
308
|
+
|
|
309
|
+
await registerRedactionRuleFn(
|
|
310
|
+
wiring,
|
|
311
|
+
"default",
|
|
312
|
+
"do-not-store-this",
|
|
313
|
+
abortController.signal,
|
|
314
|
+
async (outputPath, content) => {
|
|
315
|
+
await writeFileAtomically(outputPath, content);
|
|
316
|
+
commitCompleted = true;
|
|
317
|
+
abortController.abort(new Error("correction deadline exceeded"));
|
|
318
|
+
},
|
|
319
|
+
);
|
|
320
|
+
|
|
321
|
+
assert.equal(commitCompleted, true);
|
|
322
|
+
assert.deepEqual(
|
|
323
|
+
(await loadRedactionRules(storage.dir)).map((rule) => rule.pattern),
|
|
324
|
+
["do-not-store-this"],
|
|
325
|
+
);
|
|
326
|
+
} finally {
|
|
327
|
+
await cleanup();
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
test("#2206 audit adapter returns its committed id despite cancellation", async () => {
|
|
332
|
+
const { storage, cleanup } = await makeStorage("remnic-corr-audit-abort-");
|
|
333
|
+
try {
|
|
334
|
+
const originalWriteSealedMemory = storage.writeSealedMemory.bind(storage);
|
|
335
|
+
const abortController = new AbortController();
|
|
336
|
+
let committed = false;
|
|
337
|
+
storage.writeSealedMemory = async (...args: Parameters<typeof storage.writeSealedMemory>) => {
|
|
338
|
+
const result = await originalWriteSealedMemory(...args);
|
|
339
|
+
committed = true;
|
|
340
|
+
abortController.abort(new Error("correction deadline exceeded"));
|
|
341
|
+
return result;
|
|
342
|
+
};
|
|
343
|
+
const wiring = {
|
|
344
|
+
orchestrator: { getStorage: async () => storage },
|
|
345
|
+
} as unknown as CorrectionAccessWiring;
|
|
346
|
+
|
|
347
|
+
const auditId = await appendAuditRecordFn(
|
|
348
|
+
wiring,
|
|
349
|
+
"default",
|
|
350
|
+
{
|
|
351
|
+
planId: "plan-2206",
|
|
352
|
+
classification: "outdated",
|
|
353
|
+
outcome: {
|
|
354
|
+
planId: "plan-2206",
|
|
355
|
+
status: "partial",
|
|
356
|
+
results: [],
|
|
357
|
+
auditMemoryId: "",
|
|
358
|
+
appliedAt: "2026-07-30T00:00:00.000Z",
|
|
359
|
+
},
|
|
360
|
+
requestText: "update the stored fact",
|
|
361
|
+
},
|
|
362
|
+
abortController.signal,
|
|
363
|
+
);
|
|
364
|
+
|
|
365
|
+
assert.equal(committed, true);
|
|
366
|
+
assert.equal((await storage.getMemoryById(auditId))?.frontmatter.category, "correction");
|
|
367
|
+
} finally {
|
|
368
|
+
await cleanup();
|
|
369
|
+
}
|
|
370
|
+
});
|
|
371
|
+
|
|
295
372
|
// ---------------------------------------------------------------------------
|
|
296
373
|
// item 4: per-key tombstone emission
|
|
297
374
|
// ---------------------------------------------------------------------------
|
|
@@ -39,8 +39,8 @@ function extractToolNames(response: unknown): Set<string> {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
interface MockCalls {
|
|
42
|
-
planRequests: Array<{ text: string; targetIds?: string[]; principal?: string }>;
|
|
43
|
-
applyRequests: Array<{ planId: string; confirm: boolean; principal?: string }>;
|
|
42
|
+
planRequests: Array<{ text: string; targetIds?: string[]; principal?: string; abortSignal?: AbortSignal }>;
|
|
43
|
+
applyRequests: Array<{ planId: string; confirm: boolean; principal?: string; abortSignal?: AbortSignal }>;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
function makeMockService(
|
|
@@ -50,22 +50,26 @@ function makeMockService(
|
|
|
50
50
|
const calls: MockCalls = { planRequests: [], applyRequests: [] };
|
|
51
51
|
const service = {
|
|
52
52
|
briefingEnabled: true,
|
|
53
|
-
correctionPlan(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
correctionPlan(
|
|
54
|
+
req: {
|
|
55
|
+
text: string;
|
|
56
|
+
targetIds?: string[];
|
|
57
|
+
principal?: string;
|
|
58
|
+
},
|
|
59
|
+
opts?: { abortSignal?: AbortSignal },
|
|
60
|
+
): Promise<CorrectionPlan> {
|
|
61
|
+
calls.planRequests.push({ ...req, ...(opts?.abortSignal ? { abortSignal: opts.abortSignal } : {}) });
|
|
59
62
|
return Promise.resolve(planResponse);
|
|
60
63
|
},
|
|
61
64
|
correctionApply(
|
|
62
65
|
planId: string,
|
|
63
|
-
opts: { confirm?: boolean; principal?: string },
|
|
66
|
+
opts: { confirm?: boolean; principal?: string; abortSignal?: AbortSignal },
|
|
64
67
|
): Promise<CorrectionOutcome> {
|
|
65
68
|
calls.applyRequests.push({
|
|
66
69
|
planId,
|
|
67
70
|
confirm: opts.confirm === true,
|
|
68
71
|
...(opts.principal ? { principal: opts.principal } : {}),
|
|
72
|
+
...(opts.abortSignal ? { abortSignal: opts.abortSignal } : {}),
|
|
69
73
|
});
|
|
70
74
|
return Promise.resolve(applyResponse);
|
|
71
75
|
},
|
|
@@ -130,22 +134,26 @@ test("tools/list gate: correction tools present when correctionVisible on (defau
|
|
|
130
134
|
// MCP dispatch: tools/call → boundary operation → service method
|
|
131
135
|
// ---------------------------------------------------------------------------
|
|
132
136
|
|
|
133
|
-
test("MCP surface: memory_correct_plan
|
|
137
|
+
test("MCP surface: memory_correct_plan forwards the request abort signal", async () => {
|
|
134
138
|
const { service, calls } = makeMockService(STUB_PLAN, STUB_OUTCOME);
|
|
135
139
|
const server = new EngramMcpServer(service, { emitLegacyTools: true, correctionVisible: true });
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
const abortController = new AbortController();
|
|
141
|
+
const response = await server.handleRequest(
|
|
142
|
+
{
|
|
143
|
+
jsonrpc: "2.0",
|
|
144
|
+
id: 1,
|
|
145
|
+
method: "tools/call",
|
|
146
|
+
params: {
|
|
147
|
+
name: "engram.memory_correct_plan",
|
|
148
|
+
arguments: { text: "we migrated to MySQL in March", targetIds: ["mem-1"] },
|
|
149
|
+
},
|
|
143
150
|
},
|
|
144
|
-
|
|
151
|
+
{ abortSignal: abortController.signal },
|
|
152
|
+
);
|
|
145
153
|
assert.equal(calls.planRequests.length, 1, "service.correctionPlan called exactly once");
|
|
146
154
|
assert.equal(calls.planRequests[0]?.text, "we migrated to MySQL in March");
|
|
147
155
|
assert.deepEqual(calls.planRequests[0]?.targetIds, ["mem-1"]);
|
|
148
|
-
|
|
156
|
+
assert.equal(calls.planRequests[0]?.abortSignal, abortController.signal);
|
|
149
157
|
assert.equal(
|
|
150
158
|
typeof response === "object" && response !== null && "result" in response,
|
|
151
159
|
true,
|
|
@@ -153,21 +161,26 @@ test("MCP surface: memory_correct_plan dispatches to service.correctionPlan", as
|
|
|
153
161
|
);
|
|
154
162
|
});
|
|
155
163
|
|
|
156
|
-
test("MCP surface: memory_correct_apply
|
|
164
|
+
test("MCP surface: memory_correct_apply forwards confirmation and the request abort signal", async () => {
|
|
157
165
|
const { service, calls } = makeMockService(STUB_PLAN, STUB_OUTCOME);
|
|
158
166
|
const server = new EngramMcpServer(service, { emitLegacyTools: true, correctionVisible: true });
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
167
|
+
const abortController = new AbortController();
|
|
168
|
+
await server.handleRequest(
|
|
169
|
+
{
|
|
170
|
+
jsonrpc: "2.0",
|
|
171
|
+
id: 2,
|
|
172
|
+
method: "tools/call",
|
|
173
|
+
params: {
|
|
174
|
+
name: "engram.memory_correct_apply",
|
|
175
|
+
arguments: { planId: "corr-test-1", confirm: true },
|
|
176
|
+
},
|
|
166
177
|
},
|
|
167
|
-
|
|
178
|
+
{ abortSignal: abortController.signal },
|
|
179
|
+
);
|
|
168
180
|
assert.equal(calls.applyRequests.length, 1, "service.correctionApply called exactly once");
|
|
169
181
|
assert.equal(calls.applyRequests[0]?.planId, "corr-test-1");
|
|
170
182
|
assert.equal(calls.applyRequests[0]?.confirm, true);
|
|
183
|
+
assert.equal(calls.applyRequests[0]?.abortSignal, abortController.signal);
|
|
171
184
|
});
|
|
172
185
|
|
|
173
186
|
test("MCP surface: remnic.memory_correct_plan alias dispatches identically", async () => {
|
|
@@ -165,6 +165,65 @@ test("dedup: different bufferKey → both processed", async () => {
|
|
|
165
165
|
assert.strictEqual(dedup.size, 2);
|
|
166
166
|
});
|
|
167
167
|
|
|
168
|
+
test("#2206 dedup records a plan that commits as cancellation arrives", async () => {
|
|
169
|
+
const plan = makePlan();
|
|
170
|
+
const abortController = new AbortController();
|
|
171
|
+
let planningCalls = 0;
|
|
172
|
+
const deps = mockDeps(plan);
|
|
173
|
+
deps.planCorrection = async () => {
|
|
174
|
+
planningCalls += 1;
|
|
175
|
+
abortController.abort(new Error("extraction deadline exceeded"));
|
|
176
|
+
return plan;
|
|
177
|
+
};
|
|
178
|
+
const dedup = new Set<string>();
|
|
179
|
+
const correction = makeCorrection();
|
|
180
|
+
|
|
181
|
+
const first = await capturePassiveCorrections(
|
|
182
|
+
[correction],
|
|
183
|
+
{ ...LIVE_CTX, abortSignal: abortController.signal },
|
|
184
|
+
QUEUE_CONFIG,
|
|
185
|
+
deps,
|
|
186
|
+
dedup,
|
|
187
|
+
);
|
|
188
|
+
const second = await capturePassiveCorrections(
|
|
189
|
+
[correction],
|
|
190
|
+
LIVE_CTX,
|
|
191
|
+
QUEUE_CONFIG,
|
|
192
|
+
deps,
|
|
193
|
+
dedup,
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
assert.deepEqual(first.plans.map((candidate) => candidate.planId), [plan.planId]);
|
|
197
|
+
assert.equal(first.telemetry.queued, 1, "the committed pending plan must count as queued");
|
|
198
|
+
assert.equal(dedup.size, 1);
|
|
199
|
+
assert.equal(second.telemetry.queued, 0);
|
|
200
|
+
assert.equal(planningCalls, 1);
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
test("#2206 auto mode counts a plan left pending when cancellation lands at commit", async () => {
|
|
204
|
+
const plan = makePlan({ confidence: 0.9, classification: "outdated" });
|
|
205
|
+
const abortController = new AbortController();
|
|
206
|
+
const appliedPlans: string[] = [];
|
|
207
|
+
const deps = mockDeps(plan, { appliedPlans });
|
|
208
|
+
deps.planCorrection = async () => {
|
|
209
|
+
abortController.abort(new Error("extraction deadline exceeded"));
|
|
210
|
+
return plan;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
const result = await capturePassiveCorrections(
|
|
214
|
+
[makeCorrection()],
|
|
215
|
+
{ ...LIVE_CTX, abortSignal: abortController.signal },
|
|
216
|
+
AUTO_CONFIG,
|
|
217
|
+
deps,
|
|
218
|
+
new Set<string>(),
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
assert.equal(abortController.signal.aborted, true, "cancellation must land as planning commits");
|
|
222
|
+
assert.deepEqual(result.plans.map((candidate) => candidate.planId), [plan.planId]);
|
|
223
|
+
assert.equal(result.telemetry.queued, 1);
|
|
224
|
+
assert.deepEqual(appliedPlans, []);
|
|
225
|
+
});
|
|
226
|
+
|
|
168
227
|
// ---------------------------------------------------------------------------
|
|
169
228
|
// Auto mode + guards
|
|
170
229
|
// ---------------------------------------------------------------------------
|
|
@@ -262,10 +262,13 @@ export async function capturePassiveCorrections(
|
|
|
262
262
|
);
|
|
263
263
|
continue;
|
|
264
264
|
}
|
|
265
|
-
if (ctx.abortSignal?.aborted) return { telemetry, plans };
|
|
266
265
|
plans.push(plan);
|
|
267
266
|
// Record the fingerprint only after a successful plan.
|
|
268
267
|
dedupState.add(fp);
|
|
268
|
+
if (ctx.abortSignal?.aborted) {
|
|
269
|
+
telemetry.queued += 1;
|
|
270
|
+
return { telemetry, plans };
|
|
271
|
+
}
|
|
269
272
|
|
|
270
273
|
// 3. Dispatch by mode
|
|
271
274
|
if (config.mode === "queue") {
|
|
@@ -64,6 +64,19 @@ function isIntlWordBoundary(source: string, index: number): boolean {
|
|
|
64
64
|
return UNICODE_WORD_SEGMENTER?.segment(source).containing(index)?.index === index;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
function isStandaloneJapaneseLeadingParticle(
|
|
68
|
+
particle: string,
|
|
69
|
+
source: string,
|
|
70
|
+
boundaryIndex: number,
|
|
71
|
+
): boolean {
|
|
72
|
+
if (!JAPANESE_WORD_SEGMENTER || boundaryIndex <= 0 || !JAPANESE_PARTICLE_RE.test(particle)) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
const particleStart = boundaryIndex - particle.length;
|
|
76
|
+
const segment = JAPANESE_WORD_SEGMENTER.segment(source).containing(particleStart);
|
|
77
|
+
return segment?.index === particleStart
|
|
78
|
+
&& segment.index + segment.segment.length === boundaryIndex;
|
|
79
|
+
}
|
|
67
80
|
function isKoreanUnspacedQuestionBoundary(suffix: string): boolean {
|
|
68
81
|
return KOREAN_UNSPACED_QUESTION_PARTICLES.some((particle) =>
|
|
69
82
|
suffix.startsWith(particle) &&
|
|
@@ -91,18 +104,15 @@ function isUnicodePhraseBoundary(
|
|
|
91
104
|
source: string = "",
|
|
92
105
|
boundaryIndex: number = -1,
|
|
93
106
|
strictUnicode = false,
|
|
94
|
-
allowLeadingParticle = false,
|
|
95
107
|
): boolean {
|
|
96
108
|
return (
|
|
97
109
|
character.length === 0
|
|
98
110
|
|| !UNICODE_WORD_OR_NUMBER_RE.test(character)
|
|
99
|
-
|| (allowLeadingParticle && isJapaneseParticleBoundary(character))
|
|
100
111
|
|| isJapaneseParticleBoundary(suffix)
|
|
101
112
|
|| (!strictUnicode &&
|
|
102
113
|
boundaryIndex >= 0 &&
|
|
103
114
|
!JAPANESE_KANA_RE.test(suffix) &&
|
|
104
115
|
isIntlWordBoundary(source, boundaryIndex))
|
|
105
|
-
|| (allowLeadingParticle && isKoreanParticleBoundary(character))
|
|
106
116
|
|| isKoreanParticleBoundary(suffix)
|
|
107
117
|
);
|
|
108
118
|
}
|
|
@@ -117,7 +127,10 @@ export function containsPhrase(haystack: string, needle: string): boolean {
|
|
|
117
127
|
const before = lastUnicodeCharacter(searchHaystack.slice(0, offset));
|
|
118
128
|
const after = searchHaystack.slice(offset + searchNeedle.length);
|
|
119
129
|
if (
|
|
120
|
-
|
|
130
|
+
(
|
|
131
|
+
isUnicodePhraseBoundary(before, "", searchHaystack, offset, caseInsensitive)
|
|
132
|
+
|| isStandaloneJapaneseLeadingParticle(before, searchHaystack, offset)
|
|
133
|
+
)
|
|
121
134
|
&& isUnicodePhraseBoundary(
|
|
122
135
|
firstUnicodeCharacter(after),
|
|
123
136
|
after,
|
package/src/entity-retrieval.ts
CHANGED
|
@@ -403,23 +403,37 @@ async function readCurrentPersistedEntityIndex(
|
|
|
403
403
|
const namespaceEntityIndexCache = new Map<string, EntityMentionIndex>();
|
|
404
404
|
const MAX_NAMESPACE_ENTITY_INDEX_CACHE_ENTRIES = 32;
|
|
405
405
|
|
|
406
|
+
function nativeEntityIndexRevision(chunks: NativeKnowledgeChunk[]): string {
|
|
407
|
+
const projection = chunks.map((chunk) => [
|
|
408
|
+
chunk.chunkId,
|
|
409
|
+
chunk.sourcePath,
|
|
410
|
+
chunk.title,
|
|
411
|
+
chunk.sourceKind,
|
|
412
|
+
uniqueStrings(chunk.aliases ?? []),
|
|
413
|
+
compactLine(chunk.content, 180),
|
|
414
|
+
chunk.derivedDate ?? null,
|
|
415
|
+
]);
|
|
416
|
+
return createHash("sha256").update(JSON.stringify(projection)).digest("hex");
|
|
417
|
+
}
|
|
418
|
+
|
|
406
419
|
function namespaceEntityIndexCacheKey(
|
|
407
420
|
storages: StorageManager[],
|
|
408
421
|
recallNamespaces: string[],
|
|
422
|
+
nativeRevision: string,
|
|
409
423
|
): string {
|
|
410
|
-
const namespaceKey = uniqueStrings(recallNamespaces).
|
|
424
|
+
const namespaceKey = uniqueStrings(recallNamespaces).join("\u001f");
|
|
411
425
|
const storageKey = storages
|
|
412
426
|
.map((scopedStorage) => {
|
|
413
427
|
const aliases = Object.entries(scopedStorage.entityAliases)
|
|
414
428
|
.sort(([left], [right]) => left.localeCompare(right));
|
|
415
429
|
return (
|
|
416
430
|
`${path.resolve(scopedStorage.dir)}@${scopedStorage.getMemoryStatusVersion()}` +
|
|
417
|
-
`:${scopedStorage.getMemoryCorpusVersion()}:${scopedStorage.
|
|
431
|
+
`:${scopedStorage.getMemoryCorpusVersion()}:${scopedStorage.getEntityMutationVersion()}` +
|
|
432
|
+
`:${scopedStorage.hotCacheKeyId()}:${JSON.stringify(aliases)}`
|
|
418
433
|
);
|
|
419
434
|
})
|
|
420
|
-
.sort()
|
|
421
435
|
.join("\u001f");
|
|
422
|
-
return `${namespaceKey}\u001e${storageKey}`;
|
|
436
|
+
return `${namespaceKey}\u001e${storageKey}\u001e${nativeRevision}`;
|
|
423
437
|
}
|
|
424
438
|
|
|
425
439
|
function rememberNamespaceEntityIndex(key: string, index: EntityMentionIndex): void {
|
|
@@ -1030,6 +1044,9 @@ export async function buildEntityRecallSection(options: BuildEntityRecallSection
|
|
|
1030
1044
|
resolveNamespaceCapabilities(options.config).namespaces &&
|
|
1031
1045
|
options.namespaceStorage !== undefined &&
|
|
1032
1046
|
(options.recallNamespaces?.length ?? 0) > 0;
|
|
1047
|
+
if (namespaceScoped) {
|
|
1048
|
+
nativeChunks = await readNativeChunks(options.config, options.recallNamespaces);
|
|
1049
|
+
}
|
|
1033
1050
|
const resolvedStorages = namespaceScoped
|
|
1034
1051
|
? await resolveEntityIndexStorages(
|
|
1035
1052
|
options.storage,
|
|
@@ -1039,8 +1056,12 @@ export async function buildEntityRecallSection(options: BuildEntityRecallSection
|
|
|
1039
1056
|
)
|
|
1040
1057
|
: undefined;
|
|
1041
1058
|
const namespaceCacheKey =
|
|
1042
|
-
resolvedStorages && options.recallNamespaces
|
|
1043
|
-
? namespaceEntityIndexCacheKey(
|
|
1059
|
+
resolvedStorages && options.recallNamespaces && nativeChunks
|
|
1060
|
+
? namespaceEntityIndexCacheKey(
|
|
1061
|
+
resolvedStorages,
|
|
1062
|
+
options.recallNamespaces,
|
|
1063
|
+
nativeEntityIndexRevision(nativeChunks),
|
|
1064
|
+
)
|
|
1044
1065
|
: undefined;
|
|
1045
1066
|
let index: EntityMentionIndex | undefined = namespaceCacheKey
|
|
1046
1067
|
? namespaceEntityIndexCache.get(namespaceCacheKey)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import test from "node:test";
|
|
6
|
+
|
|
7
|
+
import type { EngramAccessService } from "./access-service.js";
|
|
8
|
+
import { externalWikiSearchOperation } from "./external-wiki-access.js";
|
|
9
|
+
import type { ExternalWikiRoot } from "./external-wiki.js";
|
|
10
|
+
|
|
11
|
+
async function fixtureRoot(): Promise<ExternalWikiRoot> {
|
|
12
|
+
const rootDir = await mkdtemp(path.join(os.tmpdir(), "remnic-external-wiki-access-"));
|
|
13
|
+
await mkdir(path.join(rootDir, "wiki"), { recursive: true });
|
|
14
|
+
await writeFile(
|
|
15
|
+
path.join(rootDir, "INDEX.md"),
|
|
16
|
+
"- [[wiki/planning|Planning Systems]] - deterministic planner fan-out\n",
|
|
17
|
+
"utf8"
|
|
18
|
+
);
|
|
19
|
+
await writeFile(
|
|
20
|
+
path.join(rootDir, "wiki", "planning.md"),
|
|
21
|
+
"# Planning Systems\n\nDeterministic planner fan-out keeps cited evidence.\n",
|
|
22
|
+
"utf8"
|
|
23
|
+
);
|
|
24
|
+
return {
|
|
25
|
+
id: "planning",
|
|
26
|
+
rootDir,
|
|
27
|
+
enabled: true,
|
|
28
|
+
pagesDir: "wiki",
|
|
29
|
+
indexFile: "INDEX.md",
|
|
30
|
+
indexInQmd: false,
|
|
31
|
+
includeInDefaultRecall: false,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
test("external wiki operation searches roots from the service config", async () => {
|
|
36
|
+
const root = await fixtureRoot();
|
|
37
|
+
try {
|
|
38
|
+
const service = { configRef: { externalWikis: [root] } } as EngramAccessService;
|
|
39
|
+
const output = await externalWikiSearchOperation.run(
|
|
40
|
+
{ query: "deterministic planner", limit: 2, maxCharsPerHit: 200 },
|
|
41
|
+
{ service }
|
|
42
|
+
);
|
|
43
|
+
assert.equal(output.result.hits[0]?.wikiId, "planning");
|
|
44
|
+
assert.equal(output.result.hits[0]?.path, "wiki/planning.md");
|
|
45
|
+
} finally {
|
|
46
|
+
await rm(root.rootDir, { recursive: true, force: true });
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test("external wiki operation rejects empty query and unknown fields", async () => {
|
|
51
|
+
let configRead = false;
|
|
52
|
+
const service = {
|
|
53
|
+
get configRef() {
|
|
54
|
+
configRead = true;
|
|
55
|
+
return { externalWikis: [] };
|
|
56
|
+
},
|
|
57
|
+
} as unknown as EngramAccessService;
|
|
58
|
+
|
|
59
|
+
await assert.rejects(externalWikiSearchOperation.run({ query: " " }, { service }), /query is required/i);
|
|
60
|
+
await assert.rejects(
|
|
61
|
+
externalWikiSearchOperation.run({ query: "topic", unexpected: true }, { service }),
|
|
62
|
+
/unrecognized key/i
|
|
63
|
+
);
|
|
64
|
+
assert.equal(configRead, false);
|
|
65
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
import { defineOperation } from "./access-boundary.js";
|
|
4
|
+
import {
|
|
5
|
+
type ExternalWikiSearchInput,
|
|
6
|
+
type ExternalWikiSearchResult,
|
|
7
|
+
searchExternalWikis,
|
|
8
|
+
} from "./external-wiki-search.js";
|
|
9
|
+
|
|
10
|
+
const externalWikiSearchSchema = z
|
|
11
|
+
.object({
|
|
12
|
+
query: z.string().trim().min(1, "query is required").max(2_048),
|
|
13
|
+
limit: z.number().int().min(1).max(20).optional(),
|
|
14
|
+
wikiId: z.string().trim().min(1).max(256).optional(),
|
|
15
|
+
maxCharsPerHit: z.number().int().min(1).max(8_000).optional(),
|
|
16
|
+
})
|
|
17
|
+
.strict();
|
|
18
|
+
|
|
19
|
+
export interface ExternalWikiSearchOutput {
|
|
20
|
+
readonly result: ExternalWikiSearchResult;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const externalWikiSearchOperation = defineOperation<ExternalWikiSearchInput, ExternalWikiSearchOutput>({
|
|
24
|
+
name: "external_wiki_search",
|
|
25
|
+
description: "Search configured external compiled-wiki roots and return cited snippets.",
|
|
26
|
+
schema: externalWikiSearchSchema,
|
|
27
|
+
fleetWide: true,
|
|
28
|
+
handler: async (input, ctx) => ({
|
|
29
|
+
result: await searchExternalWikis(ctx.service.configRef.externalWikis, input),
|
|
30
|
+
}),
|
|
31
|
+
});
|