@remnic/core 9.69.32 → 9.69.34
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/access-admin-ops-surface.d.ts +13 -11
- package/dist/access-admin-ops-surface.js +64 -59
- package/dist/access-authorization-probe.d.ts +13 -11
- package/dist/access-authorization-probe.js +65 -60
- package/dist/access-boundary.d.ts +13 -11
- package/dist/access-boundary.js +64 -59
- package/dist/access-cli.js +140 -136
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +2 -1
- package/dist/access-coding-context-resolution.js +3 -3
- package/dist/access-extraction-force-flush.d.ts +13 -11
- package/dist/access-extraction-force-flush.js +64 -59
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-briefing.d.ts +13 -11
- package/dist/access-http-briefing.js +65 -60
- package/dist/access-http-lcm-compaction.d.ts +13 -11
- package/dist/access-http-lifecycle-flush.d.ts +13 -11
- package/dist/access-http-offline-stream.d.ts +13 -11
- package/dist/access-http-query.d.ts +3 -2
- package/dist/access-http-query.js +66 -61
- package/dist/access-http.d.ts +14 -12
- package/dist/access-http.js +86 -82
- package/dist/access-identity-continuity-surface.d.ts +11 -9
- package/dist/access-identity-continuity-surface.js +64 -59
- package/dist/access-lcm-surface.d.ts +13 -11
- package/dist/access-lcm-surface.js +64 -59
- package/dist/access-mcp.d.ts +13 -11
- package/dist/access-mcp.js +73 -69
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-BsvmyENS.d.ts → access-namespace-preflight-kXG8MvYx.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +64 -59
- package/dist/access-observe-transcript.d.ts +11 -9
- package/dist/access-observe-transcript.js +3 -3
- package/dist/access-observe-write-surface.d.ts +15 -13
- package/dist/access-observe-write-surface.js +64 -59
- package/dist/access-offline-manifest.d.ts +47 -11
- package/dist/access-offline-manifest.js +18 -16
- package/dist/access-operations-batch.js +67 -63
- package/dist/access-operations.d.ts +18 -16
- package/dist/access-operations.js +72 -68
- package/dist/access-recall-concurrency.d.ts +13 -11
- package/dist/access-recall-concurrency.js +64 -59
- package/dist/access-recall-response.d.ts +13 -11
- package/dist/access-recall-response.js +64 -59
- package/dist/access-recall-surface.d.ts +13 -11
- package/dist/access-recall-surface.js +64 -59
- package/dist/access-schema.d.ts +138 -96
- package/dist/access-schema.js +15 -1
- package/dist/{access-service-CCpOuS46.d.ts → access-service-WUm2LnXZ.d.ts} +110 -108
- package/dist/access-service-helpers.d.ts +13 -11
- package/dist/access-service.d.ts +13 -11
- package/dist/access-service.js +64 -59
- package/dist/access-surface-catalog.d.ts +13 -11
- package/dist/access-surface-catalog.js +66 -61
- 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-memory-bridge.js +2 -2
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +14 -12
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +56 -0
- package/dist/activity/digest.js +32 -0
- package/dist/adapters/index.d.ts +46 -1
- package/dist/adapters/index.js +13 -9
- package/dist/adapters/registry.js +3 -3
- package/dist/ambient-provenance.d.ts +2 -1
- package/dist/artifact-search.d.ts +2 -1
- package/dist/{auto-sync-NSHLUAQI.js → auto-sync-4YFATLFQ.js} +10 -9
- package/dist/{auto-sync-NSHLUAQI.js.map → auto-sync-4YFATLFQ.js.map} +1 -1
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +11 -9
- package/dist/briefing-window.d.ts +3 -2
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +28 -27
- 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/calibration.js +3 -2
- package/dist/calibration.js.map +1 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-ZCXUPLNJ.js} +2 -2
- package/dist/{catalog-CDZLyiXL.d.ts → catalog-BaCx29iv.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-consolidation.d.ts +2 -1
- package/dist/causal-consolidation.js +29 -28
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +2 -1
- package/dist/{chunk-CDKHKZL5.js → chunk-2524MOWK.js} +2 -2
- package/dist/{chunk-HVAEXYPL.js → chunk-255PC37A.js} +47 -25
- package/dist/chunk-255PC37A.js.map +1 -0
- package/dist/{chunk-IY2FVXM6.js → chunk-2AU4D4HQ.js} +3 -3
- package/dist/{chunk-QDY6KYTN.js → chunk-2JCA2PQT.js} +3 -3
- package/dist/{chunk-RSVEP77Y.js → chunk-2UZ5ZH6W.js} +3 -3
- package/dist/{chunk-XQ2Q43XD.js → chunk-326KUXIR.js} +15 -648
- package/dist/chunk-326KUXIR.js.map +1 -0
- package/dist/{chunk-NWWXSJX5.js → chunk-34QW2LK2.js} +2 -2
- package/dist/{chunk-S7DPKM5W.js → chunk-353C5UNV.js} +1 -1
- package/dist/{chunk-GQOMZ3MK.js → chunk-36UBSLFN.js} +2 -2
- package/dist/{chunk-DBQWVT2H.js → chunk-3CBI2ZSA.js} +2 -2
- package/dist/{chunk-NZXEK3UF.js → chunk-3Q3N35W7.js} +2 -2
- package/dist/{chunk-YYGZJPOK.js → chunk-42DJ235G.js} +2 -2
- package/dist/{chunk-7VJXIDOC.js → chunk-4JVQRFZD.js} +9 -9
- package/dist/{chunk-22FVR2KE.js → chunk-4MIS4CQW.js} +6 -2
- package/dist/chunk-4MIS4CQW.js.map +1 -0
- package/dist/{chunk-WHBVXTUI.js → chunk-4PB2MBY6.js} +9 -9
- package/dist/{chunk-TEYN7ZYF.js → chunk-4WCNPQQ5.js} +4 -4
- package/dist/{chunk-Z4PCVRTN.js → chunk-5A7ZUOBA.js} +217 -396
- package/dist/chunk-5A7ZUOBA.js.map +1 -0
- package/dist/chunk-5HYUUFMQ.js +1280 -0
- package/dist/chunk-5HYUUFMQ.js.map +1 -0
- package/dist/{chunk-RBGREYVJ.js → chunk-5QBDLMGG.js} +2 -2
- package/dist/{chunk-RKBLRTNT.js → chunk-5SDSVX7N.js} +2 -2
- package/dist/{chunk-LPECRQO4.js → chunk-5THU7NFP.js} +3 -3
- package/dist/{chunk-N7RWREIQ.js → chunk-65RENJGB.js} +6 -1
- package/dist/chunk-65RENJGB.js.map +1 -0
- package/dist/{chunk-LWA7MDVO.js → chunk-6CCRSQWT.js} +2 -2
- package/dist/{chunk-TIT2C6WX.js → chunk-6XYC7NM4.js} +2 -2
- package/dist/{chunk-FHQSPTPZ.js → chunk-6YAIN5XJ.js} +2 -2
- package/dist/{chunk-PV36INNL.js → chunk-757NP436.js} +3 -3
- package/dist/{chunk-WJBZMNNS.js → chunk-7CAY3YKP.js} +742 -29
- package/dist/chunk-7CAY3YKP.js.map +1 -0
- package/dist/{chunk-6H5JYDOM.js → chunk-7J2CGXG3.js} +2 -2
- package/dist/{chunk-FBMYGNOC.js → chunk-A2YQL2FF.js} +6 -6
- package/dist/chunk-A5UQ52YQ.js +211 -0
- package/dist/chunk-A5UQ52YQ.js.map +1 -0
- package/dist/{chunk-X2NFFBTO.js → chunk-A7GQBJP5.js} +4 -4
- package/dist/{chunk-MPYD657E.js → chunk-A7WOWDZK.js} +2 -2
- package/dist/{chunk-C4OTC6WY.js → chunk-AIKTQVV3.js} +3 -3
- package/dist/{chunk-CGC5UQCF.js → chunk-AKE4GGQ3.js} +2 -2
- package/dist/{chunk-VP67GZ7T.js → chunk-APFKZVJS.js} +2 -2
- package/dist/{chunk-M75RYSHS.js → chunk-AQIRQUCP.js} +2 -2
- package/dist/{chunk-S7T2TY65.js → chunk-AXFR2NQ5.js} +3 -3
- package/dist/{chunk-PSPABFN2.js → chunk-BD7JTBYP.js} +4 -4
- package/dist/{chunk-FCSZ4K2X.js → chunk-BJJWRWER.js} +3 -3
- package/dist/{chunk-JT3EB7ZL.js → chunk-BNGHPYZU.js} +5 -5
- package/dist/chunk-BRZWWUCJ.js +13 -0
- package/dist/{chunk-FYDW33ZB.js.map → chunk-BRZWWUCJ.js.map} +1 -1
- package/dist/{chunk-MFJBANPX.js → chunk-C2BFTYD7.js} +2 -2
- package/dist/{chunk-3JVLGJCY.js → chunk-C6KRO3SU.js} +2 -2
- package/dist/{chunk-Q3O3VKRB.js → chunk-CRUFVJOX.js} +16 -15
- package/dist/chunk-CRUFVJOX.js.map +1 -0
- package/dist/{chunk-AOCP6JA7.js → chunk-D3IZCN5P.js} +4 -4
- package/dist/{chunk-ROKKIMON.js → chunk-EJIEQOPB.js} +5 -5
- package/dist/{chunk-ET356KSB.js → chunk-F4TWWUMP.js} +2 -2
- package/dist/{chunk-CLLPJ6QT.js → chunk-FQXJAC3T.js} +2 -2
- package/dist/{chunk-DD5JFCWM.js → chunk-GCBIXUPT.js} +2 -2
- package/dist/{chunk-ROGRI25A.js → chunk-I3H5LFOI.js} +2 -2
- package/dist/{chunk-S65WXHNK.js → chunk-IFFLUCCU.js} +2 -2
- package/dist/{chunk-MYMNC6O5.js → chunk-ISYZ5DUI.js} +64 -60
- package/dist/{chunk-MYMNC6O5.js.map → chunk-ISYZ5DUI.js.map} +1 -1
- package/dist/{chunk-D5LORF7A.js → chunk-JZDH2ZZK.js} +3 -3
- package/dist/{chunk-2GPE5UCR.js → chunk-K6IPSW5B.js} +2 -2
- package/dist/{chunk-HG6HXVHQ.js → chunk-KDJHLOZP.js} +10 -10
- package/dist/{chunk-I27RSQRR.js → chunk-KYGOQV37.js} +2 -2
- package/dist/{chunk-JEIXTYVG.js → chunk-L2QLDZJC.js} +46 -17
- package/dist/chunk-L2QLDZJC.js.map +1 -0
- package/dist/{chunk-A7XEPMQ6.js → chunk-LAVJC57X.js} +3 -3
- package/dist/chunk-LAVJC57X.js.map +1 -0
- package/dist/{chunk-VZWXFXLX.js → chunk-LMCD5W5B.js} +2 -2
- package/dist/{chunk-3QQTXYZ6.js → chunk-LSLCFCCQ.js} +2 -1
- package/dist/chunk-LSLCFCCQ.js.map +1 -0
- package/dist/{chunk-MKD3OMPS.js → chunk-M3MYMWXG.js} +2 -2
- package/dist/{chunk-DITMGZOL.js → chunk-MMG5K6XJ.js} +2 -2
- package/dist/{chunk-VGXM5B4H.js → chunk-MNIPH6LD.js} +2 -2
- package/dist/{chunk-CZYYJZB6.js → chunk-ND2O2PVN.js} +1014 -1318
- package/dist/chunk-ND2O2PVN.js.map +1 -0
- package/dist/chunk-NPNSKE76.js +220 -0
- package/dist/chunk-NPNSKE76.js.map +1 -0
- package/dist/{chunk-MKWKYHXJ.js → chunk-OB3XMWX5.js} +4 -4
- package/dist/{chunk-XU6OEECT.js → chunk-OQQXGYMX.js} +3 -3
- package/dist/{chunk-GTWHVXPA.js → chunk-OZUXKUPD.js} +6 -4
- package/dist/{chunk-GTWHVXPA.js.map → chunk-OZUXKUPD.js.map} +1 -1
- package/dist/chunk-PCEYGOSL.js +66 -0
- package/dist/chunk-PCEYGOSL.js.map +1 -0
- package/dist/{chunk-47DEYNMR.js → chunk-PEXW2JCK.js} +2 -2
- package/dist/{chunk-EEOUMG3J.js → chunk-PWPIERBM.js} +38 -6
- package/dist/chunk-PWPIERBM.js.map +1 -0
- package/dist/chunk-Q4AUIFUA.js +111 -0
- package/dist/chunk-Q4AUIFUA.js.map +1 -0
- package/dist/{chunk-SO7SV523.js → chunk-Q6LCCIZN.js} +1 -1
- package/dist/chunk-Q6LCCIZN.js.map +1 -0
- package/dist/{chunk-42SDNZCU.js → chunk-QF4J3KMV.js} +19 -19
- package/dist/{chunk-SB6PSOP7.js → chunk-QLJ6762U.js} +2 -2
- package/dist/{chunk-XOVKXJEP.js → chunk-R3TLVTWW.js} +3 -3
- package/dist/{chunk-PHNAB54Q.js → chunk-RQO3J4MR.js} +2 -2
- package/dist/{chunk-5N53UBH2.js → chunk-RR7G2X7C.js} +5 -5
- package/dist/{chunk-DCJ3YFIC.js → chunk-S2ULTQZR.js} +2 -2
- package/dist/{chunk-GY5WZBA6.js → chunk-S76KRJDG.js} +3 -3
- package/dist/{chunk-H272ZPQ3.js → chunk-SHEHQBCG.js} +124 -23
- package/dist/chunk-SHEHQBCG.js.map +1 -0
- package/dist/{chunk-EEC4PCG5.js → chunk-SZDLX763.js} +2 -2
- package/dist/{chunk-SQJ3SDIW.js → chunk-SZWEDG3H.js} +13 -7
- package/dist/chunk-SZWEDG3H.js.map +1 -0
- package/dist/{chunk-E2ZHGBAK.js → chunk-T2JSUEH6.js} +2 -2
- package/dist/{chunk-QMGXMJ2O.js → chunk-T2YFZ27G.js} +9 -9
- package/dist/{chunk-LEPOP46W.js → chunk-TFA6HPOA.js} +4 -4
- package/dist/{chunk-BA6WOZOT.js → chunk-TK4FHQRN.js} +4 -4
- package/dist/chunk-TLHNF6GA.js +647 -0
- package/dist/chunk-TLHNF6GA.js.map +1 -0
- package/dist/{chunk-ZNJSBIP4.js → chunk-TNSCIPBQ.js} +4 -4
- package/dist/{chunk-YUMDFDUA.js → chunk-TWYTGIBR.js} +4 -4
- package/dist/{chunk-FDLDOEO6.js → chunk-UBG4GAEP.js} +51 -6
- package/dist/chunk-UBG4GAEP.js.map +1 -0
- package/dist/{chunk-EZZV7OQL.js → chunk-UEZKN6VR.js} +2 -2
- package/dist/{chunk-HY55QQD7.js → chunk-UJX4I26O.js} +2 -2
- package/dist/{chunk-BLUYQFRH.js → chunk-VELCIWJZ.js} +15 -11
- package/dist/chunk-VELCIWJZ.js.map +1 -0
- package/dist/{chunk-CBCNKKZD.js → chunk-VIZR45AN.js} +2 -2
- package/dist/{chunk-ZG74PWRW.js → chunk-VZAKYDMJ.js} +2 -2
- package/dist/{chunk-ITPS5DDH.js → chunk-W5BLTZZJ.js} +8 -8
- package/dist/chunk-W6IJMWTZ.js +72 -0
- package/dist/chunk-W6IJMWTZ.js.map +1 -0
- package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
- package/dist/{chunk-YFLLGRXO.js → chunk-X2QPKLPL.js} +2 -2
- package/dist/{chunk-FGGYSN4P.js → chunk-X424T5JQ.js} +2 -2
- package/dist/{chunk-NAXDPKVM.js → chunk-XPJNT6PI.js} +4 -4
- package/dist/{chunk-2JVJ7UHC.js → chunk-XQU3CPF2.js} +4 -2
- package/dist/chunk-XQU3CPF2.js.map +1 -0
- package/dist/chunk-XW2T4QAW.js +1 -0
- package/dist/{chunk-VED2YHUD.js → chunk-YEDVOYL2.js} +2 -2
- package/dist/{chunk-TLPZ6MKZ.js → chunk-YEN4TREG.js} +541 -5
- package/dist/chunk-YEN4TREG.js.map +1 -0
- package/dist/{chunk-RC5DXXWC.js → chunk-YM7YN37H.js} +2 -2
- package/dist/{chunk-VLXBE57O.js → chunk-YVGXH72Y.js} +2 -2
- package/dist/{chunk-YQAXP5AC.js → chunk-YXLUTALO.js} +5 -5
- package/dist/{chunk-565C6ZFO.js → chunk-Z7YDVHDI.js} +2 -2
- package/dist/{chunk-O75CRYGF.js → chunk-ZEFVK7XC.js} +1 -1
- package/dist/chunk-ZEFVK7XC.js.map +1 -0
- package/dist/{chunk-XUE46UYW.js → chunk-ZLN7AROH.js} +6 -6
- package/dist/{chunk-GVG3JYBI.js → chunk-ZMKYCFJ7.js} +640 -199
- package/dist/chunk-ZMKYCFJ7.js.map +1 -0
- package/dist/{chunk-HK32G473.js → chunk-ZWEZXVYH.js} +2 -2
- package/dist/{cli-NEEdq5Rt.d.ts → cli-5mTYh1Tn.d.ts} +5 -5
- package/dist/cli-fallback.d.ts +11 -4
- package/dist/cli-fallback.js +5 -1
- package/dist/cli.d.ts +15 -13
- package/dist/cli.js +110 -106
- package/dist/coding/export-okf-codegraph.d.ts +2 -1
- package/dist/coding/export-okf-codegraph.js +34 -32
- package/dist/coding/export-okf-codegraph.js.map +1 -1
- package/dist/coding/pre-action-gate.d.ts +2 -1
- package/dist/compat/checks.js +2 -2
- package/dist/compat/codex-cli-fallback.d.ts +1 -1
- package/dist/compat/codex-cli-fallback.js +5 -1
- package/dist/compat/codex-cli-fallback.js.map +1 -1
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +29 -28
- 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 +14 -12
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +28 -27
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +30 -29
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/contradiction/index.d.ts +4 -3
- package/dist/contradiction/index.js +5 -5
- package/dist/{contradiction-scan-NOYMFG66.js → contradiction-scan-GVD4JJ7B.js} +3 -3
- package/dist/converge-config.d.ts +2 -1
- package/dist/convergence-refresh.d.ts +3 -2
- package/dist/convergence-refresh.js +30 -29
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/backend.js +3 -3
- package/dist/conversation-index/chunker.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.js +2 -2
- 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 +31 -30
- package/dist/cross-lingual-recall.d.ts +2 -1
- package/dist/day-summary.d.ts +2 -1
- package/dist/deep-recall-http-glue.d.ts +13 -11
- package/dist/deep-recall-http-glue.js +12 -2
- package/dist/deep-recall-mcp-tools.d.ts +13 -11
- package/dist/deep-recall-policy-llm.d.ts +2 -1
- package/dist/deep-recall-policy-llm.js +4 -3
- package/dist/deep-recall-seeds.d.ts +2 -1
- package/dist/delinearize.d.ts +2 -1
- package/dist/dependency-propagation-config.d.ts +2 -1
- package/dist/{dependency-propagation-delivery-CQPCu0o5.d.ts → dependency-propagation-delivery-CDQCxNll.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/enrichment/index.d.ts +2 -1
- package/dist/entity-origin-fields.d.ts +2 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +28 -27
- package/dist/entity-schema.d.ts +2 -1
- package/dist/episodic-context.d.ts +2 -1
- package/dist/eval-trajectory-contracts.d.ts +2 -1
- package/dist/eval-trajectory-store.d.ts +2 -1
- package/dist/eval-trajectory.d.ts +2 -1
- package/dist/explicit-capture.d.ts +11 -9
- package/dist/explicit-capture.js +6 -6
- package/dist/external-wiki-access.d.ts +13 -11
- package/dist/external-wiki-access.js +65 -60
- package/dist/external-wiki-collection-registration.d.ts +2 -1
- package/dist/external-wiki-collection.d.ts +2 -1
- package/dist/external-wiki-mcp-tools.d.ts +13 -11
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +2 -1
- package/dist/extraction-faithfulness.js +4 -3
- 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-judge.js +5 -4
- package/dist/extraction-liveness.d.ts +2 -1
- package/dist/extraction-normalization.d.ts +2 -1
- package/dist/extraction-prompt.d.ts +2 -1
- package/dist/extraction-source-grounding-rules.d.ts +2 -1
- package/dist/extraction-source-grounding.d.ts +2 -1
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +40 -38
- package/dist/fallback-llm.d.ts +2 -1
- package/dist/fallback-llm.js +3 -2
- package/dist/{first-start-migration-RC345GPL.js → first-start-migration-L3UFX5CU.js} +3 -3
- package/dist/generic-recall-paths-CqAZyXKX.d.ts +23 -0
- package/dist/graph-append-error.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-jsonl.d.ts +2 -1
- package/dist/graph-path-reconstruction.d.ts +2 -1
- package/dist/graph-path-scoring.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/importers/test-utils.d.ts +2 -1
- package/dist/in-flight-reads.d.ts +2 -1
- package/dist/{index-C9VXenR8.d.ts → index-BNluTxBp.d.ts} +2 -2
- package/dist/index.d.ts +963 -945
- package/dist/index.js +323 -221
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +7 -7
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/local-llm.d.ts +4 -1
- package/dist/local-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/location/index.d.ts +4 -3
- package/dist/location/index.js +33 -32
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +28 -27
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +28 -27
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +29 -28
- package/dist/{maintenance-C14sorKa.d.ts → maintenance-8hmWOMY_.d.ts} +378 -4
- package/dist/mcp-memory-inspector-app.d.ts +13 -11
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-controller.d.ts +2 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/memory-projection-store.d.ts +2 -1
- package/dist/memory-provenance.d.ts +2 -1
- package/dist/memory-snapshot.d.ts +2 -1
- package/dist/memory-subject-cli.d.ts +13 -11
- package/dist/memory-subject.d.ts +13 -11
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/migrate/from-engram.js +2 -2
- package/dist/models-json.d.ts +2 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +29 -28
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +11 -11
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +28 -27
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/network/tailscale.js +2 -2
- package/dist/offline-sync-impression-drain.d.ts +2 -1
- package/dist/offline-sync-impression-drain.js +6 -6
- package/dist/operator-doctor-corpus.d.ts +2 -1
- package/dist/operator-doctor-corpus.js +32 -31
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +48 -46
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +47 -42
- package/dist/{orchestrator-kqSzGv7e.d.ts → orchestrator-BUd_3Q86.d.ts} +17 -29
- package/dist/orchestrator.d.ts +11 -9
- package/dist/orchestrator.js +144 -138
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-DRUwHb1X.d.ts → pipeline-Dv1Bv0ma.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/proactive-contention.d.ts +2 -1
- package/dist/provenance.d.ts +2 -1
- package/dist/{public-http-CW3l0g3P.d.ts → public-http-L-IymRBN.d.ts} +1 -1
- package/dist/{qmd-BVWlg1YS.d.ts → qmd-Mj508lHA.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +3 -2
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +3 -2
- package/dist/qmd.js +2 -2
- 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-navigate-access.d.ts +2 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +2 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +2 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +2 -1
- package/dist/recall-planner-llm.js +3 -2
- package/dist/recall-planner-llm.js.map +1 -1
- package/dist/recall-state-view-admission.d.ts +56 -0
- package/dist/recall-state-view-admission.js +39 -0
- package/dist/recall-state-view-admission.js.map +1 -0
- package/dist/recall-state-view-inject.js +2 -2
- package/dist/recall-state-view-render.js +2 -2
- package/dist/recall-state-view-widen.d.ts +18 -1
- package/dist/recall-state-view-widen.js +2 -2
- package/dist/recall-state-view-wire.d.ts +1 -1
- package/dist/recall-state-view-wire.js +3 -3
- package/dist/recall-state-view.d.ts +1 -0
- package/dist/recall-state-view.js +1 -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 +9 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +11 -2
- package/dist/reconcile/cursor.js +6 -4
- package/dist/reconcile/cursor.js.map +1 -1
- package/dist/reconcile/manifest.d.ts +37 -2
- package/dist/reconcile/manifest.js +15 -5
- package/dist/reconcile/plan.d.ts +2 -1
- 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-peers-config.d.ts +2 -1
- package/dist/{resolution-VKATP2HT.js → resolution-OHJZG45O.js} +6 -6
- package/dist/resolution-OHJZG45O.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resume-bundles.js +15 -13
- package/dist/retrieval-agents.d.ts +3 -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/runtime/child-process.d.ts +1 -1
- package/dist/runtime/child-process.js +1 -1
- package/dist/salvage-envelope.d.ts +2 -1
- package/dist/salvage-envelope.js +2 -2
- package/dist/schemas.d.ts +176 -176
- package/dist/{scope-profiles-Vl00B1KU.d.ts → scope-profiles-B6BGVbxm.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/factory.d.ts +2 -1
- package/dist/search/factory.js +10 -10
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +14 -14
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/lancedb-backend.js +2 -2
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.js +2 -2
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/orama-backend.js +2 -2
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/{semantic-consolidation-BC9-GFuT.d.ts → semantic-consolidation-J-598F5M.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +29 -28
- package/dist/semantic-rule-promotion.js +28 -27
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +28 -27
- package/dist/{service-BOy6dHfc.d.ts → service-ZQkJ52cz.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 +8 -7
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +38 -36
- package/dist/standup/build.js +29 -28
- package/dist/{storage-BLJRnFi6.d.ts → storage-CU_hZUgP.d.ts} +67 -6
- package/dist/storage.d.ts +4 -3
- package/dist/storage.js +27 -26
- package/dist/subject-config.d.ts +2 -1
- package/dist/subject-config.js +2 -2
- package/dist/summarizer.d.ts +2 -1
- package/dist/summarizer.js +5 -5
- package/dist/summary-snapshot.d.ts +2 -1
- package/dist/support-passport/index.d.ts +49 -15
- package/dist/support-passport/index.js +72 -63
- 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/tier-routing.js +2 -2
- package/dist/{tier-stats-KA6OZX2C.js → tier-stats-VK5PCO2L.js} +3 -3
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transfer/capsule-import.js +1 -1
- package/dist/transfer/export-okf.d.ts +2 -1
- package/dist/transfer/export-okf.js +29 -28
- package/dist/transfer/types.d.ts +102 -102
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-YY-eKKU7.d.ts → types-BGxTvLBO.d.ts} +58 -13
- 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 +28 -27
- package/dist/who-knows-cli.d.ts +13 -11
- package/dist/who-knows-cli.js +29 -28
- package/dist/who-knows.d.ts +13 -11
- package/dist/who-knows.js +28 -27
- package/dist/write-envelope.d.ts +4 -2
- package/dist/write-envelope.js +3 -1
- package/package.json +12 -2
- package/src/access-category-alias.test.ts +216 -0
- package/src/access-mcp.test.ts +73 -0
- package/src/access-mcp.ts +6 -6
- package/src/access-observe-write-surface.ts +19 -4
- package/src/access-offline-manifest.ts +297 -16
- package/src/access-recall-surface.ts +5 -5
- package/src/access-schema.ts +76 -7
- package/src/access-service.ts +11 -2
- package/src/activity/config.test.ts +124 -1
- package/src/activity/config.ts +150 -18
- package/src/activity/index.ts +3 -0
- package/src/activity/journal-extract-storage.test.ts +129 -0
- package/src/activity/journal-extract.test.ts +314 -0
- package/src/activity/journal-extract.ts +247 -0
- package/src/activity/journal-heading.test.ts +24 -1
- package/src/activity/journal-heading.ts +36 -0
- package/src/activity/journal-read.test.ts +242 -0
- package/src/activity/journal-read.ts +183 -0
- package/src/activity/journal-source.test.ts +15 -15
- package/src/activity/journal-source.ts +21 -14
- package/src/activity/journal-state.lock-worker.ts +30 -0
- package/src/activity/journal-state.test.ts +144 -0
- package/src/activity/journal-state.ts +107 -0
- package/src/activity/journal-strip.test.ts +106 -52
- package/src/activity/journal-strip.ts +35 -10
- package/src/activity/journal-vault-integration.test.ts +230 -0
- package/src/activity/journal-vault-provenance.test.ts +9 -7
- package/src/activity/journal-vault-provenance.ts +4 -10
- package/src/activity/journal-vault-read.test.ts +3 -2
- package/src/activity/journal-vault-read.ts +9 -139
- package/src/activity/journal.test.ts +74 -23
- package/src/activity/runner.test.ts +116 -1
- package/src/activity/runner.ts +25 -0
- package/src/activity/scheduler.ts +4 -0
- package/src/activity/store.test.ts +18 -0
- package/src/activity/store.ts +14 -0
- package/src/activity/sync-registration.ts +4 -0
- package/src/activity/timeline/analysis-metadata.ts +2 -0
- package/src/activity/timeline/analysis-provider.ts +140 -0
- package/src/activity/timeline/analysis-run.test.ts +419 -0
- package/src/activity/timeline/analysis-run.ts +106 -0
- package/src/activity/timeline/analysis.ts +66 -37
- package/src/activity/timeline/corrections.ts +9 -0
- package/src/activity/timeline/index.ts +3 -0
- package/src/activity/timeline/query.test.ts +71 -0
- package/src/activity/timeline/query.ts +57 -8
- package/src/activity/timeline/regenerate.test.ts +505 -0
- package/src/activity/timeline/regenerate.ts +373 -0
- package/src/activity/types.ts +40 -5
- package/src/adapters/grok-opencode.test.ts +146 -0
- package/src/adapters/grok.ts +53 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/opencode.ts +52 -0
- package/src/adapters/registry.ts +4 -0
- package/src/cli-fallback.ts +13 -4
- package/src/config.test.ts +3 -1
- package/src/config.ts +4 -0
- package/src/dedup/merge.test.ts +732 -25
- package/src/fallback-llm.test.ts +53 -0
- package/src/fallback-llm.ts +12 -0
- package/src/index.ts +2 -0
- package/src/local-llm.ts +3 -1
- package/src/orchestration/dependency-propagation-recovery-replay.ts +1 -1
- package/src/orchestration/extraction-persist-deps.ts +9 -0
- package/src/orchestration/extraction-persist-promotion.test.ts +265 -6
- package/src/orchestration/extraction-persist-promotion.ts +42 -3
- package/src/orchestration/extraction-persist.ts +3 -3
- package/src/orchestration/harmonic-construction-persist.test.ts +115 -4
- package/src/orchestration/harmonic-construction-persist.ts +34 -6
- package/src/orchestration/maintenance.ts +1 -0
- package/src/orchestration/orchestrator-helpers.ts +6 -0
- package/src/orchestration/recall-entry.ts +16 -0
- package/src/orchestration/recall-internal-deps.ts +14 -0
- package/src/orchestration/recall-internal.ts +41 -58
- package/src/orchestration/recall-result-formatter.ts +11 -1
- package/src/orchestration/recall-search-pipeline.ts +121 -11
- package/src/orchestration/recall-state-view-pipeline.test.ts +211 -0
- package/src/orchestration/semantic-merge-commit-effects.ts +76 -17
- package/src/orchestration/semantic-merge-persist.ts +121 -16
- package/src/orchestration/semantic-merge-promotion-payload.ts +133 -54
- package/src/orchestrator.ts +7 -35
- package/src/providers/codex-subscription.test.ts +666 -0
- package/src/providers/codex-subscription.ts +743 -0
- package/src/recall-disclosure.test.ts +20 -0
- package/src/recall-state-view-admission.ts +114 -0
- package/src/recall-state-view-asof.test.ts +176 -0
- package/src/recall-state-view-call.test.ts +175 -0
- package/src/recall-state-view-config.test.ts +16 -0
- package/src/recall-state-view-widen.test.ts +70 -0
- package/src/recall-state-view-widen.ts +28 -7
- package/src/recall-state-view-wire.ts +3 -1
- package/src/recall-state-view-zero-diff.test.ts +20 -11
- package/src/recall-state-view.test.ts +142 -0
- package/src/recall-state-view.ts +72 -24
- package/src/recall-xray-renderer.test.ts +27 -0
- package/src/recall-xray-renderer.ts +4 -0
- package/src/recall-xray.ts +13 -0
- package/src/reconcile/cursor.ts +23 -33
- package/src/reconcile/manifest.ts +96 -11
- package/src/reconcile-identity-cache.test.ts +378 -0
- package/src/runtime/child-process.ts +1 -1
- package/src/storage/cas-revision-host.ts +75 -0
- package/src/storage/cas-revision-store.test.ts +459 -0
- package/src/storage/cas-revision-store.ts +661 -0
- package/src/storage/deletion-revision-store.ts +80 -6
- package/src/storage/tombstone-blocked-capture-index.ts +15 -0
- package/src/storage/tombstone-blocked-capture-mutation.ts +67 -7
- package/src/storage/tombstone-blocked-capture-sync.ts +55 -20
- package/src/storage-contract/failure-semantics.test.ts +1 -1
- package/src/storage-frontmatter-cas.test.ts +698 -1
- package/src/storage-replay.test.ts +166 -3
- package/src/storage.ts +41 -41
- package/src/support-passport/card-projection.ts +82 -33
- package/src/temporal-supersession.test.ts +10 -10
- package/src/types.ts +7 -7
- package/src/write-envelope.ts +1 -1
- package/dist/chunk-22FVR2KE.js.map +0 -1
- package/dist/chunk-2JVJ7UHC.js.map +0 -1
- package/dist/chunk-3QQTXYZ6.js.map +0 -1
- package/dist/chunk-4UDQUPT5.js +0 -560
- package/dist/chunk-4UDQUPT5.js.map +0 -1
- package/dist/chunk-A7XEPMQ6.js.map +0 -1
- package/dist/chunk-AU7Q3LSC.js +0 -56
- package/dist/chunk-AU7Q3LSC.js.map +0 -1
- package/dist/chunk-BLUYQFRH.js.map +0 -1
- package/dist/chunk-CZYYJZB6.js.map +0 -1
- package/dist/chunk-EEOUMG3J.js.map +0 -1
- package/dist/chunk-FDLDOEO6.js.map +0 -1
- package/dist/chunk-FYDW33ZB.js +0 -13
- package/dist/chunk-GVG3JYBI.js.map +0 -1
- package/dist/chunk-H272ZPQ3.js.map +0 -1
- package/dist/chunk-HVAEXYPL.js.map +0 -1
- package/dist/chunk-JEIXTYVG.js.map +0 -1
- package/dist/chunk-LRICZIGN.js +0 -52
- package/dist/chunk-LRICZIGN.js.map +0 -1
- package/dist/chunk-N7RWREIQ.js.map +0 -1
- package/dist/chunk-O75CRYGF.js.map +0 -1
- package/dist/chunk-Q3O3VKRB.js.map +0 -1
- package/dist/chunk-SEDEKFYQ.js +0 -1
- package/dist/chunk-SO7SV523.js.map +0 -1
- package/dist/chunk-SQJ3SDIW.js.map +0 -1
- package/dist/chunk-TLPZ6MKZ.js.map +0 -1
- package/dist/chunk-WJBZMNNS.js.map +0 -1
- package/dist/chunk-XQ2Q43XD.js.map +0 -1
- package/dist/chunk-Z4PCVRTN.js.map +0 -1
- package/src/activity/journal-mode.test.ts +0 -32
- package/src/activity/journal-mode.ts +0 -20
- /package/dist/{chunk-SEDEKFYQ.js.map → activity/digest.js.map} +0 -0
- /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-ZCXUPLNJ.js.map} +0 -0
- /package/dist/{chunk-CDKHKZL5.js.map → chunk-2524MOWK.js.map} +0 -0
- /package/dist/{chunk-IY2FVXM6.js.map → chunk-2AU4D4HQ.js.map} +0 -0
- /package/dist/{chunk-QDY6KYTN.js.map → chunk-2JCA2PQT.js.map} +0 -0
- /package/dist/{chunk-RSVEP77Y.js.map → chunk-2UZ5ZH6W.js.map} +0 -0
- /package/dist/{chunk-NWWXSJX5.js.map → chunk-34QW2LK2.js.map} +0 -0
- /package/dist/{chunk-S7DPKM5W.js.map → chunk-353C5UNV.js.map} +0 -0
- /package/dist/{chunk-GQOMZ3MK.js.map → chunk-36UBSLFN.js.map} +0 -0
- /package/dist/{chunk-DBQWVT2H.js.map → chunk-3CBI2ZSA.js.map} +0 -0
- /package/dist/{chunk-NZXEK3UF.js.map → chunk-3Q3N35W7.js.map} +0 -0
- /package/dist/{chunk-YYGZJPOK.js.map → chunk-42DJ235G.js.map} +0 -0
- /package/dist/{chunk-7VJXIDOC.js.map → chunk-4JVQRFZD.js.map} +0 -0
- /package/dist/{chunk-WHBVXTUI.js.map → chunk-4PB2MBY6.js.map} +0 -0
- /package/dist/{chunk-TEYN7ZYF.js.map → chunk-4WCNPQQ5.js.map} +0 -0
- /package/dist/{chunk-RBGREYVJ.js.map → chunk-5QBDLMGG.js.map} +0 -0
- /package/dist/{chunk-RKBLRTNT.js.map → chunk-5SDSVX7N.js.map} +0 -0
- /package/dist/{chunk-LPECRQO4.js.map → chunk-5THU7NFP.js.map} +0 -0
- /package/dist/{chunk-LWA7MDVO.js.map → chunk-6CCRSQWT.js.map} +0 -0
- /package/dist/{chunk-TIT2C6WX.js.map → chunk-6XYC7NM4.js.map} +0 -0
- /package/dist/{chunk-FHQSPTPZ.js.map → chunk-6YAIN5XJ.js.map} +0 -0
- /package/dist/{chunk-PV36INNL.js.map → chunk-757NP436.js.map} +0 -0
- /package/dist/{chunk-6H5JYDOM.js.map → chunk-7J2CGXG3.js.map} +0 -0
- /package/dist/{chunk-FBMYGNOC.js.map → chunk-A2YQL2FF.js.map} +0 -0
- /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
- /package/dist/{chunk-MPYD657E.js.map → chunk-A7WOWDZK.js.map} +0 -0
- /package/dist/{chunk-C4OTC6WY.js.map → chunk-AIKTQVV3.js.map} +0 -0
- /package/dist/{chunk-CGC5UQCF.js.map → chunk-AKE4GGQ3.js.map} +0 -0
- /package/dist/{chunk-VP67GZ7T.js.map → chunk-APFKZVJS.js.map} +0 -0
- /package/dist/{chunk-M75RYSHS.js.map → chunk-AQIRQUCP.js.map} +0 -0
- /package/dist/{chunk-S7T2TY65.js.map → chunk-AXFR2NQ5.js.map} +0 -0
- /package/dist/{chunk-PSPABFN2.js.map → chunk-BD7JTBYP.js.map} +0 -0
- /package/dist/{chunk-FCSZ4K2X.js.map → chunk-BJJWRWER.js.map} +0 -0
- /package/dist/{chunk-JT3EB7ZL.js.map → chunk-BNGHPYZU.js.map} +0 -0
- /package/dist/{chunk-MFJBANPX.js.map → chunk-C2BFTYD7.js.map} +0 -0
- /package/dist/{chunk-3JVLGJCY.js.map → chunk-C6KRO3SU.js.map} +0 -0
- /package/dist/{chunk-AOCP6JA7.js.map → chunk-D3IZCN5P.js.map} +0 -0
- /package/dist/{chunk-ROKKIMON.js.map → chunk-EJIEQOPB.js.map} +0 -0
- /package/dist/{chunk-ET356KSB.js.map → chunk-F4TWWUMP.js.map} +0 -0
- /package/dist/{chunk-CLLPJ6QT.js.map → chunk-FQXJAC3T.js.map} +0 -0
- /package/dist/{chunk-DD5JFCWM.js.map → chunk-GCBIXUPT.js.map} +0 -0
- /package/dist/{chunk-ROGRI25A.js.map → chunk-I3H5LFOI.js.map} +0 -0
- /package/dist/{chunk-S65WXHNK.js.map → chunk-IFFLUCCU.js.map} +0 -0
- /package/dist/{chunk-D5LORF7A.js.map → chunk-JZDH2ZZK.js.map} +0 -0
- /package/dist/{chunk-2GPE5UCR.js.map → chunk-K6IPSW5B.js.map} +0 -0
- /package/dist/{chunk-HG6HXVHQ.js.map → chunk-KDJHLOZP.js.map} +0 -0
- /package/dist/{chunk-I27RSQRR.js.map → chunk-KYGOQV37.js.map} +0 -0
- /package/dist/{chunk-VZWXFXLX.js.map → chunk-LMCD5W5B.js.map} +0 -0
- /package/dist/{chunk-MKD3OMPS.js.map → chunk-M3MYMWXG.js.map} +0 -0
- /package/dist/{chunk-DITMGZOL.js.map → chunk-MMG5K6XJ.js.map} +0 -0
- /package/dist/{chunk-VGXM5B4H.js.map → chunk-MNIPH6LD.js.map} +0 -0
- /package/dist/{chunk-MKWKYHXJ.js.map → chunk-OB3XMWX5.js.map} +0 -0
- /package/dist/{chunk-XU6OEECT.js.map → chunk-OQQXGYMX.js.map} +0 -0
- /package/dist/{chunk-47DEYNMR.js.map → chunk-PEXW2JCK.js.map} +0 -0
- /package/dist/{chunk-42SDNZCU.js.map → chunk-QF4J3KMV.js.map} +0 -0
- /package/dist/{chunk-SB6PSOP7.js.map → chunk-QLJ6762U.js.map} +0 -0
- /package/dist/{chunk-XOVKXJEP.js.map → chunk-R3TLVTWW.js.map} +0 -0
- /package/dist/{chunk-PHNAB54Q.js.map → chunk-RQO3J4MR.js.map} +0 -0
- /package/dist/{chunk-5N53UBH2.js.map → chunk-RR7G2X7C.js.map} +0 -0
- /package/dist/{chunk-DCJ3YFIC.js.map → chunk-S2ULTQZR.js.map} +0 -0
- /package/dist/{chunk-GY5WZBA6.js.map → chunk-S76KRJDG.js.map} +0 -0
- /package/dist/{chunk-EEC4PCG5.js.map → chunk-SZDLX763.js.map} +0 -0
- /package/dist/{chunk-E2ZHGBAK.js.map → chunk-T2JSUEH6.js.map} +0 -0
- /package/dist/{chunk-QMGXMJ2O.js.map → chunk-T2YFZ27G.js.map} +0 -0
- /package/dist/{chunk-LEPOP46W.js.map → chunk-TFA6HPOA.js.map} +0 -0
- /package/dist/{chunk-BA6WOZOT.js.map → chunk-TK4FHQRN.js.map} +0 -0
- /package/dist/{chunk-ZNJSBIP4.js.map → chunk-TNSCIPBQ.js.map} +0 -0
- /package/dist/{chunk-YUMDFDUA.js.map → chunk-TWYTGIBR.js.map} +0 -0
- /package/dist/{chunk-EZZV7OQL.js.map → chunk-UEZKN6VR.js.map} +0 -0
- /package/dist/{chunk-HY55QQD7.js.map → chunk-UJX4I26O.js.map} +0 -0
- /package/dist/{chunk-CBCNKKZD.js.map → chunk-VIZR45AN.js.map} +0 -0
- /package/dist/{chunk-ZG74PWRW.js.map → chunk-VZAKYDMJ.js.map} +0 -0
- /package/dist/{chunk-ITPS5DDH.js.map → chunk-W5BLTZZJ.js.map} +0 -0
- /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
- /package/dist/{chunk-YFLLGRXO.js.map → chunk-X2QPKLPL.js.map} +0 -0
- /package/dist/{chunk-FGGYSN4P.js.map → chunk-X424T5JQ.js.map} +0 -0
- /package/dist/{chunk-NAXDPKVM.js.map → chunk-XPJNT6PI.js.map} +0 -0
- /package/dist/{contradiction-scan-NOYMFG66.js.map → chunk-XW2T4QAW.js.map} +0 -0
- /package/dist/{chunk-VED2YHUD.js.map → chunk-YEDVOYL2.js.map} +0 -0
- /package/dist/{chunk-RC5DXXWC.js.map → chunk-YM7YN37H.js.map} +0 -0
- /package/dist/{chunk-VLXBE57O.js.map → chunk-YVGXH72Y.js.map} +0 -0
- /package/dist/{chunk-YQAXP5AC.js.map → chunk-YXLUTALO.js.map} +0 -0
- /package/dist/{chunk-565C6ZFO.js.map → chunk-Z7YDVHDI.js.map} +0 -0
- /package/dist/{chunk-XUE46UYW.js.map → chunk-ZLN7AROH.js.map} +0 -0
- /package/dist/{chunk-HK32G473.js.map → chunk-ZWEZXVYH.js.map} +0 -0
- /package/dist/{resolution-VKATP2HT.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
- /package/dist/{first-start-migration-RC345GPL.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
- /package/dist/{tier-stats-KA6OZX2C.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
|
@@ -99,6 +99,8 @@ export interface RecallSearchPipelineDeps {
|
|
|
99
99
|
* string at the input boundary (CLI / HTTP / MCP).
|
|
100
100
|
*/
|
|
101
101
|
asOfMs?: number;
|
|
102
|
+
/** #1952 state-view admission — see filterSearchResultsByRecallSafety. */
|
|
103
|
+
stateViewActive?: boolean;
|
|
102
104
|
requestingConnector?: string;
|
|
103
105
|
},
|
|
104
106
|
): Promise<QmdSearchResult[]>;
|
|
@@ -172,6 +174,8 @@ export interface RecallSearchPipelineDeps {
|
|
|
172
174
|
dropUnresolved?: boolean;
|
|
173
175
|
recallNamespaces?: readonly string[];
|
|
174
176
|
requestingConnector?: string;
|
|
177
|
+
/** #1952 state-view admission — see filterSearchResultsByRecallSafety. */
|
|
178
|
+
stateViewActive?: boolean;
|
|
175
179
|
},
|
|
176
180
|
): Promise<{ results: QmdSearchResult[]; memoryByPath: Map<string, MemoryFile> }>;
|
|
177
181
|
loadSearchResultMemoryMap(
|
|
@@ -598,6 +602,8 @@ export class RecallSearchPipelineCoordinator {
|
|
|
598
602
|
deadlineAtMs?: number | null;
|
|
599
603
|
/** Issue #681 — when true, bypass graphTraversalConfidenceFloor. */
|
|
600
604
|
includeLowConfidence?: boolean;
|
|
605
|
+
/** #1952 state-view admission — resolved by the caller from config/override + change intent. */
|
|
606
|
+
stateViewActive?: boolean;
|
|
601
607
|
}): Promise<QmdSearchResult[]> {
|
|
602
608
|
// Prefer the threaded set; fall back to a config-derived set so direct
|
|
603
609
|
// callers (unit tests) behave identically to the recall pipeline (#1523).
|
|
@@ -844,6 +850,7 @@ export class RecallSearchPipelineCoordinator {
|
|
|
844
850
|
dropUnresolved: true,
|
|
845
851
|
recallNamespaces: options.recallNamespaces,
|
|
846
852
|
requestingConnector: options.requestingConnector,
|
|
853
|
+
stateViewActive: options.stateViewActive,
|
|
847
854
|
},
|
|
848
855
|
);
|
|
849
856
|
results = boostInput.results;
|
|
@@ -864,6 +871,7 @@ export class RecallSearchPipelineCoordinator {
|
|
|
864
871
|
{
|
|
865
872
|
allowLifecycleFiltered: true,
|
|
866
873
|
asOfMs: options.asOfMs,
|
|
874
|
+
stateViewActive: options.stateViewActive,
|
|
867
875
|
requestingConnector: options.requestingConnector,
|
|
868
876
|
},
|
|
869
877
|
),
|
|
@@ -882,6 +890,7 @@ export class RecallSearchPipelineCoordinator {
|
|
|
882
890
|
{
|
|
883
891
|
allowLifecycleFiltered: true,
|
|
884
892
|
asOfMs: options.asOfMs,
|
|
893
|
+
stateViewActive: options.stateViewActive,
|
|
885
894
|
requestingConnector: options.requestingConnector,
|
|
886
895
|
},
|
|
887
896
|
));
|
|
@@ -1108,8 +1117,45 @@ export class RecallSearchPipelineCoordinator {
|
|
|
1108
1117
|
asOfMs?: number;
|
|
1109
1118
|
blockedPaths?: Set<string>;
|
|
1110
1119
|
requestingConnector?: string;
|
|
1120
|
+
/**
|
|
1121
|
+
* #1952 state-aware recall views. When true (config `recallStateViews`
|
|
1122
|
+
* or per-call override, AND a change-intent query — resolved by the
|
|
1123
|
+
* caller), a superseded candidate is admitted iff its successor
|
|
1124
|
+
* (`frontmatter.supersededBy`) is also in this candidate set. The
|
|
1125
|
+
* admitted row carries `id`/`status`/`supersededBy`/`supersededAt` so
|
|
1126
|
+
* the inject seam can label it; every other path is unchanged.
|
|
1127
|
+
*/
|
|
1128
|
+
stateViewActive?: boolean;
|
|
1111
1129
|
},
|
|
1112
1130
|
): QmdSearchResult[] {
|
|
1131
|
+
// #1952 state-aware recall views. A superseded row is admitted only
|
|
1132
|
+
// when its successor SURVIVES this filter — a successor rejected by
|
|
1133
|
+
// the connector/lifecycle/validity/dedicated-surface/status gates
|
|
1134
|
+
// must never anchor (or spend a result slot on) its superseded row.
|
|
1135
|
+
// Anchors are therefore collected from rows that survive the pass
|
|
1136
|
+
// below; superseded rows defer admission to the post-pass fixpoint.
|
|
1137
|
+
const stateViewActive = options?.stateViewActive === true;
|
|
1138
|
+
const stateViewSurvivorIds = stateViewActive ? new Set<string>() : null;
|
|
1139
|
+
const stateViewDeferred: number[] = [];
|
|
1140
|
+
const stateViewBuilt: (QmdSearchResult | null)[] | null = stateViewActive
|
|
1141
|
+
? new Array<QmdSearchResult | null>(results.length).fill(null)
|
|
1142
|
+
: null;
|
|
1143
|
+
const buildRecallRow = (r: QmdSearchResult, memory: MemoryFile | undefined): QmdSearchResult => ({
|
|
1144
|
+
...r,
|
|
1145
|
+
sourceConnector: memory ? memory.frontmatter.sourceConnector : undefined,
|
|
1146
|
+
origin: memory ? memory.frontmatter.origin : undefined,
|
|
1147
|
+
// #1952: an active state view carries the chain fields the inject
|
|
1148
|
+
// seam labels from (id/status/supersededBy/supersededAt).
|
|
1149
|
+
...(stateViewActive && memory
|
|
1150
|
+
? {
|
|
1151
|
+
id: memory.frontmatter.id,
|
|
1152
|
+
status: memory.frontmatter.status,
|
|
1153
|
+
supersededBy: memory.frontmatter.supersededBy,
|
|
1154
|
+
supersededAt: memory.frontmatter.supersededAt,
|
|
1155
|
+
}
|
|
1156
|
+
: {}),
|
|
1157
|
+
});
|
|
1158
|
+
let stateViewAdmittedCount = 0;
|
|
1113
1159
|
const lifecycleCaps = resolveMemoryLifecycleCapabilities(this.deps.config);
|
|
1114
1160
|
let lifecycleFilteredCount = 0;
|
|
1115
1161
|
let temporalSupersededFilteredCount = 0;
|
|
@@ -1120,7 +1166,9 @@ export class RecallSearchPipelineCoordinator {
|
|
|
1120
1166
|
let connectorPartitionFilteredCount = 0;
|
|
1121
1167
|
let supportPassportFilteredCount = 0;
|
|
1122
1168
|
const filtered: QmdSearchResult[] = [];
|
|
1123
|
-
for (
|
|
1169
|
+
for (let resultIdx = 0; resultIdx < results.length; resultIdx += 1) {
|
|
1170
|
+
const r = results[resultIdx]!;
|
|
1171
|
+
let stateViewPending = false;
|
|
1124
1172
|
if (options?.blockedPaths && resultHasKey(options.blockedPaths, r)) {
|
|
1125
1173
|
blockedPathFilteredCount += 1;
|
|
1126
1174
|
continue;
|
|
@@ -1195,16 +1243,23 @@ export class RecallSearchPipelineCoordinator {
|
|
|
1195
1243
|
// allowLifecycleFiltered=true to include archived/retired
|
|
1196
1244
|
// candidates, but superseded memories must still be filtered
|
|
1197
1245
|
// unless temporalSupersessionIncludeInRecall is set.
|
|
1198
|
-
//
|
|
1199
|
-
//
|
|
1200
|
-
//
|
|
1246
|
+
// #1952: an active state view ADMITS the superseded row when its
|
|
1247
|
+
// successor also survives this filter — history never renders
|
|
1248
|
+
// unanchored, and a successor rejected by any gate here can
|
|
1249
|
+
// never anchor. Admission defers to the post-pass fixpoint.
|
|
1250
|
+
// Skipped entirely when `as_of` is active (above branch);
|
|
1251
|
+
// isValidAsOf stays the authoritative historical gate.
|
|
1201
1252
|
shouldFilterSupersededFromRecall(memory.frontmatter, {
|
|
1202
1253
|
enabled: lifecycleCaps.temporalSupersession,
|
|
1203
1254
|
includeInRecall: this.deps.config.temporalSupersessionIncludeInRecall,
|
|
1204
1255
|
})
|
|
1205
1256
|
) {
|
|
1206
|
-
|
|
1207
|
-
|
|
1257
|
+
if (stateViewActive) {
|
|
1258
|
+
stateViewPending = true;
|
|
1259
|
+
} else {
|
|
1260
|
+
temporalSupersededFilteredCount += 1;
|
|
1261
|
+
continue;
|
|
1262
|
+
}
|
|
1208
1263
|
}
|
|
1209
1264
|
// Bi-temporal INJECTION filter (issue #1578): when the master gate
|
|
1210
1265
|
// is on and the caller did NOT pin `as_of`, drop facts whose event-
|
|
@@ -1243,11 +1298,57 @@ export class RecallSearchPipelineCoordinator {
|
|
|
1243
1298
|
}
|
|
1244
1299
|
// Derive persisted provenance exclusively from hydrated frontmatter.
|
|
1245
1300
|
// The formatter parses this value at the model-context render site.
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1301
|
+
if (stateViewPending) {
|
|
1302
|
+
// Survived every other gate; admission now hinges on the
|
|
1303
|
+
// successor surviving too — decided by the fixpoint below.
|
|
1304
|
+
stateViewDeferred.push(resultIdx);
|
|
1305
|
+
continue;
|
|
1306
|
+
}
|
|
1307
|
+
const builtRow = buildRecallRow(r, memory);
|
|
1308
|
+
if (stateViewBuilt !== null) {
|
|
1309
|
+
stateViewBuilt[resultIdx] = builtRow;
|
|
1310
|
+
if (memory) {
|
|
1311
|
+
const id = memory.frontmatter.id;
|
|
1312
|
+
if (typeof id === "string" && id.length > 0) stateViewSurvivorIds!.add(id);
|
|
1313
|
+
}
|
|
1314
|
+
}
|
|
1315
|
+
filtered.push(builtRow);
|
|
1316
|
+
}
|
|
1317
|
+
if (stateViewDeferred.length > 0) {
|
|
1318
|
+
// #1952 admission fixpoint: a deferred superseded row joins the
|
|
1319
|
+
// output only when its successor is (or becomes) part of the
|
|
1320
|
+
// filter-surviving set. An admitted row can itself anchor the next
|
|
1321
|
+
// link of a chain, so iterate to a fixpoint.
|
|
1322
|
+
const admitted = new Set<number>();
|
|
1323
|
+
for (let progress = true; progress; ) {
|
|
1324
|
+
progress = false;
|
|
1325
|
+
for (const deferredIdx of stateViewDeferred) {
|
|
1326
|
+
if (admitted.has(deferredIdx)) continue;
|
|
1327
|
+
const deferredMemory = memoryForResult(memoryByPath, results[deferredIdx]!);
|
|
1328
|
+
if (!deferredMemory) continue;
|
|
1329
|
+
if (stateViewSurvivorIds!.has(deferredMemory.frontmatter.supersededBy ?? "")) {
|
|
1330
|
+
admitted.add(deferredIdx);
|
|
1331
|
+
const id = deferredMemory.frontmatter.id;
|
|
1332
|
+
if (typeof id === "string" && id.length > 0) stateViewSurvivorIds!.add(id);
|
|
1333
|
+
progress = true;
|
|
1334
|
+
}
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
for (const deferredIdx of stateViewDeferred) {
|
|
1338
|
+
const deferredMemory = memoryForResult(memoryByPath, results[deferredIdx]!);
|
|
1339
|
+
if (admitted.has(deferredIdx) && deferredMemory) {
|
|
1340
|
+
stateViewAdmittedCount += 1;
|
|
1341
|
+
stateViewBuilt![deferredIdx] = buildRecallRow(results[deferredIdx]!, deferredMemory);
|
|
1342
|
+
} else {
|
|
1343
|
+
temporalSupersededFilteredCount += 1;
|
|
1344
|
+
}
|
|
1345
|
+
}
|
|
1346
|
+
// Re-emit in the order candidates entered this filter so an
|
|
1347
|
+
// admitted predecessor keeps its rank position (no slot swap).
|
|
1348
|
+
filtered.length = 0;
|
|
1349
|
+
for (const builtRow of stateViewBuilt!) {
|
|
1350
|
+
if (builtRow) filtered.push(builtRow);
|
|
1351
|
+
}
|
|
1251
1352
|
}
|
|
1252
1353
|
if (connectorPartitionFilteredCount > 0) {
|
|
1253
1354
|
log.debug(
|
|
@@ -1269,6 +1370,11 @@ export class RecallSearchPipelineCoordinator {
|
|
|
1269
1370
|
`temporal supersession filter removed ${temporalSupersededFilteredCount} superseded candidates`,
|
|
1270
1371
|
);
|
|
1271
1372
|
}
|
|
1373
|
+
if (stateViewAdmittedCount > 0) {
|
|
1374
|
+
log.debug(
|
|
1375
|
+
`state views admitted ${stateViewAdmittedCount} superseded candidates anchored on in-set successors (#1952)`,
|
|
1376
|
+
);
|
|
1377
|
+
}
|
|
1272
1378
|
if (biTemporalExpiredFilteredCount > 0) {
|
|
1273
1379
|
log.debug(
|
|
1274
1380
|
`bi-temporal validity filter removed ${biTemporalExpiredFilteredCount} expired-validity candidates from injection (temporal.biTemporal on)`,
|
|
@@ -1304,6 +1410,8 @@ export class RecallSearchPipelineCoordinator {
|
|
|
1304
1410
|
dropUnresolved?: boolean;
|
|
1305
1411
|
recallNamespaces?: readonly string[];
|
|
1306
1412
|
requestingConnector?: string;
|
|
1413
|
+
/** #1952 state-view admission — see filterSearchResultsByRecallSafety. */
|
|
1414
|
+
stateViewActive?: boolean;
|
|
1307
1415
|
},
|
|
1308
1416
|
): Promise<{ results: QmdSearchResult[]; memoryByPath: Map<string, MemoryFile> }> {
|
|
1309
1417
|
if (results.length === 0) {
|
|
@@ -1366,6 +1474,8 @@ export class RecallSearchPipelineCoordinator {
|
|
|
1366
1474
|
* string at the input boundary (CLI / HTTP / MCP).
|
|
1367
1475
|
*/
|
|
1368
1476
|
asOfMs?: number;
|
|
1477
|
+
/** #1952 state-view admission — flows into filterSearchResultsForRecall. */
|
|
1478
|
+
stateViewActive?: boolean;
|
|
1369
1479
|
requestingConnector?: string;
|
|
1370
1480
|
},
|
|
1371
1481
|
): Promise<QmdSearchResult[]> {
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
5
|
+
import test from "node:test";
|
|
6
|
+
|
|
7
|
+
import { parseConfig } from "../config.js";
|
|
8
|
+
import { RecallSearchPipelineCoordinator } from "./recall-search-pipeline.js";
|
|
9
|
+
import type { RecallSearchPipelineDeps } from "./recall-search-pipeline.js";
|
|
10
|
+
import type { MemoryFile, QmdSearchResult } from "../types.js";
|
|
11
|
+
import type { StorageManager } from "../index.js";
|
|
12
|
+
|
|
13
|
+
function result(path_: string, score = 1): QmdSearchResult {
|
|
14
|
+
return { docid: `qmd-${path_}`, path: path_, score, snippet: path_ };
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function memory(path_: string, fm: Partial<MemoryFile["frontmatter"]>): MemoryFile {
|
|
18
|
+
return {
|
|
19
|
+
path: path_,
|
|
20
|
+
content: path_,
|
|
21
|
+
frontmatter: {
|
|
22
|
+
created: "2026-07-19T00:00:00.000Z",
|
|
23
|
+
updated: "2026-07-19T00:00:00.000Z",
|
|
24
|
+
...fm,
|
|
25
|
+
} as unknown as MemoryFile["frontmatter"],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async function makeCoordinator(memoryDir: string): Promise<RecallSearchPipelineCoordinator> {
|
|
30
|
+
const config = parseConfig({
|
|
31
|
+
openaiApiKey: "sk-test",
|
|
32
|
+
memoryDir,
|
|
33
|
+
workspaceDir: path.join(memoryDir, "workspace"),
|
|
34
|
+
temporalSupersessionEnabled: true,
|
|
35
|
+
temporalSupersessionIncludeInRecall: false,
|
|
36
|
+
});
|
|
37
|
+
assert.equal(config.recallStateViews, false, "parseConfig default must be false");
|
|
38
|
+
const deps = {
|
|
39
|
+
config,
|
|
40
|
+
storage: {} as StorageManager,
|
|
41
|
+
readQmdResultMemory: async () => null,
|
|
42
|
+
} as unknown as RecallSearchPipelineDeps;
|
|
43
|
+
return new RecallSearchPipelineCoordinator(deps);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const OLD = "facts/job-old.md";
|
|
47
|
+
const NEW = "facts/job-new.md";
|
|
48
|
+
|
|
49
|
+
function corpus(): { results: QmdSearchResult[]; memories: Map<string, MemoryFile> } {
|
|
50
|
+
const results = [result(NEW, 0.9), result(OLD, 0.7)];
|
|
51
|
+
const memories = new Map<string, MemoryFile>([
|
|
52
|
+
[NEW, memory(NEW, { id: "m-new", status: "active" })],
|
|
53
|
+
[
|
|
54
|
+
OLD,
|
|
55
|
+
memory(OLD, {
|
|
56
|
+
id: "m-old",
|
|
57
|
+
status: "superseded",
|
|
58
|
+
supersededBy: "m-new",
|
|
59
|
+
supersededAt: "2026-08-01",
|
|
60
|
+
}),
|
|
61
|
+
],
|
|
62
|
+
]);
|
|
63
|
+
return { results, memories };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
test("state view admits a superseded candidate when its successor is in the set", async () => {
|
|
67
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-admit-"));
|
|
68
|
+
try {
|
|
69
|
+
const coordinator = await makeCoordinator(memoryDir);
|
|
70
|
+
const { results, memories } = corpus();
|
|
71
|
+
const safe = coordinator.filterSearchResultsByRecallSafety(results, memories, {
|
|
72
|
+
stateViewActive: true,
|
|
73
|
+
});
|
|
74
|
+
assert.deepEqual(
|
|
75
|
+
safe.map((r) => r.path).sort(),
|
|
76
|
+
[NEW, OLD],
|
|
77
|
+
"superseded row must be admitted alongside its successor",
|
|
78
|
+
);
|
|
79
|
+
const old = safe.find((r) => r.path === OLD);
|
|
80
|
+
assert.equal(old?.id, "m-old", "admitted row carries the frontmatter id");
|
|
81
|
+
assert.equal(old?.status, "superseded");
|
|
82
|
+
assert.equal(old?.supersededBy, "m-new");
|
|
83
|
+
assert.equal(old?.supersededAt, "2026-08-01");
|
|
84
|
+
// Successor stays unlabeled by the filter — labeling is the inject seam's job.
|
|
85
|
+
assert.equal(safe.find((r) => r.path === NEW)?.supersededBy, undefined);
|
|
86
|
+
} finally {
|
|
87
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
test("default (stateViewActive unset) keeps filtering superseded — zero-diff baseline", async () => {
|
|
91
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-off-"));
|
|
92
|
+
try {
|
|
93
|
+
const coordinator = await makeCoordinator(memoryDir);
|
|
94
|
+
const { results, memories } = corpus();
|
|
95
|
+
const baseline = coordinator.filterSearchResultsByRecallSafety(results, memories);
|
|
96
|
+
const explicitOff = coordinator.filterSearchResultsByRecallSafety(results, memories, {
|
|
97
|
+
stateViewActive: false,
|
|
98
|
+
});
|
|
99
|
+
assert.deepEqual(baseline.map((r) => r.path), [NEW]);
|
|
100
|
+
assert.deepEqual(explicitOff.map((r) => r.path), [NEW]);
|
|
101
|
+
// No chain fields leak onto survivors when the view is off.
|
|
102
|
+
assert.equal(baseline[0]?.supersededBy, undefined);
|
|
103
|
+
assert.equal(baseline[0]?.id, undefined);
|
|
104
|
+
} finally {
|
|
105
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
test("state view does NOT admit a superseded candidate whose successor is absent", async () => {
|
|
110
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-orphan-"));
|
|
111
|
+
try {
|
|
112
|
+
const coordinator = await makeCoordinator(memoryDir);
|
|
113
|
+
const results = [result(OLD, 0.7)];
|
|
114
|
+
const memories = new Map<string, MemoryFile>([
|
|
115
|
+
[
|
|
116
|
+
OLD,
|
|
117
|
+
memory(OLD, {
|
|
118
|
+
id: "m-old",
|
|
119
|
+
status: "superseded",
|
|
120
|
+
supersededBy: "m-absent",
|
|
121
|
+
supersededAt: "2026-08-01",
|
|
122
|
+
}),
|
|
123
|
+
],
|
|
124
|
+
]);
|
|
125
|
+
const safe = coordinator.filterSearchResultsByRecallSafety(results, memories, {
|
|
126
|
+
stateViewActive: true,
|
|
127
|
+
});
|
|
128
|
+
assert.deepEqual(safe, [], "orphaned superseded row must stay filtered");
|
|
129
|
+
} finally {
|
|
130
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
test("a successor rejected by the status gate cannot anchor its superseded row (no slot consumed)", async () => {
|
|
135
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-anchor-status-"));
|
|
136
|
+
try {
|
|
137
|
+
const coordinator = await makeCoordinator(memoryDir);
|
|
138
|
+
const OTHER = "facts/unrelated.md";
|
|
139
|
+
const results = [result(OLD, 0.9), result(NEW, 0.8), result(OTHER, 0.7)];
|
|
140
|
+
const memories = new Map<string, MemoryFile>([
|
|
141
|
+
[
|
|
142
|
+
OLD,
|
|
143
|
+
memory(OLD, {
|
|
144
|
+
id: "m-old",
|
|
145
|
+
status: "superseded",
|
|
146
|
+
supersededBy: "m-new",
|
|
147
|
+
supersededAt: "2026-08-01",
|
|
148
|
+
}),
|
|
149
|
+
],
|
|
150
|
+
// In memoryByPath (pre-filter) but rejected by the forgotten-status
|
|
151
|
+
// gate — pre-fix this id anchored m-old and admitted it.
|
|
152
|
+
[NEW, memory(NEW, { id: "m-new", status: "forgotten" })],
|
|
153
|
+
[OTHER, memory(OTHER, { id: "m-other", status: "active" })],
|
|
154
|
+
]);
|
|
155
|
+
const safe = coordinator.filterSearchResultsByRecallSafety(results, memories, {
|
|
156
|
+
stateViewActive: true,
|
|
157
|
+
});
|
|
158
|
+
assert.deepEqual(
|
|
159
|
+
safe.map((r) => r.path),
|
|
160
|
+
[OTHER],
|
|
161
|
+
"a filter-rejected successor must not anchor its superseded row, and the orphaned row must not consume a slot",
|
|
162
|
+
);
|
|
163
|
+
} finally {
|
|
164
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
test("a successor rejected by the dedicated-surface gate cannot anchor its superseded row", async () => {
|
|
169
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-anchor-surface-"));
|
|
170
|
+
try {
|
|
171
|
+
const coordinator = await makeCoordinator(memoryDir);
|
|
172
|
+
const results = [result(OLD, 0.9), result(NEW, 0.8)];
|
|
173
|
+
const memories = new Map<string, MemoryFile>([
|
|
174
|
+
[
|
|
175
|
+
OLD,
|
|
176
|
+
memory(OLD, {
|
|
177
|
+
id: "m-old",
|
|
178
|
+
status: "superseded",
|
|
179
|
+
supersededBy: "m-new",
|
|
180
|
+
supersededAt: "2026-08-01",
|
|
181
|
+
}),
|
|
182
|
+
],
|
|
183
|
+
[NEW, memory(NEW, { id: "m-new", status: "active", memoryKind: "dream" })],
|
|
184
|
+
]);
|
|
185
|
+
const safe = coordinator.filterSearchResultsByRecallSafety(results, memories, {
|
|
186
|
+
stateViewActive: true,
|
|
187
|
+
});
|
|
188
|
+
assert.deepEqual(safe, [], "dream-surface successors must not anchor superseded rows");
|
|
189
|
+
} finally {
|
|
190
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
test("an anchored predecessor keeps its rank position when admitted", async () => {
|
|
195
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-anchor-order-"));
|
|
196
|
+
try {
|
|
197
|
+
const coordinator = await makeCoordinator(memoryDir);
|
|
198
|
+
const { results, memories } = corpus();
|
|
199
|
+
const safe = coordinator.filterSearchResultsByRecallSafety(results, memories, {
|
|
200
|
+
stateViewActive: true,
|
|
201
|
+
});
|
|
202
|
+
assert.deepEqual(
|
|
203
|
+
safe.map((r) => r.path),
|
|
204
|
+
[NEW, OLD],
|
|
205
|
+
"admission must not reorder candidates relative to their incoming rank",
|
|
206
|
+
);
|
|
207
|
+
assert.equal(safe[1]?.supersededBy, "m-new", "admitted row carries the chain fields");
|
|
208
|
+
} finally {
|
|
209
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
210
|
+
}
|
|
211
|
+
});
|
|
@@ -137,31 +137,85 @@ export async function readTargetSnapshot(
|
|
|
137
137
|
|
|
138
138
|
/**
|
|
139
139
|
* Undo a merged body whose provenance patch never landed, and report what is
|
|
140
|
-
* actually true of storage afterwards:
|
|
141
|
-
*
|
|
140
|
+
* actually true of storage afterwards:
|
|
141
|
+
* - "reverted" — the target no longer holds this merge's unprovenanced text
|
|
142
|
+
* (ours was restored away, or another writer already replaced the body
|
|
143
|
+
* - "superseded" — the standing merged body is ANOTHER writer's commit
|
|
144
|
+
* (#2813 P1): `committedRevision` names the receipt token OUR CAS minted,
|
|
145
|
+
* the reread holds a different standing token, and a concurrent writer's
|
|
146
|
+
* deterministic merge is byte-for-byte our merged text — so only the
|
|
147
|
+
* token can attribute the standing record. Never revert theirs; the
|
|
148
|
+
* caller discards its own staged duplicate and reports the degraded merge;
|
|
149
|
+
* - "stands" — unverifiable (unreadable target), or the restore lost its
|
|
150
|
+
* race, so assume the merged text stands and refuse to create a duplicate.
|
|
142
151
|
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
* and refuse to create a duplicate.
|
|
152
|
+
* `committedRevision` is the CAS commit receipt (markCasCommittedRevision,
|
|
153
|
+
* or the successful CAS's return value): the dedicated per-target revision
|
|
154
|
+
* token from the durable sidecar (#2807) — unique per commit even within one
|
|
155
|
+
* millisecond. Public `frontmatter.updated` never identifies a commit.
|
|
156
|
+
* Callers without identity omit it and keep the body-equality
|
|
157
|
+
* classification above.
|
|
150
158
|
*/
|
|
159
|
+
export type RevertMergedContentResult = "reverted" | "superseded" | "stands";
|
|
160
|
+
|
|
151
161
|
export async function revertMergedContent(
|
|
152
162
|
storage: StorageManager,
|
|
153
163
|
target: MemoryFile,
|
|
154
164
|
mergedContent: string,
|
|
155
|
-
|
|
165
|
+
committedRevision?: string,
|
|
166
|
+
): Promise<RevertMergedContentResult> {
|
|
156
167
|
try {
|
|
157
168
|
const current = await readTargetSnapshot(storage, target);
|
|
158
|
-
if (!current) return
|
|
159
|
-
if (current.content !== mergedContent) return
|
|
160
|
-
|
|
169
|
+
if (!current) return "stands";
|
|
170
|
+
if (current.content !== mergedContent) return "reverted";
|
|
171
|
+
// #2813 (P1): the merged body standing is provably OURS only while the
|
|
172
|
+
// target still carries the revision token our CAS minted. A different
|
|
173
|
+
// token means a concurrent writer committed the same deterministic
|
|
174
|
+
// body after our lock was released — reverting would delete their valid
|
|
175
|
+
// merge while their provenance patch may already have landed.
|
|
176
|
+
if (committedRevision !== undefined) {
|
|
177
|
+
// #2813 (P1 B): the standing receipt is a THREE-WAY truth. Only a
|
|
178
|
+
// PROVEN foreign token may take the superseded path — that proof is
|
|
179
|
+
// what licenses discarding this writer's staged snapshot. The old
|
|
180
|
+
// fail-open read collapsed an unreadable sidecar into undefined,
|
|
181
|
+
// which classified as superseded and discarded the recovery
|
|
182
|
+
// snapshot on unproven grounds. Unavailable (transiently
|
|
183
|
+
// unreadable, or a reservation pending finalization) and absent
|
|
184
|
+
// (which cannot corroborate EITHER writer while this receipt is in
|
|
185
|
+
// hand) are keep-side: the degraded branch preserves the snapshot
|
|
186
|
+
// and reconciliation retries.
|
|
187
|
+
let standing: Awaited<ReturnType<StorageManager["readCasRevisionStatus"]>>;
|
|
188
|
+
try {
|
|
189
|
+
standing = await storage.readCasRevisionStatus(target.path);
|
|
190
|
+
} catch (err) {
|
|
191
|
+
standing = {
|
|
192
|
+
status: "unavailable",
|
|
193
|
+
reason: err instanceof Error ? err.message : String(err),
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
if (standing.status === "present") {
|
|
197
|
+
if (standing.revision !== committedRevision) {
|
|
198
|
+
return "superseded";
|
|
199
|
+
}
|
|
200
|
+
} else if (standing.status === "unavailable") {
|
|
201
|
+
log.warn(
|
|
202
|
+
`revertMergedContent: CAS revision status for ${target.path} is unavailable (${standing.reason}); ownership cannot be verified — keeping the recovery snapshot instead of discarding or reverting`,
|
|
203
|
+
);
|
|
204
|
+
return "stands";
|
|
205
|
+
} else {
|
|
206
|
+
log.warn(
|
|
207
|
+
`revertMergedContent: CAS revision receipt for ${target.path} is absent although this writer holds receipt ${committedRevision}; ownership cannot be verified — keeping the recovery snapshot`,
|
|
208
|
+
);
|
|
209
|
+
return "stands";
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return (await storage.updateMemoryIfUnchanged(current, target.content, {
|
|
161
213
|
actor: "semantic-merge-rollback",
|
|
162
|
-
})
|
|
214
|
+
}))
|
|
215
|
+
? "reverted"
|
|
216
|
+
: "stands";
|
|
163
217
|
} catch {
|
|
164
|
-
return
|
|
218
|
+
return "stands";
|
|
165
219
|
}
|
|
166
220
|
}
|
|
167
221
|
|
|
@@ -225,12 +279,13 @@ export async function rewriteMergedTargetGraphEdges(
|
|
|
225
279
|
storage: {
|
|
226
280
|
dir: string;
|
|
227
281
|
getMemoryByIdIncludingArchived: (id: string) => Promise<MemoryFile | null>;
|
|
282
|
+
readCasRevision: (filePath: string) => Promise<string | undefined>;
|
|
228
283
|
},
|
|
229
284
|
input: {
|
|
230
285
|
targetId: string;
|
|
231
286
|
memoryRelPath: string;
|
|
232
287
|
mergedContent: string;
|
|
233
|
-
/** The
|
|
288
|
+
/** The CAS revision token the committed-body check observed. */
|
|
234
289
|
revisionChecked: string | undefined;
|
|
235
290
|
rewriteTypes: readonly GraphType[];
|
|
236
291
|
build: () => Promise<GraphEdge[] | void>;
|
|
@@ -247,10 +302,14 @@ export async function rewriteMergedTargetGraphEdges(
|
|
|
247
302
|
try {
|
|
248
303
|
appended = (await input.build()) ?? undefined;
|
|
249
304
|
const committedNow = await storage.getMemoryByIdIncludingArchived(input.targetId);
|
|
305
|
+
const committedRevision = committedNow === null ? undefined : await storage.readCasRevision(committedNow.path).catch((err) => {
|
|
306
|
+
log.warn(`rewriteMergedTargetGraphEdges: failed to read CAS revision for ${committedNow.path}: ${err}`);
|
|
307
|
+
return undefined;
|
|
308
|
+
});
|
|
250
309
|
if (
|
|
251
310
|
!committedNow ||
|
|
252
311
|
committedNow.content !== input.mergedContent ||
|
|
253
|
-
|
|
312
|
+
committedRevision !== input.revisionChecked
|
|
254
313
|
) {
|
|
255
314
|
await rollbackNodeEdgeRewrite(storage.dir, input.memoryRelPath, input.rewriteTypes, removedEdges, input.targetId, appended);
|
|
256
315
|
return false;
|