@remnic/core 9.69.33 → 9.69.35
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 +14 -11
- package/dist/access-admin-ops-surface.js +65 -60
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +14 -11
- package/dist/access-authorization-probe.js +66 -61
- package/dist/access-boundary.d.ts +14 -11
- package/dist/access-boundary.js +65 -60
- package/dist/access-cli.js +137 -133
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +3 -1
- package/dist/access-coding-context-resolution.js +3 -3
- package/dist/access-extraction-force-flush.d.ts +14 -11
- package/dist/access-extraction-force-flush.js +65 -60
- package/dist/access-health-types.d.ts +3 -1
- package/dist/access-http-briefing.d.ts +14 -11
- package/dist/access-http-briefing.js +66 -61
- package/dist/access-http-lcm-compaction.d.ts +14 -11
- package/dist/access-http-lifecycle-flush.d.ts +14 -11
- package/dist/access-http-offline-stream.d.ts +14 -11
- package/dist/access-http-query.d.ts +4 -2
- package/dist/access-http-query.js +67 -62
- package/dist/access-http.d.ts +15 -12
- package/dist/access-http.js +86 -82
- package/dist/access-identity-continuity-surface.d.ts +12 -9
- package/dist/access-identity-continuity-surface.js +65 -60
- package/dist/access-lcm-surface.d.ts +14 -11
- package/dist/access-lcm-surface.js +65 -60
- package/dist/access-mcp.d.ts +14 -11
- package/dist/access-mcp.js +74 -70
- package/dist/access-memory-search-fanout.d.ts +4 -2
- package/dist/{access-namespace-preflight-DMR-jOMS.d.ts → access-namespace-preflight-D8qri11P.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +5 -3
- package/dist/access-namespace-preflight.js +65 -60
- package/dist/access-observe-transcript.d.ts +12 -9
- package/dist/access-observe-transcript.js +3 -3
- package/dist/access-observe-write-surface.d.ts +16 -13
- package/dist/access-observe-write-surface.js +65 -60
- package/dist/access-offline-manifest.d.ts +48 -11
- package/dist/access-offline-manifest.js +18 -16
- package/dist/access-operations-batch.js +68 -64
- package/dist/access-operations.d.ts +15 -12
- package/dist/access-operations.js +73 -69
- package/dist/access-recall-concurrency.d.ts +14 -11
- package/dist/access-recall-concurrency.js +65 -60
- package/dist/access-recall-response.d.ts +14 -11
- package/dist/access-recall-response.js +65 -60
- package/dist/access-recall-surface.d.ts +14 -11
- package/dist/access-recall-surface.js +65 -60
- package/dist/access-schema.d.ts +56 -13
- package/dist/access-schema.js +15 -1
- package/dist/{access-service-CJQoQvRa.d.ts → access-service-CKu5ixg9.d.ts} +52 -50
- package/dist/access-service-helpers.d.ts +14 -11
- package/dist/access-service.d.ts +14 -11
- package/dist/access-service.js +65 -60
- package/dist/access-surface-catalog.d.ts +14 -11
- package/dist/access-surface-catalog.js +67 -62
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +5 -3
- package/dist/action-confidence.d.ts +3 -1
- package/dist/active-memory-bridge.d.ts +3 -1
- package/dist/active-memory-bridge.js +2 -2
- package/dist/active-recall.d.ts +3 -1
- package/dist/active-recall.js +12 -10
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +3 -1
- package/dist/adapters/index.d.ts +46 -1
- package/dist/adapters/index.js +10 -6
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +3 -1
- package/dist/artifact-search.d.ts +3 -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 +3 -1
- package/dist/behavior-signals.d.ts +3 -1
- package/dist/bootstrap.d.ts +12 -9
- package/dist/briefing-window.d.ts +4 -2
- package/dist/briefing.d.ts +4 -2
- package/dist/briefing.js +26 -25
- package/dist/buffer-surprise-report.d.ts +3 -1
- package/dist/buffer-turn-helpers.d.ts +3 -1
- package/dist/buffer.d.ts +4 -2
- package/dist/buffer.js +11 -10
- package/dist/bulk-import/index.d.ts +5 -3
- package/dist/calibration.d.ts +3 -1
- package/dist/calibration.js +3 -2
- package/dist/calibration.js.map +1 -1
- package/dist/capabilities.d.ts +3 -1
- package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-ZCXUPLNJ.js} +2 -2
- package/dist/{catalog-8O9KY9eA.d.ts → catalog-Bq1AxZwF.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +3 -1
- package/dist/causal-consolidation.d.ts +3 -1
- package/dist/causal-consolidation.js +27 -26
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +3 -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-2C3S7J2S.js → chunk-2BQ4ZIWC.js} +741 -28
- package/dist/chunk-2BQ4ZIWC.js.map +1 -0
- package/dist/{chunk-RKBLRTNT.js → chunk-2YLMUME2.js} +2 -2
- package/dist/{chunk-QOIOACIE.js → chunk-326KUXIR.js} +15 -648
- package/dist/chunk-326KUXIR.js.map +1 -0
- package/dist/{chunk-DBQWVT2H.js → chunk-3CBI2ZSA.js} +2 -2
- package/dist/{chunk-MWFGUESQ.js → chunk-3FJKJ5UZ.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-SO7SV523.js → chunk-4MDKNUV4.js} +1 -1
- package/dist/chunk-4MDKNUV4.js.map +1 -0
- package/dist/chunk-5HYUUFMQ.js +1280 -0
- package/dist/chunk-5HYUUFMQ.js.map +1 -0
- package/dist/{chunk-2JVJ7UHC.js → chunk-5JG5EBVL.js} +4 -2
- package/dist/chunk-5JG5EBVL.js.map +1 -0
- package/dist/{chunk-HV7OY4DM.js → chunk-5VAF4ID4.js} +643 -202
- package/dist/chunk-5VAF4ID4.js.map +1 -0
- package/dist/{chunk-N7RWREIQ.js → chunk-65RENJGB.js} +6 -1
- package/dist/chunk-65RENJGB.js.map +1 -0
- package/dist/{chunk-JTH2SE6B.js → chunk-6J6K3STG.js} +8 -8
- package/dist/{chunk-H4VH5VIB.js → chunk-776GVKL7.js} +2 -2
- package/dist/{chunk-BUTCAMJM.js → chunk-A2YQL2FF.js} +5 -5
- 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-CGC5UQCF.js → chunk-AKE4GGQ3.js} +2 -2
- package/dist/{chunk-B325AGLK.js → chunk-AZSKROVQ.js} +2 -2
- package/dist/{chunk-I5DZ3WGR.js → chunk-BJETIR53.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-3JVLGJCY.js → chunk-C6KRO3SU.js} +2 -2
- package/dist/{chunk-5NANRSCD.js → chunk-CNV2A557.js} +5 -5
- package/dist/{chunk-PBGVVDLY.js → chunk-DK4X5B6I.js} +2 -2
- package/dist/{chunk-MFDTVQJX.js → chunk-DVOBLPSQ.js} +22 -7
- package/dist/chunk-DVOBLPSQ.js.map +1 -0
- package/dist/{chunk-N2ZNPHA3.js → chunk-ECKG5WSI.js} +2 -2
- package/dist/{chunk-PYLL63BF.js → chunk-EEBQFG5E.js} +9 -9
- package/dist/{chunk-ET356KSB.js → chunk-F4TWWUMP.js} +2 -2
- package/dist/{chunk-RHQMKJFG.js → chunk-F6IVBYFS.js} +55 -51
- package/dist/{chunk-RHQMKJFG.js.map → chunk-F6IVBYFS.js.map} +1 -1
- package/dist/{chunk-CLLPJ6QT.js → chunk-FQXJAC3T.js} +2 -2
- package/dist/{chunk-JGHXXQ2G.js → chunk-FVJ4D6L7.js} +2 -2
- package/dist/{chunk-DD5JFCWM.js → chunk-GCBIXUPT.js} +2 -2
- package/dist/{chunk-MN3LK3KN.js → chunk-GLZH5VEN.js} +2 -2
- package/dist/{chunk-S7T2TY65.js → chunk-HC4GFLMQ.js} +3 -3
- package/dist/{chunk-EQHDH4C2.js → chunk-HUT2JR6I.js} +3 -3
- package/dist/{chunk-UUQG7HAD.js → chunk-HXSAWV3A.js} +4 -4
- package/dist/{chunk-XXIHX75O.js → chunk-J7PB5UQ4.js} +3 -3
- package/dist/{chunk-UGPUYIET.js → chunk-JHZCXUQI.js} +221 -400
- package/dist/chunk-JHZCXUQI.js.map +1 -0
- package/dist/{chunk-LTIZHLV7.js → chunk-JR6H5CYS.js} +2 -2
- package/dist/{chunk-FCSZ4K2X.js → chunk-JR6PP7UM.js} +3 -3
- package/dist/{chunk-TCUKRAMK.js → chunk-JRWW7GM6.js} +10 -10
- package/dist/{chunk-Q726HSJO.js → chunk-JSRVXI6E.js} +16 -15
- package/dist/chunk-JSRVXI6E.js.map +1 -0
- package/dist/{chunk-DB5TGMLZ.js → chunk-JZ2CHRLB.js} +6 -4
- package/dist/{chunk-DB5TGMLZ.js.map → chunk-JZ2CHRLB.js.map} +1 -1
- package/dist/{chunk-JEIXTYVG.js → chunk-L2QLDZJC.js} +46 -17
- package/dist/chunk-L2QLDZJC.js.map +1 -0
- package/dist/{chunk-PL7FYKHT.js → chunk-L2WQVSKP.js} +2 -2
- package/dist/{chunk-JSN44KIB.js → chunk-LEMD7WZJ.js} +9 -9
- package/dist/{chunk-VZWXFXLX.js → chunk-LMCD5W5B.js} +2 -2
- package/dist/{chunk-7BMXZCOT.js → chunk-LNDLXMH6.js} +3 -3
- package/dist/{chunk-3QQTXYZ6.js → chunk-LSLCFCCQ.js} +2 -1
- package/dist/chunk-LSLCFCCQ.js.map +1 -0
- package/dist/{chunk-EONF76DT.js → chunk-LYDJRF45.js} +2 -2
- package/dist/{chunk-MKD3OMPS.js → chunk-M3MYMWXG.js} +2 -2
- package/dist/{chunk-VGXM5B4H.js → chunk-MNIPH6LD.js} +2 -2
- package/dist/{chunk-A7XEPMQ6.js → chunk-MVAQ2WM3.js} +6 -6
- package/dist/chunk-MVAQ2WM3.js.map +1 -0
- package/dist/{chunk-6N3TQFZU.js → chunk-NN4JEFON.js} +3 -3
- package/dist/chunk-NPNSKE76.js +220 -0
- package/dist/chunk-NPNSKE76.js.map +1 -0
- package/dist/{chunk-MOZXTRC2.js → chunk-OQ7SSRXP.js} +19 -19
- package/dist/{chunk-XU6OEECT.js → chunk-OQQXGYMX.js} +3 -3
- package/dist/{chunk-4MHYKEOM.js → chunk-OS2AT2JU.js} +10 -10
- package/dist/{chunk-N57A4KPV.js → chunk-P3ONDDIJ.js} +2 -2
- package/dist/chunk-PCEYGOSL.js +66 -0
- package/dist/chunk-PCEYGOSL.js.map +1 -0
- package/dist/{chunk-R3HKWWUB.js → chunk-PHP3MUGF.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-P3SB5BNT.js → chunk-QATYVTP7.js} +2 -2
- package/dist/{chunk-LSYDG6MJ.js → chunk-QBLDCI6E.js} +2 -2
- package/dist/{chunk-KCB7F4J7.js → chunk-QURNMKME.js} +2 -2
- package/dist/{chunk-XOVKXJEP.js → chunk-R3TLVTWW.js} +3 -3
- package/dist/{chunk-XXE5P6HJ.js → chunk-RRZKTSFG.js} +2 -2
- package/dist/{chunk-44T3Y7SZ.js → chunk-RUXPVSML.js} +5 -5
- package/dist/{chunk-DCJ3YFIC.js → chunk-S2ULTQZR.js} +2 -2
- 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-E2ZHGBAK.js → chunk-T2JSUEH6.js} +2 -2
- package/dist/{chunk-227UFSEQ.js → chunk-TFA6HPOA.js} +2 -2
- package/dist/{chunk-BA6WOZOT.js → chunk-TK4FHQRN.js} +4 -4
- package/dist/{chunk-W27OW7AB.js → chunk-TKFSXDOB.js} +2 -2
- package/dist/chunk-TLHNF6GA.js +647 -0
- package/dist/chunk-TLHNF6GA.js.map +1 -0
- package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
- package/dist/{chunk-FDLDOEO6.js → chunk-UBG4GAEP.js} +51 -6
- package/dist/chunk-UBG4GAEP.js.map +1 -0
- package/dist/{chunk-CETXNLEX.js → chunk-UDZYNIDJ.js} +2 -2
- package/dist/{chunk-H5AFCNGA.js → chunk-UJX4I26O.js} +2 -2
- package/dist/{chunk-E6TDQRF6.js → chunk-UYUCCQ46.js} +2 -2
- package/dist/{chunk-BLUYQFRH.js → chunk-VELCIWJZ.js} +15 -11
- package/dist/chunk-VELCIWJZ.js.map +1 -0
- package/dist/{chunk-OQDPBRQ6.js → chunk-VYXDUPYE.js} +2 -2
- package/dist/{chunk-ZG74PWRW.js → chunk-VZAKYDMJ.js} +2 -2
- package/dist/chunk-W6IJMWTZ.js +72 -0
- package/dist/chunk-W6IJMWTZ.js.map +1 -0
- package/dist/{chunk-NB5BCFUY.js → chunk-WHHEPAO3.js} +4 -4
- package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
- package/dist/{chunk-TX2UTLXC.js → chunk-WPDKBUWX.js} +2 -2
- package/dist/{chunk-YFLLGRXO.js → chunk-X2QPKLPL.js} +2 -2
- package/dist/{chunk-PFFZWDPE.js → chunk-XCOV45MO.js} +3 -3
- package/dist/{chunk-5BCNEBEN.js → chunk-XPJNT6PI.js} +4 -4
- package/dist/chunk-XW2T4QAW.js +1 -0
- package/dist/{chunk-J7HFPA6O.js → chunk-Y63ZFP4X.js} +2 -2
- package/dist/{chunk-D223ZDQV.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-22FVR2KE.js → chunk-YJ6VCDMZ.js} +6 -2
- package/dist/chunk-YJ6VCDMZ.js.map +1 -0
- package/dist/{chunk-RC5DXXWC.js → chunk-YM7YN37H.js} +2 -2
- package/dist/{chunk-BPJNF7J2.js → chunk-YNN26CIZ.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-DGGB65KC.js → chunk-Z7ACR6MJ.js} +3 -3
- package/dist/{chunk-X35W4S3L.js → chunk-ZBEGS7OB.js} +4 -4
- 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-E6JA6XWY.js → chunk-ZTG4P7NZ.js} +1013 -1317
- package/dist/chunk-ZTG4P7NZ.js.map +1 -0
- package/dist/{chunk-HK32G473.js → chunk-ZWEZXVYH.js} +2 -2
- package/dist/{cli-D57e2Mqt.d.ts → cli-Bk7Ctql4.d.ts} +5 -5
- package/dist/cli-fallback.d.ts +11 -4
- package/dist/cli-fallback.js +5 -1
- package/dist/cli.d.ts +16 -13
- package/dist/cli.js +107 -103
- package/dist/coding/export-okf-codegraph.d.ts +3 -1
- package/dist/coding/export-okf-codegraph.js +32 -30
- package/dist/coding/export-okf-codegraph.js.map +1 -1
- package/dist/coding/pre-action-gate.d.ts +3 -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 +4 -2
- package/dist/compounding/engine.js +27 -26
- package/dist/compounding/preference-consolidator.d.ts +3 -1
- package/dist/compression-optimizer.d.ts +3 -1
- package/dist/config.d.ts +3 -1
- package/dist/config.js +12 -10
- package/dist/connectors/codex-materialize-runner.d.ts +3 -1
- package/dist/connectors/codex-materialize-runner.js +26 -25
- package/dist/connectors/codex-materialize.d.ts +3 -1
- package/dist/connectors/index.d.ts +3 -1
- package/dist/connectors/index.js +28 -27
- package/dist/consolidation-provenance-check.d.ts +4 -2
- package/dist/consolidation-undo.d.ts +4 -2
- package/dist/contradiction/index.d.ts +5 -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 +3 -1
- package/dist/convergence-refresh.d.ts +4 -2
- package/dist/convergence-refresh.js +28 -27
- package/dist/conversation-index/backend.d.ts +3 -1
- package/dist/conversation-index/backend.js +3 -3
- package/dist/conversation-index/chunker.d.ts +3 -1
- package/dist/conversation-index/faiss-adapter.d.ts +3 -1
- package/dist/conversation-index/faiss-adapter.js +2 -2
- package/dist/conversation-index/indexer.d.ts +3 -1
- package/dist/conversation-index/search.d.ts +3 -1
- package/dist/corpus-watermark.d.ts +3 -1
- package/dist/corpus-watermark.js +29 -28
- package/dist/cross-lingual-recall.d.ts +3 -1
- package/dist/day-summary.d.ts +3 -1
- package/dist/deep-recall-http-glue.d.ts +14 -11
- package/dist/deep-recall-http-glue.js +12 -2
- package/dist/deep-recall-mcp-tools.d.ts +14 -11
- package/dist/deep-recall-policy-llm.d.ts +3 -1
- package/dist/deep-recall-policy-llm.js +4 -3
- package/dist/deep-recall-seeds.d.ts +3 -1
- package/dist/delinearize.d.ts +3 -1
- package/dist/dependency-propagation-config.d.ts +3 -1
- package/dist/{dependency-propagation-delivery-CmniEsUK.d.ts → dependency-propagation-delivery-DLiAtj25.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +3 -1
- package/dist/direct-answer.d.ts +3 -1
- package/dist/embedding-fallback.d.ts +3 -1
- package/dist/enrichment/index.d.ts +3 -1
- package/dist/entity-origin-fields.d.ts +3 -1
- package/dist/entity-retrieval.d.ts +4 -2
- package/dist/entity-retrieval.js +26 -25
- package/dist/entity-schema.d.ts +3 -1
- package/dist/episodic-context.d.ts +3 -1
- package/dist/eval-trajectory-contracts.d.ts +3 -1
- package/dist/eval-trajectory-store.d.ts +3 -1
- package/dist/eval-trajectory.d.ts +3 -1
- package/dist/explicit-capture.d.ts +12 -9
- package/dist/explicit-capture.js +6 -6
- package/dist/external-wiki-access.d.ts +14 -11
- package/dist/external-wiki-access.js +66 -61
- package/dist/external-wiki-collection-registration.d.ts +3 -1
- package/dist/external-wiki-collection.d.ts +3 -1
- package/dist/external-wiki-mcp-tools.d.ts +14 -11
- package/dist/extraction-error-classification.d.ts +3 -1
- package/dist/extraction-faithfulness.d.ts +3 -1
- package/dist/extraction-faithfulness.js +4 -3
- package/dist/extraction-judge-telemetry.d.ts +3 -1
- package/dist/extraction-judge-training.d.ts +3 -1
- package/dist/extraction-judge.d.ts +3 -1
- package/dist/extraction-judge.js +5 -4
- package/dist/extraction-liveness.d.ts +3 -1
- package/dist/extraction-normalization.d.ts +3 -1
- package/dist/extraction-prompt.d.ts +3 -1
- package/dist/extraction-source-grounding-rules.d.ts +3 -1
- package/dist/extraction-source-grounding.d.ts +3 -1
- package/dist/extraction.d.ts +3 -1
- package/dist/extraction.js +38 -36
- package/dist/fallback-llm.d.ts +3 -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-DbitKJI5.d.ts +23 -0
- package/dist/graph-append-error.d.ts +3 -1
- package/dist/graph-dashboard-diff.d.ts +3 -1
- package/dist/graph-dashboard-key.d.ts +3 -1
- package/dist/graph-dashboard-parser.d.ts +3 -1
- package/dist/graph-edge-reinforcement.d.ts +3 -1
- package/dist/graph-jsonl.d.ts +3 -1
- package/dist/graph-path-reconstruction.d.ts +3 -1
- package/dist/graph-path-scoring.d.ts +3 -1
- package/dist/graph-snapshot.d.ts +3 -1
- package/dist/graph.d.ts +3 -1
- package/dist/harmonic-retrieval.js +2 -2
- package/dist/importance.d.ts +3 -1
- package/dist/importers/index.d.ts +3 -1
- package/dist/importers/test-utils.d.ts +3 -1
- package/dist/in-flight-reads.d.ts +3 -1
- package/dist/{index-BTAsSkPG.d.ts → index-BINUgPFo.d.ts} +2 -2
- package/dist/index.d.ts +303 -245
- package/dist/index.js +316 -214
- package/dist/intent.d.ts +3 -1
- package/dist/lcm/engine.d.ts +3 -1
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +3 -1
- package/dist/lcm/index.js +7 -7
- package/dist/lcm/tools.d.ts +3 -1
- package/dist/lifecycle.d.ts +3 -1
- package/dist/live-connectors-runner.d.ts +3 -1
- package/dist/local-llm-config.d.ts +26 -0
- package/dist/local-llm-config.js +1 -0
- package/dist/local-llm.d.ts +5 -1
- package/dist/local-llm.js +3 -3
- package/dist/local-model-endpoint.d.ts +3 -1
- package/dist/location/index.d.ts +5 -3
- package/dist/location/index.js +29 -28
- package/dist/maintenance/memory-governance.d.ts +3 -1
- package/dist/maintenance/memory-governance.js +26 -25
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +4 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +26 -25
- package/dist/maintenance/rebuild-memory-projection.d.ts +4 -2
- package/dist/maintenance/rebuild-memory-projection.js +27 -26
- package/dist/{maintenance-DCvQGTzL.d.ts → maintenance-ag1gYztC.d.ts} +378 -4
- package/dist/mcp-memory-inspector-app.d.ts +14 -11
- package/dist/memory-action-policy.d.ts +3 -1
- package/dist/memory-cache.d.ts +3 -1
- package/dist/memory-controller.d.ts +3 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +3 -1
- package/dist/memory-projection-store.d.ts +3 -1
- package/dist/memory-provenance.d.ts +3 -1
- package/dist/memory-snapshot.d.ts +3 -1
- package/dist/memory-subject-cli.d.ts +14 -11
- package/dist/memory-subject.d.ts +14 -11
- package/dist/memory-worth-outcomes.d.ts +4 -2
- package/dist/migrate/from-engram.js +2 -2
- package/dist/models-json.d.ts +3 -1
- package/dist/namespaces/migrate.d.ts +5 -3
- package/dist/namespaces/migrate.js +27 -26
- package/dist/namespaces/principal.d.ts +3 -1
- package/dist/namespaces/search.d.ts +3 -1
- package/dist/namespaces/search.js +8 -8
- package/dist/namespaces/storage.d.ts +5 -3
- package/dist/namespaces/storage.js +26 -25
- package/dist/native-knowledge.d.ts +3 -1
- package/dist/network/tailscale.js +2 -2
- package/dist/offline-sync-impression-drain.d.ts +3 -1
- package/dist/offline-sync-impression-drain.js +6 -6
- package/dist/operator-doctor-corpus.d.ts +3 -1
- package/dist/operator-doctor-corpus.js +30 -29
- package/dist/operator-doctor-replica.d.ts +3 -1
- package/dist/operator-toolkit.d.ts +5 -3
- package/dist/operator-toolkit.js +44 -42
- package/dist/orchestration/compression-guideline-coordinator.d.ts +4 -2
- package/dist/orchestration/maintenance.d.ts +6 -4
- package/dist/orchestration/maintenance.js +44 -39
- package/dist/{orchestrator-CvCsp1tz.d.ts → orchestrator-Cf3G-3Ed.d.ts} +17 -29
- package/dist/orchestrator.d.ts +12 -9
- package/dist/orchestrator.js +141 -135
- package/dist/patterns-cli.d.ts +3 -1
- package/dist/{pipeline-JAdwKBS7.d.ts → pipeline-AwB03fw_.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +3 -1
- package/dist/proactive-contention.d.ts +3 -1
- package/dist/provenance.d.ts +3 -1
- package/dist/{public-http-h-yWu9rj.d.ts → public-http-BetSQn7q.d.ts} +1 -1
- package/dist/{qmd-Cvw9RWKr.d.ts → qmd-Bfaydrfm.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +4 -2
- package/dist/qmd-recall-cache.d.ts +3 -1
- package/dist/qmd.d.ts +4 -2
- package/dist/qmd.js +2 -2
- package/dist/recall-concurrency-config.d.ts +3 -1
- package/dist/recall-disclosure-escalation.d.ts +3 -1
- package/dist/recall-explain-renderer.d.ts +3 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +3 -1
- package/dist/recall-navigate-access.d.ts +3 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +3 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +3 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +3 -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 +57 -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 +3 -1
- package/dist/recall-tag-filter.d.ts +3 -1
- package/dist/recall-timings.d.ts +3 -1
- package/dist/recall-xray-cli.d.ts +3 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +3 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +10 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +12 -2
- package/dist/reconcile/cursor.js +6 -4
- package/dist/reconcile/cursor.js.map +1 -1
- package/dist/reconcile/manifest.d.ts +38 -2
- package/dist/reconcile/manifest.js +15 -5
- package/dist/reconcile/plan.d.ts +3 -1
- package/dist/replay/normalizers/chatgpt.d.ts +3 -1
- package/dist/replay/normalizers/claude.d.ts +3 -1
- package/dist/replay/normalizers/openclaw.d.ts +3 -1
- package/dist/replay/normalizers/shared.d.ts +3 -1
- package/dist/replay/runner.d.ts +3 -1
- package/dist/replay/types.d.ts +3 -1
- package/dist/replica-divergence.d.ts +3 -1
- package/dist/replica-peers-config.d.ts +3 -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 +3 -1
- package/dist/resume-bundles.js +13 -11
- package/dist/retrieval-agents.d.ts +4 -2
- package/dist/retrieval-tiers.d.ts +3 -1
- package/dist/routing/engine.d.ts +3 -1
- package/dist/routing/store.d.ts +3 -1
- package/dist/runtime/child-process.d.ts +1 -1
- package/dist/runtime/child-process.js +1 -1
- package/dist/salvage-envelope.d.ts +3 -1
- package/dist/salvage-envelope.js +2 -2
- package/dist/{scope-profiles-BShpTPeV.d.ts → scope-profiles-nxTKvjE-.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +3 -1
- package/dist/search/factory.d.ts +3 -1
- package/dist/search/factory.js +7 -7
- package/dist/search/index.d.ts +3 -1
- package/dist/search/index.js +11 -11
- package/dist/search/lancedb-backend.d.ts +3 -1
- package/dist/search/meilisearch-backend.d.ts +3 -1
- package/dist/search/noop-backend.d.ts +3 -1
- package/dist/search/orama-backend.d.ts +3 -1
- package/dist/search/port.d.ts +3 -1
- package/dist/search/remote-backend.d.ts +3 -1
- package/dist/{semantic-consolidation-CusOpe9F.d.ts → semantic-consolidation-C83DVakV.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +4 -2
- package/dist/semantic-consolidation.js +27 -26
- package/dist/semantic-rule-promotion.js +26 -25
- package/dist/semantic-rule-verifier.d.ts +3 -1
- package/dist/semantic-rule-verifier.js +26 -25
- package/dist/{service-BbuVh1eS.d.ts → service-q-xtOoAr.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +3 -1
- package/dist/session-observer-state.d.ts +3 -1
- package/dist/shared-context/manager.d.ts +3 -1
- package/dist/signal.d.ts +3 -1
- package/dist/source-agent-qualifier.d.ts +3 -1
- package/dist/source-agent-qualifier.js +35 -33
- package/dist/standup/build.js +26 -25
- package/dist/{storage-BBLLuVTF.d.ts → storage-Ca0MbTfm.d.ts} +67 -6
- package/dist/storage.d.ts +5 -3
- package/dist/storage.js +25 -24
- package/dist/subject-config.d.ts +3 -1
- package/dist/subject-config.js +2 -2
- package/dist/summarizer.d.ts +3 -1
- package/dist/summarizer.js +6 -6
- package/dist/summary-snapshot.d.ts +3 -1
- package/dist/support-passport/index.d.ts +50 -15
- package/dist/support-passport/index.js +73 -64
- package/dist/temporal-supersession.d.ts +4 -2
- package/dist/temporal-timeline-recall.d.ts +3 -1
- package/dist/temporal-validity.d.ts +3 -1
- package/dist/threading.d.ts +3 -1
- package/dist/tier-migration.d.ts +4 -2
- package/dist/tier-routing.d.ts +3 -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 +3 -1
- package/dist/transcript.d.ts +3 -1
- package/dist/transfer/capsule-import.js +1 -1
- package/dist/transfer/export-okf.d.ts +3 -1
- package/dist/transfer/export-okf.js +27 -26
- package/dist/transfer/types.d.ts +24 -24
- package/dist/trust-score-stage.d.ts +3 -1
- package/dist/trust-score.d.ts +3 -1
- package/dist/{types-igV4-sbB.d.ts → types-yDgWDkrJ.d.ts} +60 -34
- package/dist/types.d.ts +3 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +3 -1
- package/dist/verified-recall.js +26 -25
- package/dist/who-knows-cli.d.ts +14 -11
- package/dist/who-knows-cli.js +27 -26
- package/dist/who-knows.d.ts +14 -11
- package/dist/who-knows.js +26 -25
- package/dist/write-envelope.d.ts +5 -2
- package/dist/write-envelope.js +3 -1
- package/package.json +2 -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 +27 -1
- package/src/config.ts +17 -1
- 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-config.ts +25 -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 +10 -29
- package/src/write-envelope.ts +1 -1
- package/dist/chunk-22FVR2KE.js.map +0 -1
- package/dist/chunk-2C3S7J2S.js.map +0 -1
- package/dist/chunk-2JVJ7UHC.js.map +0 -1
- package/dist/chunk-2QSZNTDO.js +0 -56
- package/dist/chunk-2QSZNTDO.js.map +0 -1
- package/dist/chunk-3QQTXYZ6.js.map +0 -1
- package/dist/chunk-5VCDKQWQ.js +0 -560
- package/dist/chunk-5VCDKQWQ.js.map +0 -1
- package/dist/chunk-A7XEPMQ6.js.map +0 -1
- package/dist/chunk-BLUYQFRH.js.map +0 -1
- package/dist/chunk-E6JA6XWY.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-H272ZPQ3.js.map +0 -1
- package/dist/chunk-HV7OY4DM.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-MFDTVQJX.js.map +0 -1
- package/dist/chunk-N7RWREIQ.js.map +0 -1
- package/dist/chunk-O75CRYGF.js.map +0 -1
- package/dist/chunk-Q726HSJO.js.map +0 -1
- package/dist/chunk-QOIOACIE.js.map +0 -1
- package/dist/chunk-SEDEKFYQ.js +0 -1
- package/dist/chunk-SO7SV523.js.map +0 -1
- package/dist/chunk-TLPZ6MKZ.js.map +0 -1
- package/dist/chunk-UGPUYIET.js.map +0 -1
- package/src/activity/journal-mode.test.ts +0 -32
- package/src/activity/journal-mode.ts +0 -20
- /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-RKBLRTNT.js.map → chunk-2YLMUME2.js.map} +0 -0
- /package/dist/{chunk-DBQWVT2H.js.map → chunk-3CBI2ZSA.js.map} +0 -0
- /package/dist/{chunk-MWFGUESQ.js.map → chunk-3FJKJ5UZ.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-JTH2SE6B.js.map → chunk-6J6K3STG.js.map} +0 -0
- /package/dist/{chunk-H4VH5VIB.js.map → chunk-776GVKL7.js.map} +0 -0
- /package/dist/{chunk-BUTCAMJM.js.map → chunk-A2YQL2FF.js.map} +0 -0
- /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
- /package/dist/{chunk-CGC5UQCF.js.map → chunk-AKE4GGQ3.js.map} +0 -0
- /package/dist/{chunk-B325AGLK.js.map → chunk-AZSKROVQ.js.map} +0 -0
- /package/dist/{chunk-I5DZ3WGR.js.map → chunk-BJETIR53.js.map} +0 -0
- /package/dist/{chunk-JT3EB7ZL.js.map → chunk-BNGHPYZU.js.map} +0 -0
- /package/dist/{chunk-3JVLGJCY.js.map → chunk-C6KRO3SU.js.map} +0 -0
- /package/dist/{chunk-5NANRSCD.js.map → chunk-CNV2A557.js.map} +0 -0
- /package/dist/{chunk-PBGVVDLY.js.map → chunk-DK4X5B6I.js.map} +0 -0
- /package/dist/{chunk-N2ZNPHA3.js.map → chunk-ECKG5WSI.js.map} +0 -0
- /package/dist/{chunk-PYLL63BF.js.map → chunk-EEBQFG5E.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-JGHXXQ2G.js.map → chunk-FVJ4D6L7.js.map} +0 -0
- /package/dist/{chunk-DD5JFCWM.js.map → chunk-GCBIXUPT.js.map} +0 -0
- /package/dist/{chunk-MN3LK3KN.js.map → chunk-GLZH5VEN.js.map} +0 -0
- /package/dist/{chunk-S7T2TY65.js.map → chunk-HC4GFLMQ.js.map} +0 -0
- /package/dist/{chunk-EQHDH4C2.js.map → chunk-HUT2JR6I.js.map} +0 -0
- /package/dist/{chunk-UUQG7HAD.js.map → chunk-HXSAWV3A.js.map} +0 -0
- /package/dist/{chunk-XXIHX75O.js.map → chunk-J7PB5UQ4.js.map} +0 -0
- /package/dist/{chunk-LTIZHLV7.js.map → chunk-JR6H5CYS.js.map} +0 -0
- /package/dist/{chunk-FCSZ4K2X.js.map → chunk-JR6PP7UM.js.map} +0 -0
- /package/dist/{chunk-TCUKRAMK.js.map → chunk-JRWW7GM6.js.map} +0 -0
- /package/dist/{chunk-PL7FYKHT.js.map → chunk-L2WQVSKP.js.map} +0 -0
- /package/dist/{chunk-JSN44KIB.js.map → chunk-LEMD7WZJ.js.map} +0 -0
- /package/dist/{chunk-VZWXFXLX.js.map → chunk-LMCD5W5B.js.map} +0 -0
- /package/dist/{chunk-7BMXZCOT.js.map → chunk-LNDLXMH6.js.map} +0 -0
- /package/dist/{chunk-EONF76DT.js.map → chunk-LYDJRF45.js.map} +0 -0
- /package/dist/{chunk-MKD3OMPS.js.map → chunk-M3MYMWXG.js.map} +0 -0
- /package/dist/{chunk-VGXM5B4H.js.map → chunk-MNIPH6LD.js.map} +0 -0
- /package/dist/{chunk-6N3TQFZU.js.map → chunk-NN4JEFON.js.map} +0 -0
- /package/dist/{chunk-MOZXTRC2.js.map → chunk-OQ7SSRXP.js.map} +0 -0
- /package/dist/{chunk-XU6OEECT.js.map → chunk-OQQXGYMX.js.map} +0 -0
- /package/dist/{chunk-4MHYKEOM.js.map → chunk-OS2AT2JU.js.map} +0 -0
- /package/dist/{chunk-N57A4KPV.js.map → chunk-P3ONDDIJ.js.map} +0 -0
- /package/dist/{chunk-R3HKWWUB.js.map → chunk-PHP3MUGF.js.map} +0 -0
- /package/dist/{chunk-P3SB5BNT.js.map → chunk-QATYVTP7.js.map} +0 -0
- /package/dist/{chunk-LSYDG6MJ.js.map → chunk-QBLDCI6E.js.map} +0 -0
- /package/dist/{chunk-KCB7F4J7.js.map → chunk-QURNMKME.js.map} +0 -0
- /package/dist/{chunk-XOVKXJEP.js.map → chunk-R3TLVTWW.js.map} +0 -0
- /package/dist/{chunk-XXE5P6HJ.js.map → chunk-RRZKTSFG.js.map} +0 -0
- /package/dist/{chunk-44T3Y7SZ.js.map → chunk-RUXPVSML.js.map} +0 -0
- /package/dist/{chunk-DCJ3YFIC.js.map → chunk-S2ULTQZR.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-227UFSEQ.js.map → chunk-TFA6HPOA.js.map} +0 -0
- /package/dist/{chunk-BA6WOZOT.js.map → chunk-TK4FHQRN.js.map} +0 -0
- /package/dist/{chunk-W27OW7AB.js.map → chunk-TKFSXDOB.js.map} +0 -0
- /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
- /package/dist/{chunk-CETXNLEX.js.map → chunk-UDZYNIDJ.js.map} +0 -0
- /package/dist/{chunk-H5AFCNGA.js.map → chunk-UJX4I26O.js.map} +0 -0
- /package/dist/{chunk-E6TDQRF6.js.map → chunk-UYUCCQ46.js.map} +0 -0
- /package/dist/{chunk-OQDPBRQ6.js.map → chunk-VYXDUPYE.js.map} +0 -0
- /package/dist/{chunk-ZG74PWRW.js.map → chunk-VZAKYDMJ.js.map} +0 -0
- /package/dist/{chunk-NB5BCFUY.js.map → chunk-WHHEPAO3.js.map} +0 -0
- /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
- /package/dist/{chunk-TX2UTLXC.js.map → chunk-WPDKBUWX.js.map} +0 -0
- /package/dist/{chunk-YFLLGRXO.js.map → chunk-X2QPKLPL.js.map} +0 -0
- /package/dist/{chunk-PFFZWDPE.js.map → chunk-XCOV45MO.js.map} +0 -0
- /package/dist/{chunk-5BCNEBEN.js.map → chunk-XPJNT6PI.js.map} +0 -0
- /package/dist/{chunk-SEDEKFYQ.js.map → chunk-XW2T4QAW.js.map} +0 -0
- /package/dist/{chunk-J7HFPA6O.js.map → chunk-Y63ZFP4X.js.map} +0 -0
- /package/dist/{chunk-D223ZDQV.js.map → chunk-YEDVOYL2.js.map} +0 -0
- /package/dist/{chunk-RC5DXXWC.js.map → chunk-YM7YN37H.js.map} +0 -0
- /package/dist/{chunk-BPJNF7J2.js.map → chunk-YNN26CIZ.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-DGGB65KC.js.map → chunk-Z7ACR6MJ.js.map} +0 -0
- /package/dist/{chunk-X35W4S3L.js.map → chunk-ZBEGS7OB.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/{contradiction-scan-NOYMFG66.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/{resolution-VKATP2HT.js.map → local-llm-config.js.map} +0 -0
- /package/dist/{tier-stats-KA6OZX2C.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { mkdir, mkdtemp, readFile, readdir, rm, symlink, writeFile } from "node:fs/promises";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import test from "node:test";
|
|
7
|
+
|
|
8
|
+
import { CasRevisionStore } from "./cas-revision-store.js";
|
|
9
|
+
|
|
10
|
+
async function withStore(run: (store: CasRevisionStore, root: string) => Promise<void>): Promise<void> {
|
|
11
|
+
const root = await mkdtemp(path.join(os.tmpdir(), "remnic-cas-store-"));
|
|
12
|
+
try {
|
|
13
|
+
await run(new CasRevisionStore(root), root);
|
|
14
|
+
} finally {
|
|
15
|
+
await rm(root, { recursive: true, force: true });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function shardPathFor(root: string, target: string): string {
|
|
20
|
+
const relative = path.relative(root, target).split(path.sep).join("/");
|
|
21
|
+
const hash = createHash("sha256").update(relative).digest("hex");
|
|
22
|
+
return path.join(root, ".offline-sync", "cas-revisions", `${hash}.json`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
test("a second reservation refuses while a pending transaction stands; abort restores the standing token (#2813 P1 C)", async () => {
|
|
26
|
+
await withStore(async (store, root) => {
|
|
27
|
+
const target = path.join(root, "memories", "fact-a.md");
|
|
28
|
+
|
|
29
|
+
const a = await store.beginRevisionTransaction(target);
|
|
30
|
+
assert.equal((await store.readRevisionStatus(target)).status, "unavailable", "pending is never ownership");
|
|
31
|
+
await a.commit();
|
|
32
|
+
assert.deepEqual(await store.readRevisionStatus(target), {
|
|
33
|
+
status: "present",
|
|
34
|
+
revision: a.pendingRevision,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Writer B reserves while the shard holds a standing committed token.
|
|
38
|
+
const b = await store.beginRevisionTransaction(target);
|
|
39
|
+
assert.ok(b.pendingRevision > a.pendingRevision, "the reserved token exceeds the standing token");
|
|
40
|
+
// Writer C cannot reserve while B's PENDING marker stands — concurrent
|
|
41
|
+
// ownership is impossible: the ambiguity refuses the new transaction.
|
|
42
|
+
await assert.rejects(store.beginRevisionTransaction(target), /pending finalization/);
|
|
43
|
+
assert.equal(
|
|
44
|
+
(await store.readRevisionStatus(target)).status,
|
|
45
|
+
"unavailable",
|
|
46
|
+
"readers see recovery-needed, never B's pending token and never absence",
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
// B's memory write failed: the abort restores A's standing token.
|
|
50
|
+
await b.abort();
|
|
51
|
+
assert.deepEqual(await store.readRevisionStatus(target), {
|
|
52
|
+
status: "present",
|
|
53
|
+
revision: a.pendingRevision,
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// The next reservation still exceeds the standing committed token.
|
|
57
|
+
const c = await store.beginRevisionTransaction(target);
|
|
58
|
+
assert.ok(c.pendingRevision > a.pendingRevision);
|
|
59
|
+
await c.commit();
|
|
60
|
+
assert.deepEqual(await store.readRevisionStatus(target), {
|
|
61
|
+
status: "present",
|
|
62
|
+
revision: c.pendingRevision,
|
|
63
|
+
});
|
|
64
|
+
assert.notEqual(a.pendingRevision, c.pendingRevision, "two owned commits never share a receipt");
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test("reconcilePendingRevision publishes or discards with the known write outcome (#2813 P1 C)", async () => {
|
|
69
|
+
await withStore(async (store, root) => {
|
|
70
|
+
const target = path.join(root, "memories", "fact-b.md");
|
|
71
|
+
assert.equal(await store.reconcilePendingRevision(target, true), "absent", "no shard is a no-op");
|
|
72
|
+
|
|
73
|
+
const a = await store.beginRevisionTransaction(target);
|
|
74
|
+
await a.commit();
|
|
75
|
+
assert.equal(await store.reconcilePendingRevision(target, true), "committed", "an already-committed shard is untouched");
|
|
76
|
+
|
|
77
|
+
// A crashed transaction whose memory write LANDED: the pending token
|
|
78
|
+
// publishes as the standing receipt.
|
|
79
|
+
const b = await store.beginRevisionTransaction(target);
|
|
80
|
+
assert.equal(await store.reconcilePendingRevision(target, true), "reconciled");
|
|
81
|
+
assert.deepEqual(await store.readRevisionStatus(target), {
|
|
82
|
+
status: "present",
|
|
83
|
+
revision: b.pendingRevision,
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// A crashed transaction whose memory write did NOT land: the previous
|
|
87
|
+
// standing token is restored.
|
|
88
|
+
const c = await store.beginRevisionTransaction(target);
|
|
89
|
+
assert.equal(await store.reconcilePendingRevision(target, false), "reconciled");
|
|
90
|
+
assert.deepEqual(await store.readRevisionStatus(target), {
|
|
91
|
+
status: "present",
|
|
92
|
+
revision: b.pendingRevision,
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// From a fresh target (no standing token), a discarded reservation
|
|
96
|
+
// returns the shard to genuine absence.
|
|
97
|
+
const fresh = path.join(root, "memories", "fact-c.md");
|
|
98
|
+
const d = await store.beginRevisionTransaction(fresh);
|
|
99
|
+
assert.equal(await store.reconcilePendingRevision(fresh, false), "reconciled");
|
|
100
|
+
assert.equal((await store.readRevisionStatus(fresh)).status, "absent");
|
|
101
|
+
assert.equal(
|
|
102
|
+
await readFile(path.join(root, "memories", "fact-c.md"), "utf8").then(
|
|
103
|
+
() => true,
|
|
104
|
+
() => false,
|
|
105
|
+
),
|
|
106
|
+
false,
|
|
107
|
+
"sanity: the store never touches the memory file itself",
|
|
108
|
+
);
|
|
109
|
+
assert.ok(d.pendingRevision.length > 0);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
test("a pre-two-phase shard without state reads as committed and mints forward (#2813 P1 C)", async () => {
|
|
114
|
+
await withStore(async (store, root) => {
|
|
115
|
+
const target = path.join(root, "memories", "fact-legacy.md");
|
|
116
|
+
const relative = path.relative(root, target).split(path.sep).join("/");
|
|
117
|
+
const legacyToken = "2026-08-01T00:00:00.000Z";
|
|
118
|
+
await mkdir(path.dirname(shardPathFor(root, target)), { recursive: true });
|
|
119
|
+
await writeFile(
|
|
120
|
+
shardPathFor(root, target),
|
|
121
|
+
`${JSON.stringify({ version: 1, path: relative, revision: legacyToken })}\n`,
|
|
122
|
+
"utf8",
|
|
123
|
+
);
|
|
124
|
+
assert.deepEqual(await store.readRevisionStatus(target), { status: "present", revision: legacyToken });
|
|
125
|
+
|
|
126
|
+
const next = await store.beginRevisionTransaction(target);
|
|
127
|
+
assert.ok(next.pendingRevision > legacyToken);
|
|
128
|
+
await next.commit();
|
|
129
|
+
const shard = JSON.parse(await readFile(shardPathFor(root, target), "utf8")) as {
|
|
130
|
+
state?: string;
|
|
131
|
+
revision?: string;
|
|
132
|
+
};
|
|
133
|
+
assert.equal(shard.state, "committed");
|
|
134
|
+
assert.equal(shard.revision, next.pendingRevision);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
test("a symlinked cas-revisions directory is rejected at the store boundary (#2813 P1 A)", async () => {
|
|
139
|
+
await withStore(async (store, root) => {
|
|
140
|
+
const target = path.join(root, "memories", "fact-guard.md");
|
|
141
|
+
const a = await store.beginRevisionTransaction(target);
|
|
142
|
+
await a.commit();
|
|
143
|
+
|
|
144
|
+
const escapeRoot = await mkdtemp(path.join(os.tmpdir(), "remnic-cas-store-escape-"));
|
|
145
|
+
try {
|
|
146
|
+
const shardDir = path.join(root, ".offline-sync", "cas-revisions");
|
|
147
|
+
await rm(shardDir, { recursive: true, force: true });
|
|
148
|
+
await symlink(escapeRoot, shardDir);
|
|
149
|
+
|
|
150
|
+
const status = await store.readRevisionStatus(target);
|
|
151
|
+
assert.equal(status.status, "unavailable", "the symlinked sidecar is never read through");
|
|
152
|
+
await assert.rejects(store.beginRevisionTransaction(target));
|
|
153
|
+
await assert.rejects(store.reconcilePendingRevision(target, true));
|
|
154
|
+
assert.deepEqual(await readdir(escapeRoot), [], "no lock, shard, or temp file escaped the root");
|
|
155
|
+
} finally {
|
|
156
|
+
await rm(escapeRoot, { recursive: true, force: true });
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
test("a corrupt state-bearing shard is unavailability, never absence (#2813 P1 C)", async () => {
|
|
162
|
+
await withStore(async (store, root) => {
|
|
163
|
+
const target = path.join(root, "memories", "fact-corrupt.md");
|
|
164
|
+
await mkdir(path.dirname(shardPathFor(root, target)), { recursive: true });
|
|
165
|
+
await writeFile(
|
|
166
|
+
shardPathFor(root, target),
|
|
167
|
+
`${JSON.stringify({ version: 1, path: "x", revision: "2026-08-01T00:00:00.000Z", state: "bogus" })}\n`,
|
|
168
|
+
"utf8",
|
|
169
|
+
);
|
|
170
|
+
const status = await store.readRevisionStatus(target);
|
|
171
|
+
assert.equal(status.status, "unavailable");
|
|
172
|
+
await assert.rejects(store.beginRevisionTransaction(target), /unreadable/);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
test("recoverPendingRevision aborts a crashed reservation whose write never landed (#2807)", async () => {
|
|
177
|
+
await withStore(async (store, root) => {
|
|
178
|
+
const target = path.join(root, "memories", "fact-restart-abort.md");
|
|
179
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
180
|
+
await writeFile(target, "standing bytes", "utf8");
|
|
181
|
+
|
|
182
|
+
const a = await store.beginRevisionTransaction(target);
|
|
183
|
+
await a.commit();
|
|
184
|
+
// Crash between reserve and the durable write: the file is unchanged,
|
|
185
|
+
// so the baseline fingerprint still matches.
|
|
186
|
+
const b = await store.beginRevisionTransaction(target);
|
|
187
|
+
|
|
188
|
+
assert.equal(await store.recoverPendingRevision(target), "aborted");
|
|
189
|
+
assert.deepEqual(await store.readRevisionStatus(target), {
|
|
190
|
+
status: "present",
|
|
191
|
+
revision: a.pendingRevision,
|
|
192
|
+
});
|
|
193
|
+
assert.equal(await store.recoverPendingRevision(target), "committed", "idempotent once reconciled");
|
|
194
|
+
|
|
195
|
+
// Same crash from a fresh target (no standing receipt, absent file):
|
|
196
|
+
// the aborted reservation returns the shard to genuine absence.
|
|
197
|
+
const fresh = path.join(root, "memories", "fact-restart-fresh.md");
|
|
198
|
+
const f = await store.beginRevisionTransaction(fresh);
|
|
199
|
+
assert.equal(await store.recoverPendingRevision(fresh), "aborted");
|
|
200
|
+
assert.equal((await store.readRevisionStatus(fresh)).status, "absent");
|
|
201
|
+
assert.ok(f.pendingRevision.length > 0);
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
test("an evidenced gated recovery defers a reserve-only marker to the path-locked write path (#2807)", async () => {
|
|
206
|
+
await withStore(async (store, root) => {
|
|
207
|
+
const target = path.join(root, "memories", "fact-restart-gate.md");
|
|
208
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
209
|
+
await writeFile(target, "standing bytes", "utf8");
|
|
210
|
+
const a = await store.beginRevisionTransaction(target);
|
|
211
|
+
await a.commit();
|
|
212
|
+
|
|
213
|
+
// A reserve-only marker is indistinguishable from a LIVE transaction
|
|
214
|
+
// between reserve and write, so an unlocked read must not abort it.
|
|
215
|
+
const b = await store.beginRevisionTransaction(target);
|
|
216
|
+
assert.equal(
|
|
217
|
+
await store.recoverPendingRevision(target, { onlyWithWriteEvidence: true }),
|
|
218
|
+
"reserved",
|
|
219
|
+
);
|
|
220
|
+
assert.equal((await store.readRevisionStatus(target)).status, "unavailable", "the marker still stands");
|
|
221
|
+
// The live transaction proceeds undisturbed and commits normally.
|
|
222
|
+
await writeFile(target, "landed bytes", "utf8");
|
|
223
|
+
await b.writeLanded();
|
|
224
|
+
await b.commit();
|
|
225
|
+
assert.deepEqual(await store.readRevisionStatus(target), {
|
|
226
|
+
status: "present",
|
|
227
|
+
revision: b.pendingRevision,
|
|
228
|
+
committedDigest: store.digestContent("landed bytes"),
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
test("recoverPendingRevision publishes a crashed reservation whose write landed (#2807)", async () => {
|
|
234
|
+
await withStore(async (store, root) => {
|
|
235
|
+
const target = path.join(root, "memories", "fact-restart-commit.md");
|
|
236
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
237
|
+
await writeFile(target, "old durable bytes", "utf8");
|
|
238
|
+
const a = await store.beginRevisionTransaction(target);
|
|
239
|
+
await a.commit();
|
|
240
|
+
|
|
241
|
+
const b = await store.beginRevisionTransaction(target);
|
|
242
|
+
await writeFile(target, "new durable bytes", "utf8");
|
|
243
|
+
await b.writeLanded();
|
|
244
|
+
// Crash between writeLanded and commit: the marker holds the evidence.
|
|
245
|
+
|
|
246
|
+
const shard = JSON.parse(await readFile(shardPathFor(root, target), "utf8")) as {
|
|
247
|
+
state?: string;
|
|
248
|
+
baselineDigest?: unknown;
|
|
249
|
+
expectedDigest?: unknown;
|
|
250
|
+
};
|
|
251
|
+
assert.equal(shard.state, "pending");
|
|
252
|
+
assert.match(String(shard.baselineDigest), /^[0-9a-f]{64}$/, "the reserve-time fingerprint is persisted");
|
|
253
|
+
assert.match(String(shard.expectedDigest), /^[0-9a-f]{64}$/, "the post-write fingerprint is persisted");
|
|
254
|
+
assert.equal(JSON.stringify(shard).includes("old durable bytes"), false, "no memory content is persisted");
|
|
255
|
+
|
|
256
|
+
assert.equal(await store.recoverPendingRevision(target), "committed");
|
|
257
|
+
assert.deepEqual(await store.readRevisionStatus(target), {
|
|
258
|
+
status: "present",
|
|
259
|
+
revision: b.pendingRevision,
|
|
260
|
+
committedDigest: store.digestContent("new durable bytes"),
|
|
261
|
+
});
|
|
262
|
+
assert.equal(await store.recoverPendingRevision(target), "committed", "idempotent");
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
test("recoverPendingRevision fails closed on an ambiguous durable change (#2807)", async () => {
|
|
267
|
+
await withStore(async (store, root) => {
|
|
268
|
+
const target = path.join(root, "memories", "fact-restart-ambiguous.md");
|
|
269
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
270
|
+
await writeFile(target, "old durable bytes", "utf8");
|
|
271
|
+
const a = await store.beginRevisionTransaction(target);
|
|
272
|
+
await a.commit();
|
|
273
|
+
|
|
274
|
+
const b = await store.beginRevisionTransaction(target);
|
|
275
|
+
await assert.rejects(store.beginRevisionTransaction(target), /pending finalization/, "new reservations refuse");
|
|
276
|
+
await b.writeLanded();
|
|
277
|
+
// After the crash the file changes again — neither the expected
|
|
278
|
+
// fingerprint nor the baseline can explain the current bytes.
|
|
279
|
+
await writeFile(target, "unexplained third state", "utf8");
|
|
280
|
+
|
|
281
|
+
await assert.rejects(store.recoverPendingRevision(target), /ambiguous[\s\S]{0,512}Refusing to guess/);
|
|
282
|
+
assert.equal((await store.readRevisionStatus(target)).status, "unavailable");
|
|
283
|
+
await assert.rejects(store.beginRevisionTransaction(target), /ambiguous/, "new reservations refuse");
|
|
284
|
+
assert.equal(
|
|
285
|
+
await store.reconcilePendingRevision(target, true),
|
|
286
|
+
"reconciled",
|
|
287
|
+
"the known-outcome path remains the operator's manual tool",
|
|
288
|
+
);
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
test("recoverPendingRevision never guesses on a legacy pending marker without evidence (#2807)", async () => {
|
|
293
|
+
await withStore(async (store, root) => {
|
|
294
|
+
const target = path.join(root, "memories", "fact-legacy-pending.md");
|
|
295
|
+
const relative = path.relative(root, target).split(path.sep).join("/");
|
|
296
|
+
await mkdir(path.dirname(shardPathFor(root, target)), { recursive: true });
|
|
297
|
+
await writeFile(
|
|
298
|
+
shardPathFor(root, target),
|
|
299
|
+
`${JSON.stringify({
|
|
300
|
+
version: 1,
|
|
301
|
+
path: relative,
|
|
302
|
+
revision: "2026-08-01T00:00:00.000Z",
|
|
303
|
+
state: "pending",
|
|
304
|
+
previous: "2026-07-31T00:00:00.000Z",
|
|
305
|
+
})}\n`,
|
|
306
|
+
"utf8",
|
|
307
|
+
);
|
|
308
|
+
|
|
309
|
+
await assert.rejects(store.recoverPendingRevision(target), /no crash evidence[\s\S]{0,512}Refusing to guess/);
|
|
310
|
+
assert.equal((await store.readRevisionStatus(target)).status, "unavailable");
|
|
311
|
+
});
|
|
312
|
+
});
|
|
313
|
+
test("beginRevisionTransaction with expectedContent persists expectedDigest in pending marker before memory write (P1 A)", async () => {
|
|
314
|
+
await withStore(async (store, root) => {
|
|
315
|
+
const target = path.join(root, "memories", "fact-p1a-prewrite.md");
|
|
316
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
317
|
+
await writeFile(target, "baseline content", "utf8");
|
|
318
|
+
|
|
319
|
+
// Establish standing receipt for baseline
|
|
320
|
+
const initial = await store.beginRevisionTransaction(target, "baseline content");
|
|
321
|
+
await initial.commit();
|
|
322
|
+
|
|
323
|
+
const expectedContent = "new expected content";
|
|
324
|
+
const txn = await store.beginRevisionTransaction(target, expectedContent);
|
|
325
|
+
|
|
326
|
+
// Inspect the shard before the memory write occurs:
|
|
327
|
+
const shard = JSON.parse(await readFile(shardPathFor(root, target), "utf8")) as {
|
|
328
|
+
state?: string;
|
|
329
|
+
baselineDigest?: string;
|
|
330
|
+
expectedDigest?: string;
|
|
331
|
+
writeLanded?: boolean;
|
|
332
|
+
};
|
|
333
|
+
assert.equal(shard.state, "pending");
|
|
334
|
+
assert.equal(shard.writeLanded, false, "new pending markers are not landed");
|
|
335
|
+
assert.ok(shard.baselineDigest, "baseline digest is persisted");
|
|
336
|
+
assert.equal(
|
|
337
|
+
shard.expectedDigest,
|
|
338
|
+
store.digestContent(expectedContent),
|
|
339
|
+
"expected digest is persisted before memory write",
|
|
340
|
+
);
|
|
341
|
+
|
|
342
|
+
// Case 1: Crash BEFORE memory write (file remains at baseline content):
|
|
343
|
+
assert.equal(await store.recoverPendingRevision(target), "aborted");
|
|
344
|
+
assert.equal((await store.readRevisionStatus(target)).status, "present");
|
|
345
|
+
assert.equal(
|
|
346
|
+
(await store.readRevisionStatus(target) as { revision: string }).revision,
|
|
347
|
+
initial.pendingRevision,
|
|
348
|
+
"aborted transaction restored standing receipt",
|
|
349
|
+
);
|
|
350
|
+
|
|
351
|
+
// Case 2: Fresh transaction, memory write lands, crash AFTER memory write:
|
|
352
|
+
const txn2 = await store.beginRevisionTransaction(target, expectedContent);
|
|
353
|
+
await writeFile(target, expectedContent, "utf8");
|
|
354
|
+
assert.equal(
|
|
355
|
+
await store.recoverPendingRevision(target, { onlyWithWriteEvidence: true }),
|
|
356
|
+
"reserved",
|
|
357
|
+
"pre-recorded expectedDigest is not unlocked write evidence",
|
|
358
|
+
);
|
|
359
|
+
assert.equal(await store.recoverPendingRevision(target), "committed");
|
|
360
|
+
assert.deepEqual(await store.readRevisionStatus(target), {
|
|
361
|
+
status: "present",
|
|
362
|
+
revision: txn2.pendingRevision,
|
|
363
|
+
committedDigest: store.digestContent(expectedContent),
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
test("writeLanded sets the landed marker and unlocked mismatch is ambiguous (#2813 P1)", async () => {
|
|
369
|
+
await withStore(async (store, root) => {
|
|
370
|
+
const target = path.join(root, "memories", "fact-write-landed-marker.md");
|
|
371
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
372
|
+
await writeFile(target, "old bytes", "utf8");
|
|
373
|
+
const standing = await store.beginRevisionTransaction(target, "old bytes");
|
|
374
|
+
await standing.commit();
|
|
375
|
+
|
|
376
|
+
const next = await store.beginRevisionTransaction(target, "new bytes");
|
|
377
|
+
await writeFile(target, "new bytes", "utf8");
|
|
378
|
+
assert.equal(
|
|
379
|
+
await store.recoverPendingRevision(target, { onlyWithWriteEvidence: true }),
|
|
380
|
+
"reserved",
|
|
381
|
+
);
|
|
382
|
+
await next.writeLanded();
|
|
383
|
+
const landedShard = JSON.parse(await readFile(shardPathFor(root, target), "utf8")) as {
|
|
384
|
+
writeLanded?: boolean;
|
|
385
|
+
expectedDigest?: string;
|
|
386
|
+
};
|
|
387
|
+
assert.equal(landedShard.writeLanded, true);
|
|
388
|
+
assert.equal(landedShard.expectedDigest, store.digestContent("new bytes"));
|
|
389
|
+
await writeFile(target, "third-party rewrite", "utf8");
|
|
390
|
+
await assert.rejects(
|
|
391
|
+
store.recoverPendingRevision(target, { onlyWithWriteEvidence: true }),
|
|
392
|
+
/ambiguous[\s\S]{0,512}Refusing to guess/,
|
|
393
|
+
);
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
test("legacy pending shards without writeLanded treat expectedDigest as already landed (#2813 P1)", async () => {
|
|
398
|
+
await withStore(async (store, root) => {
|
|
399
|
+
const target = path.join(root, "memories", "fact-legacy-landed.md");
|
|
400
|
+
const relative = path.relative(root, target).split(path.sep).join("/");
|
|
401
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
402
|
+
await writeFile(target, "legacy landed bytes", "utf8");
|
|
403
|
+
const expectedDigest = store.digestContent("legacy landed bytes");
|
|
404
|
+
await mkdir(path.dirname(shardPathFor(root, target)), { recursive: true });
|
|
405
|
+
await writeFile(
|
|
406
|
+
shardPathFor(root, target),
|
|
407
|
+
`${JSON.stringify({
|
|
408
|
+
version: 1,
|
|
409
|
+
path: relative,
|
|
410
|
+
revision: "2026-08-01T00:00:00.000Z",
|
|
411
|
+
state: "pending",
|
|
412
|
+
previous: "2026-07-31T00:00:00.000Z",
|
|
413
|
+
baselineDigest: store.digestContent("old bytes"),
|
|
414
|
+
expectedDigest,
|
|
415
|
+
})}\n`,
|
|
416
|
+
"utf8",
|
|
417
|
+
);
|
|
418
|
+
|
|
419
|
+
assert.equal(
|
|
420
|
+
await store.recoverPendingRevision(target, { onlyWithWriteEvidence: true }),
|
|
421
|
+
"committed",
|
|
422
|
+
"absent writeLanded plus expectedDigest is legacy landed evidence",
|
|
423
|
+
);
|
|
424
|
+
assert.deepEqual(await store.readRevisionStatus(target), {
|
|
425
|
+
status: "present",
|
|
426
|
+
revision: "2026-08-01T00:00:00.000Z",
|
|
427
|
+
committedDigest: expectedDigest,
|
|
428
|
+
});
|
|
429
|
+
});
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
test("legacy landed pending whose file no longer matches expectedDigest is ambiguous (#2813 P1)", async () => {
|
|
433
|
+
await withStore(async (store, root) => {
|
|
434
|
+
const target = path.join(root, "memories", "fact-legacy-mismatch.md");
|
|
435
|
+
const relative = path.relative(root, target).split(path.sep).join("/");
|
|
436
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
437
|
+
await writeFile(target, "third-party rewrite", "utf8");
|
|
438
|
+
await mkdir(path.dirname(shardPathFor(root, target)), { recursive: true });
|
|
439
|
+
await writeFile(
|
|
440
|
+
shardPathFor(root, target),
|
|
441
|
+
`${JSON.stringify({
|
|
442
|
+
version: 1,
|
|
443
|
+
path: relative,
|
|
444
|
+
revision: "2026-08-01T00:00:00.000Z",
|
|
445
|
+
state: "pending",
|
|
446
|
+
previous: "2026-07-31T00:00:00.000Z",
|
|
447
|
+
baselineDigest: store.digestContent("old bytes"),
|
|
448
|
+
expectedDigest: store.digestContent("expected landed bytes"),
|
|
449
|
+
})}\n`,
|
|
450
|
+
"utf8",
|
|
451
|
+
);
|
|
452
|
+
|
|
453
|
+
await assert.rejects(
|
|
454
|
+
store.recoverPendingRevision(target, { onlyWithWriteEvidence: true }),
|
|
455
|
+
/ambiguous[\s\S]{0,512}Refusing to guess/,
|
|
456
|
+
);
|
|
457
|
+
assert.equal((await store.readRevisionStatus(target)).status, "unavailable");
|
|
458
|
+
});
|
|
459
|
+
});
|