@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/compounding/engine.ts","../src/shared-context/manager.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { mkdir, readFile, readdir, unlink, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { log } from \"../logger.js\";\nimport { sanitizeMemoryContent } from \"../sanitize.js\";\nimport { StorageManager } from \"../storage.js\";\nimport type { ContinuityIncidentRecord, PluginConfig } from \"../types.js\";\nimport { resolveSharedContextDir, SharedFeedbackEntrySchema, type SharedFeedbackEntry } from \"../shared-context/manager.js\";\nimport { parseContinuityImprovementLoops } from \"../identity-continuity.js\";\n\ntype MistakesFile = {\n version?: number;\n updatedAt: string;\n patterns: string[];\n registry?: MistakeRegistryEntry[];\n};\n\ntype FeedbackEntryWithProvenance = {\n entry: SharedFeedbackEntry;\n sourceLine: number;\n sourcePath: string;\n entryId: string;\n};\n\ntype PatternWithProvenance = {\n pattern: string;\n provenance: string[];\n};\n\ntype ActionOutcomeCounts = {\n applied: number;\n skipped: number;\n failed: number;\n};\n\ntype ActionOutcomeSummary = {\n action: string;\n counts: ActionOutcomeCounts;\n total: number;\n weightedScore: number;\n provenance: string[];\n};\n\ntype PromotionCandidate = {\n id: string;\n sourceType: \"action-outcome\" | \"mistake-pattern\" | \"rubric\" | \"causal-pattern\";\n subject: string;\n category: \"principle\" | \"rule\";\n content: string;\n score: number;\n rationale: string;\n outcome: ActionOutcomeCounts | null;\n provenance: string[];\n agent: string | null;\n workflow: string | null;\n};\n\ntype CompoundingEntrySeverity = \"low\" | \"medium\" | \"high\";\n\ntype EvidenceWindow = {\n start: string | null;\n end: string | null;\n};\n\ntype MistakeRegistryEntry = {\n id: string;\n pattern: string;\n category: \"feedback\" | \"action\";\n status: \"active\" | \"retired\";\n agent: string | null;\n workflow: string | null;\n tags: string[];\n severity: CompoundingEntrySeverity | null;\n confidence: number | null;\n outcome: string | null;\n provenance: string[];\n firstSeenAt: string;\n lastSeenAt: string;\n recurrenceCount: number;\n lastWeekId: string;\n evidenceWindow: EvidenceWindow;\n mergedFromIds?: string[];\n retiredAt?: string | null;\n};\n\ntype RubricSnapshotEntry = {\n id: string;\n kind: \"agent\" | \"workflow\";\n subject: string;\n observations: string[];\n tags: string[];\n provenance: string[];\n observationEntries?: Array<{\n note: string;\n provenance: string[];\n }>;\n updatedAt: string;\n};\n\ntype RubricSnapshot = {\n updatedAt: string;\n agents: RubricSnapshotEntry[];\n workflows: RubricSnapshotEntry[];\n};\n\ntype WeeklyCompoundingArtifact = {\n version: number;\n generatedAt: string;\n weekId: string;\n feedback: {\n count: number;\n byDecision: Record<\"approved\" | \"approved_with_feedback\" | \"rejected\", number>;\n entries: Array<{\n agent: string;\n workflow: string | null;\n decision: SharedFeedbackEntry[\"decision\"];\n reason: string;\n learning: string | null;\n outcome: string | null;\n severity: CompoundingEntrySeverity | null;\n confidence: number | null;\n tags: string[];\n provenance: string;\n evidenceWindow: EvidenceWindow;\n }>;\n };\n mistakes: {\n count: number;\n patterns: string[];\n registry: MistakeRegistryEntry[];\n };\n rubrics: RubricSnapshot;\n outcomes: ActionOutcomeSummary[];\n promotionCandidates: PromotionCandidate[];\n continuity: { monthId: string; weeklyPath: string | null; monthlyPath: string | null };\n};\n\nexport interface CompoundingPromotionReport {\n enabled: boolean;\n dryRun: boolean;\n weekId: string;\n promoted: Array<{\n id: string;\n candidateId: string;\n category: \"principle\" | \"rule\";\n content: string;\n confidence: number;\n tags: string[];\n lineage: string[];\n }>;\n skipped: Array<{\n weekId: string;\n candidateId?: string;\n reason: \"disabled\" | \"weekly-artifact-missing\" | \"candidate-not-found\" | \"duplicate-guidance\";\n existingMemoryId?: string;\n }>;\n}\n\ntype WeeklyActionEvent = {\n line: number;\n action: string;\n outcome: \"applied\" | \"skipped\" | \"failed\";\n policyDecision: \"deny\" | \"defer\" | null;\n namespace: string;\n reason: string | null;\n};\n\nconst COMPOUNDING_VERSION = 2;\nconst RETIREMENT_WINDOW_WEEKS = 8;\n\nfunction stableSlug(value: string): string {\n return value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 80) || \"item\";\n}\n\nfunction tokenizeRecallQuery(text: string): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const token of text\n .toLowerCase()\n .replace(/[^a-z0-9\\s]+/g, \" \")\n .split(/\\s+/)\n .map((part) => part.trim())\n .filter((part) => part.length >= 3)) {\n if (seen.has(token)) continue;\n seen.add(token);\n out.push(token);\n }\n return out;\n}\n\nfunction weekIdToIndex(weekId: string): number {\n const match = weekId.match(/^(\\d{4})-W(\\d{2})$/);\n if (!match) return Number.POSITIVE_INFINITY;\n const year = Number(match[1]);\n const week = Number(match[2]);\n if (!Number.isInteger(year) || !Number.isInteger(week) || week < 1 || week > 53) {\n return Number.POSITIVE_INFINITY;\n }\n const jan4 = new Date(Date.UTC(year, 0, 4));\n const jan4Day = jan4.getUTCDay() || 7;\n const isoWeekOneStart = new Date(jan4);\n isoWeekOneStart.setUTCDate(jan4.getUTCDate() - (jan4Day - 1));\n const targetWeekStart = new Date(isoWeekOneStart);\n targetWeekStart.setUTCDate(isoWeekOneStart.getUTCDate() + ((week - 1) * 7));\n return Math.floor(targetWeekStart.getTime() / (7 * 24 * 60 * 60 * 1000));\n}\n\nfunction normalizeConfidence(value: unknown): number | null {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return null;\n const clamped = Math.max(0, Math.min(1, value));\n return Number(clamped.toFixed(3));\n}\n\nfunction normalizeTags(tags: string[] | undefined): string[] {\n if (!Array.isArray(tags)) return [];\n return [...new Set(tags.map((tag) => String(tag).trim()).filter((tag) => tag.length > 0))].sort();\n}\n\nfunction normalizeEvidenceWindow(start?: string, end?: string): EvidenceWindow {\n const safeStart = typeof start === \"string\" && start.trim().length > 0 ? start : null;\n const safeEnd = typeof end === \"string\" && end.trim().length > 0 ? end : null;\n return { start: safeStart, end: safeEnd };\n}\n\nfunction mergeEvidenceWindows(current: EvidenceWindow, next: EvidenceWindow): EvidenceWindow {\n return {\n start: current.start === null ? next.start : next.start === null ? current.start : current.start <= next.start ? current.start : next.start,\n end: current.end === null ? next.end : next.end === null ? current.end : current.end >= next.end ? current.end : next.end,\n };\n}\n\nfunction stableMistakeId(\n category: \"feedback\" | \"action\",\n pattern: string,\n agent: string | null,\n workflow: string | null,\n): string {\n return [\n category,\n agent ? stableSlug(agent) : \"global\",\n workflow ? stableSlug(workflow) : \"default\",\n stableSlug(pattern).slice(0, 48),\n ].join(\":\");\n}\n\nfunction stableRubricId(kind: \"agent\" | \"workflow\", subject: string): string {\n return `${kind}:${stableSlug(subject)}`;\n}\n\nfunction stablePromotionCandidateId(\n sourceType: PromotionCandidate[\"sourceType\"],\n subject: string,\n content: string,\n): string {\n const digest = createHash(\"sha256\")\n .update(`${sourceType}\\u0000${subject}\\u0000${content}`)\n .digest(\"hex\")\n .slice(0, 12);\n return `${sourceType}:${digest}`;\n}\n\nfunction rubricArtifactFileName(\n entry: Pick<RubricSnapshotEntry, \"kind\" | \"subject\">,\n slugCollisions: ReadonlyMap<string, number>,\n): string {\n const slug = stableSlug(entry.subject);\n if ((slugCollisions.get(slug) ?? 0) <= 1) return `${slug}.md`;\n const suffix = createHash(\"sha256\").update(`${entry.kind}:${entry.subject}`).digest(\"hex\").slice(0, 8);\n return `${slug}-${suffix}.md`;\n}\n\nfunction inferLegacyMistakeScope(pattern: string): { agent: string | null; workflow: string | null } {\n const separatorIndex = pattern.indexOf(\":\");\n if (separatorIndex <= 0) return { agent: null, workflow: null };\n const subject = pattern.slice(0, separatorIndex).trim();\n return {\n agent: subject.length > 0 ? subject : null,\n workflow: null,\n };\n}\n\nfunction inferLegacyMistakeMetadata(pattern: string): {\n category: \"feedback\" | \"action\";\n agent: string | null;\n workflow: string | null;\n} {\n if (pattern.startsWith(\"memory-action/\")) {\n return {\n category: \"action\",\n agent: null,\n workflow: \"memory-actions\",\n };\n }\n const scope = inferLegacyMistakeScope(pattern);\n return {\n category: \"feedback\",\n agent: scope.agent,\n workflow: scope.workflow,\n };\n}\n\nfunction normalizePromotionWhitespace(value: string): string {\n return value.replace(/\\s+/g, \" \").trim();\n}\n\nfunction stripTrailingPromotionPunctuation(value: string): string {\n return value.replace(/[,:;]+$/g, \"\").trim();\n}\n\nfunction extractExplicitIfThenRule(value: string): string | null {\n const normalized = normalizePromotionWhitespace(value);\n const match = normalized.match(/^if\\b([\\s\\S]+?)\\bthen\\b([\\s\\S]+?)(?:[.!?])?$/i);\n if (!match) return null;\n const condition = stripTrailingPromotionPunctuation(normalizePromotionWhitespace(match[1] ?? \"\"));\n const outcome = stripTrailingPromotionPunctuation(normalizePromotionWhitespace(match[2] ?? \"\"));\n if (condition.length === 0 || outcome.length === 0) return null;\n return `IF ${condition} THEN ${outcome}.`;\n}\n\nfunction normalizePromotedGuidanceContent(value: string): string {\n const explicitRule = extractExplicitIfThenRule(value);\n if (explicitRule) return explicitRule;\n const normalized = normalizePromotionWhitespace(value);\n if (normalized.length === 0) return normalized;\n return /[.!?]$/.test(normalized) ? normalized : `${normalized}.`;\n}\n\nfunction canonicalPromotionContentKey(value: string): string {\n return normalizePromotedGuidanceContent(value).toLowerCase();\n}\n\nfunction lessonContentFromPattern(pattern: string, agent: string | null): string {\n if (!agent) return normalizePromotionWhitespace(pattern);\n const prefix = `${agent}:`;\n if (!pattern.startsWith(prefix)) return normalizePromotionWhitespace(pattern);\n const withoutPrefix = pattern.slice(prefix.length).trim();\n return withoutPrefix.length > 0 ? normalizePromotionWhitespace(withoutPrefix) : normalizePromotionWhitespace(pattern);\n}\n\nfunction promotionCategoryForContent(content: string): \"principle\" | \"rule\" {\n return extractExplicitIfThenRule(content) ? \"rule\" : \"principle\";\n}\n\nfunction clampPromotionScore(value: number): number {\n if (!Number.isFinite(value)) return 0.65;\n return Number(Math.max(0.65, Math.min(0.98, value)).toFixed(3));\n}\n\nexport type TierMigrationCycleTrigger = \"extraction\" | \"maintenance\";\nexport interface TierMigrationCycleBudget {\n limit: number;\n scanLimit: number;\n minIntervalMs: number;\n}\n\nexport function defaultTierMigrationCycleBudget(\n config: Pick<PluginConfig, \"qmdTierAutoBackfillEnabled\">,\n trigger: TierMigrationCycleTrigger,\n): TierMigrationCycleBudget {\n if (trigger === \"extraction\") {\n const limit = 12;\n return {\n limit,\n scanLimit: limit * 4,\n minIntervalMs: 60_000,\n };\n }\n const limit = config.qmdTierAutoBackfillEnabled ? 200 : 50;\n return {\n limit,\n scanLimit: limit * 4,\n minIntervalMs: config.qmdTierAutoBackfillEnabled ? 120_000 : 300_000,\n };\n}\n\nfunction isoWeekId(d: Date): string {\n // ISO week based on Thursday\n const dt = new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()));\n const day = dt.getUTCDay() || 7;\n dt.setUTCDate(dt.getUTCDate() + 4 - day);\n const yearStart = new Date(Date.UTC(dt.getUTCFullYear(), 0, 1));\n const week = Math.ceil((((dt.getTime() - yearStart.getTime()) / 86400000) + 1) / 7);\n const yyyy = dt.getUTCFullYear();\n return `${yyyy}-W${String(week).padStart(2, \"0\")}`;\n}\n\nfunction isoMonthId(d: Date): string {\n return `${d.getUTCFullYear()}-${String(d.getUTCMonth() + 1).padStart(2, \"0\")}`;\n}\n\nfunction monthIdFromIsoWeek(weekId: string): string {\n const match = weekId.match(/^(\\d{4})-W(\\d{2})$/);\n if (!match) return isoMonthId(new Date());\n const year = Number(match[1]);\n const week = Number(match[2]);\n const jan4 = new Date(Date.UTC(year, 0, 4));\n const jan4Day = jan4.getUTCDay() || 7;\n const isoWeekOneMonday = new Date(jan4);\n isoWeekOneMonday.setUTCDate(jan4.getUTCDate() - (jan4Day - 1));\n const monday = new Date(isoWeekOneMonday);\n monday.setUTCDate(isoWeekOneMonday.getUTCDate() + (week - 1) * 7);\n return isoMonthId(monday);\n}\n\nfunction cadenceStaleWindowMs(cadence: \"daily\" | \"weekly\" | \"monthly\" | \"quarterly\"): number {\n switch (cadence) {\n case \"daily\":\n return 2 * 24 * 60 * 60 * 1000;\n case \"weekly\":\n return 10 * 24 * 60 * 60 * 1000;\n case \"monthly\":\n return 45 * 24 * 60 * 60 * 1000;\n case \"quarterly\":\n return 120 * 24 * 60 * 60 * 1000;\n default:\n return 45 * 24 * 60 * 60 * 1000;\n }\n}\n\nexport class CompoundingEngine {\n private readonly weeklyDir: string;\n private readonly rubricsDir: string;\n private readonly rubricsIndexPath: string;\n private readonly rubricsAgentsDir: string;\n private readonly rubricsWorkflowsDir: string;\n private readonly rubricsPath: string;\n private readonly mistakesPath: string;\n private readonly feedbackInboxPath: string;\n private readonly identityAuditWeeklyDir: string;\n private readonly identityAuditMonthlyDir: string;\n private readonly memoryActionEventsPath: string;\n\n constructor(\n private readonly config: PluginConfig,\n private readonly storage: StorageManager = new StorageManager(config.memoryDir),\n ) {\n this.weeklyDir = path.join(config.memoryDir, \"compounding\", \"weekly\");\n this.rubricsDir = path.join(config.memoryDir, \"compounding\", \"rubrics\");\n this.rubricsIndexPath = path.join(this.rubricsDir, \"index.json\");\n this.rubricsAgentsDir = path.join(this.rubricsDir, \"agents\");\n this.rubricsWorkflowsDir = path.join(this.rubricsDir, \"workflows\");\n this.rubricsPath = path.join(config.memoryDir, \"compounding\", \"rubrics.md\");\n this.mistakesPath = path.join(config.memoryDir, \"compounding\", \"mistakes.json\");\n this.feedbackInboxPath = path.join(resolveSharedContextDir(config), \"feedback\", \"inbox.jsonl\");\n this.identityAuditWeeklyDir = path.join(config.memoryDir, \"identity\", \"audits\", \"weekly\");\n this.identityAuditMonthlyDir = path.join(config.memoryDir, \"identity\", \"audits\", \"monthly\");\n this.memoryActionEventsPath = path.join(config.memoryDir, \"state\", \"memory-actions.jsonl\");\n }\n\n async ensureDirs(): Promise<void> {\n await mkdir(this.weeklyDir, { recursive: true });\n await mkdir(path.dirname(this.mistakesPath), { recursive: true });\n await mkdir(path.dirname(this.rubricsPath), { recursive: true });\n await mkdir(this.rubricsDir, { recursive: true });\n await mkdir(this.rubricsAgentsDir, { recursive: true });\n await mkdir(this.rubricsWorkflowsDir, { recursive: true });\n }\n\n async synthesizeWeekly(opts?: {\n weekId?: string;\n }): Promise<{\n weekId: string;\n reportPath: string;\n reportJsonPath: string;\n mistakesCount: number;\n rubricsPath: string;\n rubricsIndexPath: string;\n promotionCandidateCount: number;\n }> {\n await this.ensureDirs();\n const weekId = opts?.weekId ?? isoWeekId(new Date());\n\n const entries = await this.readFeedbackEntriesForWeek(weekId);\n const actionEvents = await this.readActionEventsForWeek(weekId);\n const actionPatterns = this.buildActionFailurePatterns(actionEvents);\n const outcomeSummary = this.buildActionOutcomeSummary(actionEvents);\n const previousMistakes = await this.readMistakes();\n const mistakes = this.buildMistakes(entries, actionPatterns, weekId, previousMistakes?.registry ?? []);\n const rubrics = this.buildRubricSnapshot(entries, outcomeSummary);\n let promotionCandidates = this.config.compoundingSemanticEnabled\n ? this.derivePromotionCandidates(outcomeSummary, mistakes.registry, rubrics)\n : [];\n if (this.config.cmcConsolidationEnabled) {\n try {\n const { deriveCausalPromotionCandidates, materializeAfterCausalConsolidation } = await import(\"../causal-consolidation.js\");\n const causalCandidates = await deriveCausalPromotionCandidates({\n memoryDir: this.config.memoryDir,\n causalTrajectoryStoreDir: this.config.causalTrajectoryStoreDir,\n gatewayConfig: this.config.gatewayConfig,\n gatewayAgentId: this.config.modelSource === \"gateway\" ? (this.config.gatewayAgentId || undefined) : undefined,\n workspaceDir: this.config.workspaceDir,\n pluginConfig: this.config,\n config: {\n minRecurrence: this.config.cmcConsolidationMinRecurrence,\n minSessions: this.config.cmcConsolidationMinSessions,\n successThreshold: this.config.cmcConsolidationSuccessThreshold,\n },\n });\n if (causalCandidates.length > 0) {\n promotionCandidates = [...promotionCandidates, ...causalCandidates];\n }\n // #378: fire the Codex materialize post-hook so\n // `codexMaterializeOnConsolidation` actually has a runtime effect\n // when the causal consolidation path runs. The helper silently no-ops\n // when the feature flag or the per-trigger toggle is off, when the\n // sentinel is missing, or when nothing has changed since the previous\n // run. Wrapped in its own try/catch so a failed materialize never\n // aborts weekly synthesis.\n try {\n await materializeAfterCausalConsolidation({\n config: this.config,\n memoryDir: this.config.memoryDir,\n });\n } catch (materializeError) {\n log.warn(\n `[cmc] Codex materialize post-hook failed (non-fatal): ${\n materializeError instanceof Error ? materializeError.message : String(materializeError)\n }`,\n );\n }\n } catch (error) {\n log.warn(`[cmc] causal consolidation in synthesizeWeekly failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n // PEDC: Run calibration consolidation during weekly synthesis\n if (this.config.calibrationEnabled) {\n try {\n const { runCalibrationConsolidation } = await import(\"../calibration.js\");\n const calRules = await runCalibrationConsolidation({\n memoryDir: this.config.memoryDir,\n gatewayConfig: this.config.gatewayConfig,\n gatewayAgentId: this.config.modelSource === \"gateway\" ? (this.config.gatewayAgentId || undefined) : undefined,\n workspaceDir: this.config.workspaceDir,\n });\n log.debug(`[calibration] weekly synthesis produced ${calRules.length} calibration rule(s)`);\n } catch (error) {\n log.warn(`[calibration] weekly consolidation failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n const continuity = this.config.continuityAuditEnabled\n ? await this.readContinuityAuditReferences(weekId)\n : { monthId: monthIdFromIsoWeek(weekId), weeklyPath: null, monthlyPath: null };\n\n // Write weekly report (always, even if empty: \"day-one outcomes\").\n const reportPath = path.join(this.weeklyDir, `${weekId}.md`);\n const md = this.formatWeeklyReport(weekId, entries, mistakes.patterns, mistakes.details, continuity, outcomeSummary, promotionCandidates);\n await writeFile(reportPath, md, \"utf-8\");\n\n const reportJsonPath = path.join(this.weeklyDir, `${weekId}.json`);\n const weeklyArtifact: WeeklyCompoundingArtifact = {\n version: COMPOUNDING_VERSION,\n generatedAt: mistakes.updatedAt,\n weekId,\n feedback: {\n count: entries.length,\n byDecision: {\n approved: entries.filter((wrapped) => wrapped.entry.decision === \"approved\").length,\n approved_with_feedback: entries.filter((wrapped) => wrapped.entry.decision === \"approved_with_feedback\").length,\n rejected: entries.filter((wrapped) => wrapped.entry.decision === \"rejected\").length,\n },\n entries: entries.map((wrapped) => ({\n agent: wrapped.entry.agent,\n workflow: wrapped.entry.workflow ?? null,\n decision: wrapped.entry.decision,\n reason: wrapped.entry.reason,\n learning: wrapped.entry.learning?.trim() || null,\n outcome: wrapped.entry.outcome?.trim() || null,\n severity: wrapped.entry.severity ?? null,\n confidence: normalizeConfidence(wrapped.entry.confidence),\n tags: normalizeTags(wrapped.entry.tags),\n provenance: `${path.basename(wrapped.sourcePath)}:L${wrapped.sourceLine}#${wrapped.entryId}`,\n evidenceWindow: normalizeEvidenceWindow(wrapped.entry.evidenceWindowStart, wrapped.entry.evidenceWindowEnd),\n })),\n },\n mistakes: {\n count: mistakes.patterns.length,\n patterns: mistakes.patterns,\n registry: mistakes.registry,\n },\n rubrics,\n outcomes: outcomeSummary,\n promotionCandidates,\n continuity,\n };\n await writeFile(reportJsonPath, JSON.stringify(weeklyArtifact, null, 2) + \"\\n\", \"utf-8\");\n\n // Write stable rubric artifact.\n const rubricsMarkdown = this.formatRubrics(outcomeSummary, rubrics);\n await writeFile(this.rubricsPath, rubricsMarkdown, \"utf-8\");\n await writeFile(this.rubricsIndexPath, JSON.stringify(rubrics, null, 2) + \"\\n\", \"utf-8\");\n await this.syncRubricArtifacts(rubrics);\n\n // Update mistakes.json (always).\n await writeFile(\n this.mistakesPath,\n JSON.stringify({\n version: COMPOUNDING_VERSION,\n updatedAt: mistakes.updatedAt,\n patterns: mistakes.patterns,\n registry: mistakes.registry,\n }, null, 2) + \"\\n\",\n \"utf-8\",\n );\n\n log.info(\n `compounding: wrote weekly=${reportPath} weeklyJson=${reportJsonPath} rubrics=${this.rubricsPath} rubricsIndex=${this.rubricsIndexPath} mistakes=${this.mistakesPath}`,\n );\n return {\n weekId,\n reportPath,\n reportJsonPath,\n rubricsPath: this.rubricsPath,\n rubricsIndexPath: this.rubricsIndexPath,\n mistakesCount: mistakes.patterns.length,\n promotionCandidateCount: promotionCandidates.length,\n };\n }\n\n async promoteCandidate(opts: {\n weekId: string;\n candidateId: string;\n dryRun?: boolean;\n storage?: StorageManager;\n }): Promise<CompoundingPromotionReport> {\n const report: CompoundingPromotionReport = {\n enabled: this.config.compoundingEnabled === true && this.config.compoundingSemanticEnabled === true,\n dryRun: opts.dryRun === true,\n weekId: opts.weekId,\n promoted: [],\n skipped: [],\n };\n if (!report.enabled) {\n report.skipped.push({ weekId: opts.weekId, candidateId: opts.candidateId, reason: \"disabled\" });\n return report;\n }\n\n const artifact = await this.readWeeklyArtifact(opts.weekId);\n if (!artifact) {\n report.skipped.push({ weekId: opts.weekId, candidateId: opts.candidateId, reason: \"weekly-artifact-missing\" });\n return report;\n }\n\n const candidate = artifact.promotionCandidates.find((entry) => entry.id === opts.candidateId);\n if (!candidate) {\n report.skipped.push({ weekId: opts.weekId, candidateId: opts.candidateId, reason: \"candidate-not-found\" });\n return report;\n }\n\n const content = normalizePromotedGuidanceContent(candidate.content);\n const persistedContent = sanitizeMemoryContent(content).text;\n const storage = opts.storage ?? new StorageManager(this.config.memoryDir);\n const existing = (await storage.readAllMemories()).find((memory) =>\n memory.frontmatter.category === candidate.category &&\n memory.frontmatter.status !== \"archived\" &&\n memory.frontmatter.status !== \"forgotten\" &&\n canonicalPromotionContentKey(memory.content) === canonicalPromotionContentKey(persistedContent)\n );\n if (existing) {\n report.skipped.push({\n weekId: opts.weekId,\n candidateId: opts.candidateId,\n reason: \"duplicate-guidance\",\n existingMemoryId: existing.frontmatter.id,\n });\n return report;\n }\n\n const tags = [\n \"compounding\",\n \"compounding-promotion\",\n `compounding-source-${candidate.sourceType}`,\n ...(candidate.agent ? [`agent:${stableSlug(candidate.agent)}`] : []),\n ...(candidate.workflow ? [`workflow:${stableSlug(candidate.workflow)}`] : []),\n ];\n const uniqueTags = [...new Set(tags)];\n const lineage = [`compounding:${opts.weekId}:${opts.candidateId}`];\n const confidence = clampPromotionScore(candidate.score);\n\n if (opts.dryRun === true) {\n report.promoted.push({\n id: `dry-run:${opts.weekId}:${opts.candidateId}`,\n candidateId: opts.candidateId,\n category: candidate.category,\n content: persistedContent,\n confidence,\n tags: uniqueTags,\n lineage,\n });\n return report;\n }\n\n const id = await storage.writeMemory(candidate.category, persistedContent, {\n source: \"compounding-promotion\",\n tags: uniqueTags,\n confidence,\n lineage,\n memoryKind: \"note\",\n });\n report.promoted.push({\n id,\n candidateId: opts.candidateId,\n category: candidate.category,\n content: persistedContent,\n confidence,\n tags: uniqueTags,\n lineage,\n });\n return report;\n }\n\n async synthesizeContinuityAudit(opts?: {\n period?: \"weekly\" | \"monthly\";\n key?: string;\n }): Promise<{ period: \"weekly\" | \"monthly\"; key: string; reportPath: string }> {\n const period = opts?.period === \"monthly\" ? \"monthly\" : \"weekly\";\n const key = opts?.key?.trim() || (period === \"weekly\" ? isoWeekId(new Date()) : isoMonthId(new Date()));\n const nowIso = new Date().toISOString();\n const [identityAnchor, improvementLoopsRaw, openIncidents, closedIncidents, mistakes] = await Promise.all([\n this.readOptionalIdentityAnchorForAudit(),\n this.readOptionalImprovementLoopsForAudit(),\n this.readContinuityIncidentsForAudit(200, \"open\"),\n this.readContinuityIncidentsForAudit(200, \"closed\"),\n this.readMistakes(),\n ]);\n const anchorPresent = (identityAnchor ?? \"\").trim().length > 0;\n const improvementLoops = improvementLoopsRaw ? parseContinuityImprovementLoops(improvementLoopsRaw) : [];\n const activeLoops = improvementLoops.filter((loop) => loop.status === \"active\");\n const staleActiveLoops = activeLoops.filter((loop) => {\n const reviewedAt = Date.parse(loop.lastReviewed);\n if (!Number.isFinite(reviewedAt)) return true;\n return Date.now() - reviewedAt > cadenceStaleWindowMs(loop.cadence);\n });\n const hardeningCandidates: string[] = [];\n if (!anchorPresent) {\n hardeningCandidates.push(\"Create/update identity anchor baseline and verify recovery injection path.\");\n }\n if (openIncidents.length > 0) {\n hardeningCandidates.push(\n `Close or downgrade ${openIncidents.length} open continuity incident${openIncidents.length === 1 ? \"\" : \"s\"}.`,\n );\n }\n if (improvementLoops.length === 0) {\n hardeningCandidates.push(\"Initialize continuity improvement-loops register with cadence and kill conditions.\");\n } else if (staleActiveLoops.length > 0) {\n hardeningCandidates.push(\n `Review stale active continuity loop${staleActiveLoops.length === 1 ? \"\" : \"s\"}: ${staleActiveLoops\n .slice(0, 3)\n .map((loop) => loop.id)\n .join(\", \")}.`,\n );\n }\n if ((mistakes?.patterns.length ?? 0) > 0) {\n hardeningCandidates.push(\"Review latest compounding mistakes and convert one pattern into preventive continuity rule.\");\n }\n const nextAction = hardeningCandidates[0] ?? \"No critical drift detected; keep weekly/monthly continuity audit cadence.\";\n\n const lines: string[] = [\n `# Continuity Audit — ${period} ${key}`,\n \"\",\n `Generated: ${nowIso}`,\n `Scope: ${period}`,\n \"\",\n \"## Signal Summary\",\n `- Identity anchor present: ${anchorPresent ? \"yes\" : \"no\"}`,\n `- Improvement loops tracked: ${improvementLoops.length}`,\n `- Active improvement loops: ${activeLoops.length}`,\n `- Stale active loops: ${staleActiveLoops.length}`,\n `- Open incidents: ${openIncidents.length}`,\n `- Closed incidents: ${closedIncidents.length}`,\n `- Compounding mistake patterns: ${mistakes?.patterns.length ?? 0}`,\n \"\",\n \"## Drift Checks\",\n `- Identity anchor drift: ${anchorPresent ? \"pass\" : \"needs attention\"}`,\n `- Incident backlog: ${openIncidents.length === 0 ? \"pass\" : \"needs attention\"}`,\n `- Improvement-loop coverage: ${improvementLoops.length > 0 ? \"pass\" : \"needs attention\"}`,\n `- Improvement-loop freshness: ${staleActiveLoops.length === 0 ? \"pass\" : \"needs attention\"}`,\n \"\",\n \"## Stale Rule Detection\",\n `- Open incidents older than closure window: ${openIncidents.length > 0 ? \"possible\" : \"none detected\"}`,\n `- Stale active continuity loops: ${staleActiveLoops.length > 0 ? staleActiveLoops.map((l) => l.id).join(\", \") : \"none detected\"}`,\n `- Preventive rule coverage on closed incidents: ${\n closedIncidents.some((i) => (i.preventiveRule ?? \"\").trim().length > 0) ? \"present\" : \"not detected\"\n }`,\n \"\",\n \"## Next Hardening Action\",\n `- ${nextAction}`,\n \"\",\n \"## Open Incident IDs\",\n ...(openIncidents.length > 0 ? openIncidents.slice(0, 20).map((i) => `- ${i.id}`) : [\"- (none)\"]),\n \"\",\n ];\n\n const reportPath = await this.storage.writeIdentityAudit(period, key, lines.join(\"\\n\"));\n return { period, key, reportPath };\n }\n\n async readMistakes(): Promise<MistakesFile | null> {\n try {\n const raw = await readFile(this.mistakesPath, \"utf-8\");\n const parsed = JSON.parse(raw) as MistakesFile;\n if (!parsed || !Array.isArray(parsed.patterns)) return null;\n if (!Array.isArray(parsed.registry)) {\n const updatedAt = typeof parsed.updatedAt === \"string\" && parsed.updatedAt.length > 0\n ? parsed.updatedAt\n : new Date(0).toISOString();\n parsed.registry = parsed.patterns.map((pattern) => {\n const metadata = inferLegacyMistakeMetadata(pattern);\n return {\n id: stableMistakeId(metadata.category, pattern, metadata.agent, metadata.workflow),\n pattern,\n category: metadata.category,\n status: \"active\",\n agent: metadata.agent,\n workflow: metadata.workflow,\n tags: [],\n severity: null,\n confidence: null,\n outcome: null,\n provenance: [],\n firstSeenAt: updatedAt,\n lastSeenAt: updatedAt,\n recurrenceCount: 1,\n lastWeekId: isoWeekId(new Date(updatedAt)),\n evidenceWindow: { start: null, end: null },\n };\n });\n }\n return parsed;\n } catch {\n return null;\n }\n }\n\n async readRubrics(): Promise<RubricSnapshot | null> {\n try {\n const raw = await readFile(this.rubricsIndexPath, \"utf-8\");\n const parsed = JSON.parse(raw) as RubricSnapshot;\n if (!parsed || !Array.isArray(parsed.agents) || !Array.isArray(parsed.workflows)) return null;\n parsed.agents = parsed.agents.map((entry) => this.normalizeRubricEntry(entry));\n parsed.workflows = parsed.workflows.map((entry) => this.normalizeRubricEntry(entry));\n return parsed;\n } catch {\n return null;\n }\n }\n\n async readWeeklyArtifact(weekId: string): Promise<WeeklyCompoundingArtifact | null> {\n try {\n const raw = await readFile(path.join(this.weeklyDir, `${weekId}.json`), \"utf-8\");\n const parsed = JSON.parse(raw) as WeeklyCompoundingArtifact;\n if (\n !parsed ||\n parsed.weekId !== weekId ||\n !Array.isArray(parsed.promotionCandidates)\n ) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n }\n\n async buildRecallSection(\n query: string,\n opts?: { maxPatterns?: number; maxRubrics?: number },\n ): Promise<string | null> {\n const [mistakes, rubrics] = await Promise.all([\n this.readMistakes(),\n this.readRubrics(),\n ]);\n const maxPatterns = Math.max(0, Math.floor(opts?.maxPatterns ?? 40));\n const maxRubrics = Math.max(0, Math.floor(opts?.maxRubrics ?? 4));\n const queryTokens = tokenizeRecallQuery(query);\n\n const activePatterns = (mistakes?.registry ?? [])\n .filter((entry) => entry.status === \"active\")\n .sort((a, b) =>\n b.recurrenceCount - a.recurrenceCount ||\n b.lastSeenAt.localeCompare(a.lastSeenAt) ||\n a.pattern.localeCompare(b.pattern),\n );\n const topPatterns = activePatterns.slice(0, maxPatterns);\n\n const allRubrics = [\n ...(rubrics?.workflows ?? []),\n ...(rubrics?.agents ?? []),\n ];\n const scoredRubrics = allRubrics\n .map((entry) => ({\n entry,\n score: this.scoreRubricForQuery(entry, queryTokens),\n }))\n .sort((a, b) =>\n b.score - a.score ||\n b.entry.observations.length - a.entry.observations.length ||\n a.entry.subject.localeCompare(b.entry.subject),\n );\n const topRubrics = scoredRubrics\n .filter((item) => item.score > 0 || queryTokens.length === 0)\n .slice(0, maxRubrics)\n .map((item) => item.entry);\n\n if (topPatterns.length === 0 && topRubrics.length === 0) return null;\n\n const lines: string[] = [\n \"## Institutional Learning (Compounded)\",\n \"\",\n ];\n\n if (topPatterns.length > 0) {\n lines.push(\"Avoid repeating these patterns:\");\n for (const entry of topPatterns) {\n const scope = entry.workflow ?? entry.agent ?? null;\n const metadata = [`recurrence=${entry.recurrenceCount}`];\n if (scope) metadata.push(`scope=${scope}`);\n lines.push(`- ${entry.pattern} _(${metadata.join(\", \")})_`);\n }\n lines.push(\"\");\n }\n\n if (topRubrics.length > 0) {\n lines.push(\"Active rubrics:\");\n for (const rubric of topRubrics) {\n const notes = rubric.observations.slice(0, 2).join(\"; \");\n lines.push(`- ${rubric.kind} ${rubric.subject}: ${notes}`);\n }\n }\n\n return lines.join(\"\\n\");\n }\n\n tierMigrationCycleBudget(trigger: TierMigrationCycleTrigger): TierMigrationCycleBudget {\n return defaultTierMigrationCycleBudget(this.config, trigger);\n }\n\n private async readFeedbackEntriesForWeek(weekId: string): Promise<FeedbackEntryWithProvenance[]> {\n // Minimal implementation: includes entries where date starts with any day in the ISO week.\n // We approximate by taking all entries and filtering by computed isoWeekId(date).\n const out: FeedbackEntryWithProvenance[] = [];\n try {\n const raw = await readFile(this.feedbackInboxPath, \"utf-8\");\n const lines = raw.split(\"\\n\");\n for (let idx = 0; idx < lines.length; idx += 1) {\n const line = lines[idx];\n if (!line.trim()) continue;\n try {\n const obj = JSON.parse(line);\n const parsed = SharedFeedbackEntrySchema.safeParse(obj);\n if (!parsed.success) continue;\n const d = new Date(parsed.data.date);\n if (!Number.isFinite(d.getTime())) continue;\n if (isoWeekId(d) !== weekId) continue;\n const sourceLine = idx + 1;\n out.push({\n entry: parsed.data,\n sourceLine,\n sourcePath: this.feedbackInboxPath,\n entryId: `${parsed.data.agent}-${parsed.data.date}-${sourceLine}`.replace(/[^a-zA-Z0-9._:-]/g, \"_\"),\n });\n } catch {\n // ignore\n }\n }\n } catch {\n // missing feedback is normal\n }\n return out;\n }\n\n private buildActionFailurePatterns(events: WeeklyActionEvent[]): string[] {\n const out: string[] = [];\n for (const event of events) {\n const failed = event.outcome === \"failed\" || event.outcome === \"skipped\";\n if (!failed && event.policyDecision === null) continue;\n const suffix = event.reason && event.reason.trim().length > 0\n ? ` - ${event.reason.trim().slice(0, 140)}`\n : \"\";\n out.push(\n `memory-action/${event.namespace}: ${event.action} ${event.outcome}${event.policyDecision ? `/${event.policyDecision}` : \"\"}${suffix}`,\n );\n }\n return out;\n }\n\n private async readActionEventsForWeek(weekId: string): Promise<WeeklyActionEvent[]> {\n const out: WeeklyActionEvent[] = [];\n const rows = await this.storage.readMemoryActionEventRows(Number.MAX_SAFE_INTEGER);\n for (const row of rows) {\n const event = row.event;\n const ts = new Date(event.timestamp);\n if (!Number.isFinite(ts.getTime()) || isoWeekId(ts) !== weekId) continue;\n out.push({\n line: row.line,\n action: event.action,\n outcome: event.outcome,\n policyDecision: event.policyDecision === \"deny\" || event.policyDecision === \"defer\"\n ? event.policyDecision\n : null,\n namespace: typeof event.namespace === \"string\" && event.namespace.length > 0 ? event.namespace : \"default\",\n reason: typeof event.reason === \"string\" ? event.reason : null,\n });\n }\n return out;\n }\n\n private buildActionOutcomeSummary(events: WeeklyActionEvent[]): ActionOutcomeSummary[] {\n const byAction = new Map<string, { counts: ActionOutcomeCounts; provenance: Set<string> }>();\n for (const event of events) {\n const key = event.action;\n const acc = byAction.get(key) ?? {\n counts: { applied: 0, skipped: 0, failed: 0 },\n provenance: new Set<string>(),\n };\n if (event.outcome === \"applied\") acc.counts.applied += 1;\n else if (event.outcome === \"skipped\") acc.counts.skipped += 1;\n else acc.counts.failed += 1;\n acc.provenance.add(`${path.basename(this.memoryActionEventsPath)}:L${event.line}`);\n byAction.set(key, acc);\n }\n\n const out: ActionOutcomeSummary[] = [];\n for (const [action, data] of byAction.entries()) {\n const total = data.counts.applied + data.counts.skipped + data.counts.failed;\n if (total <= 0) continue;\n // Conservative weighting: reward applied, penalize skipped/failed.\n const weightedScore = Number((((data.counts.applied * 1) - (data.counts.skipped * 0.5) - (data.counts.failed * 1.5)) / total).toFixed(3));\n out.push({\n action,\n counts: data.counts,\n total,\n weightedScore,\n provenance: [...data.provenance].sort().slice(0, 8),\n });\n }\n out.sort((a, b) => b.total - a.total || b.weightedScore - a.weightedScore || a.action.localeCompare(b.action));\n return out;\n }\n\n private derivePromotionCandidates(\n summary: ActionOutcomeSummary[],\n mistakes: MistakeRegistryEntry[],\n rubrics: RubricSnapshot,\n ): PromotionCandidate[] {\n const deduped = new Map<string, PromotionCandidate>();\n const upsert = (candidate: PromotionCandidate) => {\n const key = `${candidate.category}:${canonicalPromotionContentKey(candidate.content)}`;\n const existing = deduped.get(key);\n if (!existing) {\n deduped.set(key, candidate);\n return;\n }\n const mergedProvenance = [...new Set([...existing.provenance, ...candidate.provenance])];\n if (candidate.score > existing.score) {\n deduped.set(key, {\n ...candidate,\n provenance: mergedProvenance,\n });\n return;\n }\n existing.provenance = mergedProvenance;\n };\n\n for (const item of summary) {\n if (item.total < 3) continue;\n if (item.weightedScore < 0.3) continue;\n const content = normalizePromotedGuidanceContent(\n `Prefer ${item.action} when the same workflow recurs; this week's outcomes were applied=${item.counts.applied}, skipped=${item.counts.skipped}, failed=${item.counts.failed}.`,\n );\n upsert({\n id: stablePromotionCandidateId(\"action-outcome\", item.action, content),\n sourceType: \"action-outcome\",\n subject: item.action,\n category: promotionCategoryForContent(content),\n content,\n score: item.weightedScore,\n rationale: \"High applied ratio with low failure/skips in weekly outcome telemetry.\",\n outcome: item.counts,\n provenance: item.provenance,\n agent: null,\n workflow: \"memory-actions\",\n });\n }\n\n for (const entry of mistakes) {\n if (entry.status !== \"active\") continue;\n if (entry.recurrenceCount < 2) continue;\n const content = normalizePromotedGuidanceContent(lessonContentFromPattern(entry.pattern, entry.agent));\n if (content.length === 0) continue;\n const confidence = entry.confidence ?? 0.75;\n const score = Number(Math.min(0.97, 0.45 + Math.min(entry.recurrenceCount, 6) * 0.08 + confidence * 0.15).toFixed(3));\n upsert({\n id: stablePromotionCandidateId(\"mistake-pattern\", entry.id, content),\n sourceType: \"mistake-pattern\",\n subject: entry.pattern,\n category: promotionCategoryForContent(content),\n content,\n score,\n rationale: `Recurring lesson still active after ${entry.recurrenceCount} confirmations in the mistake registry.`,\n outcome: null,\n provenance: entry.provenance.length > 0 ? entry.provenance : [`mistakes.json#${entry.id}`],\n agent: entry.agent,\n workflow: entry.workflow,\n });\n }\n\n for (const rubric of [...rubrics.workflows, ...rubrics.agents]) {\n for (const observation of this.getRubricObservationEntries(rubric)) {\n if (this.isSyntheticOutcomeRubricObservation(observation.note)) continue;\n const evidenceCount = observation.provenance.length;\n if (evidenceCount < 2) continue;\n const content = normalizePromotedGuidanceContent(observation.note);\n if (content.length === 0) continue;\n const score = Number(Math.min(0.95, 0.5 + Math.min(evidenceCount, 5) * 0.08).toFixed(3));\n upsert({\n id: stablePromotionCandidateId(\"rubric\", `${rubric.id}:${observation.note}`, content),\n sourceType: \"rubric\",\n subject: `${rubric.kind}:${rubric.subject}`,\n category: promotionCategoryForContent(content),\n content,\n score,\n rationale: `Rubric guidance repeated across ${evidenceCount} supporting observations.`,\n outcome: null,\n provenance: observation.provenance,\n agent: rubric.kind === \"agent\" ? rubric.subject : null,\n workflow: rubric.kind === \"workflow\" ? rubric.subject : null,\n });\n }\n }\n\n return [...deduped.values()]\n .sort((a, b) => b.score - a.score || a.subject.localeCompare(b.subject))\n .slice(0, 10);\n }\n\n private buildMistakes(\n entries: FeedbackEntryWithProvenance[],\n actionPatterns: string[] = [],\n weekId: string,\n previousRegistry: MistakeRegistryEntry[] = [],\n ): MistakesFile & { details: PatternWithProvenance[]; registry: MistakeRegistryEntry[] } {\n const patterns: PatternWithProvenance[] = [];\n const evidenceByPattern = new Map<string, {\n category: \"feedback\" | \"action\";\n agent: string | null;\n workflow: string | null;\n tags: Set<string>;\n severity: CompoundingEntrySeverity | null;\n confidence: number | null;\n outcome: string | null;\n timestamps: string[];\n evidenceWindow: EvidenceWindow;\n }>();\n\n for (const wrapped of entries) {\n const e = wrapped.entry;\n const pattern = e.learning && e.learning.trim().length > 0\n ? `${e.agent}: ${e.learning.trim()}`\n : e.decision === \"rejected\"\n ? `${e.agent}: ${e.reason.trim()}`.slice(0, 240)\n : null;\n if (!pattern) continue;\n const provenance = [`${path.basename(wrapped.sourcePath)}:L${wrapped.sourceLine}#${wrapped.entryId}`];\n patterns.push({ pattern, provenance });\n\n const previous = evidenceByPattern.get(pattern) ?? {\n category: \"feedback\" as const,\n agent: e.agent,\n workflow: e.workflow ?? null,\n tags: new Set<string>(),\n severity: e.severity ?? null,\n confidence: normalizeConfidence(e.confidence),\n outcome: e.outcome?.trim() || null,\n timestamps: [],\n evidenceWindow: normalizeEvidenceWindow(e.evidenceWindowStart, e.evidenceWindowEnd),\n };\n for (const tag of normalizeTags(e.tags)) previous.tags.add(tag);\n previous.timestamps.push(e.date);\n if (previous.workflow === null && e.workflow) previous.workflow = e.workflow;\n if (previous.severity === null && e.severity) previous.severity = e.severity;\n if (previous.confidence === null) previous.confidence = normalizeConfidence(e.confidence);\n if (previous.outcome === null && e.outcome) previous.outcome = e.outcome.trim();\n const nextEvidenceWindow = normalizeEvidenceWindow(e.evidenceWindowStart, e.evidenceWindowEnd);\n previous.evidenceWindow = mergeEvidenceWindows(previous.evidenceWindow, nextEvidenceWindow);\n evidenceByPattern.set(pattern, previous);\n }\n\n for (const pattern of actionPatterns) {\n patterns.push({ pattern, provenance: [`${path.basename(this.memoryActionEventsPath)}:*`] });\n const previous = evidenceByPattern.get(pattern) ?? {\n category: \"action\" as const,\n agent: null,\n workflow: \"memory-actions\",\n tags: new Set<string>(),\n severity: \"medium\" as CompoundingEntrySeverity,\n confidence: null,\n outcome: null,\n timestamps: [],\n evidenceWindow: { start: null, end: null },\n };\n evidenceByPattern.set(pattern, previous);\n }\n\n const byPattern = new Map<string, Set<string>>();\n for (const item of patterns) {\n const existing = byPattern.get(item.pattern) ?? new Set<string>();\n for (const provenance of item.provenance) existing.add(provenance);\n byPattern.set(item.pattern, existing);\n }\n\n const details = [...byPattern.entries()]\n .map(([pattern, provenance]) => ({ pattern, provenance: [...provenance].sort() }))\n .slice(0, 500);\n const previousById = new Map(previousRegistry.map((entry) => [entry.id, entry]));\n const previousByPattern = new Map(previousRegistry.map((entry) => [entry.pattern, entry]));\n const registry: MistakeRegistryEntry[] = details.map((detail) => {\n const evidence = evidenceByPattern.get(detail.pattern);\n const id = stableMistakeId(\n evidence?.category ?? \"feedback\",\n detail.pattern,\n evidence?.agent ?? null,\n evidence?.workflow ?? null,\n );\n const previous = previousById.get(id) ?? previousByPattern.get(detail.pattern);\n const timestamps = (evidence?.timestamps ?? []).filter((value) => typeof value === \"string\" && value.length > 0).sort();\n const firstSeenAt = previous?.firstSeenAt ?? timestamps[0] ?? new Date().toISOString();\n const lastSeenAt = timestamps[timestamps.length - 1] ?? previous?.lastSeenAt ?? firstSeenAt;\n return {\n id,\n pattern: detail.pattern,\n category: evidence?.category ?? \"feedback\",\n status: \"active\" as const,\n agent: evidence?.agent ?? null,\n workflow: evidence?.workflow ?? null,\n tags: evidence ? [...evidence.tags].sort() : [],\n severity: evidence?.severity ?? null,\n confidence: evidence?.confidence ?? null,\n outcome: evidence?.outcome ?? null,\n provenance: detail.provenance,\n firstSeenAt,\n lastSeenAt,\n recurrenceCount: previous?.lastWeekId === weekId ? previous.recurrenceCount : (previous?.recurrenceCount ?? 0) + 1,\n lastWeekId: weekId,\n evidenceWindow: evidence?.evidenceWindow ?? { start: null, end: null },\n retiredAt: null,\n } satisfies MistakeRegistryEntry;\n });\n\n const seenIds = new Set(registry.map((entry) => entry.id));\n const seenPatterns = new Set(registry.map((entry) => entry.pattern));\n for (const previous of previousRegistry) {\n if (seenIds.has(previous.id) || seenPatterns.has(previous.pattern)) continue;\n const staleWeeks = weekIdToIndex(weekId) - weekIdToIndex(previous.lastWeekId);\n registry.push({\n ...previous,\n status: staleWeeks >= RETIREMENT_WINDOW_WEEKS ? \"retired\" : previous.status,\n retiredAt: staleWeeks >= RETIREMENT_WINDOW_WEEKS\n ? previous.retiredAt ?? new Date().toISOString()\n : previous.retiredAt ?? null,\n });\n }\n\n registry.sort((a, b) =>\n Number(b.status === \"active\") - Number(a.status === \"active\") ||\n b.recurrenceCount - a.recurrenceCount ||\n b.lastSeenAt.localeCompare(a.lastSeenAt) ||\n a.pattern.localeCompare(b.pattern),\n );\n\n return {\n version: COMPOUNDING_VERSION,\n updatedAt: new Date().toISOString(),\n patterns: details.map((d) => d.pattern),\n details,\n registry,\n };\n }\n\n private formatWeeklyReport(\n weekId: string,\n entries: FeedbackEntryWithProvenance[],\n patterns: string[],\n patternDetails: PatternWithProvenance[],\n continuity: { monthId: string; weeklyPath: string | null; monthlyPath: string | null },\n outcomeSummary: ActionOutcomeSummary[],\n promotionCandidates: PromotionCandidate[],\n ): string {\n const byAgent = new Map<string, FeedbackEntryWithProvenance[]>();\n for (const wrapped of entries) {\n const list = byAgent.get(wrapped.entry.agent) ?? [];\n list.push(wrapped);\n byAgent.set(wrapped.entry.agent, list);\n }\n\n const lines: string[] = [\n `# Weekly Compounding — ${weekId}`,\n \"\",\n \"This file is generated by Engram's compounding engine (v5.0).\",\n \"\",\n \"## Summary\",\n `- Feedback entries: ${entries.length}`,\n `- Mistake patterns: ${patterns.length}`,\n \"\",\n \"## By Agent\",\n ];\n\n if (byAgent.size === 0) {\n lines.push(\"- (none)\");\n } else {\n for (const [agent, list] of Array.from(byAgent.entries()).sort((a, b) => a[0].localeCompare(b[0]))) {\n const approved = list.filter((e) => e.entry.decision === \"approved\").length;\n const awf = list.filter((e) => e.entry.decision === \"approved_with_feedback\").length;\n const rejected = list.filter((e) => e.entry.decision === \"rejected\").length;\n lines.push(`### ${agent}`);\n lines.push(`- approved: ${approved}`);\n lines.push(`- approved_with_feedback: ${awf}`);\n lines.push(`- rejected: ${rejected}`);\n const provenance = list\n .slice(0, 3)\n .map((e) => `${path.basename(e.sourcePath)}:L${e.sourceLine}#${e.entryId}`);\n if (provenance.length > 0) {\n lines.push(`- provenance: ${provenance.join(\", \")}`);\n }\n lines.push(\"\");\n }\n }\n\n lines.push(\"## Patterns (Avoid / Prefer)\");\n if (patterns.length === 0) {\n lines.push(\"- (none yet)\");\n } else {\n const detailMap = new Map(patternDetails.map((d) => [d.pattern, d.provenance]));\n for (const p of patterns.slice(0, 100)) {\n const provenance = detailMap.get(p) ?? [];\n if (provenance.length > 0) {\n lines.push(`- ${p} _(source: ${provenance.join(\", \")})_`);\n } else {\n lines.push(`- ${p}`);\n }\n }\n }\n lines.push(\"\");\n\n lines.push(\"## Outcome Weighting\");\n if (outcomeSummary.length === 0) {\n lines.push(\"- (no action outcomes recorded this week)\");\n } else {\n for (const item of outcomeSummary.slice(0, 20)) {\n lines.push(\n `- ${item.action}: applied=${item.counts.applied}, skipped=${item.counts.skipped}, failed=${item.counts.failed}, weight=${item.weightedScore} _(source: ${item.provenance.join(\", \")})_`,\n );\n }\n }\n lines.push(\"\");\n\n if (this.config.compoundingSemanticEnabled) {\n lines.push(\"## Promotion Candidates (Advisory)\");\n if (promotionCandidates.length === 0) {\n lines.push(\"- (no advisory promotion candidates this week)\");\n } else {\n for (const candidate of promotionCandidates) {\n const outcomeSummaryText = candidate.outcome\n ? ` outcomes[a=${candidate.outcome.applied}, s=${candidate.outcome.skipped}, f=${candidate.outcome.failed}]`\n : \"\";\n lines.push(\n `- [${candidate.sourceType}] ${candidate.subject} -> ${candidate.content} (category=${candidate.category}, score=${candidate.score}, id=${candidate.id}): ${candidate.rationale}${outcomeSummaryText} _(source: ${candidate.provenance.join(\", \")})_`,\n );\n }\n }\n lines.push(\"\");\n lines.push(\"_Advisory only: no automatic promotion write is performed by this report. Use `compounding_promote_candidate` or `openclaw engram compounding-promote` to persist one manually._\");\n lines.push(\"\");\n }\n\n if (this.config.continuityAuditEnabled) {\n lines.push(\"## Continuity Audits\");\n if (continuity.weeklyPath) {\n lines.push(`- weekly: ${continuity.weeklyPath}`);\n } else {\n lines.push(`- weekly: (missing for ${weekId})`);\n }\n if (continuity.monthlyPath) {\n lines.push(`- monthly: ${continuity.monthlyPath}`);\n } else {\n lines.push(`- monthly: (missing for ${continuity.monthId})`);\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n }\n\n private buildRubricSnapshot(\n entries: FeedbackEntryWithProvenance[],\n outcomeSummary: ActionOutcomeSummary[],\n ): RubricSnapshot {\n const updatedAt = new Date().toISOString();\n const byAgent = new Map<string, RubricSnapshotEntry>();\n const byWorkflow = new Map<string, RubricSnapshotEntry>();\n\n for (const wrapped of entries) {\n const note = ((wrapped.entry.learning && wrapped.entry.learning.trim().length > 0)\n ? wrapped.entry.learning\n : wrapped.entry.decision === \"rejected\"\n ? wrapped.entry.reason\n : \"\").trim();\n if (!note) continue;\n const provenance = `${path.basename(wrapped.sourcePath)}:L${wrapped.sourceLine}#${wrapped.entryId}`;\n const agentEntry = byAgent.get(wrapped.entry.agent) ?? {\n id: stableRubricId(\"agent\", wrapped.entry.agent),\n kind: \"agent\" as const,\n subject: wrapped.entry.agent,\n observations: [],\n tags: [],\n provenance: [],\n observationEntries: [],\n updatedAt,\n };\n this.addRubricObservation(agentEntry, note, provenance);\n agentEntry.tags = normalizeTags([...agentEntry.tags, ...normalizeTags(wrapped.entry.tags)]);\n byAgent.set(wrapped.entry.agent, agentEntry);\n\n const workflow = wrapped.entry.workflow?.trim();\n if (!workflow) continue;\n const workflowEntry = byWorkflow.get(workflow) ?? {\n id: stableRubricId(\"workflow\", workflow),\n kind: \"workflow\" as const,\n subject: workflow,\n observations: [],\n tags: [],\n provenance: [],\n observationEntries: [],\n updatedAt,\n };\n this.addRubricObservation(workflowEntry, note, provenance);\n workflowEntry.tags = normalizeTags([...workflowEntry.tags, ...normalizeTags(wrapped.entry.tags)]);\n byWorkflow.set(workflow, workflowEntry);\n }\n\n for (const item of outcomeSummary) {\n const workflowEntry = byWorkflow.get(item.action) ?? {\n id: stableRubricId(\"workflow\", item.action),\n kind: \"workflow\" as const,\n subject: item.action,\n observations: [],\n tags: [],\n provenance: [],\n observationEntries: [],\n updatedAt,\n };\n this.addRubricObservation(\n workflowEntry,\n `Outcome weight=${item.weightedScore} (applied=${item.counts.applied}, skipped=${item.counts.skipped}, failed=${item.counts.failed})`,\n ...item.provenance,\n );\n byWorkflow.set(item.action, workflowEntry);\n }\n\n return {\n updatedAt,\n agents: [...byAgent.values()].sort((a, b) => a.subject.localeCompare(b.subject)),\n workflows: [...byWorkflow.values()].sort((a, b) => a.subject.localeCompare(b.subject)),\n };\n }\n\n private formatRubrics(outcomeSummary: ActionOutcomeSummary[], snapshot: RubricSnapshot): string {\n const lines: string[] = [\n \"# Compounding Rubrics\",\n \"\",\n `Generated: ${snapshot.updatedAt}`,\n \"\",\n \"Stable, deterministic rubric snapshot generated from weekly feedback + action outcomes.\",\n \"\",\n ];\n\n lines.push(\"## Agent Rubrics\");\n if (snapshot.agents.length === 0) {\n lines.push(\"- (none yet)\");\n } else {\n for (const rubric of snapshot.agents) {\n lines.push(`### ${rubric.subject}`);\n const observations = this.getRubricObservationEntries(rubric).slice(0, 8);\n if (observations.length === 0) {\n lines.push(\"- No rubric deltas this week.\");\n } else {\n for (const observation of observations) {\n const provenance = observation.provenance.join(\", \");\n lines.push(`- ${observation.note}${provenance ? ` _(source: ${provenance})_` : \"\"}`);\n }\n }\n lines.push(\"\");\n }\n }\n\n lines.push(\"## Workflow Rubrics\");\n if (snapshot.workflows.length === 0) {\n lines.push(\"- (none yet)\");\n } else {\n for (const rubric of snapshot.workflows) {\n lines.push(`### ${rubric.subject}`);\n for (const observation of this.getRubricObservationEntries(rubric).slice(0, 8)) {\n const provenance = observation.provenance.join(\", \");\n lines.push(`- ${observation.note}${provenance ? ` _(source: ${provenance})_` : \"\"}`);\n }\n lines.push(\"\");\n }\n }\n\n lines.push(\"## Action Outcome Signals\");\n if (outcomeSummary.length === 0) {\n lines.push(\"- (none yet)\");\n } else {\n for (const item of outcomeSummary.slice(0, 20)) {\n lines.push(\n `- ${item.action}: weight=${item.weightedScore} (applied=${item.counts.applied}, skipped=${item.counts.skipped}, failed=${item.counts.failed})`,\n );\n }\n }\n lines.push(\"\");\n return lines.join(\"\\n\");\n }\n\n private async syncRubricArtifacts(snapshot: RubricSnapshot): Promise<void> {\n await this.replaceRubricDirectory(this.rubricsAgentsDir, snapshot.agents);\n await this.replaceRubricDirectory(this.rubricsWorkflowsDir, snapshot.workflows);\n }\n\n private async replaceRubricDirectory(dir: string, entries: RubricSnapshotEntry[]): Promise<void> {\n await mkdir(dir, { recursive: true });\n try {\n const names = await readdir(dir);\n await Promise.all(\n names.filter((name) => name.endsWith(\".md\")).map((name) => unlink(path.join(dir, name)).catch(() => undefined)),\n );\n } catch {\n // fail-open\n }\n\n const slugCollisions = new Map<string, number>();\n for (const entry of entries) {\n const slug = stableSlug(entry.subject);\n slugCollisions.set(slug, (slugCollisions.get(slug) ?? 0) + 1);\n }\n\n await Promise.all(entries.map(async (entry) => {\n const observationEntries = this.getRubricObservationEntries(entry);\n const body = [\n `# ${entry.kind === \"agent\" ? \"Agent\" : \"Workflow\"} Rubric — ${entry.subject}`,\n \"\",\n `Updated: ${entry.updatedAt}`,\n \"\",\n \"## Observations\",\n ...(observationEntries.length > 0\n ? observationEntries.map((item) => `- ${item.note}`)\n : [\"- (none yet)\"]),\n \"\",\n \"## Provenance\",\n ...(entry.provenance.length > 0 ? entry.provenance.map((item) => `- ${item}`) : [\"- (none yet)\"]),\n \"\",\n ].join(\"\\n\");\n const fileName = rubricArtifactFileName(entry, slugCollisions);\n await writeFile(path.join(dir, fileName), body, \"utf-8\");\n }));\n }\n\n private scoreRubricForQuery(entry: RubricSnapshotEntry, queryTokens: string[]): number {\n if (queryTokens.length === 0) return entry.observations.length;\n const haystack = [entry.subject, ...entry.observations, ...entry.tags].join(\" \").toLowerCase();\n let score = 0;\n for (const token of queryTokens) {\n if (haystack.includes(token)) score += 2;\n if (entry.subject.toLowerCase().includes(token)) score += 2;\n }\n if (score === 0) return 0;\n return score + Math.min(entry.observations.length, 3);\n }\n\n private normalizeRubricEntry(entry: RubricSnapshotEntry): RubricSnapshotEntry {\n const normalizedEntries = this.getRubricObservationEntries(entry);\n return {\n ...entry,\n observations: normalizedEntries.map((item) => item.note),\n provenance: [...new Set(normalizedEntries.flatMap((item) => item.provenance))],\n observationEntries: normalizedEntries,\n };\n }\n\n private getRubricObservationEntries(entry: RubricSnapshotEntry): Array<{ note: string; provenance: string[] }> {\n if (Array.isArray(entry.observationEntries) && entry.observationEntries.length > 0) {\n return entry.observationEntries.map((item) => ({\n note: item.note,\n provenance: [...new Set(item.provenance)].sort(),\n }));\n }\n\n return entry.observations.map((note, index) => ({\n note,\n provenance: entry.provenance[index] ? [entry.provenance[index]] : (entry.provenance[0] ? [entry.provenance[0]] : []),\n }));\n }\n\n private isSyntheticOutcomeRubricObservation(note: string): boolean {\n return note.trimStart().startsWith(\"Outcome weight=\");\n }\n\n private addRubricObservation(entry: RubricSnapshotEntry, note: string, ...provenance: string[]): void {\n const normalized = this.normalizeRubricEntry(entry);\n const existing = normalized.observationEntries?.find((item) => item.note === note);\n if (existing) {\n existing.provenance = [...new Set([...existing.provenance, ...provenance])].sort();\n } else {\n normalized.observationEntries?.push({\n note,\n provenance: [...new Set(provenance)].sort(),\n });\n }\n entry.observationEntries = normalized.observationEntries;\n entry.observations = normalized.observationEntries?.map((item) => item.note) ?? [];\n entry.provenance = [...new Set((normalized.observationEntries ?? []).flatMap((item) => item.provenance))];\n }\n\n private async readOptionalIdentityAnchorForAudit(): Promise<string | null> {\n try {\n return await this.storage.readIdentityAnchor();\n } catch {\n return null;\n }\n }\n\n private async readOptionalImprovementLoopsForAudit(): Promise<string | null> {\n try {\n return await this.storage.readIdentityImprovementLoops();\n } catch {\n return null;\n }\n }\n\n private async readContinuityIncidentsForAudit(\n limit: number,\n state: \"open\" | \"closed\",\n ): Promise<ContinuityIncidentRecord[]> {\n try {\n return await this.storage.readContinuityIncidents(limit, state);\n } catch {\n return [];\n }\n }\n\n private async readOptionalIdentityAuditForReference(\n period: \"weekly\" | \"monthly\",\n key: string,\n ): Promise<string | null> {\n try {\n return await this.storage.readIdentityAudit(period, key);\n } catch {\n return null;\n }\n }\n\n private async readContinuityAuditReferences(weekId: string): Promise<{\n weekId: string;\n monthId: string;\n weeklyPath: string | null;\n monthlyPath: string | null;\n }> {\n const monthId = monthIdFromIsoWeek(weekId);\n const weeklyPath = path.join(this.identityAuditWeeklyDir, `${weekId}.md`);\n const monthlyPath = path.join(this.identityAuditMonthlyDir, `${monthId}.md`);\n const [weeklyAudit, monthlyAudit] = await Promise.all([\n this.readOptionalIdentityAuditForReference(\"weekly\", weekId),\n this.readOptionalIdentityAuditForReference(\"monthly\", monthId),\n ]);\n const weeklyExists = (weeklyAudit ?? \"\").trim().length > 0;\n const monthlyExists = (monthlyAudit ?? \"\").trim().length > 0;\n return {\n weekId,\n monthId,\n weeklyPath: weeklyExists ? weeklyPath : null,\n monthlyPath: monthlyExists ? monthlyPath : null,\n };\n }\n}\n","import { mkdir, readFile, readdir, appendFile, writeFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\nimport { log } from \"../logger.js\";\nimport type { PluginConfig } from \"../types.js\";\nimport { expandTildePath } from \"../utils/path.js\";\n\nexport const SharedFeedbackEntrySchema = z.object({\n agent: z.string().min(1),\n decision: z.enum([\"approved\", \"approved_with_feedback\", \"rejected\"]),\n reason: z.string().min(1),\n date: z.string().min(8), // ISO-ish; keep loose\n learning: z.string().optional(),\n outcome: z.string().optional(),\n severity: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n confidence: z.number().min(0).max(1).optional(),\n workflow: z.string().min(1).optional(),\n tags: z.array(z.string().min(1)).optional(),\n evidenceWindowStart: z.string().min(8).optional(),\n evidenceWindowEnd: z.string().min(8).optional(),\n refs: z.array(z.string()).optional(),\n});\n\nexport type SharedFeedbackEntry = z.infer<typeof SharedFeedbackEntrySchema>;\n\nfunction safeSlug(s: string): string {\n let slug = s.toLowerCase().replace(/[^a-z0-9]+/g, \"-\");\n // Trim leading/trailing dashes without ReDoS-prone anchored quantifiers\n let start = 0;\n while (start < slug.length && slug[start] === \"-\") start++;\n let end = slug.length;\n while (end > start && slug[end - 1] === \"-\") end--;\n return slug.slice(start, end).slice(0, 80) || \"output\";\n}\n\nfunction ymd(d: Date): string {\n return d.toISOString().slice(0, 10);\n}\n\nconst CROSS_SIGNAL_STOPWORDS = new Set([\n \"a\",\n \"an\",\n \"and\",\n \"are\",\n \"as\",\n \"at\",\n \"be\",\n \"by\",\n \"for\",\n \"from\",\n \"has\",\n \"have\",\n \"in\",\n \"is\",\n \"it\",\n \"of\",\n \"on\",\n \"or\",\n \"that\",\n \"the\",\n \"this\",\n \"to\",\n \"was\",\n \"were\",\n \"with\",\n \"agent\",\n \"output\",\n \"today\",\n \"daily\",\n \"notes\",\n \"note\",\n \"summary\",\n]);\n\nfunction extractTopicTokens(text: string, maxTokens: number = 12): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n const tokens = text\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, \" \")\n .split(/\\s+/)\n .map((token) => token.trim())\n .filter((token) => token.length >= 4)\n .filter((token) => !CROSS_SIGNAL_STOPWORDS.has(token));\n\n for (const token of tokens) {\n if (seen.has(token)) continue;\n seen.add(token);\n out.push(token);\n if (out.length >= maxTokens) break;\n }\n return out;\n}\n\nfunction stripYamlFrontmatter(text: string): string {\n if (!text.startsWith(\"---\\n\")) return text;\n const closing = text.indexOf(\"\\n---\\n\", 4);\n if (closing === -1) return text;\n return text.slice(closing + 5);\n}\n\nfunction semanticRoot(token: string): string {\n let root = token.toLowerCase();\n if (root.endsWith(\"izations\") && root.length > 9) {\n root = `${root.slice(0, -8)}ize`;\n }\n else if (root.endsWith(\"ization\") && root.length > 8) {\n root = `${root.slice(0, -7)}ize`;\n } else if (root.endsWith(\"isations\") && root.length > 9) {\n root = `${root.slice(0, -8)}ise`;\n } else if (root.endsWith(\"isation\") && root.length > 8) {\n root = `${root.slice(0, -7)}ise`;\n } else {\n const suffixes = [\n \"ations\",\n \"ation\",\n \"ments\",\n \"ment\",\n \"ingly\",\n \"edly\",\n \"ings\",\n \"ing\",\n \"ers\",\n \"er\",\n \"ies\",\n \"ied\",\n \"ions\",\n \"ion\",\n \"es\",\n \"ed\",\n \"s\",\n ];\n for (const suffix of suffixes) {\n if (root.length > suffix.length + 3 && root.endsWith(suffix)) {\n root = root.slice(0, -suffix.length);\n break;\n }\n }\n }\n if (root.length > 4 && root.endsWith(\"e\")) {\n root = root.slice(0, -1);\n }\n return root;\n}\n\nfunction mergeOverlaps(\n base: SharedCrossSignalOverlap[],\n extra: SharedCrossSignalOverlap[],\n): SharedCrossSignalOverlap[] {\n const merged = new Map<string, { agents: Set<string>; sourcePaths: Set<string> }>();\n for (const entry of [...base, ...extra]) {\n const existing = merged.get(entry.token);\n if (existing) {\n for (const agent of entry.agents) existing.agents.add(agent);\n for (const sourcePath of entry.sourcePaths) existing.sourcePaths.add(sourcePath);\n } else {\n merged.set(entry.token, {\n agents: new Set(entry.agents),\n sourcePaths: new Set(entry.sourcePaths),\n });\n }\n }\n return [...merged.entries()]\n .map(([token, value]) => ({\n token,\n agents: [...value.agents].sort(),\n sourcePaths: [...value.sourcePaths].sort(),\n agentCount: value.agents.size,\n }))\n .filter((entry) => entry.agentCount >= 2)\n .sort((a, b) => b.agentCount - a.agentCount || a.token.localeCompare(b.token));\n}\n\nasync function computeSemanticOverlapCandidates(\n sources: SharedCrossSignalSource[],\n maxCandidates: number,\n timeoutAtMs: number,\n): Promise<{ overlaps: SharedCrossSignalOverlap[]; candidateCount: number; timedOut: boolean }> {\n const tokenRows: Array<{ token: string; agent: string; path: string }> = [];\n for (const source of sources) {\n for (const token of source.topics) {\n if (Date.now() >= timeoutAtMs) return { overlaps: [], candidateCount: tokenRows.length, timedOut: true };\n await new Promise<void>((resolve) => setImmediate(resolve));\n tokenRows.push({ token, agent: source.agent, path: source.path });\n if (tokenRows.length >= maxCandidates) break;\n }\n if (tokenRows.length >= maxCandidates) break;\n }\n\n const byRoot = new Map<string, Map<string, { agents: Set<string>; paths: Set<string> }>>();\n for (const row of tokenRows) {\n if (Date.now() >= timeoutAtMs) return { overlaps: [], candidateCount: tokenRows.length, timedOut: true };\n await new Promise<void>((resolve) => setImmediate(resolve));\n const root = semanticRoot(row.token);\n if (root.length < 4) continue;\n const rootGroup = byRoot.get(root) ?? new Map<string, { agents: Set<string>; paths: Set<string> }>();\n const tokenGroup = rootGroup.get(row.token) ?? { agents: new Set<string>(), paths: new Set<string>() };\n tokenGroup.agents.add(row.agent);\n tokenGroup.paths.add(row.path);\n rootGroup.set(row.token, tokenGroup);\n byRoot.set(root, rootGroup);\n }\n\n const overlaps: SharedCrossSignalOverlap[] = [];\n for (const [root, tokenMap] of byRoot.entries()) {\n if (Date.now() >= timeoutAtMs) return { overlaps: [], candidateCount: tokenRows.length, timedOut: true };\n await new Promise<void>((resolve) => setImmediate(resolve));\n if (tokenMap.size < 2) continue;\n const agents = new Set<string>();\n const sourcePaths = new Set<string>();\n for (const value of tokenMap.values()) {\n for (const agent of value.agents) agents.add(agent);\n for (const sourcePath of value.paths) sourcePaths.add(sourcePath);\n }\n if (agents.size < 2) continue;\n overlaps.push({\n token: `semantic:${root}`,\n agents: [...agents].sort(),\n sourcePaths: [...sourcePaths].sort(),\n agentCount: agents.size,\n });\n }\n\n overlaps.sort((a, b) => b.agentCount - a.agentCount || a.token.localeCompare(b.token));\n return {\n overlaps,\n candidateCount: tokenRows.length,\n timedOut: false,\n };\n}\n\nasync function computeSemanticOverlapsWithTimeout(\n sources: SharedCrossSignalSource[],\n timeoutMs: number,\n maxCandidates: number,\n): Promise<{ overlaps: SharedCrossSignalOverlap[]; candidateCount: number; timedOut: boolean }> {\n const safeTimeoutMs = Math.max(1, Math.floor(timeoutMs));\n const safeMaxCandidates = Math.max(0, Math.floor(maxCandidates));\n if (safeMaxCandidates === 0 || sources.length === 0) {\n return { overlaps: [], candidateCount: 0, timedOut: false };\n }\n const timeoutAtMs = Date.now() + safeTimeoutMs;\n return computeSemanticOverlapCandidates(sources, safeMaxCandidates, timeoutAtMs);\n}\n\ninterface SharedCrossSignalSource {\n agent: string;\n path: string;\n title: string;\n topics: string[];\n}\n\ninterface SharedCrossSignalOverlap {\n token: string;\n agents: string[];\n sourcePaths: string[];\n agentCount: number;\n}\n\ninterface SharedCrossSignalReport {\n date: string;\n generatedAt: string;\n sourceCount: number;\n feedbackCount: number;\n feedbackByDecision: Record<\"approved\" | \"approved_with_feedback\" | \"rejected\", number>;\n feedbackEntries: SharedFeedbackEntry[];\n sources: SharedCrossSignalSource[];\n overlaps: SharedCrossSignalOverlap[];\n semantic: {\n enabled: boolean;\n applied: boolean;\n timedOut: boolean;\n candidateCount: number;\n maxCandidates: number;\n addedOverlapCount: number;\n };\n}\n\nexport interface SharedCrossSignalSynthesisResult {\n date: string;\n crossSignalsPath: string;\n crossSignalsMarkdownPath: string;\n overlapCount: number;\n report: SharedCrossSignalReport;\n}\n\nexport interface SharedDailyCurationResult {\n date: string;\n roundtablePath: string;\n crossSignalsPath: string;\n crossSignalsMarkdownPath: string;\n overlapCount: number;\n}\n\nfunction feedbackDecisionPriority(decision: SharedFeedbackEntry[\"decision\"]): number {\n switch (decision) {\n case \"rejected\":\n return 3;\n case \"approved_with_feedback\":\n return 2;\n case \"approved\":\n return 1;\n }\n}\n\nfunction feedbackSeverityPriority(severity: SharedFeedbackEntry[\"severity\"]): number {\n switch (severity) {\n case \"high\":\n return 3;\n case \"medium\":\n return 2;\n case \"low\":\n return 1;\n default:\n return 0;\n }\n}\n\nfunction compareFeedbackPriority(a: SharedFeedbackEntry, b: SharedFeedbackEntry): number {\n return (\n feedbackDecisionPriority(b.decision) - feedbackDecisionPriority(a.decision)\n || feedbackSeverityPriority(b.severity) - feedbackSeverityPriority(a.severity)\n || a.date.localeCompare(b.date)\n );\n}\n\nfunction formatFeedbackLine(entry: SharedFeedbackEntry): string {\n const extras: string[] = [`feedback: ${entry.date}`];\n if (entry.severity) extras.push(`severity: ${entry.severity}`);\n if (entry.refs?.length) extras.push(`refs: ${entry.refs.join(\", \")}`);\n return `- [${entry.agent}] ${entry.decision}: ${entry.reason} [${extras.join(\"; \")}]`;\n}\n\nfunction formatOverlapLine(entry: SharedCrossSignalOverlap): string {\n return `- \\`${entry.token}\\` (${entry.agentCount} agents: ${entry.agents.join(\", \")}) [sources: ${entry.sourcePaths.join(\", \")}]`;\n}\n\nexport function resolveSharedContextDir(config: PluginConfig): string {\n return typeof config.sharedContextDir === \"string\" && config.sharedContextDir.length > 0\n ? expandTildePath(config.sharedContextDir)\n : path.join(expandTildePath(config.workspaceDir), \"shared-context\");\n}\n\nexport class SharedContextManager {\n readonly dir: string;\n private readonly prioritiesPath: string;\n private readonly prioritiesInboxPath: string;\n private readonly outputsDir: string;\n private readonly roundtableDir: string;\n private readonly feedbackDir: string;\n private readonly feedbackInboxPath: string;\n private readonly crossSignalsDir: string;\n\n constructor(private readonly config: PluginConfig) {\n const base = resolveSharedContextDir(config);\n\n this.dir = base;\n this.prioritiesPath = path.join(base, \"priorities.md\");\n this.prioritiesInboxPath = path.join(base, \"priorities.inbox.md\");\n this.outputsDir = path.join(base, \"agent-outputs\");\n this.roundtableDir = path.join(base, \"roundtable\");\n this.feedbackDir = path.join(base, \"feedback\");\n this.feedbackInboxPath = path.join(this.feedbackDir, \"inbox.jsonl\");\n this.crossSignalsDir = path.join(base, \"cross-signals\");\n }\n\n async ensureStructure(): Promise<void> {\n await mkdir(this.dir, { recursive: true });\n await mkdir(this.outputsDir, { recursive: true });\n await mkdir(this.roundtableDir, { recursive: true });\n await mkdir(this.feedbackDir, { recursive: true });\n await mkdir(this.crossSignalsDir, { recursive: true });\n await mkdir(path.join(this.dir, \"staging\"), { recursive: true });\n await mkdir(path.join(this.dir, \"kpis\"), { recursive: true });\n await mkdir(path.join(this.dir, \"calendar\"), { recursive: true });\n await mkdir(path.join(this.dir, \"content-calendar\"), { recursive: true });\n\n // Bootstrap files if missing.\n await this.ensureFile(\n this.prioritiesPath,\n [\n \"# Priorities\",\n \"\",\n \"This is the shared priority stack. Agents should read this before acting.\",\n \"\",\n \"## Current\",\n \"- (empty)\",\n \"\",\n \"## Notes\",\n \"- (empty)\",\n \"\",\n ].join(\"\\n\"),\n );\n await this.ensureFile(\n this.prioritiesInboxPath,\n [\n \"# Priorities Inbox\",\n \"\",\n \"Append-only inbox. Curator merges into priorities.md.\",\n \"\",\n ].join(\"\\n\"),\n );\n await this.ensureFile(this.feedbackInboxPath, \"\");\n }\n\n private async ensureFile(fp: string, content: string): Promise<void> {\n try {\n await stat(fp);\n } catch {\n await writeFile(fp, content, \"utf-8\");\n }\n }\n\n async readPriorities(): Promise<string> {\n try {\n return await readFile(this.prioritiesPath, \"utf-8\");\n } catch {\n return \"\";\n }\n }\n\n async readLatestRoundtable(): Promise<string> {\n try {\n const files = (await readdir(this.roundtableDir))\n .filter((f) => f.endsWith(\".md\"))\n .sort()\n .reverse();\n const fp = files[0] ? path.join(this.roundtableDir, files[0]) : null;\n if (!fp) return \"\";\n return await readFile(fp, \"utf-8\");\n } catch {\n return \"\";\n }\n }\n\n async readLatestCrossSignals(): Promise<string> {\n try {\n const files = (await readdir(this.crossSignalsDir))\n .filter((f) => f.endsWith(\".md\"))\n .sort()\n .reverse();\n const fp = files[0] ? path.join(this.crossSignalsDir, files[0]) : null;\n if (!fp) return \"\";\n return await readFile(fp, \"utf-8\");\n } catch {\n return \"\";\n }\n }\n\n async writeAgentOutput(opts: {\n agentId: string;\n title: string;\n content: string;\n createdAt?: Date;\n }): Promise<string> {\n const createdAt = opts.createdAt ?? new Date();\n const date = ymd(createdAt);\n const time = createdAt.toISOString().slice(11, 19).replace(/:/g, \"\");\n const slug = safeSlug(opts.title);\n\n const dir = path.join(this.outputsDir, opts.agentId, date);\n await mkdir(dir, { recursive: true });\n const fp = path.join(dir, `${time}-${slug}.md`);\n\n const body =\n `---\\n` +\n `kind: agent_output\\n` +\n `agent: ${opts.agentId}\\n` +\n `createdAt: ${createdAt.toISOString()}\\n` +\n `title: ${opts.title.replace(/\\n/g, \" \").slice(0, 200)}\\n` +\n `---\\n\\n` +\n opts.content.trimEnd() +\n \"\\n\";\n\n await writeFile(fp, body, \"utf-8\");\n return fp;\n }\n\n async appendFeedback(entry: SharedFeedbackEntry): Promise<void> {\n const parsed = SharedFeedbackEntrySchema.parse(entry);\n await appendFile(this.feedbackInboxPath, JSON.stringify(parsed) + \"\\n\", \"utf-8\");\n }\n\n async appendPrioritiesInbox(opts: { agentId: string; text: string }): Promise<void> {\n const stamp = new Date().toISOString();\n const lines = [\n \"\",\n `## ${stamp} (${opts.agentId})`,\n \"\",\n opts.text.trimEnd(),\n \"\",\n ].join(\"\\n\");\n await appendFile(this.prioritiesInboxPath, lines, \"utf-8\");\n }\n\n async synthesizeCrossSignals(opts: {\n date?: string;\n maxSummaryItems?: number;\n }): Promise<SharedCrossSignalSynthesisResult> {\n const date = opts.date ?? ymd(new Date());\n const maxSummaryItems = Math.max(1, opts.maxSummaryItems ?? 8);\n\n // Collect outputs for the day (best-effort).\n const outputs: Array<{ agent: string; path: string; title: string; raw: string }> = [];\n try {\n const agents = await readdir(this.outputsDir, { withFileTypes: true });\n for (const a of agents) {\n if (!a.isDirectory()) continue;\n const dayDir = path.join(this.outputsDir, a.name, date);\n try {\n const files = (await readdir(dayDir)).filter((f) => f.endsWith(\".md\")).sort();\n for (const f of files) {\n const p = path.join(dayDir, f);\n const raw = await readFile(p, \"utf-8\");\n const title = (raw.match(/^title:\\s*(.+)$/m)?.[1] ?? f).trim();\n outputs.push({ agent: a.name, path: p, title, raw });\n }\n } catch {\n // no outputs for this agent/date\n }\n }\n } catch {\n // ignore\n }\n\n // Collect feedback entries for the day.\n const feedback: SharedFeedbackEntry[] = [];\n try {\n const raw = await readFile(this.feedbackInboxPath, \"utf-8\");\n for (const line of raw.split(\"\\n\")) {\n if (!line.trim()) continue;\n try {\n const obj = JSON.parse(line);\n const parsed = SharedFeedbackEntrySchema.safeParse(obj);\n if (!parsed.success) continue;\n if (String(parsed.data.date).startsWith(date)) feedback.push(parsed.data);\n } catch {\n // ignore\n }\n }\n } catch {\n // ignore\n }\n\n const sources: SharedCrossSignalSource[] = outputs.map((output) => {\n const body = stripYamlFrontmatter(output.raw);\n return {\n agent: output.agent,\n path: output.path,\n title: output.title,\n topics: extractTopicTokens(`${output.title}\\n${body}`),\n };\n });\n\n const overlapMap = new Map<string, { agents: Set<string>; sourcePaths: Set<string> }>();\n for (const source of sources) {\n for (const token of source.topics) {\n const existing = overlapMap.get(token);\n if (existing) {\n existing.agents.add(source.agent);\n existing.sourcePaths.add(source.path);\n } else {\n overlapMap.set(token, {\n agents: new Set([source.agent]),\n sourcePaths: new Set([source.path]),\n });\n }\n }\n }\n\n const overlaps: SharedCrossSignalOverlap[] = [...overlapMap.entries()]\n .map(([token, v]) => ({\n token,\n agents: [...v.agents].sort(),\n sourcePaths: [...v.sourcePaths].sort(),\n agentCount: v.agents.size,\n }))\n .filter((entry) => entry.agentCount >= 2)\n .sort((a, b) => b.agentCount - a.agentCount || a.token.localeCompare(b.token));\n\n const semanticEnabled =\n this.config.sharedCrossSignalSemanticEnabled === true\n || this.config.crossSignalsSemanticEnabled === true;\n const semanticTimeoutMs =\n this.config.sharedCrossSignalSemanticTimeoutMs\n ?? this.config.crossSignalsSemanticTimeoutMs\n ?? 4000;\n const semanticMaxCandidates = this.config.sharedCrossSignalSemanticMaxCandidates ?? 120;\n let semanticApplied = false;\n let semanticTimedOut = false;\n let semanticCandidateCount = 0;\n let semanticAddedOverlapCount = 0;\n let mergedOverlaps = overlaps;\n if (semanticEnabled) {\n try {\n const semanticResult = await computeSemanticOverlapsWithTimeout(\n sources,\n semanticTimeoutMs,\n semanticMaxCandidates,\n );\n semanticTimedOut = semanticResult.timedOut;\n semanticCandidateCount = semanticResult.candidateCount;\n if (!semanticResult.timedOut && semanticResult.overlaps.length > 0) {\n mergedOverlaps = mergeOverlaps(overlaps, semanticResult.overlaps);\n semanticAddedOverlapCount = Math.max(0, mergedOverlaps.length - overlaps.length);\n semanticApplied = semanticAddedOverlapCount > 0;\n }\n } catch (err) {\n log.warn(`shared-context semantic cross-signals failed; fail-open to deterministic output: ${err}`);\n }\n }\n\n const feedbackByDecision: SharedCrossSignalReport[\"feedbackByDecision\"] = {\n approved: 0,\n approved_with_feedback: 0,\n rejected: 0,\n };\n for (const entry of feedback) {\n feedbackByDecision[entry.decision] += 1;\n }\n\n const report: SharedCrossSignalReport = {\n date,\n generatedAt: new Date().toISOString(),\n sourceCount: sources.length,\n feedbackCount: feedback.length,\n feedbackByDecision,\n feedbackEntries: [...feedback].sort(compareFeedbackPriority),\n sources,\n overlaps: mergedOverlaps,\n semantic: {\n enabled: semanticEnabled,\n applied: semanticApplied,\n timedOut: semanticTimedOut,\n candidateCount: semanticCandidateCount,\n maxCandidates: Math.max(0, Math.floor(semanticMaxCandidates)),\n addedOverlapCount: semanticAddedOverlapCount,\n },\n };\n\n const crossSignalsPath = path.join(this.crossSignalsDir, `${date}.json`);\n await writeFile(crossSignalsPath, `${JSON.stringify(report, null, 2)}\\n`, \"utf-8\");\n\n const recurringThemeLines = mergedOverlaps.length === 0\n ? [\"- No multi-agent topic overlap detected.\"]\n : mergedOverlaps.slice(0, maxSummaryItems).map((entry) => formatOverlapLine(entry));\n const riskSignals = [...feedback]\n .filter((entry) => entry.decision !== \"approved\" || entry.severity === \"high\" || entry.severity === \"medium\")\n .sort(compareFeedbackPriority)\n .slice(0, maxSummaryItems);\n const riskLines = riskSignals.length === 0\n ? [\"- No explicit blockers or elevated review risks recorded.\"]\n : riskSignals.map((entry) => formatFeedbackLine(entry));\n const promotionCandidates = mergedOverlaps\n .filter((entry) => entry.agentCount >= 3)\n .slice(0, maxSummaryItems);\n const promotionLines = promotionCandidates.length === 0\n ? [\"- No promotion candidates yet.\"]\n : promotionCandidates.map((entry) =>\n `- Consider promoting \\`${entry.token}\\` into priorities or operating rules [sources: ${entry.sourcePaths.join(\", \")}]`\n );\n\n const crossSignalsMarkdown = [\n `# Cross-Signals — ${date}`,\n \"\",\n \"## Overview\",\n `- Source outputs analyzed: ${sources.length}`,\n `- Feedback entries analyzed: ${feedback.length}`,\n `- Decision totals: approved=${feedbackByDecision.approved}, approved_with_feedback=${feedbackByDecision.approved_with_feedback}, rejected=${feedbackByDecision.rejected}`,\n `- Semantic enhancer: ${semanticEnabled ? (semanticTimedOut ? \"enabled (timed out, fail-open)\" : semanticApplied ? \"enabled (applied)\" : \"enabled (no additional overlaps)\") : \"disabled\"}`,\n `- JSON report: ${crossSignalsPath}`,\n \"\",\n \"## Recurring Themes\",\n ...recurringThemeLines,\n \"\",\n \"## Risks And Blockers\",\n ...riskLines,\n \"\",\n \"## Potential Promotions\",\n ...promotionLines,\n \"\",\n \"## Sources\",\n ...(sources.length === 0 ? [\"- (none)\"] : sources.map((source) =>\n `- [${source.agent}] ${source.title} (${source.path})`\n )),\n \"\",\n ].join(\"\\n\");\n\n const crossSignalsMarkdownPath = path.join(this.crossSignalsDir, `${date}.md`);\n await writeFile(crossSignalsMarkdownPath, crossSignalsMarkdown, \"utf-8\");\n\n return {\n date,\n crossSignalsPath,\n crossSignalsMarkdownPath,\n overlapCount: mergedOverlaps.length,\n report,\n };\n }\n\n async curateDaily(opts: { date?: string; maxChars?: number }): Promise<SharedDailyCurationResult> {\n const date = opts.date ?? ymd(new Date());\n const maxChars = Math.max(2_000, opts.maxChars ?? 20_000);\n const crossSignals = await this.synthesizeCrossSignals({ date });\n const feedbackLines = crossSignals.report.feedbackEntries.length === 0\n ? [\"- (none)\"]\n : crossSignals.report.feedbackEntries.map((entry) => formatFeedbackLine(entry));\n const overlapBullets = crossSignals.report.overlaps.length === 0\n ? [\"- No multi-agent topic overlap detected.\"]\n : crossSignals.report.overlaps.slice(0, 8).map((entry) => formatOverlapLine(entry));\n\n const md: string[] = [\n `# Roundtable — ${date}`,\n \"\",\n \"## Notable Agent Outputs\",\n ...(crossSignals.report.sources.length === 0\n ? [\"- (none)\"]\n : crossSignals.report.sources.map((source) => `- ${source.title} (${source.path})`)),\n \"\",\n \"## Feedback (Approve/Reject)\",\n ...feedbackLines,\n \"\",\n \"## Cross-Signals\",\n `- Source outputs analyzed: ${crossSignals.report.sourceCount}`,\n `- Feedback entries analyzed: ${crossSignals.report.feedbackCount}`,\n `- Decision totals: approved=${crossSignals.report.feedbackByDecision.approved}, approved_with_feedback=${crossSignals.report.feedbackByDecision.approved_with_feedback}, rejected=${crossSignals.report.feedbackByDecision.rejected}`,\n `- Semantic enhancer: ${crossSignals.report.semantic.enabled ? (crossSignals.report.semantic.timedOut ? \"enabled (timed out, fail-open)\" : crossSignals.report.semantic.applied ? \"enabled (applied)\" : \"enabled (no additional overlaps)\") : \"disabled\"}`,\n `- Cross-signals JSON: ${crossSignals.crossSignalsPath}`,\n `- Cross-signals markdown: ${crossSignals.crossSignalsMarkdownPath}`,\n ...overlapBullets,\n \"\",\n ];\n\n const out = md.join(\"\\n\");\n const trimmed = out.length > maxChars ? out.slice(0, maxChars) + \"\\n\\n...(trimmed)\\n\" : out;\n\n const roundtablePath = path.join(this.roundtableDir, `${date}.md`);\n await writeFile(roundtablePath, trimmed, \"utf-8\");\n\n log.info(`shared-context curated daily roundtable: ${roundtablePath}`);\n return {\n date,\n roundtablePath,\n crossSignalsPath: crossSignals.crossSignalsPath,\n crossSignalsMarkdownPath: crossSignals.crossSignalsMarkdownPath,\n overlapCount: crossSignals.overlapCount,\n };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAS,kBAAkB;AAC3B,SAAS,SAAAA,QAAO,YAAAC,WAAU,WAAAC,UAAS,QAAQ,aAAAC,kBAAiB;AAC5D,OAAOC,WAAU;;;ACFjB,SAAS,OAAO,UAAU,SAAS,YAAY,WAAW,YAAY;AACtE,OAAO,UAAU;AACjB,SAAS,SAAS;AAKX,IAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,UAAU,EAAE,KAAK,CAAC,YAAY,0BAA0B,UAAU,CAAC;AAAA,EACnE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA;AAAA,EACtB,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAU,EAAE,KAAK,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,SAAS;AAAA,EACrD,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC9C,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACrC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC1C,qBAAqB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAChD,mBAAmB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC9C,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AACrC,CAAC;AAID,SAAS,SAAS,GAAmB;AACnC,MAAI,OAAO,EAAE,YAAY,EAAE,QAAQ,eAAe,GAAG;AAErD,MAAI,QAAQ;AACZ,SAAO,QAAQ,KAAK,UAAU,KAAK,KAAK,MAAM,IAAK;AACnD,MAAI,MAAM,KAAK;AACf,SAAO,MAAM,SAAS,KAAK,MAAM,CAAC,MAAM,IAAK;AAC7C,SAAO,KAAK,MAAM,OAAO,GAAG,EAAE,MAAM,GAAG,EAAE,KAAK;AAChD;AAEA,SAAS,IAAI,GAAiB;AAC5B,SAAO,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE;AACpC;AAEA,IAAM,yBAAyB,oBAAI,IAAI;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,mBAAmB,MAAc,YAAoB,IAAc;AAC1E,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,MAAgB,CAAC;AACvB,QAAM,SAAS,KACZ,YAAY,EACZ,QAAQ,gBAAgB,GAAG,EAC3B,MAAM,KAAK,EACX,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,CAAC,UAAU,MAAM,UAAU,CAAC,EACnC,OAAO,CAAC,UAAU,CAAC,uBAAuB,IAAI,KAAK,CAAC;AAEvD,aAAW,SAAS,QAAQ;AAC1B,QAAI,KAAK,IAAI,KAAK,EAAG;AACrB,SAAK,IAAI,KAAK;AACd,QAAI,KAAK,KAAK;AACd,QAAI,IAAI,UAAU,UAAW;AAAA,EAC/B;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,MAAsB;AAClD,MAAI,CAAC,KAAK,WAAW,OAAO,EAAG,QAAO;AACtC,QAAM,UAAU,KAAK,QAAQ,WAAW,CAAC;AACzC,MAAI,YAAY,GAAI,QAAO;AAC3B,SAAO,KAAK,MAAM,UAAU,CAAC;AAC/B;AAEA,SAAS,aAAa,OAAuB;AAC3C,MAAI,OAAO,MAAM,YAAY;AAC7B,MAAI,KAAK,SAAS,UAAU,KAAK,KAAK,SAAS,GAAG;AAChD,WAAO,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,EAC7B,WACS,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,GAAG;AACpD,WAAO,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,EAC7B,WAAW,KAAK,SAAS,UAAU,KAAK,KAAK,SAAS,GAAG;AACvD,WAAO,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,EAC7B,WAAW,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,GAAG;AACtD,WAAO,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,EAC7B,OAAO;AACL,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,eAAW,UAAU,UAAU;AAC7B,UAAI,KAAK,SAAS,OAAO,SAAS,KAAK,KAAK,SAAS,MAAM,GAAG;AAC5D,eAAO,KAAK,MAAM,GAAG,CAAC,OAAO,MAAM;AACnC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,MAAI,KAAK,SAAS,KAAK,KAAK,SAAS,GAAG,GAAG;AACzC,WAAO,KAAK,MAAM,GAAG,EAAE;AAAA,EACzB;AACA,SAAO;AACT;AAEA,SAAS,cACP,MACA,OAC4B;AAC5B,QAAM,SAAS,oBAAI,IAA+D;AAClF,aAAW,SAAS,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG;AACvC,UAAM,WAAW,OAAO,IAAI,MAAM,KAAK;AACvC,QAAI,UAAU;AACZ,iBAAW,SAAS,MAAM,OAAQ,UAAS,OAAO,IAAI,KAAK;AAC3D,iBAAW,cAAc,MAAM,YAAa,UAAS,YAAY,IAAI,UAAU;AAAA,IACjF,OAAO;AACL,aAAO,IAAI,MAAM,OAAO;AAAA,QACtB,QAAQ,IAAI,IAAI,MAAM,MAAM;AAAA,QAC5B,aAAa,IAAI,IAAI,MAAM,WAAW;AAAA,MACxC,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EACxB,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO;AAAA,IACxB;AAAA,IACA,QAAQ,CAAC,GAAG,MAAM,MAAM,EAAE,KAAK;AAAA,IAC/B,aAAa,CAAC,GAAG,MAAM,WAAW,EAAE,KAAK;AAAA,IACzC,YAAY,MAAM,OAAO;AAAA,EAC3B,EAAE,EACD,OAAO,CAAC,UAAU,MAAM,cAAc,CAAC,EACvC,KAAK,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,EAAE,KAAK,CAAC;AACjF;AAEA,eAAe,iCACb,SACA,eACA,aAC8F;AAC9F,QAAM,YAAmE,CAAC;AAC1E,aAAW,UAAU,SAAS;AAC5B,eAAW,SAAS,OAAO,QAAQ;AACjC,UAAI,KAAK,IAAI,KAAK,YAAa,QAAO,EAAE,UAAU,CAAC,GAAG,gBAAgB,UAAU,QAAQ,UAAU,KAAK;AACvG,YAAM,IAAI,QAAc,CAAC,YAAY,aAAa,OAAO,CAAC;AAC1D,gBAAU,KAAK,EAAE,OAAO,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,CAAC;AAChE,UAAI,UAAU,UAAU,cAAe;AAAA,IACzC;AACA,QAAI,UAAU,UAAU,cAAe;AAAA,EACzC;AAEA,QAAM,SAAS,oBAAI,IAAsE;AACzF,aAAW,OAAO,WAAW;AAC3B,QAAI,KAAK,IAAI,KAAK,YAAa,QAAO,EAAE,UAAU,CAAC,GAAG,gBAAgB,UAAU,QAAQ,UAAU,KAAK;AACvG,UAAM,IAAI,QAAc,CAAC,YAAY,aAAa,OAAO,CAAC;AAC1D,UAAM,OAAO,aAAa,IAAI,KAAK;AACnC,QAAI,KAAK,SAAS,EAAG;AACrB,UAAM,YAAY,OAAO,IAAI,IAAI,KAAK,oBAAI,IAAyD;AACnG,UAAM,aAAa,UAAU,IAAI,IAAI,KAAK,KAAK,EAAE,QAAQ,oBAAI,IAAY,GAAG,OAAO,oBAAI,IAAY,EAAE;AACrG,eAAW,OAAO,IAAI,IAAI,KAAK;AAC/B,eAAW,MAAM,IAAI,IAAI,IAAI;AAC7B,cAAU,IAAI,IAAI,OAAO,UAAU;AACnC,WAAO,IAAI,MAAM,SAAS;AAAA,EAC5B;AAEA,QAAM,WAAuC,CAAC;AAC9C,aAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,GAAG;AAC/C,QAAI,KAAK,IAAI,KAAK,YAAa,QAAO,EAAE,UAAU,CAAC,GAAG,gBAAgB,UAAU,QAAQ,UAAU,KAAK;AACvG,UAAM,IAAI,QAAc,CAAC,YAAY,aAAa,OAAO,CAAC;AAC1D,QAAI,SAAS,OAAO,EAAG;AACvB,UAAM,SAAS,oBAAI,IAAY;AAC/B,UAAM,cAAc,oBAAI,IAAY;AACpC,eAAW,SAAS,SAAS,OAAO,GAAG;AACrC,iBAAW,SAAS,MAAM,OAAQ,QAAO,IAAI,KAAK;AAClD,iBAAW,cAAc,MAAM,MAAO,aAAY,IAAI,UAAU;AAAA,IAClE;AACA,QAAI,OAAO,OAAO,EAAG;AACrB,aAAS,KAAK;AAAA,MACZ,OAAO,YAAY,IAAI;AAAA,MACvB,QAAQ,CAAC,GAAG,MAAM,EAAE,KAAK;AAAA,MACzB,aAAa,CAAC,GAAG,WAAW,EAAE,KAAK;AAAA,MACnC,YAAY,OAAO;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,WAAS,KAAK,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,EAAE,KAAK,CAAC;AACrF,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,UAAU;AAAA,IAC1B,UAAU;AAAA,EACZ;AACF;AAEA,eAAe,mCACb,SACA,WACA,eAC8F;AAC9F,QAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,CAAC;AACvD,QAAM,oBAAoB,KAAK,IAAI,GAAG,KAAK,MAAM,aAAa,CAAC;AAC/D,MAAI,sBAAsB,KAAK,QAAQ,WAAW,GAAG;AACnD,WAAO,EAAE,UAAU,CAAC,GAAG,gBAAgB,GAAG,UAAU,MAAM;AAAA,EAC5D;AACA,QAAM,cAAc,KAAK,IAAI,IAAI;AACjC,SAAO,iCAAiC,SAAS,mBAAmB,WAAW;AACjF;AAmDA,SAAS,yBAAyB,UAAmD;AACnF,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,EACX;AACF;AAEA,SAAS,yBAAyB,UAAmD;AACnF,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,wBAAwB,GAAwB,GAAgC;AACvF,SACE,yBAAyB,EAAE,QAAQ,IAAI,yBAAyB,EAAE,QAAQ,KACvE,yBAAyB,EAAE,QAAQ,IAAI,yBAAyB,EAAE,QAAQ,KAC1E,EAAE,KAAK,cAAc,EAAE,IAAI;AAElC;AAEA,SAAS,mBAAmB,OAAoC;AAC9D,QAAM,SAAmB,CAAC,aAAa,MAAM,IAAI,EAAE;AACnD,MAAI,MAAM,SAAU,QAAO,KAAK,aAAa,MAAM,QAAQ,EAAE;AAC7D,MAAI,MAAM,MAAM,OAAQ,QAAO,KAAK,SAAS,MAAM,KAAK,KAAK,IAAI,CAAC,EAAE;AACpE,SAAO,MAAM,MAAM,KAAK,KAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,KAAK,OAAO,KAAK,IAAI,CAAC;AACpF;AAEA,SAAS,kBAAkB,OAAyC;AAClE,SAAO,OAAO,MAAM,KAAK,OAAO,MAAM,UAAU,YAAY,MAAM,OAAO,KAAK,IAAI,CAAC,eAAe,MAAM,YAAY,KAAK,IAAI,CAAC;AAChI;AAEO,SAAS,wBAAwB,QAA8B;AACpE,SAAO,OAAO,OAAO,qBAAqB,YAAY,OAAO,iBAAiB,SAAS,IACnF,gBAAgB,OAAO,gBAAgB,IACvC,KAAK,KAAK,gBAAgB,OAAO,YAAY,GAAG,gBAAgB;AACtE;AAEO,IAAM,uBAAN,MAA2B;AAAA,EAUhC,YAA6B,QAAsB;AAAtB;AAC3B,UAAM,OAAO,wBAAwB,MAAM;AAE3C,SAAK,MAAM;AACX,SAAK,iBAAiB,KAAK,KAAK,MAAM,eAAe;AACrD,SAAK,sBAAsB,KAAK,KAAK,MAAM,qBAAqB;AAChE,SAAK,aAAa,KAAK,KAAK,MAAM,eAAe;AACjD,SAAK,gBAAgB,KAAK,KAAK,MAAM,YAAY;AACjD,SAAK,cAAc,KAAK,KAAK,MAAM,UAAU;AAC7C,SAAK,oBAAoB,KAAK,KAAK,KAAK,aAAa,aAAa;AAClE,SAAK,kBAAkB,KAAK,KAAK,MAAM,eAAe;AAAA,EACxD;AAAA,EAX6B;AAAA,EATpB;AAAA,EACQ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAejB,MAAM,kBAAiC;AACrC,UAAM,MAAM,KAAK,KAAK,EAAE,WAAW,KAAK,CAAC;AACzC,UAAM,MAAM,KAAK,YAAY,EAAE,WAAW,KAAK,CAAC;AAChD,UAAM,MAAM,KAAK,eAAe,EAAE,WAAW,KAAK,CAAC;AACnD,UAAM,MAAM,KAAK,aAAa,EAAE,WAAW,KAAK,CAAC;AACjD,UAAM,MAAM,KAAK,iBAAiB,EAAE,WAAW,KAAK,CAAC;AACrD,UAAM,MAAM,KAAK,KAAK,KAAK,KAAK,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;AAC/D,UAAM,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,GAAG,EAAE,WAAW,KAAK,CAAC;AAC5D,UAAM,MAAM,KAAK,KAAK,KAAK,KAAK,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAChE,UAAM,MAAM,KAAK,KAAK,KAAK,KAAK,kBAAkB,GAAG,EAAE,WAAW,KAAK,CAAC;AAGxE,UAAM,KAAK;AAAA,MACT,KAAK;AAAA,MACL;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,KAAK,IAAI;AAAA,IACb;AACA,UAAM,KAAK;AAAA,MACT,KAAK;AAAA,MACL;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,KAAK,IAAI;AAAA,IACb;AACA,UAAM,KAAK,WAAW,KAAK,mBAAmB,EAAE;AAAA,EAClD;AAAA,EAEA,MAAc,WAAW,IAAY,SAAgC;AACnE,QAAI;AACF,YAAM,KAAK,EAAE;AAAA,IACf,QAAQ;AACN,YAAM,UAAU,IAAI,SAAS,OAAO;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,iBAAkC;AACtC,QAAI;AACF,aAAO,MAAM,SAAS,KAAK,gBAAgB,OAAO;AAAA,IACpD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,uBAAwC;AAC5C,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,KAAK,aAAa,GAC5C,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,EAC/B,KAAK,EACL,QAAQ;AACX,YAAM,KAAK,MAAM,CAAC,IAAI,KAAK,KAAK,KAAK,eAAe,MAAM,CAAC,CAAC,IAAI;AAChE,UAAI,CAAC,GAAI,QAAO;AAChB,aAAO,MAAM,SAAS,IAAI,OAAO;AAAA,IACnC,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,yBAA0C;AAC9C,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,KAAK,eAAe,GAC9C,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,EAC/B,KAAK,EACL,QAAQ;AACX,YAAM,KAAK,MAAM,CAAC,IAAI,KAAK,KAAK,KAAK,iBAAiB,MAAM,CAAC,CAAC,IAAI;AAClE,UAAI,CAAC,GAAI,QAAO;AAChB,aAAO,MAAM,SAAS,IAAI,OAAO;AAAA,IACnC,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,MAKH;AAClB,UAAM,YAAY,KAAK,aAAa,oBAAI,KAAK;AAC7C,UAAM,OAAO,IAAI,SAAS;AAC1B,UAAM,OAAO,UAAU,YAAY,EAAE,MAAM,IAAI,EAAE,EAAE,QAAQ,MAAM,EAAE;AACnE,UAAM,OAAO,SAAS,KAAK,KAAK;AAEhC,UAAM,MAAM,KAAK,KAAK,KAAK,YAAY,KAAK,SAAS,IAAI;AACzD,UAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,UAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,IAAI,IAAI,KAAK;AAE9C,UAAM,OACJ;AAAA;AAAA,SAEU,KAAK,OAAO;AAAA,aACR,UAAU,YAAY,CAAC;AAAA,SAC3B,KAAK,MAAM,QAAQ,OAAO,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;AAAA;AAAA;AAAA,IAEtD,KAAK,QAAQ,QAAQ,IACrB;AAEF,UAAM,UAAU,IAAI,MAAM,OAAO;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,eAAe,OAA2C;AAC9D,UAAM,SAAS,0BAA0B,MAAM,KAAK;AACpD,UAAM,WAAW,KAAK,mBAAmB,KAAK,UAAU,MAAM,IAAI,MAAM,OAAO;AAAA,EACjF;AAAA,EAEA,MAAM,sBAAsB,MAAwD;AAClF,UAAM,SAAQ,oBAAI,KAAK,GAAE,YAAY;AACrC,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA,MAAM,KAAK,KAAK,KAAK,OAAO;AAAA,MAC5B;AAAA,MACA,KAAK,KAAK,QAAQ;AAAA,MAClB;AAAA,IACF,EAAE,KAAK,IAAI;AACX,UAAM,WAAW,KAAK,qBAAqB,OAAO,OAAO;AAAA,EAC3D;AAAA,EAEA,MAAM,uBAAuB,MAGiB;AAC5C,UAAM,OAAO,KAAK,QAAQ,IAAI,oBAAI,KAAK,CAAC;AACxC,UAAM,kBAAkB,KAAK,IAAI,GAAG,KAAK,mBAAmB,CAAC;AAG7D,UAAM,UAA8E,CAAC;AACrF,QAAI;AACF,YAAM,SAAS,MAAM,QAAQ,KAAK,YAAY,EAAE,eAAe,KAAK,CAAC;AACrE,iBAAW,KAAK,QAAQ;AACtB,YAAI,CAAC,EAAE,YAAY,EAAG;AACtB,cAAM,SAAS,KAAK,KAAK,KAAK,YAAY,EAAE,MAAM,IAAI;AACtD,YAAI;AACF,gBAAM,SAAS,MAAM,QAAQ,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,EAAE,KAAK;AAC5E,qBAAW,KAAK,OAAO;AACrB,kBAAM,IAAI,KAAK,KAAK,QAAQ,CAAC;AAC7B,kBAAM,MAAM,MAAM,SAAS,GAAG,OAAO;AACrC,kBAAM,SAAS,IAAI,MAAM,kBAAkB,IAAI,CAAC,KAAK,GAAG,KAAK;AAC7D,oBAAQ,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC;AAAA,UACrD;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAGA,UAAM,WAAkC,CAAC;AACzC,QAAI;AACF,YAAM,MAAM,MAAM,SAAS,KAAK,mBAAmB,OAAO;AAC1D,iBAAW,QAAQ,IAAI,MAAM,IAAI,GAAG;AAClC,YAAI,CAAC,KAAK,KAAK,EAAG;AAClB,YAAI;AACF,gBAAM,MAAM,KAAK,MAAM,IAAI;AAC3B,gBAAM,SAAS,0BAA0B,UAAU,GAAG;AACtD,cAAI,CAAC,OAAO,QAAS;AACrB,cAAI,OAAO,OAAO,KAAK,IAAI,EAAE,WAAW,IAAI,EAAG,UAAS,KAAK,OAAO,IAAI;AAAA,QAC1E,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAEA,UAAM,UAAqC,QAAQ,IAAI,CAAC,WAAW;AACjE,YAAM,OAAO,qBAAqB,OAAO,GAAG;AAC5C,aAAO;AAAA,QACL,OAAO,OAAO;AAAA,QACd,MAAM,OAAO;AAAA,QACb,OAAO,OAAO;AAAA,QACd,QAAQ,mBAAmB,GAAG,OAAO,KAAK;AAAA,EAAK,IAAI,EAAE;AAAA,MACvD;AAAA,IACF,CAAC;AAED,UAAM,aAAa,oBAAI,IAA+D;AACtF,eAAW,UAAU,SAAS;AAC5B,iBAAW,SAAS,OAAO,QAAQ;AACjC,cAAM,WAAW,WAAW,IAAI,KAAK;AACrC,YAAI,UAAU;AACZ,mBAAS,OAAO,IAAI,OAAO,KAAK;AAChC,mBAAS,YAAY,IAAI,OAAO,IAAI;AAAA,QACtC,OAAO;AACL,qBAAW,IAAI,OAAO;AAAA,YACpB,QAAQ,oBAAI,IAAI,CAAC,OAAO,KAAK,CAAC;AAAA,YAC9B,aAAa,oBAAI,IAAI,CAAC,OAAO,IAAI,CAAC;AAAA,UACpC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAuC,CAAC,GAAG,WAAW,QAAQ,CAAC,EAClE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO;AAAA,MACpB;AAAA,MACA,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK;AAAA,MAC3B,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK;AAAA,MACrC,YAAY,EAAE,OAAO;AAAA,IACvB,EAAE,EACD,OAAO,CAAC,UAAU,MAAM,cAAc,CAAC,EACvC,KAAK,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,EAAE,KAAK,CAAC;AAE/E,UAAM,kBACJ,KAAK,OAAO,qCAAqC,QAC9C,KAAK,OAAO,gCAAgC;AACjD,UAAM,oBACJ,KAAK,OAAO,sCACT,KAAK,OAAO,iCACZ;AACL,UAAM,wBAAwB,KAAK,OAAO,0CAA0C;AACpF,QAAI,kBAAkB;AACtB,QAAI,mBAAmB;AACvB,QAAI,yBAAyB;AAC7B,QAAI,4BAA4B;AAChC,QAAI,iBAAiB;AACrB,QAAI,iBAAiB;AACnB,UAAI;AACF,cAAM,iBAAiB,MAAM;AAAA,UAC3B;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,2BAAmB,eAAe;AAClC,iCAAyB,eAAe;AACxC,YAAI,CAAC,eAAe,YAAY,eAAe,SAAS,SAAS,GAAG;AAClE,2BAAiB,cAAc,UAAU,eAAe,QAAQ;AAChE,sCAA4B,KAAK,IAAI,GAAG,eAAe,SAAS,SAAS,MAAM;AAC/E,4BAAkB,4BAA4B;AAAA,QAChD;AAAA,MACF,SAAS,KAAK;AACZ,YAAI,KAAK,oFAAoF,GAAG,EAAE;AAAA,MACpG;AAAA,IACF;AAEA,UAAM,qBAAoE;AAAA,MACxE,UAAU;AAAA,MACV,wBAAwB;AAAA,MACxB,UAAU;AAAA,IACZ;AACA,eAAW,SAAS,UAAU;AAC5B,yBAAmB,MAAM,QAAQ,KAAK;AAAA,IACxC;AAEA,UAAM,SAAkC;AAAA,MACtC;AAAA,MACA,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,MACpC,aAAa,QAAQ;AAAA,MACrB,eAAe,SAAS;AAAA,MACxB;AAAA,MACA,iBAAiB,CAAC,GAAG,QAAQ,EAAE,KAAK,uBAAuB;AAAA,MAC3D;AAAA,MACA,UAAU;AAAA,MACV,UAAU;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,QACV,gBAAgB;AAAA,QAChB,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,qBAAqB,CAAC;AAAA,QAC5D,mBAAmB;AAAA,MACrB;AAAA,IACF;AAEA,UAAM,mBAAmB,KAAK,KAAK,KAAK,iBAAiB,GAAG,IAAI,OAAO;AACvE,UAAM,UAAU,kBAAkB,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,GAAM,OAAO;AAEjF,UAAM,sBAAsB,eAAe,WAAW,IAClD,CAAC,0CAA0C,IAC3C,eAAe,MAAM,GAAG,eAAe,EAAE,IAAI,CAAC,UAAU,kBAAkB,KAAK,CAAC;AACpF,UAAM,cAAc,CAAC,GAAG,QAAQ,EAC7B,OAAO,CAAC,UAAU,MAAM,aAAa,cAAc,MAAM,aAAa,UAAU,MAAM,aAAa,QAAQ,EAC3G,KAAK,uBAAuB,EAC5B,MAAM,GAAG,eAAe;AAC3B,UAAM,YAAY,YAAY,WAAW,IACrC,CAAC,2DAA2D,IAC5D,YAAY,IAAI,CAAC,UAAU,mBAAmB,KAAK,CAAC;AACxD,UAAM,sBAAsB,eACzB,OAAO,CAAC,UAAU,MAAM,cAAc,CAAC,EACvC,MAAM,GAAG,eAAe;AAC3B,UAAM,iBAAiB,oBAAoB,WAAW,IAClD,CAAC,gCAAgC,IACjC,oBAAoB;AAAA,MAAI,CAAC,UACvB,0BAA0B,MAAM,KAAK,mDAAmD,MAAM,YAAY,KAAK,IAAI,CAAC;AAAA,IACtH;AAEJ,UAAM,uBAAuB;AAAA,MAC3B,0BAAqB,IAAI;AAAA,MACzB;AAAA,MACA;AAAA,MACA,8BAA8B,QAAQ,MAAM;AAAA,MAC5C,gCAAgC,SAAS,MAAM;AAAA,MAC/C,+BAA+B,mBAAmB,QAAQ,4BAA4B,mBAAmB,sBAAsB,cAAc,mBAAmB,QAAQ;AAAA,MACxK,wBAAwB,kBAAmB,mBAAmB,mCAAmC,kBAAkB,sBAAsB,qCAAsC,UAAU;AAAA,MACzL,kBAAkB,gBAAgB;AAAA,MAClC;AAAA,MACA;AAAA,MACA,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA,GAAI,QAAQ,WAAW,IAAI,CAAC,UAAU,IAAI,QAAQ;AAAA,QAAI,CAAC,WACrD,MAAM,OAAO,KAAK,KAAK,OAAO,KAAK,KAAK,OAAO,IAAI;AAAA,MACrD;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAEX,UAAM,2BAA2B,KAAK,KAAK,KAAK,iBAAiB,GAAG,IAAI,KAAK;AAC7E,UAAM,UAAU,0BAA0B,sBAAsB,OAAO;AAEvE,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,eAAe;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,MAAgF;AAChG,UAAM,OAAO,KAAK,QAAQ,IAAI,oBAAI,KAAK,CAAC;AACxC,UAAM,WAAW,KAAK,IAAI,KAAO,KAAK,YAAY,GAAM;AACxD,UAAM,eAAe,MAAM,KAAK,uBAAuB,EAAE,KAAK,CAAC;AAC/D,UAAM,gBAAgB,aAAa,OAAO,gBAAgB,WAAW,IACjE,CAAC,UAAU,IACX,aAAa,OAAO,gBAAgB,IAAI,CAAC,UAAU,mBAAmB,KAAK,CAAC;AAChF,UAAM,iBAAiB,aAAa,OAAO,SAAS,WAAW,IAC3D,CAAC,0CAA0C,IAC3C,aAAa,OAAO,SAAS,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,kBAAkB,KAAK,CAAC;AAEpF,UAAM,KAAe;AAAA,MACnB,uBAAkB,IAAI;AAAA,MACtB;AAAA,MACA;AAAA,MACA,GAAI,aAAa,OAAO,QAAQ,WAAW,IACvC,CAAC,UAAU,IACX,aAAa,OAAO,QAAQ,IAAI,CAAC,WAAW,KAAK,OAAO,KAAK,KAAK,OAAO,IAAI,GAAG;AAAA,MACpF;AAAA,MACA;AAAA,MACA,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA,8BAA8B,aAAa,OAAO,WAAW;AAAA,MAC7D,gCAAgC,aAAa,OAAO,aAAa;AAAA,MACjE,+BAA+B,aAAa,OAAO,mBAAmB,QAAQ,4BAA4B,aAAa,OAAO,mBAAmB,sBAAsB,cAAc,aAAa,OAAO,mBAAmB,QAAQ;AAAA,MACpO,wBAAwB,aAAa,OAAO,SAAS,UAAW,aAAa,OAAO,SAAS,WAAW,mCAAmC,aAAa,OAAO,SAAS,UAAU,sBAAsB,qCAAsC,UAAU;AAAA,MACxP,yBAAyB,aAAa,gBAAgB;AAAA,MACtD,6BAA6B,aAAa,wBAAwB;AAAA,MAClE,GAAG;AAAA,MACH;AAAA,IACF;AAEA,UAAM,MAAM,GAAG,KAAK,IAAI;AACxB,UAAM,UAAU,IAAI,SAAS,WAAW,IAAI,MAAM,GAAG,QAAQ,IAAI,uBAAuB;AAExF,UAAM,iBAAiB,KAAK,KAAK,KAAK,eAAe,GAAG,IAAI,KAAK;AACjE,UAAM,UAAU,gBAAgB,SAAS,OAAO;AAEhD,QAAI,KAAK,4CAA4C,cAAc,EAAE;AACrE,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,kBAAkB,aAAa;AAAA,MAC/B,0BAA0B,aAAa;AAAA,MACvC,cAAc,aAAa;AAAA,IAC7B;AAAA,EACF;AACF;;;ADrkBA,IAAM,sBAAsB;AAC5B,IAAM,0BAA0B;AAEhC,SAAS,WAAW,OAAuB;AACzC,SAAO,MACJ,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,YAAY,EAAE,EACtB,MAAM,GAAG,EAAE,KAAK;AACrB;AAEA,SAAS,oBAAoB,MAAwB;AACnD,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,KACjB,YAAY,EACZ,QAAQ,iBAAiB,GAAG,EAC5B,MAAM,KAAK,EACX,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,CAAC,SAAS,KAAK,UAAU,CAAC,GAAG;AACrC,QAAI,KAAK,IAAI,KAAK,EAAG;AACrB,SAAK,IAAI,KAAK;AACd,QAAI,KAAK,KAAK;AAAA,EAChB;AACA,SAAO;AACT;AAEA,SAAS,cAAc,QAAwB;AAC7C,QAAM,QAAQ,OAAO,MAAM,oBAAoB;AAC/C,MAAI,CAAC,MAAO,QAAO,OAAO;AAC1B,QAAM,OAAO,OAAO,MAAM,CAAC,CAAC;AAC5B,QAAM,OAAO,OAAO,MAAM,CAAC,CAAC;AAC5B,MAAI,CAAC,OAAO,UAAU,IAAI,KAAK,CAAC,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK,OAAO,IAAI;AAC/E,WAAO,OAAO;AAAA,EAChB;AACA,QAAM,OAAO,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC;AAC1C,QAAM,UAAU,KAAK,UAAU,KAAK;AACpC,QAAM,kBAAkB,IAAI,KAAK,IAAI;AACrC,kBAAgB,WAAW,KAAK,WAAW,KAAK,UAAU,EAAE;AAC5D,QAAM,kBAAkB,IAAI,KAAK,eAAe;AAChD,kBAAgB,WAAW,gBAAgB,WAAW,KAAM,OAAO,KAAK,CAAE;AAC1E,SAAO,KAAK,MAAM,gBAAgB,QAAQ,KAAK,IAAI,KAAK,KAAK,KAAK,IAAK;AACzE;AAEA,SAAS,oBAAoB,OAA+B;AAC1D,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACjE,QAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC;AAC9C,SAAO,OAAO,QAAQ,QAAQ,CAAC,CAAC;AAClC;AAEA,SAAS,cAAc,MAAsC;AAC3D,MAAI,CAAC,MAAM,QAAQ,IAAI,EAAG,QAAO,CAAC;AAClC,SAAO,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,OAAO,GAAG,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK;AAClG;AAEA,SAAS,wBAAwB,OAAgB,KAA8B;AAC7E,QAAM,YAAY,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS,IAAI,QAAQ;AACjF,QAAM,UAAU,OAAO,QAAQ,YAAY,IAAI,KAAK,EAAE,SAAS,IAAI,MAAM;AACzE,SAAO,EAAE,OAAO,WAAW,KAAK,QAAQ;AAC1C;AAEA,SAAS,qBAAqB,SAAyB,MAAsC;AAC3F,SAAO;AAAA,IACL,OAAO,QAAQ,UAAU,OAAO,KAAK,QAAQ,KAAK,UAAU,OAAO,QAAQ,QAAQ,QAAQ,SAAS,KAAK,QAAQ,QAAQ,QAAQ,KAAK;AAAA,IACtI,KAAK,QAAQ,QAAQ,OAAO,KAAK,MAAM,KAAK,QAAQ,OAAO,QAAQ,MAAM,QAAQ,OAAO,KAAK,MAAM,QAAQ,MAAM,KAAK;AAAA,EACxH;AACF;AAEA,SAAS,gBACP,UACA,SACA,OACA,UACQ;AACR,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,WAAW,KAAK,IAAI;AAAA,IAC5B,WAAW,WAAW,QAAQ,IAAI;AAAA,IAClC,WAAW,OAAO,EAAE,MAAM,GAAG,EAAE;AAAA,EACjC,EAAE,KAAK,GAAG;AACZ;AAEA,SAAS,eAAe,MAA4B,SAAyB;AAC3E,SAAO,GAAG,IAAI,IAAI,WAAW,OAAO,CAAC;AACvC;AAEA,SAAS,2BACP,YACA,SACA,SACQ;AACR,QAAM,SAAS,WAAW,QAAQ,EAC/B,OAAO,GAAG,UAAU,KAAS,OAAO,KAAS,OAAO,EAAE,EACtD,OAAO,KAAK,EACZ,MAAM,GAAG,EAAE;AACd,SAAO,GAAG,UAAU,IAAI,MAAM;AAChC;AAEA,SAAS,uBACP,OACA,gBACQ;AACR,QAAM,OAAO,WAAW,MAAM,OAAO;AACrC,OAAK,eAAe,IAAI,IAAI,KAAK,MAAM,EAAG,QAAO,GAAG,IAAI;AACxD,QAAM,SAAS,WAAW,QAAQ,EAAE,OAAO,GAAG,MAAM,IAAI,IAAI,MAAM,OAAO,EAAE,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC;AACrG,SAAO,GAAG,IAAI,IAAI,MAAM;AAC1B;AAEA,SAAS,wBAAwB,SAAoE;AACnG,QAAM,iBAAiB,QAAQ,QAAQ,GAAG;AAC1C,MAAI,kBAAkB,EAAG,QAAO,EAAE,OAAO,MAAM,UAAU,KAAK;AAC9D,QAAM,UAAU,QAAQ,MAAM,GAAG,cAAc,EAAE,KAAK;AACtD,SAAO;AAAA,IACL,OAAO,QAAQ,SAAS,IAAI,UAAU;AAAA,IACtC,UAAU;AAAA,EACZ;AACF;AAEA,SAAS,2BAA2B,SAIlC;AACA,MAAI,QAAQ,WAAW,gBAAgB,GAAG;AACxC,WAAO;AAAA,MACL,UAAU;AAAA,MACV,OAAO;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,EACF;AACA,QAAM,QAAQ,wBAAwB,OAAO;AAC7C,SAAO;AAAA,IACL,UAAU;AAAA,IACV,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,EAClB;AACF;AAEA,SAAS,6BAA6B,OAAuB;AAC3D,SAAO,MAAM,QAAQ,QAAQ,GAAG,EAAE,KAAK;AACzC;AAEA,SAAS,kCAAkC,OAAuB;AAChE,SAAO,MAAM,QAAQ,YAAY,EAAE,EAAE,KAAK;AAC5C;AAEA,SAAS,0BAA0B,OAA8B;AAC/D,QAAM,aAAa,6BAA6B,KAAK;AACrD,QAAM,QAAQ,WAAW,MAAM,+CAA+C;AAC9E,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,YAAY,kCAAkC,6BAA6B,MAAM,CAAC,KAAK,EAAE,CAAC;AAChG,QAAM,UAAU,kCAAkC,6BAA6B,MAAM,CAAC,KAAK,EAAE,CAAC;AAC9F,MAAI,UAAU,WAAW,KAAK,QAAQ,WAAW,EAAG,QAAO;AAC3D,SAAO,MAAM,SAAS,SAAS,OAAO;AACxC;AAEA,SAAS,iCAAiC,OAAuB;AAC/D,QAAM,eAAe,0BAA0B,KAAK;AACpD,MAAI,aAAc,QAAO;AACzB,QAAM,aAAa,6BAA6B,KAAK;AACrD,MAAI,WAAW,WAAW,EAAG,QAAO;AACpC,SAAO,SAAS,KAAK,UAAU,IAAI,aAAa,GAAG,UAAU;AAC/D;AAEA,SAAS,6BAA6B,OAAuB;AAC3D,SAAO,iCAAiC,KAAK,EAAE,YAAY;AAC7D;AAEA,SAAS,yBAAyB,SAAiB,OAA8B;AAC/E,MAAI,CAAC,MAAO,QAAO,6BAA6B,OAAO;AACvD,QAAM,SAAS,GAAG,KAAK;AACvB,MAAI,CAAC,QAAQ,WAAW,MAAM,EAAG,QAAO,6BAA6B,OAAO;AAC5E,QAAM,gBAAgB,QAAQ,MAAM,OAAO,MAAM,EAAE,KAAK;AACxD,SAAO,cAAc,SAAS,IAAI,6BAA6B,aAAa,IAAI,6BAA6B,OAAO;AACtH;AAEA,SAAS,4BAA4B,SAAuC;AAC1E,SAAO,0BAA0B,OAAO,IAAI,SAAS;AACvD;AAEA,SAAS,oBAAoB,OAAuB;AAClD,MAAI,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACpC,SAAO,OAAO,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;AAChE;AASO,SAAS,gCACd,QACA,SAC0B;AAC1B,MAAI,YAAY,cAAc;AAC5B,UAAMC,SAAQ;AACd,WAAO;AAAA,MACL,OAAAA;AAAA,MACA,WAAWA,SAAQ;AAAA,MACnB,eAAe;AAAA,IACjB;AAAA,EACF;AACA,QAAM,QAAQ,OAAO,6BAA6B,MAAM;AACxD,SAAO;AAAA,IACL;AAAA,IACA,WAAW,QAAQ;AAAA,IACnB,eAAe,OAAO,6BAA6B,OAAU;AAAA,EAC/D;AACF;AAEA,SAAS,UAAU,GAAiB;AAElC,QAAM,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,eAAe,GAAG,EAAE,YAAY,GAAG,EAAE,WAAW,CAAC,CAAC;AACjF,QAAM,MAAM,GAAG,UAAU,KAAK;AAC9B,KAAG,WAAW,GAAG,WAAW,IAAI,IAAI,GAAG;AACvC,QAAM,YAAY,IAAI,KAAK,KAAK,IAAI,GAAG,eAAe,GAAG,GAAG,CAAC,CAAC;AAC9D,QAAM,OAAO,KAAK,OAAQ,GAAG,QAAQ,IAAI,UAAU,QAAQ,KAAK,QAAY,KAAK,CAAC;AAClF,QAAM,OAAO,GAAG,eAAe;AAC/B,SAAO,GAAG,IAAI,KAAK,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG,CAAC;AAClD;AAEA,SAAS,WAAW,GAAiB;AACnC,SAAO,GAAG,EAAE,eAAe,CAAC,IAAI,OAAO,EAAE,YAAY,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AAC9E;AAEA,SAAS,mBAAmB,QAAwB;AAClD,QAAM,QAAQ,OAAO,MAAM,oBAAoB;AAC/C,MAAI,CAAC,MAAO,QAAO,WAAW,oBAAI,KAAK,CAAC;AACxC,QAAM,OAAO,OAAO,MAAM,CAAC,CAAC;AAC5B,QAAM,OAAO,OAAO,MAAM,CAAC,CAAC;AAC5B,QAAM,OAAO,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC;AAC1C,QAAM,UAAU,KAAK,UAAU,KAAK;AACpC,QAAM,mBAAmB,IAAI,KAAK,IAAI;AACtC,mBAAiB,WAAW,KAAK,WAAW,KAAK,UAAU,EAAE;AAC7D,QAAM,SAAS,IAAI,KAAK,gBAAgB;AACxC,SAAO,WAAW,iBAAiB,WAAW,KAAK,OAAO,KAAK,CAAC;AAChE,SAAO,WAAW,MAAM;AAC1B;AAEA,SAAS,qBAAqB,SAA+D;AAC3F,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO,IAAI,KAAK,KAAK,KAAK;AAAA,IAC5B,KAAK;AACH,aAAO,KAAK,KAAK,KAAK,KAAK;AAAA,IAC7B,KAAK;AACH,aAAO,KAAK,KAAK,KAAK,KAAK;AAAA,IAC7B,KAAK;AACH,aAAO,MAAM,KAAK,KAAK,KAAK;AAAA,IAC9B;AACE,aAAO,KAAK,KAAK,KAAK,KAAK;AAAA,EAC/B;AACF;AAEO,IAAM,oBAAN,MAAwB;AAAA,EAa7B,YACmB,QACA,UAA0B,IAAI,eAAe,OAAO,SAAS,GAC9E;AAFiB;AACA;AAEjB,SAAK,YAAYC,MAAK,KAAK,OAAO,WAAW,eAAe,QAAQ;AACpE,SAAK,aAAaA,MAAK,KAAK,OAAO,WAAW,eAAe,SAAS;AACtE,SAAK,mBAAmBA,MAAK,KAAK,KAAK,YAAY,YAAY;AAC/D,SAAK,mBAAmBA,MAAK,KAAK,KAAK,YAAY,QAAQ;AAC3D,SAAK,sBAAsBA,MAAK,KAAK,KAAK,YAAY,WAAW;AACjE,SAAK,cAAcA,MAAK,KAAK,OAAO,WAAW,eAAe,YAAY;AAC1E,SAAK,eAAeA,MAAK,KAAK,OAAO,WAAW,eAAe,eAAe;AAC9E,SAAK,oBAAoBA,MAAK,KAAK,wBAAwB,MAAM,GAAG,YAAY,aAAa;AAC7F,SAAK,yBAAyBA,MAAK,KAAK,OAAO,WAAW,YAAY,UAAU,QAAQ;AACxF,SAAK,0BAA0BA,MAAK,KAAK,OAAO,WAAW,YAAY,UAAU,SAAS;AAC1F,SAAK,yBAAyBA,MAAK,KAAK,OAAO,WAAW,SAAS,sBAAsB;AAAA,EAC3F;AAAA,EAdmB;AAAA,EACA;AAAA,EAdF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAmBjB,MAAM,aAA4B;AAChC,UAAMC,OAAM,KAAK,WAAW,EAAE,WAAW,KAAK,CAAC;AAC/C,UAAMA,OAAMD,MAAK,QAAQ,KAAK,YAAY,GAAG,EAAE,WAAW,KAAK,CAAC;AAChE,UAAMC,OAAMD,MAAK,QAAQ,KAAK,WAAW,GAAG,EAAE,WAAW,KAAK,CAAC;AAC/D,UAAMC,OAAM,KAAK,YAAY,EAAE,WAAW,KAAK,CAAC;AAChD,UAAMA,OAAM,KAAK,kBAAkB,EAAE,WAAW,KAAK,CAAC;AACtD,UAAMA,OAAM,KAAK,qBAAqB,EAAE,WAAW,KAAK,CAAC;AAAA,EAC3D;AAAA,EAEA,MAAM,iBAAiB,MAUpB;AACD,UAAM,KAAK,WAAW;AACtB,UAAM,SAAS,MAAM,UAAU,UAAU,oBAAI,KAAK,CAAC;AAEnD,UAAM,UAAU,MAAM,KAAK,2BAA2B,MAAM;AAC5D,UAAM,eAAe,MAAM,KAAK,wBAAwB,MAAM;AAC9D,UAAM,iBAAiB,KAAK,2BAA2B,YAAY;AACnE,UAAM,iBAAiB,KAAK,0BAA0B,YAAY;AAClE,UAAM,mBAAmB,MAAM,KAAK,aAAa;AACjD,UAAM,WAAW,KAAK,cAAc,SAAS,gBAAgB,QAAQ,kBAAkB,YAAY,CAAC,CAAC;AACrG,UAAM,UAAU,KAAK,oBAAoB,SAAS,cAAc;AAChE,QAAI,sBAAsB,KAAK,OAAO,6BAClC,KAAK,0BAA0B,gBAAgB,SAAS,UAAU,OAAO,IACzE,CAAC;AACL,QAAI,KAAK,OAAO,yBAAyB;AACvC,UAAI;AACF,cAAM,EAAE,iCAAiC,oCAAoC,IAAI,MAAM,OAAO,2BAA4B;AAC1H,cAAM,mBAAmB,MAAM,gCAAgC;AAAA,UAC7D,WAAW,KAAK,OAAO;AAAA,UACvB,0BAA0B,KAAK,OAAO;AAAA,UACtC,eAAe,KAAK,OAAO;AAAA,UAC3B,gBAAgB,KAAK,OAAO,gBAAgB,YAAa,KAAK,OAAO,kBAAkB,SAAa;AAAA,UACpG,cAAc,KAAK,OAAO;AAAA,UAC1B,cAAc,KAAK;AAAA,UACnB,QAAQ;AAAA,YACN,eAAe,KAAK,OAAO;AAAA,YAC3B,aAAa,KAAK,OAAO;AAAA,YACzB,kBAAkB,KAAK,OAAO;AAAA,UAChC;AAAA,QACF,CAAC;AACD,YAAI,iBAAiB,SAAS,GAAG;AAC/B,gCAAsB,CAAC,GAAG,qBAAqB,GAAG,gBAAgB;AAAA,QACpE;AAQA,YAAI;AACF,gBAAM,oCAAoC;AAAA,YACxC,QAAQ,KAAK;AAAA,YACb,WAAW,KAAK,OAAO;AAAA,UACzB,CAAC;AAAA,QACH,SAAS,kBAAkB;AACzB,cAAI;AAAA,YACF,yDACE,4BAA4B,QAAQ,iBAAiB,UAAU,OAAO,gBAAgB,CACxF;AAAA,UACF;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,YAAI,KAAK,sEAAsE,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,MACzI;AAAA,IACF;AAEA,QAAI,KAAK,OAAO,oBAAoB;AAClC,UAAI;AACF,cAAM,EAAE,4BAA4B,IAAI,MAAM,OAAO,kBAAmB;AACxE,cAAM,WAAW,MAAM,4BAA4B;AAAA,UACjD,WAAW,KAAK,OAAO;AAAA,UACvB,eAAe,KAAK,OAAO;AAAA,UAC3B,gBAAgB,KAAK,OAAO,gBAAgB,YAAa,KAAK,OAAO,kBAAkB,SAAa;AAAA,UACpG,cAAc,KAAK,OAAO;AAAA,QAC5B,CAAC;AACD,YAAI,MAAM,2CAA2C,SAAS,MAAM,sBAAsB;AAAA,MAC5F,SAAS,OAAO;AACd,YAAI,KAAK,0DAA0D,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,MAC7H;AAAA,IACF;AACA,UAAM,aAAa,KAAK,OAAO,yBAC3B,MAAM,KAAK,8BAA8B,MAAM,IAC/C,EAAE,SAAS,mBAAmB,MAAM,GAAG,YAAY,MAAM,aAAa,KAAK;AAG/E,UAAM,aAAaD,MAAK,KAAK,KAAK,WAAW,GAAG,MAAM,KAAK;AAC3D,UAAM,KAAK,KAAK,mBAAmB,QAAQ,SAAS,SAAS,UAAU,SAAS,SAAS,YAAY,gBAAgB,mBAAmB;AACxI,UAAME,WAAU,YAAY,IAAI,OAAO;AAEvC,UAAM,iBAAiBF,MAAK,KAAK,KAAK,WAAW,GAAG,MAAM,OAAO;AACjE,UAAM,iBAA4C;AAAA,MAChD,SAAS;AAAA,MACT,aAAa,SAAS;AAAA,MACtB;AAAA,MACA,UAAU;AAAA,QACR,OAAO,QAAQ;AAAA,QACf,YAAY;AAAA,UACV,UAAU,QAAQ,OAAO,CAAC,YAAY,QAAQ,MAAM,aAAa,UAAU,EAAE;AAAA,UAC7E,wBAAwB,QAAQ,OAAO,CAAC,YAAY,QAAQ,MAAM,aAAa,wBAAwB,EAAE;AAAA,UACzG,UAAU,QAAQ,OAAO,CAAC,YAAY,QAAQ,MAAM,aAAa,UAAU,EAAE;AAAA,QAC/E;AAAA,QACA,SAAS,QAAQ,IAAI,CAAC,aAAa;AAAA,UACjC,OAAO,QAAQ,MAAM;AAAA,UACrB,UAAU,QAAQ,MAAM,YAAY;AAAA,UACpC,UAAU,QAAQ,MAAM;AAAA,UACxB,QAAQ,QAAQ,MAAM;AAAA,UACtB,UAAU,QAAQ,MAAM,UAAU,KAAK,KAAK;AAAA,UAC5C,SAAS,QAAQ,MAAM,SAAS,KAAK,KAAK;AAAA,UAC1C,UAAU,QAAQ,MAAM,YAAY;AAAA,UACpC,YAAY,oBAAoB,QAAQ,MAAM,UAAU;AAAA,UACxD,MAAM,cAAc,QAAQ,MAAM,IAAI;AAAA,UACtC,YAAY,GAAGA,MAAK,SAAS,QAAQ,UAAU,CAAC,KAAK,QAAQ,UAAU,IAAI,QAAQ,OAAO;AAAA,UAC1F,gBAAgB,wBAAwB,QAAQ,MAAM,qBAAqB,QAAQ,MAAM,iBAAiB;AAAA,QAC5G,EAAE;AAAA,MACJ;AAAA,MACA,UAAU;AAAA,QACR,OAAO,SAAS,SAAS;AAAA,QACzB,UAAU,SAAS;AAAA,QACnB,UAAU,SAAS;AAAA,MACrB;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA;AAAA,IACF;AACA,UAAME,WAAU,gBAAgB,KAAK,UAAU,gBAAgB,MAAM,CAAC,IAAI,MAAM,OAAO;AAGvF,UAAM,kBAAkB,KAAK,cAAc,gBAAgB,OAAO;AAClE,UAAMA,WAAU,KAAK,aAAa,iBAAiB,OAAO;AAC1D,UAAMA,WAAU,KAAK,kBAAkB,KAAK,UAAU,SAAS,MAAM,CAAC,IAAI,MAAM,OAAO;AACvF,UAAM,KAAK,oBAAoB,OAAO;AAGtC,UAAMA;AAAA,MACJ,KAAK;AAAA,MACL,KAAK,UAAU;AAAA,QACb,SAAS;AAAA,QACT,WAAW,SAAS;AAAA,QACpB,UAAU,SAAS;AAAA,QACnB,UAAU,SAAS;AAAA,MACrB,GAAG,MAAM,CAAC,IAAI;AAAA,MACd;AAAA,IACF;AAEA,QAAI;AAAA,MACF,6BAA6B,UAAU,eAAe,cAAc,YAAY,KAAK,WAAW,iBAAiB,KAAK,gBAAgB,aAAa,KAAK,YAAY;AAAA,IACtK;AACA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,KAAK;AAAA,MAClB,kBAAkB,KAAK;AAAA,MACvB,eAAe,SAAS,SAAS;AAAA,MACjC,yBAAyB,oBAAoB;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,MAKiB;AACtC,UAAM,SAAqC;AAAA,MACzC,SAAS,KAAK,OAAO,uBAAuB,QAAQ,KAAK,OAAO,+BAA+B;AAAA,MAC/F,QAAQ,KAAK,WAAW;AAAA,MACxB,QAAQ,KAAK;AAAA,MACb,UAAU,CAAC;AAAA,MACX,SAAS,CAAC;AAAA,IACZ;AACA,QAAI,CAAC,OAAO,SAAS;AACnB,aAAO,QAAQ,KAAK,EAAE,QAAQ,KAAK,QAAQ,aAAa,KAAK,aAAa,QAAQ,WAAW,CAAC;AAC9F,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,MAAM,KAAK,mBAAmB,KAAK,MAAM;AAC1D,QAAI,CAAC,UAAU;AACb,aAAO,QAAQ,KAAK,EAAE,QAAQ,KAAK,QAAQ,aAAa,KAAK,aAAa,QAAQ,0BAA0B,CAAC;AAC7G,aAAO;AAAA,IACT;AAEA,UAAM,YAAY,SAAS,oBAAoB,KAAK,CAAC,UAAU,MAAM,OAAO,KAAK,WAAW;AAC5F,QAAI,CAAC,WAAW;AACd,aAAO,QAAQ,KAAK,EAAE,QAAQ,KAAK,QAAQ,aAAa,KAAK,aAAa,QAAQ,sBAAsB,CAAC;AACzG,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,iCAAiC,UAAU,OAAO;AAClE,UAAM,mBAAmB,sBAAsB,OAAO,EAAE;AACxD,UAAM,UAAU,KAAK,WAAW,IAAI,eAAe,KAAK,OAAO,SAAS;AACxE,UAAM,YAAY,MAAM,QAAQ,gBAAgB,GAAG;AAAA,MAAK,CAAC,WACvD,OAAO,YAAY,aAAa,UAAU,YAC1C,OAAO,YAAY,WAAW,cAC9B,OAAO,YAAY,WAAW,eAC9B,6BAA6B,OAAO,OAAO,MAAM,6BAA6B,gBAAgB;AAAA,IAChG;AACA,QAAI,UAAU;AACZ,aAAO,QAAQ,KAAK;AAAA,QAClB,QAAQ,KAAK;AAAA,QACb,aAAa,KAAK;AAAA,QAClB,QAAQ;AAAA,QACR,kBAAkB,SAAS,YAAY;AAAA,MACzC,CAAC;AACD,aAAO;AAAA,IACT;AAEA,UAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA,sBAAsB,UAAU,UAAU;AAAA,MAC1C,GAAI,UAAU,QAAQ,CAAC,SAAS,WAAW,UAAU,KAAK,CAAC,EAAE,IAAI,CAAC;AAAA,MAClE,GAAI,UAAU,WAAW,CAAC,YAAY,WAAW,UAAU,QAAQ,CAAC,EAAE,IAAI,CAAC;AAAA,IAC7E;AACA,UAAM,aAAa,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC;AACpC,UAAM,UAAU,CAAC,eAAe,KAAK,MAAM,IAAI,KAAK,WAAW,EAAE;AACjE,UAAM,aAAa,oBAAoB,UAAU,KAAK;AAEtD,QAAI,KAAK,WAAW,MAAM;AACxB,aAAO,SAAS,KAAK;AAAA,QACnB,IAAI,WAAW,KAAK,MAAM,IAAI,KAAK,WAAW;AAAA,QAC9C,aAAa,KAAK;AAAA,QAClB,UAAU,UAAU;AAAA,QACpB,SAAS;AAAA,QACT;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AAEA,UAAM,KAAK,MAAM,QAAQ,YAAY,UAAU,UAAU,kBAAkB;AAAA,MACzE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AACD,WAAO,SAAS,KAAK;AAAA,MACnB;AAAA,MACA,aAAa,KAAK;AAAA,MAClB,UAAU,UAAU;AAAA,MACpB,SAAS;AAAA,MACT;AAAA,MACA,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,0BAA0B,MAG+C;AAC7E,UAAM,SAAS,MAAM,WAAW,YAAY,YAAY;AACxD,UAAM,MAAM,MAAM,KAAK,KAAK,MAAM,WAAW,WAAW,UAAU,oBAAI,KAAK,CAAC,IAAI,WAAW,oBAAI,KAAK,CAAC;AACrG,UAAM,UAAS,oBAAI,KAAK,GAAE,YAAY;AACtC,UAAM,CAAC,gBAAgB,qBAAqB,eAAe,iBAAiB,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,MACxG,KAAK,mCAAmC;AAAA,MACxC,KAAK,qCAAqC;AAAA,MAC1C,KAAK,gCAAgC,KAAK,MAAM;AAAA,MAChD,KAAK,gCAAgC,KAAK,QAAQ;AAAA,MAClD,KAAK,aAAa;AAAA,IACpB,CAAC;AACD,UAAM,iBAAiB,kBAAkB,IAAI,KAAK,EAAE,SAAS;AAC7D,UAAM,mBAAmB,sBAAsB,gCAAgC,mBAAmB,IAAI,CAAC;AACvG,UAAM,cAAc,iBAAiB,OAAO,CAAC,SAAS,KAAK,WAAW,QAAQ;AAC9E,UAAM,mBAAmB,YAAY,OAAO,CAAC,SAAS;AACpD,YAAM,aAAa,KAAK,MAAM,KAAK,YAAY;AAC/C,UAAI,CAAC,OAAO,SAAS,UAAU,EAAG,QAAO;AACzC,aAAO,KAAK,IAAI,IAAI,aAAa,qBAAqB,KAAK,OAAO;AAAA,IACpE,CAAC;AACD,UAAM,sBAAgC,CAAC;AACvC,QAAI,CAAC,eAAe;AAClB,0BAAoB,KAAK,4EAA4E;AAAA,IACvG;AACA,QAAI,cAAc,SAAS,GAAG;AAC5B,0BAAoB;AAAA,QAClB,sBAAsB,cAAc,MAAM,4BAA4B,cAAc,WAAW,IAAI,KAAK,GAAG;AAAA,MAC7G;AAAA,IACF;AACA,QAAI,iBAAiB,WAAW,GAAG;AACjC,0BAAoB,KAAK,oFAAoF;AAAA,IAC/G,WAAW,iBAAiB,SAAS,GAAG;AACtC,0BAAoB;AAAA,QAClB,sCAAsC,iBAAiB,WAAW,IAAI,KAAK,GAAG,KAAK,iBAChF,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,SAAS,KAAK,EAAE,EACrB,KAAK,IAAI,CAAC;AAAA,MACf;AAAA,IACF;AACA,SAAK,UAAU,SAAS,UAAU,KAAK,GAAG;AACxC,0BAAoB,KAAK,6FAA6F;AAAA,IACxH;AACA,UAAM,aAAa,oBAAoB,CAAC,KAAK;AAE7C,UAAM,QAAkB;AAAA,MACtB,6BAAwB,MAAM,IAAI,GAAG;AAAA,MACrC;AAAA,MACA,cAAc,MAAM;AAAA,MACpB,UAAU,MAAM;AAAA,MAChB;AAAA,MACA;AAAA,MACA,8BAA8B,gBAAgB,QAAQ,IAAI;AAAA,MAC1D,gCAAgC,iBAAiB,MAAM;AAAA,MACvD,+BAA+B,YAAY,MAAM;AAAA,MACjD,yBAAyB,iBAAiB,MAAM;AAAA,MAChD,qBAAqB,cAAc,MAAM;AAAA,MACzC,uBAAuB,gBAAgB,MAAM;AAAA,MAC7C,mCAAmC,UAAU,SAAS,UAAU,CAAC;AAAA,MACjE;AAAA,MACA;AAAA,MACA,4BAA4B,gBAAgB,SAAS,iBAAiB;AAAA,MACtE,uBAAuB,cAAc,WAAW,IAAI,SAAS,iBAAiB;AAAA,MAC9E,gCAAgC,iBAAiB,SAAS,IAAI,SAAS,iBAAiB;AAAA,MACxF,iCAAiC,iBAAiB,WAAW,IAAI,SAAS,iBAAiB;AAAA,MAC3F;AAAA,MACA;AAAA,MACA,+CAA+C,cAAc,SAAS,IAAI,aAAa,eAAe;AAAA,MACtG,oCAAoC,iBAAiB,SAAS,IAAI,iBAAiB,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,IAAI,IAAI,eAAe;AAAA,MAChI,mDACE,gBAAgB,KAAK,CAAC,OAAO,EAAE,kBAAkB,IAAI,KAAK,EAAE,SAAS,CAAC,IAAI,YAAY,cACxF;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA,GAAI,cAAc,SAAS,IAAI,cAAc,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU;AAAA,MAC/F;AAAA,IACF;AAEA,UAAM,aAAa,MAAM,KAAK,QAAQ,mBAAmB,QAAQ,KAAK,MAAM,KAAK,IAAI,CAAC;AACtF,WAAO,EAAE,QAAQ,KAAK,WAAW;AAAA,EACnC;AAAA,EAEA,MAAM,eAA6C;AACjD,QAAI;AACF,YAAM,MAAM,MAAMC,UAAS,KAAK,cAAc,OAAO;AACrD,YAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,UAAI,CAAC,UAAU,CAAC,MAAM,QAAQ,OAAO,QAAQ,EAAG,QAAO;AACvD,UAAI,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG;AACnC,cAAM,YAAY,OAAO,OAAO,cAAc,YAAY,OAAO,UAAU,SAAS,IAChF,OAAO,aACP,oBAAI,KAAK,CAAC,GAAE,YAAY;AAC5B,eAAO,WAAW,OAAO,SAAS,IAAI,CAAC,YAAY;AACjD,gBAAM,WAAW,2BAA2B,OAAO;AACnD,iBAAO;AAAA,YACL,IAAI,gBAAgB,SAAS,UAAU,SAAS,SAAS,OAAO,SAAS,QAAQ;AAAA,YACjF;AAAA,YACA,UAAU,SAAS;AAAA,YACnB,QAAQ;AAAA,YACR,OAAO,SAAS;AAAA,YAChB,UAAU,SAAS;AAAA,YACnB,MAAM,CAAC;AAAA,YACP,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,SAAS;AAAA,YACT,YAAY,CAAC;AAAA,YACb,aAAa;AAAA,YACb,YAAY;AAAA,YACZ,iBAAiB;AAAA,YACjB,YAAY,UAAU,IAAI,KAAK,SAAS,CAAC;AAAA,YACzC,gBAAgB,EAAE,OAAO,MAAM,KAAK,KAAK;AAAA,UAC3C;AAAA,QACF,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,cAA8C;AAClD,QAAI;AACF,YAAM,MAAM,MAAMA,UAAS,KAAK,kBAAkB,OAAO;AACzD,YAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,UAAI,CAAC,UAAU,CAAC,MAAM,QAAQ,OAAO,MAAM,KAAK,CAAC,MAAM,QAAQ,OAAO,SAAS,EAAG,QAAO;AACzF,aAAO,SAAS,OAAO,OAAO,IAAI,CAAC,UAAU,KAAK,qBAAqB,KAAK,CAAC;AAC7E,aAAO,YAAY,OAAO,UAAU,IAAI,CAAC,UAAU,KAAK,qBAAqB,KAAK,CAAC;AACnF,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,QAA2D;AAClF,QAAI;AACF,YAAM,MAAM,MAAMA,UAASH,MAAK,KAAK,KAAK,WAAW,GAAG,MAAM,OAAO,GAAG,OAAO;AAC/E,YAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,UACE,CAAC,UACD,OAAO,WAAW,UAClB,CAAC,MAAM,QAAQ,OAAO,mBAAmB,GACzC;AACA,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,OACA,MACwB;AACxB,UAAM,CAAC,UAAU,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC5C,KAAK,aAAa;AAAA,MAClB,KAAK,YAAY;AAAA,IACnB,CAAC;AACD,UAAM,cAAc,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,eAAe,EAAE,CAAC;AACnE,UAAM,aAAa,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,cAAc,CAAC,CAAC;AAChE,UAAM,cAAc,oBAAoB,KAAK;AAE7C,UAAM,kBAAkB,UAAU,YAAY,CAAC,GAC5C,OAAO,CAAC,UAAU,MAAM,WAAW,QAAQ,EAC3C;AAAA,MAAK,CAAC,GAAG,MACR,EAAE,kBAAkB,EAAE,mBACtB,EAAE,WAAW,cAAc,EAAE,UAAU,KACvC,EAAE,QAAQ,cAAc,EAAE,OAAO;AAAA,IACnC;AACF,UAAM,cAAc,eAAe,MAAM,GAAG,WAAW;AAEvD,UAAM,aAAa;AAAA,MACjB,GAAI,SAAS,aAAa,CAAC;AAAA,MAC3B,GAAI,SAAS,UAAU,CAAC;AAAA,IAC1B;AACA,UAAM,gBAAgB,WACnB,IAAI,CAAC,WAAW;AAAA,MACf;AAAA,MACA,OAAO,KAAK,oBAAoB,OAAO,WAAW;AAAA,IACpD,EAAE,EACD;AAAA,MAAK,CAAC,GAAG,MACR,EAAE,QAAQ,EAAE,SACZ,EAAE,MAAM,aAAa,SAAS,EAAE,MAAM,aAAa,UACnD,EAAE,MAAM,QAAQ,cAAc,EAAE,MAAM,OAAO;AAAA,IAC/C;AACF,UAAM,aAAa,cAChB,OAAO,CAAC,SAAS,KAAK,QAAQ,KAAK,YAAY,WAAW,CAAC,EAC3D,MAAM,GAAG,UAAU,EACnB,IAAI,CAAC,SAAS,KAAK,KAAK;AAE3B,QAAI,YAAY,WAAW,KAAK,WAAW,WAAW,EAAG,QAAO;AAEhE,UAAM,QAAkB;AAAA,MACtB;AAAA,MACA;AAAA,IACF;AAEA,QAAI,YAAY,SAAS,GAAG;AAC1B,YAAM,KAAK,iCAAiC;AAC5C,iBAAW,SAAS,aAAa;AAC/B,cAAM,QAAQ,MAAM,YAAY,MAAM,SAAS;AAC/C,cAAM,WAAW,CAAC,cAAc,MAAM,eAAe,EAAE;AACvD,YAAI,MAAO,UAAS,KAAK,SAAS,KAAK,EAAE;AACzC,cAAM,KAAK,KAAK,MAAM,OAAO,MAAM,SAAS,KAAK,IAAI,CAAC,IAAI;AAAA,MAC5D;AACA,YAAM,KAAK,EAAE;AAAA,IACf;AAEA,QAAI,WAAW,SAAS,GAAG;AACzB,YAAM,KAAK,iBAAiB;AAC5B,iBAAW,UAAU,YAAY;AAC/B,cAAM,QAAQ,OAAO,aAAa,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI;AACvD,cAAM,KAAK,KAAK,OAAO,IAAI,IAAI,OAAO,OAAO,KAAK,KAAK,EAAE;AAAA,MAC3D;AAAA,IACF;AAEA,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AAAA,EAEA,yBAAyB,SAA8D;AACrF,WAAO,gCAAgC,KAAK,QAAQ,OAAO;AAAA,EAC7D;AAAA,EAEA,MAAc,2BAA2B,QAAwD;AAG/F,UAAM,MAAqC,CAAC;AAC5C,QAAI;AACF,YAAM,MAAM,MAAMG,UAAS,KAAK,mBAAmB,OAAO;AAC1D,YAAM,QAAQ,IAAI,MAAM,IAAI;AAC5B,eAAS,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO,GAAG;AAC9C,cAAM,OAAO,MAAM,GAAG;AACtB,YAAI,CAAC,KAAK,KAAK,EAAG;AAClB,YAAI;AACF,gBAAM,MAAM,KAAK,MAAM,IAAI;AAC3B,gBAAM,SAAS,0BAA0B,UAAU,GAAG;AACtD,cAAI,CAAC,OAAO,QAAS;AACrB,gBAAM,IAAI,IAAI,KAAK,OAAO,KAAK,IAAI;AACnC,cAAI,CAAC,OAAO,SAAS,EAAE,QAAQ,CAAC,EAAG;AACnC,cAAI,UAAU,CAAC,MAAM,OAAQ;AAC7B,gBAAM,aAAa,MAAM;AACzB,cAAI,KAAK;AAAA,YACP,OAAO,OAAO;AAAA,YACd;AAAA,YACA,YAAY,KAAK;AAAA,YACjB,SAAS,GAAG,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,IAAI,IAAI,UAAU,GAAG,QAAQ,qBAAqB,GAAG;AAAA,UACpG,CAAC;AAAA,QACH,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,2BAA2B,QAAuC;AACxE,UAAM,MAAgB,CAAC;AACvB,eAAW,SAAS,QAAQ;AAC1B,YAAM,SAAS,MAAM,YAAY,YAAY,MAAM,YAAY;AAC/D,UAAI,CAAC,UAAU,MAAM,mBAAmB,KAAM;AAC9C,YAAM,SAAS,MAAM,UAAU,MAAM,OAAO,KAAK,EAAE,SAAS,IACxD,MAAM,MAAM,OAAO,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,KACvC;AACJ,UAAI;AAAA,QACF,iBAAiB,MAAM,SAAS,KAAK,MAAM,MAAM,IAAI,MAAM,OAAO,GAAG,MAAM,iBAAiB,IAAI,MAAM,cAAc,KAAK,EAAE,GAAG,MAAM;AAAA,MACtI;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,wBAAwB,QAA8C;AAClF,UAAM,MAA2B,CAAC;AAClC,UAAM,OAAO,MAAM,KAAK,QAAQ,0BAA0B,OAAO,gBAAgB;AACjF,eAAW,OAAO,MAAM;AACtB,YAAM,QAAQ,IAAI;AAClB,YAAM,KAAK,IAAI,KAAK,MAAM,SAAS;AACnC,UAAI,CAAC,OAAO,SAAS,GAAG,QAAQ,CAAC,KAAK,UAAU,EAAE,MAAM,OAAQ;AAChE,UAAI,KAAK;AAAA,QACP,MAAM,IAAI;AAAA,QACV,QAAQ,MAAM;AAAA,QACd,SAAS,MAAM;AAAA,QACf,gBAAgB,MAAM,mBAAmB,UAAU,MAAM,mBAAmB,UACxE,MAAM,iBACN;AAAA,QACJ,WAAW,OAAO,MAAM,cAAc,YAAY,MAAM,UAAU,SAAS,IAAI,MAAM,YAAY;AAAA,QACjG,QAAQ,OAAO,MAAM,WAAW,WAAW,MAAM,SAAS;AAAA,MAC5D,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,0BAA0B,QAAqD;AACrF,UAAM,WAAW,oBAAI,IAAsE;AAC3F,eAAW,SAAS,QAAQ;AAC1B,YAAM,MAAM,MAAM;AAClB,YAAM,MAAM,SAAS,IAAI,GAAG,KAAK;AAAA,QAC/B,QAAQ,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,EAAE;AAAA,QAC5C,YAAY,oBAAI,IAAY;AAAA,MAC9B;AACA,UAAI,MAAM,YAAY,UAAW,KAAI,OAAO,WAAW;AAAA,eAC9C,MAAM,YAAY,UAAW,KAAI,OAAO,WAAW;AAAA,UACvD,KAAI,OAAO,UAAU;AAC1B,UAAI,WAAW,IAAI,GAAGH,MAAK,SAAS,KAAK,sBAAsB,CAAC,KAAK,MAAM,IAAI,EAAE;AACjF,eAAS,IAAI,KAAK,GAAG;AAAA,IACvB;AAEA,UAAM,MAA8B,CAAC;AACrC,eAAW,CAAC,QAAQ,IAAI,KAAK,SAAS,QAAQ,GAAG;AAC/C,YAAM,QAAQ,KAAK,OAAO,UAAU,KAAK,OAAO,UAAU,KAAK,OAAO;AACtE,UAAI,SAAS,EAAG;AAEhB,YAAM,gBAAgB,SAAU,KAAK,OAAO,UAAU,IAAM,KAAK,OAAO,UAAU,MAAQ,KAAK,OAAO,SAAS,OAAQ,OAAO,QAAQ,CAAC,CAAC;AACxI,UAAI,KAAK;AAAA,QACP;AAAA,QACA,QAAQ,KAAK;AAAA,QACb;AAAA,QACA;AAAA,QACA,YAAY,CAAC,GAAG,KAAK,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;AAAA,MACpD,CAAC;AAAA,IACH;AACA,QAAI,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,OAAO,cAAc,EAAE,MAAM,CAAC;AAC7G,WAAO;AAAA,EACT;AAAA,EAEQ,0BACN,SACA,UACA,SACsB;AACtB,UAAM,UAAU,oBAAI,IAAgC;AACpD,UAAM,SAAS,CAAC,cAAkC;AAChD,YAAM,MAAM,GAAG,UAAU,QAAQ,IAAI,6BAA6B,UAAU,OAAO,CAAC;AACpF,YAAM,WAAW,QAAQ,IAAI,GAAG;AAChC,UAAI,CAAC,UAAU;AACb,gBAAQ,IAAI,KAAK,SAAS;AAC1B;AAAA,MACF;AACA,YAAM,mBAAmB,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,SAAS,YAAY,GAAG,UAAU,UAAU,CAAC,CAAC;AACvF,UAAI,UAAU,QAAQ,SAAS,OAAO;AACpC,gBAAQ,IAAI,KAAK;AAAA,UACf,GAAG;AAAA,UACH,YAAY;AAAA,QACd,CAAC;AACD;AAAA,MACF;AACA,eAAS,aAAa;AAAA,IACxB;AAEA,eAAW,QAAQ,SAAS;AAC1B,UAAI,KAAK,QAAQ,EAAG;AACpB,UAAI,KAAK,gBAAgB,IAAK;AAC9B,YAAM,UAAU;AAAA,QACd,UAAU,KAAK,MAAM,qEAAqE,KAAK,OAAO,OAAO,aAAa,KAAK,OAAO,OAAO,YAAY,KAAK,OAAO,MAAM;AAAA,MAC7K;AACA,aAAO;AAAA,QACL,IAAI,2BAA2B,kBAAkB,KAAK,QAAQ,OAAO;AAAA,QACrE,YAAY;AAAA,QACZ,SAAS,KAAK;AAAA,QACd,UAAU,4BAA4B,OAAO;AAAA,QAC7C;AAAA,QACA,OAAO,KAAK;AAAA,QACZ,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,YAAY,KAAK;AAAA,QACjB,OAAO;AAAA,QACP,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAEA,eAAW,SAAS,UAAU;AAC5B,UAAI,MAAM,WAAW,SAAU;AAC/B,UAAI,MAAM,kBAAkB,EAAG;AAC/B,YAAM,UAAU,iCAAiC,yBAAyB,MAAM,SAAS,MAAM,KAAK,CAAC;AACrG,UAAI,QAAQ,WAAW,EAAG;AAC1B,YAAM,aAAa,MAAM,cAAc;AACvC,YAAM,QAAQ,OAAO,KAAK,IAAI,MAAM,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC,IAAI,OAAO,aAAa,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpH,aAAO;AAAA,QACL,IAAI,2BAA2B,mBAAmB,MAAM,IAAI,OAAO;AAAA,QACnE,YAAY;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,UAAU,4BAA4B,OAAO;AAAA,QAC7C;AAAA,QACA;AAAA,QACA,WAAW,uCAAuC,MAAM,eAAe;AAAA,QACvE,SAAS;AAAA,QACT,YAAY,MAAM,WAAW,SAAS,IAAI,MAAM,aAAa,CAAC,iBAAiB,MAAM,EAAE,EAAE;AAAA,QACzF,OAAO,MAAM;AAAA,QACb,UAAU,MAAM;AAAA,MAClB,CAAC;AAAA,IACH;AAEA,eAAW,UAAU,CAAC,GAAG,QAAQ,WAAW,GAAG,QAAQ,MAAM,GAAG;AAC9D,iBAAW,eAAe,KAAK,4BAA4B,MAAM,GAAG;AAClE,YAAI,KAAK,oCAAoC,YAAY,IAAI,EAAG;AAChE,cAAM,gBAAgB,YAAY,WAAW;AAC7C,YAAI,gBAAgB,EAAG;AACvB,cAAM,UAAU,iCAAiC,YAAY,IAAI;AACjE,YAAI,QAAQ,WAAW,EAAG;AAC1B,cAAM,QAAQ,OAAO,KAAK,IAAI,MAAM,MAAM,KAAK,IAAI,eAAe,CAAC,IAAI,IAAI,EAAE,QAAQ,CAAC,CAAC;AACvF,eAAO;AAAA,UACL,IAAI,2BAA2B,UAAU,GAAG,OAAO,EAAE,IAAI,YAAY,IAAI,IAAI,OAAO;AAAA,UACpF,YAAY;AAAA,UACZ,SAAS,GAAG,OAAO,IAAI,IAAI,OAAO,OAAO;AAAA,UACzC,UAAU,4BAA4B,OAAO;AAAA,UAC7C;AAAA,UACA;AAAA,UACA,WAAW,mCAAmC,aAAa;AAAA,UAC3D,SAAS;AAAA,UACT,YAAY,YAAY;AAAA,UACxB,OAAO,OAAO,SAAS,UAAU,OAAO,UAAU;AAAA,UAClD,UAAU,OAAO,SAAS,aAAa,OAAO,UAAU;AAAA,QAC1D,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,CAAC,GAAG,QAAQ,OAAO,CAAC,EACxB,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,cAAc,EAAE,OAAO,CAAC,EACtE,MAAM,GAAG,EAAE;AAAA,EAChB;AAAA,EAEQ,cACN,SACA,iBAA2B,CAAC,GAC5B,QACA,mBAA2C,CAAC,GAC2C;AACvF,UAAM,WAAoC,CAAC;AAC3C,UAAM,oBAAoB,oBAAI,IAU3B;AAEH,eAAW,WAAW,SAAS;AAC7B,YAAM,IAAI,QAAQ;AAClB,YAAM,UAAU,EAAE,YAAY,EAAE,SAAS,KAAK,EAAE,SAAS,IACrD,GAAG,EAAE,KAAK,KAAK,EAAE,SAAS,KAAK,CAAC,KAChC,EAAE,aAAa,aACb,GAAG,EAAE,KAAK,KAAK,EAAE,OAAO,KAAK,CAAC,GAAG,MAAM,GAAG,GAAG,IAC7C;AACN,UAAI,CAAC,QAAS;AACd,YAAM,aAAa,CAAC,GAAGA,MAAK,SAAS,QAAQ,UAAU,CAAC,KAAK,QAAQ,UAAU,IAAI,QAAQ,OAAO,EAAE;AACpG,eAAS,KAAK,EAAE,SAAS,WAAW,CAAC;AAErC,YAAM,WAAW,kBAAkB,IAAI,OAAO,KAAK;AAAA,QACjD,UAAU;AAAA,QACV,OAAO,EAAE;AAAA,QACT,UAAU,EAAE,YAAY;AAAA,QACxB,MAAM,oBAAI,IAAY;AAAA,QACtB,UAAU,EAAE,YAAY;AAAA,QACxB,YAAY,oBAAoB,EAAE,UAAU;AAAA,QAC5C,SAAS,EAAE,SAAS,KAAK,KAAK;AAAA,QAC9B,YAAY,CAAC;AAAA,QACb,gBAAgB,wBAAwB,EAAE,qBAAqB,EAAE,iBAAiB;AAAA,MACpF;AACA,iBAAW,OAAO,cAAc,EAAE,IAAI,EAAG,UAAS,KAAK,IAAI,GAAG;AAC9D,eAAS,WAAW,KAAK,EAAE,IAAI;AAC/B,UAAI,SAAS,aAAa,QAAQ,EAAE,SAAU,UAAS,WAAW,EAAE;AACpE,UAAI,SAAS,aAAa,QAAQ,EAAE,SAAU,UAAS,WAAW,EAAE;AACpE,UAAI,SAAS,eAAe,KAAM,UAAS,aAAa,oBAAoB,EAAE,UAAU;AACxF,UAAI,SAAS,YAAY,QAAQ,EAAE,QAAS,UAAS,UAAU,EAAE,QAAQ,KAAK;AAC9E,YAAM,qBAAqB,wBAAwB,EAAE,qBAAqB,EAAE,iBAAiB;AAC7F,eAAS,iBAAiB,qBAAqB,SAAS,gBAAgB,kBAAkB;AAC1F,wBAAkB,IAAI,SAAS,QAAQ;AAAA,IACzC;AAEA,eAAW,WAAW,gBAAgB;AACpC,eAAS,KAAK,EAAE,SAAS,YAAY,CAAC,GAAGA,MAAK,SAAS,KAAK,sBAAsB,CAAC,IAAI,EAAE,CAAC;AAC1F,YAAM,WAAW,kBAAkB,IAAI,OAAO,KAAK;AAAA,QACjD,UAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU;AAAA,QACV,MAAM,oBAAI,IAAY;AAAA,QACtB,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,YAAY,CAAC;AAAA,QACb,gBAAgB,EAAE,OAAO,MAAM,KAAK,KAAK;AAAA,MAC3C;AACA,wBAAkB,IAAI,SAAS,QAAQ;AAAA,IACzC;AAEA,UAAM,YAAY,oBAAI,IAAyB;AAC/C,eAAW,QAAQ,UAAU;AAC3B,YAAM,WAAW,UAAU,IAAI,KAAK,OAAO,KAAK,oBAAI,IAAY;AAChE,iBAAW,cAAc,KAAK,WAAY,UAAS,IAAI,UAAU;AACjE,gBAAU,IAAI,KAAK,SAAS,QAAQ;AAAA,IACtC;AAEA,UAAM,UAAU,CAAC,GAAG,UAAU,QAAQ,CAAC,EACpC,IAAI,CAAC,CAAC,SAAS,UAAU,OAAO,EAAE,SAAS,YAAY,CAAC,GAAG,UAAU,EAAE,KAAK,EAAE,EAAE,EAChF,MAAM,GAAG,GAAG;AACf,UAAM,eAAe,IAAI,IAAI,iBAAiB,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;AAC/E,UAAM,oBAAoB,IAAI,IAAI,iBAAiB,IAAI,CAAC,UAAU,CAAC,MAAM,SAAS,KAAK,CAAC,CAAC;AACzF,UAAM,WAAmC,QAAQ,IAAI,CAAC,WAAW;AAC/D,YAAM,WAAW,kBAAkB,IAAI,OAAO,OAAO;AACrD,YAAM,KAAK;AAAA,QACT,UAAU,YAAY;AAAA,QACtB,OAAO;AAAA,QACP,UAAU,SAAS;AAAA,QACnB,UAAU,YAAY;AAAA,MACxB;AACA,YAAM,WAAW,aAAa,IAAI,EAAE,KAAK,kBAAkB,IAAI,OAAO,OAAO;AAC7E,YAAM,cAAc,UAAU,cAAc,CAAC,GAAG,OAAO,CAAC,UAAU,OAAO,UAAU,YAAY,MAAM,SAAS,CAAC,EAAE,KAAK;AACtH,YAAM,cAAc,UAAU,eAAe,WAAW,CAAC,MAAK,oBAAI,KAAK,GAAE,YAAY;AACrF,YAAM,aAAa,WAAW,WAAW,SAAS,CAAC,KAAK,UAAU,cAAc;AAChF,aAAO;AAAA,QACL;AAAA,QACA,SAAS,OAAO;AAAA,QAChB,UAAU,UAAU,YAAY;AAAA,QAChC,QAAQ;AAAA,QACR,OAAO,UAAU,SAAS;AAAA,QAC1B,UAAU,UAAU,YAAY;AAAA,QAChC,MAAM,WAAW,CAAC,GAAG,SAAS,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,QAC9C,UAAU,UAAU,YAAY;AAAA,QAChC,YAAY,UAAU,cAAc;AAAA,QACpC,SAAS,UAAU,WAAW;AAAA,QAC9B,YAAY,OAAO;AAAA,QACnB;AAAA,QACA;AAAA,QACA,iBAAiB,UAAU,eAAe,SAAS,SAAS,mBAAmB,UAAU,mBAAmB,KAAK;AAAA,QACjH,YAAY;AAAA,QACZ,gBAAgB,UAAU,kBAAkB,EAAE,OAAO,MAAM,KAAK,KAAK;AAAA,QACrE,WAAW;AAAA,MACb;AAAA,IACF,CAAC;AAED,UAAM,UAAU,IAAI,IAAI,SAAS,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC;AACzD,UAAM,eAAe,IAAI,IAAI,SAAS,IAAI,CAAC,UAAU,MAAM,OAAO,CAAC;AACnE,eAAW,YAAY,kBAAkB;AACvC,UAAI,QAAQ,IAAI,SAAS,EAAE,KAAK,aAAa,IAAI,SAAS,OAAO,EAAG;AACpE,YAAM,aAAa,cAAc,MAAM,IAAI,cAAc,SAAS,UAAU;AAC5E,eAAS,KAAK;AAAA,QACZ,GAAG;AAAA,QACH,QAAQ,cAAc,0BAA0B,YAAY,SAAS;AAAA,QACrE,WAAW,cAAc,0BACrB,SAAS,cAAa,oBAAI,KAAK,GAAE,YAAY,IAC7C,SAAS,aAAa;AAAA,MAC5B,CAAC;AAAA,IACH;AAEA,aAAS;AAAA,MAAK,CAAC,GAAG,MAChB,OAAO,EAAE,WAAW,QAAQ,IAAI,OAAO,EAAE,WAAW,QAAQ,KAC5D,EAAE,kBAAkB,EAAE,mBACtB,EAAE,WAAW,cAAc,EAAE,UAAU,KACvC,EAAE,QAAQ,cAAc,EAAE,OAAO;AAAA,IACnC;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MAClC,UAAU,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAO;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBACN,QACA,SACA,UACA,gBACA,YACA,gBACA,qBACQ;AACR,UAAM,UAAU,oBAAI,IAA2C;AAC/D,eAAW,WAAW,SAAS;AAC7B,YAAM,OAAO,QAAQ,IAAI,QAAQ,MAAM,KAAK,KAAK,CAAC;AAClD,WAAK,KAAK,OAAO;AACjB,cAAQ,IAAI,QAAQ,MAAM,OAAO,IAAI;AAAA,IACvC;AAEA,UAAM,QAAkB;AAAA,MACtB,+BAA0B,MAAM;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,uBAAuB,QAAQ,MAAM;AAAA,MACrC,uBAAuB,SAAS,MAAM;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AAEA,QAAI,QAAQ,SAAS,GAAG;AACtB,YAAM,KAAK,UAAU;AAAA,IACvB,OAAO;AACL,iBAAW,CAAC,OAAO,IAAI,KAAK,MAAM,KAAK,QAAQ,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,GAAG;AAClG,cAAM,WAAW,KAAK,OAAO,CAAC,MAAM,EAAE,MAAM,aAAa,UAAU,EAAE;AACrE,cAAM,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,MAAM,aAAa,wBAAwB,EAAE;AAC9E,cAAM,WAAW,KAAK,OAAO,CAAC,MAAM,EAAE,MAAM,aAAa,UAAU,EAAE;AACrE,cAAM,KAAK,OAAO,KAAK,EAAE;AACzB,cAAM,KAAK,eAAe,QAAQ,EAAE;AACpC,cAAM,KAAK,6BAA6B,GAAG,EAAE;AAC7C,cAAM,KAAK,eAAe,QAAQ,EAAE;AACpC,cAAM,aAAa,KAChB,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,MAAM,GAAGA,MAAK,SAAS,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,IAAI,EAAE,OAAO,EAAE;AAC5E,YAAI,WAAW,SAAS,GAAG;AACzB,gBAAM,KAAK,iBAAiB,WAAW,KAAK,IAAI,CAAC,EAAE;AAAA,QACrD;AACA,cAAM,KAAK,EAAE;AAAA,MACf;AAAA,IACF;AAEA,UAAM,KAAK,8BAA8B;AACzC,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,KAAK,cAAc;AAAA,IAC3B,OAAO;AACL,YAAM,YAAY,IAAI,IAAI,eAAe,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAC9E,iBAAW,KAAK,SAAS,MAAM,GAAG,GAAG,GAAG;AACtC,cAAM,aAAa,UAAU,IAAI,CAAC,KAAK,CAAC;AACxC,YAAI,WAAW,SAAS,GAAG;AACzB,gBAAM,KAAK,KAAK,CAAC,cAAc,WAAW,KAAK,IAAI,CAAC,IAAI;AAAA,QAC1D,OAAO;AACL,gBAAM,KAAK,KAAK,CAAC,EAAE;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AACA,UAAM,KAAK,EAAE;AAEb,UAAM,KAAK,sBAAsB;AACjC,QAAI,eAAe,WAAW,GAAG;AAC/B,YAAM,KAAK,2CAA2C;AAAA,IACxD,OAAO;AACL,iBAAW,QAAQ,eAAe,MAAM,GAAG,EAAE,GAAG;AAC9C,cAAM;AAAA,UACJ,KAAK,KAAK,MAAM,aAAa,KAAK,OAAO,OAAO,aAAa,KAAK,OAAO,OAAO,YAAY,KAAK,OAAO,MAAM,YAAY,KAAK,aAAa,cAAc,KAAK,WAAW,KAAK,IAAI,CAAC;AAAA,QACtL;AAAA,MACF;AAAA,IACF;AACA,UAAM,KAAK,EAAE;AAEb,QAAI,KAAK,OAAO,4BAA4B;AAC1C,YAAM,KAAK,oCAAoC;AAC/C,UAAI,oBAAoB,WAAW,GAAG;AACpC,cAAM,KAAK,gDAAgD;AAAA,MAC7D,OAAO;AACL,mBAAW,aAAa,qBAAqB;AAC3C,gBAAM,qBAAqB,UAAU,UACjC,eAAe,UAAU,QAAQ,OAAO,OAAO,UAAU,QAAQ,OAAO,OAAO,UAAU,QAAQ,MAAM,MACvG;AACJ,gBAAM;AAAA,YACJ,MAAM,UAAU,UAAU,KAAK,UAAU,OAAO,OAAO,UAAU,OAAO,cAAc,UAAU,QAAQ,WAAW,UAAU,KAAK,QAAQ,UAAU,EAAE,MAAM,UAAU,SAAS,GAAG,kBAAkB,cAAc,UAAU,WAAW,KAAK,IAAI,CAAC;AAAA,UACnP;AAAA,QACF;AAAA,MACF;AACA,YAAM,KAAK,EAAE;AACb,YAAM,KAAK,kLAAkL;AAC7L,YAAM,KAAK,EAAE;AAAA,IACf;AAEA,QAAI,KAAK,OAAO,wBAAwB;AACtC,YAAM,KAAK,sBAAsB;AACjC,UAAI,WAAW,YAAY;AACzB,cAAM,KAAK,aAAa,WAAW,UAAU,EAAE;AAAA,MACjD,OAAO;AACL,cAAM,KAAK,0BAA0B,MAAM,GAAG;AAAA,MAChD;AACA,UAAI,WAAW,aAAa;AAC1B,cAAM,KAAK,cAAc,WAAW,WAAW,EAAE;AAAA,MACnD,OAAO;AACL,cAAM,KAAK,2BAA2B,WAAW,OAAO,GAAG;AAAA,MAC7D;AACA,YAAM,KAAK,EAAE;AAAA,IACf;AAEA,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AAAA,EAEQ,oBACN,SACA,gBACgB;AAChB,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,UAAM,UAAU,oBAAI,IAAiC;AACrD,UAAM,aAAa,oBAAI,IAAiC;AAExD,eAAW,WAAW,SAAS;AAC7B,YAAM,QAAS,QAAQ,MAAM,YAAY,QAAQ,MAAM,SAAS,KAAK,EAAE,SAAS,IAC5E,QAAQ,MAAM,WACd,QAAQ,MAAM,aAAa,aACzB,QAAQ,MAAM,SACd,IAAI,KAAK;AACf,UAAI,CAAC,KAAM;AACX,YAAM,aAAa,GAAGA,MAAK,SAAS,QAAQ,UAAU,CAAC,KAAK,QAAQ,UAAU,IAAI,QAAQ,OAAO;AACjG,YAAM,aAAa,QAAQ,IAAI,QAAQ,MAAM,KAAK,KAAK;AAAA,QACrD,IAAI,eAAe,SAAS,QAAQ,MAAM,KAAK;AAAA,QAC/C,MAAM;AAAA,QACN,SAAS,QAAQ,MAAM;AAAA,QACvB,cAAc,CAAC;AAAA,QACf,MAAM,CAAC;AAAA,QACP,YAAY,CAAC;AAAA,QACb,oBAAoB,CAAC;AAAA,QACrB;AAAA,MACF;AACA,WAAK,qBAAqB,YAAY,MAAM,UAAU;AACtD,iBAAW,OAAO,cAAc,CAAC,GAAG,WAAW,MAAM,GAAG,cAAc,QAAQ,MAAM,IAAI,CAAC,CAAC;AAC1F,cAAQ,IAAI,QAAQ,MAAM,OAAO,UAAU;AAE3C,YAAM,WAAW,QAAQ,MAAM,UAAU,KAAK;AAC9C,UAAI,CAAC,SAAU;AACf,YAAM,gBAAgB,WAAW,IAAI,QAAQ,KAAK;AAAA,QAChD,IAAI,eAAe,YAAY,QAAQ;AAAA,QACvC,MAAM;AAAA,QACN,SAAS;AAAA,QACT,cAAc,CAAC;AAAA,QACf,MAAM,CAAC;AAAA,QACP,YAAY,CAAC;AAAA,QACb,oBAAoB,CAAC;AAAA,QACrB;AAAA,MACF;AACA,WAAK,qBAAqB,eAAe,MAAM,UAAU;AACzD,oBAAc,OAAO,cAAc,CAAC,GAAG,cAAc,MAAM,GAAG,cAAc,QAAQ,MAAM,IAAI,CAAC,CAAC;AAChG,iBAAW,IAAI,UAAU,aAAa;AAAA,IACxC;AAEA,eAAW,QAAQ,gBAAgB;AACjC,YAAM,gBAAgB,WAAW,IAAI,KAAK,MAAM,KAAK;AAAA,QACnD,IAAI,eAAe,YAAY,KAAK,MAAM;AAAA,QAC1C,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,QACd,cAAc,CAAC;AAAA,QACf,MAAM,CAAC;AAAA,QACP,YAAY,CAAC;AAAA,QACb,oBAAoB,CAAC;AAAA,QACrB;AAAA,MACF;AACA,WAAK;AAAA,QACH;AAAA,QACA,kBAAkB,KAAK,aAAa,aAAa,KAAK,OAAO,OAAO,aAAa,KAAK,OAAO,OAAO,YAAY,KAAK,OAAO,MAAM;AAAA,QAClI,GAAG,KAAK;AAAA,MACV;AACA,iBAAW,IAAI,KAAK,QAAQ,aAAa;AAAA,IAC3C;AAEA,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,CAAC,GAAG,QAAQ,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,cAAc,EAAE,OAAO,CAAC;AAAA,MAC/E,WAAW,CAAC,GAAG,WAAW,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,cAAc,EAAE,OAAO,CAAC;AAAA,IACvF;AAAA,EACF;AAAA,EAEQ,cAAc,gBAAwC,UAAkC;AAC9F,UAAM,QAAkB;AAAA,MACtB;AAAA,MACA;AAAA,MACA,cAAc,SAAS,SAAS;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,KAAK,kBAAkB;AAC7B,QAAI,SAAS,OAAO,WAAW,GAAG;AAChC,YAAM,KAAK,cAAc;AAAA,IAC3B,OAAO;AACL,iBAAW,UAAU,SAAS,QAAQ;AACpC,cAAM,KAAK,OAAO,OAAO,OAAO,EAAE;AAClC,cAAM,eAAe,KAAK,4BAA4B,MAAM,EAAE,MAAM,GAAG,CAAC;AACxE,YAAI,aAAa,WAAW,GAAG;AAC7B,gBAAM,KAAK,+BAA+B;AAAA,QAC5C,OAAO;AACL,qBAAW,eAAe,cAAc;AACtC,kBAAM,aAAa,YAAY,WAAW,KAAK,IAAI;AACnD,kBAAM,KAAK,KAAK,YAAY,IAAI,GAAG,aAAa,cAAc,UAAU,OAAO,EAAE,EAAE;AAAA,UACrF;AAAA,QACF;AACA,cAAM,KAAK,EAAE;AAAA,MACf;AAAA,IACF;AAEA,UAAM,KAAK,qBAAqB;AAChC,QAAI,SAAS,UAAU,WAAW,GAAG;AACnC,YAAM,KAAK,cAAc;AAAA,IAC3B,OAAO;AACL,iBAAW,UAAU,SAAS,WAAW;AACvC,cAAM,KAAK,OAAO,OAAO,OAAO,EAAE;AAClC,mBAAW,eAAe,KAAK,4BAA4B,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG;AAC9E,gBAAM,aAAa,YAAY,WAAW,KAAK,IAAI;AACnD,gBAAM,KAAK,KAAK,YAAY,IAAI,GAAG,aAAa,cAAc,UAAU,OAAO,EAAE,EAAE;AAAA,QACrF;AACA,cAAM,KAAK,EAAE;AAAA,MACf;AAAA,IACF;AAEA,UAAM,KAAK,2BAA2B;AACtC,QAAI,eAAe,WAAW,GAAG;AAC/B,YAAM,KAAK,cAAc;AAAA,IAC3B,OAAO;AACL,iBAAW,QAAQ,eAAe,MAAM,GAAG,EAAE,GAAG;AAC9C,cAAM;AAAA,UACJ,KAAK,KAAK,MAAM,YAAY,KAAK,aAAa,aAAa,KAAK,OAAO,OAAO,aAAa,KAAK,OAAO,OAAO,YAAY,KAAK,OAAO,MAAM;AAAA,QAC9I;AAAA,MACF;AAAA,IACF;AACA,UAAM,KAAK,EAAE;AACb,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AAAA,EAEA,MAAc,oBAAoB,UAAyC;AACzE,UAAM,KAAK,uBAAuB,KAAK,kBAAkB,SAAS,MAAM;AACxE,UAAM,KAAK,uBAAuB,KAAK,qBAAqB,SAAS,SAAS;AAAA,EAChF;AAAA,EAEA,MAAc,uBAAuB,KAAa,SAA+C;AAC/F,UAAMC,OAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,QAAI;AACF,YAAM,QAAQ,MAAMG,SAAQ,GAAG;AAC/B,YAAM,QAAQ;AAAA,QACZ,MAAM,OAAO,CAAC,SAAS,KAAK,SAAS,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,OAAOJ,MAAK,KAAK,KAAK,IAAI,CAAC,EAAE,MAAM,MAAM,MAAS,CAAC;AAAA,MAChH;AAAA,IACF,QAAQ;AAAA,IAER;AAEA,UAAM,iBAAiB,oBAAI,IAAoB;AAC/C,eAAW,SAAS,SAAS;AAC3B,YAAM,OAAO,WAAW,MAAM,OAAO;AACrC,qBAAe,IAAI,OAAO,eAAe,IAAI,IAAI,KAAK,KAAK,CAAC;AAAA,IAC9D;AAEA,UAAM,QAAQ,IAAI,QAAQ,IAAI,OAAO,UAAU;AAC7C,YAAM,qBAAqB,KAAK,4BAA4B,KAAK;AACjE,YAAM,OAAO;AAAA,QACX,KAAK,MAAM,SAAS,UAAU,UAAU,UAAU,kBAAa,MAAM,OAAO;AAAA,QAC5E;AAAA,QACA,YAAY,MAAM,SAAS;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,GAAI,mBAAmB,SAAS,IAC5B,mBAAmB,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,EAAE,IACjD,CAAC,cAAc;AAAA,QACnB;AAAA,QACA;AAAA,QACA,GAAI,MAAM,WAAW,SAAS,IAAI,MAAM,WAAW,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,IAAI,CAAC,cAAc;AAAA,QAC/F;AAAA,MACF,EAAE,KAAK,IAAI;AACX,YAAM,WAAW,uBAAuB,OAAO,cAAc;AAC7D,YAAME,WAAUF,MAAK,KAAK,KAAK,QAAQ,GAAG,MAAM,OAAO;AAAA,IACzD,CAAC,CAAC;AAAA,EACJ;AAAA,EAEQ,oBAAoB,OAA4B,aAA+B;AACrF,QAAI,YAAY,WAAW,EAAG,QAAO,MAAM,aAAa;AACxD,UAAM,WAAW,CAAC,MAAM,SAAS,GAAG,MAAM,cAAc,GAAG,MAAM,IAAI,EAAE,KAAK,GAAG,EAAE,YAAY;AAC7F,QAAI,QAAQ;AACZ,eAAW,SAAS,aAAa;AAC/B,UAAI,SAAS,SAAS,KAAK,EAAG,UAAS;AACvC,UAAI,MAAM,QAAQ,YAAY,EAAE,SAAS,KAAK,EAAG,UAAS;AAAA,IAC5D;AACA,QAAI,UAAU,EAAG,QAAO;AACxB,WAAO,QAAQ,KAAK,IAAI,MAAM,aAAa,QAAQ,CAAC;AAAA,EACtD;AAAA,EAEQ,qBAAqB,OAAiD;AAC5E,UAAM,oBAAoB,KAAK,4BAA4B,KAAK;AAChE,WAAO;AAAA,MACL,GAAG;AAAA,MACH,cAAc,kBAAkB,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,MACvD,YAAY,CAAC,GAAG,IAAI,IAAI,kBAAkB,QAAQ,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC;AAAA,MAC7E,oBAAoB;AAAA,IACtB;AAAA,EACF;AAAA,EAEQ,4BAA4B,OAA2E;AAC7G,QAAI,MAAM,QAAQ,MAAM,kBAAkB,KAAK,MAAM,mBAAmB,SAAS,GAAG;AAClF,aAAO,MAAM,mBAAmB,IAAI,CAAC,UAAU;AAAA,QAC7C,MAAM,KAAK;AAAA,QACX,YAAY,CAAC,GAAG,IAAI,IAAI,KAAK,UAAU,CAAC,EAAE,KAAK;AAAA,MACjD,EAAE;AAAA,IACJ;AAEA,WAAO,MAAM,aAAa,IAAI,CAAC,MAAM,WAAW;AAAA,MAC9C;AAAA,MACA,YAAY,MAAM,WAAW,KAAK,IAAI,CAAC,MAAM,WAAW,KAAK,CAAC,IAAK,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC;AAAA,IACpH,EAAE;AAAA,EACJ;AAAA,EAEQ,oCAAoC,MAAuB;AACjE,WAAO,KAAK,UAAU,EAAE,WAAW,iBAAiB;AAAA,EACtD;AAAA,EAEQ,qBAAqB,OAA4B,SAAiB,YAA4B;AACpG,UAAM,aAAa,KAAK,qBAAqB,KAAK;AAClD,UAAM,WAAW,WAAW,oBAAoB,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI;AACjF,QAAI,UAAU;AACZ,eAAS,aAAa,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,SAAS,YAAY,GAAG,UAAU,CAAC,CAAC,EAAE,KAAK;AAAA,IACnF,OAAO;AACL,iBAAW,oBAAoB,KAAK;AAAA,QAClC;AAAA,QACA,YAAY,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,EAAE,KAAK;AAAA,MAC5C,CAAC;AAAA,IACH;AACA,UAAM,qBAAqB,WAAW;AACtC,UAAM,eAAe,WAAW,oBAAoB,IAAI,CAAC,SAAS,KAAK,IAAI,KAAK,CAAC;AACjF,UAAM,aAAa,CAAC,GAAG,IAAI,KAAK,WAAW,sBAAsB,CAAC,GAAG,QAAQ,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC;AAAA,EAC1G;AAAA,EAEA,MAAc,qCAA6D;AACzE,QAAI;AACF,aAAO,MAAM,KAAK,QAAQ,mBAAmB;AAAA,IAC/C,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,uCAA+D;AAC3E,QAAI;AACF,aAAO,MAAM,KAAK,QAAQ,6BAA6B;AAAA,IACzD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,gCACZ,OACA,OACqC;AACrC,QAAI;AACF,aAAO,MAAM,KAAK,QAAQ,wBAAwB,OAAO,KAAK;AAAA,IAChE,QAAQ;AACN,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAc,sCACZ,QACA,KACwB;AACxB,QAAI;AACF,aAAO,MAAM,KAAK,QAAQ,kBAAkB,QAAQ,GAAG;AAAA,IACzD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,8BAA8B,QAKzC;AACD,UAAM,UAAU,mBAAmB,MAAM;AACzC,UAAM,aAAaA,MAAK,KAAK,KAAK,wBAAwB,GAAG,MAAM,KAAK;AACxE,UAAM,cAAcA,MAAK,KAAK,KAAK,yBAAyB,GAAG,OAAO,KAAK;AAC3E,UAAM,CAAC,aAAa,YAAY,IAAI,MAAM,QAAQ,IAAI;AAAA,MACpD,KAAK,sCAAsC,UAAU,MAAM;AAAA,MAC3D,KAAK,sCAAsC,WAAW,OAAO;AAAA,IAC/D,CAAC;AACD,UAAM,gBAAgB,eAAe,IAAI,KAAK,EAAE,SAAS;AACzD,UAAM,iBAAiB,gBAAgB,IAAI,KAAK,EAAE,SAAS;AAC3D,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAY,eAAe,aAAa;AAAA,MACxC,aAAa,gBAAgB,cAAc;AAAA,IAC7C;AAAA,EACF;AACF;","names":["mkdir","readFile","readdir","writeFile","path","limit","path","mkdir","writeFile","readFile","readdir"]}
|
package/dist/chunk-FYIYMQ5N.js
DELETED
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
assertIsoRecordedAt,
|
|
3
|
-
assertSafePathSegment,
|
|
4
|
-
assertString,
|
|
5
|
-
isRecord,
|
|
6
|
-
optionalString,
|
|
7
|
-
optionalStringArray,
|
|
8
|
-
recordStoreDay,
|
|
9
|
-
validateStringRecord
|
|
10
|
-
} from "./chunk-DGXUHMOV.js";
|
|
11
|
-
import {
|
|
12
|
-
listJsonFiles,
|
|
13
|
-
readJsonFile
|
|
14
|
-
} from "./chunk-LPSF4OQH.js";
|
|
15
|
-
|
|
16
|
-
// src/commitment-ledger.ts
|
|
17
|
-
import path from "path";
|
|
18
|
-
import { mkdir, unlink, writeFile } from "fs/promises";
|
|
19
|
-
function resolveCommitmentLedgerDir(memoryDir, overrideDir) {
|
|
20
|
-
if (typeof overrideDir === "string" && overrideDir.trim().length > 0) {
|
|
21
|
-
return overrideDir.trim();
|
|
22
|
-
}
|
|
23
|
-
return path.join(memoryDir, "state", "commitment-ledger");
|
|
24
|
-
}
|
|
25
|
-
function validateCommitmentLedgerEntry(raw) {
|
|
26
|
-
if (!isRecord(raw)) throw new Error("commitment ledger entry must be an object");
|
|
27
|
-
if (raw.schemaVersion !== 1) throw new Error("schemaVersion must be 1");
|
|
28
|
-
const source = assertString(raw.source, "source");
|
|
29
|
-
if (!["tool_result", "cli", "system", "manual"].includes(source)) {
|
|
30
|
-
throw new Error("source must be one of tool_result|cli|system|manual");
|
|
31
|
-
}
|
|
32
|
-
const kind = assertString(raw.kind, "kind");
|
|
33
|
-
if (!["promise", "follow_up", "deadline", "deliverable"].includes(kind)) {
|
|
34
|
-
throw new Error("kind must be one of promise|follow_up|deadline|deliverable");
|
|
35
|
-
}
|
|
36
|
-
const state = assertString(raw.state, "state");
|
|
37
|
-
if (!["open", "fulfilled", "cancelled", "expired"].includes(state)) {
|
|
38
|
-
throw new Error("state must be one of open|fulfilled|cancelled|expired");
|
|
39
|
-
}
|
|
40
|
-
const dueAt = optionalString(raw.dueAt);
|
|
41
|
-
if (dueAt !== void 0) {
|
|
42
|
-
assertIsoRecordedAt(dueAt, "dueAt");
|
|
43
|
-
}
|
|
44
|
-
const stateChangedAt = optionalString(raw.stateChangedAt);
|
|
45
|
-
if (stateChangedAt !== void 0) {
|
|
46
|
-
assertIsoRecordedAt(stateChangedAt, "stateChangedAt");
|
|
47
|
-
}
|
|
48
|
-
const resolvedAt = optionalString(raw.resolvedAt);
|
|
49
|
-
if (resolvedAt !== void 0) {
|
|
50
|
-
assertIsoRecordedAt(resolvedAt, "resolvedAt");
|
|
51
|
-
}
|
|
52
|
-
const normalizedStateChangedAt = stateChangedAt ?? (state === "open" ? void 0 : assertString(raw.recordedAt, "recordedAt"));
|
|
53
|
-
const normalizedResolvedAt = resolvedAt ?? (state === "open" ? void 0 : normalizedStateChangedAt);
|
|
54
|
-
return {
|
|
55
|
-
schemaVersion: 1,
|
|
56
|
-
entryId: assertSafePathSegment(assertString(raw.entryId, "entryId"), "entryId"),
|
|
57
|
-
recordedAt: assertIsoRecordedAt(assertString(raw.recordedAt, "recordedAt")),
|
|
58
|
-
sessionKey: assertString(raw.sessionKey, "sessionKey"),
|
|
59
|
-
source,
|
|
60
|
-
kind,
|
|
61
|
-
state,
|
|
62
|
-
scope: assertString(raw.scope, "scope"),
|
|
63
|
-
summary: assertString(raw.summary, "summary"),
|
|
64
|
-
dueAt,
|
|
65
|
-
entityRefs: optionalStringArray(raw.entityRefs, "entityRefs"),
|
|
66
|
-
workProductEntryRefs: optionalStringArray(raw.workProductEntryRefs, "workProductEntryRefs"),
|
|
67
|
-
objectiveStateSnapshotRefs: optionalStringArray(raw.objectiveStateSnapshotRefs, "objectiveStateSnapshotRefs"),
|
|
68
|
-
tags: optionalStringArray(raw.tags, "tags"),
|
|
69
|
-
metadata: validateStringRecord(raw.metadata, "metadata"),
|
|
70
|
-
stateChangedAt: normalizedStateChangedAt,
|
|
71
|
-
resolvedAt: normalizedResolvedAt
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
async function recordCommitmentLedgerEntry(options) {
|
|
75
|
-
const rootDir = resolveCommitmentLedgerDir(options.memoryDir, options.commitmentLedgerDir);
|
|
76
|
-
const validated = validateCommitmentLedgerEntry(options.entry);
|
|
77
|
-
const day = recordStoreDay(validated.recordedAt);
|
|
78
|
-
const entriesDir = path.join(rootDir, "entries", day);
|
|
79
|
-
const filePath = path.join(entriesDir, `${validated.entryId}.json`);
|
|
80
|
-
await mkdir(entriesDir, { recursive: true });
|
|
81
|
-
await writeFile(filePath, JSON.stringify(validated, null, 2), "utf8");
|
|
82
|
-
return filePath;
|
|
83
|
-
}
|
|
84
|
-
async function readCommitmentLedgerEntries(options) {
|
|
85
|
-
const rootDir = resolveCommitmentLedgerDir(options.memoryDir, options.commitmentLedgerDir);
|
|
86
|
-
const files = await listJsonFiles(path.join(rootDir, "entries"));
|
|
87
|
-
const entries = [];
|
|
88
|
-
const entryFiles = [];
|
|
89
|
-
const invalidEntries = [];
|
|
90
|
-
for (const filePath of files) {
|
|
91
|
-
try {
|
|
92
|
-
const entry = validateCommitmentLedgerEntry(await readJsonFile(filePath));
|
|
93
|
-
entries.push(entry);
|
|
94
|
-
entryFiles.push({ entry, filePath });
|
|
95
|
-
} catch (error) {
|
|
96
|
-
invalidEntries.push({
|
|
97
|
-
path: filePath,
|
|
98
|
-
error: error instanceof Error ? error.message : String(error)
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return { files, entries, entryFiles, invalidEntries };
|
|
103
|
-
}
|
|
104
|
-
function isResolvedState(state) {
|
|
105
|
-
return state === "fulfilled" || state === "cancelled" || state === "expired";
|
|
106
|
-
}
|
|
107
|
-
function isOverdueOpenEntry(entry, nowMs) {
|
|
108
|
-
return entry.state === "open" && typeof entry.dueAt === "string" && Date.parse(entry.dueAt) < nowMs;
|
|
109
|
-
}
|
|
110
|
-
function isStaleOpenEntry(entry, nowMs, staleDays) {
|
|
111
|
-
if (entry.state !== "open") return false;
|
|
112
|
-
if (typeof entry.dueAt === "string") return false;
|
|
113
|
-
const staleCutoff = nowMs - staleDays * 24 * 60 * 60 * 1e3;
|
|
114
|
-
return Date.parse(entry.recordedAt) < staleCutoff;
|
|
115
|
-
}
|
|
116
|
-
function isDecayEligibleResolvedEntry(entry, nowMs, decayDays) {
|
|
117
|
-
if (!isResolvedState(entry.state)) return false;
|
|
118
|
-
const reference = entry.resolvedAt ?? entry.stateChangedAt ?? entry.recordedAt;
|
|
119
|
-
const decayCutoff = nowMs - decayDays * 24 * 60 * 60 * 1e3;
|
|
120
|
-
return Date.parse(reference) < decayCutoff;
|
|
121
|
-
}
|
|
122
|
-
async function findCommitmentLedgerEntryById(options) {
|
|
123
|
-
const { entryFiles } = await readCommitmentLedgerEntries(options);
|
|
124
|
-
for (const candidate of entryFiles) {
|
|
125
|
-
if (candidate.entry.entryId === options.entryId || path.basename(candidate.filePath, ".json") === options.entryId) {
|
|
126
|
-
return candidate;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
async function transitionCommitmentLedgerEntryState(options) {
|
|
132
|
-
const match = await findCommitmentLedgerEntryById(options);
|
|
133
|
-
if (!match) {
|
|
134
|
-
throw new Error(`commitment entry not found: ${options.entryId}`);
|
|
135
|
-
}
|
|
136
|
-
const changedAt = assertIsoRecordedAt(options.changedAt, "changedAt");
|
|
137
|
-
const nextState = options.nextState;
|
|
138
|
-
const nextEntry = {
|
|
139
|
-
...match.entry,
|
|
140
|
-
state: nextState,
|
|
141
|
-
stateChangedAt: changedAt,
|
|
142
|
-
resolvedAt: isResolvedState(nextState) ? changedAt : void 0
|
|
143
|
-
};
|
|
144
|
-
await writeFile(match.filePath, JSON.stringify(validateCommitmentLedgerEntry(nextEntry), null, 2), "utf8");
|
|
145
|
-
return nextEntry;
|
|
146
|
-
}
|
|
147
|
-
async function applyCommitmentLedgerLifecycle(options) {
|
|
148
|
-
if (!options.enabled) {
|
|
149
|
-
return { transitionedToExpired: [], deletedResolved: [] };
|
|
150
|
-
}
|
|
151
|
-
const nowIso = assertIsoRecordedAt(options.now ?? (/* @__PURE__ */ new Date()).toISOString(), "now");
|
|
152
|
-
const nowMs = Date.parse(nowIso);
|
|
153
|
-
const { entryFiles } = await readCommitmentLedgerEntries(options);
|
|
154
|
-
const transitionedToExpired = [];
|
|
155
|
-
const deletedResolved = [];
|
|
156
|
-
for (const { entry, filePath } of entryFiles) {
|
|
157
|
-
if (isOverdueOpenEntry(entry, nowMs)) {
|
|
158
|
-
const updated = validateCommitmentLedgerEntry({
|
|
159
|
-
...entry,
|
|
160
|
-
state: "expired",
|
|
161
|
-
stateChangedAt: nowIso,
|
|
162
|
-
resolvedAt: nowIso
|
|
163
|
-
});
|
|
164
|
-
await writeFile(filePath, JSON.stringify(updated, null, 2), "utf8");
|
|
165
|
-
transitionedToExpired.push(updated);
|
|
166
|
-
continue;
|
|
167
|
-
}
|
|
168
|
-
if (isDecayEligibleResolvedEntry(entry, nowMs, options.decayDays)) {
|
|
169
|
-
await unlink(filePath);
|
|
170
|
-
deletedResolved.push(entry);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
return { transitionedToExpired, deletedResolved };
|
|
174
|
-
}
|
|
175
|
-
async function getCommitmentLedgerStatus(options) {
|
|
176
|
-
const rootDir = resolveCommitmentLedgerDir(options.memoryDir, options.commitmentLedgerDir);
|
|
177
|
-
const entriesDir = path.join(rootDir, "entries");
|
|
178
|
-
const { files, entries, invalidEntries } = await readCommitmentLedgerEntries(options);
|
|
179
|
-
entries.sort((a, b) => b.recordedAt.localeCompare(a.recordedAt));
|
|
180
|
-
const nowMs = Date.parse(assertIsoRecordedAt(options.now ?? (/* @__PURE__ */ new Date()).toISOString(), "now"));
|
|
181
|
-
const staleDays = Math.max(1, Math.floor(options.staleDays ?? 14));
|
|
182
|
-
const decayDays = Math.max(1, Math.floor(options.decayDays ?? 90));
|
|
183
|
-
const byKind = {};
|
|
184
|
-
const byState = {};
|
|
185
|
-
for (const entry of entries) {
|
|
186
|
-
byKind[entry.kind] = (byKind[entry.kind] ?? 0) + 1;
|
|
187
|
-
byState[entry.state] = (byState[entry.state] ?? 0) + 1;
|
|
188
|
-
}
|
|
189
|
-
return {
|
|
190
|
-
enabled: options.enabled,
|
|
191
|
-
rootDir,
|
|
192
|
-
entriesDir,
|
|
193
|
-
entries: {
|
|
194
|
-
total: files.length,
|
|
195
|
-
valid: entries.length,
|
|
196
|
-
invalid: invalidEntries.length,
|
|
197
|
-
byKind,
|
|
198
|
-
byState,
|
|
199
|
-
latestEntryId: entries[0]?.entryId,
|
|
200
|
-
latestRecordedAt: entries[0]?.recordedAt,
|
|
201
|
-
latestSessionKey: entries[0]?.sessionKey
|
|
202
|
-
},
|
|
203
|
-
latestEntry: entries[0],
|
|
204
|
-
invalidEntries,
|
|
205
|
-
lifecycle: options.lifecycleEnabled ? {
|
|
206
|
-
overdueOpen: entries.filter((entry) => isOverdueOpenEntry(entry, nowMs)).length,
|
|
207
|
-
staleOpen: entries.filter((entry) => isStaleOpenEntry(entry, nowMs, staleDays)).length,
|
|
208
|
-
decayEligibleResolved: entries.filter((entry) => isDecayEligibleResolvedEntry(entry, nowMs, decayDays)).length
|
|
209
|
-
} : void 0
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
export {
|
|
214
|
-
resolveCommitmentLedgerDir,
|
|
215
|
-
validateCommitmentLedgerEntry,
|
|
216
|
-
recordCommitmentLedgerEntry,
|
|
217
|
-
transitionCommitmentLedgerEntryState,
|
|
218
|
-
applyCommitmentLedgerLifecycle,
|
|
219
|
-
getCommitmentLedgerStatus
|
|
220
|
-
};
|
|
221
|
-
//# sourceMappingURL=chunk-FYIYMQ5N.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commitment-ledger.ts"],"sourcesContent":["import path from \"node:path\";\nimport { mkdir, unlink, writeFile } from \"node:fs/promises\";\nimport { listJsonFiles, readJsonFile } from \"./json-store.js\";\nimport {\n assertIsoRecordedAt,\n assertSafePathSegment,\n assertString,\n isRecord,\n optionalString,\n optionalStringArray,\n recordStoreDay,\n validateStringRecord,\n} from \"./store-contract.js\";\n\nexport type CommitmentLedgerSource = \"tool_result\" | \"cli\" | \"system\" | \"manual\";\nexport type CommitmentLedgerKind = \"promise\" | \"follow_up\" | \"deadline\" | \"deliverable\";\nexport type CommitmentLedgerState = \"open\" | \"fulfilled\" | \"cancelled\" | \"expired\";\n\nexport interface CommitmentLedgerEntry {\n schemaVersion: 1;\n entryId: string;\n recordedAt: string;\n sessionKey: string;\n source: CommitmentLedgerSource;\n kind: CommitmentLedgerKind;\n state: CommitmentLedgerState;\n scope: string;\n summary: string;\n dueAt?: string;\n entityRefs?: string[];\n workProductEntryRefs?: string[];\n objectiveStateSnapshotRefs?: string[];\n tags?: string[];\n metadata?: Record<string, string>;\n stateChangedAt?: string;\n resolvedAt?: string;\n}\n\nexport interface CommitmentLedgerStatus {\n enabled: boolean;\n rootDir: string;\n entriesDir: string;\n entries: {\n total: number;\n valid: number;\n invalid: number;\n byKind: Partial<Record<CommitmentLedgerKind, number>>;\n byState: Partial<Record<CommitmentLedgerState, number>>;\n latestEntryId?: string;\n latestRecordedAt?: string;\n latestSessionKey?: string;\n };\n latestEntry?: CommitmentLedgerEntry;\n invalidEntries: Array<{\n path: string;\n error: string;\n }>;\n lifecycle?: {\n staleOpen: number;\n overdueOpen: number;\n decayEligibleResolved: number;\n };\n}\n\nexport interface CommitmentLedgerLifecycleResult {\n transitionedToExpired: CommitmentLedgerEntry[];\n deletedResolved: CommitmentLedgerEntry[];\n}\n\nexport function resolveCommitmentLedgerDir(memoryDir: string, overrideDir?: string): string {\n if (typeof overrideDir === \"string\" && overrideDir.trim().length > 0) {\n return overrideDir.trim();\n }\n return path.join(memoryDir, \"state\", \"commitment-ledger\");\n}\n\nexport function validateCommitmentLedgerEntry(raw: unknown): CommitmentLedgerEntry {\n if (!isRecord(raw)) throw new Error(\"commitment ledger entry must be an object\");\n if (raw.schemaVersion !== 1) throw new Error(\"schemaVersion must be 1\");\n\n const source = assertString(raw.source, \"source\");\n if (![\"tool_result\", \"cli\", \"system\", \"manual\"].includes(source)) {\n throw new Error(\"source must be one of tool_result|cli|system|manual\");\n }\n\n const kind = assertString(raw.kind, \"kind\");\n if (![\"promise\", \"follow_up\", \"deadline\", \"deliverable\"].includes(kind)) {\n throw new Error(\"kind must be one of promise|follow_up|deadline|deliverable\");\n }\n\n const state = assertString(raw.state, \"state\");\n if (![\"open\", \"fulfilled\", \"cancelled\", \"expired\"].includes(state)) {\n throw new Error(\"state must be one of open|fulfilled|cancelled|expired\");\n }\n\n const dueAt = optionalString(raw.dueAt);\n if (dueAt !== undefined) {\n assertIsoRecordedAt(dueAt, \"dueAt\");\n }\n\n const stateChangedAt = optionalString(raw.stateChangedAt);\n if (stateChangedAt !== undefined) {\n assertIsoRecordedAt(stateChangedAt, \"stateChangedAt\");\n }\n\n const resolvedAt = optionalString(raw.resolvedAt);\n if (resolvedAt !== undefined) {\n assertIsoRecordedAt(resolvedAt, \"resolvedAt\");\n }\n\n const normalizedStateChangedAt = stateChangedAt ?? (state === \"open\" ? undefined : assertString(raw.recordedAt, \"recordedAt\"));\n const normalizedResolvedAt = resolvedAt ?? (state === \"open\" ? undefined : normalizedStateChangedAt);\n\n return {\n schemaVersion: 1,\n entryId: assertSafePathSegment(assertString(raw.entryId, \"entryId\"), \"entryId\"),\n recordedAt: assertIsoRecordedAt(assertString(raw.recordedAt, \"recordedAt\")),\n sessionKey: assertString(raw.sessionKey, \"sessionKey\"),\n source: source as CommitmentLedgerSource,\n kind: kind as CommitmentLedgerKind,\n state: state as CommitmentLedgerState,\n scope: assertString(raw.scope, \"scope\"),\n summary: assertString(raw.summary, \"summary\"),\n dueAt,\n entityRefs: optionalStringArray(raw.entityRefs, \"entityRefs\"),\n workProductEntryRefs: optionalStringArray(raw.workProductEntryRefs, \"workProductEntryRefs\"),\n objectiveStateSnapshotRefs: optionalStringArray(raw.objectiveStateSnapshotRefs, \"objectiveStateSnapshotRefs\"),\n tags: optionalStringArray(raw.tags, \"tags\"),\n metadata: validateStringRecord(raw.metadata, \"metadata\"),\n stateChangedAt: normalizedStateChangedAt,\n resolvedAt: normalizedResolvedAt,\n };\n}\n\nexport async function recordCommitmentLedgerEntry(options: {\n memoryDir: string;\n commitmentLedgerDir?: string;\n entry: CommitmentLedgerEntry;\n}): Promise<string> {\n const rootDir = resolveCommitmentLedgerDir(options.memoryDir, options.commitmentLedgerDir);\n const validated = validateCommitmentLedgerEntry(options.entry);\n const day = recordStoreDay(validated.recordedAt);\n const entriesDir = path.join(rootDir, \"entries\", day);\n const filePath = path.join(entriesDir, `${validated.entryId}.json`);\n await mkdir(entriesDir, { recursive: true });\n await writeFile(filePath, JSON.stringify(validated, null, 2), \"utf8\");\n return filePath;\n}\n\nasync function readCommitmentLedgerEntries(options: {\n memoryDir: string;\n commitmentLedgerDir?: string;\n}): Promise<{\n files: string[];\n entries: CommitmentLedgerEntry[];\n entryFiles: Array<{ entry: CommitmentLedgerEntry; filePath: string }>;\n invalidEntries: Array<{ path: string; error: string }>;\n}> {\n const rootDir = resolveCommitmentLedgerDir(options.memoryDir, options.commitmentLedgerDir);\n const files = await listJsonFiles(path.join(rootDir, \"entries\"));\n const entries: CommitmentLedgerEntry[] = [];\n const entryFiles: Array<{ entry: CommitmentLedgerEntry; filePath: string }> = [];\n const invalidEntries: Array<{ path: string; error: string }> = [];\n for (const filePath of files) {\n try {\n const entry = validateCommitmentLedgerEntry(await readJsonFile(filePath));\n entries.push(entry);\n entryFiles.push({ entry, filePath });\n } catch (error) {\n invalidEntries.push({\n path: filePath,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return { files, entries, entryFiles, invalidEntries };\n}\n\nfunction isResolvedState(state: CommitmentLedgerState): boolean {\n return state === \"fulfilled\" || state === \"cancelled\" || state === \"expired\";\n}\n\nfunction isOverdueOpenEntry(entry: CommitmentLedgerEntry, nowMs: number): boolean {\n return entry.state === \"open\" && typeof entry.dueAt === \"string\" && Date.parse(entry.dueAt) < nowMs;\n}\n\nfunction isStaleOpenEntry(entry: CommitmentLedgerEntry, nowMs: number, staleDays: number): boolean {\n if (entry.state !== \"open\") return false;\n if (typeof entry.dueAt === \"string\") return false;\n const staleCutoff = nowMs - staleDays * 24 * 60 * 60 * 1000;\n return Date.parse(entry.recordedAt) < staleCutoff;\n}\n\nfunction isDecayEligibleResolvedEntry(entry: CommitmentLedgerEntry, nowMs: number, decayDays: number): boolean {\n if (!isResolvedState(entry.state)) return false;\n const reference = entry.resolvedAt ?? entry.stateChangedAt ?? entry.recordedAt;\n const decayCutoff = nowMs - decayDays * 24 * 60 * 60 * 1000;\n return Date.parse(reference) < decayCutoff;\n}\n\nasync function findCommitmentLedgerEntryById(options: {\n memoryDir: string;\n commitmentLedgerDir?: string;\n entryId: string;\n}): Promise<{ entry: CommitmentLedgerEntry; filePath: string } | null> {\n const { entryFiles } = await readCommitmentLedgerEntries(options);\n for (const candidate of entryFiles) {\n if (candidate.entry.entryId === options.entryId || path.basename(candidate.filePath, \".json\") === options.entryId) {\n return candidate;\n }\n }\n return null;\n}\n\nexport async function transitionCommitmentLedgerEntryState(options: {\n memoryDir: string;\n commitmentLedgerDir?: string;\n entryId: string;\n nextState: CommitmentLedgerState;\n changedAt: string;\n}): Promise<CommitmentLedgerEntry> {\n const match = await findCommitmentLedgerEntryById(options);\n if (!match) {\n throw new Error(`commitment entry not found: ${options.entryId}`);\n }\n\n const changedAt = assertIsoRecordedAt(options.changedAt, \"changedAt\");\n const nextState = options.nextState;\n const nextEntry: CommitmentLedgerEntry = {\n ...match.entry,\n state: nextState,\n stateChangedAt: changedAt,\n resolvedAt: isResolvedState(nextState) ? changedAt : undefined,\n };\n\n await writeFile(match.filePath, JSON.stringify(validateCommitmentLedgerEntry(nextEntry), null, 2), \"utf8\");\n return nextEntry;\n}\n\nexport async function applyCommitmentLedgerLifecycle(options: {\n memoryDir: string;\n commitmentLedgerDir?: string;\n enabled: boolean;\n decayDays: number;\n now?: string;\n}): Promise<CommitmentLedgerLifecycleResult> {\n if (!options.enabled) {\n return { transitionedToExpired: [], deletedResolved: [] };\n }\n\n const nowIso = assertIsoRecordedAt(options.now ?? new Date().toISOString(), \"now\");\n const nowMs = Date.parse(nowIso);\n const { entryFiles } = await readCommitmentLedgerEntries(options);\n\n const transitionedToExpired: CommitmentLedgerEntry[] = [];\n const deletedResolved: CommitmentLedgerEntry[] = [];\n\n for (const { entry, filePath } of entryFiles) {\n\n if (isOverdueOpenEntry(entry, nowMs)) {\n const updated = validateCommitmentLedgerEntry({\n ...entry,\n state: \"expired\",\n stateChangedAt: nowIso,\n resolvedAt: nowIso,\n });\n await writeFile(filePath, JSON.stringify(updated, null, 2), \"utf8\");\n transitionedToExpired.push(updated);\n continue;\n }\n\n if (isDecayEligibleResolvedEntry(entry, nowMs, options.decayDays)) {\n await unlink(filePath);\n deletedResolved.push(entry);\n }\n }\n\n return { transitionedToExpired, deletedResolved };\n}\n\nexport async function getCommitmentLedgerStatus(options: {\n memoryDir: string;\n commitmentLedgerDir?: string;\n enabled: boolean;\n lifecycleEnabled?: boolean;\n staleDays?: number;\n decayDays?: number;\n now?: string;\n}): Promise<CommitmentLedgerStatus> {\n const rootDir = resolveCommitmentLedgerDir(options.memoryDir, options.commitmentLedgerDir);\n const entriesDir = path.join(rootDir, \"entries\");\n const { files, entries, invalidEntries } = await readCommitmentLedgerEntries(options);\n entries.sort((a, b) => b.recordedAt.localeCompare(a.recordedAt));\n const nowMs = Date.parse(assertIsoRecordedAt(options.now ?? new Date().toISOString(), \"now\"));\n const staleDays = Math.max(1, Math.floor(options.staleDays ?? 14));\n const decayDays = Math.max(1, Math.floor(options.decayDays ?? 90));\n\n const byKind: Partial<Record<CommitmentLedgerKind, number>> = {};\n const byState: Partial<Record<CommitmentLedgerState, number>> = {};\n for (const entry of entries) {\n byKind[entry.kind] = (byKind[entry.kind] ?? 0) + 1;\n byState[entry.state] = (byState[entry.state] ?? 0) + 1;\n }\n\n return {\n enabled: options.enabled,\n rootDir,\n entriesDir,\n entries: {\n total: files.length,\n valid: entries.length,\n invalid: invalidEntries.length,\n byKind,\n byState,\n latestEntryId: entries[0]?.entryId,\n latestRecordedAt: entries[0]?.recordedAt,\n latestSessionKey: entries[0]?.sessionKey,\n },\n latestEntry: entries[0],\n invalidEntries,\n lifecycle: options.lifecycleEnabled\n ? {\n overdueOpen: entries.filter((entry) => isOverdueOpenEntry(entry, nowMs)).length,\n staleOpen: entries.filter((entry) => isStaleOpenEntry(entry, nowMs, staleDays)).length,\n decayEligibleResolved: entries.filter((entry) => isDecayEligibleResolvedEntry(entry, nowMs, decayDays)).length,\n }\n : undefined,\n };\n}\n"],"mappings":"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","names":[]}
|