@remnic/core 1.1.12 → 1.1.14
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-cli.d.ts +2 -1
- package/dist/access-cli.js +263 -82
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +26 -60
- package/dist/access-http.js +43 -29
- package/dist/access-mcp.d.ts +24 -6
- package/dist/access-mcp.js +35 -28
- package/dist/access-schema.d.ts +9 -6
- package/dist/access-schema.js +7 -5
- package/dist/access-service-DcCDmNYC.d.ts +1542 -0
- package/dist/access-service.d.ts +25 -7
- package/dist/access-service.js +33 -26
- package/dist/active-memory-bridge.js +2 -2
- package/dist/active-recall.js +11 -3
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/claude-code.d.ts +24 -0
- package/dist/adapters/claude-code.js +9 -0
- package/dist/adapters/codex.d.ts +25 -0
- package/dist/adapters/codex.js +9 -0
- package/dist/adapters/hermes.d.ts +35 -0
- package/dist/adapters/hermes.js +9 -0
- package/dist/adapters/index.d.ts +6 -0
- package/dist/adapters/index.js +26 -0
- package/dist/adapters/registry.d.ts +20 -0
- package/dist/adapters/registry.js +13 -0
- package/dist/adapters/replit.d.ts +28 -0
- package/dist/adapters/replit.js +9 -0
- package/dist/adapters/types.d.ts +43 -0
- package/dist/adapters/types.js +8 -0
- package/dist/bootstrap.d.ts +20 -5
- package/dist/boxes.d.ts +7 -0
- package/dist/boxes.js +1 -1
- package/dist/briefing.d.ts +5 -3
- package/dist/briefing.js +9 -6
- package/dist/buffer-surprise-report.js +1 -1
- package/dist/buffer.d.ts +18 -4
- package/dist/buffer.js +1 -1
- package/dist/calibration.js +4 -4
- package/dist/capsule-cli.d.ts +4 -4
- package/dist/capsule-cli.js +1 -1
- package/dist/capsule-crypto-5CYAGVC5.js +18 -0
- package/dist/capsule-merge-4MGKE7C5.js +189 -0
- package/dist/causal-behavior.d.ts +8 -28
- package/dist/causal-behavior.js +6 -3
- package/dist/causal-behavior.js.map +1 -1
- package/dist/causal-chain.js +3 -2
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +24 -13
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +3 -3
- package/dist/causal-trajectory.js +1 -1
- package/dist/chunk-25MQ7IHJ.js +427 -0
- package/dist/chunk-25MQ7IHJ.js.map +1 -0
- package/dist/chunk-2F2W355T.js +256 -0
- package/dist/chunk-2F2W355T.js.map +1 -0
- package/dist/chunk-2KI4QFHU.js +228 -0
- package/dist/chunk-2KI4QFHU.js.map +1 -0
- package/dist/chunk-2PRQG7PV.js +86 -0
- package/dist/chunk-2PRQG7PV.js.map +1 -0
- package/dist/chunk-2QR3XXIC.js +2272 -0
- package/dist/chunk-2QR3XXIC.js.map +1 -0
- package/dist/chunk-2WWLHTZY.js +121 -0
- package/dist/chunk-326G7DJK.js +2185 -0
- package/dist/chunk-326G7DJK.js.map +1 -0
- package/dist/chunk-34DQE4KF.js +174 -0
- package/dist/chunk-34DQE4KF.js.map +1 -0
- package/dist/chunk-3APJ5EVB.js +601 -0
- package/dist/chunk-3APJ5EVB.js.map +1 -0
- package/dist/chunk-3HPAPHUK.js +51 -0
- package/dist/chunk-3HPAPHUK.js.map +1 -0
- package/dist/chunk-3JXBXXM2.js +69 -0
- package/dist/chunk-3JXBXXM2.js.map +1 -0
- package/dist/chunk-3KW65B36.js +681 -0
- package/dist/chunk-3KW65B36.js.map +1 -0
- package/dist/chunk-3UXOZBHV.js +20 -0
- package/dist/chunk-3UXOZBHV.js.map +1 -0
- package/dist/chunk-3VAL7ZL2.js +266 -0
- package/dist/chunk-3VAL7ZL2.js.map +1 -0
- package/dist/chunk-3Y4P7RXM.js +31 -0
- package/dist/chunk-3Y4P7RXM.js.map +1 -0
- package/dist/chunk-47VWKCAF.js +273 -0
- package/dist/chunk-47VWKCAF.js.map +1 -0
- package/dist/chunk-4CRG46BG.js +271 -0
- package/dist/chunk-5375UYTQ.js +914 -0
- package/dist/chunk-5375UYTQ.js.map +1 -0
- package/dist/chunk-56K5QLHX.js +506 -0
- package/dist/chunk-56K5QLHX.js.map +1 -0
- package/dist/chunk-5RGLBDQF.js +596 -0
- package/dist/chunk-5RGLBDQF.js.map +1 -0
- package/dist/chunk-5UZXUTVO.js +9 -0
- package/dist/chunk-5UZXUTVO.js.map +1 -0
- package/dist/chunk-65PG43EQ.js +105 -0
- package/dist/chunk-65PG43EQ.js.map +1 -0
- package/dist/chunk-66DHUKLO.js +57 -0
- package/dist/chunk-66DHUKLO.js.map +1 -0
- package/dist/chunk-6FC5EGNV.js +46 -0
- package/dist/chunk-6FC5EGNV.js.map +1 -0
- package/dist/chunk-6H2TESSP.js +62 -0
- package/dist/chunk-6H2TESSP.js.map +1 -0
- package/dist/chunk-6LVVDPJ4.js +32 -0
- package/dist/chunk-6LVVDPJ4.js.map +1 -0
- package/dist/chunk-6RVI47ZR.js +159 -0
- package/dist/chunk-6RVI47ZR.js.map +1 -0
- package/dist/chunk-7AAT6G4Q.js +5117 -0
- package/dist/chunk-7AAT6G4Q.js.map +1 -0
- package/dist/chunk-7DTASS5T.js +29 -0
- package/dist/chunk-7DTASS5T.js.map +1 -0
- package/dist/chunk-7IASACLB.js +596 -0
- package/dist/chunk-7MNMYOFP.js +32 -0
- package/dist/chunk-7MNMYOFP.js.map +1 -0
- package/dist/chunk-7N4KAIGN.js +133 -0
- package/dist/chunk-7N4KAIGN.js.map +1 -0
- package/dist/chunk-7OZ53EXP.js +101 -0
- package/dist/chunk-7OZ53EXP.js.map +1 -0
- package/dist/chunk-7XYTQGCC.js +134 -0
- package/dist/chunk-7XYTQGCC.js.map +1 -0
- package/dist/chunk-A2XUIMJ3.js +341 -0
- package/dist/chunk-A2XUIMJ3.js.map +1 -0
- package/dist/chunk-AGZQD76C.js +201 -0
- package/dist/chunk-AGZQD76C.js.map +1 -0
- package/dist/chunk-APO3DCMU.js +361 -0
- package/dist/chunk-APO3DCMU.js.map +1 -0
- package/dist/chunk-BFBF3XEF.js +283 -0
- package/dist/chunk-BFBF3XEF.js.map +1 -0
- package/dist/chunk-BJ3KMYTB.js +1974 -0
- package/dist/chunk-BJ3KMYTB.js.map +1 -0
- package/dist/chunk-CHEL3SKB.js +6758 -0
- package/dist/chunk-CHEL3SKB.js.map +1 -0
- package/dist/chunk-CQZRLNMV.js +1491 -0
- package/dist/chunk-CQZRLNMV.js.map +1 -0
- package/dist/chunk-D46YSIYX.js +892 -0
- package/dist/chunk-D46YSIYX.js.map +1 -0
- package/dist/chunk-DINWEURR.js +648 -0
- package/dist/chunk-DINWEURR.js.map +1 -0
- package/dist/chunk-DK5LDEQM.js +530 -0
- package/dist/chunk-DK5LDEQM.js.map +1 -0
- package/dist/chunk-DOM4GKSW.js +34 -0
- package/dist/chunk-DOM4GKSW.js.map +1 -0
- package/dist/chunk-EDTHC6UD.js +1075 -0
- package/dist/chunk-EFJ3MQ4V.js +721 -0
- package/dist/chunk-EHRTFRWW.js +89 -0
- package/dist/chunk-EHRTFRWW.js.map +1 -0
- package/dist/chunk-FAJ7FZYM.js +11 -0
- package/dist/chunk-FAJ7FZYM.js.map +1 -0
- package/dist/chunk-FBYESMQ2.js +570 -0
- package/dist/chunk-FDU6HUUL.js +147 -0
- package/dist/chunk-FF4KLI5W.js +99 -0
- package/dist/chunk-FF4KLI5W.js.map +1 -0
- package/dist/chunk-FIT6DMX6.js +310 -0
- package/dist/chunk-FIT6DMX6.js.map +1 -0
- package/dist/chunk-FJ43PRLT.js +272 -0
- package/dist/chunk-FJ43PRLT.js.map +1 -0
- package/dist/chunk-FKFMOY3N.js +32 -0
- package/dist/chunk-FKFMOY3N.js.map +1 -0
- package/dist/chunk-FLTNHQK6.js +262 -0
- package/dist/chunk-FLTNHQK6.js.map +1 -0
- package/dist/chunk-GA454ALV.js +12436 -0
- package/dist/chunk-GA454ALV.js.map +1 -0
- package/dist/chunk-GGKRUQOO.js +228 -0
- package/dist/chunk-GIF42EW3.js +63 -0
- package/dist/chunk-GIF42EW3.js.map +1 -0
- package/dist/chunk-GL6I6MEQ.js +647 -0
- package/dist/chunk-H3ME6L6D.js +709 -0
- package/dist/chunk-H3ME6L6D.js.map +1 -0
- package/dist/chunk-HHLLAQGZ.js +1 -0
- package/dist/chunk-HXXBL2KD.js +2040 -0
- package/dist/chunk-I5V2VDIW.js +219 -0
- package/dist/chunk-I5V2VDIW.js.map +1 -0
- package/dist/chunk-I6K5FBRQ.js +35 -0
- package/dist/chunk-I6K5FBRQ.js.map +1 -0
- package/dist/chunk-ICRIXAP2.js +121 -0
- package/dist/chunk-ICRIXAP2.js.map +1 -0
- package/dist/chunk-J4EB7DNW.js +11 -0
- package/dist/chunk-J4EB7DNW.js.map +1 -0
- package/dist/chunk-JLFA7DQG.js +62 -0
- package/dist/chunk-JLFA7DQG.js.map +1 -0
- package/dist/chunk-KJTKLXTH.js +9 -0
- package/dist/chunk-KJTKLXTH.js.map +1 -0
- package/dist/chunk-KLAO5DGL.js +917 -0
- package/dist/chunk-KLAO5DGL.js.map +1 -0
- package/dist/chunk-KNKUID7G.js +183 -0
- package/dist/chunk-KOSORCJG.js +624 -0
- package/dist/chunk-KOSORCJG.js.map +1 -0
- package/dist/chunk-KUJVMMZQ.js +1262 -0
- package/dist/chunk-KUJVMMZQ.js.map +1 -0
- package/dist/chunk-LCR46JY5.js +123 -0
- package/dist/chunk-LCR46JY5.js.map +1 -0
- package/dist/chunk-LLQ2LLWF.js +148 -0
- package/dist/chunk-LLQ2LLWF.js.map +1 -0
- package/dist/chunk-LPMVBPA3.js +236 -0
- package/dist/chunk-LT3NLYSI.js +50 -0
- package/dist/chunk-LT3NLYSI.js.map +1 -0
- package/dist/chunk-LUDTDZLK.js +287 -0
- package/dist/chunk-LUDTDZLK.js.map +1 -0
- package/dist/chunk-M23FSH32.js +3963 -0
- package/dist/chunk-M23FSH32.js.map +1 -0
- package/dist/chunk-MC26UJIM.js +118 -0
- package/dist/chunk-ME6ESPZU.js +119 -0
- package/dist/chunk-ME6ESPZU.js.map +1 -0
- package/dist/chunk-MGKYQQYF.js +272 -0
- package/dist/chunk-MJFNCJXV.js +66 -0
- package/dist/chunk-MJFNCJXV.js.map +1 -0
- package/dist/chunk-MSWG7JI6.js +237 -0
- package/dist/chunk-MSWG7JI6.js.map +1 -0
- package/dist/chunk-MT25YHYH.js +141 -0
- package/dist/chunk-MT25YHYH.js.map +1 -0
- package/dist/chunk-MT4HVDUZ.js +53 -0
- package/dist/chunk-MY6TPVXW.js +219 -0
- package/dist/chunk-N2D6GXBM.js +267 -0
- package/dist/chunk-N2D6GXBM.js.map +1 -0
- package/dist/chunk-NJ3MJQZX.js +46 -0
- package/dist/chunk-NJ3MJQZX.js.map +1 -0
- package/dist/chunk-NMZY542O.js +335 -0
- package/dist/chunk-NMZY542O.js.map +1 -0
- package/dist/chunk-NNVTUXEB.js +23 -0
- package/dist/chunk-NZL6GGQE.js +375 -0
- package/dist/chunk-NZL6GGQE.js.map +1 -0
- package/dist/chunk-P4NEIHUT.js +108 -0
- package/dist/chunk-P7FMDTKL.js +103 -0
- package/dist/chunk-P7FMDTKL.js.map +1 -0
- package/dist/chunk-PHK3HARR.js +32 -0
- package/dist/chunk-PHK3HARR.js.map +1 -0
- package/dist/chunk-PIRJPV5T.js +98 -0
- package/dist/chunk-PIRJPV5T.js.map +1 -0
- package/dist/chunk-PK7H5L6Y.js +159 -0
- package/dist/chunk-PK7H5L6Y.js.map +1 -0
- package/dist/chunk-PR5FBTFU.js +233 -0
- package/dist/chunk-PR5FBTFU.js.map +1 -0
- package/dist/chunk-PU63GXWS.js +174 -0
- package/dist/chunk-PU63GXWS.js.map +1 -0
- package/dist/chunk-PZIAX57I.js +124 -0
- package/dist/chunk-PZIAX57I.js.map +1 -0
- package/dist/chunk-Q7P4WJDP.js +26 -0
- package/dist/chunk-Q7P4WJDP.js.map +1 -0
- package/dist/chunk-QQUAB63I.js +63 -0
- package/dist/chunk-QQUAB63I.js.map +1 -0
- package/dist/chunk-QRNI5JBH.js +18 -0
- package/dist/chunk-RHY3HH7P.js +601 -0
- package/dist/chunk-RHY3HH7P.js.map +1 -0
- package/dist/chunk-RRF5UOBJ.js +91 -0
- package/dist/chunk-RXDLTSWT.js +124 -0
- package/dist/chunk-RXDLTSWT.js.map +1 -0
- package/dist/chunk-RYED3SPJ.js +42 -0
- package/dist/chunk-RYED3SPJ.js.map +1 -0
- package/dist/chunk-S7KDBTWT.js +106 -0
- package/dist/chunk-S7KDBTWT.js.map +1 -0
- package/dist/chunk-SEDEKFYQ.js +1 -0
- package/dist/chunk-TECVW3JP.js +36 -0
- package/dist/chunk-TECVW3JP.js.map +1 -0
- package/dist/chunk-TFO23QT4.js +88 -0
- package/dist/chunk-TFO23QT4.js.map +1 -0
- package/dist/chunk-TK4UEOSK.js +76 -0
- package/dist/chunk-TK4UEOSK.js.map +1 -0
- package/dist/chunk-TKWGAOLV.js +122 -0
- package/dist/chunk-TKWGAOLV.js.map +1 -0
- package/dist/chunk-TMM4S4IJ.js +597 -0
- package/dist/chunk-TMM4S4IJ.js.map +1 -0
- package/dist/chunk-TMQLARTH.js +188 -0
- package/dist/chunk-TMQLARTH.js.map +1 -0
- package/dist/chunk-TPDBFYEG.js +130 -0
- package/dist/chunk-TPDBFYEG.js.map +1 -0
- package/dist/chunk-TPMQ3G6Z.js +145 -0
- package/dist/chunk-TPMQ3G6Z.js.map +1 -0
- package/dist/chunk-TZOLIGIG.js +61 -0
- package/dist/chunk-TZOLIGIG.js.map +1 -0
- package/dist/chunk-U3PN77QT.js +113 -0
- package/dist/chunk-U3WSW6PZ.js +277 -0
- package/dist/chunk-U4SCL7B7.js +640 -0
- package/dist/chunk-U4SCL7B7.js.map +1 -0
- package/dist/chunk-UWK5OXUJ.js +156 -0
- package/dist/chunk-UWK5OXUJ.js.map +1 -0
- package/dist/chunk-UWVJF25J.js +74 -0
- package/dist/chunk-UXHQAFNA.js +1317 -0
- package/dist/chunk-UXHQAFNA.js.map +1 -0
- package/dist/chunk-V5OCT34X.js +1 -0
- package/dist/chunk-VLXA6PI2.js +304 -0
- package/dist/chunk-VLXA6PI2.js.map +1 -0
- package/dist/chunk-VNO6ZJ35.js +500 -0
- package/dist/chunk-VNO6ZJ35.js.map +1 -0
- package/dist/chunk-VW676BEI.js +827 -0
- package/dist/chunk-VW676BEI.js.map +1 -0
- package/dist/chunk-W3LR522O.js +2296 -0
- package/dist/chunk-W4L6CZKA.js +96 -0
- package/dist/chunk-W4L6CZKA.js.map +1 -0
- package/dist/chunk-W4RVMTHR.js +372 -0
- package/dist/chunk-W4RVMTHR.js.map +1 -0
- package/dist/chunk-WEHSQBFR.js +188 -0
- package/dist/chunk-WEHSQBFR.js.map +1 -0
- package/dist/chunk-WELDCG6C.js +380 -0
- package/dist/chunk-WELDCG6C.js.map +1 -0
- package/dist/chunk-WZYKANL3.js +2800 -0
- package/dist/chunk-WZYKANL3.js.map +1 -0
- package/dist/chunk-XIG5PDM7.js +48 -0
- package/dist/chunk-XJNBEDFE.js +193 -0
- package/dist/chunk-XJNBEDFE.js.map +1 -0
- package/dist/chunk-XVVIG67A.js +291 -0
- package/dist/chunk-XVVIG67A.js.map +1 -0
- package/dist/chunk-XVZ7B3HG.js +135 -0
- package/dist/chunk-YBPYIAA5.js +73 -0
- package/dist/chunk-YBPYIAA5.js.map +1 -0
- package/dist/chunk-Z734BLO3.js +21 -0
- package/dist/chunk-Z734BLO3.js.map +1 -0
- package/dist/chunk-ZKSK55RC.js +269 -0
- package/dist/chunk-ZKSK55RC.js.map +1 -0
- package/dist/chunk-ZTFCYYEZ.js +69 -0
- package/dist/chunk-ZTFCYYEZ.js.map +1 -0
- package/dist/chunk-ZY2MNJR6.js +329 -0
- package/dist/chunk-ZY2MNJR6.js.map +1 -0
- package/dist/cli-D3VpkVwB.d.ts +1136 -0
- package/dist/cli.d.ts +39 -10
- package/dist/cli.js +108 -49
- package/dist/commitment-ledger.js +1 -1
- package/dist/compat/checks.d.ts +5 -0
- package/dist/compat/checks.js +11 -0
- package/dist/compat/checks.js.map +1 -0
- package/dist/compat/types.d.ts +30 -0
- package/dist/compat/types.js +1 -0
- package/dist/compat/types.js.map +1 -0
- package/dist/compounding/engine.d.ts +221 -0
- package/dist/compounding/engine.js +32 -0
- package/dist/compounding/engine.js.map +1 -0
- package/dist/compounding/preference-consolidator.d.ts +92 -0
- package/dist/compounding/preference-consolidator.js +553 -0
- package/dist/compounding/preference-consolidator.js.map +1 -0
- package/dist/config.d.ts +4 -2
- package/dist/config.js +9 -4
- package/dist/conflict-policy-DyJ2wd-h.d.ts +4 -0
- package/dist/connectors/codex-materialize-runner.d.ts +64 -0
- package/dist/connectors/codex-materialize-runner.js +33 -0
- package/dist/connectors/codex-materialize-runner.js.map +1 -0
- package/dist/connectors/codex-materialize.d.ts +195 -0
- package/dist/connectors/codex-materialize.js +38 -0
- package/dist/connectors/codex-materialize.js.map +1 -0
- package/dist/connectors/index.d.ts +444 -0
- package/dist/connectors/index.js +115 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors-cli-CwbyjGR7.d.ts +257 -0
- package/dist/connectors-cli.d.ts +1 -1
- package/dist/consolidation-provenance-check.d.ts +3 -1
- package/dist/consolidation-undo.d.ts +3 -1
- package/dist/contradiction/index.d.ts +258 -0
- package/dist/contradiction/index.js +43 -0
- package/dist/contradiction/index.js.map +1 -0
- package/dist/contradiction-review-ATP4S6IC.js +30 -0
- package/dist/contradiction-review-ATP4S6IC.js.map +1 -0
- package/dist/contradiction-scan-5A4IDZV5.js +13 -0
- package/dist/contradiction-scan-5A4IDZV5.js.map +1 -0
- package/dist/conversation-index/backend.d.ts +97 -0
- package/dist/conversation-index/backend.js +13 -0
- package/dist/conversation-index/backend.js.map +1 -0
- package/dist/conversation-index/chunker.d.ts +16 -0
- package/dist/conversation-index/chunker.js +8 -0
- package/dist/conversation-index/chunker.js.map +1 -0
- package/dist/conversation-index/cleanup.d.ts +11 -0
- package/dist/conversation-index/cleanup.js +9 -0
- package/dist/conversation-index/cleanup.js.map +1 -0
- package/dist/conversation-index/faiss-adapter.d.ts +6 -0
- package/dist/conversation-index/faiss-adapter.js +16 -0
- package/dist/conversation-index/faiss-adapter.js.map +1 -0
- package/dist/conversation-index/indexer.d.ts +23 -0
- package/dist/conversation-index/indexer.js +15 -0
- package/dist/conversation-index/indexer.js.map +1 -0
- package/dist/conversation-index/search.d.ts +6 -0
- package/dist/conversation-index/search.js +11 -0
- package/dist/conversation-index/search.js.map +1 -0
- package/dist/embedding-fallback.js +2 -2
- package/dist/enrichment/index.d.ts +163 -0
- package/dist/enrichment/index.js +18 -0
- package/dist/enrichment/index.js.map +1 -0
- package/dist/entity-retrieval.d.ts +4 -2
- package/dist/entity-retrieval.js +8 -5
- package/dist/evals.js +1 -1
- package/dist/explicit-capture.d.ts +20 -5
- package/dist/explicit-capture.js +2 -2
- package/dist/extraction-judge-training.js +1 -1
- package/dist/extraction.js +8 -8
- package/dist/faiss-adapter-CzPghc4C.d.ts +70 -0
- package/dist/fallback-llm.d.ts +2 -0
- package/dist/fallback-llm.js +4 -4
- package/dist/graph-edge-decay-5DI5GUNL.js +207 -0
- package/dist/index.d.ts +66 -711
- package/dist/index.js +556 -2680
- package/dist/index.js.map +1 -1
- package/dist/lcm/archive.d.ts +89 -0
- package/dist/lcm/archive.js +12 -0
- package/dist/lcm/archive.js.map +1 -0
- package/dist/lcm/dag.d.ts +48 -0
- package/dist/lcm/dag.js +8 -0
- package/dist/lcm/dag.js.map +1 -0
- package/dist/lcm/engine.d.ts +116 -0
- package/dist/lcm/engine.js +20 -0
- package/dist/lcm/engine.js.map +1 -0
- package/dist/lcm/index.d.ts +12 -0
- package/dist/lcm/index.js +44 -0
- package/dist/lcm/index.js.map +1 -0
- package/dist/lcm/queue.d.ts +62 -0
- package/dist/lcm/queue.js +8 -0
- package/dist/lcm/queue.js.map +1 -0
- package/dist/lcm/recall.d.ts +20 -0
- package/dist/lcm/recall.js +8 -0
- package/dist/lcm/recall.js.map +1 -0
- package/dist/lcm/schema.d.ts +16 -0
- package/dist/lcm/schema.js +14 -0
- package/dist/lcm/schema.js.map +1 -0
- package/dist/lcm/summarizer.d.ts +38 -0
- package/dist/lcm/summarizer.js +12 -0
- package/dist/lcm/summarizer.js.map +1 -0
- package/dist/lcm/tools.d.ts +29 -0
- package/dist/lcm/tools.js +8 -0
- package/dist/lcm/tools.js.map +1 -0
- package/dist/live-connectors-runner.js +5 -5
- package/dist/local-llm.js +3 -3
- package/dist/maintenance/archive-observations.d.ts +18 -0
- package/dist/maintenance/archive-observations.js +8 -0
- package/dist/maintenance/archive-observations.js.map +1 -0
- package/dist/maintenance/backup-stamp.d.ts +3 -0
- package/dist/maintenance/backup-stamp.js +8 -0
- package/dist/maintenance/backup-stamp.js.map +1 -0
- package/dist/maintenance/memory-governance-cron.d.ts +85 -0
- package/dist/maintenance/memory-governance-cron.js +22 -0
- package/dist/maintenance/memory-governance-cron.js.map +1 -0
- package/dist/maintenance/memory-governance.d.ts +137 -0
- package/dist/maintenance/memory-governance.js +40 -0
- package/dist/maintenance/memory-governance.js.map +1 -0
- package/dist/maintenance/migrate-observations.d.ts +18 -0
- package/dist/maintenance/migrate-observations.js +9 -0
- package/dist/maintenance/migrate-observations.js.map +1 -0
- package/dist/maintenance/observation-ledger-utils.d.ts +10 -0
- package/dist/maintenance/observation-ledger-utils.js +10 -0
- package/dist/maintenance/observation-ledger-utils.js.map +1 -0
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +15 -0
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +28 -0
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js.map +1 -0
- package/dist/maintenance/rebuild-memory-projection.d.ts +77 -0
- package/dist/maintenance/rebuild-memory-projection.js +35 -0
- package/dist/maintenance/rebuild-memory-projection.js.map +1 -0
- package/dist/maintenance/rebuild-observations.d.ts +17 -0
- package/dist/maintenance/rebuild-observations.js +9 -0
- package/dist/maintenance/rebuild-observations.js.map +1 -0
- package/dist/mcp-memory-inspector-app.d.ts +24 -6
- package/dist/memory-projection-store.d.ts +108 -3
- package/dist/memory-projection-store.js +2 -1
- package/dist/memory-worth-outcomes.d.ts +4 -2
- package/dist/migrate/from-engram.d.ts +24 -0
- package/dist/migrate/from-engram.js +12 -0
- package/dist/migrate/from-engram.js.map +1 -0
- package/dist/namespaces/migrate.d.ts +50 -0
- package/dist/namespaces/migrate.js +50 -0
- package/dist/namespaces/migrate.js.map +1 -0
- package/dist/namespaces/principal.d.ts +17 -0
- package/dist/namespaces/principal.js +16 -0
- package/dist/namespaces/principal.js.map +1 -0
- package/dist/namespaces/search.d.ts +46 -0
- package/dist/namespaces/search.js +28 -0
- package/dist/namespaces/search.js.map +1 -0
- package/dist/namespaces/storage.d.ts +32 -0
- package/dist/namespaces/storage.js +28 -0
- package/dist/namespaces/storage.js.map +1 -0
- package/dist/network/tailscale.d.ts +41 -0
- package/dist/network/tailscale.js +9 -0
- package/dist/network/tailscale.js.map +1 -0
- package/dist/network/webdav.d.ts +39 -0
- package/dist/network/webdav.js +10 -0
- package/dist/network/webdav.js.map +1 -0
- package/dist/objective-state-writers.js +2 -2
- package/dist/operator-toolkit.d.ts +4 -2
- package/dist/operator-toolkit.js +32 -14
- package/dist/opik-exporter.js +2 -2
- package/dist/opik-exporter.js.map +1 -1
- package/dist/orchestrator-DuWl9Hwx.d.ts +1244 -0
- package/dist/orchestrator.d.ts +22 -7
- package/dist/orchestrator.js +79 -44
- package/dist/path-MR5JPYOP.js +9 -0
- package/dist/path-MR5JPYOP.js.map +1 -0
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +102 -3
- package/dist/qmd.js +23 -5
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.js +2 -2
- package/dist/replay/normalizers/chatgpt.d.ts +6 -0
- package/dist/replay/normalizers/chatgpt.js +11 -0
- package/dist/replay/normalizers/chatgpt.js.map +1 -0
- package/dist/replay/normalizers/claude.d.ts +6 -0
- package/dist/replay/normalizers/claude.js +11 -0
- package/dist/replay/normalizers/claude.js.map +1 -0
- package/dist/replay/normalizers/openclaw.d.ts +6 -0
- package/dist/replay/normalizers/openclaw.js +11 -0
- package/dist/replay/normalizers/openclaw.js.map +1 -0
- package/dist/replay/normalizers/shared.d.ts +16 -0
- package/dist/replay/normalizers/shared.js +14 -0
- package/dist/replay/normalizers/shared.js.map +1 -0
- package/dist/replay/runner.d.ts +35 -0
- package/dist/replay/runner.js +16 -0
- package/dist/replay/runner.js.map +1 -0
- package/dist/replay/types.d.ts +57 -0
- package/dist/replay/types.js +19 -0
- package/dist/replay/types.js.map +1 -0
- package/dist/resolution-B7FNQSSP.js +12 -0
- package/dist/resolution-B7FNQSSP.js.map +1 -0
- package/dist/resolve-provider-secret.js +2 -2
- package/dist/resume-bundles.js +8 -6
- package/dist/retrieval-agents.d.ts +1 -1
- package/dist/routing/engine.d.ts +35 -0
- package/dist/routing/engine.js +16 -0
- package/dist/routing/engine.js.map +1 -0
- package/dist/routing/store.d.ts +27 -0
- package/dist/routing/store.js +10 -0
- package/dist/routing/store.js.map +1 -0
- package/dist/runtime/better-sqlite.d.ts +8 -0
- package/dist/runtime/better-sqlite.js +10 -0
- package/dist/runtime/better-sqlite.js.map +1 -0
- package/dist/runtime/child-process.d.ts +32 -0
- package/dist/runtime/child-process.js +10 -0
- package/dist/runtime/child-process.js.map +1 -0
- package/dist/runtime/env.d.ts +5 -0
- package/dist/runtime/env.js +12 -0
- package/dist/runtime/env.js.map +1 -0
- package/dist/schemas.d.ts +22 -22
- package/dist/sdk-compat.js +1 -1
- package/dist/search/document-scanner.d.ts +22 -0
- package/dist/search/document-scanner.js +8 -0
- package/dist/search/document-scanner.js.map +1 -0
- package/dist/search/embed-helper.d.ts +35 -0
- package/dist/search/embed-helper.js +9 -0
- package/dist/search/embed-helper.js.map +1 -0
- package/dist/search/factory.d.ts +32 -0
- package/dist/search/factory.js +29 -0
- package/dist/search/factory.js.map +1 -0
- package/dist/search/index.d.ts +15 -0
- package/dist/search/index.js +50 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/lancedb-backend.d.ts +51 -0
- package/dist/search/lancedb-backend.js +10 -0
- package/dist/search/lancedb-backend.js.map +1 -0
- package/dist/search/meilisearch-backend.d.ts +48 -0
- package/dist/search/meilisearch-backend.js +10 -0
- package/dist/search/meilisearch-backend.js.map +1 -0
- package/dist/search/noop-backend.d.ts +26 -0
- package/dist/search/noop-backend.js +8 -0
- package/dist/search/noop-backend.js.map +1 -0
- package/dist/search/orama-backend.d.ts +53 -0
- package/dist/search/orama-backend.js +10 -0
- package/dist/search/orama-backend.js.map +1 -0
- package/dist/search/port.d.ts +61 -0
- package/dist/search/port.js +1 -0
- package/dist/search/port.js.map +1 -0
- package/dist/search/remote-backend.d.ts +39 -0
- package/dist/search/remote-backend.js +9 -0
- package/dist/search/remote-backend.js.map +1 -0
- package/dist/secure-store/index.d.ts +890 -0
- package/dist/secure-store/index.js +156 -0
- package/dist/secure-store/index.js.map +1 -0
- package/dist/semantic-VwGI14Ok.d.ts +69 -0
- package/dist/semantic-consolidation-4HkHWgeI.d.ts +180 -0
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +13 -6
- package/dist/semantic-rule-promotion.js +8 -5
- package/dist/semantic-rule-verifier.js +8 -5
- package/dist/shared-context/manager.d.ts +131 -0
- package/dist/shared-context/manager.js +15 -0
- package/dist/shared-context/manager.js.map +1 -0
- package/dist/skills-registry.js +13 -1
- package/dist/skills-registry.js.map +1 -1
- package/dist/state-store-VZU2IA53.js +16 -0
- package/dist/state-store-VZU2IA53.js.map +1 -0
- package/dist/storage-paths.d.ts +9 -0
- package/dist/storage-paths.js +20 -0
- package/dist/storage-paths.js.map +1 -0
- package/dist/storage.d.ts +3 -1
- package/dist/storage.js +7 -4
- package/dist/summarizer.d.ts +5 -0
- package/dist/summarizer.js +9 -8
- package/dist/summary-snapshot.js +2 -1
- package/dist/surfaces/dreams.d.ts +16 -0
- package/dist/surfaces/dreams.js +282 -0
- package/dist/surfaces/dreams.js.map +1 -0
- package/dist/surfaces/heartbeat.d.ts +17 -0
- package/dist/surfaces/heartbeat.js +265 -0
- package/dist/surfaces/heartbeat.js.map +1 -0
- package/dist/temporal-supersession.d.ts +3 -1
- package/dist/threading.d.ts +5 -0
- package/dist/threading.js +2 -1
- package/dist/tier-migration.d.ts +4 -2
- package/dist/tokens.js +2 -2
- package/dist/transcript.d.ts +15 -1
- package/dist/transcript.js +2 -1
- package/dist/transfer/autodetect.d.ts +4 -0
- package/dist/transfer/autodetect.js +15 -0
- package/dist/transfer/autodetect.js.map +1 -0
- package/dist/transfer/backup.d.ts +21 -0
- package/dist/transfer/backup.js +17 -0
- package/dist/transfer/backup.js.map +1 -0
- package/dist/transfer/capsule-export.d.ts +113 -0
- package/dist/transfer/capsule-export.js +19 -0
- package/dist/transfer/capsule-export.js.map +1 -0
- package/dist/transfer/capsule-import.d.ts +124 -0
- package/dist/transfer/capsule-import.js +16 -0
- package/dist/transfer/capsule-import.js.map +1 -0
- package/dist/transfer/constants.d.ts +13 -0
- package/dist/transfer/constants.js +12 -0
- package/dist/transfer/constants.js.map +1 -0
- package/dist/transfer/export-json.d.ts +11 -0
- package/dist/transfer/export-json.js +11 -0
- package/dist/transfer/export-json.js.map +1 -0
- package/dist/transfer/export-md.d.ts +10 -0
- package/dist/transfer/export-md.js +13 -0
- package/dist/transfer/export-md.js.map +1 -0
- package/dist/transfer/export-sqlite.d.ts +9 -0
- package/dist/transfer/export-sqlite.js +12 -0
- package/dist/transfer/export-sqlite.js.map +1 -0
- package/dist/transfer/fs-utils.d.ts +61 -0
- package/dist/transfer/fs-utils.js +40 -0
- package/dist/transfer/fs-utils.js.map +1 -0
- package/dist/transfer/import-json.d.ts +16 -0
- package/dist/transfer/import-json.js +13 -0
- package/dist/transfer/import-json.js.map +1 -0
- package/dist/transfer/import-md.d.ts +14 -0
- package/dist/transfer/import-md.js +11 -0
- package/dist/transfer/import-md.js.map +1 -0
- package/dist/transfer/import-sqlite.d.ts +14 -0
- package/dist/transfer/import-sqlite.js +12 -0
- package/dist/transfer/import-sqlite.js.map +1 -0
- package/dist/transfer/sqlite-schema.d.ts +4 -0
- package/dist/transfer/sqlite-schema.js +10 -0
- package/dist/transfer/sqlite-schema.js.map +1 -0
- package/dist/transfer/types.d.ts +916 -0
- package/dist/transfer/types.js +30 -0
- package/dist/transfer/types.js.map +1 -0
- package/dist/types.d.ts +28 -1
- package/dist/types.js +1 -1
- package/dist/verified-recall.js +9 -6
- package/dist/work/board.d.ts +43 -0
- package/dist/work/board.js +14 -0
- package/dist/work/board.js.map +1 -0
- package/dist/work/boundary.d.ts +8 -0
- package/dist/work/boundary.js +14 -0
- package/dist/work/boundary.js.map +1 -0
- package/dist/work/storage.d.ts +39 -0
- package/dist/work/storage.js +11 -0
- package/dist/work/storage.js.map +1 -0
- package/dist/work/types.d.ts +75 -0
- package/dist/work/types.js +1 -0
- package/dist/work/types.js.map +1 -0
- package/package.json +2767 -6
- package/scripts/faiss_index.py +816 -0
- package/scripts/faiss_requirements.txt +3 -0
- package/skills/remnic-entities/SKILL.md +51 -0
- package/skills/remnic-memory-workflow/SKILL.md +61 -0
- package/skills/remnic-recall/SKILL.md +51 -0
- package/skills/remnic-remember/SKILL.md +56 -0
- package/skills/remnic-search/SKILL.md +51 -0
- package/skills/remnic-status/SKILL.md +51 -0
- package/src/abort-error.test.ts +49 -0
- package/src/abort-error.ts +46 -0
- package/src/abstraction-nodes.ts +162 -0
- package/src/access-audit.test.ts +178 -0
- package/src/access-audit.ts +125 -0
- package/src/access-cli.test.ts +439 -0
- package/src/access-cli.ts +438 -0
- package/src/access-http.test.ts +225 -0
- package/src/access-http.ts +1899 -0
- package/src/access-idempotency.ts +232 -0
- package/src/access-mcp.test.ts +568 -0
- package/src/access-mcp.ts +3056 -0
- package/src/access-schema-pi.test.ts +60 -0
- package/src/access-schema.ts +522 -0
- package/src/access-service-namespace.test.ts +123 -0
- package/src/access-service.ts +5629 -0
- package/src/action-confidence.test.ts +206 -0
- package/src/action-confidence.ts +466 -0
- package/src/active-memory-bridge.test.ts +285 -0
- package/src/active-memory-bridge.ts +217 -0
- package/src/active-recall.test.ts +484 -0
- package/src/active-recall.ts +459 -0
- package/src/adapters/claude-code.ts +56 -0
- package/src/adapters/codex.ts +57 -0
- package/src/adapters/hermes.ts +64 -0
- package/src/adapters/index.ts +6 -0
- package/src/adapters/registry.ts +41 -0
- package/src/adapters/replit.ts +55 -0
- package/src/adapters/types.ts +51 -0
- package/src/behavior-learner.ts +144 -0
- package/src/behavior-signals.ts +73 -0
- package/src/binary-lifecycle/backend.ts +117 -0
- package/src/binary-lifecycle/index.ts +35 -0
- package/src/binary-lifecycle/manifest.ts +79 -0
- package/src/binary-lifecycle/pipeline.ts +352 -0
- package/src/binary-lifecycle/scanner.ts +89 -0
- package/src/binary-lifecycle/types.ts +89 -0
- package/src/bootstrap.ts +178 -0
- package/src/boxes.ts +521 -0
- package/src/briefing.test.ts +1535 -0
- package/src/briefing.ts +1382 -0
- package/src/buffer-session.test.ts +443 -0
- package/src/buffer-surprise-report.ts +176 -0
- package/src/buffer-surprise-telemetry.test.ts +606 -0
- package/src/buffer-surprise-trigger.test.ts +766 -0
- package/src/buffer-surprise.test.ts +339 -0
- package/src/buffer-surprise.ts +203 -0
- package/src/buffer.ts +900 -0
- package/src/bulk-import/cli-command.test.ts +204 -0
- package/src/bulk-import/index.ts +34 -0
- package/src/bulk-import/pipeline.test.ts +445 -0
- package/src/bulk-import/pipeline.ts +178 -0
- package/src/bulk-import/registry.test.ts +151 -0
- package/src/bulk-import/registry.ts +72 -0
- package/src/bulk-import/types.test.ts +272 -0
- package/src/bulk-import/types.ts +145 -0
- package/src/calibration.ts +394 -0
- package/src/capsule-cli.test.ts +398 -0
- package/src/capsule-cli.ts +565 -0
- package/src/causal-behavior.ts +308 -0
- package/src/causal-chain.ts +419 -0
- package/src/causal-consolidation.ts +370 -0
- package/src/causal-retrieval.ts +286 -0
- package/src/causal-trajectory-graph.ts +60 -0
- package/src/causal-trajectory.ts +303 -0
- package/src/chunking.ts +220 -0
- package/src/citations.ts +232 -0
- package/src/cli.ts +9403 -0
- package/src/codex-cli-fallback.ts +162 -0
- package/src/codex-thread-key.ts +1 -0
- package/src/coding/access-coding-context.test.ts +197 -0
- package/src/coding/coding-branch-scope.test.ts +281 -0
- package/src/coding/coding-namespace.test.ts +360 -0
- package/src/coding/coding-namespace.ts +412 -0
- package/src/coding/coding-orchestrator.test.ts +249 -0
- package/src/coding/git-context.test.ts +507 -0
- package/src/coding/git-context.ts +336 -0
- package/src/coding/mcp-set-coding-context.test.ts +174 -0
- package/src/coding/review-context.test.ts +316 -0
- package/src/coding/review-context.ts +349 -0
- package/src/coding/wire-coding-context.test.ts +468 -0
- package/src/commitment-ledger.test.ts +78 -0
- package/src/commitment-ledger.ts +337 -0
- package/src/compat/checks.test.ts +206 -0
- package/src/compat/checks.ts +716 -0
- package/src/compat/types.ts +33 -0
- package/src/compounding/engine.ts +1686 -0
- package/src/compounding/preference-consolidator.ts +778 -0
- package/src/compression-optimizer.ts +312 -0
- package/src/config.test.ts +930 -0
- package/src/config.ts +3807 -0
- package/src/connectors/codex/instructions.md +160 -0
- package/src/connectors/codex/resources/namespace-cheatsheet.md +48 -0
- package/src/connectors/codex-marketplace.ts +500 -0
- package/src/connectors/codex-materialize-runner.ts +212 -0
- package/src/connectors/codex-materialize.ts +983 -0
- package/src/connectors/coerce.ts +62 -0
- package/src/connectors/index.test.ts +1570 -0
- package/src/connectors/index.ts +3222 -0
- package/src/connectors/live/framework.ts +164 -0
- package/src/connectors/live/github.test.ts +1218 -0
- package/src/connectors/live/github.ts +1068 -0
- package/src/connectors/live/gmail.test.ts +1706 -0
- package/src/connectors/live/gmail.ts +1293 -0
- package/src/connectors/live/google-drive.test.ts +696 -0
- package/src/connectors/live/google-drive.ts +724 -0
- package/src/connectors/live/index.ts +101 -0
- package/src/connectors/live/live-connectors.test.ts +689 -0
- package/src/connectors/live/notion.test.ts +1109 -0
- package/src/connectors/live/notion.ts +978 -0
- package/src/connectors/live/registry.ts +103 -0
- package/src/connectors/live/state-store.ts +399 -0
- package/src/connectors/live/transient-errors.ts +150 -0
- package/src/connectors/weclone-installer.test.ts +850 -0
- package/src/connectors-cli.ts +513 -0
- package/src/console/state.test.ts +224 -0
- package/src/console/state.ts +514 -0
- package/src/console/trace.test.ts +813 -0
- package/src/console/trace.ts +603 -0
- package/src/console/tui.test.ts +582 -0
- package/src/console/tui.ts +508 -0
- package/src/consolidation-operator.ts +182 -0
- package/src/consolidation-provenance-check.ts +551 -0
- package/src/consolidation-undo.ts +718 -0
- package/src/contradiction/contradiction-judge.test.ts +189 -0
- package/src/contradiction/contradiction-judge.ts +333 -0
- package/src/contradiction/contradiction-review.ts +574 -0
- package/src/contradiction/contradiction-scan.ts +504 -0
- package/src/contradiction/contradiction.test.ts +2230 -0
- package/src/contradiction/index.ts +37 -0
- package/src/contradiction/resolution.ts +383 -0
- package/src/conversation-index/backend.ts +323 -0
- package/src/conversation-index/chunker.ts +47 -0
- package/src/conversation-index/cleanup.ts +53 -0
- package/src/conversation-index/faiss-adapter.ts +384 -0
- package/src/conversation-index/indexer.test.ts +164 -0
- package/src/conversation-index/indexer.ts +192 -0
- package/src/conversation-index/search.ts +37 -0
- package/src/cross-namespace-budget.test.ts +275 -0
- package/src/cross-namespace-budget.ts +365 -0
- package/src/cue-anchors.ts +163 -0
- package/src/curation/index.ts +544 -0
- package/src/dashboard-runtime.ts +337 -0
- package/src/day-summary.ts +122 -0
- package/src/dedup/index.ts +330 -0
- package/src/dedup/semantic.test.ts +1577 -0
- package/src/dedup/semantic.ts +148 -0
- package/src/delinearize.ts +193 -0
- package/src/direct-answer-wiring.test.ts +473 -0
- package/src/direct-answer-wiring.ts +180 -0
- package/src/direct-answer.test.ts +484 -0
- package/src/direct-answer.ts +273 -0
- package/src/embedding-fallback.ts +565 -0
- package/src/enrichment/audit.ts +89 -0
- package/src/enrichment/index.ts +27 -0
- package/src/enrichment/pipeline.ts +197 -0
- package/src/enrichment/provider-registry.ts +85 -0
- package/src/enrichment/types.ts +100 -0
- package/src/enrichment/web-search-provider.ts +63 -0
- package/src/entity-retrieval.ts +774 -0
- package/src/entity-schema.ts +239 -0
- package/src/evals.ts +1312 -0
- package/src/event-order-recall.test.ts +4164 -0
- package/src/event-order-recall.ts +2802 -0
- package/src/evidence-pack.test.ts +89 -0
- package/src/evidence-pack.ts +388 -0
- package/src/explicit-capture.ts +530 -0
- package/src/explicit-cue-recall.test.ts +3019 -0
- package/src/explicit-cue-recall.ts +5545 -0
- package/src/extraction-judge-telemetry.ts +234 -0
- package/src/extraction-judge-training.ts +221 -0
- package/src/extraction-judge.ts +846 -0
- package/src/extraction-timeout.test.ts +265 -0
- package/src/extraction.ts +2719 -0
- package/src/fallback-llm.test.ts +1060 -0
- package/src/fallback-llm.ts +918 -0
- package/src/focused-list-recall.test.ts +734 -0
- package/src/focused-list-recall.ts +1160 -0
- package/src/graph-dashboard-diff.ts +35 -0
- package/src/graph-dashboard-key.ts +5 -0
- package/src/graph-dashboard-parser.ts +104 -0
- package/src/graph-edge-reinforcement.ts +192 -0
- package/src/graph-events.ts +151 -0
- package/src/graph-recall.test.ts +164 -0
- package/src/graph-recall.ts +189 -0
- package/src/graph-retrieval.test.ts +809 -0
- package/src/graph-retrieval.ts +823 -0
- package/src/graph-snapshot.ts +329 -0
- package/src/graph.ts +813 -0
- package/src/harmonic-retrieval.ts +223 -0
- package/src/himem.ts +154 -0
- package/src/hygiene.ts +87 -0
- package/src/identity-continuity.ts +333 -0
- package/src/importance.ts +328 -0
- package/src/importers/base.test.ts +294 -0
- package/src/importers/base.ts +436 -0
- package/src/importers/index.ts +21 -0
- package/src/index.ts +1204 -0
- package/src/intent.ts +154 -0
- package/src/json-extract.ts +85 -0
- package/src/json-store.ts +42 -0
- package/src/lcm/archive.ts +617 -0
- package/src/lcm/dag.ts +199 -0
- package/src/lcm/engine.ts +645 -0
- package/src/lcm/index.ts +7 -0
- package/src/lcm/queue.test.ts +178 -0
- package/src/lcm/queue.ts +200 -0
- package/src/lcm/recall.ts +117 -0
- package/src/lcm/schema.ts +154 -0
- package/src/lcm/summarizer.ts +235 -0
- package/src/lcm/tools.ts +191 -0
- package/src/lcm-engine.test.ts +660 -0
- package/src/legacy-hook-compat.test.ts +20 -0
- package/src/legacy-hook-compat.ts +45 -0
- package/src/lifecycle.ts +289 -0
- package/src/live-connectors-runner.ts +385 -0
- package/src/local-llm-qos.test.ts +303 -0
- package/src/local-llm-thinking.test.ts +292 -0
- package/src/local-llm.ts +1464 -0
- package/src/logger.ts +49 -0
- package/src/maintenance/archive-observations.ts +147 -0
- package/src/maintenance/backup-stamp.ts +3 -0
- package/src/maintenance/dreams-ledger.ts +516 -0
- package/src/maintenance/first-start-migration.ts +362 -0
- package/src/maintenance/forget.test.ts +206 -0
- package/src/maintenance/forget.ts +126 -0
- package/src/maintenance/graph-edge-decay.test.ts +409 -0
- package/src/maintenance/graph-edge-decay.ts +394 -0
- package/src/maintenance/memory-governance-cron.ts +447 -0
- package/src/maintenance/memory-governance.ts +1039 -0
- package/src/maintenance/migrate-observations.ts +216 -0
- package/src/maintenance/observation-ledger-utils.ts +54 -0
- package/src/maintenance/pattern-reinforcement.test.ts +875 -0
- package/src/maintenance/pattern-reinforcement.ts +369 -0
- package/src/maintenance/purge.ts +334 -0
- package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +78 -0
- package/src/maintenance/rebuild-memory-projection.ts +1234 -0
- package/src/maintenance/rebuild-observations.ts +178 -0
- package/src/maintenance/tier-stats.test.ts +378 -0
- package/src/maintenance/tier-stats.ts +222 -0
- package/src/mcp-memory-inspector-app.ts +421 -0
- package/src/memory-action-policy.ts +80 -0
- package/src/memory-cache.ts +208 -0
- package/src/memory-extension/claude-code-publisher.ts +51 -0
- package/src/memory-extension/codex-publisher.ts +149 -0
- package/src/memory-extension/hermes-publisher.ts +51 -0
- package/src/memory-extension/index.ts +100 -0
- package/src/memory-extension/shared-instructions.ts +133 -0
- package/src/memory-extension/types.ts +86 -0
- package/src/memory-extension-host/host-discovery.ts +276 -0
- package/src/memory-extension-host/index.ts +14 -0
- package/src/memory-extension-host/render-extensions-block.ts +73 -0
- package/src/memory-extension-host/types.ts +21 -0
- package/src/memory-lifecycle-ledger-utils.ts +116 -0
- package/src/memory-projection-format.ts +11 -0
- package/src/memory-projection-store.ts +951 -0
- package/src/memory-provenance.test.ts +196 -0
- package/src/memory-provenance.ts +484 -0
- package/src/memory-worth-bench.test.ts +71 -0
- package/src/memory-worth-bench.ts +265 -0
- package/src/memory-worth-filter.test.ts +209 -0
- package/src/memory-worth-filter.ts +204 -0
- package/src/memory-worth-frontmatter.test.ts +311 -0
- package/src/memory-worth-outcomes.test.ts +316 -0
- package/src/memory-worth-outcomes.ts +286 -0
- package/src/memory-worth.test.ts +317 -0
- package/src/memory-worth.ts +215 -0
- package/src/message-parts/index.ts +806 -0
- package/src/message-parts/message-parts.test.ts +421 -0
- package/src/migrate/from-engram.ts +789 -0
- package/src/model-registry.ts +313 -0
- package/src/models-json.ts +76 -0
- package/src/namespaces/migrate.ts +187 -0
- package/src/namespaces/path.ts +25 -0
- package/src/namespaces/principal.test.ts +195 -0
- package/src/namespaces/principal.ts +86 -0
- package/src/namespaces/search.test.ts +105 -0
- package/src/namespaces/search.ts +233 -0
- package/src/namespaces/storage.ts +74 -0
- package/src/native-knowledge.ts +1823 -0
- package/src/negative.ts +72 -0
- package/src/network/tailscale.ts +179 -0
- package/src/network/webdav.ts +385 -0
- package/src/objective-state-writers.ts +951 -0
- package/src/objective-state.ts +320 -0
- package/src/onboarding/index.ts +529 -0
- package/src/openai-chat-compat.ts +56 -0
- package/src/operator-toolkit.ts +2132 -0
- package/src/opik-exporter.test.ts +72 -0
- package/src/opik-exporter.ts +587 -0
- package/src/orchestrator-extraction-queue.test.ts +197 -0
- package/src/orchestrator-flush.test.ts +1171 -0
- package/src/orchestrator-pattern-reinforcement.test.ts +128 -0
- package/src/orchestrator-source-attribution.test.ts +701 -0
- package/src/orchestrator.ts +16368 -0
- package/src/page-versioning.ts +450 -0
- package/src/patterns-cli.ts +574 -0
- package/src/peers/index.ts +54 -0
- package/src/peers/migrate-from-identity-anchor.test.ts +291 -0
- package/src/peers/migrate-from-identity-anchor.ts +350 -0
- package/src/peers/peers.test.ts +419 -0
- package/src/peers/profile-reasoner.ts +694 -0
- package/src/peers/storage.ts +1350 -0
- package/src/peers/types.ts +138 -0
- package/src/plugin-id.ts +84 -0
- package/src/policy-runtime.ts +209 -0
- package/src/procedural/procedure-miner.ts +150 -0
- package/src/procedural/procedure-recall.ts +93 -0
- package/src/procedural/procedure-stats.ts +213 -0
- package/src/procedural/procedure-types.ts +132 -0
- package/src/procedural/reinforcement-core.test.ts +132 -0
- package/src/procedural/reinforcement-core.ts +73 -0
- package/src/profiling.test.ts +263 -0
- package/src/profiling.ts +435 -0
- package/src/projection/index.ts +398 -0
- package/src/qmd-recall-cache.test.ts +138 -0
- package/src/qmd-recall-cache.ts +111 -0
- package/src/qmd.test.ts +258 -0
- package/src/qmd.ts +2614 -0
- package/src/reasoning-trace-recall.ts +201 -0
- package/src/reasoning-trace-types.ts +235 -0
- package/src/recall-audit-anomaly.test.ts +246 -0
- package/src/recall-audit-anomaly.ts +297 -0
- package/src/recall-audit.test.ts +51 -0
- package/src/recall-audit.ts +72 -0
- package/src/recall-budget-config.test.ts +87 -0
- package/src/recall-disclosure-escalation.test.ts +196 -0
- package/src/recall-disclosure-escalation.ts +158 -0
- package/src/recall-disclosure-shaping.test.ts +146 -0
- package/src/recall-disclosure.test.ts +214 -0
- package/src/recall-explain-renderer.test.ts +140 -0
- package/src/recall-explain-renderer.ts +356 -0
- package/src/recall-mmr.test.ts +808 -0
- package/src/recall-mmr.ts +607 -0
- package/src/recall-qos.test.ts +85 -0
- package/src/recall-qos.ts +82 -0
- package/src/recall-query-policy.ts +221 -0
- package/src/recall-state.test.ts +233 -0
- package/src/recall-state.ts +456 -0
- package/src/recall-tag-filter.ts +143 -0
- package/src/recall-tokenization.ts +35 -0
- package/src/recall-xray-cli.test.ts +118 -0
- package/src/recall-xray-cli.ts +100 -0
- package/src/recall-xray-disclosure-telemetry.test.ts +183 -0
- package/src/recall-xray-renderer.test.ts +539 -0
- package/src/recall-xray-renderer.ts +487 -0
- package/src/recall-xray.test.ts +503 -0
- package/src/recall-xray.ts +621 -0
- package/src/reconstruct.ts +41 -0
- package/src/release-changelog.ts +35 -0
- package/src/relevance.ts +67 -0
- package/src/replay/normalizers/chatgpt.ts +133 -0
- package/src/replay/normalizers/claude.ts +102 -0
- package/src/replay/normalizers/openclaw.ts +119 -0
- package/src/replay/normalizers/shared.ts +69 -0
- package/src/replay/runner.ts +197 -0
- package/src/replay/types.ts +143 -0
- package/src/rerank.test.ts +48 -0
- package/src/rerank.ts +176 -0
- package/src/resolve-auth-token.test.ts +226 -0
- package/src/resolve-auth-token.ts +151 -0
- package/src/resolve-provider-secret.test.ts +187 -0
- package/src/resolve-provider-secret.ts +410 -0
- package/src/response-guidance-recall.test.ts +3952 -0
- package/src/response-guidance-recall.ts +4431 -0
- package/src/resume-bundles.ts +415 -0
- package/src/retrieval-agents.ts +623 -0
- package/src/retrieval-tiers.ts +25 -0
- package/src/retrieval.ts +104 -0
- package/src/review/index.test.ts +201 -0
- package/src/review/index.ts +536 -0
- package/src/routing/engine.ts +162 -0
- package/src/routing/store.ts +321 -0
- package/src/runtime/better-sqlite.test.ts +32 -0
- package/src/runtime/better-sqlite.ts +76 -0
- package/src/runtime/child-process.ts +67 -0
- package/src/runtime/env.ts +48 -0
- package/src/sanitize.ts +58 -0
- package/src/schemas.ts +449 -0
- package/src/sdk-compat.ts +87 -0
- package/src/search/document-scanner.ts +96 -0
- package/src/search/embed-helper.ts +142 -0
- package/src/search/factory.ts +189 -0
- package/src/search/index.ts +10 -0
- package/src/search/lancedb-backend.ts +342 -0
- package/src/search/meilisearch-backend.ts +232 -0
- package/src/search/noop-backend.ts +57 -0
- package/src/search/orama-backend.ts +358 -0
- package/src/search/port.ts +86 -0
- package/src/search/remote-backend.ts +124 -0
- package/src/secure-store/cipher.ts +271 -0
- package/src/secure-store/cli-handlers.ts +355 -0
- package/src/secure-store/cli-renderer.ts +131 -0
- package/src/secure-store/header.ts +373 -0
- package/src/secure-store/index.ts +137 -0
- package/src/secure-store/kdf.ts +263 -0
- package/src/secure-store/keyring.ts +106 -0
- package/src/secure-store/metadata.ts +394 -0
- package/src/secure-store/passphrase-reader.ts +252 -0
- package/src/secure-store/secure-fs.ts +571 -0
- package/src/secure-store/secure-store.test.ts +755 -0
- package/src/semantic-chunking.ts +545 -0
- package/src/semantic-consolidation.test.ts +182 -0
- package/src/semantic-consolidation.ts +432 -0
- package/src/semantic-rule-promotion.ts +183 -0
- package/src/semantic-rule-verifier.ts +160 -0
- package/src/session-integrity.ts +569 -0
- package/src/session-observer-bands.ts +11 -0
- package/src/session-observer-state.ts +346 -0
- package/src/session-toggles.test.ts +96 -0
- package/src/session-toggles.ts +159 -0
- package/src/shared-context/manager.ts +810 -0
- package/src/signal.ts +84 -0
- package/src/skills-registry.test.ts +277 -0
- package/src/skills-registry.ts +120 -0
- package/src/source-attribution-roundtrip.test.ts +215 -0
- package/src/source-attribution.test.ts +1425 -0
- package/src/source-attribution.ts +639 -0
- package/src/spaces/index.ts +627 -0
- package/src/storage-paths.ts +117 -0
- package/src/storage.ts +6657 -0
- package/src/store-contract.ts +55 -0
- package/src/summarizer.ts +844 -0
- package/src/summary-snapshot.test.ts +681 -0
- package/src/summary-snapshot.ts +238 -0
- package/src/surfaces/dreams.test.ts +394 -0
- package/src/surfaces/dreams.ts +346 -0
- package/src/surfaces/heartbeat.test.ts +415 -0
- package/src/surfaces/heartbeat.ts +325 -0
- package/src/sync/index.ts +308 -0
- package/src/targeted-fact-recall.test.ts +1694 -0
- package/src/targeted-fact-recall.ts +2905 -0
- package/src/taxonomy/default-taxonomy.ts +87 -0
- package/src/taxonomy/index.ts +26 -0
- package/src/taxonomy/resolver-doc-generator.ts +57 -0
- package/src/taxonomy/resolver.ts +184 -0
- package/src/taxonomy/taxonomy-loader.ts +186 -0
- package/src/taxonomy/types.ts +48 -0
- package/src/telemetry-transcript.ts +70 -0
- package/src/temporal-index.ts +890 -0
- package/src/temporal-supersession.test.ts +2703 -0
- package/src/temporal-supersession.ts +493 -0
- package/src/temporal-validity.test.ts +448 -0
- package/src/temporal-validity.ts +123 -0
- package/src/threading.ts +395 -0
- package/src/tier-migration.ts +124 -0
- package/src/tier-routing.ts +102 -0
- package/src/tmt.ts +462 -0
- package/src/tokens.test.ts +178 -0
- package/src/tokens.ts +279 -0
- package/src/topics.ts +147 -0
- package/src/training-export/cli-date-validation.test.ts +258 -0
- package/src/training-export/converter.test.ts +452 -0
- package/src/training-export/converter.ts +319 -0
- package/src/training-export/date-parse.ts +117 -0
- package/src/training-export/index.ts +26 -0
- package/src/training-export/registry.test.ts +85 -0
- package/src/training-export/registry.ts +57 -0
- package/src/training-export/types.ts +31 -0
- package/src/transcript.ts +1179 -0
- package/src/transfer/autodetect.ts +30 -0
- package/src/transfer/backup.ts +138 -0
- package/src/transfer/capsule-crypto.ts +485 -0
- package/src/transfer/capsule-encrypt.test.ts +690 -0
- package/src/transfer/capsule-export.ts +543 -0
- package/src/transfer/capsule-fork.ts +375 -0
- package/src/transfer/capsule-import.ts +564 -0
- package/src/transfer/capsule-merge.ts +433 -0
- package/src/transfer/conflict-policy.ts +16 -0
- package/src/transfer/constants.ts +13 -0
- package/src/transfer/exclusions.ts +37 -0
- package/src/transfer/export-json.ts +65 -0
- package/src/transfer/export-md.ts +59 -0
- package/src/transfer/export-sqlite.ts +52 -0
- package/src/transfer/fs-utils.ts +269 -0
- package/src/transfer/import-json.ts +108 -0
- package/src/transfer/import-md.ts +84 -0
- package/src/transfer/import-sqlite.ts +100 -0
- package/src/transfer/integrity.ts +71 -0
- package/src/transfer/sqlite-schema.ts +16 -0
- package/src/transfer/types.ts +297 -0
- package/src/trust-zones.ts +1186 -0
- package/src/types.ts +3074 -0
- package/src/user-model.test.ts +124 -0
- package/src/user-model.ts +162 -0
- package/src/utility-learner.ts +353 -0
- package/src/utility-runtime.ts +88 -0
- package/src/utility-telemetry.ts +215 -0
- package/src/utils/category-dir.ts +44 -0
- package/src/utils/errno.ts +6 -0
- package/src/utils/iso-timestamp.test.ts +37 -0
- package/src/utils/iso-timestamp.ts +164 -0
- package/src/utils/path.ts +26 -0
- package/src/verified-recall.ts +138 -0
- package/src/version-utils.test.ts +10 -0
- package/src/version-utils.ts +9 -0
- package/src/whitespace.ts +10 -0
- package/src/work/board.ts +359 -0
- package/src/work/boundary.ts +107 -0
- package/src/work/storage.ts +436 -0
- package/src/work/types.ts +82 -0
- package/src/work-product-ledger.ts +265 -0
- package/dist/access-service-DDjzFALq.d.ts +0 -2088
- package/dist/capsule-crypto-SJS5VVAP.js +0 -18
- package/dist/capsule-export-7QNCBZOQ.js +0 -17
- package/dist/capsule-import-EPBHD2EN.js +0 -16
- package/dist/capsule-merge-DI7PNQ2H.js +0 -189
- package/dist/chunk-23ZZK64Y.js +0 -26
- package/dist/chunk-23ZZK64Y.js.map +0 -1
- package/dist/chunk-242S3I2A.js +0 -647
- package/dist/chunk-2LGMW3DJ.js +0 -111
- package/dist/chunk-3B6KIRBH.js +0 -5213
- package/dist/chunk-3B6KIRBH.js.map +0 -1
- package/dist/chunk-457A4P3L.js +0 -119
- package/dist/chunk-457A4P3L.js.map +0 -1
- package/dist/chunk-4IS4SXIQ.js +0 -2040
- package/dist/chunk-4YM32CRU.js +0 -721
- package/dist/chunk-6TBWYBJ3.js +0 -236
- package/dist/chunk-74EMIVE4.js +0 -329
- package/dist/chunk-74EMIVE4.js.map +0 -1
- package/dist/chunk-767ODGE6.js +0 -183
- package/dist/chunk-7V22HTMD.js +0 -623
- package/dist/chunk-7V22HTMD.js.map +0 -1
- package/dist/chunk-7ZM3BFKK.js +0 -9705
- package/dist/chunk-7ZM3BFKK.js.map +0 -1
- package/dist/chunk-AQJNPMOA.js +0 -643
- package/dist/chunk-AQJNPMOA.js.map +0 -1
- package/dist/chunk-ASAITVLA.js +0 -64
- package/dist/chunk-ASAITVLA.js.map +0 -1
- package/dist/chunk-BBE34QBJ.js +0 -275
- package/dist/chunk-BBE34QBJ.js.map +0 -1
- package/dist/chunk-BZSQEPRW.js +0 -14710
- package/dist/chunk-BZSQEPRW.js.map +0 -1
- package/dist/chunk-CPKTBRS2.js +0 -891
- package/dist/chunk-CPKTBRS2.js.map +0 -1
- package/dist/chunk-D4GAOFF6.js +0 -562
- package/dist/chunk-D4GAOFF6.js.map +0 -1
- package/dist/chunk-D54LZC5L.js +0 -147
- package/dist/chunk-DF3RVK3X.js +0 -119
- package/dist/chunk-DF3RVK3X.js.map +0 -1
- package/dist/chunk-DZZPC36E.js +0 -1451
- package/dist/chunk-DZZPC36E.js.map +0 -1
- package/dist/chunk-E2UCDP5S.js +0 -570
- package/dist/chunk-E6K4NIEU.js +0 -747
- package/dist/chunk-E6K4NIEU.js.map +0 -1
- package/dist/chunk-EEQLFRUM.js +0 -89
- package/dist/chunk-ETOW6ACV.js +0 -158
- package/dist/chunk-ETOW6ACV.js.map +0 -1
- package/dist/chunk-FMEBPEAO.js +0 -347
- package/dist/chunk-FMEBPEAO.js.map +0 -1
- package/dist/chunk-FQDPCE3I.js +0 -1837
- package/dist/chunk-FQDPCE3I.js.map +0 -1
- package/dist/chunk-FYIYMQ5N.js +0 -221
- package/dist/chunk-FYIYMQ5N.js.map +0 -1
- package/dist/chunk-G2WADRQ3.js +0 -219
- package/dist/chunk-G4SK7DSQ.js +0 -121
- package/dist/chunk-GVPWB7EY.js +0 -390
- package/dist/chunk-GVPWB7EY.js.map +0 -1
- package/dist/chunk-HELQZFZO.js +0 -1075
- package/dist/chunk-HL5LRPNA.js +0 -1914
- package/dist/chunk-HL5LRPNA.js.map +0 -1
- package/dist/chunk-HQZVVSVB.js +0 -147
- package/dist/chunk-HQZVVSVB.js.map +0 -1
- package/dist/chunk-HY3L4WKC.js +0 -2195
- package/dist/chunk-HY3L4WKC.js.map +0 -1
- package/dist/chunk-IB3BFHGN.js +0 -228
- package/dist/chunk-IXEJRKCZ.js +0 -18
- package/dist/chunk-JBMSGZEQ.js +0 -441
- package/dist/chunk-JBMSGZEQ.js.map +0 -1
- package/dist/chunk-JESOB2HO.js +0 -108
- package/dist/chunk-JKDVIE52.js +0 -272
- package/dist/chunk-JRNQ3RNA.js +0 -284
- package/dist/chunk-JRNQ3RNA.js.map +0 -1
- package/dist/chunk-K6WK37A6.js +0 -865
- package/dist/chunk-K6WK37A6.js.map +0 -1
- package/dist/chunk-MARWOCVP.js +0 -48
- package/dist/chunk-MNU6ZBWT.js +0 -4454
- package/dist/chunk-MNU6ZBWT.js.map +0 -1
- package/dist/chunk-N5AKDXAI.js +0 -74
- package/dist/chunk-OA3L7BFR.js +0 -183
- package/dist/chunk-OA3L7BFR.js.map +0 -1
- package/dist/chunk-OR64ZGRZ.js +0 -23
- package/dist/chunk-P77UEOU2.js +0 -1521
- package/dist/chunk-P77UEOU2.js.map +0 -1
- package/dist/chunk-PH4C2U43.js +0 -239
- package/dist/chunk-PH4C2U43.js.map +0 -1
- package/dist/chunk-RVPLBATS.js +0 -1586
- package/dist/chunk-RVPLBATS.js.map +0 -1
- package/dist/chunk-U5JMRGKX.js +0 -340
- package/dist/chunk-U5JMRGKX.js.map +0 -1
- package/dist/chunk-URB2WSKZ.js +0 -350
- package/dist/chunk-URB2WSKZ.js.map +0 -1
- package/dist/chunk-UVMUAWVT.js +0 -596
- package/dist/chunk-WEJG4TB5.js +0 -118
- package/dist/chunk-X7HPGUVG.js +0 -271
- package/dist/chunk-XAMBKFQS.js +0 -2777
- package/dist/chunk-XAMBKFQS.js.map +0 -1
- package/dist/chunk-XJKFSSDW.js +0 -726
- package/dist/chunk-XJKFSSDW.js.map +0 -1
- package/dist/chunk-XMHBH5H6.js +0 -283
- package/dist/chunk-XMHBH5H6.js.map +0 -1
- package/dist/chunk-XMVFHBHT.js +0 -277
- package/dist/chunk-Y3VMVTYX.js +0 -53
- package/dist/chunk-YNB73F22.js +0 -137
- package/dist/chunk-YNB73F22.js.map +0 -1
- package/dist/chunk-Z2E7VW55.js +0 -335
- package/dist/chunk-Z2E7VW55.js.map +0 -1
- package/dist/chunk-ZG7PTKBK.js +0 -2296
- package/dist/chunk-ZNQN6ZTA.js +0 -135
- package/dist/chunk-ZVTKDVVM.js +0 -827
- package/dist/chunk-ZVTKDVVM.js.map +0 -1
- package/dist/cli-BR8KpIU0.d.ts +0 -1259
- package/dist/codex-materialize-CQlLTzke.d.ts +0 -139
- package/dist/connectors-cli-DFGtY2DB.d.ts +0 -257
- package/dist/contradiction-review-5LTTVDQV.js +0 -22
- package/dist/contradiction-scan-QTXAMBUA.js +0 -414
- package/dist/contradiction-scan-QTXAMBUA.js.map +0 -1
- package/dist/engine-35M5BKQ7.js +0 -28
- package/dist/fs-utils-IRVUFB6G.js +0 -30
- package/dist/graph-edge-decay-PWB63GRE.js +0 -207
- package/dist/memory-governance-IMPQZXFC.js +0 -37
- package/dist/memory-projection-store-CY8TU40w.d.ts +0 -222
- package/dist/orchestrator-DDMPqU6R.d.ts +0 -1792
- package/dist/path-RMTY5Y5A.js +0 -9
- package/dist/port-B6VEDIkC.d.ts +0 -53
- package/dist/resolution-YGIBORXI.js +0 -101
- package/dist/resolution-YGIBORXI.js.map +0 -1
- package/dist/secure-store-4R2GSO7S.js +0 -156
- package/dist/semantic-consolidation-ByBXb-sf.d.ts +0 -180
- package/dist/state-store-3EH7HYIN.js +0 -16
- package/dist/types-V3FJ26TF.js +0 -30
- /package/dist/{capsule-crypto-SJS5VVAP.js.map → adapters/claude-code.js.map} +0 -0
- /package/dist/{capsule-export-7QNCBZOQ.js.map → adapters/codex.js.map} +0 -0
- /package/dist/{capsule-import-EPBHD2EN.js.map → adapters/hermes.js.map} +0 -0
- /package/dist/{contradiction-review-5LTTVDQV.js.map → adapters/index.js.map} +0 -0
- /package/dist/{engine-35M5BKQ7.js.map → adapters/registry.js.map} +0 -0
- /package/dist/{fs-utils-IRVUFB6G.js.map → adapters/replit.js.map} +0 -0
- /package/dist/{memory-governance-IMPQZXFC.js.map → adapters/types.js.map} +0 -0
- /package/dist/{path-RMTY5Y5A.js.map → capsule-crypto-5CYAGVC5.js.map} +0 -0
- /package/dist/{capsule-merge-DI7PNQ2H.js.map → capsule-merge-4MGKE7C5.js.map} +0 -0
- /package/dist/{chunk-G4SK7DSQ.js.map → chunk-2WWLHTZY.js.map} +0 -0
- /package/dist/{chunk-X7HPGUVG.js.map → chunk-4CRG46BG.js.map} +0 -0
- /package/dist/{chunk-UVMUAWVT.js.map → chunk-7IASACLB.js.map} +0 -0
- /package/dist/{chunk-HELQZFZO.js.map → chunk-EDTHC6UD.js.map} +0 -0
- /package/dist/{chunk-4YM32CRU.js.map → chunk-EFJ3MQ4V.js.map} +0 -0
- /package/dist/{chunk-E2UCDP5S.js.map → chunk-FBYESMQ2.js.map} +0 -0
- /package/dist/{chunk-D54LZC5L.js.map → chunk-FDU6HUUL.js.map} +0 -0
- /package/dist/{chunk-IB3BFHGN.js.map → chunk-GGKRUQOO.js.map} +0 -0
- /package/dist/{chunk-242S3I2A.js.map → chunk-GL6I6MEQ.js.map} +0 -0
- /package/dist/{secure-store-4R2GSO7S.js.map → chunk-HHLLAQGZ.js.map} +0 -0
- /package/dist/{chunk-4IS4SXIQ.js.map → chunk-HXXBL2KD.js.map} +0 -0
- /package/dist/{chunk-767ODGE6.js.map → chunk-KNKUID7G.js.map} +0 -0
- /package/dist/{chunk-6TBWYBJ3.js.map → chunk-LPMVBPA3.js.map} +0 -0
- /package/dist/{chunk-WEJG4TB5.js.map → chunk-MC26UJIM.js.map} +0 -0
- /package/dist/{chunk-JKDVIE52.js.map → chunk-MGKYQQYF.js.map} +0 -0
- /package/dist/{chunk-Y3VMVTYX.js.map → chunk-MT4HVDUZ.js.map} +0 -0
- /package/dist/{chunk-G2WADRQ3.js.map → chunk-MY6TPVXW.js.map} +0 -0
- /package/dist/{chunk-OR64ZGRZ.js.map → chunk-NNVTUXEB.js.map} +0 -0
- /package/dist/{chunk-JESOB2HO.js.map → chunk-P4NEIHUT.js.map} +0 -0
- /package/dist/{chunk-IXEJRKCZ.js.map → chunk-QRNI5JBH.js.map} +0 -0
- /package/dist/{chunk-EEQLFRUM.js.map → chunk-RRF5UOBJ.js.map} +0 -0
- /package/dist/{state-store-3EH7HYIN.js.map → chunk-SEDEKFYQ.js.map} +0 -0
- /package/dist/{chunk-2LGMW3DJ.js.map → chunk-U3PN77QT.js.map} +0 -0
- /package/dist/{chunk-XMVFHBHT.js.map → chunk-U3WSW6PZ.js.map} +0 -0
- /package/dist/{chunk-N5AKDXAI.js.map → chunk-UWVJF25J.js.map} +0 -0
- /package/dist/{types-V3FJ26TF.js.map → chunk-V5OCT34X.js.map} +0 -0
- /package/dist/{chunk-ZG7PTKBK.js.map → chunk-W3LR522O.js.map} +0 -0
- /package/dist/{chunk-MARWOCVP.js.map → chunk-XIG5PDM7.js.map} +0 -0
- /package/dist/{chunk-ZNQN6ZTA.js.map → chunk-XVZ7B3HG.js.map} +0 -0
- /package/dist/{graph-edge-decay-PWB63GRE.js.map → graph-edge-decay-5DI5GUNL.js.map} +0 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern-reinforcement maintenance job (issue #687 PR 2/4).
|
|
3
|
+
*
|
|
4
|
+
* Reads all memories via `StorageManager.readAllMemories()`, clusters
|
|
5
|
+
* non-procedural memories by normalized content, and reinforces the
|
|
6
|
+
* most-recent member of each large-enough cluster:
|
|
7
|
+
*
|
|
8
|
+
* 1. Cluster across active AND already-superseded members. This is
|
|
9
|
+
* load-bearing: after the first reinforcement pass, older
|
|
10
|
+
* duplicates are marked `superseded`, so on the next pass the
|
|
11
|
+
* "active count" alone would be just `canonical + N-new`. By
|
|
12
|
+
* keeping superseded members in the cluster for the threshold
|
|
13
|
+
* check, an established canonical (count >= minCount) keeps
|
|
14
|
+
* growing as soon as a single new duplicate arrives.
|
|
15
|
+
* `forgotten` / `archived` / `quarantined` / `pending_review` /
|
|
16
|
+
* `rejected` stay excluded per CLAUDE.md rule 53.
|
|
17
|
+
* 2. Pick the most-recent ACTIVE member of each cluster as the
|
|
18
|
+
* canonical. Stamp it with `reinforcement_count` (total cluster
|
|
19
|
+
* size including superseded members) and `last_reinforced_at`.
|
|
20
|
+
* Record provenance: `derived_from = [...source-ids...]` and
|
|
21
|
+
* `derived_via = "pattern-reinforcement"`.
|
|
22
|
+
* 3. Mark any still-active duplicates with `status: "superseded"`
|
|
23
|
+
* and point `supersededBy` at the canonical id.
|
|
24
|
+
*
|
|
25
|
+
* The job is idempotent: re-running on the same corpus does not
|
|
26
|
+
* double-bump `reinforcement_count` (the bump-only-on-change guard
|
|
27
|
+
* compares cluster size to the canonical's previous counter), and
|
|
28
|
+
* already-superseded duplicates simply pass through.
|
|
29
|
+
*
|
|
30
|
+
* Recall integration (boost from `reinforcement_count`) and the CLI
|
|
31
|
+
* surface ship in PR 3/4 and PR 4/4 respectively — this PR only wires
|
|
32
|
+
* the maintenance job and storage plumbing.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
import { clusterByKey } from "../procedural/reinforcement-core.js";
|
|
36
|
+
import type {
|
|
37
|
+
MemoryFile,
|
|
38
|
+
MemoryFrontmatter,
|
|
39
|
+
MemoryStatus,
|
|
40
|
+
} from "../types.js";
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Storage surface the job needs. Defined as a structural interface so
|
|
44
|
+
* tests can pass an in-memory stub without booting a full
|
|
45
|
+
* `StorageManager` (mirrors the pattern in `forget.ts`).
|
|
46
|
+
*/
|
|
47
|
+
export interface PatternReinforcementStorage {
|
|
48
|
+
readAllMemories(): Promise<MemoryFile[]>;
|
|
49
|
+
writeMemoryFrontmatter(
|
|
50
|
+
memory: MemoryFile,
|
|
51
|
+
patch: Partial<MemoryFrontmatter>,
|
|
52
|
+
): Promise<boolean>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface PatternReinforcementOptions {
|
|
56
|
+
/** Categories the job considers (e.g. ["preference", "fact", "decision"]). */
|
|
57
|
+
categories: readonly string[];
|
|
58
|
+
/** Minimum cluster size required to promote a canonical. */
|
|
59
|
+
minCount: number;
|
|
60
|
+
/** ISO 8601 timestamp source. Defaults to `Date.now()`. */
|
|
61
|
+
now?: () => Date;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface PatternReinforcementClusterResult {
|
|
65
|
+
/** Memory id of the canonical (most-recent) member. */
|
|
66
|
+
canonicalId: string;
|
|
67
|
+
/** Cluster size at run time (mirrors `reinforcement_count`). */
|
|
68
|
+
count: number;
|
|
69
|
+
/** IDs of the source memories that contributed (canonical + duplicates). */
|
|
70
|
+
sourceIds: readonly string[];
|
|
71
|
+
/** IDs of the older duplicates that were marked superseded. */
|
|
72
|
+
supersededIds: readonly string[];
|
|
73
|
+
/**
|
|
74
|
+
* `true` when the canonical's `reinforcement_count` actually
|
|
75
|
+
* changed during this run. False when the job converged
|
|
76
|
+
* idempotently (same cluster size as the previous run).
|
|
77
|
+
*/
|
|
78
|
+
reinforcementBumped: boolean;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface PatternReinforcementResult {
|
|
82
|
+
/** Number of clusters that met the `minCount` threshold. */
|
|
83
|
+
clustersFound: number;
|
|
84
|
+
/** Number of canonical memories whose reinforcement counter changed. */
|
|
85
|
+
canonicalsUpdated: number;
|
|
86
|
+
/** Total duplicate memories newly marked `status: "superseded"`. */
|
|
87
|
+
duplicatesSuperseded: number;
|
|
88
|
+
/** Per-cluster details for tests / observability. */
|
|
89
|
+
clusters: PatternReinforcementClusterResult[];
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Cluster key derivation: lowercase + collapse whitespace + truncate to
|
|
94
|
+
* 200 chars. Pure helper so callers and tests can compute the same key
|
|
95
|
+
* without re-implementing the rule.
|
|
96
|
+
*
|
|
97
|
+
* Truncation is intentional — long-form content with a stable opening
|
|
98
|
+
* still clusters together even when the tail differs slightly. 200
|
|
99
|
+
* chars matches the spec.
|
|
100
|
+
*
|
|
101
|
+
* @deprecated Prefer `patternReinforcementClusterKey(category, content)`
|
|
102
|
+
* which partitions by memory category so identical text in different
|
|
103
|
+
* categories does not get cross-superseded (PR #730 review feedback,
|
|
104
|
+
* Codex P2). This bare helper is kept exported for backward
|
|
105
|
+
* compatibility with callers that already partition by category
|
|
106
|
+
* upstream.
|
|
107
|
+
*/
|
|
108
|
+
export function patternReinforcementKey(content: string): string {
|
|
109
|
+
return content.trim().toLowerCase().replace(/\s+/g, " ").slice(0, 200);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Cluster key derivation that includes the memory category as a prefix
|
|
114
|
+
* so identical text under different categories (e.g. `fact` and
|
|
115
|
+
* `decision`) does not collapse into one cluster. Without this,
|
|
116
|
+
* pattern reinforcement would silently supersede a fact when a
|
|
117
|
+
* decision happens to share the same canonical text — distorting
|
|
118
|
+
* downstream category-scoped retrieval and governance behavior (PR
|
|
119
|
+
* #730 review feedback, Codex P2).
|
|
120
|
+
*/
|
|
121
|
+
export function patternReinforcementClusterKey(category: string, content: string): string {
|
|
122
|
+
// Use a `::` separator that cannot appear in either component so
|
|
123
|
+
// a category like `fact` plus content starting with `decision:...`
|
|
124
|
+
// cannot collide with category `decision`.
|
|
125
|
+
return `${category}::${patternReinforcementKey(content)}`;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Compare two memories by their effective timestamp.
|
|
130
|
+
*
|
|
131
|
+
* Parses each timestamp to an *instant* (epoch ms) via `Date.parse`
|
|
132
|
+
* rather than lexicographic `localeCompare` so ISO-8601 variants with
|
|
133
|
+
* non-`Z` offsets (e.g. `2026-04-26T10:00:00+02:00`) and mixed
|
|
134
|
+
* millisecond precision compare by actual time rather than by raw
|
|
135
|
+
* string (PR #730 review feedback, Codex P2). Imported / hand-edited
|
|
136
|
+
* memory files routinely use such variants.
|
|
137
|
+
*
|
|
138
|
+
* Falls back to the raw string when an instant is unparseable (a
|
|
139
|
+
* corrupt frontmatter is rare but possible) and tie-breaks on memory
|
|
140
|
+
* id for stable ordering.
|
|
141
|
+
*/
|
|
142
|
+
function pickCanonical(memories: MemoryFile[]): MemoryFile {
|
|
143
|
+
let best = memories[0];
|
|
144
|
+
let bestInstant = memoryInstant(best);
|
|
145
|
+
let bestStamp = memoryStamp(best);
|
|
146
|
+
for (let i = 1; i < memories.length; i += 1) {
|
|
147
|
+
const candidate = memories[i];
|
|
148
|
+
const instant = memoryInstant(candidate);
|
|
149
|
+
const stamp = memoryStamp(candidate);
|
|
150
|
+
let cmp: number;
|
|
151
|
+
if (instant !== null && bestInstant !== null) {
|
|
152
|
+
cmp = instant - bestInstant;
|
|
153
|
+
} else {
|
|
154
|
+
// One side is unparseable — fall back to lexicographic compare
|
|
155
|
+
// on raw strings. This keeps ordering deterministic even when
|
|
156
|
+
// a corrupt timestamp slipped past the parser.
|
|
157
|
+
cmp = stamp.localeCompare(bestStamp);
|
|
158
|
+
}
|
|
159
|
+
if (cmp > 0 || (cmp === 0 && candidate.frontmatter.id > best.frontmatter.id)) {
|
|
160
|
+
best = candidate;
|
|
161
|
+
bestInstant = instant;
|
|
162
|
+
bestStamp = stamp;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return best;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function memoryStamp(memory: MemoryFile): string {
|
|
169
|
+
// Prefer `updated`, fall back to `created`. Both are ISO-8601 and
|
|
170
|
+
// present on every well-formed memory; the parser default-fills them
|
|
171
|
+
// when absent.
|
|
172
|
+
return memory.frontmatter.updated || memory.frontmatter.created || "";
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Parse a memory's effective timestamp to epoch milliseconds. Returns
|
|
177
|
+
* `null` for an unparseable / empty stamp so callers can fall back to
|
|
178
|
+
* a string compare without observing `NaN` propagation.
|
|
179
|
+
*/
|
|
180
|
+
function memoryInstant(memory: MemoryFile): number | null {
|
|
181
|
+
const stamp = memoryStamp(memory);
|
|
182
|
+
if (stamp.length === 0) return null;
|
|
183
|
+
const parsed = Date.parse(stamp);
|
|
184
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const ACTIVE_STATUS: MemoryStatus = "active";
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Run pattern reinforcement across the configured categories.
|
|
191
|
+
*
|
|
192
|
+
* The function is intentionally pure (modulo the storage handle): no
|
|
193
|
+
* cron scheduling, no telemetry side effects, no logging. Callers
|
|
194
|
+
* (orchestrator cron path / CLI surface in PR 4) own those concerns.
|
|
195
|
+
*/
|
|
196
|
+
export async function runPatternReinforcement(
|
|
197
|
+
storage: PatternReinforcementStorage,
|
|
198
|
+
options: PatternReinforcementOptions,
|
|
199
|
+
): Promise<PatternReinforcementResult> {
|
|
200
|
+
const minCount = Math.max(2, Math.floor(options.minCount));
|
|
201
|
+
const targetCategories = new Set(options.categories);
|
|
202
|
+
const now = options.now ?? (() => new Date());
|
|
203
|
+
const nowIso = now().toISOString();
|
|
204
|
+
|
|
205
|
+
// No-op fast paths so unconfigured callers get a clean result rather
|
|
206
|
+
// than walking the entire corpus.
|
|
207
|
+
if (targetCategories.size === 0) {
|
|
208
|
+
return emptyResult();
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const memories = await storage.readAllMemories();
|
|
212
|
+
|
|
213
|
+
// Cluster across BOTH active and already-superseded memories so a
|
|
214
|
+
// canonical that has previously absorbed duplicates still gets
|
|
215
|
+
// reinforced when a single new duplicate arrives (Codex P1).
|
|
216
|
+
// Without this, the post-first-pass active set is just
|
|
217
|
+
// `canonical + N-new`, which falls below `minCount` for any
|
|
218
|
+
// realistic cadence. CLAUDE.md rule 53 still applies — forgotten,
|
|
219
|
+
// archived, quarantined, pending_review, and rejected memories
|
|
220
|
+
// remain excluded.
|
|
221
|
+
const eligible = memories.filter((m) => {
|
|
222
|
+
if (!targetCategories.has(m.frontmatter.category)) return false;
|
|
223
|
+
const status = m.frontmatter.status ?? ACTIVE_STATUS;
|
|
224
|
+
return status === ACTIVE_STATUS || status === "superseded";
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
if (eligible.length === 0) return emptyResult();
|
|
228
|
+
|
|
229
|
+
// Cluster by `<category> <content>` so identical text in different
|
|
230
|
+
// categories does not get cross-superseded (PR #730 review feedback,
|
|
231
|
+
// Codex P2).
|
|
232
|
+
const clusters = clusterByKey(eligible, (m) =>
|
|
233
|
+
patternReinforcementClusterKey(m.frontmatter.category, m.content),
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
const result: PatternReinforcementResult = {
|
|
237
|
+
clustersFound: 0,
|
|
238
|
+
canonicalsUpdated: 0,
|
|
239
|
+
duplicatesSuperseded: 0,
|
|
240
|
+
clusters: [],
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
for (const cluster of clusters.values()) {
|
|
244
|
+
// The cluster represents the full historical pattern — its size
|
|
245
|
+
// is the threshold the user configured against.
|
|
246
|
+
if (cluster.length < minCount) continue;
|
|
247
|
+
|
|
248
|
+
// Active members are the only ones we can write to (or pick as
|
|
249
|
+
// canonical). If every member is already superseded — e.g. a
|
|
250
|
+
// prior canonical was archived externally — there's nothing to
|
|
251
|
+
// do for this cluster on this pass.
|
|
252
|
+
const activeMembers = cluster.filter((m) => {
|
|
253
|
+
const status = m.frontmatter.status ?? ACTIVE_STATUS;
|
|
254
|
+
return status === ACTIVE_STATUS;
|
|
255
|
+
});
|
|
256
|
+
if (activeMembers.length === 0) continue;
|
|
257
|
+
|
|
258
|
+
result.clustersFound += 1;
|
|
259
|
+
|
|
260
|
+
const canonical = pickCanonical(activeMembers);
|
|
261
|
+
const activeDuplicates = activeMembers.filter((m) => m !== canonical);
|
|
262
|
+
|
|
263
|
+
// Source-id provenance: include the canonical + every member
|
|
264
|
+
// that contributed to the cluster (active and superseded), so
|
|
265
|
+
// the lineage is fully reconstructible. Sort ids
|
|
266
|
+
// deterministically (CLAUDE.md rule 38) so re-runs produce
|
|
267
|
+
// stable on-disk output.
|
|
268
|
+
const sourceIds = [...cluster]
|
|
269
|
+
.map((m) => m.frontmatter.id)
|
|
270
|
+
.filter((id): id is string => typeof id === "string" && id.length > 0)
|
|
271
|
+
.sort();
|
|
272
|
+
|
|
273
|
+
// Use `sourceIds.length` (the filtered, valid-ID set) as the
|
|
274
|
+
// canonical cluster count for both the reinforcement bump guard
|
|
275
|
+
// and the on-disk `reinforcement_count` field. Using the raw
|
|
276
|
+
// `cluster.length` would inflate the metric whenever any member
|
|
277
|
+
// lacks a valid string ID, causing telemetry to diverge from
|
|
278
|
+
// what is actually being reinforced (PR #730 review, Cursor).
|
|
279
|
+
const previousCount = canonical.frontmatter.reinforcement_count ?? 0;
|
|
280
|
+
const newCount = sourceIds.length;
|
|
281
|
+
const reinforcementBumped = newCount > previousCount;
|
|
282
|
+
|
|
283
|
+
// Refresh provenance on the canonical whenever cluster membership
|
|
284
|
+
// changes — even if the cluster size happens to stay constant
|
|
285
|
+
// (e.g. one older member archived externally while a new
|
|
286
|
+
// duplicate arrived). Without this, `derived_from` would
|
|
287
|
+
// silently fall out of sync with the actual contributors and
|
|
288
|
+
// diagnostics would surface false-positive "missing source"
|
|
289
|
+
// signals (PR #730 review feedback, Codex P2).
|
|
290
|
+
const previousDerivedFrom = Array.isArray(canonical.frontmatter.derived_from)
|
|
291
|
+
? [...canonical.frontmatter.derived_from].sort()
|
|
292
|
+
: [];
|
|
293
|
+
const sortedSourceIds = [...sourceIds].sort();
|
|
294
|
+
const membershipChanged =
|
|
295
|
+
previousDerivedFrom.length !== sortedSourceIds.length ||
|
|
296
|
+
previousDerivedFrom.some((id, i) => id !== sortedSourceIds[i]);
|
|
297
|
+
const previousVia = canonical.frontmatter.derived_via;
|
|
298
|
+
const viaChanged = previousVia !== "pattern-reinforcement";
|
|
299
|
+
const canonicalNeedsRefresh =
|
|
300
|
+
reinforcementBumped || membershipChanged || viaChanged;
|
|
301
|
+
|
|
302
|
+
// Patch the canonical when the cluster grew, the cluster
|
|
303
|
+
// membership rotated, or the canonical was previously stamped by
|
|
304
|
+
// a different operator. Idempotent re-runs on a stable corpus
|
|
305
|
+
// (same size, same members, same operator) still produce zero
|
|
306
|
+
// writes.
|
|
307
|
+
//
|
|
308
|
+
// On a provenance-only refresh (membership rotated but count
|
|
309
|
+
// unchanged), preserve the existing `reinforcement_count` and
|
|
310
|
+
// `last_reinforced_at` so they remain monotonic and only advance
|
|
311
|
+
// on genuine reinforcement events (PR #730 review, Codex P2).
|
|
312
|
+
if (canonicalNeedsRefresh) {
|
|
313
|
+
const patch: Partial<MemoryFrontmatter> = {
|
|
314
|
+
derived_from: sourceIds,
|
|
315
|
+
derived_via: "pattern-reinforcement",
|
|
316
|
+
updated: nowIso,
|
|
317
|
+
};
|
|
318
|
+
if (reinforcementBumped) {
|
|
319
|
+
patch.reinforcement_count = newCount;
|
|
320
|
+
patch.last_reinforced_at = nowIso;
|
|
321
|
+
} else {
|
|
322
|
+
// Carry forward the existing values so a provenance-only
|
|
323
|
+
// refresh does not reset or re-timestamp the counter.
|
|
324
|
+
patch.reinforcement_count =
|
|
325
|
+
canonical.frontmatter.reinforcement_count ?? newCount;
|
|
326
|
+
patch.last_reinforced_at =
|
|
327
|
+
canonical.frontmatter.last_reinforced_at ?? nowIso;
|
|
328
|
+
}
|
|
329
|
+
await storage.writeMemoryFrontmatter(canonical, patch);
|
|
330
|
+
result.canonicalsUpdated += 1;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// Supersede any still-active duplicates. Already-superseded
|
|
334
|
+
// members were filtered out above, which doubles as our
|
|
335
|
+
// crash-recovery guard: a previous run that died mid-supersede
|
|
336
|
+
// simply re-runs the active half on the next pass.
|
|
337
|
+
const supersededIds: string[] = [];
|
|
338
|
+
for (const dup of activeDuplicates) {
|
|
339
|
+
const patch: Partial<MemoryFrontmatter> = {
|
|
340
|
+
status: "superseded",
|
|
341
|
+
supersededBy: canonical.frontmatter.id,
|
|
342
|
+
supersededAt: nowIso,
|
|
343
|
+
updated: nowIso,
|
|
344
|
+
};
|
|
345
|
+
await storage.writeMemoryFrontmatter(dup, patch);
|
|
346
|
+
supersededIds.push(dup.frontmatter.id);
|
|
347
|
+
result.duplicatesSuperseded += 1;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
result.clusters.push({
|
|
351
|
+
canonicalId: canonical.frontmatter.id,
|
|
352
|
+
count: newCount,
|
|
353
|
+
sourceIds,
|
|
354
|
+
supersededIds,
|
|
355
|
+
reinforcementBumped,
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
return result;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
function emptyResult(): PatternReinforcementResult {
|
|
363
|
+
return {
|
|
364
|
+
clustersFound: 0,
|
|
365
|
+
canonicalsUpdated: 0,
|
|
366
|
+
duplicatesSuperseded: 0,
|
|
367
|
+
clusters: [],
|
|
368
|
+
};
|
|
369
|
+
}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operator-facing bulk hard-delete (issue #686 retention-completion).
|
|
3
|
+
*
|
|
4
|
+
* `purgeMemories(opts)` hard-deletes memories that are:
|
|
5
|
+
* - older than `olderThanMs` (measured against `updated ?? created`), AND
|
|
6
|
+
* - in the specified tier (`"cold"` or `"all"`), AND
|
|
7
|
+
* - optionally in `status: "forgotten"` only (when `forgottenOnly` is true)
|
|
8
|
+
*
|
|
9
|
+
* Hard-delete means:
|
|
10
|
+
* 1. Remove the file from disk.
|
|
11
|
+
* 2. Trigger a QMD collection update so the index no longer contains it.
|
|
12
|
+
* 3. Append a purge audit entry to the observation ledger.
|
|
13
|
+
*
|
|
14
|
+
* `dryRun: true` (the default) reports what *would* be deleted without
|
|
15
|
+
* actually removing anything — callers must opt into mutations by
|
|
16
|
+
* setting `dryRun: false`.
|
|
17
|
+
*
|
|
18
|
+
* The CLI surface enforces an explicit `--confirm yes` guard and
|
|
19
|
+
* defaults to `--dry-run` to make accidental data loss impossible.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import path from "node:path";
|
|
23
|
+
import { appendFile, mkdir, unlink } from "node:fs/promises";
|
|
24
|
+
import type { StorageManager } from "../storage.js";
|
|
25
|
+
import type { MemoryFile } from "../types.js";
|
|
26
|
+
import type { SearchBackend } from "../search/port.js";
|
|
27
|
+
|
|
28
|
+
export type PurgeTierFilter = "cold" | "all";
|
|
29
|
+
|
|
30
|
+
export interface PurgeMemoriesOptions {
|
|
31
|
+
storage: StorageManager;
|
|
32
|
+
/**
|
|
33
|
+
* Only memories whose `updated ?? created` timestamp is older than this
|
|
34
|
+
* value (in milliseconds, Unix epoch) will be candidates.
|
|
35
|
+
*/
|
|
36
|
+
olderThanMs: number;
|
|
37
|
+
/**
|
|
38
|
+
* `"cold"` — only memories in the cold tier (files under `.../cold/`).
|
|
39
|
+
* `"all"` — memories in any tier (hot, cold, or archived).
|
|
40
|
+
* Default: `"cold"`.
|
|
41
|
+
*/
|
|
42
|
+
tier?: PurgeTierFilter;
|
|
43
|
+
/**
|
|
44
|
+
* When `true`, only memories with `status === "forgotten"` are candidates.
|
|
45
|
+
* Default: `false` (purge by age + tier regardless of status).
|
|
46
|
+
*/
|
|
47
|
+
forgottenOnly?: boolean;
|
|
48
|
+
/** When `true` (default), report candidates but do not delete. */
|
|
49
|
+
dryRun?: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Optional QMD backend. When supplied and `dryRun === false`, a
|
|
52
|
+
* `updateCollection` call is issued after each deletion so the index stays
|
|
53
|
+
* consistent. Pass `undefined` or omit to skip index maintenance (e.g. in
|
|
54
|
+
* tests that don't have a live QMD instance).
|
|
55
|
+
*/
|
|
56
|
+
qmd?: SearchBackend;
|
|
57
|
+
/** Hot-tier QMD collection name (default: `"openclaw-engram"`). */
|
|
58
|
+
hotCollection?: string;
|
|
59
|
+
/** Cold-tier QMD collection name (default: `"openclaw-engram-cold"`). */
|
|
60
|
+
coldCollection?: string;
|
|
61
|
+
/** Optional hook for long-lived hosts to clear their live dedupe mirror after purge hash cleanup. */
|
|
62
|
+
afterFactHashRemoval?: () => void | Promise<void>;
|
|
63
|
+
/** Optional shutdown signal forwarded to QMD collection refreshes. */
|
|
64
|
+
signal?: AbortSignal;
|
|
65
|
+
/** Override clock for tests. */
|
|
66
|
+
now?: () => Date;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface PurgeCandidate {
|
|
70
|
+
id: string;
|
|
71
|
+
path: string;
|
|
72
|
+
tier: "hot" | "cold" | "archive";
|
|
73
|
+
status: string;
|
|
74
|
+
updatedOrCreated: string;
|
|
75
|
+
ageMs: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface PurgeMemoriesResult {
|
|
79
|
+
dryRun: boolean;
|
|
80
|
+
tier: PurgeTierFilter;
|
|
81
|
+
olderThanMs: number;
|
|
82
|
+
candidates: PurgeCandidate[];
|
|
83
|
+
purgedCount: number;
|
|
84
|
+
alreadyAbsentCount: number;
|
|
85
|
+
errorCount: number;
|
|
86
|
+
errors: Array<{ id: string; path: string; error: string }>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function hasErrorCode(err: unknown, code: string): boolean {
|
|
90
|
+
return typeof err === "object" && err !== null && "code" in err && (err as { code?: unknown }).code === code;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function resolveTimestamp(memory: MemoryFile): string {
|
|
94
|
+
const fm = memory.frontmatter as unknown as Record<string, unknown>;
|
|
95
|
+
const updated = typeof fm.updated === "string" ? (fm.updated as string) : "";
|
|
96
|
+
const created = typeof fm.created === "string" ? (fm.created as string) : "";
|
|
97
|
+
return updated.length > 0 ? updated : created;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
async function logPurgeAudit(
|
|
101
|
+
storage: StorageManager,
|
|
102
|
+
candidates: PurgeCandidate[],
|
|
103
|
+
now: Date,
|
|
104
|
+
event: "PURGE_DELETE_INTENT" | "PURGE_HARD_DELETE" | "PURGE_ALREADY_ABSENT" = "PURGE_HARD_DELETE",
|
|
105
|
+
): Promise<void> {
|
|
106
|
+
if (candidates.length === 0) return;
|
|
107
|
+
const ledgerDir = path.join(storage.dir, "state", "observation-ledger");
|
|
108
|
+
await mkdir(ledgerDir, { recursive: true });
|
|
109
|
+
const ledgerPath = path.join(ledgerDir, "purge-audit.jsonl");
|
|
110
|
+
const entries = candidates.map((c) =>
|
|
111
|
+
JSON.stringify({
|
|
112
|
+
event,
|
|
113
|
+
timestamp: now.toISOString(),
|
|
114
|
+
memoryId: c.id,
|
|
115
|
+
path: c.path,
|
|
116
|
+
tier: c.tier,
|
|
117
|
+
status: c.status,
|
|
118
|
+
updatedOrCreated: c.updatedOrCreated,
|
|
119
|
+
}),
|
|
120
|
+
);
|
|
121
|
+
if (entries.length > 0) {
|
|
122
|
+
await appendFile(ledgerPath, `${entries.join("\n")}\n`, "utf-8");
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export async function purgeMemories(
|
|
127
|
+
options: PurgeMemoriesOptions,
|
|
128
|
+
): Promise<PurgeMemoriesResult> {
|
|
129
|
+
const {
|
|
130
|
+
storage,
|
|
131
|
+
olderThanMs,
|
|
132
|
+
tier = "cold",
|
|
133
|
+
forgottenOnly = false,
|
|
134
|
+
dryRun = true,
|
|
135
|
+
qmd,
|
|
136
|
+
hotCollection = "openclaw-engram",
|
|
137
|
+
coldCollection = "openclaw-engram-cold",
|
|
138
|
+
} = options;
|
|
139
|
+
|
|
140
|
+
if (!Number.isFinite(olderThanMs) || olderThanMs <= 0) {
|
|
141
|
+
throw new Error("olderThanMs must be a finite positive number");
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const now = (options.now ?? (() => new Date()))();
|
|
145
|
+
const nowMs = now.getTime();
|
|
146
|
+
|
|
147
|
+
// Collect all memories from applicable tiers
|
|
148
|
+
const [hotMemories, coldMemories, archivedMemories] = await Promise.all([
|
|
149
|
+
tier === "all" ? storage.readAllMemories() : Promise.resolve([]),
|
|
150
|
+
storage.readAllColdMemories(),
|
|
151
|
+
tier === "all" ? storage.readArchivedMemories() : Promise.resolve([]),
|
|
152
|
+
]);
|
|
153
|
+
|
|
154
|
+
const poolEntries: Array<{ memory: MemoryFile; resolvedTier: "hot" | "cold" | "archive" }> = [];
|
|
155
|
+
|
|
156
|
+
if (tier === "all") {
|
|
157
|
+
for (const m of hotMemories) {
|
|
158
|
+
poolEntries.push({ memory: m, resolvedTier: "hot" });
|
|
159
|
+
}
|
|
160
|
+
for (const m of archivedMemories) {
|
|
161
|
+
poolEntries.push({ memory: m, resolvedTier: "archive" });
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
for (const m of coldMemories) {
|
|
165
|
+
poolEntries.push({ memory: m, resolvedTier: "cold" });
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Build candidate list
|
|
169
|
+
const candidates: PurgeCandidate[] = [];
|
|
170
|
+
const candidateMemoriesById = new Map<string, MemoryFile>();
|
|
171
|
+
for (const { memory, resolvedTier } of poolEntries) {
|
|
172
|
+
const ts = resolveTimestamp(memory);
|
|
173
|
+
if (ts.length === 0) continue;
|
|
174
|
+
|
|
175
|
+
const tsMs = Date.parse(ts);
|
|
176
|
+
if (!Number.isFinite(tsMs)) continue;
|
|
177
|
+
|
|
178
|
+
const ageMs = nowMs - tsMs;
|
|
179
|
+
if (ageMs < olderThanMs) continue;
|
|
180
|
+
|
|
181
|
+
const fm = memory.frontmatter as unknown as Record<string, unknown>;
|
|
182
|
+
const status: string =
|
|
183
|
+
typeof fm.status === "string" ? (fm.status as string) : "active";
|
|
184
|
+
|
|
185
|
+
if (forgottenOnly && status !== "forgotten") continue;
|
|
186
|
+
|
|
187
|
+
candidates.push({
|
|
188
|
+
id: memory.frontmatter.id,
|
|
189
|
+
path: memory.path,
|
|
190
|
+
tier: resolvedTier,
|
|
191
|
+
status,
|
|
192
|
+
updatedOrCreated: ts,
|
|
193
|
+
ageMs,
|
|
194
|
+
});
|
|
195
|
+
candidateMemoriesById.set(memory.frontmatter.id, memory);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (dryRun) {
|
|
199
|
+
return {
|
|
200
|
+
dryRun: true,
|
|
201
|
+
tier,
|
|
202
|
+
olderThanMs,
|
|
203
|
+
candidates,
|
|
204
|
+
purgedCount: 0,
|
|
205
|
+
alreadyAbsentCount: 0,
|
|
206
|
+
errorCount: 0,
|
|
207
|
+
errors: [],
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Hard-delete phase
|
|
212
|
+
const errors: Array<{ id: string; path: string; error: string }> = [];
|
|
213
|
+
try {
|
|
214
|
+
await logPurgeAudit(storage, candidates, now, "PURGE_DELETE_INTENT");
|
|
215
|
+
} catch (auditErr) {
|
|
216
|
+
errors.push({
|
|
217
|
+
id: "(purge-audit)",
|
|
218
|
+
path: path.join(storage.dir, "state", "observation-ledger", "purge-audit.jsonl"),
|
|
219
|
+
error: auditErr instanceof Error ? auditErr.message : String(auditErr),
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const actuallyPurged: PurgeCandidate[] = [];
|
|
224
|
+
const alreadyAbsent: PurgeCandidate[] = [];
|
|
225
|
+
const collectionsToUpdate = new Set<string>();
|
|
226
|
+
const addCollectionForCandidate = (candidate: PurgeCandidate) => {
|
|
227
|
+
if (candidate.tier === "cold") {
|
|
228
|
+
collectionsToUpdate.add(coldCollection);
|
|
229
|
+
} else if (candidate.tier === "hot") {
|
|
230
|
+
collectionsToUpdate.add(hotCollection);
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
for (const candidate of candidates) {
|
|
235
|
+
try {
|
|
236
|
+
await unlink(candidate.path);
|
|
237
|
+
actuallyPurged.push(candidate);
|
|
238
|
+
addCollectionForCandidate(candidate);
|
|
239
|
+
} catch (err) {
|
|
240
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
241
|
+
// ENOENT is fine — already gone
|
|
242
|
+
if (hasErrorCode(err, "ENOENT")) {
|
|
243
|
+
alreadyAbsent.push(candidate);
|
|
244
|
+
addCollectionForCandidate(candidate);
|
|
245
|
+
} else {
|
|
246
|
+
errors.push({ id: candidate.id, path: candidate.path, error: message });
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
const recordPostDeleteAudit = async (
|
|
252
|
+
purgedCandidates: PurgeCandidate[],
|
|
253
|
+
event: "PURGE_HARD_DELETE" | "PURGE_ALREADY_ABSENT",
|
|
254
|
+
) => {
|
|
255
|
+
try {
|
|
256
|
+
await logPurgeAudit(storage, purgedCandidates, now, event);
|
|
257
|
+
} catch (auditErr) {
|
|
258
|
+
errors.push({
|
|
259
|
+
id: "(purge-audit)",
|
|
260
|
+
path: path.join(storage.dir, "state", "observation-ledger", "purge-audit.jsonl"),
|
|
261
|
+
error: auditErr instanceof Error ? auditErr.message : String(auditErr),
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
await recordPostDeleteAudit(actuallyPurged, "PURGE_HARD_DELETE");
|
|
266
|
+
await recordPostDeleteAudit(alreadyAbsent, "PURGE_ALREADY_ABSENT");
|
|
267
|
+
|
|
268
|
+
const resolvedPurges = [...actuallyPurged, ...alreadyAbsent];
|
|
269
|
+
|
|
270
|
+
const invalidateTierCaches = (
|
|
271
|
+
storage as unknown as {
|
|
272
|
+
invalidateMemoryCachesForTiers?: (tiers: Iterable<"hot" | "cold" | "archive">) => void;
|
|
273
|
+
}
|
|
274
|
+
).invalidateMemoryCachesForTiers;
|
|
275
|
+
if (typeof invalidateTierCaches === "function") {
|
|
276
|
+
invalidateTierCaches.call(storage, new Set(resolvedPurges.map((candidate) => candidate.tier)));
|
|
277
|
+
} else if (typeof (storage as unknown as { invalidateAllMemoriesCacheForDir?: () => void }).invalidateAllMemoriesCacheForDir === "function") {
|
|
278
|
+
(storage as unknown as { invalidateAllMemoriesCacheForDir: () => void }).invalidateAllMemoriesCacheForDir();
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Update QMD index for affected collections
|
|
282
|
+
if (qmd) {
|
|
283
|
+
for (const collection of collectionsToUpdate) {
|
|
284
|
+
try {
|
|
285
|
+
if (typeof qmd.updateCollectionStrict === "function") {
|
|
286
|
+
await qmd.updateCollectionStrict(collection, { signal: options.signal });
|
|
287
|
+
} else {
|
|
288
|
+
await qmd.updateCollection(collection, { signal: options.signal });
|
|
289
|
+
}
|
|
290
|
+
} catch (indexErr) {
|
|
291
|
+
// Non-fatal — operator can re-index manually
|
|
292
|
+
errors.push({
|
|
293
|
+
id: "(qmd-update)",
|
|
294
|
+
path: collection,
|
|
295
|
+
error: indexErr instanceof Error ? indexErr.message : String(indexErr),
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
const purgedFactMemories = resolvedPurges
|
|
302
|
+
.map((candidate) => candidateMemoriesById.get(candidate.id))
|
|
303
|
+
.filter((memory): memory is MemoryFile => memory?.frontmatter.category === "fact");
|
|
304
|
+
if (purgedFactMemories.length > 0) {
|
|
305
|
+
const removeFactHashes = (
|
|
306
|
+
storage as unknown as {
|
|
307
|
+
removeFactContentHashesForMemories?: (memories: MemoryFile[]) => Promise<void>;
|
|
308
|
+
}
|
|
309
|
+
).removeFactContentHashesForMemories;
|
|
310
|
+
if (typeof removeFactHashes === "function") {
|
|
311
|
+
try {
|
|
312
|
+
await removeFactHashes.call(storage, purgedFactMemories);
|
|
313
|
+
await options.afterFactHashRemoval?.();
|
|
314
|
+
} catch (hashErr) {
|
|
315
|
+
errors.push({
|
|
316
|
+
id: "(fact-hash-index)",
|
|
317
|
+
path: path.join(storage.dir, "state", "fact-hashes.txt"),
|
|
318
|
+
error: hashErr instanceof Error ? hashErr.message : String(hashErr),
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
return {
|
|
325
|
+
dryRun: false,
|
|
326
|
+
tier,
|
|
327
|
+
olderThanMs,
|
|
328
|
+
candidates,
|
|
329
|
+
purgedCount: actuallyPurged.length,
|
|
330
|
+
alreadyAbsentCount: alreadyAbsent.length,
|
|
331
|
+
errorCount: errors.length,
|
|
332
|
+
errors,
|
|
333
|
+
};
|
|
334
|
+
}
|