@remnic/core 1.1.11 → 1.1.13
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/README.md +3 -3
- package/dist/access-cli.d.ts +2 -1
- package/dist/access-cli.js +293 -104
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +31 -62
- package/dist/access-http.js +53 -35
- package/dist/access-mcp.d.ts +31 -8
- package/dist/access-mcp.js +45 -34
- package/dist/access-schema.d.ts +197 -14
- package/dist/access-schema.js +16 -5
- package/dist/access-service-DcCDmNYC.d.ts +1542 -0
- package/dist/access-service.d.ts +30 -9
- package/dist/access-service.js +42 -32
- package/dist/action-confidence.d.ts +83 -0
- package/dist/action-confidence.js +22 -0
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-memory-bridge.js +2 -2
- package/dist/active-recall.d.ts +1 -1
- 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/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +23 -6
- package/dist/boxes.d.ts +7 -0
- package/dist/boxes.js +1 -1
- package/dist/briefing.d.ts +5 -3
- package/dist/briefing.js +10 -7
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-surprise-report.js +1 -1
- package/dist/buffer.d.ts +18 -4
- package/dist/buffer.js +1 -1
- package/dist/calibration.d.ts +1 -1
- package/dist/calibration.js +6 -6
- 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 +9 -29
- 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 +2 -2
- package/dist/causal-consolidation.js +28 -17
- 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-4RA3C3EV.js +60 -0
- package/dist/chunk-4RA3C3EV.js.map +1 -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-5NXIJZFX.js +180 -0
- package/dist/chunk-5NXIJZFX.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-6NKAQ74D.js +2237 -0
- package/dist/chunk-6NKAQ74D.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-AC5LO7IU.js +308 -0
- package/dist/chunk-AC5LO7IU.js.map +1 -0
- package/dist/chunk-AGZQD76C.js +201 -0
- package/dist/chunk-AGZQD76C.js.map +1 -0
- package/dist/chunk-AH2JUU6X.js +336 -0
- package/dist/chunk-AH2JUU6X.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-C5BCH4ZS.js +317 -0
- package/dist/chunk-C5BCH4ZS.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-DB5A3NHS.js +906 -0
- package/dist/chunk-DB5A3NHS.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-EDTHC6UD.js.map +1 -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-FBYESMQ2.js.map +1 -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-MGKYQQYF.js.map +1 -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-OAZ5MFUB.js +4124 -0
- package/dist/chunk-OAZ5MFUB.js.map +1 -0
- package/dist/chunk-OIGNEXKZ.js +237 -0
- package/dist/chunk-OIGNEXKZ.js.map +1 -0
- package/dist/chunk-OZKZ2TRP.js +3729 -0
- package/dist/chunk-OZKZ2TRP.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-PD6O7AXF.js +110 -0
- package/dist/chunk-PD6O7AXF.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-PYPOFEMK.js +294 -0
- package/dist/chunk-PYPOFEMK.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-QDZ2RLEC.js +908 -0
- package/dist/chunk-QDZ2RLEC.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-RK6F44Y6.js +84 -0
- package/dist/chunk-RK6F44Y6.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-SOAU2OE2.js +125 -0
- package/dist/chunk-SOAU2OE2.js.map +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-V5OCT34X.js.map +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-VWT3F4IV.js +2161 -0
- package/dist/chunk-VWT3F4IV.js.map +1 -0
- package/dist/chunk-W3LR522O.js +2296 -0
- package/dist/chunk-W3LR522O.js.map +1 -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 +42 -10
- package/dist/cli.js +121 -58
- package/dist/codex-cli-fallback.d.ts +1 -0
- package/dist/codex-cli-fallback.js +1 -1
- 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/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +5 -3
- 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 +4 -2
- package/dist/consolidation-undo.d.ts +4 -2
- 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/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer-wiring.js +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- 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 +9 -6
- package/dist/entity-schema.d.ts +1 -1
- package/dist/evals.js +1 -1
- package/dist/event-order-recall.d.ts +17 -0
- package/dist/event-order-recall.js +11 -0
- package/dist/event-order-recall.js.map +1 -0
- package/dist/evidence-pack.d.ts +3 -1
- package/dist/evidence-pack.js +5 -3
- package/dist/explicit-capture.d.ts +23 -6
- package/dist/explicit-capture.js +2 -2
- package/dist/explicit-cue-recall.d.ts +4 -1
- package/dist/explicit-cue-recall.js +4 -2
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge-training.js +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction.d.ts +1 -1
- package/dist/extraction.js +11 -10
- package/dist/faiss-adapter-CzPghc4C.d.ts +70 -0
- package/dist/fallback-llm.d.ts +4 -1
- package/dist/fallback-llm.js +6 -6
- package/dist/focused-list-recall.d.ts +17 -0
- package/dist/focused-list-recall.js +11 -0
- package/dist/focused-list-recall.js.map +1 -0
- package/dist/graph-edge-decay-5DI5GUNL.js +207 -0
- package/dist/identity-continuity.d.ts +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/index-DJ9QWMw-.d.ts +35 -0
- package/dist/index.d.ts +107 -715
- package/dist/index.js +657 -2611
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +1 -1
- package/dist/intent.js +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/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/live-connectors-runner.js +5 -5
- package/dist/local-llm.d.ts +8 -4
- 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 +124 -0
- package/dist/mcp-memory-inspector-app.js +20 -0
- package/dist/mcp-memory-inspector-app.js.map +1 -0
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +108 -3
- package/dist/memory-projection-store.js +2 -1
- package/dist/memory-provenance.d.ts +57 -0
- package/dist/memory-provenance.js +13 -0
- package/dist/memory-provenance.js.map +1 -0
- 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/models-json.d.ts +1 -1
- 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/native-knowledge.d.ts +1 -1
- 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.d.ts +1 -1
- package/dist/objective-state-writers.js +2 -2
- package/dist/operator-toolkit.d.ts +4 -2
- package/dist/operator-toolkit.js +35 -17
- 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 +24 -7
- package/dist/orchestrator.js +107 -65
- package/dist/path-MR5JPYOP.js +9 -0
- package/dist/path-MR5JPYOP.js.map +1 -0
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/qmd-recall-cache.d.ts +2 -2
- package/dist/qmd.d.ts +103 -4
- package/dist/qmd.js +23 -5
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +3 -1
- package/dist/recall-explain-renderer.js +5 -3
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +3 -1
- package/dist/recall-xray-cli.d.ts +3 -1
- package/dist/recall-xray-cli.js +6 -4
- package/dist/recall-xray-renderer.d.ts +3 -1
- package/dist/recall-xray-renderer.js +5 -3
- package/dist/recall-xray.d.ts +8 -1
- package/dist/recall-xray.js +4 -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-auth-token.d.ts +1 -1
- package/dist/resolve-provider-secret.js +2 -2
- package/dist/response-guidance-recall.d.ts +18 -0
- package/dist/response-guidance-recall.js +11 -0
- package/dist/response-guidance-recall.js.map +1 -0
- package/dist/resume-bundles.js +7 -5
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.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/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 +3 -3
- package/dist/semantic-consolidation.js +15 -8
- package/dist/semantic-rule-promotion.js +9 -6
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +10 -7
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- 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/signal.d.ts +1 -1
- 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 +6 -2
- package/dist/storage.js +8 -5
- package/dist/summarizer.d.ts +6 -1
- package/dist/summarizer.js +11 -10
- package/dist/summary-snapshot.d.ts +1 -1
- 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/targeted-fact-recall.d.ts +17 -0
- package/dist/targeted-fact-recall.js +11 -0
- package/dist/targeted-fact-recall.js.map +1 -0
- package/dist/telemetry-transcript.d.ts +7 -0
- package/dist/telemetry-transcript.js +16 -0
- package/dist/telemetry-transcript.js.map +1 -0
- package/dist/temporal-supersession.d.ts +4 -2
- package/dist/temporal-supersession.js +2 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +6 -1
- package/dist/threading.js +2 -1
- package/dist/tier-migration.d.ts +5 -3
- package/dist/tier-routing.d.ts +1 -1
- package/dist/tokens.js +2 -2
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +16 -2
- 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/trust-zones.d.ts +3 -2
- package/dist/trust-zones.js +1 -1
- package/dist/types.d.ts +88 -3
- package/dist/types.js +1 -1
- package/dist/user-model.d.ts +37 -0
- package/dist/user-model.js +28 -0
- package/dist/user-model.js.map +1 -0
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +11 -8
- 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 +257 -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-BkXt3di1.d.ts +0 -2039
- package/dist/capsule-crypto-SJS5VVAP.js +0 -18
- package/dist/capsule-export-LLEVB2RG.js +0 -17
- package/dist/capsule-import-UW45R2MZ.js +0 -16
- package/dist/capsule-merge-DI7PNQ2H.js +0 -189
- package/dist/chunk-2LGMW3DJ.js +0 -111
- package/dist/chunk-2YMTO4ZJ.js +0 -265
- package/dist/chunk-2YMTO4ZJ.js.map +0 -1
- package/dist/chunk-363MWCD3.js +0 -9683
- package/dist/chunk-363MWCD3.js.map +0 -1
- package/dist/chunk-36CTNQY7.js +0 -1554
- package/dist/chunk-36CTNQY7.js.map +0 -1
- package/dist/chunk-457A4P3L.js +0 -119
- package/dist/chunk-457A4P3L.js.map +0 -1
- package/dist/chunk-4DXC6HQQ.js +0 -1837
- package/dist/chunk-4DXC6HQQ.js.map +0 -1
- package/dist/chunk-4IS4SXIQ.js +0 -2040
- package/dist/chunk-57QNCUEZ.js +0 -1914
- package/dist/chunk-57QNCUEZ.js.map +0 -1
- package/dist/chunk-6AUUAZEX.js +0 -150
- package/dist/chunk-6AUUAZEX.js.map +0 -1
- package/dist/chunk-6TBWYBJ3.js +0 -236
- package/dist/chunk-6XA7UN4Z.js +0 -135
- package/dist/chunk-6Z6UH6TK.js +0 -2129
- package/dist/chunk-6Z6UH6TK.js.map +0 -1
- package/dist/chunk-74EMIVE4.js +0 -329
- package/dist/chunk-74EMIVE4.js.map +0 -1
- package/dist/chunk-74WWN7ZW.js +0 -82
- package/dist/chunk-74WWN7ZW.js.map +0 -1
- package/dist/chunk-767ODGE6.js +0 -183
- package/dist/chunk-A4ACKWIW.js +0 -289
- package/dist/chunk-A4ACKWIW.js.map +0 -1
- package/dist/chunk-ASAITVLA.js +0 -64
- package/dist/chunk-ASAITVLA.js.map +0 -1
- package/dist/chunk-C5HUWVH2.js +0 -891
- package/dist/chunk-C5HUWVH2.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-E6K4NIEU.js +0 -747
- package/dist/chunk-E6K4NIEU.js.map +0 -1
- package/dist/chunk-EEQLFRUM.js +0 -89
- package/dist/chunk-EQINRHYR.js +0 -672
- package/dist/chunk-EQINRHYR.js.map +0 -1
- package/dist/chunk-ETOW6ACV.js +0 -158
- package/dist/chunk-ETOW6ACV.js.map +0 -1
- package/dist/chunk-EYNQTST2.js +0 -721
- 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-GGD5W7TB.js +0 -105
- package/dist/chunk-GGD5W7TB.js.map +0 -1
- package/dist/chunk-GVPWB7EY.js +0 -390
- package/dist/chunk-GVPWB7EY.js.map +0 -1
- package/dist/chunk-HJYHRE4S.js +0 -647
- package/dist/chunk-I6BQZSML.js +0 -1451
- package/dist/chunk-I6BQZSML.js.map +0 -1
- package/dist/chunk-IBX3VFOM.js +0 -446
- package/dist/chunk-IBX3VFOM.js.map +0 -1
- 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-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-KBYWQWSB.js +0 -271
- package/dist/chunk-KUHRUM6B.js +0 -14397
- package/dist/chunk-KUHRUM6B.js.map +0 -1
- package/dist/chunk-KWBPHZUU.js +0 -83
- package/dist/chunk-KWBPHZUU.js.map +0 -1
- package/dist/chunk-LIO5X3CM.js +0 -596
- package/dist/chunk-MARWOCVP.js +0 -48
- package/dist/chunk-MCC6KDQF.js +0 -5095
- package/dist/chunk-MCC6KDQF.js.map +0 -1
- package/dist/chunk-N5AKDXAI.js +0 -74
- package/dist/chunk-NN3LPQ5D.js +0 -936
- package/dist/chunk-NN3LPQ5D.js.map +0 -1
- package/dist/chunk-O4XJUPSF.js +0 -533
- package/dist/chunk-O4XJUPSF.js.map +0 -1
- 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-P73JTV34.js +0 -275
- package/dist/chunk-P73JTV34.js.map +0 -1
- package/dist/chunk-P77UEOU2.js +0 -1521
- package/dist/chunk-P77UEOU2.js.map +0 -1
- package/dist/chunk-PB5KW5PL.js +0 -118
- package/dist/chunk-PHNGXFQ6.js +0 -623
- package/dist/chunk-PHNGXFQ6.js.map +0 -1
- package/dist/chunk-QIGOEM65.js +0 -228
- package/dist/chunk-RXTFCYQF.js +0 -108
- package/dist/chunk-S2JJBLJG.js +0 -2101
- package/dist/chunk-S2JJBLJG.js.map +0 -1
- package/dist/chunk-S3IP6R6K.js +0 -219
- package/dist/chunk-S3IP6R6K.js.map +0 -1
- package/dist/chunk-SRBJUAMP.js +0 -403
- package/dist/chunk-SRBJUAMP.js.map +0 -1
- package/dist/chunk-URB2WSKZ.js +0 -350
- package/dist/chunk-URB2WSKZ.js.map +0 -1
- package/dist/chunk-VQXK37XA.js +0 -26
- package/dist/chunk-VQXK37XA.js.map +0 -1
- package/dist/chunk-VTU2B4VF.js +0 -146
- package/dist/chunk-VTU2B4VF.js.map +0 -1
- package/dist/chunk-VX2IUQFE.js +0 -613
- package/dist/chunk-VX2IUQFE.js.map +0 -1
- package/dist/chunk-WGK4VHGP.js +0 -4292
- package/dist/chunk-WGK4VHGP.js.map +0 -1
- package/dist/chunk-WTFWLUSX.js +0 -827
- package/dist/chunk-WTFWLUSX.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-Y5KDIOKF.js +0 -2403
- package/dist/chunk-Y5KDIOKF.js.map +0 -1
- 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-Z5S5HNGY.js +0 -2280
- package/dist/chunk-Z5S5HNGY.js.map +0 -1
- package/dist/chunk-ZL4S7ARC.js +0 -53
- package/dist/chunk-ZTSE2ZJ6.js +0 -190
- package/dist/chunk-ZTSE2ZJ6.js.map +0 -1
- package/dist/cli-Cvy2SNhF.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-3Z6YW7YA.js +0 -413
- package/dist/contradiction-scan-3Z6YW7YA.js.map +0 -1
- package/dist/engine-FOC3IJLA.js +0 -28
- package/dist/fs-utils-IRVUFB6G.js +0 -30
- package/dist/graph-edge-decay-PWB63GRE.js +0 -207
- package/dist/index-1qIcnbG1.d.ts +0 -34
- package/dist/memory-governance-F3QOJGEY.js +0 -37
- package/dist/memory-projection-store-CY8TU40w.d.ts +0 -222
- package/dist/orchestrator-AOQMo7QI.d.ts +0 -1784
- 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 → action-confidence.js.map} +0 -0
- /package/dist/{capsule-export-LLEVB2RG.js.map → adapters/claude-code.js.map} +0 -0
- /package/dist/{capsule-import-UW45R2MZ.js.map → adapters/codex.js.map} +0 -0
- /package/dist/{contradiction-review-5LTTVDQV.js.map → adapters/hermes.js.map} +0 -0
- /package/dist/{engine-FOC3IJLA.js.map → adapters/index.js.map} +0 -0
- /package/dist/{fs-utils-IRVUFB6G.js.map → adapters/registry.js.map} +0 -0
- /package/dist/{memory-governance-F3QOJGEY.js.map → adapters/replit.js.map} +0 -0
- /package/dist/{path-RMTY5Y5A.js.map → adapters/types.js.map} +0 -0
- /package/dist/{secure-store-4R2GSO7S.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-KBYWQWSB.js.map → chunk-4CRG46BG.js.map} +0 -0
- /package/dist/{chunk-LIO5X3CM.js.map → chunk-7IASACLB.js.map} +0 -0
- /package/dist/{chunk-EYNQTST2.js.map → chunk-EFJ3MQ4V.js.map} +0 -0
- /package/dist/{chunk-D54LZC5L.js.map → chunk-FDU6HUUL.js.map} +0 -0
- /package/dist/{chunk-QIGOEM65.js.map → chunk-GGKRUQOO.js.map} +0 -0
- /package/dist/{chunk-HJYHRE4S.js.map → chunk-GL6I6MEQ.js.map} +0 -0
- /package/dist/{state-store-3EH7HYIN.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-PB5KW5PL.js.map → chunk-MC26UJIM.js.map} +0 -0
- /package/dist/{chunk-ZL4S7ARC.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-RXTFCYQF.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/{types-V3FJ26TF.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/{chunk-MARWOCVP.js.map → chunk-XIG5PDM7.js.map} +0 -0
- /package/dist/{chunk-6XA7UN4Z.js.map → chunk-XVZ7B3HG.js.map} +0 -0
- /package/dist/{graph-edge-decay-PWB63GRE.js.map → graph-edge-decay-5DI5GUNL.js.map} +0 -0
|
@@ -0,0 +1,813 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { test } from "node:test";
|
|
3
|
+
import { promises as fs } from "node:fs";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { Writable } from "node:stream";
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
openTraceRecorder,
|
|
10
|
+
replayTrace,
|
|
11
|
+
parseSnapshotLine,
|
|
12
|
+
computeReplayDelay,
|
|
13
|
+
parseSpeedFlag,
|
|
14
|
+
sleepAbortable,
|
|
15
|
+
isAbortError,
|
|
16
|
+
flushWithTimeout,
|
|
17
|
+
} from "./trace.js";
|
|
18
|
+
import { stripAnsi } from "./tui.js";
|
|
19
|
+
import type { ConsoleStateSnapshot } from "./state.js";
|
|
20
|
+
|
|
21
|
+
class CaptureStream extends Writable {
|
|
22
|
+
public chunks: string[] = [];
|
|
23
|
+
override _write(
|
|
24
|
+
chunk: unknown,
|
|
25
|
+
_enc: BufferEncoding,
|
|
26
|
+
cb: (err?: Error | null) => void,
|
|
27
|
+
): void {
|
|
28
|
+
this.chunks.push(typeof chunk === "string" ? chunk : String(chunk));
|
|
29
|
+
cb();
|
|
30
|
+
}
|
|
31
|
+
text(): string {
|
|
32
|
+
return this.chunks.join("");
|
|
33
|
+
}
|
|
34
|
+
textPlain(): string {
|
|
35
|
+
return stripAnsi(this.text());
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function makeSnapshot(
|
|
40
|
+
overrides: Partial<ConsoleStateSnapshot> = {},
|
|
41
|
+
): ConsoleStateSnapshot {
|
|
42
|
+
return {
|
|
43
|
+
capturedAt: "2026-04-26T00:00:00.000Z",
|
|
44
|
+
bufferState: { turnsCount: 0, byteCount: 0 },
|
|
45
|
+
extractionQueue: { depth: 0, recentVerdicts: [] },
|
|
46
|
+
dedupRecent: [],
|
|
47
|
+
maintenanceLedgerTail: [],
|
|
48
|
+
qmdProbe: { available: true, daemonMode: true, debug: "" },
|
|
49
|
+
daemon: { uptimeMs: 0, version: "test" },
|
|
50
|
+
errors: [],
|
|
51
|
+
...overrides,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async function withTempDir<T>(fn: (dir: string) => Promise<T>): Promise<T> {
|
|
56
|
+
const dir = await fs.mkdtemp(path.join(os.tmpdir(), "remnic-trace-"));
|
|
57
|
+
try {
|
|
58
|
+
return await fn(dir);
|
|
59
|
+
} finally {
|
|
60
|
+
await fs.rm(dir, { recursive: true, force: true });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
test("openTraceRecorder writes one parseable JSON object per line", async () => {
|
|
65
|
+
await withTempDir(async (dir) => {
|
|
66
|
+
const tracePath = path.join(dir, "nested", "trace.jsonl");
|
|
67
|
+
const recorder = await openTraceRecorder(tracePath);
|
|
68
|
+
try {
|
|
69
|
+
await recorder.append(
|
|
70
|
+
makeSnapshot({ capturedAt: "2026-04-26T00:00:00.000Z" }),
|
|
71
|
+
);
|
|
72
|
+
await recorder.append(
|
|
73
|
+
makeSnapshot({
|
|
74
|
+
capturedAt: "2026-04-26T00:00:02.000Z",
|
|
75
|
+
bufferState: { turnsCount: 5, byteCount: 100 },
|
|
76
|
+
}),
|
|
77
|
+
);
|
|
78
|
+
await recorder.append(
|
|
79
|
+
makeSnapshot({ capturedAt: "2026-04-26T00:00:04.000Z" }),
|
|
80
|
+
);
|
|
81
|
+
} finally {
|
|
82
|
+
await recorder.close();
|
|
83
|
+
}
|
|
84
|
+
assert.equal(recorder.getLastError(), null);
|
|
85
|
+
|
|
86
|
+
const raw = await fs.readFile(tracePath, "utf-8");
|
|
87
|
+
const lines = raw.split("\n").filter((l) => l.length > 0);
|
|
88
|
+
assert.equal(lines.length, 3, "expected three frames in the trace");
|
|
89
|
+
for (const line of lines) {
|
|
90
|
+
const parsed = JSON.parse(line);
|
|
91
|
+
assert.equal(typeof parsed.capturedAt, "string");
|
|
92
|
+
assert.ok(parsed.bufferState, "each line carries a bufferState");
|
|
93
|
+
}
|
|
94
|
+
const second = JSON.parse(lines[1]);
|
|
95
|
+
assert.equal(second.bufferState.turnsCount, 5);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test("openTraceRecorder appends to an existing file rather than truncating", async () => {
|
|
100
|
+
await withTempDir(async (dir) => {
|
|
101
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
102
|
+
const r1 = await openTraceRecorder(tracePath);
|
|
103
|
+
await r1.append(makeSnapshot({ capturedAt: "2026-04-26T00:00:00.000Z" }));
|
|
104
|
+
await r1.close();
|
|
105
|
+
const r2 = await openTraceRecorder(tracePath);
|
|
106
|
+
await r2.append(makeSnapshot({ capturedAt: "2026-04-26T00:00:01.000Z" }));
|
|
107
|
+
await r2.close();
|
|
108
|
+
const raw = await fs.readFile(tracePath, "utf-8");
|
|
109
|
+
const lines = raw.split("\n").filter((l) => l.length > 0);
|
|
110
|
+
assert.equal(lines.length, 2);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
test("replayTrace renders every frame and emits expected stdout snapshots", async () => {
|
|
115
|
+
await withTempDir(async (dir) => {
|
|
116
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
117
|
+
const recorder = await openTraceRecorder(tracePath);
|
|
118
|
+
await recorder.append(
|
|
119
|
+
makeSnapshot({
|
|
120
|
+
capturedAt: "2026-04-26T00:00:00.000Z",
|
|
121
|
+
bufferState: { turnsCount: 1, byteCount: 10 },
|
|
122
|
+
}),
|
|
123
|
+
);
|
|
124
|
+
await recorder.append(
|
|
125
|
+
makeSnapshot({
|
|
126
|
+
capturedAt: "2026-04-26T00:00:02.000Z",
|
|
127
|
+
bufferState: { turnsCount: 7, byteCount: 70 },
|
|
128
|
+
}),
|
|
129
|
+
);
|
|
130
|
+
await recorder.append(
|
|
131
|
+
makeSnapshot({
|
|
132
|
+
capturedAt: "2026-04-26T00:00:04.000Z",
|
|
133
|
+
bufferState: { turnsCount: 11, byteCount: 99 },
|
|
134
|
+
}),
|
|
135
|
+
);
|
|
136
|
+
await recorder.close();
|
|
137
|
+
|
|
138
|
+
const stream = new CaptureStream();
|
|
139
|
+
const result = await replayTrace(tracePath, {
|
|
140
|
+
output: stream,
|
|
141
|
+
speed: 1000, // collapse delays for the test
|
|
142
|
+
sleep: () => Promise.resolve(),
|
|
143
|
+
manageCursor: false,
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
assert.equal(result.framesRendered, 3);
|
|
147
|
+
assert.equal(result.framesSkipped, 0);
|
|
148
|
+
assert.ok(result.lastSnapshot);
|
|
149
|
+
assert.equal(result.lastSnapshot?.bufferState.turnsCount, 11);
|
|
150
|
+
|
|
151
|
+
const text = stream.textPlain();
|
|
152
|
+
// All three buffer-state values should have been rendered.
|
|
153
|
+
assert.match(text, /turns=1 bytes=10/);
|
|
154
|
+
assert.match(text, /turns=7 bytes=70/);
|
|
155
|
+
assert.match(text, /turns=11 bytes=99/);
|
|
156
|
+
// The header is reused from the live TUI.
|
|
157
|
+
assert.match(text, /remnic console/);
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
test("replayTrace skips malformed lines without crashing", async () => {
|
|
162
|
+
await withTempDir(async (dir) => {
|
|
163
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
164
|
+
const valid = JSON.stringify(
|
|
165
|
+
makeSnapshot({ capturedAt: "2026-04-26T00:00:00.000Z" }),
|
|
166
|
+
);
|
|
167
|
+
const corrupt =
|
|
168
|
+
`${valid}\n` +
|
|
169
|
+
"{not json\n" +
|
|
170
|
+
"null\n" +
|
|
171
|
+
"[1,2,3]\n" +
|
|
172
|
+
`${JSON.stringify(makeSnapshot({ capturedAt: "2026-04-26T00:00:01.000Z" }))}\n`;
|
|
173
|
+
await fs.writeFile(tracePath, corrupt, "utf-8");
|
|
174
|
+
|
|
175
|
+
const stream = new CaptureStream();
|
|
176
|
+
const result = await replayTrace(tracePath, {
|
|
177
|
+
output: stream,
|
|
178
|
+
sleep: () => Promise.resolve(),
|
|
179
|
+
manageCursor: false,
|
|
180
|
+
});
|
|
181
|
+
assert.equal(result.framesRendered, 2);
|
|
182
|
+
// Three malformed lines: bad JSON, null literal, array literal.
|
|
183
|
+
assert.equal(result.framesSkipped, 3);
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
test("replayTrace --speed 2 halves the inter-frame delay vs --speed 1", async () => {
|
|
188
|
+
await withTempDir(async (dir) => {
|
|
189
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
190
|
+
const recorder = await openTraceRecorder(tracePath);
|
|
191
|
+
// Two frames captured 4s apart.
|
|
192
|
+
await recorder.append(
|
|
193
|
+
makeSnapshot({ capturedAt: "2026-04-26T00:00:00.000Z" }),
|
|
194
|
+
);
|
|
195
|
+
await recorder.append(
|
|
196
|
+
makeSnapshot({ capturedAt: "2026-04-26T00:00:04.000Z" }),
|
|
197
|
+
);
|
|
198
|
+
await recorder.close();
|
|
199
|
+
|
|
200
|
+
const recordDelays = async (
|
|
201
|
+
speed: number,
|
|
202
|
+
): Promise<number[]> => {
|
|
203
|
+
const delays: number[] = [];
|
|
204
|
+
const stream = new CaptureStream();
|
|
205
|
+
await replayTrace(tracePath, {
|
|
206
|
+
output: stream,
|
|
207
|
+
speed,
|
|
208
|
+
sleep: (ms) => {
|
|
209
|
+
delays.push(ms);
|
|
210
|
+
return Promise.resolve();
|
|
211
|
+
},
|
|
212
|
+
manageCursor: false,
|
|
213
|
+
});
|
|
214
|
+
return delays;
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
const oneX = await recordDelays(1);
|
|
218
|
+
const twoX = await recordDelays(2);
|
|
219
|
+
|
|
220
|
+
assert.deepEqual(oneX, [4000]);
|
|
221
|
+
assert.deepEqual(twoX, [2000]);
|
|
222
|
+
assert.equal(twoX[0], oneX[0] / 2);
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
test("computeReplayDelay clamps and respects the speed multiplier", () => {
|
|
227
|
+
// Normal case.
|
|
228
|
+
assert.equal(computeReplayDelay(2000, 1), 2000);
|
|
229
|
+
assert.equal(computeReplayDelay(2000, 2), 1000);
|
|
230
|
+
assert.equal(computeReplayDelay(2000, 0.5), 4000);
|
|
231
|
+
// Negative / zero deltas → no wait.
|
|
232
|
+
assert.equal(computeReplayDelay(-100, 1), 0);
|
|
233
|
+
assert.equal(computeReplayDelay(0, 1), 0);
|
|
234
|
+
// Non-finite → no wait.
|
|
235
|
+
assert.equal(computeReplayDelay(Number.NaN, 1), 0);
|
|
236
|
+
// Speed Infinity → no wait.
|
|
237
|
+
assert.equal(computeReplayDelay(2000, Infinity), 0);
|
|
238
|
+
// Cap at MAX_REPLAY_DELAY_MS (60s).
|
|
239
|
+
assert.equal(computeReplayDelay(10 * 60 * 1000, 1), 60_000);
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
test("parseSpeedFlag accepts positive numbers and rejects garbage", () => {
|
|
243
|
+
assert.equal(parseSpeedFlag(undefined), 1);
|
|
244
|
+
assert.equal(parseSpeedFlag(null), 1);
|
|
245
|
+
assert.equal(parseSpeedFlag(2), 2);
|
|
246
|
+
assert.equal(parseSpeedFlag("0.5"), 0.5);
|
|
247
|
+
assert.throws(() => parseSpeedFlag("0"), /must be > 0/);
|
|
248
|
+
assert.throws(() => parseSpeedFlag("-1"), /must be > 0/);
|
|
249
|
+
assert.throws(() => parseSpeedFlag("abc"), /must be a positive number/);
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
test("parseSnapshotLine handles all the JSON edge cases", () => {
|
|
253
|
+
assert.equal(parseSnapshotLine(""), null);
|
|
254
|
+
assert.equal(parseSnapshotLine("not json"), null);
|
|
255
|
+
assert.equal(parseSnapshotLine("null"), null);
|
|
256
|
+
assert.equal(parseSnapshotLine("[1,2,3]"), null);
|
|
257
|
+
assert.equal(parseSnapshotLine("42"), null);
|
|
258
|
+
const snap = makeSnapshot();
|
|
259
|
+
const parsed = parseSnapshotLine(JSON.stringify(snap));
|
|
260
|
+
assert.ok(parsed);
|
|
261
|
+
assert.equal(parsed?.capturedAt, snap.capturedAt);
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
test("recorder error path does not crash on poisoned writes", async () => {
|
|
265
|
+
await withTempDir(async (dir) => {
|
|
266
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
267
|
+
const recorder = await openTraceRecorder(tracePath);
|
|
268
|
+
// First append succeeds.
|
|
269
|
+
await recorder.append(makeSnapshot({ capturedAt: "2026-04-26T00:00:00.000Z" }));
|
|
270
|
+
// Close the recorder — subsequent appends become no-ops.
|
|
271
|
+
await recorder.close();
|
|
272
|
+
// Second append after close — must not throw.
|
|
273
|
+
await recorder.append(makeSnapshot({ capturedAt: "2026-04-26T00:00:01.000Z" }));
|
|
274
|
+
const raw = await fs.readFile(tracePath, "utf-8");
|
|
275
|
+
const lines = raw.split("\n").filter((l) => l.length > 0);
|
|
276
|
+
assert.equal(lines.length, 1, "post-close append should be dropped");
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
test("replayTrace defaultSleep aborts immediately on signal (Codex P2 regression)", async () => {
|
|
281
|
+
// Regression for Codex review on PR #732: the default sleep used
|
|
282
|
+
// setTimeout with no abort hook, so SIGINT mid-wait could leave
|
|
283
|
+
// Ctrl-C unresponsive for up to MAX_REPLAY_DELAY_MS (60s). The
|
|
284
|
+
// default sleep is now bound to options.signal; aborting during a
|
|
285
|
+
// wait must resolve the sleep promise immediately.
|
|
286
|
+
await withTempDir(async (dir) => {
|
|
287
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
288
|
+
const recorder = await openTraceRecorder(tracePath);
|
|
289
|
+
// Two frames 5 seconds apart — without abort wiring, replay
|
|
290
|
+
// would block for 5s after the first frame paints.
|
|
291
|
+
await recorder.append(
|
|
292
|
+
makeSnapshot({ capturedAt: "2026-04-26T00:00:00.000Z" }),
|
|
293
|
+
);
|
|
294
|
+
await recorder.append(
|
|
295
|
+
makeSnapshot({ capturedAt: "2026-04-26T00:00:05.000Z" }),
|
|
296
|
+
);
|
|
297
|
+
await recorder.close();
|
|
298
|
+
|
|
299
|
+
const stream = new CaptureStream();
|
|
300
|
+
const ac = new AbortController();
|
|
301
|
+
// Abort 50ms after replay starts — should land mid-sleep on
|
|
302
|
+
// the 5000ms inter-frame wait.
|
|
303
|
+
setTimeout(() => ac.abort(), 50);
|
|
304
|
+
|
|
305
|
+
const start = Date.now();
|
|
306
|
+
const result = await replayTrace(tracePath, {
|
|
307
|
+
output: stream,
|
|
308
|
+
manageCursor: false,
|
|
309
|
+
signal: ac.signal,
|
|
310
|
+
// Use the default sleep (no override) so we exercise the
|
|
311
|
+
// abort-aware code path.
|
|
312
|
+
});
|
|
313
|
+
const elapsed = Date.now() - start;
|
|
314
|
+
|
|
315
|
+
// Without the fix, this would take ~5000ms. With the fix, it
|
|
316
|
+
// resolves shortly after the abort fires (well under 1s).
|
|
317
|
+
assert.ok(
|
|
318
|
+
elapsed < 1000,
|
|
319
|
+
`expected abort to short-circuit sleep, took ${elapsed}ms`,
|
|
320
|
+
);
|
|
321
|
+
// First frame should have rendered before the abort interrupted.
|
|
322
|
+
assert.equal(result.framesRendered, 1);
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
test("recorder close() drains pending writes (Codex P1 regression)", async () => {
|
|
327
|
+
// Regression for Codex review on PR #732: `close()` must NOT flip
|
|
328
|
+
// `closed = true` before draining the write chain. Queued writes
|
|
329
|
+
// begin with `if (closed) return;`, so flipping the flag first
|
|
330
|
+
// would silently drop frames the caller already enqueued via
|
|
331
|
+
// `append()` immediately before `close()`.
|
|
332
|
+
await withTempDir(async (dir) => {
|
|
333
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
334
|
+
const recorder = await openTraceRecorder(tracePath);
|
|
335
|
+
// Fire-and-forget a batch of appends, then close immediately.
|
|
336
|
+
// Without the fix, several of these would be dropped.
|
|
337
|
+
const writes: Promise<void>[] = [];
|
|
338
|
+
for (let i = 0; i < 10; i++) {
|
|
339
|
+
writes.push(
|
|
340
|
+
recorder.append(
|
|
341
|
+
makeSnapshot({
|
|
342
|
+
capturedAt: `2026-04-26T00:00:${String(i).padStart(2, "0")}.000Z`,
|
|
343
|
+
}),
|
|
344
|
+
),
|
|
345
|
+
);
|
|
346
|
+
}
|
|
347
|
+
// Do NOT await `writes` first — close concurrently with pending appends.
|
|
348
|
+
const closePromise = recorder.close();
|
|
349
|
+
await Promise.all(writes);
|
|
350
|
+
await closePromise;
|
|
351
|
+
const raw = await fs.readFile(tracePath, "utf-8");
|
|
352
|
+
const lines = raw.split("\n").filter((l) => l.length > 0);
|
|
353
|
+
assert.equal(
|
|
354
|
+
lines.length,
|
|
355
|
+
10,
|
|
356
|
+
"all queued writes must drain before close completes",
|
|
357
|
+
);
|
|
358
|
+
});
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
test("recorder serializes concurrent appends without interleaving", async () => {
|
|
362
|
+
await withTempDir(async (dir) => {
|
|
363
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
364
|
+
const recorder = await openTraceRecorder(tracePath);
|
|
365
|
+
const writes: Promise<void>[] = [];
|
|
366
|
+
for (let i = 0; i < 25; i++) {
|
|
367
|
+
writes.push(
|
|
368
|
+
recorder.append(
|
|
369
|
+
makeSnapshot({
|
|
370
|
+
capturedAt: `2026-04-26T00:00:${String(i).padStart(2, "0")}.000Z`,
|
|
371
|
+
}),
|
|
372
|
+
),
|
|
373
|
+
);
|
|
374
|
+
}
|
|
375
|
+
await Promise.all(writes);
|
|
376
|
+
await recorder.close();
|
|
377
|
+
const raw = await fs.readFile(tracePath, "utf-8");
|
|
378
|
+
const lines = raw.split("\n").filter((l) => l.length > 0);
|
|
379
|
+
assert.equal(lines.length, 25);
|
|
380
|
+
// Every line must be parseable — interleaved writes would break this.
|
|
381
|
+
for (const line of lines) {
|
|
382
|
+
const parsed = JSON.parse(line);
|
|
383
|
+
assert.equal(typeof parsed.capturedAt, "string");
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
test("replayTrace honors AbortSignal mid-replay", async () => {
|
|
389
|
+
await withTempDir(async (dir) => {
|
|
390
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
391
|
+
const recorder = await openTraceRecorder(tracePath);
|
|
392
|
+
for (let i = 0; i < 10; i++) {
|
|
393
|
+
await recorder.append(
|
|
394
|
+
makeSnapshot({
|
|
395
|
+
capturedAt: `2026-04-26T00:00:${String(i).padStart(2, "0")}.000Z`,
|
|
396
|
+
}),
|
|
397
|
+
);
|
|
398
|
+
}
|
|
399
|
+
await recorder.close();
|
|
400
|
+
|
|
401
|
+
const stream = new CaptureStream();
|
|
402
|
+
const ac = new AbortController();
|
|
403
|
+
let frames = 0;
|
|
404
|
+
const result = await replayTrace(tracePath, {
|
|
405
|
+
output: stream,
|
|
406
|
+
sleep: async () => {
|
|
407
|
+
frames += 1;
|
|
408
|
+
if (frames >= 2) ac.abort();
|
|
409
|
+
},
|
|
410
|
+
manageCursor: false,
|
|
411
|
+
signal: ac.signal,
|
|
412
|
+
});
|
|
413
|
+
assert.ok(
|
|
414
|
+
result.framesRendered < 10,
|
|
415
|
+
`expected early abort, rendered ${result.framesRendered}`,
|
|
416
|
+
);
|
|
417
|
+
});
|
|
418
|
+
});
|
|
419
|
+
|
|
420
|
+
test("replayTrace restores cursor + closes stream when aborted (Codex P2 #732)", async () => {
|
|
421
|
+
// Regression for Codex review on PR #732: the CLI replay path must
|
|
422
|
+
// wire SIGINT to an AbortController so Ctrl-C exits cleanly and the
|
|
423
|
+
// `replayTrace` `finally` block runs. This test exercises the
|
|
424
|
+
// replay-side contract: aborting mid-stream must still execute the
|
|
425
|
+
// `finally` block — which writes the show-cursor escape and closes
|
|
426
|
+
// the underlying handles. (CLI-side SIGINT wiring is verified by
|
|
427
|
+
// visual inspection; this test guarantees the abort semantics the
|
|
428
|
+
// CLI relies on.)
|
|
429
|
+
await withTempDir(async (dir) => {
|
|
430
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
431
|
+
const recorder = await openTraceRecorder(tracePath);
|
|
432
|
+
for (let i = 0; i < 10; i++) {
|
|
433
|
+
await recorder.append(
|
|
434
|
+
makeSnapshot({
|
|
435
|
+
capturedAt: `2026-04-26T00:00:${String(i).padStart(2, "0")}.000Z`,
|
|
436
|
+
}),
|
|
437
|
+
);
|
|
438
|
+
}
|
|
439
|
+
await recorder.close();
|
|
440
|
+
|
|
441
|
+
const stream = new CaptureStream();
|
|
442
|
+
const ac = new AbortController();
|
|
443
|
+
let frames = 0;
|
|
444
|
+
const result = await replayTrace(tracePath, {
|
|
445
|
+
output: stream,
|
|
446
|
+
sleep: async () => {
|
|
447
|
+
frames += 1;
|
|
448
|
+
if (frames >= 1) ac.abort();
|
|
449
|
+
},
|
|
450
|
+
// manageCursor: true (default) so we can assert the show-cursor
|
|
451
|
+
// sequence was emitted by the `finally` block.
|
|
452
|
+
manageCursor: true,
|
|
453
|
+
signal: ac.signal,
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
assert.ok(
|
|
457
|
+
result.framesRendered < 10,
|
|
458
|
+
`expected early abort, rendered ${result.framesRendered}`,
|
|
459
|
+
);
|
|
460
|
+
|
|
461
|
+
// Cursor cleanup ran: the raw output must contain both the hide
|
|
462
|
+
// (start-of-replay) AND show (`finally`-block) escape sequences.
|
|
463
|
+
const raw = stream.text();
|
|
464
|
+
assert.ok(
|
|
465
|
+
raw.includes("\x1b[?25l"),
|
|
466
|
+
"expected hide-cursor escape at replay start",
|
|
467
|
+
);
|
|
468
|
+
assert.ok(
|
|
469
|
+
raw.includes("\x1b[?25h"),
|
|
470
|
+
"expected show-cursor escape from finally block after abort",
|
|
471
|
+
);
|
|
472
|
+
});
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
test("sleepAbortable resolves on timer expiry without a signal", async () => {
|
|
476
|
+
const start = Date.now();
|
|
477
|
+
await sleepAbortable(20);
|
|
478
|
+
const elapsed = Date.now() - start;
|
|
479
|
+
assert.ok(
|
|
480
|
+
elapsed >= 15,
|
|
481
|
+
`expected timer to elapse (~20ms), got ${elapsed}ms`,
|
|
482
|
+
);
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
test("sleepAbortable rejects with AbortError when signal aborts mid-sleep", async () => {
|
|
486
|
+
const ac = new AbortController();
|
|
487
|
+
setTimeout(() => ac.abort(), 25);
|
|
488
|
+
const start = Date.now();
|
|
489
|
+
let caught: unknown = null;
|
|
490
|
+
try {
|
|
491
|
+
await sleepAbortable(10_000, ac.signal);
|
|
492
|
+
assert.fail("sleepAbortable must reject when signal aborts");
|
|
493
|
+
} catch (err) {
|
|
494
|
+
caught = err;
|
|
495
|
+
}
|
|
496
|
+
const elapsed = Date.now() - start;
|
|
497
|
+
assert.ok(
|
|
498
|
+
isAbortError(caught),
|
|
499
|
+
`expected AbortError, got ${caught instanceof Error ? caught.name : String(caught)}`,
|
|
500
|
+
);
|
|
501
|
+
assert.ok(
|
|
502
|
+
elapsed < 500,
|
|
503
|
+
`expected immediate rejection on abort, took ${elapsed}ms`,
|
|
504
|
+
);
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
test("sleepAbortable rejects immediately when signal already aborted", async () => {
|
|
508
|
+
const ac = new AbortController();
|
|
509
|
+
ac.abort();
|
|
510
|
+
let caught: unknown = null;
|
|
511
|
+
try {
|
|
512
|
+
await sleepAbortable(1000, ac.signal);
|
|
513
|
+
assert.fail("sleepAbortable must reject when signal pre-aborted");
|
|
514
|
+
} catch (err) {
|
|
515
|
+
caught = err;
|
|
516
|
+
}
|
|
517
|
+
assert.ok(isAbortError(caught), "expected AbortError on pre-aborted signal");
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
test("isAbortError distinguishes AbortError from other errors", () => {
|
|
521
|
+
assert.equal(isAbortError(new Error("regular")), false);
|
|
522
|
+
assert.equal(isAbortError("string"), false);
|
|
523
|
+
assert.equal(isAbortError(null), false);
|
|
524
|
+
assert.equal(isAbortError(undefined), false);
|
|
525
|
+
const plain = new Error("aborted");
|
|
526
|
+
plain.name = "AbortError";
|
|
527
|
+
assert.equal(isAbortError(plain), true);
|
|
528
|
+
if (typeof DOMException !== "undefined") {
|
|
529
|
+
assert.equal(
|
|
530
|
+
isAbortError(new DOMException("aborted", "AbortError")),
|
|
531
|
+
true,
|
|
532
|
+
);
|
|
533
|
+
}
|
|
534
|
+
});
|
|
535
|
+
|
|
536
|
+
test("replayTrace surfaces non-abort sleep rejections (regression)", async () => {
|
|
537
|
+
// Codex P2 (PR #732 follow-up): the replay loop now wraps `sleep()`
|
|
538
|
+
// in a try/catch to handle AbortError. That catch must NOT swallow
|
|
539
|
+
// genuine bugs — non-abort errors must propagate so they surface
|
|
540
|
+
// instead of silently exiting the loop.
|
|
541
|
+
await withTempDir(async (dir) => {
|
|
542
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
543
|
+
const recorder = await openTraceRecorder(tracePath);
|
|
544
|
+
await recorder.append(
|
|
545
|
+
makeSnapshot({ capturedAt: "2026-04-26T00:00:00.000Z" }),
|
|
546
|
+
);
|
|
547
|
+
await recorder.append(
|
|
548
|
+
makeSnapshot({ capturedAt: "2026-04-26T00:00:05.000Z" }),
|
|
549
|
+
);
|
|
550
|
+
await recorder.close();
|
|
551
|
+
|
|
552
|
+
const stream = new CaptureStream();
|
|
553
|
+
let threw: unknown = null;
|
|
554
|
+
try {
|
|
555
|
+
await replayTrace(tracePath, {
|
|
556
|
+
output: stream,
|
|
557
|
+
manageCursor: false,
|
|
558
|
+
sleep: async () => {
|
|
559
|
+
throw new Error("boom: not an abort");
|
|
560
|
+
},
|
|
561
|
+
});
|
|
562
|
+
} catch (err) {
|
|
563
|
+
threw = err;
|
|
564
|
+
}
|
|
565
|
+
assert.ok(
|
|
566
|
+
threw instanceof Error && /boom/.test(threw.message),
|
|
567
|
+
`expected non-abort error to propagate, got ${String(threw)}`,
|
|
568
|
+
);
|
|
569
|
+
});
|
|
570
|
+
});
|
|
571
|
+
|
|
572
|
+
test("flushWithTimeout returns flushed=true when flush completes in time (Codex P1 #732)", async () => {
|
|
573
|
+
// Codex P1 follow-up: the CLI shutdown path uses `flushWithTimeout`
|
|
574
|
+
// to bound `recorder.close()` against a 2s deadline. When the
|
|
575
|
+
// flush finishes promptly, the helper must report `flushed: true`
|
|
576
|
+
// and `timedOut: false`.
|
|
577
|
+
let flushed = false;
|
|
578
|
+
const result = await flushWithTimeout(async () => {
|
|
579
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
580
|
+
flushed = true;
|
|
581
|
+
}, 1000);
|
|
582
|
+
assert.equal(flushed, true);
|
|
583
|
+
assert.equal(result.flushed, true);
|
|
584
|
+
assert.equal(result.timedOut, false);
|
|
585
|
+
assert.equal(result.error, null);
|
|
586
|
+
});
|
|
587
|
+
|
|
588
|
+
test("flushWithTimeout returns timedOut=true when flush stalls past deadline (Codex P1 #732)", async () => {
|
|
589
|
+
// Codex P1 follow-up: when the underlying write chain wedges (slow
|
|
590
|
+
// disk / stuck network FS), the helper must return
|
|
591
|
+
// `timedOut: true` so the CLI can log a warning and proceed with
|
|
592
|
+
// shutdown rather than hanging on Ctrl-C.
|
|
593
|
+
//
|
|
594
|
+
// Codex P1 round 3: the fallback timer is now `unref()`'d so it
|
|
595
|
+
// does not, on its own, hold the event loop open. In production
|
|
596
|
+
// the CLI keeps the loop alive via the awaited `recorder.close()`
|
|
597
|
+
// promise plus other handles. In this isolated unit test we
|
|
598
|
+
// anchor a ref'd handle (a long no-op interval) to mirror that
|
|
599
|
+
// and ensure the unref'd timer still fires.
|
|
600
|
+
const anchor = setInterval(() => undefined, 60_000);
|
|
601
|
+
try {
|
|
602
|
+
const start = Date.now();
|
|
603
|
+
const result = await flushWithTimeout(
|
|
604
|
+
() => new Promise<void>(() => undefined), // never resolves
|
|
605
|
+
50,
|
|
606
|
+
);
|
|
607
|
+
const elapsed = Date.now() - start;
|
|
608
|
+
assert.equal(result.timedOut, true);
|
|
609
|
+
assert.equal(result.flushed, false);
|
|
610
|
+
assert.ok(
|
|
611
|
+
elapsed >= 40 && elapsed < 500,
|
|
612
|
+
`expected ~50ms wall time, took ${elapsed}ms`,
|
|
613
|
+
);
|
|
614
|
+
} finally {
|
|
615
|
+
clearInterval(anchor);
|
|
616
|
+
}
|
|
617
|
+
});
|
|
618
|
+
|
|
619
|
+
test("flushWithTimeout captures errors from flush without throwing (Codex P1 #732)", async () => {
|
|
620
|
+
// Codex P1 follow-up: a flush that rejects must not propagate the
|
|
621
|
+
// error — shutdown ordering must stay deterministic. The error is
|
|
622
|
+
// reported in `result.error`.
|
|
623
|
+
const boom = new Error("disk full");
|
|
624
|
+
const result = await flushWithTimeout(async () => {
|
|
625
|
+
throw boom;
|
|
626
|
+
}, 1000);
|
|
627
|
+
assert.equal(result.flushed, true);
|
|
628
|
+
assert.equal(result.timedOut, false);
|
|
629
|
+
assert.equal(result.error, boom);
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
test("flushWithTimeout cancels fallback timer when flush wins the race (Codex P1 #732 round 3)", async () => {
|
|
633
|
+
// Codex P1 round 3: the 2s fallback timer must be cleared AND
|
|
634
|
+
// unref'd once the flush resolves. Without this, every normal
|
|
635
|
+
// shutdown leaves a ref'd setTimeout pending and Node delays exit
|
|
636
|
+
// by the full timeout window. We verify by:
|
|
637
|
+
// 1. Spying `globalThis.setTimeout` to capture the handle and
|
|
638
|
+
// observe `unref()` calls.
|
|
639
|
+
// 2. Spying `globalThis.clearTimeout` to confirm the helper
|
|
640
|
+
// invokes it after the flush wins.
|
|
641
|
+
const realSetTimeout = globalThis.setTimeout;
|
|
642
|
+
const realClearTimeout = globalThis.clearTimeout;
|
|
643
|
+
const handles: Array<{ unrefCalled: boolean; cleared: boolean }> = [];
|
|
644
|
+
let lastHandle: ReturnType<typeof setTimeout> | null = null;
|
|
645
|
+
globalThis.setTimeout = ((cb: () => void, ms?: number) => {
|
|
646
|
+
const handle = realSetTimeout(cb, ms);
|
|
647
|
+
const record = { unrefCalled: false, cleared: false };
|
|
648
|
+
const originalUnref = handle.unref?.bind(handle);
|
|
649
|
+
if (originalUnref) {
|
|
650
|
+
handle.unref = () => {
|
|
651
|
+
record.unrefCalled = true;
|
|
652
|
+
return originalUnref();
|
|
653
|
+
};
|
|
654
|
+
}
|
|
655
|
+
handles.push(record);
|
|
656
|
+
lastHandle = handle;
|
|
657
|
+
// Tag so clearTimeout spy can map handle → record.
|
|
658
|
+
(handle as unknown as { __record: typeof record }).__record = record;
|
|
659
|
+
return handle;
|
|
660
|
+
}) as typeof setTimeout;
|
|
661
|
+
globalThis.clearTimeout = ((handle: ReturnType<typeof setTimeout>) => {
|
|
662
|
+
const record = (handle as unknown as { __record?: { cleared: boolean } })
|
|
663
|
+
.__record;
|
|
664
|
+
if (record) record.cleared = true;
|
|
665
|
+
return realClearTimeout(handle);
|
|
666
|
+
}) as typeof clearTimeout;
|
|
667
|
+
try {
|
|
668
|
+
const result = await flushWithTimeout(async () => {
|
|
669
|
+
// resolves on next microtask
|
|
670
|
+
await Promise.resolve();
|
|
671
|
+
}, 5000);
|
|
672
|
+
assert.equal(result.flushed, true);
|
|
673
|
+
assert.equal(result.timedOut, false);
|
|
674
|
+
// The helper schedules exactly one timer (the fallback). It must
|
|
675
|
+
// be both unref'd and cleared.
|
|
676
|
+
const fallback = handles.find((h) => h === handles[handles.length - 1]);
|
|
677
|
+
assert.ok(fallback, "expected at least one setTimeout call");
|
|
678
|
+
assert.equal(
|
|
679
|
+
fallback!.unrefCalled,
|
|
680
|
+
true,
|
|
681
|
+
"fallback timer must be unref()'d so it never holds the event loop",
|
|
682
|
+
);
|
|
683
|
+
assert.equal(
|
|
684
|
+
fallback!.cleared,
|
|
685
|
+
true,
|
|
686
|
+
"fallback timer must be cleared once flush wins the race",
|
|
687
|
+
);
|
|
688
|
+
assert.ok(lastHandle, "expected a captured timer handle");
|
|
689
|
+
} finally {
|
|
690
|
+
globalThis.setTimeout = realSetTimeout;
|
|
691
|
+
globalThis.clearTimeout = realClearTimeout;
|
|
692
|
+
}
|
|
693
|
+
});
|
|
694
|
+
|
|
695
|
+
test("flushWithTimeout fires abort signal when timeout wins the race (Codex P1 #732 round 5)", async () => {
|
|
696
|
+
// Codex P1 round 5: when the deadline wins, `flushWithTimeout` must
|
|
697
|
+
// fire the AbortSignal passed into the flush factory so the
|
|
698
|
+
// underlying I/O (e.g., recorder.close()) can release OS resources
|
|
699
|
+
// instead of staying open until the orphaned writeChain resolves.
|
|
700
|
+
let abortFired = false;
|
|
701
|
+
const anchor = setInterval(() => undefined, 60_000);
|
|
702
|
+
try {
|
|
703
|
+
const result = await flushWithTimeout((signal) => {
|
|
704
|
+
signal.addEventListener("abort", () => {
|
|
705
|
+
abortFired = true;
|
|
706
|
+
});
|
|
707
|
+
// Never resolves — simulates a wedged network-backed filesystem.
|
|
708
|
+
return new Promise<void>(() => undefined);
|
|
709
|
+
}, 50);
|
|
710
|
+
assert.equal(result.timedOut, true, "expected timedOut result");
|
|
711
|
+
assert.equal(abortFired, true, "abort signal must fire when timeout wins");
|
|
712
|
+
} finally {
|
|
713
|
+
clearInterval(anchor);
|
|
714
|
+
}
|
|
715
|
+
});
|
|
716
|
+
|
|
717
|
+
test("flushWithTimeout does NOT fire abort signal when flush wins the race (Codex P1 #732 round 5)", async () => {
|
|
718
|
+
// Counter-test: the abort signal must NOT fire when the flush
|
|
719
|
+
// completes in time. Firing the signal prematurely would abort I/O
|
|
720
|
+
// that completed successfully.
|
|
721
|
+
let abortFired = false;
|
|
722
|
+
const result = await flushWithTimeout((signal) => {
|
|
723
|
+
signal.addEventListener("abort", () => {
|
|
724
|
+
abortFired = true;
|
|
725
|
+
});
|
|
726
|
+
return Promise.resolve();
|
|
727
|
+
}, 5000);
|
|
728
|
+
assert.equal(result.flushed, true);
|
|
729
|
+
assert.equal(abortFired, false, "abort signal must NOT fire when flush wins");
|
|
730
|
+
});
|
|
731
|
+
|
|
732
|
+
test("recorder close() aborts pending write-chain drain when signal fires (Codex P1 #732 round 5)", async () => {
|
|
733
|
+
// End-to-end regression: when `flushWithTimeout` times out and fires
|
|
734
|
+
// the abort signal, `recorder.close(signal)` must stop waiting on the
|
|
735
|
+
// wedged writeChain and close the file handle promptly. Without this,
|
|
736
|
+
// the recorder keeps the file handle open after the timeout,
|
|
737
|
+
// defeating the purpose of the deadline.
|
|
738
|
+
await withTempDir(async (dir) => {
|
|
739
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
740
|
+
const recorder = await openTraceRecorder(tracePath);
|
|
741
|
+
// Queue a write that will never resolve, simulating a wedged FS.
|
|
742
|
+
const stalledWrite = new Promise<void>(() => undefined);
|
|
743
|
+
// Patch the recorder to inject the stalled write onto the chain
|
|
744
|
+
// by appending via a tiny shim. We can't inject into writeChain
|
|
745
|
+
// directly so we use a second recorder backed by the same path and
|
|
746
|
+
// close it. Instead, test the signal path directly via close().
|
|
747
|
+
//
|
|
748
|
+
// Approach: close the recorder normally first, then reopen and use
|
|
749
|
+
// a pre-aborted signal to verify close() skips the chain drain.
|
|
750
|
+
await recorder.close();
|
|
751
|
+
|
|
752
|
+
// Reopen and immediately close with a pre-aborted signal.
|
|
753
|
+
const recorder2 = await openTraceRecorder(tracePath, {
|
|
754
|
+
ensureParentDir: false,
|
|
755
|
+
});
|
|
756
|
+
const ac = new AbortController();
|
|
757
|
+
ac.abort(); // pre-aborted
|
|
758
|
+
const start = Date.now();
|
|
759
|
+
await recorder2.close(ac.signal);
|
|
760
|
+
const elapsed = Date.now() - start;
|
|
761
|
+
// close() with a pre-aborted signal must return quickly (the
|
|
762
|
+
// writeChain is idle in this test, so even without aborting it
|
|
763
|
+
// would be fast — the important assertion is that it did NOT hang).
|
|
764
|
+
assert.ok(
|
|
765
|
+
elapsed < 500,
|
|
766
|
+
`close() with aborted signal took too long: ${elapsed}ms`,
|
|
767
|
+
);
|
|
768
|
+
// File should still be closeable without error.
|
|
769
|
+
assert.equal(recorder2.getLastError(), null);
|
|
770
|
+
// Re-close is idempotent.
|
|
771
|
+
await recorder2.close(ac.signal);
|
|
772
|
+
});
|
|
773
|
+
});
|
|
774
|
+
|
|
775
|
+
test("replayTrace exits cleanly when sleep override rejects with AbortError", async () => {
|
|
776
|
+
// Custom `sleep` implementations that reject with AbortError must
|
|
777
|
+
// also be treated as a clean early exit (mirrors the contract of
|
|
778
|
+
// the default `sleepAbortable` sleeper).
|
|
779
|
+
await withTempDir(async (dir) => {
|
|
780
|
+
const tracePath = path.join(dir, "trace.jsonl");
|
|
781
|
+
const recorder = await openTraceRecorder(tracePath);
|
|
782
|
+
for (let i = 0; i < 5; i++) {
|
|
783
|
+
await recorder.append(
|
|
784
|
+
makeSnapshot({
|
|
785
|
+
capturedAt: `2026-04-26T00:00:${String(i).padStart(2, "0")}.000Z`,
|
|
786
|
+
}),
|
|
787
|
+
);
|
|
788
|
+
}
|
|
789
|
+
await recorder.close();
|
|
790
|
+
|
|
791
|
+
const stream = new CaptureStream();
|
|
792
|
+
const ac = new AbortController();
|
|
793
|
+
let calls = 0;
|
|
794
|
+
const result = await replayTrace(tracePath, {
|
|
795
|
+
output: stream,
|
|
796
|
+
manageCursor: false,
|
|
797
|
+
signal: ac.signal,
|
|
798
|
+
sleep: async () => {
|
|
799
|
+
calls += 1;
|
|
800
|
+
if (calls >= 1) {
|
|
801
|
+
ac.abort();
|
|
802
|
+
const err = new Error("aborted");
|
|
803
|
+
err.name = "AbortError";
|
|
804
|
+
throw err;
|
|
805
|
+
}
|
|
806
|
+
},
|
|
807
|
+
});
|
|
808
|
+
assert.ok(
|
|
809
|
+
result.framesRendered < 5,
|
|
810
|
+
`expected early exit, rendered ${result.framesRendered}`,
|
|
811
|
+
);
|
|
812
|
+
});
|
|
813
|
+
});
|