@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,394 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secure-store metadata file format.
|
|
3
|
+
*
|
|
4
|
+
* Issue #690 (PR 1/4) — pure data structure + serialize/parse helpers.
|
|
5
|
+
* No I/O. The eventual `secure-store init` CLI (PR 2/4) will be the
|
|
6
|
+
* surface that actually writes a metadata file to disk.
|
|
7
|
+
*
|
|
8
|
+
* Purpose
|
|
9
|
+
* -------
|
|
10
|
+
* When at-rest encryption is enabled, the memory directory needs a
|
|
11
|
+
* stable record of:
|
|
12
|
+
*
|
|
13
|
+
* - which KDF algorithm was used to derive the master key,
|
|
14
|
+
* - the algorithm parameters (so changing OWASP defaults later
|
|
15
|
+
* doesn't break existing stores),
|
|
16
|
+
* - the canonical salt for the master key,
|
|
17
|
+
* - the metadata format version (so we can evolve the file).
|
|
18
|
+
*
|
|
19
|
+
* Crucially, the metadata file does **not** contain the master key,
|
|
20
|
+
* the passphrase, or anything that would let an attacker decrypt
|
|
21
|
+
* memories. It contains only the public parameters needed to
|
|
22
|
+
* re-derive the same key from the same passphrase.
|
|
23
|
+
*
|
|
24
|
+
* On-disk shape
|
|
25
|
+
* -------------
|
|
26
|
+
* The file is JSON. All binary fields are encoded as lowercase hex
|
|
27
|
+
* strings (chosen over base64 for readability when the file is
|
|
28
|
+
* `cat`'d during incident response).
|
|
29
|
+
*
|
|
30
|
+
* {
|
|
31
|
+
* "format": "remnic.secure-store.metadata",
|
|
32
|
+
* "formatVersion": 1,
|
|
33
|
+
* "kdf": {
|
|
34
|
+
* "algorithm": "argon2id",
|
|
35
|
+
* "params": { "memoryKiB": 65536, "iterations": 3, "parallelism": 4, "keyLength": 32 },
|
|
36
|
+
* "salt": "<32-hex-chars-for-16-bytes>"
|
|
37
|
+
* },
|
|
38
|
+
* "createdAt": "<ISO-8601 timestamp>",
|
|
39
|
+
* "note": "<optional human-readable note>"
|
|
40
|
+
* }
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
import {
|
|
44
|
+
DEFAULT_ARGON2ID_PARAMS,
|
|
45
|
+
DEFAULT_SCRYPT_PARAMS,
|
|
46
|
+
KDF_SALT_LENGTH,
|
|
47
|
+
type Argon2idParams,
|
|
48
|
+
type KdfAlgorithm,
|
|
49
|
+
type ScryptParams,
|
|
50
|
+
} from "./kdf.js";
|
|
51
|
+
|
|
52
|
+
/** Stable identifier so we can sniff the file shape without parsing JSON. */
|
|
53
|
+
export const METADATA_FORMAT = "remnic.secure-store.metadata" as const;
|
|
54
|
+
|
|
55
|
+
/** Current metadata format version. Bump on breaking schema changes. */
|
|
56
|
+
export const METADATA_FORMAT_VERSION = 1 as const;
|
|
57
|
+
|
|
58
|
+
export interface SecureStoreMetadataKdfScrypt {
|
|
59
|
+
algorithm: "scrypt";
|
|
60
|
+
params: ScryptParams;
|
|
61
|
+
/** Hex-encoded salt. Length must match `KDF_SALT_LENGTH` after decode. */
|
|
62
|
+
salt: string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface SecureStoreMetadataKdfArgon2id {
|
|
66
|
+
algorithm: "argon2id";
|
|
67
|
+
params: Argon2idParams;
|
|
68
|
+
salt: string;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export type SecureStoreMetadataKdf =
|
|
72
|
+
| SecureStoreMetadataKdfScrypt
|
|
73
|
+
| SecureStoreMetadataKdfArgon2id;
|
|
74
|
+
|
|
75
|
+
export interface SecureStoreMetadata {
|
|
76
|
+
format: typeof METADATA_FORMAT;
|
|
77
|
+
formatVersion: number;
|
|
78
|
+
kdf: SecureStoreMetadataKdf;
|
|
79
|
+
/** ISO-8601 timestamp recorded at init time. */
|
|
80
|
+
createdAt: string;
|
|
81
|
+
/** Optional human-readable note. Never persist secrets here. */
|
|
82
|
+
note?: string;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function bytesToHex(bytes: Uint8Array): string {
|
|
86
|
+
return Buffer.from(bytes).toString("hex");
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function hexToBytes(hex: string, expectedLength: number): Buffer {
|
|
90
|
+
if (typeof hex !== "string") {
|
|
91
|
+
throw new Error("hex field must be a string");
|
|
92
|
+
}
|
|
93
|
+
if (!/^[0-9a-f]*$/i.test(hex)) {
|
|
94
|
+
throw new Error("hex field must contain only hexadecimal characters");
|
|
95
|
+
}
|
|
96
|
+
if (hex.length % 2 !== 0) {
|
|
97
|
+
throw new Error("hex field must have even length");
|
|
98
|
+
}
|
|
99
|
+
const buf = Buffer.from(hex, "hex");
|
|
100
|
+
if (buf.length !== expectedLength) {
|
|
101
|
+
throw new Error(
|
|
102
|
+
`hex field decoded to ${buf.length} bytes, expected ${expectedLength}`,
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
return buf;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface BuildMetadataOptions {
|
|
109
|
+
algorithm: KdfAlgorithm;
|
|
110
|
+
salt: Uint8Array;
|
|
111
|
+
/** Optional override; defaults to `DEFAULT_SCRYPT_PARAMS` / `DEFAULT_ARGON2ID_PARAMS`. */
|
|
112
|
+
params?: ScryptParams | Argon2idParams;
|
|
113
|
+
/** Optional ISO timestamp. Defaults to `new Date().toISOString()`. */
|
|
114
|
+
createdAt?: string;
|
|
115
|
+
/** Optional human-readable note. */
|
|
116
|
+
note?: string;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Build an in-memory `SecureStoreMetadata` object from the given
|
|
121
|
+
* algorithm + salt. Pure: does not touch the filesystem or the clock
|
|
122
|
+
* unless `createdAt` is omitted (in which case `new Date()` is read).
|
|
123
|
+
*/
|
|
124
|
+
export function buildMetadata(options: BuildMetadataOptions): SecureStoreMetadata {
|
|
125
|
+
const { algorithm, salt } = options;
|
|
126
|
+
if (!(salt instanceof Uint8Array) || salt.length !== KDF_SALT_LENGTH) {
|
|
127
|
+
throw new Error(
|
|
128
|
+
`salt must be ${KDF_SALT_LENGTH} bytes, got ${salt?.length ?? "non-buffer"}`,
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
const createdAt = options.createdAt ?? new Date().toISOString();
|
|
132
|
+
|
|
133
|
+
let kdf: SecureStoreMetadataKdf;
|
|
134
|
+
if (algorithm === "scrypt") {
|
|
135
|
+
const params = (options.params as ScryptParams | undefined) ?? {
|
|
136
|
+
...DEFAULT_SCRYPT_PARAMS,
|
|
137
|
+
};
|
|
138
|
+
kdf = { algorithm: "scrypt", params, salt: bytesToHex(salt) };
|
|
139
|
+
} else if (algorithm === "argon2id") {
|
|
140
|
+
const params = (options.params as Argon2idParams | undefined) ?? {
|
|
141
|
+
...DEFAULT_ARGON2ID_PARAMS,
|
|
142
|
+
};
|
|
143
|
+
kdf = { algorithm: "argon2id", params, salt: bytesToHex(salt) };
|
|
144
|
+
} else {
|
|
145
|
+
throw new Error(`unknown KDF algorithm: ${algorithm as string}`);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const meta: SecureStoreMetadata = {
|
|
149
|
+
format: METADATA_FORMAT,
|
|
150
|
+
formatVersion: METADATA_FORMAT_VERSION,
|
|
151
|
+
kdf,
|
|
152
|
+
createdAt,
|
|
153
|
+
};
|
|
154
|
+
if (options.note !== undefined) {
|
|
155
|
+
meta.note = options.note;
|
|
156
|
+
}
|
|
157
|
+
return meta;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Serialize metadata to a stable JSON string with sorted top-level
|
|
162
|
+
* keys. Stable ordering matters because hash-based integrity checks
|
|
163
|
+
* may eventually consume the serialized form.
|
|
164
|
+
*/
|
|
165
|
+
export function serializeMetadata(meta: SecureStoreMetadata): string {
|
|
166
|
+
// Validate before serializing so we never write a malformed file.
|
|
167
|
+
validateMetadata(meta);
|
|
168
|
+
// JSON.stringify preserves insertion order; we construct the object
|
|
169
|
+
// explicitly to lock the field order.
|
|
170
|
+
const ordered: Record<string, unknown> = {
|
|
171
|
+
format: meta.format,
|
|
172
|
+
formatVersion: meta.formatVersion,
|
|
173
|
+
kdf: orderKdf(meta.kdf),
|
|
174
|
+
createdAt: meta.createdAt,
|
|
175
|
+
};
|
|
176
|
+
if (meta.note !== undefined) {
|
|
177
|
+
ordered.note = meta.note;
|
|
178
|
+
}
|
|
179
|
+
return JSON.stringify(ordered, null, 2);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function orderKdf(kdf: SecureStoreMetadataKdf): Record<string, unknown> {
|
|
183
|
+
if (kdf.algorithm === "scrypt") {
|
|
184
|
+
return {
|
|
185
|
+
algorithm: kdf.algorithm,
|
|
186
|
+
params: {
|
|
187
|
+
N: kdf.params.N,
|
|
188
|
+
r: kdf.params.r,
|
|
189
|
+
p: kdf.params.p,
|
|
190
|
+
keyLength: kdf.params.keyLength,
|
|
191
|
+
maxmem: kdf.params.maxmem,
|
|
192
|
+
},
|
|
193
|
+
salt: kdf.salt,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
algorithm: kdf.algorithm,
|
|
198
|
+
params: {
|
|
199
|
+
memoryKiB: kdf.params.memoryKiB,
|
|
200
|
+
iterations: kdf.params.iterations,
|
|
201
|
+
parallelism: kdf.params.parallelism,
|
|
202
|
+
keyLength: kdf.params.keyLength,
|
|
203
|
+
},
|
|
204
|
+
salt: kdf.salt,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Parse a metadata JSON string. Throws on any structural problem.
|
|
210
|
+
* Callers that need to migrate older formats should branch on
|
|
211
|
+
* `formatVersion` *before* calling this; this function is strict
|
|
212
|
+
* about the current version.
|
|
213
|
+
*/
|
|
214
|
+
export function parseMetadata(json: string): SecureStoreMetadata {
|
|
215
|
+
if (typeof json !== "string") {
|
|
216
|
+
throw new Error("metadata input must be a string");
|
|
217
|
+
}
|
|
218
|
+
let parsed: unknown;
|
|
219
|
+
try {
|
|
220
|
+
parsed = JSON.parse(json);
|
|
221
|
+
} catch (e) {
|
|
222
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
223
|
+
throw new Error(`metadata is not valid JSON: ${msg}`);
|
|
224
|
+
}
|
|
225
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
226
|
+
throw new Error("metadata must be a JSON object");
|
|
227
|
+
}
|
|
228
|
+
const obj = parsed as Record<string, unknown>;
|
|
229
|
+
if (obj.format !== METADATA_FORMAT) {
|
|
230
|
+
throw new Error(
|
|
231
|
+
`unexpected metadata format: ${String(obj.format)} (expected ${METADATA_FORMAT})`,
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
if (obj.formatVersion !== METADATA_FORMAT_VERSION) {
|
|
235
|
+
throw new Error(
|
|
236
|
+
`unsupported metadata formatVersion: ${String(obj.formatVersion)} ` +
|
|
237
|
+
`(this build supports ${METADATA_FORMAT_VERSION})`,
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
if (typeof obj.createdAt !== "string" || obj.createdAt.length === 0) {
|
|
241
|
+
throw new Error("metadata.createdAt must be a non-empty string");
|
|
242
|
+
}
|
|
243
|
+
if (obj.note !== undefined && typeof obj.note !== "string") {
|
|
244
|
+
throw new Error("metadata.note must be a string when present");
|
|
245
|
+
}
|
|
246
|
+
const kdf = parseKdf(obj.kdf);
|
|
247
|
+
const meta: SecureStoreMetadata = {
|
|
248
|
+
format: METADATA_FORMAT,
|
|
249
|
+
formatVersion: METADATA_FORMAT_VERSION,
|
|
250
|
+
kdf,
|
|
251
|
+
createdAt: obj.createdAt,
|
|
252
|
+
};
|
|
253
|
+
if (typeof obj.note === "string") {
|
|
254
|
+
meta.note = obj.note;
|
|
255
|
+
}
|
|
256
|
+
validateMetadata(meta);
|
|
257
|
+
return meta;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function parseKdf(value: unknown): SecureStoreMetadataKdf {
|
|
261
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
262
|
+
throw new Error("metadata.kdf must be an object");
|
|
263
|
+
}
|
|
264
|
+
const k = value as Record<string, unknown>;
|
|
265
|
+
if (k.algorithm !== "scrypt" && k.algorithm !== "argon2id") {
|
|
266
|
+
throw new Error(`metadata.kdf.algorithm must be 'scrypt' or 'argon2id', got ${String(k.algorithm)}`);
|
|
267
|
+
}
|
|
268
|
+
if (typeof k.salt !== "string") {
|
|
269
|
+
throw new Error("metadata.kdf.salt must be a hex string");
|
|
270
|
+
}
|
|
271
|
+
// Decode to validate length and hex shape; we don't need the bytes here.
|
|
272
|
+
hexToBytes(k.salt, KDF_SALT_LENGTH);
|
|
273
|
+
if (typeof k.params !== "object" || k.params === null || Array.isArray(k.params)) {
|
|
274
|
+
throw new Error("metadata.kdf.params must be an object");
|
|
275
|
+
}
|
|
276
|
+
const params = k.params as Record<string, unknown>;
|
|
277
|
+
if (k.algorithm === "scrypt") {
|
|
278
|
+
const required: (keyof ScryptParams)[] = ["N", "r", "p", "keyLength", "maxmem"];
|
|
279
|
+
for (const key of required) {
|
|
280
|
+
if (typeof params[key] !== "number" || !Number.isFinite(params[key] as number)) {
|
|
281
|
+
throw new Error(`metadata.kdf.params.${key} must be a finite number`);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
algorithm: "scrypt",
|
|
286
|
+
params: {
|
|
287
|
+
N: params.N as number,
|
|
288
|
+
r: params.r as number,
|
|
289
|
+
p: params.p as number,
|
|
290
|
+
keyLength: params.keyLength as number,
|
|
291
|
+
maxmem: params.maxmem as number,
|
|
292
|
+
},
|
|
293
|
+
salt: k.salt,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
// argon2id
|
|
297
|
+
const required2: (keyof Argon2idParams)[] = [
|
|
298
|
+
"memoryKiB",
|
|
299
|
+
"iterations",
|
|
300
|
+
"parallelism",
|
|
301
|
+
"keyLength",
|
|
302
|
+
];
|
|
303
|
+
for (const key of required2) {
|
|
304
|
+
if (typeof params[key] !== "number" || !Number.isFinite(params[key] as number)) {
|
|
305
|
+
throw new Error(`metadata.kdf.params.${key} must be a finite number`);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return {
|
|
309
|
+
algorithm: "argon2id",
|
|
310
|
+
params: {
|
|
311
|
+
memoryKiB: params.memoryKiB as number,
|
|
312
|
+
iterations: params.iterations as number,
|
|
313
|
+
parallelism: params.parallelism as number,
|
|
314
|
+
keyLength: params.keyLength as number,
|
|
315
|
+
},
|
|
316
|
+
salt: k.salt,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/** Validate a metadata object's invariants. Throws on the first problem. */
|
|
321
|
+
export function validateMetadata(meta: SecureStoreMetadata): void {
|
|
322
|
+
if (meta.format !== METADATA_FORMAT) {
|
|
323
|
+
throw new Error(`metadata.format must be ${METADATA_FORMAT}`);
|
|
324
|
+
}
|
|
325
|
+
if (meta.formatVersion !== METADATA_FORMAT_VERSION) {
|
|
326
|
+
throw new Error(`metadata.formatVersion must be ${METADATA_FORMAT_VERSION}`);
|
|
327
|
+
}
|
|
328
|
+
if (typeof meta.createdAt !== "string" || meta.createdAt.length === 0) {
|
|
329
|
+
throw new Error("metadata.createdAt must be a non-empty ISO-8601 string");
|
|
330
|
+
}
|
|
331
|
+
// Salt round-trip check.
|
|
332
|
+
hexToBytes(meta.kdf.salt, KDF_SALT_LENGTH);
|
|
333
|
+
if (meta.kdf.algorithm === "scrypt") {
|
|
334
|
+
const { N, r, p, keyLength, maxmem } = meta.kdf.params;
|
|
335
|
+
// Cursor Low + codex P2: bitwise `(N & (N - 1))` truncates to
|
|
336
|
+
// 32-bit signed in JS, so for N >= 2**31 the check silently
|
|
337
|
+
// wraps and accepts non-powers-of-two like `5 * 2**30`. Use
|
|
338
|
+
// Math.log2 plus an upper bound at 2**30 so out-of-range
|
|
339
|
+
// values are rejected loudly at metadata-load time rather than
|
|
340
|
+
// locking up the KDF later.
|
|
341
|
+
if (
|
|
342
|
+
!Number.isInteger(N) ||
|
|
343
|
+
N < 2 ||
|
|
344
|
+
N > 2 ** 30 ||
|
|
345
|
+
!Number.isInteger(Math.log2(N))
|
|
346
|
+
) {
|
|
347
|
+
throw new Error("metadata.kdf.params.N must be a power of 2 in [2, 2^30]");
|
|
348
|
+
}
|
|
349
|
+
if (!Number.isInteger(r) || r < 1) {
|
|
350
|
+
throw new Error("metadata.kdf.params.r must be a positive integer");
|
|
351
|
+
}
|
|
352
|
+
if (!Number.isInteger(p) || p < 1) {
|
|
353
|
+
throw new Error("metadata.kdf.params.p must be a positive integer");
|
|
354
|
+
}
|
|
355
|
+
// Codex P2: cipher.ts hard-requires a 32-byte AES-256 key
|
|
356
|
+
// (`assertAesKey`). Accepting `keyLength: 16` here would parse
|
|
357
|
+
// and validate cleanly but later fail at encrypt/decrypt time
|
|
358
|
+
// — a latent runtime break. Reject anything other than 32 at
|
|
359
|
+
// load time so the metadata file is the authoritative gate.
|
|
360
|
+
if (!Number.isInteger(keyLength) || keyLength !== 32) {
|
|
361
|
+
throw new Error("metadata.kdf.params.keyLength must be 32 (AES-256 requires a 32-byte key)");
|
|
362
|
+
}
|
|
363
|
+
if (!Number.isInteger(maxmem) || maxmem < 1024) {
|
|
364
|
+
throw new Error("metadata.kdf.params.maxmem must be a positive integer");
|
|
365
|
+
}
|
|
366
|
+
} else if (meta.kdf.algorithm === "argon2id") {
|
|
367
|
+
const { memoryKiB, iterations, parallelism, keyLength } = meta.kdf.params;
|
|
368
|
+
if (!Number.isInteger(memoryKiB) || memoryKiB < 8) {
|
|
369
|
+
throw new Error("metadata.kdf.params.memoryKiB must be ≥ 8");
|
|
370
|
+
}
|
|
371
|
+
if (!Number.isInteger(iterations) || iterations < 1) {
|
|
372
|
+
throw new Error("metadata.kdf.params.iterations must be a positive integer");
|
|
373
|
+
}
|
|
374
|
+
if (!Number.isInteger(parallelism) || parallelism < 1 || parallelism > 255) {
|
|
375
|
+
throw new Error("metadata.kdf.params.parallelism must be an integer in [1, 255]");
|
|
376
|
+
}
|
|
377
|
+
// Codex P2: cipher.ts hard-requires a 32-byte AES-256 key
|
|
378
|
+
// (`assertAesKey`). Accepting `keyLength: 16` here would parse
|
|
379
|
+
// and validate cleanly but later fail at encrypt/decrypt time
|
|
380
|
+
// — a latent runtime break. Reject anything other than 32 at
|
|
381
|
+
// load time so the metadata file is the authoritative gate.
|
|
382
|
+
if (!Number.isInteger(keyLength) || keyLength !== 32) {
|
|
383
|
+
throw new Error("metadata.kdf.params.keyLength must be 32 (AES-256 requires a 32-byte key)");
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* Decode the salt field of a metadata object back into bytes.
|
|
390
|
+
* Convenience helper so callers don't reach into the hex codec.
|
|
391
|
+
*/
|
|
392
|
+
export function decodeMetadataSalt(meta: SecureStoreMetadata): Buffer {
|
|
393
|
+
return hexToBytes(meta.kdf.salt, KDF_SALT_LENGTH);
|
|
394
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTY passphrase reader (issue #690 PR 2/4).
|
|
3
|
+
*
|
|
4
|
+
* Reads a line from stdin without echoing it back to the terminal.
|
|
5
|
+
* Disables echo by setting raw mode + manually buffering input until
|
|
6
|
+
* Enter / EOT.
|
|
7
|
+
*
|
|
8
|
+
* Why not `readline.question`?
|
|
9
|
+
* ----------------------------
|
|
10
|
+
* `readline` echoes by default and has no clean "no-echo" toggle that
|
|
11
|
+
* survives across Node versions. The raw-mode loop is the canonical
|
|
12
|
+
* idiom for reading passwords on Node and matches what `npm` uses
|
|
13
|
+
* internally.
|
|
14
|
+
*
|
|
15
|
+
* Security
|
|
16
|
+
* --------
|
|
17
|
+
* - Never log the passphrase (no `console.log`, no debug output).
|
|
18
|
+
* - Never include it in a thrown error message.
|
|
19
|
+
* - On Ctrl+C / Ctrl+D, abort with a clear error rather than
|
|
20
|
+
* silently treating EOF as an empty submission.
|
|
21
|
+
* - On non-TTY stdin (pipe, redirect), read a line via line-buffered
|
|
22
|
+
* readline so automation (`echo "passphrase" | remnic ...`) works.
|
|
23
|
+
* Operators are responsible for not piping plaintext passphrases
|
|
24
|
+
* in shell history; we surface a stderr warning.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import { createInterface } from "node:readline";
|
|
28
|
+
import type { Readable, Writable } from "node:stream";
|
|
29
|
+
import { StringDecoder } from "node:string_decoder";
|
|
30
|
+
|
|
31
|
+
import type { PassphraseReader } from "./cli-handlers.js";
|
|
32
|
+
|
|
33
|
+
export interface CreatePassphraseReaderOptions {
|
|
34
|
+
input?: Readable;
|
|
35
|
+
output?: Writable;
|
|
36
|
+
/** Override stderr for warning surface; defaults to `process.stderr`. */
|
|
37
|
+
errorStream?: Writable;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Build a `PassphraseReader` bound to the given streams. Exported so
|
|
42
|
+
* tests can construct one against in-memory streams without touching
|
|
43
|
+
* the real TTY.
|
|
44
|
+
*/
|
|
45
|
+
export function createPassphraseReader(
|
|
46
|
+
options: CreatePassphraseReaderOptions = {},
|
|
47
|
+
): PassphraseReader {
|
|
48
|
+
const input = options.input ?? process.stdin;
|
|
49
|
+
const output = options.output ?? process.stdout;
|
|
50
|
+
const errorStream = options.errorStream ?? process.stderr;
|
|
51
|
+
// Codex/Cursor on PR #737: a fresh readline interface per call
|
|
52
|
+
// breaks confirm-mode on piped non-TTY input — the first
|
|
53
|
+
// `createInterface` consumes the entire prebuffered stream
|
|
54
|
+
// (including the second line), so the second `createInterface`
|
|
55
|
+
// sees an already-ended stream and resolves to "". Fix: maintain
|
|
56
|
+
// ONE non-TTY line reader across both reads of a confirm-mode
|
|
57
|
+
// session and pull lines on demand from a buffered queue.
|
|
58
|
+
let nonTtyReader: NonTtyLineReader | null = null;
|
|
59
|
+
let nonTtyWarned = false;
|
|
60
|
+
return async function readPassphrase(
|
|
61
|
+
prompt: string,
|
|
62
|
+
readerOptions?: { confirm?: boolean },
|
|
63
|
+
): Promise<string> {
|
|
64
|
+
const first = await readSinglePassphrase(prompt);
|
|
65
|
+
if (readerOptions?.confirm) {
|
|
66
|
+
const second = await readSinglePassphrase("Confirm passphrase: ");
|
|
67
|
+
if (first !== second) {
|
|
68
|
+
throw new Error("passphrases did not match");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return first;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
async function readSinglePassphrase(prompt: string): Promise<string> {
|
|
75
|
+
const inputAsAny = input as Readable & {
|
|
76
|
+
isTTY?: boolean;
|
|
77
|
+
setRawMode?: (raw: boolean) => Readable;
|
|
78
|
+
};
|
|
79
|
+
if (inputAsAny.isTTY && typeof inputAsAny.setRawMode === "function") {
|
|
80
|
+
return readNoEcho(prompt, inputAsAny, output);
|
|
81
|
+
}
|
|
82
|
+
// Non-TTY: line-buffered fallback. Warn once per reader so
|
|
83
|
+
// operators piping plaintext passphrases in shell pipelines are
|
|
84
|
+
// aware their history may contain the secret.
|
|
85
|
+
if (!nonTtyWarned) {
|
|
86
|
+
errorStream.write(
|
|
87
|
+
"[remnic secure-store] warning: stdin is not a TTY; reading passphrase as a plain line. " +
|
|
88
|
+
"Take care that the passphrase is not exposed in shell history.\n",
|
|
89
|
+
);
|
|
90
|
+
nonTtyWarned = true;
|
|
91
|
+
}
|
|
92
|
+
// Codex P1 on PR #737: write the prompt to stderr, not stdout.
|
|
93
|
+
// When the surrounding command outputs JSON to stdout (e.g.
|
|
94
|
+
// `remnic secure-store status --json`), injecting prompt text on
|
|
95
|
+
// stdout corrupts the JSON output and breaks machine consumers.
|
|
96
|
+
// The prompt is UI noise — it belongs on the error/diagnostics
|
|
97
|
+
// stream regardless of whether we're in a TTY.
|
|
98
|
+
errorStream.write(prompt);
|
|
99
|
+
if (!nonTtyReader) nonTtyReader = createNonTtyLineReader(input);
|
|
100
|
+
return nonTtyReader.next();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function readNoEcho(
|
|
105
|
+
prompt: string,
|
|
106
|
+
input: Readable & { setRawMode?: (raw: boolean) => Readable },
|
|
107
|
+
output: Writable,
|
|
108
|
+
): Promise<string> {
|
|
109
|
+
return new Promise((resolve, reject) => {
|
|
110
|
+
output.write(prompt);
|
|
111
|
+
let buffer = "";
|
|
112
|
+
let settled = false;
|
|
113
|
+
const wasRaw = (input as Readable & { isRaw?: boolean }).isRaw === true;
|
|
114
|
+
// Codex P2 on PR #737: per-chunk `chunk.toString("utf8")` corrupts
|
|
115
|
+
// multibyte characters that straddle a chunk boundary (Node inserts
|
|
116
|
+
// U+FFFD replacement characters for incomplete sequences). Use a
|
|
117
|
+
// StringDecoder, which buffers partial sequences across chunks so
|
|
118
|
+
// non-ASCII passphrases survive intact.
|
|
119
|
+
const decoder = new StringDecoder("utf8");
|
|
120
|
+
if (input.setRawMode) input.setRawMode(true);
|
|
121
|
+
input.resume();
|
|
122
|
+
const cleanup = (): void => {
|
|
123
|
+
input.pause();
|
|
124
|
+
input.removeListener("data", onData);
|
|
125
|
+
// Flush any remaining bytes the decoder is holding so trailing
|
|
126
|
+
// partial sequences are surfaced rather than silently swallowed.
|
|
127
|
+
decoder.end();
|
|
128
|
+
// Restore the prior raw-mode state so we don't strand the parent shell
|
|
129
|
+
// in an unexpected configuration.
|
|
130
|
+
if (input.setRawMode) input.setRawMode(wasRaw);
|
|
131
|
+
output.write("\n");
|
|
132
|
+
};
|
|
133
|
+
const onData = (chunk: Buffer): void => {
|
|
134
|
+
const str = decoder.write(chunk);
|
|
135
|
+
for (const ch of str) {
|
|
136
|
+
if (settled) return;
|
|
137
|
+
const code = ch.charCodeAt(0);
|
|
138
|
+
// Enter / newline: submit.
|
|
139
|
+
if (ch === "\n" || ch === "\r") {
|
|
140
|
+
settled = true;
|
|
141
|
+
cleanup();
|
|
142
|
+
resolve(buffer);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Ctrl+C: abort.
|
|
146
|
+
if (code === 0x03) {
|
|
147
|
+
settled = true;
|
|
148
|
+
cleanup();
|
|
149
|
+
reject(new Error("passphrase entry aborted (Ctrl+C)"));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
// Ctrl+D / EOT: treat as abort if buffer is empty, else submit.
|
|
153
|
+
if (code === 0x04) {
|
|
154
|
+
settled = true;
|
|
155
|
+
cleanup();
|
|
156
|
+
if (buffer.length === 0) {
|
|
157
|
+
reject(new Error("passphrase entry aborted (EOF)"));
|
|
158
|
+
} else {
|
|
159
|
+
resolve(buffer);
|
|
160
|
+
}
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
// Backspace / DEL.
|
|
164
|
+
// Cursor on PR #737: `buffer.slice(0, -1)` deletes one UTF-16
|
|
165
|
+
// code unit, which splits a surrogate pair when the last
|
|
166
|
+
// character is a non-BMP code point (emoji, etc.). Fix: count
|
|
167
|
+
// code points with `Array.from` and remove the last one. This
|
|
168
|
+
// correctly handles both BMP (single code unit) and non-BMP
|
|
169
|
+
// (surrogate pair) characters atomically.
|
|
170
|
+
if (code === 0x08 || code === 0x7f) {
|
|
171
|
+
if (buffer.length > 0) {
|
|
172
|
+
const codePoints = Array.from(buffer);
|
|
173
|
+
buffer = codePoints.slice(0, -1).join("");
|
|
174
|
+
}
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
// Ignore other control bytes (escape sequences, etc.).
|
|
178
|
+
if (code < 0x20) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
buffer += ch;
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
input.on("data", onData);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* One-shot line reader bound to a non-TTY input stream.
|
|
190
|
+
*
|
|
191
|
+
* Cursor medium on PR #737: a previous version constructed a fresh
|
|
192
|
+
* `readline.createInterface` per `next()` call. On piped non-TTY
|
|
193
|
+
* input, the first interface consumed the entire prebuffered stream
|
|
194
|
+
* (including any subsequent lines) into its internal buffer. The
|
|
195
|
+
* second interface saw an already-`end()`'d input and resolved to "".
|
|
196
|
+
* Fix: construct ONE readline interface, queue every emitted `line`,
|
|
197
|
+
* and let `next()` either return a queued line or wait for the next
|
|
198
|
+
* one. Pending waiters at `close` time are resolved with "" (so an
|
|
199
|
+
* abandoned-stream caller still sees a clean empty response).
|
|
200
|
+
*/
|
|
201
|
+
interface NonTtyLineReader {
|
|
202
|
+
next(): Promise<string>;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function createNonTtyLineReader(input: Readable): NonTtyLineReader {
|
|
206
|
+
const rl = createInterface({ input, terminal: false });
|
|
207
|
+
const lineQueue: string[] = [];
|
|
208
|
+
const waiterQueue: Array<(value: string) => void> = [];
|
|
209
|
+
const errorQueue: Array<(err: Error) => void> = [];
|
|
210
|
+
let closed = false;
|
|
211
|
+
let error: Error | null = null;
|
|
212
|
+
|
|
213
|
+
rl.on("line", (line: string) => {
|
|
214
|
+
const waiter = waiterQueue.shift();
|
|
215
|
+
if (waiter) {
|
|
216
|
+
waiter(line);
|
|
217
|
+
} else {
|
|
218
|
+
lineQueue.push(line);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
rl.on("close", () => {
|
|
222
|
+
closed = true;
|
|
223
|
+
while (waiterQueue.length > 0) {
|
|
224
|
+
const w = waiterQueue.shift()!;
|
|
225
|
+
// Drop the matching error slot since we're settling cleanly.
|
|
226
|
+
errorQueue.shift();
|
|
227
|
+
w("");
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
rl.on("error", (err: Error) => {
|
|
231
|
+
error = err;
|
|
232
|
+
while (errorQueue.length > 0) {
|
|
233
|
+
const r = errorQueue.shift()!;
|
|
234
|
+
// Drop the matching value slot.
|
|
235
|
+
waiterQueue.shift();
|
|
236
|
+
r(err);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
return {
|
|
241
|
+
next(): Promise<string> {
|
|
242
|
+
if (error) return Promise.reject(error);
|
|
243
|
+
const queued = lineQueue.shift();
|
|
244
|
+
if (queued !== undefined) return Promise.resolve(queued);
|
|
245
|
+
if (closed) return Promise.resolve("");
|
|
246
|
+
return new Promise<string>((resolve, reject) => {
|
|
247
|
+
waiterQueue.push(resolve);
|
|
248
|
+
errorQueue.push(reject);
|
|
249
|
+
});
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
}
|