@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
|
@@ -156,10 +156,10 @@ function liveEntries(
|
|
|
156
156
|
query: string,
|
|
157
157
|
stateViewsEnabled: boolean,
|
|
158
158
|
): { entries: string[]; widened: { id?: string; stateLabel?: string }[] } {
|
|
159
|
-
// parseConfig
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
//
|
|
159
|
+
// parseConfig now carries `recallStateViews` (default false); the override
|
|
160
|
+
// below exercises the enabled path against the real parsed config, and the
|
|
161
|
+
// disabled path uses the parsed default — so a parse regression (flag
|
|
162
|
+
// silently ignored) makes the enabled assertions below fail.
|
|
163
163
|
const parsed = parseConfig({ memoryDir: "/tmp/remnic-zero-diff-test" });
|
|
164
164
|
const config = stateViewsEnabled
|
|
165
165
|
? ({ ...parsed, recallStateViews: true } as typeof parsed)
|
|
@@ -196,7 +196,7 @@ function linesFrom(
|
|
|
196
196
|
}));
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
test("the enabled route labels
|
|
199
|
+
test("the enabled route labels a superseded row and renders the historical prefix", () => {
|
|
200
200
|
const results = [
|
|
201
201
|
{ memoryId: "m-1", text: "we use PostgreSQL", stateLabel: "current" as const, score: 0.9 },
|
|
202
202
|
{
|
|
@@ -224,12 +224,21 @@ test("the enabled route labels an admitted superseded row; disabled leaves label
|
|
|
224
224
|
"current",
|
|
225
225
|
"the disabled route must not touch labels",
|
|
226
226
|
);
|
|
227
|
-
//
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
assert.
|
|
227
|
+
// Observable effect #2 (rendering slice): the enabled route prefixes the
|
|
228
|
+
// admitted superseded row with `[superseded <date> by <id>]`; the disabled
|
|
229
|
+
// render stays byte-identical (no prefix, same snippet).
|
|
230
|
+
const enabledOld = enabled.entries.find((entry) => entry.includes("we use SQLite"));
|
|
231
|
+
const disabledOld = disabled.entries.find((entry) => entry.includes("we use SQLite"));
|
|
232
|
+
assert.ok(enabledOld, "enabled render includes the superseded row");
|
|
233
|
+
assert.ok(disabledOld, "disabled render includes the (unlabeled) row");
|
|
234
|
+
assert.match(enabledOld!, /\[superseded 2026-08-01 by m-1\] we use SQLite/);
|
|
235
|
+
assert.doesNotMatch(disabledOld!, /\[superseded/);
|
|
236
|
+
// Current rows are untouched in both renders.
|
|
237
|
+
for (const entries of [enabled.entries, disabled.entries]) {
|
|
238
|
+
const current = entries.find((entry) => entry.includes("we use PostgreSQL"));
|
|
239
|
+
assert.ok(current);
|
|
240
|
+
assert.doesNotMatch(current!, /\[superseded/);
|
|
241
|
+
}
|
|
233
242
|
});
|
|
234
243
|
|
|
235
244
|
test("the enabled route drops a superseded row whose successor is absent", () => {
|
|
@@ -52,6 +52,96 @@ test("change-intent conjugations fire the annotator", () => {
|
|
|
52
52
|
}
|
|
53
53
|
});
|
|
54
54
|
|
|
55
|
+
test("change-intent phrase matching uses token boundaries, not substrings", () => {
|
|
56
|
+
const positives = [
|
|
57
|
+
"When did we move offices?",
|
|
58
|
+
"we used to live in Austin",
|
|
59
|
+
"when did the vendor change",
|
|
60
|
+
];
|
|
61
|
+
const negatives = [
|
|
62
|
+
"when Didi arrives", // proper noun must not fire "when did"
|
|
63
|
+
"I was confused to hear that", // "used to" inside "confused to"
|
|
64
|
+
];
|
|
65
|
+
for (const query of positives) {
|
|
66
|
+
assert.equal(isChangeOrientedQuery(query), true, query);
|
|
67
|
+
}
|
|
68
|
+
for (const query of negatives) {
|
|
69
|
+
assert.equal(isChangeOrientedQuery(query), false, query);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test("bare before/after sequencing is not change intent; event-pointing is", () => {
|
|
74
|
+
const positives = [
|
|
75
|
+
"before the move",
|
|
76
|
+
"after the cutover",
|
|
77
|
+
"after a migration",
|
|
78
|
+
"before the migration",
|
|
79
|
+
];
|
|
80
|
+
const negatives = [
|
|
81
|
+
"before lunch",
|
|
82
|
+
"after install",
|
|
83
|
+
"restart before dinner",
|
|
84
|
+
"shut down after setup",
|
|
85
|
+
"the aftermath report",
|
|
86
|
+
];
|
|
87
|
+
for (const query of positives) {
|
|
88
|
+
assert.equal(isChangeOrientedQuery(query), true, query);
|
|
89
|
+
}
|
|
90
|
+
for (const query of negatives) {
|
|
91
|
+
assert.equal(isChangeOrientedQuery(query), false, query);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
test("asOf mode keeps a predecessor whose successor the pin filtered out", () => {
|
|
96
|
+
const predecessor = fact("old-job", {
|
|
97
|
+
status: "superseded",
|
|
98
|
+
supersededBy: "new-job",
|
|
99
|
+
supersededAt: "2026-08-10T00:00:00.000Z",
|
|
100
|
+
});
|
|
101
|
+
const labeled = annotateStateView([predecessor], "when did the job title change", [], {
|
|
102
|
+
enabled: true,
|
|
103
|
+
asOfMs: Date.parse("2026-08-05T00:00:00.000Z"),
|
|
104
|
+
});
|
|
105
|
+
assert.equal(labeled.length, 1, "a valid asOf result must never be emptied");
|
|
106
|
+
assert.equal(
|
|
107
|
+
labeled[0]?.stateLabel,
|
|
108
|
+
"current",
|
|
109
|
+
"the pin predates the supersession, so the row was the live fact at the snapshot",
|
|
110
|
+
);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
test("asOf mode labels a predecessor historical when the supersession predates the pin", () => {
|
|
114
|
+
const predecessor = fact("old-job", {
|
|
115
|
+
status: "superseded",
|
|
116
|
+
supersededBy: "new-job",
|
|
117
|
+
supersededAt: "2026-08-01T00:00:00.000Z",
|
|
118
|
+
});
|
|
119
|
+
const labeled = annotateStateView([predecessor], "when did the job title change", [], {
|
|
120
|
+
enabled: true,
|
|
121
|
+
asOfMs: Date.parse("2026-08-05T00:00:00.000Z"),
|
|
122
|
+
});
|
|
123
|
+
assert.equal(labeled.length, 1);
|
|
124
|
+
assert.equal(labeled[0]?.stateLabel, "historical");
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
test("asOf mode keeps pair semantics when both rows are valid at the pin", () => {
|
|
128
|
+
const rows = [
|
|
129
|
+
fact("new-job", { status: "active" }),
|
|
130
|
+
fact("old-job", { status: "superseded", supersededBy: "new-job", supersededAt: "2026-03-01" }),
|
|
131
|
+
];
|
|
132
|
+
const labeled = annotateStateView(rows, "when did the job title change", [], {
|
|
133
|
+
enabled: true,
|
|
134
|
+
asOfMs: Date.parse("2026-08-05T00:00:00.000Z"),
|
|
135
|
+
});
|
|
136
|
+
assert.deepEqual(
|
|
137
|
+
labeled.map((row) => [row.id, row.stateLabel]),
|
|
138
|
+
[
|
|
139
|
+
["new-job", "current"],
|
|
140
|
+
["old-job", "historical"],
|
|
141
|
+
],
|
|
142
|
+
);
|
|
143
|
+
});
|
|
144
|
+
|
|
55
145
|
test("non-change query is identical (same array reference, no labels)", () => {
|
|
56
146
|
const input = PAIR_RESULTS.map((row) => ({ ...row }));
|
|
57
147
|
const out = annotateStateView(input, "what is the current job title", PAIR, { enabled: true });
|
|
@@ -129,3 +219,55 @@ test("annotateStateView does not mutate input rows", () => {
|
|
|
129
219
|
assert.equal(input[0]?.stateLabel, undefined);
|
|
130
220
|
assert.equal(input[1]?.stateLabel, undefined);
|
|
131
221
|
});
|
|
222
|
+
|
|
223
|
+
test("disputed cycle never labels historical against a missing anchor", () => {
|
|
224
|
+
const results = [
|
|
225
|
+
fact("a", { status: "superseded", supersededBy: "b" }),
|
|
226
|
+
fact("b", { status: "superseded", supersededBy: "a" }),
|
|
227
|
+
fact("c", { status: "active" }),
|
|
228
|
+
];
|
|
229
|
+
const labeled = annotateStateView(results, "when did this change", [], { enabled: true });
|
|
230
|
+
assert.deepEqual(
|
|
231
|
+
labeled.map((row) => [row.id, row.stateLabel]),
|
|
232
|
+
[
|
|
233
|
+
["a", "transition"],
|
|
234
|
+
["b", "transition"],
|
|
235
|
+
["c", "current"],
|
|
236
|
+
],
|
|
237
|
+
"cycle members may render as transitions, never historical-vs-current",
|
|
238
|
+
);
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
test("corrected row links through the chain when supersededBy is absent", () => {
|
|
242
|
+
const chains: StateViewChain[] = [
|
|
243
|
+
{ predecessorId: "old", successorId: "new", supersededAt: "2026-02-01" },
|
|
244
|
+
];
|
|
245
|
+
const results = [
|
|
246
|
+
fact("new", { status: "active" }),
|
|
247
|
+
fact("old", { status: "superseded", supersededAt: "2026-02-01" }),
|
|
248
|
+
];
|
|
249
|
+
const labeled = annotateStateView(results, "before the correction what was it", chains, {
|
|
250
|
+
enabled: true,
|
|
251
|
+
});
|
|
252
|
+
assert.deepEqual(
|
|
253
|
+
labeled.map((row) => [row.id, row.stateLabel]),
|
|
254
|
+
[
|
|
255
|
+
["new", "current"],
|
|
256
|
+
["old", "historical"],
|
|
257
|
+
],
|
|
258
|
+
);
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
test("transitive orphan chains collapse: A→B→(C absent) drops both A and B", () => {
|
|
262
|
+
const results = [
|
|
263
|
+
fact("a", { status: "superseded", supersededBy: "b" }),
|
|
264
|
+
fact("b", { status: "superseded", supersededBy: "c" }),
|
|
265
|
+
fact("unrelated", { status: "active" }),
|
|
266
|
+
];
|
|
267
|
+
const labeled = annotateStateView(results, "when did this change", [], { enabled: true });
|
|
268
|
+
assert.deepEqual(
|
|
269
|
+
labeled.map((row) => row.id),
|
|
270
|
+
["unrelated"],
|
|
271
|
+
"the fixpoint must drop A once B is dropped, not render a dangling historical",
|
|
272
|
+
);
|
|
273
|
+
});
|
package/src/recall-state-view.ts
CHANGED
|
@@ -30,7 +30,17 @@ export interface StateViewResult {
|
|
|
30
30
|
|
|
31
31
|
export const DEFAULT_RECALL_STATE_VIEWS = false;
|
|
32
32
|
|
|
33
|
-
const CHANGE_WORDS = ["
|
|
33
|
+
const CHANGE_WORDS = ["switch", "switches", "switched", "switching", "change", "changes", "changed", "changing"];
|
|
34
|
+
|
|
35
|
+
// Phrase matches are token-bounded: "when Didi" must not fire the
|
|
36
|
+
// "when did" phrase, and "confused to" must not fire "used to".
|
|
37
|
+
const CHANGE_PHRASE_RE = /\bwhen\s+did\b|\bused\s+to\b/;
|
|
38
|
+
const CHANGE_WORD_RE = new RegExp(`\\b(?:${CHANGE_WORDS.join("|")})\\b`);
|
|
39
|
+
// Bare "before"/"after" are ordinary sequencing ("before lunch",
|
|
40
|
+
// "after install"). They carry change intent only when they point at a
|
|
41
|
+
// specific event through a determiner ("before the move", "after the
|
|
42
|
+
// cutover").
|
|
43
|
+
const EVENT_POINTER_RE = /\b(?:before|after)\s+(?:the|a|an|this|that|these|those)\b/;
|
|
34
44
|
|
|
35
45
|
export function parseRecallStateViews(raw: unknown): boolean {
|
|
36
46
|
return coerceBooleanLike(raw, "recallStateViews") === true;
|
|
@@ -38,15 +48,7 @@ export function parseRecallStateViews(raw: unknown): boolean {
|
|
|
38
48
|
|
|
39
49
|
export function isChangeOrientedQuery(query: string): boolean {
|
|
40
50
|
const lower = query.toLowerCase();
|
|
41
|
-
|
|
42
|
-
return CHANGE_WORDS.some((word) => {
|
|
43
|
-
const idx = lower.indexOf(word);
|
|
44
|
-
if (idx < 0) return false;
|
|
45
|
-
const before = idx === 0 || !/[a-z0-9]/.test(lower[idx - 1] ?? "");
|
|
46
|
-
const afterIdx = idx + word.length;
|
|
47
|
-
const after = afterIdx >= lower.length || !/[a-z0-9]/.test(lower[afterIdx] ?? "");
|
|
48
|
-
return before && after;
|
|
49
|
-
});
|
|
51
|
+
return CHANGE_PHRASE_RE.test(lower) || CHANGE_WORD_RE.test(lower) || EVENT_POINTER_RE.test(lower);
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
export function shouldWidenSuperseded(
|
|
@@ -83,6 +85,7 @@ function labelFor(
|
|
|
83
85
|
result: StateViewResult,
|
|
84
86
|
byPred: Map<string, string>,
|
|
85
87
|
admittedIds: ReadonlySet<string>,
|
|
88
|
+
asOfMs: number | null,
|
|
86
89
|
): StateLabel {
|
|
87
90
|
const successorId = result.supersededBy ?? byPred.get(id);
|
|
88
91
|
const isPred = shouldWidenSuperseded(successorId, admittedIds);
|
|
@@ -96,17 +99,39 @@ function labelFor(
|
|
|
96
99
|
if (isPred && isSucc) return "transition";
|
|
97
100
|
if (isPred) return "historical";
|
|
98
101
|
if (isSucc) return "current";
|
|
99
|
-
|
|
102
|
+
if (result.status === "superseded") {
|
|
103
|
+
// #1952 asOf mode: the successor is legitimately absent under the
|
|
104
|
+
// historical pin. The row was the live fact at the snapshot when the
|
|
105
|
+
// recorded supersession postdates the pin ("current" relative to
|
|
106
|
+
// the snapshot); already replaced at the pin is "historical".
|
|
107
|
+
return asOfMs === null ? "historical" : snapshotStateLabel(result, asOfMs);
|
|
108
|
+
}
|
|
109
|
+
return "current";
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function snapshotStateLabel(result: StateViewResult, asOfMs: number): StateLabel {
|
|
113
|
+
const supersededAtMs = Date.parse(result.supersededAt ?? "");
|
|
114
|
+
return Number.isFinite(supersededAtMs) && supersededAtMs <= asOfMs
|
|
115
|
+
? "historical"
|
|
116
|
+
: "current";
|
|
100
117
|
}
|
|
101
118
|
|
|
102
119
|
export function annotateStateView<T extends StateViewResult>(
|
|
103
120
|
results: T[],
|
|
104
121
|
query: string,
|
|
105
122
|
chains: readonly StateViewChain[],
|
|
106
|
-
options: { enabled?: boolean } = {},
|
|
123
|
+
options: { enabled?: boolean; asOfMs?: number } = {},
|
|
107
124
|
): T[] {
|
|
108
125
|
const enabled = options.enabled === true;
|
|
109
126
|
if (!enabled || !isChangeOrientedQuery(query)) return results;
|
|
127
|
+
// #1952 asOf mode: under a historical pin the pipeline's isValidAsOf
|
|
128
|
+
// gate already decided validity at the pinned instant, so a predecessor
|
|
129
|
+
// must not be discarded merely because its successor is absent under
|
|
130
|
+
// the same filter. A valid asOf result is never emptied here.
|
|
131
|
+
const asOfMs =
|
|
132
|
+
typeof options.asOfMs === "number" && Number.isFinite(options.asOfMs)
|
|
133
|
+
? options.asOfMs
|
|
134
|
+
: null;
|
|
110
135
|
|
|
111
136
|
const byPred = buildSuccessorMap(results, chains);
|
|
112
137
|
const candidateIds = new Set<string>();
|
|
@@ -115,24 +140,47 @@ export function annotateStateView<T extends StateViewResult>(
|
|
|
115
140
|
if (id) candidateIds.add(id);
|
|
116
141
|
}
|
|
117
142
|
|
|
118
|
-
const
|
|
119
|
-
for (const result of results) {
|
|
143
|
+
const isSupersededRow = (result: T): { superseded: boolean; successorId: string | undefined } => {
|
|
120
144
|
const id = resultStateViewId(result);
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
145
|
+
return {
|
|
146
|
+
superseded: result.status === "superseded" || Boolean(result.supersededBy) || byPred.has(id),
|
|
147
|
+
successorId: result.supersededBy ?? byPred.get(id),
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
let admitted: T[];
|
|
152
|
+
if (asOfMs !== null) {
|
|
153
|
+
admitted = results.slice();
|
|
154
|
+
} else {
|
|
155
|
+
admitted = [];
|
|
156
|
+
for (const result of results) {
|
|
157
|
+
const { superseded, successorId } = isSupersededRow(result);
|
|
158
|
+
if (!superseded || shouldWidenSuperseded(successorId, candidateIds)) {
|
|
159
|
+
admitted.push(result);
|
|
160
|
+
}
|
|
125
161
|
}
|
|
126
|
-
}
|
|
127
162
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
163
|
+
// #1952 contract: superseded never appears without its successor. A
|
|
164
|
+
// successor can itself be dropped (filtered elsewhere, or transitively
|
|
165
|
+
// orphaned), so reconcile to a fixpoint instead of trusting the first pass.
|
|
166
|
+
let admittedIds = new Set(admitted.map(resultStateViewId).filter(Boolean));
|
|
167
|
+
for (let changed = true; changed; ) {
|
|
168
|
+
changed = false;
|
|
169
|
+
for (let i = admitted.length - 1; i >= 0; i -= 1) {
|
|
170
|
+
const row = admitted[i]!;
|
|
171
|
+
const { superseded, successorId } = isSupersededRow(row);
|
|
172
|
+
if (superseded && !shouldWidenSuperseded(successorId, admittedIds)) {
|
|
173
|
+
admitted.splice(i, 1);
|
|
174
|
+
changed = true;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (changed) admittedIds = new Set(admitted.map(resultStateViewId).filter(Boolean));
|
|
178
|
+
}
|
|
132
179
|
}
|
|
133
180
|
|
|
181
|
+
const admittedIds = new Set(admitted.map(resultStateViewId).filter(Boolean));
|
|
134
182
|
return admitted.map((result) => {
|
|
135
183
|
const id = resultStateViewId(result);
|
|
136
|
-
return { ...result, stateLabel: labelFor(id, result, byPred, admittedIds) };
|
|
184
|
+
return { ...result, stateLabel: labelFor(id, result, byPred, admittedIds, asOfMs) };
|
|
137
185
|
});
|
|
138
186
|
}
|
|
@@ -558,6 +558,33 @@ test("renderXrayText omits per-edge confidence line when graphEdgeConfidences ab
|
|
|
558
558
|
assert.ok(!out.includes("edge-confidences:"));
|
|
559
559
|
});
|
|
560
560
|
|
|
561
|
+
// ─── Issue #1952 — state-view text rendering ──────────────────────────────
|
|
562
|
+
|
|
563
|
+
test("renderXrayText renders the state-view line exactly once per result", () => {
|
|
564
|
+
const snap: RecallXraySnapshot = {
|
|
565
|
+
...minimalSnapshot(),
|
|
566
|
+
results: [
|
|
567
|
+
{
|
|
568
|
+
memoryId: "mem-current",
|
|
569
|
+
path: "facts/job.md",
|
|
570
|
+
servedBy: "hybrid",
|
|
571
|
+
scoreDecomposition: { final: 0.9 },
|
|
572
|
+
admittedBy: [],
|
|
573
|
+
stateView: "current",
|
|
574
|
+
pathPenaltyApplied: false,
|
|
575
|
+
},
|
|
576
|
+
],
|
|
577
|
+
};
|
|
578
|
+
const out = renderXrayText(snap);
|
|
579
|
+
const count = out.split("state-view:").length - 1;
|
|
580
|
+
assert.equal(
|
|
581
|
+
count,
|
|
582
|
+
1,
|
|
583
|
+
`state-view must render once per result (stable location after path), got ${count}:\n${out}`,
|
|
584
|
+
);
|
|
585
|
+
assert.ok(out.includes("state-view: current"));
|
|
586
|
+
});
|
|
587
|
+
|
|
561
588
|
test("renderXrayText tier-explain block matches shared helper output", async () => {
|
|
562
589
|
// CLAUDE.md rule 22: the tier-explain text block must be a single
|
|
563
590
|
// source of truth shared between recall-explain-renderer and
|
|
@@ -152,6 +152,7 @@ function renderResultTextLines(
|
|
|
152
152
|
const lines: string[] = [];
|
|
153
153
|
lines.push(`[${rank}] ${result.memoryId} — ${servedByLabel(result.servedBy)}`);
|
|
154
154
|
if (result.path) lines.push(` path: ${result.path}`);
|
|
155
|
+
if (result.stateView) lines.push(` state-view: ${result.stateView}`);
|
|
155
156
|
lines.push(` score: ${renderScoreDecomposition(result)}`);
|
|
156
157
|
if (result.provenance) {
|
|
157
158
|
lines.push(
|
|
@@ -397,6 +398,9 @@ function renderResultMarkdownLines(
|
|
|
397
398
|
`- **Admitted by:** ${result.admittedBy.map(mdInlineCode).join(", ")}`,
|
|
398
399
|
);
|
|
399
400
|
}
|
|
401
|
+
if (result.stateView) {
|
|
402
|
+
lines.push(`- **State view:** ${mdInlineCode(result.stateView)}`);
|
|
403
|
+
}
|
|
400
404
|
if (result.rejectedBy) {
|
|
401
405
|
lines.push(`- **Rejected by:** ${mdInlineCode(result.rejectedBy)}`);
|
|
402
406
|
}
|
package/src/recall-xray.ts
CHANGED
|
@@ -22,6 +22,7 @@ import { randomUUID } from "node:crypto";
|
|
|
22
22
|
import { normalizeRetrievedMemoryProvenance, type RetrievedMemoryProvenance } from "./memory-provenance.js";
|
|
23
23
|
import { estimateTokenCount } from "./token-estimate.js";
|
|
24
24
|
import type { RecallDisclosure, RecallTierExplain } from "./types.js";
|
|
25
|
+
import type { StateLabel } from "./recall-state-view.js";
|
|
25
26
|
import { isRecallDisclosure } from "./types.js";
|
|
26
27
|
|
|
27
28
|
/**
|
|
@@ -196,6 +197,13 @@ export interface RecallXrayResult {
|
|
|
196
197
|
quarantined: boolean;
|
|
197
198
|
quarantineReason?: string;
|
|
198
199
|
};
|
|
200
|
+
/**
|
|
201
|
+
* #1952 — recall state-view label for this result (`current`,
|
|
202
|
+
* `historical`, or `transition`). Present only when state views were
|
|
203
|
+
* active for the recall AND the result was annotated at the inject
|
|
204
|
+
* seam; absent otherwise, so legacy snapshots round-trip unchanged.
|
|
205
|
+
*/
|
|
206
|
+
stateView?: StateLabel;
|
|
199
207
|
}
|
|
200
208
|
|
|
201
209
|
/**
|
|
@@ -522,6 +530,10 @@ function cloneResult(result: RecallXrayResult): RecallXrayResult {
|
|
|
522
530
|
typeof result.pathPenaltyApplied === "boolean"
|
|
523
531
|
? result.pathPenaltyApplied
|
|
524
532
|
: undefined;
|
|
533
|
+
const stateView =
|
|
534
|
+
result.stateView === "current" || result.stateView === "historical" || result.stateView === "transition"
|
|
535
|
+
? result.stateView
|
|
536
|
+
: undefined;
|
|
525
537
|
const auditEntryId = nonEmptyString(result.auditEntryId);
|
|
526
538
|
const rejectedBy = nonEmptyString(result.rejectedBy);
|
|
527
539
|
const scoreDecomposition = cloneScoreDecomposition(result.scoreDecomposition);
|
|
@@ -538,6 +550,7 @@ function cloneResult(result: RecallXrayResult): RecallXrayResult {
|
|
|
538
550
|
}
|
|
539
551
|
if (pathNodeIds !== undefined) out.pathNodeIds = pathNodeIds;
|
|
540
552
|
if (pathPenaltyApplied !== undefined) out.pathPenaltyApplied = pathPenaltyApplied;
|
|
553
|
+
if (stateView !== undefined) out.stateView = stateView;
|
|
541
554
|
if (auditEntryId !== undefined) out.auditEntryId = auditEntryId;
|
|
542
555
|
if (rejectedBy !== undefined) out.rejectedBy = rejectedBy;
|
|
543
556
|
// Disclosure + token telemetry (issue #677 PR 3/4). Only attach when
|
package/src/reconcile/cursor.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { createHash, randomUUID } from "node:crypto";
|
|
2
2
|
import * as fs from "node:fs/promises";
|
|
3
3
|
import * as path from "node:path";
|
|
4
|
-
import {
|
|
5
|
-
type ReconcilePlanEntry,
|
|
6
|
-
type ReconcileSemanticAgreement,
|
|
7
|
-
semanticAgreementKey,
|
|
8
|
-
} from "./plan.js";
|
|
4
|
+
import { type ReconcilePlanEntry, type ReconcileSemanticAgreement, semanticAgreementKey } from "./plan.js";
|
|
9
5
|
|
|
10
6
|
export type ConvergeRefreshTarget = "local" | "receiver";
|
|
11
7
|
|
|
@@ -56,21 +52,26 @@ export function normalizeConvergePeerUrl(peerUrl: string): string {
|
|
|
56
52
|
export function hashPeerNamespace(peerUrl: string, namespace: string): string {
|
|
57
53
|
const normalizedUrl = normalizeConvergePeerUrl(peerUrl);
|
|
58
54
|
const normalizedNs = namespace.trim().toLowerCase();
|
|
59
|
-
return createHash("sha256")
|
|
60
|
-
.update(`${normalizedUrl}\0${normalizedNs}`)
|
|
61
|
-
.digest("hex")
|
|
62
|
-
.slice(0, 16);
|
|
55
|
+
return createHash("sha256").update(`${normalizedUrl}\0${normalizedNs}`).digest("hex").slice(0, 16);
|
|
63
56
|
}
|
|
64
57
|
|
|
65
|
-
export function defaultConvergeCursorPath(
|
|
66
|
-
memoryDir: string,
|
|
67
|
-
peerUrl: string,
|
|
68
|
-
namespace: string,
|
|
69
|
-
): string {
|
|
58
|
+
export function defaultConvergeCursorPath(memoryDir: string, peerUrl: string, namespace: string): string {
|
|
70
59
|
const key = hashPeerNamespace(peerUrl, namespace);
|
|
71
60
|
return path.join(path.resolve(memoryDir), ".remnic", "state", "converge-cursors", `${key}.json`);
|
|
72
61
|
}
|
|
73
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Persistent identity cache location for a (peerUrl, namespace) pair, next
|
|
65
|
+
* to the cursor that governs the same pair. The cache stores the parsed
|
|
66
|
+
* memory identity per path keyed by content sha, so a warm manifest build
|
|
67
|
+
* skips the per-file read + frontmatter parse + content-hash identity work
|
|
68
|
+
* entirely (the dominant boot-scale plan cost on both sides).
|
|
69
|
+
*/
|
|
70
|
+
export function convergeIdentityCachePath(memoryDir: string, peerUrl: string, namespace: string): string {
|
|
71
|
+
const key = hashPeerNamespace(peerUrl, namespace);
|
|
72
|
+
return path.join(path.resolve(memoryDir), ".remnic", "state", "converge-identity", `identity-${key}.json`);
|
|
73
|
+
}
|
|
74
|
+
|
|
74
75
|
function normalizeSemanticFileState(input: unknown): { path: string; sha256: string } | undefined {
|
|
75
76
|
if (!input || typeof input !== "object" || Array.isArray(input)) return undefined;
|
|
76
77
|
const file = input as Record<string, unknown>;
|
|
@@ -94,7 +95,7 @@ function digestAfterReconcile(entry: ReconcilePlanEntry): string | undefined {
|
|
|
94
95
|
export function deriveConvergeCursorBase(
|
|
95
96
|
entries: readonly ReconcilePlanEntry[],
|
|
96
97
|
namespace: string,
|
|
97
|
-
priorSemanticAgreements: readonly ReconcileSemanticAgreement[] = []
|
|
98
|
+
priorSemanticAgreements: readonly ReconcileSemanticAgreement[] = []
|
|
98
99
|
): Pick<ConvergeCursorState, "baseFiles" | "semanticAgreements"> {
|
|
99
100
|
const baseFiles: ConvergeCursorFileState[] = [];
|
|
100
101
|
const semanticAgreementsByPathPair = new Map(
|
|
@@ -111,8 +112,8 @@ export function deriveConvergeCursorBase(
|
|
|
111
112
|
}
|
|
112
113
|
baseFiles.sort((left, right) => left.path.localeCompare(right.path));
|
|
113
114
|
const semanticAgreements = [...semanticAgreementsByPathPair.values()];
|
|
114
|
-
semanticAgreements.sort(
|
|
115
|
-
left.local.path.localeCompare(right.local.path) || left.peer.path.localeCompare(right.peer.path)
|
|
115
|
+
semanticAgreements.sort(
|
|
116
|
+
(left, right) => left.local.path.localeCompare(right.local.path) || left.peer.path.localeCompare(right.peer.path)
|
|
116
117
|
);
|
|
117
118
|
return { baseFiles, semanticAgreements };
|
|
118
119
|
}
|
|
@@ -182,9 +183,7 @@ export function normalizeConvergeCursor(input: unknown): ConvergeCursorState {
|
|
|
182
183
|
};
|
|
183
184
|
}
|
|
184
185
|
|
|
185
|
-
export async function readConvergeCursor(
|
|
186
|
-
cursorPath: string,
|
|
187
|
-
): Promise<ConvergeCursorState | null> {
|
|
186
|
+
export async function readConvergeCursor(cursorPath: string): Promise<ConvergeCursorState | null> {
|
|
188
187
|
try {
|
|
189
188
|
const raw = await fs.readFile(path.resolve(cursorPath), "utf-8");
|
|
190
189
|
const parsed = JSON.parse(raw);
|
|
@@ -195,17 +194,11 @@ export async function readConvergeCursor(
|
|
|
195
194
|
}
|
|
196
195
|
}
|
|
197
196
|
|
|
198
|
-
export async function writeConvergeCursor(
|
|
199
|
-
cursorPath: string,
|
|
200
|
-
cursor: ConvergeCursorState,
|
|
201
|
-
): Promise<void> {
|
|
197
|
+
export async function writeConvergeCursor(cursorPath: string, cursor: ConvergeCursorState): Promise<void> {
|
|
202
198
|
const normalized = normalizeConvergeCursor(cursor);
|
|
203
199
|
const target = path.resolve(cursorPath);
|
|
204
200
|
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
205
|
-
const tmp = path.join(
|
|
206
|
-
path.dirname(target),
|
|
207
|
-
`.converge-cursor.${process.pid}.${randomUUID()}.tmp`,
|
|
208
|
-
);
|
|
201
|
+
const tmp = path.join(path.dirname(target), `.converge-cursor.${process.pid}.${randomUUID()}.tmp`);
|
|
209
202
|
await fs.writeFile(tmp, JSON.stringify(normalized, null, 2) + "\n", "utf-8");
|
|
210
203
|
try {
|
|
211
204
|
await fs.rename(tmp, target);
|
|
@@ -221,7 +214,7 @@ export async function markConvergeRefreshPending(
|
|
|
221
214
|
peerUrl: string;
|
|
222
215
|
namespace: string;
|
|
223
216
|
target: ConvergeRefreshTarget;
|
|
224
|
-
}
|
|
217
|
+
}
|
|
225
218
|
): Promise<void> {
|
|
226
219
|
const current = await readConvergeCursor(cursorPath);
|
|
227
220
|
const pendingRefreshes = new Set(current?.pendingRefreshes ?? []);
|
|
@@ -238,10 +231,7 @@ export async function markConvergeRefreshPending(
|
|
|
238
231
|
});
|
|
239
232
|
}
|
|
240
233
|
|
|
241
|
-
export async function clearConvergeRefreshPending(
|
|
242
|
-
cursorPath: string,
|
|
243
|
-
target: ConvergeRefreshTarget,
|
|
244
|
-
): Promise<void> {
|
|
234
|
+
export async function clearConvergeRefreshPending(cursorPath: string, target: ConvergeRefreshTarget): Promise<void> {
|
|
245
235
|
const current = await readConvergeCursor(cursorPath);
|
|
246
236
|
if (!current?.pendingRefreshes?.includes(target)) return;
|
|
247
237
|
await writeConvergeCursor(cursorPath, {
|