@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
|
@@ -2,7 +2,7 @@ import { createHash, randomUUID } from "node:crypto";
|
|
|
2
2
|
import { lstat, mkdir, open, readFile, rename, unlink, type FileHandle } from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { resolveSafeStoragePath } from "../storage-paths.js";
|
|
5
|
-
import type { MemoryFile } from "../types.js";
|
|
5
|
+
import type { MemoryFile, MemoryFrontmatter } from "../types.js";
|
|
6
6
|
import { isErrnoCode } from "../utils/errno.js";
|
|
7
7
|
import { withHeldFileLock, type HeldFileLockController } from "../utils/serialize-mutations.js";
|
|
8
8
|
import { log } from "../logger.js";
|
|
@@ -63,6 +63,80 @@ export function invalidationCommitFingerprint(memory: Pick<MemoryFile, "content"
|
|
|
63
63
|
.digest("hex");
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
/**
|
|
67
|
+
* #2813 (P1): revision identity stamped onto an Error thrown by a
|
|
68
|
+
* compare-and-swap write AFTER the durable mutation landed (a post-commit
|
|
69
|
+
* step failed). Body equality cannot attribute a standing body — a
|
|
70
|
+
* concurrent writer's identical deterministic merge is byte-for-byte the
|
|
71
|
+
* same — so throw-path ownership must come from this receipt, never from
|
|
72
|
+
* comparing content afterward.
|
|
73
|
+
*/
|
|
74
|
+
export function markCasCommittedRevision(err: unknown, revision: string): void {
|
|
75
|
+
if (err instanceof Error) {
|
|
76
|
+
(err as Error & { casCommittedRevision?: string }).casCommittedRevision = revision;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function casCommittedRevisionOf(err: unknown): string | undefined {
|
|
81
|
+
return err instanceof Error
|
|
82
|
+
? (err as Error & { casCommittedRevision?: string }).casCommittedRevision
|
|
83
|
+
: undefined;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* #2813 (P1, round 3): the CAS receipt mint — the token the next durable
|
|
88
|
+
* content write records in the per-target sidecar (CasRevisionStore). NOT a
|
|
89
|
+
* bare wall-clock read: the stamp is strictly greater than the target's
|
|
90
|
+
* previous token (max(clock, prev + 1ms)), so two commits to the same target
|
|
91
|
+
* can never share a receipt — not within one millisecond, not across a
|
|
92
|
+
* backward clock step. It is a per-target monotonic sequence wearing
|
|
93
|
+
* ISO-8601 clothes; public `frontmatter.updated` never carries it (#2807).
|
|
94
|
+
*/
|
|
95
|
+
export function nextCasRevisionIso(previous: string | undefined, now = new Date()): string {
|
|
96
|
+
const previousMs = previous !== undefined ? new Date(previous).getTime() : Number.NaN;
|
|
97
|
+
if (Number.isFinite(previousMs) && now.getTime() <= previousMs) {
|
|
98
|
+
return new Date(previousMs + 1).toISOString();
|
|
99
|
+
}
|
|
100
|
+
return now.toISOString();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* #2813 P1 (#2807 CI repair): whether a durable frontmatter rewrite changed
|
|
105
|
+
* anything SEMANTIC. Comparison is STRUCTURAL, through the same
|
|
106
|
+
* canonicalizing fingerprint the invalidation proof uses — a `!==` field
|
|
107
|
+
* loop would flag every array-valued field (tags, lineage, sources) because
|
|
108
|
+
* two parses of identical bytes are never reference-equal. Access
|
|
109
|
+
* telemetry (`accessCount`/`lastAccessed` — exactly the fields the
|
|
110
|
+
* fingerprint strips) is not semantic: an access bump must not advance the
|
|
111
|
+
* target's CAS revision token, or it would invalidate every pending
|
|
112
|
+
* conditional write. Every other change — status flips, caller-supplied
|
|
113
|
+
* `updated`, provenance — is a semantic mutation and mints a new token at
|
|
114
|
+
* the write chokepoint, so a receipt issued before it can never
|
|
115
|
+
* "recognise" the record afterwards (#2807 round 5).
|
|
116
|
+
*/
|
|
117
|
+
export function isSemanticFrontmatterChange(
|
|
118
|
+
before: MemoryFrontmatter,
|
|
119
|
+
after: MemoryFrontmatter,
|
|
120
|
+
): boolean {
|
|
121
|
+
return invalidationCommitFingerprint({ content: "", frontmatter: before })
|
|
122
|
+
!== invalidationCommitFingerprint({ content: "", frontmatter: after });
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Runs a compare-and-swap write's post-commit steps. The durable mutation
|
|
127
|
+
* has already landed by the time `run` executes, so any throw it raises is
|
|
128
|
+
* stamped with the commit receipt — callers must attribute the standing
|
|
129
|
+
* body by that identity, never by body equality (#2813 P1).
|
|
130
|
+
*/
|
|
131
|
+
export async function withCasCommitReceipt<T>(revision: string, run: () => Promise<T>): Promise<T> {
|
|
132
|
+
try {
|
|
133
|
+
return await run();
|
|
134
|
+
} catch (err) {
|
|
135
|
+
markCasCommittedRevision(err, revision);
|
|
136
|
+
throw err;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
66
140
|
function isValidInvalidationCommitTimestamp(value: unknown): value is number {
|
|
67
141
|
return (
|
|
68
142
|
typeof value === "number" &&
|
|
@@ -80,7 +154,7 @@ function isValidMemoryId(value: unknown): value is string {
|
|
|
80
154
|
return typeof value === "string" && value.length > 0 && !value.includes("\0");
|
|
81
155
|
}
|
|
82
156
|
|
|
83
|
-
function
|
|
157
|
+
export function isValidManagedStoragePath(value: unknown): value is string {
|
|
84
158
|
return (
|
|
85
159
|
typeof value === "string" &&
|
|
86
160
|
value.length > 0 &&
|
|
@@ -167,7 +241,7 @@ export class DeletionRevisionStore {
|
|
|
167
241
|
const entry = rawEntry as Record<string, unknown>;
|
|
168
242
|
if (
|
|
169
243
|
Object.keys(entry).sort().join(",") !== "mtimeMs,path" ||
|
|
170
|
-
!
|
|
244
|
+
!isValidManagedStoragePath(entry.path) ||
|
|
171
245
|
typeof entry.mtimeMs !== "number" ||
|
|
172
246
|
!Number.isFinite(entry.mtimeMs) ||
|
|
173
247
|
entry.mtimeMs < 0 ||
|
|
@@ -428,7 +502,7 @@ export class DeletionRevisionStore {
|
|
|
428
502
|
) {
|
|
429
503
|
throw new Error("Deletion revision timestamp is invalid.");
|
|
430
504
|
}
|
|
431
|
-
if (!
|
|
505
|
+
if (!isValidManagedStoragePath(relativePath)) {
|
|
432
506
|
throw new Error("Deletion revision path is invalid.");
|
|
433
507
|
}
|
|
434
508
|
await this.withDeletionRevisionLock(async (lock) => {
|
|
@@ -452,7 +526,7 @@ export class DeletionRevisionStore {
|
|
|
452
526
|
|
|
453
527
|
async writeManagedStorageFile(filePath: string, write: () => Promise<void>): Promise<void> {
|
|
454
528
|
const { relativePath } = await this.resolveManagedStoragePath(filePath, "storage.writeManagedStorageFile");
|
|
455
|
-
if (!
|
|
529
|
+
if (!isValidManagedStoragePath(relativePath)) {
|
|
456
530
|
throw new Error("Deletion revision path is invalid.");
|
|
457
531
|
}
|
|
458
532
|
await this.withDeletionRevisionLock(async (lock) => {
|
|
@@ -492,7 +566,7 @@ export class DeletionRevisionStore {
|
|
|
492
566
|
if (isErrnoCode(error, "ENOENT")) return false;
|
|
493
567
|
throw error;
|
|
494
568
|
}
|
|
495
|
-
if (!
|
|
569
|
+
if (!isValidManagedStoragePath(relativePath)) {
|
|
496
570
|
throw new Error("Deletion revision path is invalid.");
|
|
497
571
|
}
|
|
498
572
|
const revision = deletionMtimeMs === null ? undefined : (deletionMtimeMs ?? Date.now());
|
|
@@ -533,6 +533,21 @@ export class TombstoneBlockedCaptureIndex {
|
|
|
533
533
|
await this.failOpen("invalidateMemory", () => this.rebuildIfLoaded(ownedMarker));
|
|
534
534
|
}
|
|
535
535
|
|
|
536
|
+
/**
|
|
537
|
+
* Drop an already-committed write marker without re-reading the corpus. The
|
|
538
|
+
* offline-sync mutation path commits its marker around the file write, then
|
|
539
|
+
* must clear it even when the write cannot have changed the blocked key set
|
|
540
|
+
* (neither side tombstone-blocked) — otherwise the marker lingers until some
|
|
541
|
+
* later rebuild clears it. Mirrors the tail of `add`/`sync`.
|
|
542
|
+
*/
|
|
543
|
+
async clearCommittedWriteMarker(rebuildMarker: string): Promise<void> {
|
|
544
|
+
await this.clearRebuildRequired([rebuildMarker]);
|
|
545
|
+
// getIndex() may have rebuilt while this marker was still pending and
|
|
546
|
+
// left authoritative=false. After the marker is gone, restore authority
|
|
547
|
+
// if no other uncommitted marker remains.
|
|
548
|
+
await this.setAuthoritative(true);
|
|
549
|
+
}
|
|
550
|
+
|
|
536
551
|
async syncUpdatedMemory(
|
|
537
552
|
before: MemoryFile,
|
|
538
553
|
frontmatter: MemoryFrontmatter,
|
|
@@ -4,6 +4,7 @@ import { mkdir } from "node:fs/promises";
|
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { withHeldFileLock } from "../utils/serialize-mutations.js";
|
|
6
6
|
import type { MemoryFile, MemoryFrontmatter } from "../types.js";
|
|
7
|
+
import type { CasRevisionTransaction } from "./cas-revision-store.js";
|
|
7
8
|
const TOMBSTONE_CAPTURE_WRITE_LOCK_STALE_MS = 60_000;
|
|
8
9
|
const CAPTURE_WRITE_LOCK_MAX_ATTEMPTS = 3;
|
|
9
10
|
const CAPTURE_WRITE_LOCK_RETRY_BASE_MS = 25;
|
|
@@ -196,6 +197,7 @@ export type TombstoneBlockedMutationHost = {
|
|
|
196
197
|
writeStorageSecureFile: (pathname: string, fileContent: string) => Promise<void>;
|
|
197
198
|
withCaptureWriteLock: (task: () => Promise<void>, identity: string | readonly string[]) => Promise<void>;
|
|
198
199
|
logWarning: (message: string) => void;
|
|
200
|
+
beginDurableMemoryRevision?: (pathname: string, expectedContent?: string | Buffer | null) => Promise<CasRevisionTransaction | undefined>;
|
|
199
201
|
};
|
|
200
202
|
|
|
201
203
|
export type TombstoneBlockedMutation = {
|
|
@@ -206,15 +208,17 @@ export type TombstoneBlockedMutation = {
|
|
|
206
208
|
updateIndex: (rebuildMarker?: string, current?: MemoryFile | null) => Promise<void>;
|
|
207
209
|
beforeIndexUpdate?: () => Promise<void>;
|
|
208
210
|
coordinate?: boolean;
|
|
211
|
+
shouldMintRevision?: (current: MemoryFile | null) => boolean;
|
|
209
212
|
};
|
|
210
213
|
|
|
211
214
|
export async function runTombstoneBlockedMutation(
|
|
212
215
|
host: TombstoneBlockedMutationHost,
|
|
213
216
|
mutation: TombstoneBlockedMutation
|
|
214
|
-
): Promise<
|
|
217
|
+
): Promise<string | undefined> {
|
|
215
218
|
let lockIdentity: string | readonly string[] = mutation.identity;
|
|
216
219
|
for (;;) {
|
|
217
220
|
let retryIdentity: string | undefined;
|
|
221
|
+
let mintedRevision: string | undefined;
|
|
218
222
|
const mutate = async (): Promise<void> => {
|
|
219
223
|
const current = await host.readCurrent();
|
|
220
224
|
const currentBlocked = host.isBlocked(current);
|
|
@@ -228,19 +232,73 @@ export async function runTombstoneBlockedMutation(
|
|
|
228
232
|
}
|
|
229
233
|
}
|
|
230
234
|
const rebuildMarker = mutation.blocked || currentBlocked ? await host.prepareWrite() : undefined;
|
|
235
|
+
const discardRebuildMarker = async (): Promise<void> => {
|
|
236
|
+
if (!rebuildMarker) return;
|
|
237
|
+
try {
|
|
238
|
+
await host.discardWrite(rebuildMarker);
|
|
239
|
+
} catch (cleanupError) {
|
|
240
|
+
host.markUntrusted();
|
|
241
|
+
host.logWarning(`storage.tombstoneBlocked failed to clear write marker: ${cleanupError}`);
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
let transaction: CasRevisionTransaction | undefined;
|
|
231
245
|
try {
|
|
246
|
+
// #2813 (P1 C): a two-phase receipt transaction under this same
|
|
247
|
+
// path lock. The PENDING reservation is minted BEFORE the durable
|
|
248
|
+
// file publish, so a failed reservation leaves the memory file
|
|
249
|
+
// untouched — never a mutated record without a receipt. The
|
|
250
|
+
// COMMITTED receipt publishes only AFTER the write lands, so a
|
|
251
|
+
// failed write can never leave the reservation posing as
|
|
252
|
+
// ownership.
|
|
253
|
+
transaction = mutation.shouldMintRevision?.(current)
|
|
254
|
+
? await host.beginDurableMemoryRevision?.(mutation.pathname, mutation.fileContent)
|
|
255
|
+
: undefined;
|
|
232
256
|
await host.writeStorageSecureFile(mutation.pathname, mutation.fileContent);
|
|
233
257
|
} catch (err) {
|
|
234
|
-
|
|
258
|
+
// The memory write failed (or never ran): abort the reservation so
|
|
259
|
+
// no pending marker survives a write that did not land. A failed
|
|
260
|
+
// abort keeps the marker — ambiguity, recovered later.
|
|
261
|
+
if (transaction) {
|
|
235
262
|
try {
|
|
236
|
-
await
|
|
237
|
-
} catch (
|
|
238
|
-
host.
|
|
239
|
-
|
|
263
|
+
await transaction.abort();
|
|
264
|
+
} catch (abortError) {
|
|
265
|
+
host.logWarning(
|
|
266
|
+
`storage.tombstoneBlocked failed to abort the reserved receipt (pending marker preserved): ${abortError}`,
|
|
267
|
+
);
|
|
240
268
|
}
|
|
241
269
|
}
|
|
270
|
+
await discardRebuildMarker();
|
|
242
271
|
throw err;
|
|
243
272
|
}
|
|
273
|
+
if (transaction) {
|
|
274
|
+
// #2807: record the post-write fingerprint in the PENDING marker
|
|
275
|
+
// BEFORE publishing, so a crash between the durable write and the
|
|
276
|
+
// COMMITTED receipt is decisively recoverable. The evidence only
|
|
277
|
+
// guards that crash window — a recording failure must not fail the
|
|
278
|
+
// landed write, so commit still runs and publishes truthfully.
|
|
279
|
+
try {
|
|
280
|
+
await transaction.writeLanded();
|
|
281
|
+
} catch (evidenceError) {
|
|
282
|
+
host.logWarning(
|
|
283
|
+
`storage.tombstoneBlocked failed to record receipt crash evidence (pending marker preserved): ${evidenceError}`,
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
try {
|
|
287
|
+
await transaction.commit();
|
|
288
|
+
} catch (err) {
|
|
289
|
+
// #2813 (P1 C): the memory file LANDED but the COMMITTED receipt
|
|
290
|
+
// never published. The PENDING marker stays: readers must see
|
|
291
|
+
// unavailable/recovery-needed — never ownership, never absence —
|
|
292
|
+
// and promotion/rollback refuse until recovery reconciles. The
|
|
293
|
+
// reservation must NOT be aborted: the write is on disk.
|
|
294
|
+
host.logWarning(
|
|
295
|
+
`storage.tombstoneBlocked receipt publication failed after the memory write (pending marker preserved for recovery): ${err}`,
|
|
296
|
+
);
|
|
297
|
+
await discardRebuildMarker();
|
|
298
|
+
throw err;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
mintedRevision = transaction?.pendingRevision;
|
|
244
302
|
if (rebuildMarker) {
|
|
245
303
|
try {
|
|
246
304
|
await host.commitWrite(rebuildMarker);
|
|
@@ -252,13 +310,15 @@ export async function runTombstoneBlockedMutation(
|
|
|
252
310
|
if (rebuildMarker) await mutation.beforeIndexUpdate?.();
|
|
253
311
|
await mutation.updateIndex(rebuildMarker, currentBlocked && current !== null ? current : undefined);
|
|
254
312
|
};
|
|
313
|
+
|
|
255
314
|
await host.withCaptureWriteLock(mutate, lockIdentity);
|
|
256
|
-
if (retryIdentity === undefined) return;
|
|
315
|
+
if (retryIdentity === undefined) return mintedRevision;
|
|
257
316
|
const identities = Array.isArray(lockIdentity) ? [...lockIdentity, retryIdentity] : [lockIdentity, retryIdentity];
|
|
258
317
|
lockIdentity = [...new Set(identities)];
|
|
259
318
|
}
|
|
260
319
|
}
|
|
261
320
|
|
|
321
|
+
|
|
262
322
|
export function tombstoneBlocked(frontmatter: MemoryFrontmatter): boolean {
|
|
263
323
|
return frontmatter.status === "pending_review" && Boolean(frontmatter.blockedBy);
|
|
264
324
|
}
|
|
@@ -5,13 +5,12 @@ import { isDeepStrictEqual } from "node:util";
|
|
|
5
5
|
import { log } from "../logger.js";
|
|
6
6
|
import type { MemoryFile, MemoryFrontmatter } from "../types.js";
|
|
7
7
|
import { markProjectedMemoryPathInvalid } from "../memory-projection-store.js";
|
|
8
|
-
import { RECALL_FALLBACK_DIRS } from "../utils/category-dir.js";
|
|
9
|
-
import { isErrnoCode } from "../utils/errno.js";
|
|
10
8
|
import { pathMayCarryEntityRefs, requestEntityCanonicalIdReconcile } from "./entity-canonical-id-references.js";
|
|
11
9
|
import { withRawEntityPageMutation } from "./entity-canonical-id-lock.js";
|
|
12
10
|
import { readMaybeEncryptedFileFromChunks, writeMaybeEncryptedFileFromChunks } from "../secure-store/secure-fs.js";
|
|
13
11
|
import * as archiveMutation from "../archive-mutation-version.js";
|
|
14
|
-
import { invalidationCommitFingerprint } from "./deletion-revision-store.js";
|
|
12
|
+
import { invalidationCommitFingerprint, isSemanticFrontmatterChange } from "./deletion-revision-store.js";
|
|
13
|
+
import type { CasRevisionTransaction } from "./cas-revision-store.js";
|
|
15
14
|
import {
|
|
16
15
|
buildExplicitCaptureDedupKey,
|
|
17
16
|
buildCapturePathLockIdentity,
|
|
@@ -212,6 +211,16 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
212
211
|
protected abstract deleteManagedStorageFile(filePath: string, deletionMtimeMs?: number | null): Promise<boolean>;
|
|
213
212
|
protected abstract writeManagedStorageFile(filePath: string, write: () => Promise<void>): Promise<void>;
|
|
214
213
|
|
|
214
|
+
/** #2813 (P1 C, #2807): reserve the target's next durable CAS revision
|
|
215
|
+
* token as a two-phase receipt transaction — a PENDING write-ahead
|
|
216
|
+
* marker under the mutation's path lock, published COMMITTED only after
|
|
217
|
+
* the durable file write lands. Receipt identity lives in the per-target
|
|
218
|
+
* sidecar, never in public `frontmatter.updated`. The default host keeps
|
|
219
|
+
* no receipt identity; StorageManager records it. */
|
|
220
|
+
protected async beginDurableMemoryRevision(_pathname: string, _expectedContent?: string | Buffer | null): Promise<CasRevisionTransaction | undefined> {
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
|
|
215
224
|
private async writeStorageSecureFileChunks(filePath: string, chunks: AsyncIterable<Buffer>): Promise<void> {
|
|
216
225
|
const options = this.tombstoneBlockedCaptureIndexOptions();
|
|
217
226
|
await writeMaybeEncryptedFileFromChunks(
|
|
@@ -244,7 +253,7 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
244
253
|
|
|
245
254
|
async withMemorySnapshotsIfUnchanged<T>(
|
|
246
255
|
expected: readonly MemoryFile[],
|
|
247
|
-
task: (memories: MemoryFile[]) => Promise<T
|
|
256
|
+
task: (memories: MemoryFile[]) => Promise<T>
|
|
248
257
|
): Promise<T | null> {
|
|
249
258
|
if (expected.length === 0) return await task([]);
|
|
250
259
|
const pathnames = [...new Set(expected.map((memory) => memory.path))];
|
|
@@ -282,8 +291,9 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
282
291
|
identity: string | readonly string[],
|
|
283
292
|
updateIndex: (rebuildMarker?: string, current?: MemoryFile | null) => Promise<void>,
|
|
284
293
|
beforeIndexUpdate?: () => Promise<void>,
|
|
285
|
-
coordinate = false
|
|
286
|
-
|
|
294
|
+
coordinate = false,
|
|
295
|
+
shouldMintRevision?: (current: MemoryFile | null) => boolean
|
|
296
|
+
): Promise<string | undefined> {
|
|
287
297
|
const host: TombstoneBlockedMutationHost = {
|
|
288
298
|
readCurrent: () => this.readMemoryByPath(pathname),
|
|
289
299
|
isBlocked: (memory) => this.isTombstoneBlockedMemory(memory),
|
|
@@ -296,8 +306,10 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
296
306
|
writeStorageSecureFile: (target, content) => this.writeStorageSecureFile(target, content),
|
|
297
307
|
withCaptureWriteLock: (task, lockIdentity) => this.withTombstoneBlockedCaptureWriteLock(task, lockIdentity),
|
|
298
308
|
logWarning: (message) => log.warn(message),
|
|
309
|
+
beginDurableMemoryRevision: (targetPath, expectedContent) =>
|
|
310
|
+
this.beginDurableMemoryRevision(targetPath, expectedContent),
|
|
299
311
|
};
|
|
300
|
-
await runTombstoneBlockedMutation(host, {
|
|
312
|
+
return await runTombstoneBlockedMutation(host, {
|
|
301
313
|
blocked,
|
|
302
314
|
pathname,
|
|
303
315
|
fileContent,
|
|
@@ -305,6 +317,7 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
305
317
|
updateIndex,
|
|
306
318
|
beforeIndexUpdate,
|
|
307
319
|
coordinate,
|
|
320
|
+
shouldMintRevision,
|
|
308
321
|
});
|
|
309
322
|
}
|
|
310
323
|
|
|
@@ -400,8 +413,8 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
400
413
|
frontmatter: MemoryFrontmatter,
|
|
401
414
|
content: string,
|
|
402
415
|
beforeIndexUpdate?: () => Promise<void>
|
|
403
|
-
): Promise<
|
|
404
|
-
await this.writeTombstoneBlockedMutation(
|
|
416
|
+
): Promise<string | undefined> {
|
|
417
|
+
return await this.writeTombstoneBlockedMutation(
|
|
405
418
|
tombstoneBlocked(before.frontmatter) || tombstoneBlocked(frontmatter),
|
|
406
419
|
before.path,
|
|
407
420
|
fileContent,
|
|
@@ -418,7 +431,8 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
418
431
|
rebuildMarker
|
|
419
432
|
),
|
|
420
433
|
beforeIndexUpdate,
|
|
421
|
-
true
|
|
434
|
+
true,
|
|
435
|
+
() => true
|
|
422
436
|
);
|
|
423
437
|
}
|
|
424
438
|
|
|
@@ -427,8 +441,8 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
427
441
|
fileContent: string,
|
|
428
442
|
frontmatter: MemoryFrontmatter,
|
|
429
443
|
beforeIndexUpdate?: () => Promise<void>
|
|
430
|
-
): Promise<
|
|
431
|
-
await this.writeTombstoneBlockedMutation(
|
|
444
|
+
): Promise<string | undefined> {
|
|
445
|
+
return await this.writeTombstoneBlockedMutation(
|
|
432
446
|
tombstoneBlocked(before.frontmatter) || tombstoneBlocked(frontmatter),
|
|
433
447
|
before.path,
|
|
434
448
|
fileContent,
|
|
@@ -440,10 +454,12 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
440
454
|
(rebuildMarker, current) =>
|
|
441
455
|
this.getTombstoneBlockedCaptureIndex().syncUpdatedFrontmatter(current ?? before, frontmatter, rebuildMarker),
|
|
442
456
|
beforeIndexUpdate,
|
|
443
|
-
true
|
|
457
|
+
true,
|
|
458
|
+
(current) => isSemanticFrontmatterChange((current ?? before).frontmatter, frontmatter)
|
|
444
459
|
);
|
|
445
460
|
}
|
|
446
461
|
|
|
462
|
+
|
|
447
463
|
private isTombstoneBlockedMemory(memory: MemoryFile | null): memory is MemoryFile {
|
|
448
464
|
return memory !== null && memory.frontmatter.status === "pending_review" && Boolean(memory.frontmatter.blockedBy);
|
|
449
465
|
}
|
|
@@ -490,7 +506,8 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
490
506
|
private async invalidateAfterOfflineSyncMutation(
|
|
491
507
|
filePath: string,
|
|
492
508
|
ownedMarker?: string,
|
|
493
|
-
archiveChanged = true
|
|
509
|
+
archiveChanged = true,
|
|
510
|
+
blockedKeySetMayHaveChanged = true
|
|
494
511
|
): Promise<void> {
|
|
495
512
|
this.invalidateAllMemoriesCache();
|
|
496
513
|
this.invalidateKnowledgeIndexCache();
|
|
@@ -498,7 +515,22 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
498
515
|
if (filePath.includes(`${path.sep}cold${path.sep}`)) {
|
|
499
516
|
this.invalidateColdMemoriesCache();
|
|
500
517
|
}
|
|
501
|
-
|
|
518
|
+
if (blockedKeySetMayHaveChanged) {
|
|
519
|
+
await this.rebuildTombstoneBlockedCaptureAfterInvalidationForPath(filePath, ownedMarker);
|
|
520
|
+
} else if (ownedMarker !== undefined) {
|
|
521
|
+
// The index only holds tombstone-blocked explicit-capture keys, so a
|
|
522
|
+
// write where neither side is blocked cannot have changed it. Rebuilding
|
|
523
|
+
// here re-reads the whole corpus per replicated file — measured 15-31s
|
|
524
|
+
// per write against a ~190k-file corpus, which turns a boot-scale
|
|
525
|
+
// `converge apply` into a multi-week run. Clear the committed marker and
|
|
526
|
+
// keep the index as-is.
|
|
527
|
+
try {
|
|
528
|
+
await this.getTombstoneBlockedCaptureIndex().clearCommittedWriteMarker(ownedMarker);
|
|
529
|
+
} catch (err) {
|
|
530
|
+
this.getTombstoneBlockedCaptureIndex().markUntrusted();
|
|
531
|
+
log.warn(`storage.offlineSyncFile committed write succeeded; marker cleanup failed: ${err}`);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
502
534
|
if (filePath.includes(`${path.sep}artifacts${path.sep}`)) {
|
|
503
535
|
this.bumpArtifactWriteVersion();
|
|
504
536
|
}
|
|
@@ -675,7 +707,12 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
675
707
|
log.warn(`storage.offlineSyncFile committed write marker failed: ${err}`);
|
|
676
708
|
}
|
|
677
709
|
}
|
|
678
|
-
await this.invalidateAfterOfflineSyncMutation(
|
|
710
|
+
await this.invalidateAfterOfflineSyncMutation(
|
|
711
|
+
target,
|
|
712
|
+
marker,
|
|
713
|
+
changed !== false,
|
|
714
|
+
this.isTombstoneBlockedMemory(current) || this.isTombstoneBlockedMemory(after)
|
|
715
|
+
);
|
|
679
716
|
} catch (err) {
|
|
680
717
|
if (marker && !durable) {
|
|
681
718
|
try {
|
|
@@ -704,10 +741,8 @@ export abstract class TombstoneBlockedCaptureIndexHost {
|
|
|
704
741
|
const options = this.tombstoneBlockedCaptureIndexOptions();
|
|
705
742
|
const after = options.parseMemory?.(target, content) ?? null;
|
|
706
743
|
await withRawEntityPageMutation(path.dirname(options.stateDir), target, async () => {
|
|
707
|
-
await this.runTombstoneBlockedOfflineSyncMutation(
|
|
708
|
-
target,
|
|
709
|
-
after,
|
|
710
|
-
() => this.writeManagedStorageFile(target, () => this.writeStorageSecureFile(target, content))
|
|
744
|
+
await this.runTombstoneBlockedOfflineSyncMutation(target, after, () =>
|
|
745
|
+
this.writeManagedStorageFile(target, () => this.writeStorageSecureFile(target, content))
|
|
711
746
|
);
|
|
712
747
|
});
|
|
713
748
|
}
|
|
@@ -147,7 +147,7 @@ test("failure-semantics: selected memory snapshot tasks hold every member lock",
|
|
|
147
147
|
|
|
148
148
|
releaseTask.resolve();
|
|
149
149
|
assert.deepEqual(await snapshotTask, [first.id, second.id]);
|
|
150
|
-
assert.
|
|
150
|
+
assert.ok(await writePromise);
|
|
151
151
|
} finally {
|
|
152
152
|
releaseTask.resolve();
|
|
153
153
|
await cleanup();
|