@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,372 @@
|
|
|
1
|
+
import {
|
|
2
|
+
encodeStoragePathSegment,
|
|
3
|
+
encodeStoragePathSegmentWithHash,
|
|
4
|
+
isSafeLegacyPathSegment,
|
|
5
|
+
resolveSafeStoragePath
|
|
6
|
+
} from "./chunk-FF4KLI5W.js";
|
|
7
|
+
import {
|
|
8
|
+
log
|
|
9
|
+
} from "./chunk-2ODBA7MQ.js";
|
|
10
|
+
|
|
11
|
+
// src/threading.ts
|
|
12
|
+
import { readdir, readFile, writeFile, mkdir, stat } from "fs/promises";
|
|
13
|
+
var STOP_WORDS = /* @__PURE__ */ new Set([
|
|
14
|
+
"a",
|
|
15
|
+
"an",
|
|
16
|
+
"the",
|
|
17
|
+
"is",
|
|
18
|
+
"are",
|
|
19
|
+
"was",
|
|
20
|
+
"were",
|
|
21
|
+
"be",
|
|
22
|
+
"been",
|
|
23
|
+
"being",
|
|
24
|
+
"have",
|
|
25
|
+
"has",
|
|
26
|
+
"had",
|
|
27
|
+
"do",
|
|
28
|
+
"does",
|
|
29
|
+
"did",
|
|
30
|
+
"will",
|
|
31
|
+
"would",
|
|
32
|
+
"could",
|
|
33
|
+
"should",
|
|
34
|
+
"may",
|
|
35
|
+
"might",
|
|
36
|
+
"must",
|
|
37
|
+
"shall",
|
|
38
|
+
"can",
|
|
39
|
+
"need",
|
|
40
|
+
"to",
|
|
41
|
+
"of",
|
|
42
|
+
"in",
|
|
43
|
+
"for",
|
|
44
|
+
"on",
|
|
45
|
+
"with",
|
|
46
|
+
"at",
|
|
47
|
+
"by",
|
|
48
|
+
"from",
|
|
49
|
+
"as",
|
|
50
|
+
"into",
|
|
51
|
+
"through",
|
|
52
|
+
"during",
|
|
53
|
+
"before",
|
|
54
|
+
"after",
|
|
55
|
+
"above",
|
|
56
|
+
"below",
|
|
57
|
+
"between",
|
|
58
|
+
"this",
|
|
59
|
+
"that",
|
|
60
|
+
"these",
|
|
61
|
+
"those",
|
|
62
|
+
"i",
|
|
63
|
+
"me",
|
|
64
|
+
"my",
|
|
65
|
+
"we",
|
|
66
|
+
"our",
|
|
67
|
+
"you",
|
|
68
|
+
"your",
|
|
69
|
+
"he",
|
|
70
|
+
"she",
|
|
71
|
+
"it",
|
|
72
|
+
"they",
|
|
73
|
+
"them",
|
|
74
|
+
"their",
|
|
75
|
+
"what",
|
|
76
|
+
"which",
|
|
77
|
+
"who",
|
|
78
|
+
"how",
|
|
79
|
+
"when",
|
|
80
|
+
"where",
|
|
81
|
+
"why",
|
|
82
|
+
"and",
|
|
83
|
+
"but",
|
|
84
|
+
"or",
|
|
85
|
+
"if",
|
|
86
|
+
"because",
|
|
87
|
+
"so",
|
|
88
|
+
"just",
|
|
89
|
+
"about",
|
|
90
|
+
"like",
|
|
91
|
+
"also",
|
|
92
|
+
"very",
|
|
93
|
+
"really",
|
|
94
|
+
"here",
|
|
95
|
+
"there"
|
|
96
|
+
]);
|
|
97
|
+
function extractKeywords(content, maxKeywords = 3) {
|
|
98
|
+
const words = content.toLowerCase().replace(/[^a-z0-9\s-]/g, " ").split(/\s+/).filter((w) => w.length >= 4 && !STOP_WORDS.has(w));
|
|
99
|
+
const freq = /* @__PURE__ */ new Map();
|
|
100
|
+
for (const word of words) {
|
|
101
|
+
freq.set(word, (freq.get(word) ?? 0) + 1);
|
|
102
|
+
}
|
|
103
|
+
return [...freq.entries()].sort((a, b) => b[1] - a[1]).slice(0, maxKeywords).map(([word]) => word);
|
|
104
|
+
}
|
|
105
|
+
function generateTitle(keywords) {
|
|
106
|
+
if (keywords.length === 0) return "Untitled Thread";
|
|
107
|
+
return keywords.map((k) => k.charAt(0).toUpperCase() + k.slice(1)).join(", ");
|
|
108
|
+
}
|
|
109
|
+
function isConversationThread(value) {
|
|
110
|
+
if (value === null || typeof value !== "object") return false;
|
|
111
|
+
const candidate = value;
|
|
112
|
+
return typeof candidate.id === "string" && typeof candidate.title === "string" && typeof candidate.createdAt === "string" && typeof candidate.updatedAt === "string" && Array.isArray(candidate.episodeIds) && Array.isArray(candidate.linkedThreadIds);
|
|
113
|
+
}
|
|
114
|
+
function parseConversationThread(raw) {
|
|
115
|
+
try {
|
|
116
|
+
const parsed = JSON.parse(raw);
|
|
117
|
+
return isConversationThread(parsed) ? parsed : null;
|
|
118
|
+
} catch {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
var ThreadingManager = class {
|
|
123
|
+
constructor(threadsDir, gapMinutes = 30) {
|
|
124
|
+
this.threadsDir = threadsDir;
|
|
125
|
+
this.gapMinutes = gapMinutes;
|
|
126
|
+
}
|
|
127
|
+
threadsDir;
|
|
128
|
+
gapMinutes;
|
|
129
|
+
currentThreadId = null;
|
|
130
|
+
lastTurnTimestamp = null;
|
|
131
|
+
lastSessionKey = null;
|
|
132
|
+
async ensureDirectory() {
|
|
133
|
+
await mkdir(this.threadsDir, { recursive: true });
|
|
134
|
+
}
|
|
135
|
+
encodedThreadFileName(threadId) {
|
|
136
|
+
return `${encodeStoragePathSegment(threadId)}.json`;
|
|
137
|
+
}
|
|
138
|
+
collisionSafeThreadFileName(threadId) {
|
|
139
|
+
return `${encodeStoragePathSegmentWithHash(threadId)}.json`;
|
|
140
|
+
}
|
|
141
|
+
legacyThreadFileName(threadId) {
|
|
142
|
+
if (!isSafeLegacyPathSegment(threadId)) return void 0;
|
|
143
|
+
const legacyFile = `${threadId}.json`;
|
|
144
|
+
return legacyFile === this.encodedThreadFileName(threadId) ? void 0 : legacyFile;
|
|
145
|
+
}
|
|
146
|
+
async threadCandidateStatus(filePath, threadId) {
|
|
147
|
+
try {
|
|
148
|
+
if (!(await stat(filePath)).isFile()) return "mismatches";
|
|
149
|
+
const thread = parseConversationThread(await readFile(filePath, "utf-8"));
|
|
150
|
+
if (!thread) return "invalid";
|
|
151
|
+
return thread.id === threadId ? "matches" : "mismatches";
|
|
152
|
+
} catch (err) {
|
|
153
|
+
const code = err && typeof err === "object" && "code" in err ? err.code : void 0;
|
|
154
|
+
if (code === "ENOENT") return "missing";
|
|
155
|
+
throw err;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async threadFilePathForWrite(threadId) {
|
|
159
|
+
const encodedPath = await resolveSafeStoragePath(
|
|
160
|
+
this.threadsDir,
|
|
161
|
+
this.encodedThreadFileName(threadId)
|
|
162
|
+
);
|
|
163
|
+
const encodedStatus = await this.threadCandidateStatus(encodedPath, threadId);
|
|
164
|
+
if (encodedStatus === "matches") return encodedPath;
|
|
165
|
+
const legacyFile = this.legacyThreadFileName(threadId);
|
|
166
|
+
if (legacyFile) {
|
|
167
|
+
const legacyPath = await resolveSafeStoragePath(this.threadsDir, legacyFile);
|
|
168
|
+
if (await this.threadCandidateStatus(legacyPath, threadId) === "matches") {
|
|
169
|
+
return legacyPath;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (encodedStatus === "missing") return encodedPath;
|
|
173
|
+
const collisionSafePath = await resolveSafeStoragePath(
|
|
174
|
+
this.threadsDir,
|
|
175
|
+
this.collisionSafeThreadFileName(threadId)
|
|
176
|
+
);
|
|
177
|
+
const collisionSafeStatus = await this.threadCandidateStatus(collisionSafePath, threadId);
|
|
178
|
+
if (collisionSafeStatus === "mismatches") {
|
|
179
|
+
throw new Error(`thread storage path collision for thread id: ${threadId}`);
|
|
180
|
+
}
|
|
181
|
+
return collisionSafePath;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Check if we should start a new thread based on session key and time gap.
|
|
185
|
+
*/
|
|
186
|
+
shouldStartNewThread(turn) {
|
|
187
|
+
const turnTime = new Date(turn.timestamp).getTime();
|
|
188
|
+
if (turn.sessionKey && this.lastSessionKey && turn.sessionKey !== this.lastSessionKey) {
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
if (this.lastTurnTimestamp) {
|
|
192
|
+
const gapMs = turnTime - this.lastTurnTimestamp;
|
|
193
|
+
const gapMinutes = gapMs / (1e3 * 60);
|
|
194
|
+
if (gapMinutes > this.gapMinutes) {
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (!this.currentThreadId) {
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Process a turn and return the thread ID it belongs to.
|
|
205
|
+
* Creates a new thread if needed.
|
|
206
|
+
*/
|
|
207
|
+
async processTurn(turn, episodeIds) {
|
|
208
|
+
await this.ensureDirectory();
|
|
209
|
+
const turnTime = new Date(turn.timestamp).getTime();
|
|
210
|
+
if (this.shouldStartNewThread(turn)) {
|
|
211
|
+
const threadId = `thread-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
|
|
212
|
+
const thread = {
|
|
213
|
+
id: threadId,
|
|
214
|
+
title: "New Thread",
|
|
215
|
+
// Will be updated later with keywords
|
|
216
|
+
createdAt: turn.timestamp,
|
|
217
|
+
updatedAt: turn.timestamp,
|
|
218
|
+
sessionKey: turn.sessionKey,
|
|
219
|
+
episodeIds: [...episodeIds],
|
|
220
|
+
linkedThreadIds: []
|
|
221
|
+
};
|
|
222
|
+
await this.saveThread(thread);
|
|
223
|
+
this.currentThreadId = threadId;
|
|
224
|
+
log.debug(`created new thread ${threadId}`);
|
|
225
|
+
} else if (this.currentThreadId) {
|
|
226
|
+
const thread = await this.loadThread(this.currentThreadId);
|
|
227
|
+
if (thread) {
|
|
228
|
+
for (const id of episodeIds) {
|
|
229
|
+
if (!thread.episodeIds.includes(id)) {
|
|
230
|
+
thread.episodeIds.push(id);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
thread.updatedAt = turn.timestamp;
|
|
234
|
+
await this.saveThread(thread);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
this.lastTurnTimestamp = turnTime;
|
|
238
|
+
this.lastSessionKey = turn.sessionKey ?? null;
|
|
239
|
+
return this.currentThreadId;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Append persisted memory IDs to an existing thread.
|
|
243
|
+
* Keeps IDs unique and updates the thread timestamp.
|
|
244
|
+
*/
|
|
245
|
+
async appendEpisodeIds(threadId, episodeIds) {
|
|
246
|
+
if (episodeIds.length === 0) return;
|
|
247
|
+
const thread = await this.loadThread(threadId);
|
|
248
|
+
if (!thread) return;
|
|
249
|
+
let changed = false;
|
|
250
|
+
for (const id of episodeIds) {
|
|
251
|
+
if (!thread.episodeIds.includes(id)) {
|
|
252
|
+
thread.episodeIds.push(id);
|
|
253
|
+
changed = true;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
if (!changed) return;
|
|
257
|
+
thread.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
258
|
+
await this.saveThread(thread);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Update thread title based on accumulated content.
|
|
262
|
+
*/
|
|
263
|
+
async updateThreadTitle(threadId, content) {
|
|
264
|
+
const thread = await this.loadThread(threadId);
|
|
265
|
+
if (!thread) return;
|
|
266
|
+
const keywords = extractKeywords(content);
|
|
267
|
+
const title = generateTitle(keywords);
|
|
268
|
+
if (title !== thread.title) {
|
|
269
|
+
thread.title = title;
|
|
270
|
+
thread.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
271
|
+
await this.saveThread(thread);
|
|
272
|
+
log.debug(`updated thread ${threadId} title: ${title}`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Get all threads, sorted by updatedAt desc.
|
|
277
|
+
*/
|
|
278
|
+
async getAllThreads() {
|
|
279
|
+
try {
|
|
280
|
+
const files = await readdir(this.threadsDir);
|
|
281
|
+
const threadsById = /* @__PURE__ */ new Map();
|
|
282
|
+
for (const file of files) {
|
|
283
|
+
if (!file.endsWith(".json")) continue;
|
|
284
|
+
try {
|
|
285
|
+
const raw = await readFile(
|
|
286
|
+
await resolveSafeStoragePath(this.threadsDir, file),
|
|
287
|
+
"utf-8"
|
|
288
|
+
);
|
|
289
|
+
const thread = parseConversationThread(raw);
|
|
290
|
+
if (!thread) continue;
|
|
291
|
+
const legacyFile = this.legacyThreadFileName(thread.id);
|
|
292
|
+
const storagePriority = file === this.encodedThreadFileName(thread.id) ? 3 : file === this.collisionSafeThreadFileName(thread.id) ? 2 : legacyFile && file === legacyFile ? 1 : 0;
|
|
293
|
+
const current = threadsById.get(thread.id);
|
|
294
|
+
if (!current || storagePriority > current.storagePriority) {
|
|
295
|
+
threadsById.set(thread.id, { thread, storagePriority });
|
|
296
|
+
}
|
|
297
|
+
} catch {
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return [...threadsById.values()].map(({ thread }) => thread).sort(
|
|
301
|
+
(a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime()
|
|
302
|
+
);
|
|
303
|
+
} catch {
|
|
304
|
+
return [];
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Get a thread by ID.
|
|
309
|
+
*/
|
|
310
|
+
async loadThread(threadId) {
|
|
311
|
+
const candidates = [
|
|
312
|
+
this.encodedThreadFileName(threadId),
|
|
313
|
+
this.legacyThreadFileName(threadId),
|
|
314
|
+
this.collisionSafeThreadFileName(threadId)
|
|
315
|
+
];
|
|
316
|
+
for (const file of candidates) {
|
|
317
|
+
if (!file) continue;
|
|
318
|
+
try {
|
|
319
|
+
const filePath = await resolveSafeStoragePath(this.threadsDir, file);
|
|
320
|
+
const raw = await readFile(filePath, "utf-8");
|
|
321
|
+
const thread = parseConversationThread(raw);
|
|
322
|
+
if (thread?.id === threadId) return thread;
|
|
323
|
+
} catch {
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Save a thread.
|
|
330
|
+
*/
|
|
331
|
+
async saveThread(thread) {
|
|
332
|
+
await this.ensureDirectory();
|
|
333
|
+
const filePath = await this.threadFilePathForWrite(thread.id);
|
|
334
|
+
await writeFile(filePath, JSON.stringify(thread, null, 2), "utf-8");
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Link two threads together.
|
|
338
|
+
*/
|
|
339
|
+
async linkThreads(threadId1, threadId2) {
|
|
340
|
+
const thread1 = await this.loadThread(threadId1);
|
|
341
|
+
const thread2 = await this.loadThread(threadId2);
|
|
342
|
+
if (!thread1 || !thread2) return false;
|
|
343
|
+
if (!thread1.linkedThreadIds.includes(threadId2)) {
|
|
344
|
+
thread1.linkedThreadIds.push(threadId2);
|
|
345
|
+
await this.saveThread(thread1);
|
|
346
|
+
}
|
|
347
|
+
if (!thread2.linkedThreadIds.includes(threadId1)) {
|
|
348
|
+
thread2.linkedThreadIds.push(threadId1);
|
|
349
|
+
await this.saveThread(thread2);
|
|
350
|
+
}
|
|
351
|
+
return true;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Get the current thread ID (if any).
|
|
355
|
+
*/
|
|
356
|
+
getCurrentThreadId() {
|
|
357
|
+
return this.currentThreadId;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Reset threading state (e.g., on plugin restart).
|
|
361
|
+
*/
|
|
362
|
+
reset() {
|
|
363
|
+
this.currentThreadId = null;
|
|
364
|
+
this.lastTurnTimestamp = null;
|
|
365
|
+
this.lastSessionKey = null;
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
export {
|
|
370
|
+
ThreadingManager
|
|
371
|
+
};
|
|
372
|
+
//# sourceMappingURL=chunk-W4RVMTHR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/threading.ts"],"sourcesContent":["/**\n * Conversation Threading (Phase 3B)\n *\n * Groups related memories into conversation threads with auto-generated titles.\n * Thread boundary detection: new session key OR time gap > threshold.\n */\n\nimport { readdir, readFile, writeFile, mkdir, stat } from \"node:fs/promises\";\nimport { log } from \"./logger.js\";\nimport type { BufferTurn, ConversationThread } from \"./types.js\";\nimport {\n encodeStoragePathSegment,\n encodeStoragePathSegmentWithHash,\n isSafeLegacyPathSegment,\n resolveSafeStoragePath,\n} from \"./storage-paths.js\";\n\n/** Stop words for title extraction */\nconst STOP_WORDS = new Set([\n \"a\", \"an\", \"the\", \"is\", \"are\", \"was\", \"were\", \"be\", \"been\", \"being\",\n \"have\", \"has\", \"had\", \"do\", \"does\", \"did\", \"will\", \"would\", \"could\",\n \"should\", \"may\", \"might\", \"must\", \"shall\", \"can\", \"need\", \"to\", \"of\",\n \"in\", \"for\", \"on\", \"with\", \"at\", \"by\", \"from\", \"as\", \"into\", \"through\",\n \"during\", \"before\", \"after\", \"above\", \"below\", \"between\", \"this\", \"that\",\n \"these\", \"those\", \"i\", \"me\", \"my\", \"we\", \"our\", \"you\", \"your\", \"he\",\n \"she\", \"it\", \"they\", \"them\", \"their\", \"what\", \"which\", \"who\", \"how\",\n \"when\", \"where\", \"why\", \"and\", \"but\", \"or\", \"if\", \"because\", \"so\",\n \"just\", \"about\", \"like\", \"also\", \"very\", \"really\", \"here\", \"there\",\n]);\n\n/**\n * Extract top keywords from content for thread title.\n * Simple TF approach (no IDF needed for single thread).\n */\nfunction extractKeywords(content: string, maxKeywords: number = 3): string[] {\n const words = content\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, \" \")\n .split(/\\s+/)\n .filter((w) => w.length >= 4 && !STOP_WORDS.has(w));\n\n // Count frequencies\n const freq = new Map<string, number>();\n for (const word of words) {\n freq.set(word, (freq.get(word) ?? 0) + 1);\n }\n\n // Sort by frequency, take top N\n return [...freq.entries()]\n .sort((a, b) => b[1] - a[1])\n .slice(0, maxKeywords)\n .map(([word]) => word);\n}\n\n/**\n * Generate a thread title from keywords.\n */\nfunction generateTitle(keywords: string[]): string {\n if (keywords.length === 0) return \"Untitled Thread\";\n // Capitalize and join\n return keywords\n .map((k) => k.charAt(0).toUpperCase() + k.slice(1))\n .join(\", \");\n}\n\nfunction isConversationThread(value: unknown): value is ConversationThread {\n if (value === null || typeof value !== \"object\") return false;\n const candidate = value as Partial<ConversationThread>;\n return (\n typeof candidate.id === \"string\" &&\n typeof candidate.title === \"string\" &&\n typeof candidate.createdAt === \"string\" &&\n typeof candidate.updatedAt === \"string\" &&\n Array.isArray(candidate.episodeIds) &&\n Array.isArray(candidate.linkedThreadIds)\n );\n}\n\nfunction parseConversationThread(raw: string): ConversationThread | null {\n try {\n const parsed = JSON.parse(raw) as unknown;\n return isConversationThread(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport class ThreadingManager {\n private currentThreadId: string | null = null;\n private lastTurnTimestamp: number | null = null;\n private lastSessionKey: string | null = null;\n\n constructor(\n private readonly threadsDir: string,\n private readonly gapMinutes: number = 30,\n ) {}\n\n async ensureDirectory(): Promise<void> {\n await mkdir(this.threadsDir, { recursive: true });\n }\n\n private encodedThreadFileName(threadId: string): string {\n return `${encodeStoragePathSegment(threadId)}.json`;\n }\n\n private collisionSafeThreadFileName(threadId: string): string {\n return `${encodeStoragePathSegmentWithHash(threadId)}.json`;\n }\n\n private legacyThreadFileName(threadId: string): string | undefined {\n if (!isSafeLegacyPathSegment(threadId)) return undefined;\n const legacyFile = `${threadId}.json`;\n return legacyFile === this.encodedThreadFileName(threadId) ? undefined : legacyFile;\n }\n\n private async threadCandidateStatus(\n filePath: string,\n threadId: string,\n ): Promise<\"missing\" | \"matches\" | \"invalid\" | \"mismatches\"> {\n try {\n if (!(await stat(filePath)).isFile()) return \"mismatches\";\n const thread = parseConversationThread(await readFile(filePath, \"utf-8\"));\n if (!thread) return \"invalid\";\n return thread.id === threadId ? \"matches\" : \"mismatches\";\n } catch (err) {\n const code =\n err && typeof err === \"object\" && \"code\" in err\n ? (err as { code?: string }).code\n : undefined;\n if (code === \"ENOENT\") return \"missing\";\n throw err;\n }\n }\n\n private async threadFilePathForWrite(threadId: string): Promise<string> {\n const encodedPath = await resolveSafeStoragePath(\n this.threadsDir,\n this.encodedThreadFileName(threadId),\n );\n const encodedStatus = await this.threadCandidateStatus(encodedPath, threadId);\n if (encodedStatus === \"matches\") return encodedPath;\n\n const legacyFile = this.legacyThreadFileName(threadId);\n if (legacyFile) {\n const legacyPath = await resolveSafeStoragePath(this.threadsDir, legacyFile);\n if ((await this.threadCandidateStatus(legacyPath, threadId)) === \"matches\") {\n return legacyPath;\n }\n }\n\n if (encodedStatus === \"missing\") return encodedPath;\n\n const collisionSafePath = await resolveSafeStoragePath(\n this.threadsDir,\n this.collisionSafeThreadFileName(threadId),\n );\n const collisionSafeStatus = await this.threadCandidateStatus(collisionSafePath, threadId);\n if (collisionSafeStatus === \"mismatches\") {\n throw new Error(`thread storage path collision for thread id: ${threadId}`);\n }\n\n return collisionSafePath;\n }\n\n /**\n * Check if we should start a new thread based on session key and time gap.\n */\n shouldStartNewThread(turn: BufferTurn): boolean {\n const turnTime = new Date(turn.timestamp).getTime();\n\n // Different session key = new thread\n if (turn.sessionKey && this.lastSessionKey && turn.sessionKey !== this.lastSessionKey) {\n return true;\n }\n\n // Time gap > threshold = new thread\n if (this.lastTurnTimestamp) {\n const gapMs = turnTime - this.lastTurnTimestamp;\n const gapMinutes = gapMs / (1000 * 60);\n if (gapMinutes > this.gapMinutes) {\n return true;\n }\n }\n\n // No current thread = new thread\n if (!this.currentThreadId) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Process a turn and return the thread ID it belongs to.\n * Creates a new thread if needed.\n */\n async processTurn(turn: BufferTurn, episodeIds: string[]): Promise<string> {\n await this.ensureDirectory();\n\n const turnTime = new Date(turn.timestamp).getTime();\n\n if (this.shouldStartNewThread(turn)) {\n // Create new thread\n const threadId = `thread-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n const thread: ConversationThread = {\n id: threadId,\n title: \"New Thread\", // Will be updated later with keywords\n createdAt: turn.timestamp,\n updatedAt: turn.timestamp,\n sessionKey: turn.sessionKey,\n episodeIds: [...episodeIds],\n linkedThreadIds: [],\n };\n\n await this.saveThread(thread);\n this.currentThreadId = threadId;\n log.debug(`created new thread ${threadId}`);\n } else if (this.currentThreadId) {\n // Add episodes to current thread\n const thread = await this.loadThread(this.currentThreadId);\n if (thread) {\n for (const id of episodeIds) {\n if (!thread.episodeIds.includes(id)) {\n thread.episodeIds.push(id);\n }\n }\n thread.updatedAt = turn.timestamp;\n await this.saveThread(thread);\n }\n }\n\n this.lastTurnTimestamp = turnTime;\n this.lastSessionKey = turn.sessionKey ?? null;\n\n return this.currentThreadId!;\n }\n\n /**\n * Append persisted memory IDs to an existing thread.\n * Keeps IDs unique and updates the thread timestamp.\n */\n async appendEpisodeIds(threadId: string, episodeIds: string[]): Promise<void> {\n if (episodeIds.length === 0) return;\n const thread = await this.loadThread(threadId);\n if (!thread) return;\n\n let changed = false;\n for (const id of episodeIds) {\n if (!thread.episodeIds.includes(id)) {\n thread.episodeIds.push(id);\n changed = true;\n }\n }\n if (!changed) return;\n\n thread.updatedAt = new Date().toISOString();\n await this.saveThread(thread);\n }\n\n /**\n * Update thread title based on accumulated content.\n */\n async updateThreadTitle(threadId: string, content: string): Promise<void> {\n const thread = await this.loadThread(threadId);\n if (!thread) return;\n\n const keywords = extractKeywords(content);\n const title = generateTitle(keywords);\n\n if (title !== thread.title) {\n thread.title = title;\n thread.updatedAt = new Date().toISOString();\n await this.saveThread(thread);\n log.debug(`updated thread ${threadId} title: ${title}`);\n }\n }\n\n /**\n * Get all threads, sorted by updatedAt desc.\n */\n async getAllThreads(): Promise<ConversationThread[]> {\n try {\n const files = await readdir(this.threadsDir);\n const threadsById = new Map<\n string,\n { thread: ConversationThread; storagePriority: number }\n >();\n\n for (const file of files) {\n if (!file.endsWith(\".json\")) continue;\n try {\n const raw = await readFile(\n await resolveSafeStoragePath(this.threadsDir, file),\n \"utf-8\",\n );\n const thread = parseConversationThread(raw);\n if (!thread) continue;\n\n const legacyFile = this.legacyThreadFileName(thread.id);\n const storagePriority =\n file === this.encodedThreadFileName(thread.id)\n ? 3\n : file === this.collisionSafeThreadFileName(thread.id)\n ? 2\n : legacyFile && file === legacyFile\n ? 1\n : 0;\n const current = threadsById.get(thread.id);\n if (!current || storagePriority > current.storagePriority) {\n threadsById.set(thread.id, { thread, storagePriority });\n }\n } catch {\n // skip unreadable or malformed thread files\n }\n }\n\n return [...threadsById.values()].map(({ thread }) => thread).sort(\n (a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime(),\n );\n } catch {\n return [];\n }\n }\n\n /**\n * Get a thread by ID.\n */\n async loadThread(threadId: string): Promise<ConversationThread | null> {\n const candidates = [\n this.encodedThreadFileName(threadId),\n this.legacyThreadFileName(threadId),\n this.collisionSafeThreadFileName(threadId),\n ];\n for (const file of candidates) {\n if (!file) continue;\n try {\n const filePath = await resolveSafeStoragePath(this.threadsDir, file);\n const raw = await readFile(filePath, \"utf-8\");\n const thread = parseConversationThread(raw);\n if (thread?.id === threadId) return thread;\n } catch {\n // try the next candidate\n }\n }\n return null;\n }\n\n /**\n * Save a thread.\n */\n async saveThread(thread: ConversationThread): Promise<void> {\n await this.ensureDirectory();\n const filePath = await this.threadFilePathForWrite(thread.id);\n await writeFile(filePath, JSON.stringify(thread, null, 2), \"utf-8\");\n }\n\n /**\n * Link two threads together.\n */\n async linkThreads(threadId1: string, threadId2: string): Promise<boolean> {\n const thread1 = await this.loadThread(threadId1);\n const thread2 = await this.loadThread(threadId2);\n\n if (!thread1 || !thread2) return false;\n\n // Add bidirectional links\n if (!thread1.linkedThreadIds.includes(threadId2)) {\n thread1.linkedThreadIds.push(threadId2);\n await this.saveThread(thread1);\n }\n\n if (!thread2.linkedThreadIds.includes(threadId1)) {\n thread2.linkedThreadIds.push(threadId1);\n await this.saveThread(thread2);\n }\n\n return true;\n }\n\n /**\n * Get the current thread ID (if any).\n */\n getCurrentThreadId(): string | null {\n return this.currentThreadId;\n }\n\n /**\n * Reset threading state (e.g., on plugin restart).\n */\n reset(): void {\n this.currentThreadId = null;\n this.lastTurnTimestamp = null;\n this.lastSessionKey = null;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
// src/transfer/types.ts
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
var ExportManifestV1Schema = z.object({
|
|
4
|
+
format: z.literal("openclaw-engram-export"),
|
|
5
|
+
schemaVersion: z.literal(1),
|
|
6
|
+
createdAt: z.string(),
|
|
7
|
+
pluginVersion: z.string(),
|
|
8
|
+
includesTranscripts: z.boolean(),
|
|
9
|
+
files: z.array(
|
|
10
|
+
z.object({
|
|
11
|
+
path: z.string(),
|
|
12
|
+
sha256: z.string(),
|
|
13
|
+
bytes: z.number().int().nonnegative()
|
|
14
|
+
})
|
|
15
|
+
)
|
|
16
|
+
});
|
|
17
|
+
var ExportMemoryRecordV1Schema = z.object({
|
|
18
|
+
path: z.string(),
|
|
19
|
+
content: z.string()
|
|
20
|
+
});
|
|
21
|
+
var ExportBundleV1Schema = z.object({
|
|
22
|
+
manifest: ExportManifestV1Schema,
|
|
23
|
+
records: z.array(ExportMemoryRecordV1Schema)
|
|
24
|
+
});
|
|
25
|
+
var CAPSULE_ID_PATTERN = /^[A-Za-z0-9](?:[A-Za-z0-9]|-(?!-))*[A-Za-z0-9]$|^[A-Za-z0-9]$/;
|
|
26
|
+
var CapsuleIdSchema = z.string().min(1, "capsule.id must not be empty").max(64, "capsule.id must be 64 characters or fewer").regex(
|
|
27
|
+
CAPSULE_ID_PATTERN,
|
|
28
|
+
"capsule.id must be alphanumeric with single dashes (no spaces, no leading/trailing dashes)"
|
|
29
|
+
);
|
|
30
|
+
var SemverLikeSchema = z.string().min(1, "capsule.version must not be empty").regex(
|
|
31
|
+
/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,
|
|
32
|
+
"capsule.version must be a semver-like string (e.g. 1.0.0)"
|
|
33
|
+
);
|
|
34
|
+
function isSafePosixRelativePathPrefix(value) {
|
|
35
|
+
if (value.startsWith("/") || value.includes("\\")) return false;
|
|
36
|
+
const segments = value.split("/");
|
|
37
|
+
return segments.every((segment) => segment !== "" && segment !== "." && segment !== "..");
|
|
38
|
+
}
|
|
39
|
+
var CapsuleRetrievalPolicySchema = z.object({
|
|
40
|
+
/**
|
|
41
|
+
* Per-tier weight overrides applied during recall when the capsule is the
|
|
42
|
+
* active scope. Keys are tier names (e.g. `bm25`, `vector`, `graph`); values
|
|
43
|
+
* are non-negative finite multipliers. The set of valid keys is left open
|
|
44
|
+
* for now so future tiers do not break older manifests.
|
|
45
|
+
*/
|
|
46
|
+
tierWeights: z.record(
|
|
47
|
+
z.string().min(1),
|
|
48
|
+
z.number().finite().nonnegative()
|
|
49
|
+
),
|
|
50
|
+
/**
|
|
51
|
+
* Whether the direct-answer fast path is allowed when this capsule is
|
|
52
|
+
* active. Operators may disable it for capsules whose contents should
|
|
53
|
+
* always flow through the full retrieval pipeline.
|
|
54
|
+
*/
|
|
55
|
+
directAnswerEnabled: z.boolean()
|
|
56
|
+
});
|
|
57
|
+
var CapsuleIncludesSchema = z.object({
|
|
58
|
+
taxonomy: z.boolean(),
|
|
59
|
+
identityAnchors: z.boolean(),
|
|
60
|
+
peerProfiles: z.boolean(),
|
|
61
|
+
procedural: z.boolean()
|
|
62
|
+
});
|
|
63
|
+
var CapsuleParentSchema = z.object({
|
|
64
|
+
capsuleId: CapsuleIdSchema,
|
|
65
|
+
version: SemverLikeSchema,
|
|
66
|
+
/**
|
|
67
|
+
* Posix-relative path prefix under the fork's memory root where the parent
|
|
68
|
+
* capsule's records were placed. Typically `forks/<parent-capsule-id>`.
|
|
69
|
+
* Must be a non-empty string with no leading slash.
|
|
70
|
+
*/
|
|
71
|
+
forkRoot: z.string().min(1, "capsule.parent.forkRoot must not be empty").refine(isSafePosixRelativePathPrefix, {
|
|
72
|
+
message: "capsule.parent.forkRoot must be a normalized posix-relative path with no traversal segments"
|
|
73
|
+
})
|
|
74
|
+
});
|
|
75
|
+
var CapsuleBlockSchema = z.object({
|
|
76
|
+
id: CapsuleIdSchema,
|
|
77
|
+
version: SemverLikeSchema,
|
|
78
|
+
/**
|
|
79
|
+
* Taxonomy schema version the capsule was authored against. Free-form for
|
|
80
|
+
* now; later PRs may tighten this to a known taxonomy registry.
|
|
81
|
+
*/
|
|
82
|
+
schemaVersion: z.string().min(1, "capsule.schemaVersion must not be empty"),
|
|
83
|
+
/**
|
|
84
|
+
* Optional reference to the parent capsule this one was forked or derived
|
|
85
|
+
* from. `null` (not `undefined`) is the explicit "no parent" sentinel so
|
|
86
|
+
* that round-trips through JSON do not silently drop the field.
|
|
87
|
+
*
|
|
88
|
+
* @deprecated Prefer {@link parent} (structured). This field is preserved
|
|
89
|
+
* for backward compatibility with V2 manifests written before PR 4/6.
|
|
90
|
+
*/
|
|
91
|
+
parentCapsule: z.string().min(1).nullable(),
|
|
92
|
+
/**
|
|
93
|
+
* Structured fork-lineage pointer added in PR 4/6. When present, this
|
|
94
|
+
* capsule is a fork of the described parent. `null` is the explicit
|
|
95
|
+
* "not a fork" sentinel — round-trips through JSON cleanly without
|
|
96
|
+
* silently dropping the field.
|
|
97
|
+
*
|
|
98
|
+
* Defaults to `null` so that V2 manifests written before PR 4/6 (which
|
|
99
|
+
* omit this field) still parse without error. This preserves backward
|
|
100
|
+
* compatibility with the existing `makeV2Manifest()` test fixtures and
|
|
101
|
+
* any in-the-wild V2 archives produced by PR 2/6 and PR 3/6.
|
|
102
|
+
*
|
|
103
|
+
* Invariant: when `parent` is non-null, `parentCapsule` SHOULD equal
|
|
104
|
+
* `parent.capsuleId` for backward compatibility with readers that only
|
|
105
|
+
* understand the legacy field. `forkCapsule()` sets both.
|
|
106
|
+
*/
|
|
107
|
+
parent: CapsuleParentSchema.nullable().default(null),
|
|
108
|
+
description: z.string(),
|
|
109
|
+
retrievalPolicy: CapsuleRetrievalPolicySchema,
|
|
110
|
+
includes: CapsuleIncludesSchema
|
|
111
|
+
});
|
|
112
|
+
var ExportManifestV2Schema = z.object({
|
|
113
|
+
format: z.literal("openclaw-engram-export"),
|
|
114
|
+
schemaVersion: z.literal(2),
|
|
115
|
+
createdAt: z.string(),
|
|
116
|
+
pluginVersion: z.string(),
|
|
117
|
+
includesTranscripts: z.boolean(),
|
|
118
|
+
files: z.array(
|
|
119
|
+
z.object({
|
|
120
|
+
path: z.string(),
|
|
121
|
+
sha256: z.string(),
|
|
122
|
+
bytes: z.number().int().nonnegative()
|
|
123
|
+
})
|
|
124
|
+
),
|
|
125
|
+
capsule: CapsuleBlockSchema
|
|
126
|
+
});
|
|
127
|
+
var ExportBundleV2Schema = z.object({
|
|
128
|
+
manifest: ExportManifestV2Schema,
|
|
129
|
+
records: z.array(ExportMemoryRecordV1Schema)
|
|
130
|
+
});
|
|
131
|
+
function parseExportManifest(input) {
|
|
132
|
+
const version = typeof input === "object" && input !== null ? input.schemaVersion : void 0;
|
|
133
|
+
if (version === 2) {
|
|
134
|
+
const manifest = ExportManifestV2Schema.parse(input);
|
|
135
|
+
return {
|
|
136
|
+
capsuleVersion: 2,
|
|
137
|
+
manifest,
|
|
138
|
+
capsule: manifest.capsule
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (version === 1) {
|
|
142
|
+
const manifest = ExportManifestV1Schema.parse(input);
|
|
143
|
+
return { capsuleVersion: 1, manifest, capsule: null };
|
|
144
|
+
}
|
|
145
|
+
const v1 = ExportManifestV1Schema.safeParse(input);
|
|
146
|
+
if (v1.success) {
|
|
147
|
+
return { capsuleVersion: 1, manifest: v1.data, capsule: null };
|
|
148
|
+
}
|
|
149
|
+
const v2 = ExportManifestV2Schema.safeParse(input);
|
|
150
|
+
if (v2.success) {
|
|
151
|
+
return {
|
|
152
|
+
capsuleVersion: 2,
|
|
153
|
+
manifest: v2.data,
|
|
154
|
+
capsule: v2.data.capsule
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
throw v2.error;
|
|
158
|
+
}
|
|
159
|
+
function parseExportBundle(input) {
|
|
160
|
+
if (typeof input !== "object" || input === null) {
|
|
161
|
+
ExportBundleV1Schema.parse(input);
|
|
162
|
+
throw new Error("unreachable");
|
|
163
|
+
}
|
|
164
|
+
const manifestRaw = input.manifest;
|
|
165
|
+
const normalized = parseExportManifest(manifestRaw);
|
|
166
|
+
if (normalized.capsuleVersion === 2) {
|
|
167
|
+
const bundle2 = ExportBundleV2Schema.parse(input);
|
|
168
|
+
return { capsuleVersion: 2, bundle: bundle2, capsule: bundle2.manifest.capsule };
|
|
169
|
+
}
|
|
170
|
+
const bundle = ExportBundleV1Schema.parse(input);
|
|
171
|
+
return { capsuleVersion: 1, bundle, capsule: null };
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export {
|
|
175
|
+
ExportManifestV1Schema,
|
|
176
|
+
ExportMemoryRecordV1Schema,
|
|
177
|
+
ExportBundleV1Schema,
|
|
178
|
+
CAPSULE_ID_PATTERN,
|
|
179
|
+
CapsuleRetrievalPolicySchema,
|
|
180
|
+
CapsuleIncludesSchema,
|
|
181
|
+
CapsuleParentSchema,
|
|
182
|
+
CapsuleBlockSchema,
|
|
183
|
+
ExportManifestV2Schema,
|
|
184
|
+
ExportBundleV2Schema,
|
|
185
|
+
parseExportManifest,
|
|
186
|
+
parseExportBundle
|
|
187
|
+
};
|
|
188
|
+
//# sourceMappingURL=chunk-WEHSQBFR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/transfer/types.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const ExportManifestV1Schema = z.object({\n format: z.literal(\"openclaw-engram-export\"),\n schemaVersion: z.literal(1),\n createdAt: z.string(),\n pluginVersion: z.string(),\n includesTranscripts: z.boolean(),\n files: z.array(\n z.object({\n path: z.string(),\n sha256: z.string(),\n bytes: z.number().int().nonnegative(),\n }),\n ),\n});\n\nexport type ExportManifestV1 = z.infer<typeof ExportManifestV1Schema>;\n\nexport const ExportMemoryRecordV1Schema = z.object({\n path: z.string(),\n content: z.string(),\n});\n\nexport type ExportMemoryRecordV1 = z.infer<typeof ExportMemoryRecordV1Schema>;\n\nexport const ExportBundleV1Schema = z.object({\n manifest: ExportManifestV1Schema,\n records: z.array(ExportMemoryRecordV1Schema),\n});\n\nexport type ExportBundleV1 = z.infer<typeof ExportBundleV1Schema>;\n\n// ---------------------------------------------------------------------------\n// V2 capsule manifest (issue #676 PR 1/6)\n// ---------------------------------------------------------------------------\n//\n// The V2 manifest extends V1 with a `capsule` block describing a reusable,\n// shareable bundle of memory state (\"capsule\"). This PR introduces ONLY the\n// schema and a backward-compatible reader. Actual export/import pipelines and\n// CLI surfaces are deferred to subsequent PRs (2/6 through 6/6).\n\n/**\n * Allowed pattern for a user-chosen capsule id.\n *\n * - lowercase or uppercase alphanumerics and dashes\n * - must start and end with an alphanumeric (no leading/trailing dashes)\n * - no consecutive dashes\n * - 1..64 characters\n *\n * The constraints are intentionally narrow so capsule ids round-trip cleanly\n * through filesystem paths, URLs, and registry slugs without escaping.\n */\nexport const CAPSULE_ID_PATTERN = /^[A-Za-z0-9](?:[A-Za-z0-9]|-(?!-))*[A-Za-z0-9]$|^[A-Za-z0-9]$/;\n\nconst CapsuleIdSchema = z\n .string()\n .min(1, \"capsule.id must not be empty\")\n .max(64, \"capsule.id must be 64 characters or fewer\")\n .regex(\n CAPSULE_ID_PATTERN,\n \"capsule.id must be alphanumeric with single dashes (no spaces, no leading/trailing dashes)\",\n );\n\n/**\n * Permissive semver-ish validator. We accept the common subset\n * `MAJOR.MINOR.PATCH` with optional pre-release / build suffixes. This is\n * intentionally looser than full semver 2.0 so capsule authors can use simple\n * versions like `1.0.0` or `0.1.0-rc.1` without pulling in a parser.\n */\nconst SemverLikeSchema = z\n .string()\n .min(1, \"capsule.version must not be empty\")\n .regex(\n /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$/,\n \"capsule.version must be a semver-like string (e.g. 1.0.0)\",\n );\n\nfunction isSafePosixRelativePathPrefix(value: string): boolean {\n if (value.startsWith(\"/\") || value.includes(\"\\\\\")) return false;\n const segments = value.split(\"/\");\n return segments.every((segment) => segment !== \"\" && segment !== \".\" && segment !== \"..\");\n}\n\nexport const CapsuleRetrievalPolicySchema = z.object({\n /**\n * Per-tier weight overrides applied during recall when the capsule is the\n * active scope. Keys are tier names (e.g. `bm25`, `vector`, `graph`); values\n * are non-negative finite multipliers. The set of valid keys is left open\n * for now so future tiers do not break older manifests.\n */\n tierWeights: z.record(\n z.string().min(1),\n z.number().finite().nonnegative(),\n ),\n /**\n * Whether the direct-answer fast path is allowed when this capsule is\n * active. Operators may disable it for capsules whose contents should\n * always flow through the full retrieval pipeline.\n */\n directAnswerEnabled: z.boolean(),\n});\n\nexport type CapsuleRetrievalPolicy = z.infer<typeof CapsuleRetrievalPolicySchema>;\n\nexport const CapsuleIncludesSchema = z.object({\n taxonomy: z.boolean(),\n identityAnchors: z.boolean(),\n peerProfiles: z.boolean(),\n procedural: z.boolean(),\n});\n\nexport type CapsuleIncludes = z.infer<typeof CapsuleIncludesSchema>;\n\n/**\n * Structured linkage to the capsule that was forked to produce this one.\n *\n * - `capsuleId` — the `id` field from the parent capsule's manifest block.\n * - `version` — the `version` field from the parent capsule's manifest block\n * at the time the fork was taken.\n * - `forkRoot` — the posix-relative directory prefix under which the parent's\n * records were planted inside the fork's memory root, e.g.\n * `forks/parent-id`. Stored here so downstream tooling can\n * locate the imported parent tree without re-parsing paths.\n */\nexport const CapsuleParentSchema = z.object({\n capsuleId: CapsuleIdSchema,\n version: SemverLikeSchema,\n /**\n * Posix-relative path prefix under the fork's memory root where the parent\n * capsule's records were placed. Typically `forks/<parent-capsule-id>`.\n * Must be a non-empty string with no leading slash.\n */\n forkRoot: z\n .string()\n .min(1, \"capsule.parent.forkRoot must not be empty\")\n .refine(isSafePosixRelativePathPrefix, {\n message:\n \"capsule.parent.forkRoot must be a normalized posix-relative path with no traversal segments\",\n }),\n});\n\nexport type CapsuleParent = z.infer<typeof CapsuleParentSchema>;\n\nexport const CapsuleBlockSchema = z.object({\n id: CapsuleIdSchema,\n version: SemverLikeSchema,\n /**\n * Taxonomy schema version the capsule was authored against. Free-form for\n * now; later PRs may tighten this to a known taxonomy registry.\n */\n schemaVersion: z.string().min(1, \"capsule.schemaVersion must not be empty\"),\n /**\n * Optional reference to the parent capsule this one was forked or derived\n * from. `null` (not `undefined`) is the explicit \"no parent\" sentinel so\n * that round-trips through JSON do not silently drop the field.\n *\n * @deprecated Prefer {@link parent} (structured). This field is preserved\n * for backward compatibility with V2 manifests written before PR 4/6.\n */\n parentCapsule: z.string().min(1).nullable(),\n /**\n * Structured fork-lineage pointer added in PR 4/6. When present, this\n * capsule is a fork of the described parent. `null` is the explicit\n * \"not a fork\" sentinel — round-trips through JSON cleanly without\n * silently dropping the field.\n *\n * Defaults to `null` so that V2 manifests written before PR 4/6 (which\n * omit this field) still parse without error. This preserves backward\n * compatibility with the existing `makeV2Manifest()` test fixtures and\n * any in-the-wild V2 archives produced by PR 2/6 and PR 3/6.\n *\n * Invariant: when `parent` is non-null, `parentCapsule` SHOULD equal\n * `parent.capsuleId` for backward compatibility with readers that only\n * understand the legacy field. `forkCapsule()` sets both.\n */\n parent: CapsuleParentSchema.nullable().default(null),\n description: z.string(),\n retrievalPolicy: CapsuleRetrievalPolicySchema,\n includes: CapsuleIncludesSchema,\n});\n\nexport type CapsuleBlock = z.infer<typeof CapsuleBlockSchema>;\n\nexport const ExportManifestV2Schema = z.object({\n format: z.literal(\"openclaw-engram-export\"),\n schemaVersion: z.literal(2),\n createdAt: z.string(),\n pluginVersion: z.string(),\n includesTranscripts: z.boolean(),\n files: z.array(\n z.object({\n path: z.string(),\n sha256: z.string(),\n bytes: z.number().int().nonnegative(),\n }),\n ),\n capsule: CapsuleBlockSchema,\n});\n\nexport type ExportManifestV2 = z.infer<typeof ExportManifestV2Schema>;\n\nexport const ExportBundleV2Schema = z.object({\n manifest: ExportManifestV2Schema,\n records: z.array(ExportMemoryRecordV1Schema),\n});\n\nexport type ExportBundleV2 = z.infer<typeof ExportBundleV2Schema>;\n\n// ---------------------------------------------------------------------------\n// Backward-compatible reader\n// ---------------------------------------------------------------------------\n\nexport type AnyExportManifest = ExportManifestV1 | ExportManifestV2;\nexport type AnyExportBundle = ExportBundleV1 | ExportBundleV2;\n\n/**\n * Normalized form returned by {@link parseExportManifest}. Callers that don't\n * care about the wire-format version can branch on `capsuleVersion` (1 or 2)\n * and trust that V1 manifests surface as `{ capsuleVersion: 1, capsule: null }`.\n */\nexport interface NormalizedExportManifest {\n capsuleVersion: 1 | 2;\n manifest: AnyExportManifest;\n capsule: CapsuleBlock | null;\n}\n\n/**\n * Parse an unknown manifest payload as either V1 or V2.\n *\n * Dispatch is driven by `schemaVersion` so we surface the most relevant\n * validation error per branch. If `schemaVersion` is missing or unknown we\n * fall back to V1 first (the historical wire format) and only report the V2\n * error if both branches fail.\n */\nexport function parseExportManifest(input: unknown): NormalizedExportManifest {\n const version =\n typeof input === \"object\" && input !== null\n ? (input as { schemaVersion?: unknown }).schemaVersion\n : undefined;\n\n if (version === 2) {\n const manifest = ExportManifestV2Schema.parse(input);\n return {\n capsuleVersion: 2,\n manifest,\n capsule: manifest.capsule,\n };\n }\n\n if (version === 1) {\n const manifest = ExportManifestV1Schema.parse(input);\n return { capsuleVersion: 1, manifest, capsule: null };\n }\n\n // Unknown / missing schemaVersion: try V1 then V2 so the reader stays\n // forgiving for hand-authored payloads but still produces a clear error.\n const v1 = ExportManifestV1Schema.safeParse(input);\n if (v1.success) {\n return { capsuleVersion: 1, manifest: v1.data, capsule: null };\n }\n const v2 = ExportManifestV2Schema.safeParse(input);\n if (v2.success) {\n return {\n capsuleVersion: 2,\n manifest: v2.data,\n capsule: v2.data.capsule,\n };\n }\n // Surface the V2 error since callers introducing capsules likely care most\n // about that branch's diagnostics.\n throw v2.error;\n}\n\n/**\n * Convenience: parse a full bundle (manifest + records) accepting either V1\n * or V2 manifests. Records currently share the V1 shape across both versions.\n */\nexport function parseExportBundle(input: unknown): {\n capsuleVersion: 1 | 2;\n bundle: AnyExportBundle;\n capsule: CapsuleBlock | null;\n} {\n if (typeof input !== \"object\" || input === null) {\n // Defer to V1 schema so the user sees a familiar zod error.\n ExportBundleV1Schema.parse(input);\n throw new Error(\"unreachable\");\n }\n const manifestRaw = (input as { manifest?: unknown }).manifest;\n const normalized = parseExportManifest(manifestRaw);\n if (normalized.capsuleVersion === 2) {\n const bundle = ExportBundleV2Schema.parse(input);\n return { capsuleVersion: 2, bundle, capsule: bundle.manifest.capsule };\n }\n const bundle = ExportBundleV1Schema.parse(input);\n return { capsuleVersion: 1, bundle, capsule: null };\n}\n"],"mappings":"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","names":["bundle"]}
|