@remnic/core 9.45.3 → 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 +15 -11
- 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.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-HZFHQ4AQ.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 +362 -350
- 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 +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 +32 -32
- 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 +2 -1
- 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 +12 -12
- 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/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 +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-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-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-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
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { mkdir, symlink } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import test from "node:test";
|
|
5
|
+
|
|
6
|
+
import type { QmdSearchResult } from "../types.js";
|
|
7
|
+
import * as wikiGuard from "../external-wiki-guard.js";
|
|
8
|
+
import { withTempDir } from "../testing/tmp-dir.js";
|
|
9
|
+
import {
|
|
10
|
+
filterRecallCandidates,
|
|
11
|
+
isExternalWikiCollectionName,
|
|
12
|
+
isGenericRecallExcludedPath,
|
|
13
|
+
} from "./generic-recall-paths.js";
|
|
14
|
+
|
|
15
|
+
const { assertExternalWikiRootOutsideMemoryDir } = wikiGuard;
|
|
16
|
+
const assertCanonicalIsolation = (
|
|
17
|
+
wikiGuard as typeof wikiGuard & {
|
|
18
|
+
assertExternalWikiRootOutsideMemoryDirCanonical(memoryDir: string, rootDir: string): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
).assertExternalWikiRootOutsideMemoryDirCanonical;
|
|
21
|
+
|
|
22
|
+
function hit(path: string, snippet: string): QmdSearchResult {
|
|
23
|
+
return { docid: path, path, score: 1, snippet };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const OVERLAPPING_QUERY = "bounded context budgets";
|
|
27
|
+
const MEMORY_HIT = hit("openclaw-engram/facts/context-budget.md", `The operator chose ${OVERLAPPING_QUERY}.`);
|
|
28
|
+
const WIKI_HIT = hit(
|
|
29
|
+
"qmd://external-wiki-reading/wiki/context-budgets.md",
|
|
30
|
+
`A compiled guide to ${OVERLAPPING_QUERY}.`
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
const MEMORY_POLICY = {
|
|
34
|
+
qmdCollection: "openclaw-engram",
|
|
35
|
+
qmdColdCollection: "openclaw-engram-cold",
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
test("default recall excludes overlapping external wiki hits before applying its limit", () => {
|
|
39
|
+
const recalled = filterRecallCandidates([WIKI_HIT, MEMORY_HIT], {
|
|
40
|
+
namespacesEnabled: false,
|
|
41
|
+
recallNamespaces: [],
|
|
42
|
+
resolveNamespace: () => "default",
|
|
43
|
+
limit: 1,
|
|
44
|
+
pathPolicy: MEMORY_POLICY,
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
assert.deepEqual(recalled, [MEMORY_HIT]);
|
|
48
|
+
assert.equal(isGenericRecallExcludedPath(WIKI_HIT.path, MEMORY_POLICY, "qmd"), true);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test("the recall-only guard leaves on-demand external wiki search results available", () => {
|
|
52
|
+
const onDemandResults = [WIKI_HIT];
|
|
53
|
+
|
|
54
|
+
assert.equal(onDemandResults[0]?.path, WIKI_HIT.path);
|
|
55
|
+
assert.match(onDemandResults[0]?.snippet ?? "", new RegExp(OVERLAPPING_QUERY));
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test("external wiki collection ids cannot masquerade as memory collections", () => {
|
|
59
|
+
assert.equal(isExternalWikiCollectionName("external-wiki-reading"), true);
|
|
60
|
+
assert.equal(isExternalWikiCollectionName("external-wiki-reading--default"), true);
|
|
61
|
+
assert.equal(isExternalWikiCollectionName("openclaw-engram"), false);
|
|
62
|
+
assert.equal(isExternalWikiCollectionName("my-external-wiki-reading"), false);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
test("external wiki roots cannot enter the primary memory collection walk", () => {
|
|
66
|
+
assert.throws(
|
|
67
|
+
() => assertExternalWikiRootOutsideMemoryDir("/data/memory", "/data/memory"),
|
|
68
|
+
/must be outside memoryDir/
|
|
69
|
+
);
|
|
70
|
+
assert.throws(
|
|
71
|
+
() => assertExternalWikiRootOutsideMemoryDir("/data/memory", "/data/memory/compiled-wiki"),
|
|
72
|
+
/must be outside memoryDir/
|
|
73
|
+
);
|
|
74
|
+
assert.doesNotThrow(() => assertExternalWikiRootOutsideMemoryDir("/data/memory", "/data/compiled-wiki"));
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test("external wiki root isolation resolves filesystem aliases", async () => {
|
|
78
|
+
assert.equal(typeof assertCanonicalIsolation, "function");
|
|
79
|
+
await withTempDir(async (rootDir) => {
|
|
80
|
+
const memoryDir = path.join(rootDir, "memory");
|
|
81
|
+
const nestedWiki = path.join(memoryDir, "compiled-wiki");
|
|
82
|
+
const wikiAlias = path.join(rootDir, "wiki-alias");
|
|
83
|
+
await mkdir(nestedWiki, { recursive: true });
|
|
84
|
+
await symlink(nestedWiki, wikiAlias);
|
|
85
|
+
const memoryAlias = path.join(rootDir, "memory-alias");
|
|
86
|
+
await symlink(memoryDir, memoryAlias);
|
|
87
|
+
|
|
88
|
+
await assert.rejects(() => assertCanonicalIsolation(memoryDir, wikiAlias), /must be outside memoryDir/);
|
|
89
|
+
await assert.rejects(
|
|
90
|
+
() => assertCanonicalIsolation(memoryDir, path.join(memoryAlias, "future-wiki")),
|
|
91
|
+
/must be outside memoryDir/
|
|
92
|
+
);
|
|
93
|
+
}, "remnic-external-wiki-guard-");
|
|
94
|
+
});
|
|
@@ -419,6 +419,7 @@ export class ExtractionPersistCoordinator {
|
|
|
419
419
|
source: string;
|
|
420
420
|
sources?: ProvenanceSource[];
|
|
421
421
|
provenance?: "verified" | "unverified" | "none";
|
|
422
|
+
toolScoped?: true;
|
|
422
423
|
}): Promise<void> => {
|
|
423
424
|
if (
|
|
424
425
|
!scopeProfileWritePlan ||
|
|
@@ -536,6 +537,7 @@ export class ExtractionPersistCoordinator {
|
|
|
536
537
|
contentHashSource: options.category === "fact" ? dedupContent : rawContent,
|
|
537
538
|
...(options.sources && options.sources.length > 0 ? { sources: options.sources } : {}),
|
|
538
539
|
...(options.provenance ? { provenance: options.provenance } : {}),
|
|
540
|
+
...(options.toolScoped ? { toolScoped: true as const } : {}),
|
|
539
541
|
});
|
|
540
542
|
const promotedId = targetPromotion.id;
|
|
541
543
|
// #1645: if the TARGET namespace's own tombstone blocked this promotion,
|
|
@@ -615,8 +617,12 @@ export class ExtractionPersistCoordinator {
|
|
|
615
617
|
sources?: ProvenanceSource[];
|
|
616
618
|
provenance?: "verified" | "unverified" | "none";
|
|
617
619
|
}): Promise<void> => {
|
|
618
|
-
|
|
619
|
-
|
|
620
|
+
const toolScoped = withholdToolScopedFromSharedNamespace(options);
|
|
621
|
+
await promoteMemoryToProfileTargets({
|
|
622
|
+
...options,
|
|
623
|
+
...(toolScoped ? { toolScoped: true as const } : {}),
|
|
624
|
+
});
|
|
625
|
+
if (lifecycleCaps.extractionScopeClassification && toolScoped) return;
|
|
620
626
|
if (
|
|
621
627
|
!shouldPromoteToShared(
|
|
622
628
|
this.deps.config,
|
|
@@ -939,6 +945,7 @@ export class ExtractionPersistCoordinator {
|
|
|
939
945
|
// Claim-level provenance spans (issue #1575 PR 2).
|
|
940
946
|
...(options.sources && options.sources.length > 0 ? { sources: options.sources } : {}),
|
|
941
947
|
...(options.provenance ? { provenance: options.provenance } : {}),
|
|
948
|
+
...(toolScoped ? { toolScoped: true as const } : {}),
|
|
942
949
|
});
|
|
943
950
|
const promotedId = sharedPromotion.id;
|
|
944
951
|
// #1645: if the shared namespace's own tombstone blocked this promotion,
|
|
@@ -2019,6 +2026,11 @@ export class ExtractionPersistCoordinator {
|
|
|
2019
2026
|
? "extraction-proactive"
|
|
2020
2027
|
: "extraction";
|
|
2021
2028
|
const extractionSourceConnector = sourceContext?.sourceConnector;
|
|
2029
|
+
const factToolScoped = withholdToolScopedFromSharedNamespace({
|
|
2030
|
+
content: fact.content,
|
|
2031
|
+
sourceConnector: extractionSourceConnector,
|
|
2032
|
+
procedureSteps: fact.procedureSteps,
|
|
2033
|
+
});
|
|
2022
2034
|
|
|
2023
2035
|
// Check for contradictions before writing (Phase 2B).
|
|
2024
2036
|
// NOTE: This block was moved above the chunking branch so that the
|
|
@@ -2227,6 +2239,7 @@ export class ExtractionPersistCoordinator {
|
|
|
2227
2239
|
// PR #2016: never defer here — fallible chunk/artifact writes follow this
|
|
2228
2240
|
// durable parent .md; flush the hash now so a throw can't strand it (dup).
|
|
2229
2241
|
deferHashIndexSave: false,
|
|
2242
|
+
...(factToolScoped ? { toolScoped: true as const } : {}),
|
|
2230
2243
|
});
|
|
2231
2244
|
const parentId = parentWrite.id;
|
|
2232
2245
|
// #1645: surface the tombstone block and gate active post-write paths
|
|
@@ -2310,6 +2323,7 @@ export class ExtractionPersistCoordinator {
|
|
|
2310
2323
|
...(fact.sources && fact.sources.length > 0 ? { sources: fact.sources } : {}),
|
|
2311
2324
|
...(fact.provenance ? { provenance: fact.provenance } : {}),
|
|
2312
2325
|
...(extractionSourceConnector ? { sourceConnector: extractionSourceConnector } : {}),
|
|
2326
|
+
...(factToolScoped ? { toolScoped: true as const } : {}),
|
|
2313
2327
|
},
|
|
2314
2328
|
);
|
|
2315
2329
|
}
|
|
@@ -2457,6 +2471,7 @@ export class ExtractionPersistCoordinator {
|
|
|
2457
2471
|
intentActionType: inferredIntent?.actionType,
|
|
2458
2472
|
intentEntityTypes: inferredIntent?.entityTypes,
|
|
2459
2473
|
...(extractionSourceConnector ? { sourceConnector: extractionSourceConnector } : {}),
|
|
2474
|
+
...(factToolScoped ? { toolScoped: true as const } : {}),
|
|
2460
2475
|
});
|
|
2461
2476
|
}
|
|
2462
2477
|
// v8.2: graph edge building for chunked memories. #1576: skip pending_review.
|
|
@@ -2598,6 +2613,7 @@ export class ExtractionPersistCoordinator {
|
|
|
2598
2613
|
// #1909: defer the per-fact index flush to the batch save only when
|
|
2599
2614
|
// fact dedup is on (the batch saver is a no-op otherwise).
|
|
2600
2615
|
deferHashIndexSave: factDedupEnabled,
|
|
2616
|
+
...(factToolScoped ? { toolScoped: true as const } : {}),
|
|
2601
2617
|
});
|
|
2602
2618
|
const memoryId = factWrite.id;
|
|
2603
2619
|
// #1645: surface the tombstone block; gate active post-write paths like #1576
|
|
@@ -2762,6 +2778,7 @@ export class ExtractionPersistCoordinator {
|
|
|
2762
2778
|
intentActionType: inferredIntent?.actionType,
|
|
2763
2779
|
intentEntityTypes: inferredIntent?.entityTypes,
|
|
2764
2780
|
...(extractionSourceConnector ? { sourceConnector: extractionSourceConnector } : {}),
|
|
2781
|
+
...(factToolScoped ? { toolScoped: true as const } : {}),
|
|
2765
2782
|
});
|
|
2766
2783
|
}
|
|
2767
2784
|
// Register in the target storage content-hash index after successful
|
|
@@ -309,11 +309,11 @@ export async function runExtractionPostPersist(
|
|
|
309
309
|
}
|
|
310
310
|
|
|
311
311
|
/**
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
*
|
|
312
|
+
* Record a processed fingerprint when applicable and advance the extraction
|
|
313
|
+
* liveness watermark only for a provider-backed empty success. Fingerprinted
|
|
314
|
+
* imports treat the metadata save as load-bearing dedupe state; normal live
|
|
315
|
+
* runs treat the stamp as diagnostic and fail open. Deadline errors always
|
|
316
|
+
* propagate.
|
|
317
317
|
*/
|
|
318
318
|
export async function commitEmptySuccessExtraction(args: {
|
|
319
319
|
storage: StorageManager;
|
|
@@ -321,6 +321,7 @@ export async function commitEmptySuccessExtraction(args: {
|
|
|
321
321
|
extractionFingerprint: string | null;
|
|
322
322
|
shouldPersistProcessedFingerprint: boolean;
|
|
323
323
|
hasExtractionFailure: boolean;
|
|
324
|
+
extractionSkippedReason: ExtractionResult["extractionSkippedReason"];
|
|
324
325
|
recordProcessedExtractionFingerprint: (storage: StorageManager, fingerprint: string, meta: MetaState) => Promise<unknown>;
|
|
325
326
|
runDeadlineAware: <T>(operation: () => Promise<T>, phase: string, clearTimerOnError?: boolean) => Promise<T>;
|
|
326
327
|
isDeadlineError: (error: unknown) => boolean;
|
|
@@ -331,26 +332,43 @@ export async function commitEmptySuccessExtraction(args: {
|
|
|
331
332
|
extractionFingerprint,
|
|
332
333
|
shouldPersistProcessedFingerprint,
|
|
333
334
|
hasExtractionFailure,
|
|
335
|
+
extractionSkippedReason,
|
|
334
336
|
recordProcessedExtractionFingerprint,
|
|
335
337
|
runDeadlineAware,
|
|
336
338
|
isDeadlineError,
|
|
337
339
|
} = args;
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
340
|
+
const shouldRecordFingerprint =
|
|
341
|
+
extractionFingerprint !== null &&
|
|
342
|
+
shouldPersistProcessedFingerprint &&
|
|
343
|
+
!hasExtractionFailure;
|
|
344
|
+
const shouldStampLiveness =
|
|
345
|
+
!hasExtractionFailure && extractionSkippedReason === undefined;
|
|
346
|
+
if (!shouldRecordFingerprint && !shouldStampLiveness) return;
|
|
347
|
+
|
|
348
|
+
const metadataFailureIsFatal = shouldRecordFingerprint;
|
|
349
|
+
try {
|
|
350
|
+
const meta =
|
|
351
|
+
existingMeta ??
|
|
352
|
+
await runDeadlineAware(
|
|
353
|
+
() => storage.loadMeta(),
|
|
354
|
+
"during_empty_success_liveness_load",
|
|
355
|
+
false,
|
|
356
|
+
);
|
|
357
|
+
if (shouldRecordFingerprint) {
|
|
358
|
+
await recordProcessedExtractionFingerprint(storage, extractionFingerprint, meta);
|
|
359
|
+
}
|
|
360
|
+
if (shouldStampLiveness) {
|
|
347
361
|
meta.extractionCount += 1;
|
|
348
362
|
meta.lastExtractionAt = new Date().toISOString();
|
|
349
|
-
await runDeadlineAware(() => storage.saveMeta(meta!), "during_empty_success_liveness_save", false);
|
|
350
|
-
} catch (err) {
|
|
351
|
-
if (isDeadlineError(err)) throw err;
|
|
352
|
-
if (livenessStampFatal) throw err;
|
|
353
|
-
log.warn("runExtraction: failed to stamp empty-success liveness watermark (non-fatal)", err);
|
|
354
363
|
}
|
|
364
|
+
await runDeadlineAware(
|
|
365
|
+
() => storage.saveMeta(meta),
|
|
366
|
+
"during_empty_success_liveness_save",
|
|
367
|
+
false,
|
|
368
|
+
);
|
|
369
|
+
} catch (err) {
|
|
370
|
+
if (isDeadlineError(err)) throw err;
|
|
371
|
+
if (metadataFailureIsFatal) throw err;
|
|
372
|
+
log.warn("runExtraction: failed to stamp empty-success liveness watermark (non-fatal)", err);
|
|
355
373
|
}
|
|
356
374
|
}
|
|
@@ -93,7 +93,11 @@ interface Harness {
|
|
|
93
93
|
setRespond: (fn: (turns: BufferTurn[]) => ExtractionResult | Promise<ExtractionResult>) => void;
|
|
94
94
|
setPassiveCapture: (fn: () => void | Promise<void>) => void;
|
|
95
95
|
setMemoryBox: (fn: () => void | Promise<void>) => void;
|
|
96
|
+
setBufferClear: (fn: () => void | Promise<void>) => void;
|
|
96
97
|
setPersist: (fn: () => void | Promise<void>) => void;
|
|
98
|
+
setFingerprintRecorder: (
|
|
99
|
+
fn: ExtractionRunCoordinatorDeps["recordProcessedExtractionFingerprint"],
|
|
100
|
+
) => void;
|
|
97
101
|
recordedProcessedCount: () => number;
|
|
98
102
|
run: (
|
|
99
103
|
coord: ExtractionRunCoordinator,
|
|
@@ -140,6 +144,9 @@ async function makeHarness(overrides: Record<string, unknown> = {}): Promise<Har
|
|
|
140
144
|
let persistHandler: () => void | Promise<void> = async () => {};
|
|
141
145
|
let memoryBoxHandler: () => void | Promise<void> = async () => {};
|
|
142
146
|
let recordedProcessedCount = 0;
|
|
147
|
+
let fingerprintRecorder:
|
|
148
|
+
ExtractionRunCoordinatorDeps["recordProcessedExtractionFingerprint"] =
|
|
149
|
+
async () => {};
|
|
143
150
|
|
|
144
151
|
let threadingBlocked = false;
|
|
145
152
|
let persistCalls = 0;
|
|
@@ -184,8 +191,9 @@ async function makeHarness(overrides: Record<string, unknown> = {}): Promise<Har
|
|
|
184
191
|
requestQmdMaintenance: () => {},
|
|
185
192
|
runTierMigrationCycle: async () => migrationSummary,
|
|
186
193
|
getLastPersistExtractionDeferredCount: () => 0,
|
|
187
|
-
recordProcessedExtractionFingerprint: async () => {
|
|
194
|
+
recordProcessedExtractionFingerprint: async (storage, fingerprint, meta) => {
|
|
188
195
|
recordedProcessedCount += 1;
|
|
196
|
+
await fingerprintRecorder(storage, fingerprint, meta);
|
|
189
197
|
},
|
|
190
198
|
});
|
|
191
199
|
|
|
@@ -210,6 +218,14 @@ async function makeHarness(overrides: Record<string, unknown> = {}): Promise<Har
|
|
|
210
218
|
setMemoryBox: (fn) => {
|
|
211
219
|
memoryBoxHandler = fn;
|
|
212
220
|
},
|
|
221
|
+
setBufferClear: (fn) => {
|
|
222
|
+
buffer.clearAfterExtraction = async () => {
|
|
223
|
+
await fn();
|
|
224
|
+
};
|
|
225
|
+
},
|
|
226
|
+
setFingerprintRecorder: (fn) => {
|
|
227
|
+
fingerprintRecorder = fn;
|
|
228
|
+
},
|
|
213
229
|
setPersist: (fn) => {
|
|
214
230
|
persistHandler = fn;
|
|
215
231
|
},
|
|
@@ -685,6 +701,32 @@ test("circuit breaker: a forced flush still calls extract() while the breaker is
|
|
|
685
701
|
}
|
|
686
702
|
});
|
|
687
703
|
|
|
704
|
+
test("circuit breaker: a forced local prefilter skip does not heal an open breaker", async () => {
|
|
705
|
+
const h = await makeHarness({
|
|
706
|
+
extractionRetryScheduleMs: [3_600_000],
|
|
707
|
+
extractionBreakerFailureThreshold: 1,
|
|
708
|
+
extractionBreakerCooldownMs: 3_600_000,
|
|
709
|
+
});
|
|
710
|
+
try {
|
|
711
|
+
const coord = h.newCoordinator();
|
|
712
|
+
h.setRespond(() => failureResult("provider_retryable"));
|
|
713
|
+
await h.run(coord, "fp-1");
|
|
714
|
+
assert.equal(coord.getExtractionResilienceStatus().breaker.state, "open");
|
|
715
|
+
|
|
716
|
+
h.setRespond(() => ({
|
|
717
|
+
...emptySuccessResult(),
|
|
718
|
+
extractionSkippedReason: "mechanical_telemetry",
|
|
719
|
+
}));
|
|
720
|
+
const result = await h.run(coord, "fp-2", { force: true });
|
|
721
|
+
|
|
722
|
+
assert.equal(result.reason, "empty_extraction_result");
|
|
723
|
+
assert.equal(coord.getExtractionResilienceStatus().breaker.state, "open");
|
|
724
|
+
assert.equal(coord.getExtractionResilienceStatus().breaker.consecutiveFailures, 1);
|
|
725
|
+
} finally {
|
|
726
|
+
await h.cleanup();
|
|
727
|
+
}
|
|
728
|
+
});
|
|
729
|
+
|
|
688
730
|
test("circuit breaker: auth_config failure opens the breaker immediately (no hot loop)", async () => {
|
|
689
731
|
const h = await makeHarness({
|
|
690
732
|
extractionRetryScheduleMs: [3_600_000],
|
|
@@ -1013,7 +1055,7 @@ test("extraction liveness (#2223): a normal live empty success advances lastExtr
|
|
|
1013
1055
|
const result = await coord.runExtraction(liveTurns("nothing-durable-here"), {
|
|
1014
1056
|
skipCharThreshold: true,
|
|
1015
1057
|
skipUserTurnThreshold: true,
|
|
1016
|
-
clearBufferAfterExtraction:
|
|
1058
|
+
clearBufferAfterExtraction: true,
|
|
1017
1059
|
bufferKey: "nothing-durable-here",
|
|
1018
1060
|
});
|
|
1019
1061
|
|
|
@@ -1030,6 +1072,133 @@ test("extraction liveness (#2223): a normal live empty success advances lastExtr
|
|
|
1030
1072
|
}
|
|
1031
1073
|
});
|
|
1032
1074
|
|
|
1075
|
+
test("extraction liveness (#2227): prefilter skips do not advance the watermark", async () => {
|
|
1076
|
+
for (const extractionSkippedReason of [
|
|
1077
|
+
"conversation_only_non_memory",
|
|
1078
|
+
"mechanical_telemetry",
|
|
1079
|
+
] as const) {
|
|
1080
|
+
const h = await makeHarness();
|
|
1081
|
+
try {
|
|
1082
|
+
h.setRespond(() => ({ ...emptySuccessResult(), extractionSkippedReason }));
|
|
1083
|
+
const storage = await h.storageForNs("default");
|
|
1084
|
+
const before = await storage.loadMeta();
|
|
1085
|
+
|
|
1086
|
+
const result = await h.newCoordinator().runExtraction(liveTurns(extractionSkippedReason), {
|
|
1087
|
+
skipCharThreshold: true,
|
|
1088
|
+
skipUserTurnThreshold: true,
|
|
1089
|
+
clearBufferAfterExtraction: true,
|
|
1090
|
+
bufferKey: extractionSkippedReason,
|
|
1091
|
+
});
|
|
1092
|
+
|
|
1093
|
+
assert.equal(result.reason, "empty_extraction_result");
|
|
1094
|
+
const after = await storage.loadMeta();
|
|
1095
|
+
assert.equal(after.extractionCount, before.extractionCount);
|
|
1096
|
+
assert.equal(after.lastExtractionAt, before.lastExtractionAt);
|
|
1097
|
+
} finally {
|
|
1098
|
+
await h.cleanup();
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
});
|
|
1102
|
+
|
|
1103
|
+
test("extraction liveness (#2227): passive-correction failure prevents a live empty-success stamp", async () => {
|
|
1104
|
+
const h = await makeHarness();
|
|
1105
|
+
try {
|
|
1106
|
+
h.setRespond(() => emptySuccessResult());
|
|
1107
|
+
h.setPassiveCapture(() => {
|
|
1108
|
+
throw new Error("passive capture failed");
|
|
1109
|
+
});
|
|
1110
|
+
const storage = await h.storageForNs("default");
|
|
1111
|
+
const before = await storage.loadMeta();
|
|
1112
|
+
|
|
1113
|
+
await assert.rejects(
|
|
1114
|
+
h.newCoordinator().runExtraction(liveTurns("passive-capture-failure"), {
|
|
1115
|
+
skipCharThreshold: true,
|
|
1116
|
+
skipUserTurnThreshold: true,
|
|
1117
|
+
clearBufferAfterExtraction: true,
|
|
1118
|
+
bufferKey: "passive-capture-failure",
|
|
1119
|
+
}),
|
|
1120
|
+
/passive capture failed/,
|
|
1121
|
+
);
|
|
1122
|
+
|
|
1123
|
+
const after = await storage.loadMeta();
|
|
1124
|
+
assert.equal(after.extractionCount, before.extractionCount);
|
|
1125
|
+
assert.equal(after.lastExtractionAt, before.lastExtractionAt);
|
|
1126
|
+
} finally {
|
|
1127
|
+
await h.cleanup();
|
|
1128
|
+
}
|
|
1129
|
+
});
|
|
1130
|
+
|
|
1131
|
+
test("extraction liveness (#2227): buffer-clear failure prevents a live empty-success stamp", async () => {
|
|
1132
|
+
const h = await makeHarness();
|
|
1133
|
+
try {
|
|
1134
|
+
h.setRespond(() => emptySuccessResult());
|
|
1135
|
+
h.setBufferClear(() => {
|
|
1136
|
+
throw new Error("buffer clear failed");
|
|
1137
|
+
});
|
|
1138
|
+
const storage = await h.storageForNs("default");
|
|
1139
|
+
const before = await storage.loadMeta();
|
|
1140
|
+
|
|
1141
|
+
await assert.rejects(
|
|
1142
|
+
h.newCoordinator().runExtraction(liveTurns("buffer-clear-failure"), {
|
|
1143
|
+
skipCharThreshold: true,
|
|
1144
|
+
skipUserTurnThreshold: true,
|
|
1145
|
+
clearBufferAfterExtraction: true,
|
|
1146
|
+
bufferKey: "buffer-clear-failure",
|
|
1147
|
+
}),
|
|
1148
|
+
/buffer clear failed/,
|
|
1149
|
+
);
|
|
1150
|
+
|
|
1151
|
+
const after = await storage.loadMeta();
|
|
1152
|
+
assert.equal(after.extractionCount, before.extractionCount);
|
|
1153
|
+
assert.equal(after.lastExtractionAt, before.lastExtractionAt);
|
|
1154
|
+
} finally {
|
|
1155
|
+
await h.cleanup();
|
|
1156
|
+
}
|
|
1157
|
+
});
|
|
1158
|
+
|
|
1159
|
+
test("extraction liveness (#2227): a fingerprinted prefilter skip persists dedupe state without stamping liveness", async () => {
|
|
1160
|
+
const h = await makeHarness();
|
|
1161
|
+
try {
|
|
1162
|
+
h.setRespond(() => ({
|
|
1163
|
+
...emptySuccessResult(),
|
|
1164
|
+
extractionSkippedReason: "mechanical_telemetry",
|
|
1165
|
+
}));
|
|
1166
|
+
h.setFingerprintRecorder(async (_storage, fingerprint, meta) => {
|
|
1167
|
+
assert.ok(meta, "empty-success commit supplies preloaded metadata");
|
|
1168
|
+
meta.processedExtractionFingerprints = [
|
|
1169
|
+
...(meta.processedExtractionFingerprints ?? []),
|
|
1170
|
+
{ fingerprint, observedAt: new Date().toISOString() },
|
|
1171
|
+
];
|
|
1172
|
+
});
|
|
1173
|
+
const storage = await h.storageForNs("default");
|
|
1174
|
+
const before = await storage.loadMeta();
|
|
1175
|
+
const baselineFingerprintCount =
|
|
1176
|
+
before.processedExtractionFingerprints?.length ?? 0;
|
|
1177
|
+
|
|
1178
|
+
const result = await h.newCoordinator().runExtraction(
|
|
1179
|
+
makeTurns("fingerprinted-prefilter"),
|
|
1180
|
+
{
|
|
1181
|
+
skipCharThreshold: true,
|
|
1182
|
+
skipUserTurnThreshold: true,
|
|
1183
|
+
clearBufferAfterExtraction: true,
|
|
1184
|
+
bufferKey: "fingerprinted-prefilter",
|
|
1185
|
+
},
|
|
1186
|
+
);
|
|
1187
|
+
|
|
1188
|
+
assert.equal(result.reason, "empty_extraction_result");
|
|
1189
|
+
const after = await storage.loadMeta();
|
|
1190
|
+
assert.equal(after.extractionCount, before.extractionCount);
|
|
1191
|
+
assert.equal(after.lastExtractionAt, before.lastExtractionAt);
|
|
1192
|
+
assert.equal(
|
|
1193
|
+
after.processedExtractionFingerprints?.length,
|
|
1194
|
+
baselineFingerprintCount + 1,
|
|
1195
|
+
);
|
|
1196
|
+
assert.equal(h.recordedProcessedCount(), 1);
|
|
1197
|
+
} finally {
|
|
1198
|
+
await h.cleanup();
|
|
1199
|
+
}
|
|
1200
|
+
});
|
|
1201
|
+
|
|
1033
1202
|
test("extraction liveness (#2223): a fingerprinted empty success advances the watermark once and records the fingerprint once", async () => {
|
|
1034
1203
|
const h = await makeHarness();
|
|
1035
1204
|
try {
|
|
@@ -979,7 +979,7 @@ export class ExtractionRunCoordinator {
|
|
|
979
979
|
// pre-#1908 clear-buffer behavior applies below.
|
|
980
980
|
log.warn("runExtraction: failed to load meta for retry bookkeeping (non-fatal)", err);
|
|
981
981
|
}
|
|
982
|
-
} else {
|
|
982
|
+
} else if (result.extractionSkippedReason === undefined) {
|
|
983
983
|
// Provider responded without failure → breaker heals; clear any
|
|
984
984
|
// parked backoff for this fingerprint so it proceeds normally.
|
|
985
985
|
this.resetProviderBreakerOnSuccess();
|
|
@@ -1016,19 +1016,20 @@ export class ExtractionRunCoordinator {
|
|
|
1016
1016
|
{ extractionFailure }
|
|
1017
1017
|
);
|
|
1018
1018
|
}
|
|
1019
|
-
|
|
1019
|
+
const emptySuccessCommit = {
|
|
1020
1020
|
storage,
|
|
1021
1021
|
meta,
|
|
1022
1022
|
extractionFingerprint,
|
|
1023
1023
|
shouldPersistProcessedFingerprint,
|
|
1024
1024
|
hasExtractionFailure: Boolean(extractionFailure),
|
|
1025
|
+
extractionSkippedReason: result.extractionSkippedReason,
|
|
1025
1026
|
recordProcessedExtractionFingerprint: this.deps.recordProcessedExtractionFingerprint,
|
|
1026
1027
|
runDeadlineAware,
|
|
1027
|
-
isDeadlineError: (error) => error instanceof ExtractionDeadlineError,
|
|
1028
|
-
}
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1028
|
+
isDeadlineError: (error: unknown) => error instanceof ExtractionDeadlineError,
|
|
1029
|
+
};
|
|
1030
|
+
if (shouldPersistProcessedFingerprint) {
|
|
1031
|
+
await commitEmptySuccessExtraction(emptySuccessCommit);
|
|
1032
|
+
}
|
|
1032
1033
|
await runPassiveCapture(normalizedTurns as BufferTurn[], {
|
|
1033
1034
|
sessionKey,
|
|
1034
1035
|
principal,
|
|
@@ -1037,16 +1038,13 @@ export class ExtractionRunCoordinator {
|
|
|
1037
1038
|
isLiveSession: clearBufferAfterExtraction,
|
|
1038
1039
|
});
|
|
1039
1040
|
if (recordedRetryFailure) {
|
|
1040
|
-
// Retain the failed turns so the backoff gate can re-attempt them after
|
|
1041
|
-
// nextEligibleAt. Clearing here would lose the data the retry state
|
|
1042
|
-
// points at (cursor high + codex P1). Trigger/forced paths already
|
|
1043
|
-
// retain via clearBufferAfterExtraction=false; this covers the normal
|
|
1044
|
-
// live-session path. Overflow is bounded by MAX_BUFFER_ENTRY_COUNT
|
|
1045
|
-
// with a loud eviction log.
|
|
1046
1041
|
log.debug("runExtraction: retaining buffer for backoff retry after failure");
|
|
1047
1042
|
} else {
|
|
1048
1043
|
await clearBuffer();
|
|
1049
1044
|
}
|
|
1045
|
+
if (!shouldPersistProcessedFingerprint) {
|
|
1046
|
+
await commitEmptySuccessExtraction(emptySuccessCommit);
|
|
1047
|
+
}
|
|
1050
1048
|
return { status: "skipped", reason: "empty_extraction_result", persistedCount: 0, durableOutputCount: 0 };
|
|
1051
1049
|
}
|
|
1052
1050
|
|