@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,930 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
|
|
4
|
+
import { parseConfig } from "./config.js";
|
|
5
|
+
|
|
6
|
+
// ── PR #394 Bug 2: parseConfig must coerce string "false" for installExtension
|
|
7
|
+
|
|
8
|
+
test('parseConfig codex.installExtension="false" (string) → false (boolean)', () => {
|
|
9
|
+
const result = parseConfig({ codex: { installExtension: "false" } });
|
|
10
|
+
assert.equal(
|
|
11
|
+
result.codex.installExtension,
|
|
12
|
+
false,
|
|
13
|
+
'string "false" must be coerced to boolean false',
|
|
14
|
+
);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('parseConfig codex.installExtension="0" (string) → false', () => {
|
|
18
|
+
const result = parseConfig({ codex: { installExtension: "0" } });
|
|
19
|
+
assert.equal(result.codex.installExtension, false);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test('parseConfig codex.installExtension="no" (string) → false', () => {
|
|
23
|
+
const result = parseConfig({ codex: { installExtension: "no" } });
|
|
24
|
+
assert.equal(result.codex.installExtension, false);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test('parseConfig codex.installExtension="FALSE" (uppercase string) → false', () => {
|
|
28
|
+
const result = parseConfig({ codex: { installExtension: "FALSE" } });
|
|
29
|
+
assert.equal(result.codex.installExtension, false);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test("parseConfig codex.installExtension=false (boolean) → false", () => {
|
|
33
|
+
const result = parseConfig({ codex: { installExtension: false } });
|
|
34
|
+
assert.equal(result.codex.installExtension, false);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test("parseConfig codex.installExtension=true (boolean) → true", () => {
|
|
38
|
+
const result = parseConfig({ codex: { installExtension: true } });
|
|
39
|
+
assert.equal(result.codex.installExtension, true);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
test('parseConfig codex.installExtension="true" (string) → true', () => {
|
|
43
|
+
const result = parseConfig({ codex: { installExtension: "true" } });
|
|
44
|
+
assert.equal(result.codex.installExtension, true);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test("parseConfig codex.installExtension missing → defaults to true", () => {
|
|
48
|
+
const result = parseConfig({ codex: {} });
|
|
49
|
+
assert.equal(result.codex.installExtension, true);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test("parseConfig codex missing entirely → installExtension defaults to true", () => {
|
|
53
|
+
const result = parseConfig({});
|
|
54
|
+
assert.equal(result.codex.installExtension, true);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("parseConfig dreaming.maxEntries=0 preserves the runtime disable switch", () => {
|
|
58
|
+
const result = parseConfig({ dreaming: { maxEntries: 0 } });
|
|
59
|
+
assert.equal(result.dreaming.maxEntries, 0);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test("parseConfig dreaming.maxEntries=5 falls back to the documented default", () => {
|
|
63
|
+
const result = parseConfig({ dreaming: { maxEntries: 5 } });
|
|
64
|
+
assert.equal(result.dreaming.maxEntries, 500);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test("parseConfig dreaming.maxEntries=-5 falls back to the documented default", () => {
|
|
68
|
+
const result = parseConfig({ dreaming: { maxEntries: -5 } });
|
|
69
|
+
assert.equal(result.dreaming.maxEntries, 500);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test("parseConfig activeRecallCacheTtlMs=0 disables the active-recall cache", () => {
|
|
73
|
+
const result = parseConfig({ activeRecallCacheTtlMs: 0 });
|
|
74
|
+
assert.equal(result.activeRecallCacheTtlMs, 0);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test("parseConfig activeRecallCacheTtlMs=500 preserves the explicit positive ttl", () => {
|
|
78
|
+
const result = parseConfig({ activeRecallCacheTtlMs: 500 });
|
|
79
|
+
assert.equal(result.activeRecallCacheTtlMs, 500);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test("parseConfig validates commitmentDecayDays as a positive integer", () => {
|
|
83
|
+
assert.equal(parseConfig({}).commitmentDecayDays, 90);
|
|
84
|
+
assert.equal(parseConfig({ commitmentDecayDays: 30 }).commitmentDecayDays, 30);
|
|
85
|
+
assert.equal(parseConfig({ commitmentDecayDays: "45" }).commitmentDecayDays, 45);
|
|
86
|
+
|
|
87
|
+
for (const value of [0, -1, 1.5, "1.5", "abc", Number.NaN, Infinity]) {
|
|
88
|
+
assert.throws(
|
|
89
|
+
() => parseConfig({ commitmentDecayDays: value }),
|
|
90
|
+
/commitmentDecayDays must be an integer greater than or equal to 1/,
|
|
91
|
+
`invalid commitmentDecayDays ${String(value)} should throw`,
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
test("parseConfig initGateTimeoutMs defaults to OpenClaw cold-start budget", () => {
|
|
97
|
+
const result = parseConfig({});
|
|
98
|
+
assert.equal(result.initGateTimeoutMs, 30_000);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test("parseConfig initGateTimeoutMs accepts CLI-style numeric strings", () => {
|
|
102
|
+
const result = parseConfig({ initGateTimeoutMs: "45000" });
|
|
103
|
+
assert.equal(result.initGateTimeoutMs, 45_000);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
test("parseConfig initGateTimeoutMs clamps unsafe values", () => {
|
|
107
|
+
assert.equal(parseConfig({ initGateTimeoutMs: 0 }).initGateTimeoutMs, 1_000);
|
|
108
|
+
assert.equal(parseConfig({ initGateTimeoutMs: 300_000 }).initGateTimeoutMs, 120_000);
|
|
109
|
+
assert.equal(parseConfig({ initGateTimeoutMs: "abc" }).initGateTimeoutMs, 30_000);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test("parseConfig modelSource=gateway does not inherit OPENAI_API_KEY from the process env", () => {
|
|
113
|
+
const original = process.env.OPENAI_API_KEY;
|
|
114
|
+
process.env.OPENAI_API_KEY = "sk-env-should-not-be-used";
|
|
115
|
+
try {
|
|
116
|
+
const cfg = parseConfig({ modelSource: "gateway" });
|
|
117
|
+
assert.equal(cfg.modelSource, "gateway");
|
|
118
|
+
assert.equal(cfg.openaiApiKey, undefined);
|
|
119
|
+
} finally {
|
|
120
|
+
if (original === undefined) delete process.env.OPENAI_API_KEY;
|
|
121
|
+
else process.env.OPENAI_API_KEY = original;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
test("parseConfig modelSource=gateway still honors an explicit openaiApiKey override", () => {
|
|
126
|
+
const original = process.env.OPENAI_API_KEY;
|
|
127
|
+
process.env.OPENAI_API_KEY = "sk-env-should-not-be-used";
|
|
128
|
+
try {
|
|
129
|
+
const cfg = parseConfig({
|
|
130
|
+
modelSource: "gateway",
|
|
131
|
+
openaiApiKey: "sk-explicit",
|
|
132
|
+
});
|
|
133
|
+
assert.equal(cfg.modelSource, "gateway");
|
|
134
|
+
assert.equal(cfg.openaiApiKey, "sk-explicit");
|
|
135
|
+
} finally {
|
|
136
|
+
if (original === undefined) delete process.env.OPENAI_API_KEY;
|
|
137
|
+
else process.env.OPENAI_API_KEY = original;
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test("parseConfig separates local chat and embedding fallback models", () => {
|
|
142
|
+
const cfg = parseConfig({
|
|
143
|
+
localLlmEnabled: true,
|
|
144
|
+
localLlmModel: "google/gemma-4-26b-a4b",
|
|
145
|
+
embeddingFallbackProvider: "local",
|
|
146
|
+
embeddingFallbackModel: "text-embedding-nomic-embed-text-v1.5@q4_k_m",
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
assert.equal(cfg.localLlmModel, "google/gemma-4-26b-a4b");
|
|
150
|
+
assert.equal(
|
|
151
|
+
cfg.embeddingFallbackModel,
|
|
152
|
+
"text-embedding-nomic-embed-text-v1.5@q4_k_m",
|
|
153
|
+
);
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
test("parseConfig openaiApiKey=false disables implicit OPENAI_API_KEY inheritance", () => {
|
|
157
|
+
const original = process.env.OPENAI_API_KEY;
|
|
158
|
+
process.env.OPENAI_API_KEY = "sk-env-should-not-be-used";
|
|
159
|
+
try {
|
|
160
|
+
const cfg = parseConfig({
|
|
161
|
+
openaiApiKey: false,
|
|
162
|
+
localLlmEnabled: true,
|
|
163
|
+
});
|
|
164
|
+
assert.equal(cfg.modelSource, "plugin");
|
|
165
|
+
assert.equal(cfg.localLlmEnabled, true);
|
|
166
|
+
assert.equal(cfg.openaiApiKey, undefined);
|
|
167
|
+
} finally {
|
|
168
|
+
if (original === undefined) delete process.env.OPENAI_API_KEY;
|
|
169
|
+
else process.env.OPENAI_API_KEY = original;
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
test("parseConfig openaiApiKey string false disables implicit OPENAI_API_KEY inheritance", () => {
|
|
174
|
+
const original = process.env.OPENAI_API_KEY;
|
|
175
|
+
process.env.OPENAI_API_KEY = "sk-env-should-not-be-used";
|
|
176
|
+
try {
|
|
177
|
+
const cfg = parseConfig({
|
|
178
|
+
openaiApiKey: "false",
|
|
179
|
+
localLlmEnabled: "true",
|
|
180
|
+
});
|
|
181
|
+
assert.equal(cfg.localLlmEnabled, true);
|
|
182
|
+
assert.equal(cfg.openaiApiKey, undefined);
|
|
183
|
+
} finally {
|
|
184
|
+
if (original === undefined) delete process.env.OPENAI_API_KEY;
|
|
185
|
+
else process.env.OPENAI_API_KEY = original;
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
test("parseConfig openaiApiKey string 0 is not treated as a direct OpenAI opt-out", () => {
|
|
190
|
+
const original = process.env.OPENAI_API_KEY;
|
|
191
|
+
process.env.OPENAI_API_KEY = "sk-env-should-not-be-used";
|
|
192
|
+
try {
|
|
193
|
+
const cfg = parseConfig({
|
|
194
|
+
openaiApiKey: "0",
|
|
195
|
+
localLlmEnabled: "true",
|
|
196
|
+
});
|
|
197
|
+
assert.equal(cfg.localLlmEnabled, true);
|
|
198
|
+
assert.equal(cfg.openaiApiKey, "0");
|
|
199
|
+
} finally {
|
|
200
|
+
if (original === undefined) delete process.env.OPENAI_API_KEY;
|
|
201
|
+
else process.env.OPENAI_API_KEY = original;
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
test("parseConfig localLlmTimeoutMs accepts CLI-style numeric strings for gateway fallback", () => {
|
|
206
|
+
const cfg = parseConfig({ localLlmTimeoutMs: "600000" });
|
|
207
|
+
assert.equal(cfg.localLlmTimeoutMs, 600_000);
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
test("parseConfig localLlmTimeoutMs clamps invalid values to a positive timeout", () => {
|
|
211
|
+
assert.equal(parseConfig({ localLlmTimeoutMs: 0 }).localLlmTimeoutMs, 1);
|
|
212
|
+
assert.equal(parseConfig({ localLlmTimeoutMs: Number.NaN }).localLlmTimeoutMs, 180_000);
|
|
213
|
+
});
|
|
214
|
+
test("parseConfig extractionTelemetryPrefilterEnabled defaults on and accepts string false", () => {
|
|
215
|
+
assert.equal(parseConfig({}).extractionTelemetryPrefilterEnabled, true);
|
|
216
|
+
assert.equal(parseConfig({ extractionTelemetryPrefilterEnabled: "false" }).extractionTelemetryPrefilterEnabled, false);
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
test("parseConfig lcmTelemetryPrefilterEnabled defaults on and accepts string false", () => {
|
|
220
|
+
assert.equal(parseConfig({}).lcmTelemetryPrefilterEnabled, true);
|
|
221
|
+
assert.equal(parseConfig({ lcmTelemetryPrefilterEnabled: "false" }).lcmTelemetryPrefilterEnabled, false);
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
test("parseConfig keeps explicit cue recall opt-in and budgets configurable", () => {
|
|
225
|
+
const defaults = parseConfig({});
|
|
226
|
+
assert.equal(defaults.explicitCueRecallEnabled, false);
|
|
227
|
+
assert.equal(defaults.explicitCueRecallMaxChars, 2400);
|
|
228
|
+
assert.equal(defaults.explicitCueRecallMaxReferences, 24);
|
|
229
|
+
assert.equal(
|
|
230
|
+
defaults.recallPipeline.find((section) => section.id === "explicit-cue")
|
|
231
|
+
?.enabled,
|
|
232
|
+
false,
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
const cfg = parseConfig({
|
|
236
|
+
explicitCueRecallEnabled: true,
|
|
237
|
+
explicitCueRecallMaxChars: 0,
|
|
238
|
+
explicitCueRecallMaxReferences: 0,
|
|
239
|
+
});
|
|
240
|
+
assert.equal(cfg.explicitCueRecallEnabled, true);
|
|
241
|
+
assert.equal(cfg.explicitCueRecallMaxChars, 0);
|
|
242
|
+
assert.equal(cfg.explicitCueRecallMaxReferences, 0);
|
|
243
|
+
const section = cfg.recallPipeline.find((entry) => entry.id === "explicit-cue");
|
|
244
|
+
assert.equal(section?.enabled, true);
|
|
245
|
+
assert.equal(section?.maxChars, 0);
|
|
246
|
+
assert.equal(section?.maxResults, 0);
|
|
247
|
+
|
|
248
|
+
const cliStyle = parseConfig({
|
|
249
|
+
explicitCueRecallEnabled: "true",
|
|
250
|
+
explicitCueRecallMaxChars: "3200",
|
|
251
|
+
explicitCueRecallMaxReferences: "12",
|
|
252
|
+
});
|
|
253
|
+
assert.equal(cliStyle.explicitCueRecallEnabled, true);
|
|
254
|
+
assert.equal(cliStyle.explicitCueRecallMaxChars, 3200);
|
|
255
|
+
assert.equal(cliStyle.explicitCueRecallMaxReferences, 12);
|
|
256
|
+
const cliSection = cliStyle.recallPipeline.find(
|
|
257
|
+
(entry) => entry.id === "explicit-cue",
|
|
258
|
+
);
|
|
259
|
+
assert.equal(cliSection?.enabled, true);
|
|
260
|
+
assert.equal(cliSection?.maxChars, 3200);
|
|
261
|
+
assert.equal(cliSection?.maxResults, 12);
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
test("research-max preset enables explicit cue recall for benchmark-grade runs", () => {
|
|
265
|
+
const cfg = parseConfig({ memoryOsPreset: "research-max" });
|
|
266
|
+
assert.equal(cfg.explicitCueRecallEnabled, true);
|
|
267
|
+
assert.equal(cfg.explicitCueRecallMaxChars, 3200);
|
|
268
|
+
assert.equal(cfg.lcmEnabled, true);
|
|
269
|
+
assert.equal(
|
|
270
|
+
cfg.recallPipeline.find((section) => section.id === "explicit-cue")
|
|
271
|
+
?.enabled,
|
|
272
|
+
true,
|
|
273
|
+
);
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
test("parseConfig validates lcmObserveConcurrency", () => {
|
|
277
|
+
const cfg = parseConfig({ lcmObserveConcurrency: "4" });
|
|
278
|
+
assert.equal(cfg.lcmObserveConcurrency, 4);
|
|
279
|
+
|
|
280
|
+
assert.throws(
|
|
281
|
+
() => parseConfig({ lcmObserveConcurrency: 0 }),
|
|
282
|
+
/lcmObserveConcurrency must be an integer greater than or equal to 1/,
|
|
283
|
+
);
|
|
284
|
+
assert.throws(
|
|
285
|
+
() => parseConfig({ lcmObserveConcurrency: 1.5 }),
|
|
286
|
+
/lcmObserveConcurrency must be an integer greater than or equal to 1/,
|
|
287
|
+
);
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
test("parseConfig activeRecallCacheTtlMs=-1 falls back to the default ttl", () => {
|
|
291
|
+
const result = parseConfig({ activeRecallCacheTtlMs: -1 });
|
|
292
|
+
assert.equal(result.activeRecallCacheTtlMs, 15000);
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
test("parseConfig preserves custom entity schemas without code changes", () => {
|
|
296
|
+
const result = parseConfig({
|
|
297
|
+
entitySchemas: {
|
|
298
|
+
person: {
|
|
299
|
+
sections: [
|
|
300
|
+
{ key: "beliefs", title: "Beliefs" },
|
|
301
|
+
{ key: "working_on", title: "Working On" },
|
|
302
|
+
],
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
assert.deepEqual((result as any).entitySchemas?.person?.sections, [
|
|
308
|
+
{ key: "beliefs", title: "Beliefs", description: "" },
|
|
309
|
+
{ key: "working_on", title: "Working On", description: "" },
|
|
310
|
+
]);
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
// ── Issue #518: direct-answer retrieval tier config ─────────────────────────
|
|
314
|
+
|
|
315
|
+
test("parseConfig recallDirectAnswerEnabled defaults to true (slice 8a flip)", () => {
|
|
316
|
+
const result = parseConfig({});
|
|
317
|
+
assert.equal(result.recallDirectAnswerEnabled, true);
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
test('parseConfig recallDirectAnswerEnabled coerces string "true" to boolean true', () => {
|
|
321
|
+
const result = parseConfig({ recallDirectAnswerEnabled: "true" });
|
|
322
|
+
assert.equal(result.recallDirectAnswerEnabled, true);
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
test('parseConfig recallDirectAnswerEnabled coerces string "false" to boolean false (rule 36)', () => {
|
|
326
|
+
const result = parseConfig({ recallDirectAnswerEnabled: "false" });
|
|
327
|
+
assert.equal(result.recallDirectAnswerEnabled, false);
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
test("parseConfig recallDirectAnswerEnabled accepts boolean true", () => {
|
|
331
|
+
const result = parseConfig({ recallDirectAnswerEnabled: true });
|
|
332
|
+
assert.equal(result.recallDirectAnswerEnabled, true);
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
test("parseConfig recallDirectAnswerTokenOverlapFloor defaults to 0.55", () => {
|
|
336
|
+
const result = parseConfig({});
|
|
337
|
+
assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0.55);
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
test("parseConfig recallDirectAnswerTokenOverlapFloor=0 is preserved as disable switch (rule 45)", () => {
|
|
341
|
+
const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: 0 });
|
|
342
|
+
assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0);
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
test("parseConfig recallDirectAnswerTokenOverlapFloor=0.8 preserves the explicit value", () => {
|
|
346
|
+
const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: 0.8 });
|
|
347
|
+
assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0.8);
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
test("parseConfig recallDirectAnswerTokenOverlapFloor=-0.1 falls back to default", () => {
|
|
351
|
+
const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: -0.1 });
|
|
352
|
+
assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0.55);
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
test("parseConfig recallDirectAnswerTokenOverlapFloor=1.5 falls back to default", () => {
|
|
356
|
+
const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: 1.5 });
|
|
357
|
+
assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0.55);
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
test('parseConfig recallDirectAnswerTokenOverlapFloor="0.8" (string) coerces to 0.8 (rule 28)', () => {
|
|
361
|
+
const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: "0.8" });
|
|
362
|
+
assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0.8);
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
test('parseConfig recallDirectAnswerTokenOverlapFloor="0" (string) coerces to 0', () => {
|
|
366
|
+
const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: "0" });
|
|
367
|
+
assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0);
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
test('parseConfig recallDirectAnswerTokenOverlapFloor="not-a-number" falls back to default', () => {
|
|
371
|
+
const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: "not-a-number" });
|
|
372
|
+
assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0.55);
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
test('parseConfig recallDirectAnswerImportanceFloor="0.9" (string) coerces to 0.9', () => {
|
|
376
|
+
const result = parseConfig({ recallDirectAnswerImportanceFloor: "0.9" });
|
|
377
|
+
assert.equal(result.recallDirectAnswerImportanceFloor, 0.9);
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
test('parseConfig recallDirectAnswerAmbiguityMargin="0.25" (string) coerces to 0.25', () => {
|
|
381
|
+
const result = parseConfig({ recallDirectAnswerAmbiguityMargin: "0.25" });
|
|
382
|
+
assert.equal(result.recallDirectAnswerAmbiguityMargin, 0.25);
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
test("parseConfig recallDirectAnswerImportanceFloor defaults to 0.7", () => {
|
|
386
|
+
const result = parseConfig({});
|
|
387
|
+
assert.equal(result.recallDirectAnswerImportanceFloor, 0.7);
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
test("parseConfig recallDirectAnswerImportanceFloor=0 is preserved as disable switch", () => {
|
|
391
|
+
const result = parseConfig({ recallDirectAnswerImportanceFloor: 0 });
|
|
392
|
+
assert.equal(result.recallDirectAnswerImportanceFloor, 0);
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
test("parseConfig recallDirectAnswerAmbiguityMargin defaults to 0.15", () => {
|
|
396
|
+
const result = parseConfig({});
|
|
397
|
+
assert.equal(result.recallDirectAnswerAmbiguityMargin, 0.15);
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
test("parseConfig recallDirectAnswerAmbiguityMargin=0.3 preserves explicit value", () => {
|
|
401
|
+
const result = parseConfig({ recallDirectAnswerAmbiguityMargin: 0.3 });
|
|
402
|
+
assert.equal(result.recallDirectAnswerAmbiguityMargin, 0.3);
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
test("parseConfig recallDirectAnswerEligibleTaxonomyBuckets defaults to the documented list", () => {
|
|
406
|
+
const result = parseConfig({});
|
|
407
|
+
assert.deepEqual(result.recallDirectAnswerEligibleTaxonomyBuckets, [
|
|
408
|
+
"decisions",
|
|
409
|
+
"principles",
|
|
410
|
+
"conventions",
|
|
411
|
+
"runbooks",
|
|
412
|
+
"entities",
|
|
413
|
+
]);
|
|
414
|
+
});
|
|
415
|
+
|
|
416
|
+
test("parseConfig recallDirectAnswerEligibleTaxonomyBuckets preserves a custom array", () => {
|
|
417
|
+
const result = parseConfig({
|
|
418
|
+
recallDirectAnswerEligibleTaxonomyBuckets: ["decisions", "runbooks"],
|
|
419
|
+
});
|
|
420
|
+
assert.deepEqual(result.recallDirectAnswerEligibleTaxonomyBuckets, [
|
|
421
|
+
"decisions",
|
|
422
|
+
"runbooks",
|
|
423
|
+
]);
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
test("parseConfig recallDirectAnswerEligibleTaxonomyBuckets filters non-strings and empty strings", () => {
|
|
427
|
+
const result = parseConfig({
|
|
428
|
+
recallDirectAnswerEligibleTaxonomyBuckets: ["decisions", "", 42, null, "runbooks"],
|
|
429
|
+
});
|
|
430
|
+
assert.deepEqual(result.recallDirectAnswerEligibleTaxonomyBuckets, [
|
|
431
|
+
"decisions",
|
|
432
|
+
"runbooks",
|
|
433
|
+
]);
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
test("parseConfig recallDirectAnswerEligibleTaxonomyBuckets=[] is preserved as a disable-all state", () => {
|
|
437
|
+
const result = parseConfig({
|
|
438
|
+
recallDirectAnswerEligibleTaxonomyBuckets: [],
|
|
439
|
+
});
|
|
440
|
+
assert.deepEqual(result.recallDirectAnswerEligibleTaxonomyBuckets, []);
|
|
441
|
+
});
|
|
442
|
+
|
|
443
|
+
test("parseConfig recallDirectAnswerEligibleTaxonomyBuckets non-array value falls back to default", () => {
|
|
444
|
+
const result = parseConfig({
|
|
445
|
+
recallDirectAnswerEligibleTaxonomyBuckets: "decisions",
|
|
446
|
+
});
|
|
447
|
+
assert.deepEqual(result.recallDirectAnswerEligibleTaxonomyBuckets, [
|
|
448
|
+
"decisions",
|
|
449
|
+
"principles",
|
|
450
|
+
"conventions",
|
|
451
|
+
"runbooks",
|
|
452
|
+
"entities",
|
|
453
|
+
]);
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
// ── Issue #548: local LLM thinking-mode suppression ─────────────────────────
|
|
457
|
+
|
|
458
|
+
test("parseConfig localLlmDisableThinking defaults to true (issue #548)", () => {
|
|
459
|
+
const result = parseConfig({});
|
|
460
|
+
assert.equal(result.localLlmDisableThinking, true);
|
|
461
|
+
});
|
|
462
|
+
|
|
463
|
+
test("parseConfig localLlmDisableThinking=false preserves operator opt-out", () => {
|
|
464
|
+
const result = parseConfig({ localLlmDisableThinking: false });
|
|
465
|
+
assert.equal(result.localLlmDisableThinking, false);
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
test('parseConfig localLlmDisableThinking="false" (CLI string) coerces to boolean false (rule 36)', () => {
|
|
469
|
+
// `--config localLlmDisableThinking=false` arrives as string; must
|
|
470
|
+
// coerce or the opt-out silently fails.
|
|
471
|
+
const result = parseConfig({ localLlmDisableThinking: "false" });
|
|
472
|
+
assert.equal(result.localLlmDisableThinking, false);
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
test('parseConfig localLlmDisableThinking="true" (CLI string) coerces to boolean true', () => {
|
|
476
|
+
const result = parseConfig({ localLlmDisableThinking: "true" });
|
|
477
|
+
assert.equal(result.localLlmDisableThinking, true);
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
test('parseConfig localLlmDisableThinking "0"/"no"/"off" all coerce to false', () => {
|
|
481
|
+
assert.equal(parseConfig({ localLlmDisableThinking: "0" }).localLlmDisableThinking, false);
|
|
482
|
+
assert.equal(parseConfig({ localLlmDisableThinking: "no" }).localLlmDisableThinking, false);
|
|
483
|
+
assert.equal(parseConfig({ localLlmDisableThinking: "off" }).localLlmDisableThinking, false);
|
|
484
|
+
});
|
|
485
|
+
|
|
486
|
+
test("parseConfig procedural numeric fields coerce from CLI-style strings (issue #519)", () => {
|
|
487
|
+
const result = parseConfig({
|
|
488
|
+
openaiApiKey: "sk-test",
|
|
489
|
+
procedural: {
|
|
490
|
+
enabled: true,
|
|
491
|
+
minOccurrences: "5",
|
|
492
|
+
successFloor: "0.82",
|
|
493
|
+
autoPromoteOccurrences: "12",
|
|
494
|
+
lookbackDays: "14",
|
|
495
|
+
recallMaxProcedures: "2",
|
|
496
|
+
},
|
|
497
|
+
});
|
|
498
|
+
assert.equal(result.procedural.minOccurrences, 5);
|
|
499
|
+
assert.equal(result.procedural.successFloor, 0.82);
|
|
500
|
+
assert.equal(result.procedural.autoPromoteOccurrences, 12);
|
|
501
|
+
assert.equal(result.procedural.lookbackDays, 14);
|
|
502
|
+
assert.equal(result.procedural.recallMaxProcedures, 2);
|
|
503
|
+
});
|
|
504
|
+
|
|
505
|
+
test("parseConfig applies safer-by-default procedural thresholds (issue #567 PR 3/5)", () => {
|
|
506
|
+
// When the user does not override procedural thresholds, the defaults
|
|
507
|
+
// MUST match the safer floor committed in #567 PR 3. This test locks in
|
|
508
|
+
// the values so a future refactor cannot silently regress them.
|
|
509
|
+
// Slice 4 flips `enabled` to true — asserted in the next test.
|
|
510
|
+
const result = parseConfig({ openaiApiKey: "sk-test" });
|
|
511
|
+
assert.equal(result.procedural.minOccurrences, 3);
|
|
512
|
+
assert.equal(result.procedural.successFloor, 0.75);
|
|
513
|
+
assert.equal(result.procedural.autoPromoteOccurrences, 8);
|
|
514
|
+
assert.equal(result.procedural.lookbackDays, 14);
|
|
515
|
+
assert.equal(result.procedural.recallMaxProcedures, 2);
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
test("buildDefaultRecallPipeline enables procedure-recall when procedural default-on (issue #567 PR 4/5)", () => {
|
|
519
|
+
// Codex P2 on #609: the master gate defaulting to `true` must also flip
|
|
520
|
+
// the default recall pipeline to include the `procedure-recall` section.
|
|
521
|
+
// Previously the pipeline check required `cfg.procedural?.enabled === true`
|
|
522
|
+
// on raw config, so an omitted key left the section disabled even
|
|
523
|
+
// though `parseConfig` reported enabled:true.
|
|
524
|
+
const cfg = parseConfig({ openaiApiKey: "sk-test" });
|
|
525
|
+
assert.equal(cfg.procedural.enabled, true);
|
|
526
|
+
const procSection = cfg.recallPipeline.find(
|
|
527
|
+
(s) => s.id === "procedure-recall",
|
|
528
|
+
);
|
|
529
|
+
assert.ok(procSection, "procedure-recall section must exist by default");
|
|
530
|
+
assert.equal(
|
|
531
|
+
procSection.enabled,
|
|
532
|
+
true,
|
|
533
|
+
"procedure-recall must be enabled when procedural default-on",
|
|
534
|
+
);
|
|
535
|
+
|
|
536
|
+
// Explicit opt-out disables both the master gate and the recall section.
|
|
537
|
+
const optOut = parseConfig({
|
|
538
|
+
openaiApiKey: "sk-test",
|
|
539
|
+
procedural: { enabled: false },
|
|
540
|
+
});
|
|
541
|
+
assert.equal(optOut.procedural.enabled, false);
|
|
542
|
+
const optOutSection = optOut.recallPipeline.find(
|
|
543
|
+
(s) => s.id === "procedure-recall",
|
|
544
|
+
);
|
|
545
|
+
assert.equal(optOutSection?.enabled, false);
|
|
546
|
+
});
|
|
547
|
+
|
|
548
|
+
test("parseConfig rejects non-object procedural shapes (Codex P2 on #609)", () => {
|
|
549
|
+
// `procedural: false` or `procedural: null` would previously normalize
|
|
550
|
+
// to `{}` and then the omitted-key branch would silently enable the
|
|
551
|
+
// feature — the opposite of the user's shorthand intent. Reject loudly.
|
|
552
|
+
for (const v of [false, true, null, 42, "disabled", []] as unknown[]) {
|
|
553
|
+
assert.throws(
|
|
554
|
+
() =>
|
|
555
|
+
parseConfig({ openaiApiKey: "sk-test", procedural: v } as Record<
|
|
556
|
+
string,
|
|
557
|
+
unknown
|
|
558
|
+
>),
|
|
559
|
+
/procedural must be an object/,
|
|
560
|
+
`invalid procedural shape ${JSON.stringify(v)} should throw`,
|
|
561
|
+
);
|
|
562
|
+
}
|
|
563
|
+
// Valid empty object still parses (means "use defaults").
|
|
564
|
+
const blank = parseConfig({ openaiApiKey: "sk-test", procedural: {} });
|
|
565
|
+
assert.equal(blank.procedural.enabled, true);
|
|
566
|
+
});
|
|
567
|
+
|
|
568
|
+
test("conservative memoryOsPreset keeps procedural.enabled off after default flip (issue #567 PR 4/5)", () => {
|
|
569
|
+
// Cursor Medium on #609: the `conservative` preset disables many
|
|
570
|
+
// features; the default flip must not silently opt it into procedural
|
|
571
|
+
// memory.
|
|
572
|
+
const cfg = parseConfig({
|
|
573
|
+
openaiApiKey: "sk-test",
|
|
574
|
+
memoryOsPreset: "conservative",
|
|
575
|
+
});
|
|
576
|
+
assert.equal(cfg.procedural.enabled, false);
|
|
577
|
+
|
|
578
|
+
// A user can still opt back in by setting the key explicitly — the
|
|
579
|
+
// preset is a default, not a ceiling.
|
|
580
|
+
const optedIn = parseConfig({
|
|
581
|
+
openaiApiKey: "sk-test",
|
|
582
|
+
memoryOsPreset: "conservative",
|
|
583
|
+
procedural: { enabled: true },
|
|
584
|
+
});
|
|
585
|
+
assert.equal(optedIn.procedural.enabled, true);
|
|
586
|
+
|
|
587
|
+
// Codex P1 on #609: a user-provided `procedural` block that does NOT
|
|
588
|
+
// set `enabled` must not clobber the preset's `enabled: false`. The
|
|
589
|
+
// preset's procedural object is deep-merged with the baseCfg's
|
|
590
|
+
// procedural object so partial overrides (minOccurrences, lookbackDays)
|
|
591
|
+
// preserve the opt-out.
|
|
592
|
+
const nestedOverride = parseConfig({
|
|
593
|
+
openaiApiKey: "sk-test",
|
|
594
|
+
memoryOsPreset: "conservative",
|
|
595
|
+
procedural: { minOccurrences: 5 },
|
|
596
|
+
});
|
|
597
|
+
assert.equal(
|
|
598
|
+
nestedOverride.procedural.enabled,
|
|
599
|
+
false,
|
|
600
|
+
"conservative opt-out must survive an unrelated procedural override",
|
|
601
|
+
);
|
|
602
|
+
assert.equal(nestedOverride.procedural.minOccurrences, 5);
|
|
603
|
+
});
|
|
604
|
+
|
|
605
|
+
test("parseConfig defaults procedural.enabled to true when omitted (issue #567 PR 4/5)", () => {
|
|
606
|
+
// Omitting `procedural.enabled` ships the feature ON. Users who were
|
|
607
|
+
// previously on the default-off branch get the new default automatically.
|
|
608
|
+
const omitted = parseConfig({ openaiApiKey: "sk-test" });
|
|
609
|
+
assert.equal(omitted.procedural.enabled, true);
|
|
610
|
+
|
|
611
|
+
// Omitting the `procedural` object entirely is equivalent — covers the
|
|
612
|
+
// "no procedural key at all" path which is distinct from
|
|
613
|
+
// `procedural: {}` as a runtime shape.
|
|
614
|
+
const bareConfig = parseConfig({
|
|
615
|
+
openaiApiKey: "sk-test",
|
|
616
|
+
procedural: {},
|
|
617
|
+
});
|
|
618
|
+
assert.equal(bareConfig.procedural.enabled, true);
|
|
619
|
+
|
|
620
|
+
// Explicit `false` (boolean) still honors opt-out.
|
|
621
|
+
const optOutBool = parseConfig({
|
|
622
|
+
openaiApiKey: "sk-test",
|
|
623
|
+
procedural: { enabled: false },
|
|
624
|
+
});
|
|
625
|
+
assert.equal(optOutBool.procedural.enabled, false);
|
|
626
|
+
|
|
627
|
+
// CLI-style `"false"` string must also coerce to off (CLAUDE.md rule 36).
|
|
628
|
+
const optOutFalseStr = parseConfig({
|
|
629
|
+
openaiApiKey: "sk-test",
|
|
630
|
+
procedural: { enabled: "false" },
|
|
631
|
+
});
|
|
632
|
+
assert.equal(optOutFalseStr.procedural.enabled, false);
|
|
633
|
+
|
|
634
|
+
// Other falsy-ish strings also opt out.
|
|
635
|
+
for (const v of ["0", "no", "off"]) {
|
|
636
|
+
const cfg = parseConfig({
|
|
637
|
+
openaiApiKey: "sk-test",
|
|
638
|
+
procedural: { enabled: v },
|
|
639
|
+
});
|
|
640
|
+
assert.equal(
|
|
641
|
+
cfg.procedural.enabled,
|
|
642
|
+
false,
|
|
643
|
+
`procedural.enabled="${v}" should opt out`,
|
|
644
|
+
);
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// Explicit `true` keeps the feature on (idempotent with the new default).
|
|
648
|
+
const explicitOn = parseConfig({
|
|
649
|
+
openaiApiKey: "sk-test",
|
|
650
|
+
procedural: { enabled: true },
|
|
651
|
+
});
|
|
652
|
+
assert.equal(explicitOn.procedural.enabled, true);
|
|
653
|
+
|
|
654
|
+
// CLAUDE.md rule 51: when the key IS present but the value can't be
|
|
655
|
+
// understood, reject loudly instead of silently flipping the default.
|
|
656
|
+
// (Codex P1 review on #609.)
|
|
657
|
+
for (const v of ["maybe", "fales", "TRUE-ish", "", " "]) {
|
|
658
|
+
assert.throws(
|
|
659
|
+
() =>
|
|
660
|
+
parseConfig({
|
|
661
|
+
openaiApiKey: "sk-test",
|
|
662
|
+
procedural: { enabled: v },
|
|
663
|
+
}),
|
|
664
|
+
/procedural\.enabled must be a boolean/,
|
|
665
|
+
`invalid string ${JSON.stringify(v)} should throw`,
|
|
666
|
+
);
|
|
667
|
+
}
|
|
668
|
+
// Numeric 0/1 are not valid either — they silently became false/true via
|
|
669
|
+
// a truthiness check in earlier drafts. Reject with the same message.
|
|
670
|
+
for (const v of [0, 1, 2, null]) {
|
|
671
|
+
assert.throws(
|
|
672
|
+
() =>
|
|
673
|
+
parseConfig({
|
|
674
|
+
openaiApiKey: "sk-test",
|
|
675
|
+
procedural: { enabled: v },
|
|
676
|
+
}),
|
|
677
|
+
/procedural\.enabled must be a boolean/,
|
|
678
|
+
`invalid non-boolean ${JSON.stringify(v)} should throw`,
|
|
679
|
+
);
|
|
680
|
+
}
|
|
681
|
+
});
|
|
682
|
+
|
|
683
|
+
test("parseConfig codingMode: defaults projectScope=true, branchScope=false (issue #569)", () => {
|
|
684
|
+
const result = parseConfig({ openaiApiKey: "sk-test" });
|
|
685
|
+
assert.equal(result.codingMode.projectScope, true, "projectScope defaults to true");
|
|
686
|
+
assert.equal(result.codingMode.branchScope, false, "branchScope defaults to false (opt-in)");
|
|
687
|
+
});
|
|
688
|
+
|
|
689
|
+
test("parseConfig codingMode: accepts explicit booleans and CLI-style strings (issue #569)", () => {
|
|
690
|
+
// CLAUDE.md #36: string "false" must coerce to boolean false.
|
|
691
|
+
const result = parseConfig({
|
|
692
|
+
openaiApiKey: "sk-test",
|
|
693
|
+
codingMode: { projectScope: "false", branchScope: "true" },
|
|
694
|
+
});
|
|
695
|
+
assert.equal(result.codingMode.projectScope, false);
|
|
696
|
+
assert.equal(result.codingMode.branchScope, true);
|
|
697
|
+
});
|
|
698
|
+
|
|
699
|
+
test("parseConfig codingMode: unknown object shape falls back to defaults", () => {
|
|
700
|
+
const result = parseConfig({ openaiApiKey: "sk-test", codingMode: null });
|
|
701
|
+
assert.equal(result.codingMode.projectScope, true);
|
|
702
|
+
assert.equal(result.codingMode.branchScope, false);
|
|
703
|
+
});
|
|
704
|
+
|
|
705
|
+
// Pattern reinforcement (issue #687 PR 2/4)
|
|
706
|
+
|
|
707
|
+
test("parseConfig: pattern reinforcement defaults are off, weekly, minCount=3, std categories", () => {
|
|
708
|
+
const result = parseConfig({ openaiApiKey: "sk-test" });
|
|
709
|
+
assert.equal(result.patternReinforcementEnabled, false);
|
|
710
|
+
assert.equal(result.patternReinforcementCadenceMs, 7 * 24 * 60 * 60 * 1000);
|
|
711
|
+
assert.equal(result.patternReinforcementMinCount, 3);
|
|
712
|
+
assert.deepEqual(result.patternReinforcementCategories, [
|
|
713
|
+
"preference",
|
|
714
|
+
"fact",
|
|
715
|
+
"decision",
|
|
716
|
+
]);
|
|
717
|
+
});
|
|
718
|
+
|
|
719
|
+
test("parseConfig: patternReinforcementEnabled accepts string-coerced booleans", () => {
|
|
720
|
+
const t = parseConfig({ openaiApiKey: "sk-test", patternReinforcementEnabled: "true" });
|
|
721
|
+
assert.equal(t.patternReinforcementEnabled, true);
|
|
722
|
+
const f = parseConfig({ openaiApiKey: "sk-test", patternReinforcementEnabled: "false" });
|
|
723
|
+
assert.equal(f.patternReinforcementEnabled, false);
|
|
724
|
+
});
|
|
725
|
+
|
|
726
|
+
test("parseConfig: patternReinforcementMinCount clamps to >= 2", () => {
|
|
727
|
+
const r0 = parseConfig({ openaiApiKey: "sk-test", patternReinforcementMinCount: 0 });
|
|
728
|
+
assert.equal(r0.patternReinforcementMinCount, 2);
|
|
729
|
+
const r1 = parseConfig({ openaiApiKey: "sk-test", patternReinforcementMinCount: 1 });
|
|
730
|
+
assert.equal(r1.patternReinforcementMinCount, 2);
|
|
731
|
+
const r5 = parseConfig({ openaiApiKey: "sk-test", patternReinforcementMinCount: 5 });
|
|
732
|
+
assert.equal(r5.patternReinforcementMinCount, 5);
|
|
733
|
+
});
|
|
734
|
+
|
|
735
|
+
test("parseConfig: patternReinforcementCadenceMs honors documented disable=0", () => {
|
|
736
|
+
const r = parseConfig({ openaiApiKey: "sk-test", patternReinforcementCadenceMs: 0 });
|
|
737
|
+
assert.equal(r.patternReinforcementCadenceMs, 0);
|
|
738
|
+
});
|
|
739
|
+
|
|
740
|
+
test("parseConfig: patternReinforcementCategories filters non-string entries", () => {
|
|
741
|
+
const r = parseConfig({
|
|
742
|
+
openaiApiKey: "sk-test",
|
|
743
|
+
patternReinforcementCategories: ["preference", 42, " ", "fact"],
|
|
744
|
+
});
|
|
745
|
+
assert.deepEqual(r.patternReinforcementCategories, ["preference", "fact"]);
|
|
746
|
+
});
|
|
747
|
+
|
|
748
|
+
test("parseConfig: non-array patternReinforcementCategories falls back to defaults", () => {
|
|
749
|
+
const r = parseConfig({
|
|
750
|
+
openaiApiKey: "sk-test",
|
|
751
|
+
patternReinforcementCategories: "preference,fact",
|
|
752
|
+
});
|
|
753
|
+
assert.deepEqual(r.patternReinforcementCategories, [
|
|
754
|
+
"preference",
|
|
755
|
+
"fact",
|
|
756
|
+
"decision",
|
|
757
|
+
]);
|
|
758
|
+
});
|
|
759
|
+
|
|
760
|
+
// ── #683 PR 2/N: connectors.googleDrive parsing.
|
|
761
|
+
|
|
762
|
+
test("parseConfig connectors defaults: googleDrive disabled with empty creds", () => {
|
|
763
|
+
const result = parseConfig({ openaiApiKey: "sk-test" });
|
|
764
|
+
assert.equal(result.connectors.googleDrive.enabled, false);
|
|
765
|
+
assert.equal(result.connectors.googleDrive.clientId, "");
|
|
766
|
+
assert.equal(result.connectors.googleDrive.clientSecret, "");
|
|
767
|
+
assert.equal(result.connectors.googleDrive.refreshToken, "");
|
|
768
|
+
assert.equal(result.connectors.googleDrive.pollIntervalMs, 300_000);
|
|
769
|
+
assert.deepEqual(result.connectors.googleDrive.folderIds, []);
|
|
770
|
+
});
|
|
771
|
+
|
|
772
|
+
test("parseConfig connectors.googleDrive accepts valid overrides", () => {
|
|
773
|
+
const result = parseConfig({
|
|
774
|
+
openaiApiKey: "sk-test",
|
|
775
|
+
connectors: {
|
|
776
|
+
googleDrive: {
|
|
777
|
+
enabled: true,
|
|
778
|
+
clientId: "synthetic-client",
|
|
779
|
+
clientSecret: "synthetic-secret",
|
|
780
|
+
refreshToken: "synthetic-token",
|
|
781
|
+
pollIntervalMs: 60_000,
|
|
782
|
+
folderIds: [
|
|
783
|
+
"1AbCdEfGh_synthetic_folder_aaaaa",
|
|
784
|
+
"1AbCdEfGh_synthetic_folder_aaaaa", // dup — should dedupe
|
|
785
|
+
"1AbCdEfGh_synthetic_folder_bbbbb",
|
|
786
|
+
" ", // empty after trim — should drop
|
|
787
|
+
],
|
|
788
|
+
},
|
|
789
|
+
},
|
|
790
|
+
});
|
|
791
|
+
assert.equal(result.connectors.googleDrive.enabled, true);
|
|
792
|
+
assert.equal(result.connectors.googleDrive.pollIntervalMs, 60_000);
|
|
793
|
+
assert.deepEqual(result.connectors.googleDrive.folderIds, [
|
|
794
|
+
"1AbCdEfGh_synthetic_folder_aaaaa",
|
|
795
|
+
"1AbCdEfGh_synthetic_folder_bbbbb",
|
|
796
|
+
]);
|
|
797
|
+
});
|
|
798
|
+
|
|
799
|
+
test("parseConfig rejects malformed connectors top-level", () => {
|
|
800
|
+
assert.throws(
|
|
801
|
+
() => parseConfig({ openaiApiKey: "sk-test", connectors: "nope" }),
|
|
802
|
+
/connectors must be an object/,
|
|
803
|
+
);
|
|
804
|
+
assert.throws(
|
|
805
|
+
() => parseConfig({ openaiApiKey: "sk-test", connectors: null }),
|
|
806
|
+
/connectors must be an object/,
|
|
807
|
+
);
|
|
808
|
+
assert.throws(
|
|
809
|
+
() => parseConfig({ openaiApiKey: "sk-test", connectors: [] }),
|
|
810
|
+
/connectors must be an object/,
|
|
811
|
+
);
|
|
812
|
+
});
|
|
813
|
+
|
|
814
|
+
test("parseConfig rejects malformed connectors.googleDrive shape", () => {
|
|
815
|
+
assert.throws(
|
|
816
|
+
() =>
|
|
817
|
+
parseConfig({
|
|
818
|
+
openaiApiKey: "sk-test",
|
|
819
|
+
connectors: { googleDrive: "nope" },
|
|
820
|
+
}),
|
|
821
|
+
/connectors\.googleDrive must be an object/,
|
|
822
|
+
);
|
|
823
|
+
});
|
|
824
|
+
|
|
825
|
+
test("parseConfig rejects out-of-range pollIntervalMs", () => {
|
|
826
|
+
assert.throws(
|
|
827
|
+
() =>
|
|
828
|
+
parseConfig({
|
|
829
|
+
openaiApiKey: "sk-test",
|
|
830
|
+
connectors: { googleDrive: { pollIntervalMs: 50 } },
|
|
831
|
+
}),
|
|
832
|
+
/pollIntervalMs must be an integer in/,
|
|
833
|
+
);
|
|
834
|
+
assert.throws(
|
|
835
|
+
() =>
|
|
836
|
+
parseConfig({
|
|
837
|
+
openaiApiKey: "sk-test",
|
|
838
|
+
connectors: { googleDrive: { pollIntervalMs: 9_999_999_999 } },
|
|
839
|
+
}),
|
|
840
|
+
/pollIntervalMs must be an integer in/,
|
|
841
|
+
);
|
|
842
|
+
});
|
|
843
|
+
|
|
844
|
+
test("parseConfig rejects malformed folderIds", () => {
|
|
845
|
+
assert.throws(
|
|
846
|
+
() =>
|
|
847
|
+
parseConfig({
|
|
848
|
+
openaiApiKey: "sk-test",
|
|
849
|
+
connectors: { googleDrive: { folderIds: "not-an-array" } },
|
|
850
|
+
}),
|
|
851
|
+
/folderIds must be an array/,
|
|
852
|
+
);
|
|
853
|
+
assert.throws(
|
|
854
|
+
() =>
|
|
855
|
+
parseConfig({
|
|
856
|
+
openaiApiKey: "sk-test",
|
|
857
|
+
connectors: { googleDrive: { folderIds: [42] } },
|
|
858
|
+
}),
|
|
859
|
+
/folderIds entries must be strings/,
|
|
860
|
+
);
|
|
861
|
+
});
|
|
862
|
+
|
|
863
|
+
// ── #683 PR 4/6: connectors.gmail.pollIntervalMs validation (Codex P2 PRRT_kwDORJXyws59se75)
|
|
864
|
+
// Per CLAUDE.md gotcha #51: invalid values must throw, not silently default.
|
|
865
|
+
|
|
866
|
+
test("parseConfig connectors.gmail accepts default pollIntervalMs when omitted", () => {
|
|
867
|
+
const result = parseConfig({ openaiApiKey: "sk-test" });
|
|
868
|
+
assert.equal(result.connectors.gmail.pollIntervalMs, 300_000, "default gmail pollIntervalMs must be 300000");
|
|
869
|
+
});
|
|
870
|
+
|
|
871
|
+
test("parseConfig connectors.gmail accepts valid pollIntervalMs", () => {
|
|
872
|
+
const result = parseConfig({
|
|
873
|
+
openaiApiKey: "sk-test",
|
|
874
|
+
connectors: { gmail: { pollIntervalMs: 60_000 } },
|
|
875
|
+
});
|
|
876
|
+
assert.equal(result.connectors.gmail.pollIntervalMs, 60_000);
|
|
877
|
+
});
|
|
878
|
+
|
|
879
|
+
test("parseConfig rejects connectors.gmail.pollIntervalMs = 0 (must be positive)", () => {
|
|
880
|
+
assert.throws(
|
|
881
|
+
() => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: 0 } } }),
|
|
882
|
+
/positive/,
|
|
883
|
+
"zero pollIntervalMs must be rejected",
|
|
884
|
+
);
|
|
885
|
+
});
|
|
886
|
+
|
|
887
|
+
test("parseConfig rejects connectors.gmail.pollIntervalMs < 0 (negative)", () => {
|
|
888
|
+
assert.throws(
|
|
889
|
+
() => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: -1 } } }),
|
|
890
|
+
/positive/,
|
|
891
|
+
);
|
|
892
|
+
});
|
|
893
|
+
|
|
894
|
+
test("parseConfig rejects connectors.gmail.pollIntervalMs as NaN (Codex P2)", () => {
|
|
895
|
+
assert.throws(
|
|
896
|
+
() => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: NaN } } }),
|
|
897
|
+
/finite/,
|
|
898
|
+
"NaN pollIntervalMs must be rejected with a message mentioning finite",
|
|
899
|
+
);
|
|
900
|
+
});
|
|
901
|
+
|
|
902
|
+
test("parseConfig rejects connectors.gmail.pollIntervalMs as non-numeric string (Codex P2)", () => {
|
|
903
|
+
assert.throws(
|
|
904
|
+
() => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: "not-a-number" } } }),
|
|
905
|
+
/finite/,
|
|
906
|
+
"non-numeric string pollIntervalMs must be rejected",
|
|
907
|
+
);
|
|
908
|
+
});
|
|
909
|
+
|
|
910
|
+
test("parseConfig rejects connectors.gmail.pollIntervalMs as Infinity (Codex P2)", () => {
|
|
911
|
+
assert.throws(
|
|
912
|
+
() => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: Infinity } } }),
|
|
913
|
+
/finite/,
|
|
914
|
+
"Infinity pollIntervalMs must be rejected",
|
|
915
|
+
);
|
|
916
|
+
});
|
|
917
|
+
|
|
918
|
+
test("parseConfig rejects connectors.gmail.pollIntervalMs below minimum (50ms)", () => {
|
|
919
|
+
assert.throws(
|
|
920
|
+
() => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: 50 } } }),
|
|
921
|
+
/pollIntervalMs/,
|
|
922
|
+
);
|
|
923
|
+
});
|
|
924
|
+
|
|
925
|
+
test("parseConfig rejects connectors.gmail.pollIntervalMs above maximum (25h)", () => {
|
|
926
|
+
assert.throws(
|
|
927
|
+
() => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: 25 * 60 * 60 * 1000 } } }),
|
|
928
|
+
/pollIntervalMs/,
|
|
929
|
+
);
|
|
930
|
+
});
|