@theokit/sdk 4.53.0 → 4.54.0
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/CHANGELOG.md +1096 -8
- package/LICENSE +2 -2
- package/README.md +14 -9
- package/bin/theokit-migrate-config.mjs +11 -2
- package/dist/a2a/agent-mailbox.d.cts +27 -0
- package/dist/a2a/agent-mailbox.d.ts +27 -0
- package/dist/a2a/index.cjs +9 -4
- package/dist/a2a/index.cjs.map +1 -1
- package/dist/a2a/index.js +7 -2
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/message-bus.d.cts +39 -0
- package/dist/a2a/message-bus.d.ts +39 -0
- package/dist/a2a/subagent.d.cts +68 -7
- package/dist/a2a/subagent.d.ts +68 -7
- package/dist/a2a/types.d.cts +26 -0
- package/dist/a2a/types.d.ts +26 -0
- package/dist/{agent-BiCINq25.d.ts → agent-CIUgz7cN.d.cts} +211 -858
- package/dist/{agent-Zta1kvGH.d.cts → agent-DSec-E0c.d.ts} +211 -858
- package/dist/agent-NOEGF4GI.cjs +61 -0
- package/dist/{agent-JX5SBYDE.cjs.map → agent-NOEGF4GI.cjs.map} +1 -1
- package/dist/agent-VGD5WL4N.js +52 -0
- package/dist/{agent-ZAGG6ZBS.js.map → agent-VGD5WL4N.js.map} +1 -1
- package/dist/agent-builder.d.ts +19 -0
- package/dist/agent-session-store-P6V3FINW.js +7 -0
- package/dist/{agent-session-store-JMU7ASDB.js.map → agent-session-store-P6V3FINW.js.map} +1 -1
- package/dist/agent-session-store-ZJ3JSRS4.cjs +24 -0
- package/dist/{agent-session-store-EPX2WQI4.cjs.map → agent-session-store-ZJ3JSRS4.cjs.map} +1 -1
- package/dist/agent.d.ts +25 -7
- package/dist/auth/index.cjs +53 -36
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.d.cts +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.js +27 -10
- package/dist/auth/index.js.map +1 -1
- package/dist/{batch-NLIS4QTW.js → batch-2TGJMNCJ.js} +14 -13
- package/dist/batch-2TGJMNCJ.js.map +1 -0
- package/dist/{batch-WQ3AJCDV.cjs → batch-ND32UKZS.cjs} +31 -30
- package/dist/batch-ND32UKZS.cjs.map +1 -0
- package/dist/{chunk-TR4V2LHV.cjs → chunk-2ADR2GSO.cjs} +8 -8
- package/dist/chunk-2ADR2GSO.cjs.map +1 -0
- package/dist/{chunk-7HQVDLFI.cjs → chunk-2C72DXQF.cjs} +65 -27
- package/dist/chunk-2C72DXQF.cjs.map +1 -0
- package/dist/{chunk-DEZ75ET5.js → chunk-2D34UTDC.js} +21 -5
- package/dist/chunk-2D34UTDC.js.map +1 -0
- package/dist/{chunk-XGYI2KQH.js → chunk-2QKTVKH3.js} +4 -4
- package/dist/{chunk-XGYI2KQH.js.map → chunk-2QKTVKH3.js.map} +1 -1
- package/dist/{chunk-BBZYXVLZ.cjs → chunk-2ZPEDVLM.cjs} +2 -2
- package/dist/chunk-2ZPEDVLM.cjs.map +1 -0
- package/dist/{chunk-DHVNJYTO.js → chunk-3E77SX4H.js} +4 -4
- package/dist/{chunk-DHVNJYTO.js.map → chunk-3E77SX4H.js.map} +1 -1
- package/dist/{chunk-VYHJZVL5.cjs → chunk-3EE6LVWT.cjs} +2 -2
- package/dist/chunk-3EE6LVWT.cjs.map +1 -0
- package/dist/chunk-3KGLRRFC.cjs +18 -0
- package/dist/chunk-3KGLRRFC.cjs.map +1 -0
- package/dist/{chunk-5NBUH3NO.js → chunk-3OR54XG4.js} +2 -2
- package/dist/{chunk-C6Y6CWYD.cjs.map → chunk-3OR54XG4.js.map} +1 -1
- package/dist/{chunk-FUASIT3E.cjs → chunk-3YJNUKYN.cjs} +15 -15
- package/dist/{chunk-FUASIT3E.cjs.map → chunk-3YJNUKYN.cjs.map} +1 -1
- package/dist/{chunk-R7TKOQMJ.js → chunk-44JAAH4X.js} +3 -3
- package/dist/chunk-44JAAH4X.js.map +1 -0
- package/dist/{chunk-XRI6DXPZ.js → chunk-44MBDIHG.js} +4 -4
- package/dist/chunk-44MBDIHG.js.map +1 -0
- package/dist/{chunk-BXVSBYGW.js → chunk-4ERPXIVB.js} +5 -5
- package/dist/{chunk-BXVSBYGW.js.map → chunk-4ERPXIVB.js.map} +1 -1
- package/dist/{chunk-T6QUCG7L.cjs → chunk-4I55V454.cjs} +4 -4
- package/dist/chunk-4I55V454.cjs.map +1 -0
- package/dist/{chunk-B4YA6BRS.cjs → chunk-4O5TGQBW.cjs} +30 -7
- package/dist/chunk-4O5TGQBW.cjs.map +1 -0
- package/dist/{chunk-4JBHSLQO.cjs → chunk-4OTIXDMU.cjs} +2 -2
- package/dist/{chunk-4JBHSLQO.cjs.map → chunk-4OTIXDMU.cjs.map} +1 -1
- package/dist/{chunk-C6Y6CWYD.cjs → chunk-52NKC5HT.cjs} +2 -2
- package/dist/chunk-52NKC5HT.cjs.map +1 -0
- package/dist/{chunk-3YYDHUNH.cjs → chunk-53CBTBWO.cjs} +11 -11
- package/dist/{chunk-3YYDHUNH.cjs.map → chunk-53CBTBWO.cjs.map} +1 -1
- package/dist/{chunk-2QMK627M.cjs → chunk-5BJV5UPY.cjs} +27 -27
- package/dist/chunk-5BJV5UPY.cjs.map +1 -0
- package/dist/{chunk-OZXPA3ME.js → chunk-5JLFFPCH.js} +4 -4
- package/dist/{chunk-OZXPA3ME.js.map → chunk-5JLFFPCH.js.map} +1 -1
- package/dist/{chunk-34XOCZJO.js → chunk-5PHVENFV.js} +3 -3
- package/dist/chunk-5PHVENFV.js.map +1 -0
- package/dist/{chunk-EQMLJ52C.cjs → chunk-5UOVYM3P.cjs} +36 -31
- package/dist/chunk-5UOVYM3P.cjs.map +1 -0
- package/dist/{chunk-33L2NVTJ.cjs → chunk-5USCYPPI.cjs} +15 -15
- package/dist/chunk-5USCYPPI.cjs.map +1 -0
- package/dist/{chunk-I732VEDW.js → chunk-AEOZTXVW.js} +3 -3
- package/dist/{chunk-I732VEDW.js.map → chunk-AEOZTXVW.js.map} +1 -1
- package/dist/{chunk-5XXUYU3M.js → chunk-AG5JPQIY.js} +3 -3
- package/dist/{chunk-5XXUYU3M.js.map → chunk-AG5JPQIY.js.map} +1 -1
- package/dist/{chunk-3SHW7XKK.js → chunk-AGSBJD2L.js} +27 -29
- package/dist/chunk-AGSBJD2L.js.map +1 -0
- package/dist/{chunk-KZBB4YKU.js → chunk-AQLGBKNT.js} +3 -3
- package/dist/chunk-AQLGBKNT.js.map +1 -0
- package/dist/{chunk-7W7ZWMLQ.js → chunk-AWO27VRZ.js} +3 -3
- package/dist/chunk-AWO27VRZ.js.map +1 -0
- package/dist/{chunk-VYCKUKPA.cjs → chunk-B2J4ZMZL.cjs} +3 -2
- package/dist/chunk-B2J4ZMZL.cjs.map +1 -0
- package/dist/{chunk-UJ3SXRZZ.js → chunk-BMAZLQQ4.js} +3 -3
- package/dist/{chunk-UJ3SXRZZ.js.map → chunk-BMAZLQQ4.js.map} +1 -1
- package/dist/{chunk-NUEL6RCZ.cjs → chunk-BVZW2B5V.cjs} +4 -4
- package/dist/chunk-BVZW2B5V.cjs.map +1 -0
- package/dist/{chunk-W4FV7JBH.js → chunk-CQ2TQ32Y.js} +4 -4
- package/dist/chunk-CQ2TQ32Y.js.map +1 -0
- package/dist/{chunk-NFATC6ZF.cjs → chunk-CQGYNZ3K.cjs} +4 -4
- package/dist/{chunk-NFATC6ZF.cjs.map → chunk-CQGYNZ3K.cjs.map} +1 -1
- package/dist/{chunk-3R4ZCQAZ.cjs → chunk-CTCGWIUD.cjs} +5 -5
- package/dist/{chunk-3R4ZCQAZ.cjs.map → chunk-CTCGWIUD.cjs.map} +1 -1
- package/dist/{chunk-HTK54K2J.js → chunk-CV7XMBHP.js} +4 -4
- package/dist/chunk-CV7XMBHP.js.map +1 -0
- package/dist/{chunk-NOS7PTKP.js → chunk-DAPSQZT4.js} +15 -10
- package/dist/chunk-DAPSQZT4.js.map +1 -0
- package/dist/{chunk-E3OCRJU6.cjs → chunk-DQKERTND.cjs} +11 -11
- package/dist/{chunk-E3OCRJU6.cjs.map → chunk-DQKERTND.cjs.map} +1 -1
- package/dist/{chunk-I5OTK2RP.js → chunk-DUIF54UP.js} +6 -6
- package/dist/chunk-DUIF54UP.js.map +1 -0
- package/dist/{chunk-C4EU627W.js → chunk-DZBSJX6J.js} +4 -4
- package/dist/{chunk-C4EU627W.js.map → chunk-DZBSJX6J.js.map} +1 -1
- package/dist/{chunk-ADVZIC43.cjs → chunk-EI2Q7SJ5.cjs} +12 -12
- package/dist/chunk-EI2Q7SJ5.cjs.map +1 -0
- package/dist/{chunk-UCFONJBG.js → chunk-EPSICJLZ.js} +2 -2
- package/dist/{chunk-UCFONJBG.js.map → chunk-EPSICJLZ.js.map} +1 -1
- package/dist/{chunk-RAACTJ7C.cjs → chunk-F3YZMOAU.cjs} +8 -8
- package/dist/{chunk-RAACTJ7C.cjs.map → chunk-F3YZMOAU.cjs.map} +1 -1
- package/dist/{chunk-KIX45IKP.js → chunk-F7AQV62G.js} +5 -4
- package/dist/chunk-F7AQV62G.js.map +1 -0
- package/dist/{chunk-2YWWPCGX.js → chunk-FXEUP75G.js} +10 -12
- package/dist/chunk-FXEUP75G.js.map +1 -0
- package/dist/{chunk-2RW7K6FN.cjs → chunk-GHX4P3V2.cjs} +2 -2
- package/dist/chunk-GHX4P3V2.cjs.map +1 -0
- package/dist/{chunk-634YVZLU.js → chunk-GJ6RK75E.js} +5 -5
- package/dist/chunk-GJ6RK75E.js.map +1 -0
- package/dist/{chunk-Z5U2JGEK.cjs → chunk-GNT35C5U.cjs} +13 -13
- package/dist/chunk-GNT35C5U.cjs.map +1 -0
- package/dist/{chunk-4NAKHID5.js → chunk-GTKFV7O5.js} +2 -2
- package/dist/chunk-GTKFV7O5.js.map +1 -0
- package/dist/{chunk-BWGXYOBZ.cjs → chunk-GWC3HADL.cjs} +4 -4
- package/dist/{chunk-BWGXYOBZ.cjs.map → chunk-GWC3HADL.cjs.map} +1 -1
- package/dist/{chunk-OXNYIMZZ.js → chunk-H73MEMQB.js} +2 -2
- package/dist/chunk-H73MEMQB.js.map +1 -0
- package/dist/{chunk-RTLUZKDL.cjs → chunk-HJBMA5MB.cjs} +11 -11
- package/dist/{chunk-RTLUZKDL.cjs.map → chunk-HJBMA5MB.cjs.map} +1 -1
- package/dist/{chunk-AM2CNBKE.js → chunk-HKCKOAIO.js} +2 -2
- package/dist/chunk-HKCKOAIO.js.map +1 -0
- package/dist/{chunk-PVBANCWU.cjs → chunk-HY57ULY2.cjs} +5 -5
- package/dist/{chunk-PVBANCWU.cjs.map → chunk-HY57ULY2.cjs.map} +1 -1
- package/dist/{chunk-CAH3G4IS.js → chunk-HY66GLM6.js} +2 -2
- package/dist/chunk-HY66GLM6.js.map +1 -0
- package/dist/{chunk-2CFEET3Y.cjs → chunk-I6TGFUCO.cjs} +4 -4
- package/dist/chunk-I6TGFUCO.cjs.map +1 -0
- package/dist/{chunk-HI4ZW62S.js → chunk-IDCKSLYH.js} +4 -4
- package/dist/chunk-IDCKSLYH.js.map +1 -0
- package/dist/{chunk-KNZU4YO5.cjs → chunk-ILCGLTSA.cjs} +4 -4
- package/dist/{chunk-KNZU4YO5.cjs.map → chunk-ILCGLTSA.cjs.map} +1 -1
- package/dist/{chunk-44IISBRZ.cjs → chunk-IWBGCBR6.cjs} +4 -4
- package/dist/{chunk-44IISBRZ.cjs.map → chunk-IWBGCBR6.cjs.map} +1 -1
- package/dist/{chunk-R3CKCRK3.cjs → chunk-J24VJOH3.cjs} +22 -6
- package/dist/chunk-J24VJOH3.cjs.map +1 -0
- package/dist/{chunk-ECPL5RV6.cjs → chunk-JHPGF3FP.cjs} +8 -8
- package/dist/{chunk-ECPL5RV6.cjs.map → chunk-JHPGF3FP.cjs.map} +1 -1
- package/dist/{chunk-SXSPMRSV.cjs → chunk-JTB5Q42C.cjs} +21 -19
- package/dist/chunk-JTB5Q42C.cjs.map +1 -0
- package/dist/{chunk-2YGIBOUH.cjs → chunk-K3FW2XZD.cjs} +9 -9
- package/dist/chunk-K3FW2XZD.cjs.map +1 -0
- package/dist/{chunk-6DCTL32L.cjs → chunk-NGESVVJN.cjs} +17 -17
- package/dist/chunk-NGESVVJN.cjs.map +1 -0
- package/dist/{chunk-MV4TOCUK.js → chunk-NLTVXLGT.js} +3 -3
- package/dist/{chunk-MV4TOCUK.js.map → chunk-NLTVXLGT.js.map} +1 -1
- package/dist/chunk-NUKRL3I6.cjs +23 -0
- package/dist/chunk-NUKRL3I6.cjs.map +1 -0
- package/dist/{chunk-ZSJPRPN7.js → chunk-OC4NTGMN.js} +3 -3
- package/dist/{chunk-ZSJPRPN7.js.map → chunk-OC4NTGMN.js.map} +1 -1
- package/dist/{chunk-K42QGAKM.cjs → chunk-P6A3M6VD.cjs} +10 -10
- package/dist/{chunk-K42QGAKM.cjs.map → chunk-P6A3M6VD.cjs.map} +1 -1
- package/dist/{chunk-OKLYRPKL.cjs → chunk-Q47R5E2X.cjs} +8 -8
- package/dist/chunk-Q47R5E2X.cjs.map +1 -0
- package/dist/{chunk-2XLKLVVR.js → chunk-Q5EWJPRY.js} +2 -2
- package/dist/chunk-Q5EWJPRY.js.map +1 -0
- package/dist/{chunk-XWCTBGYK.js → chunk-QARJGQSA.js} +16 -7
- package/dist/chunk-QARJGQSA.js.map +1 -0
- package/dist/{chunk-EUBGGYPH.cjs → chunk-QDED6YO6.cjs} +5 -5
- package/dist/{chunk-EUBGGYPH.cjs.map → chunk-QDED6YO6.cjs.map} +1 -1
- package/dist/{chunk-VK7MAV65.cjs → chunk-QKLOP4VC.cjs} +2 -2
- package/dist/{chunk-VK7MAV65.cjs.map → chunk-QKLOP4VC.cjs.map} +1 -1
- package/dist/{chunk-PLUCC4N5.js → chunk-QRSUA2CV.js} +3 -3
- package/dist/{chunk-PLUCC4N5.js.map → chunk-QRSUA2CV.js.map} +1 -1
- package/dist/{chunk-YTO5BRBD.cjs → chunk-R3UPQFKK.cjs} +21 -12
- package/dist/chunk-R3UPQFKK.cjs.map +1 -0
- package/dist/{chunk-X2FR4OIT.js → chunk-R7WIIPUR.js} +2 -2
- package/dist/chunk-R7WIIPUR.js.map +1 -0
- package/dist/{chunk-BC5EUG7R.cjs → chunk-RM7Y65IG.cjs} +18 -20
- package/dist/chunk-RM7Y65IG.cjs.map +1 -0
- package/dist/{chunk-RP5HQVLD.js → chunk-RNB4APBZ.js} +30 -7
- package/dist/chunk-RNB4APBZ.js.map +1 -0
- package/dist/{chunk-V45L2OYP.cjs → chunk-ROYPRJH4.cjs} +9 -9
- package/dist/{chunk-V45L2OYP.cjs.map → chunk-ROYPRJH4.cjs.map} +1 -1
- package/dist/{chunk-JJZ4NIAG.js → chunk-RUDY2GTT.js} +61 -24
- package/dist/chunk-RUDY2GTT.js.map +1 -0
- package/dist/{chunk-QLAWEGTZ.cjs → chunk-SKXBJ2NU.cjs} +7 -7
- package/dist/chunk-SKXBJ2NU.cjs.map +1 -0
- package/dist/chunk-SSQZA3DZ.js +15 -0
- package/dist/chunk-SSQZA3DZ.js.map +1 -0
- package/dist/{chunk-7TB5U7RK.js → chunk-SUKXXLWD.js} +6 -6
- package/dist/chunk-SUKXXLWD.js.map +1 -0
- package/dist/{chunk-N43XLTHZ.js → chunk-T73NA43R.js} +3 -3
- package/dist/{chunk-N43XLTHZ.js.map → chunk-T73NA43R.js.map} +1 -1
- package/dist/chunk-T7O6K6PX.js +20 -0
- package/dist/chunk-T7O6K6PX.js.map +1 -0
- package/dist/{chunk-4X3SBHPK.js → chunk-T7XEKOVW.js} +18 -17
- package/dist/chunk-T7XEKOVW.js.map +1 -0
- package/dist/{chunk-NZOR3N4E.js → chunk-TPTZA6NI.js} +293 -126
- package/dist/chunk-TPTZA6NI.js.map +1 -0
- package/dist/{chunk-QN5N3ZVT.cjs → chunk-TTHBHAJI.cjs} +44 -46
- package/dist/chunk-TTHBHAJI.cjs.map +1 -0
- package/dist/{chunk-CZHPR2G7.cjs → chunk-U2AC6JUP.cjs} +8 -8
- package/dist/chunk-U2AC6JUP.cjs.map +1 -0
- package/dist/{chunk-ITQ4NO4P.js → chunk-UC3HT2S4.js} +3 -3
- package/dist/{chunk-ITQ4NO4P.js.map → chunk-UC3HT2S4.js.map} +1 -1
- package/dist/{chunk-2VFZQEDW.cjs → chunk-UFAO4T7Z.cjs} +565 -399
- package/dist/chunk-UFAO4T7Z.cjs.map +1 -0
- package/dist/{chunk-DM6Y5B2G.cjs → chunk-UNDROG5N.cjs} +201 -154
- package/dist/chunk-UNDROG5N.cjs.map +1 -0
- package/dist/{chunk-L7EGRCKJ.js → chunk-UPRJR6IP.js} +4 -4
- package/dist/chunk-UPRJR6IP.js.map +1 -0
- package/dist/{chunk-23VZBRDQ.js → chunk-UQGQFBRL.js} +3 -3
- package/dist/chunk-UQGQFBRL.js.map +1 -0
- package/dist/{chunk-2Y5NO2SY.js → chunk-VDEWG5TV.js} +88 -43
- package/dist/chunk-VDEWG5TV.js.map +1 -0
- package/dist/{chunk-CHVSMEKM.js → chunk-VF7EWVDG.js} +3 -3
- package/dist/chunk-VF7EWVDG.js.map +1 -0
- package/dist/{chunk-PNVDQL5Y.cjs → chunk-VTYY7XL5.cjs} +2 -2
- package/dist/chunk-VTYY7XL5.cjs.map +1 -0
- package/dist/{chunk-E6T264NS.js → chunk-WKRSH2VR.js} +3 -3
- package/dist/{chunk-E6T264NS.js.map → chunk-WKRSH2VR.js.map} +1 -1
- package/dist/{chunk-4QEC4CCS.js → chunk-WTMU7J4U.js} +2 -2
- package/dist/{chunk-4QEC4CCS.js.map → chunk-WTMU7J4U.js.map} +1 -1
- package/dist/{chunk-EFXJ5C7X.js → chunk-XN7NOENA.js} +6 -6
- package/dist/chunk-XN7NOENA.js.map +1 -0
- package/dist/{chunk-AMYY3JHQ.cjs → chunk-XSX2UU6Y.cjs} +10 -9
- package/dist/chunk-XSX2UU6Y.cjs.map +1 -0
- package/dist/{chunk-6PTCKXD3.js → chunk-XV4IZNV4.js} +9 -9
- package/dist/chunk-XV4IZNV4.js.map +1 -0
- package/dist/{chunk-FBZMSLDC.cjs → chunk-XWL6O3SW.cjs} +4 -4
- package/dist/chunk-XWL6O3SW.cjs.map +1 -0
- package/dist/{chunk-OIBHY6JQ.js → chunk-YMA4S2WO.js} +4 -4
- package/dist/{chunk-OIBHY6JQ.js.map → chunk-YMA4S2WO.js.map} +1 -1
- package/dist/{chunk-T5ZWI3MC.cjs → chunk-YPJ5NH5N.cjs} +11 -11
- package/dist/chunk-YPJ5NH5N.cjs.map +1 -0
- package/dist/{chunk-YLQQX5W2.cjs → chunk-ZF2LDKQQ.cjs} +2 -2
- package/dist/chunk-ZF2LDKQQ.cjs.map +1 -0
- package/dist/{chunk-L5YO6PWL.cjs → chunk-ZNW6V4Y6.cjs} +2 -2
- package/dist/chunk-ZNW6V4Y6.cjs.map +1 -0
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/theokit-client.d.cts +36 -0
- package/dist/client/theokit-client.d.ts +36 -0
- package/dist/client/types.d.cts +30 -0
- package/dist/client/types.d.ts +30 -0
- package/dist/compact-session-K5LXTBPJ.js +22 -0
- package/dist/{compact-session-EJ36VH5I.js.map → compact-session-K5LXTBPJ.js.map} +1 -1
- package/dist/compact-session-YCT6JMBX.cjs +59 -0
- package/dist/{compact-session-6GKIS4SD.cjs.map → compact-session-YCT6JMBX.cjs.map} +1 -1
- package/dist/compaction.cjs +17 -16
- package/dist/compaction.d.cts +13 -13
- package/dist/compaction.d.ts +13 -13
- package/dist/compaction.js +4 -3
- package/dist/concurrency.cjs +7 -6
- package/dist/concurrency.cjs.map +1 -1
- package/dist/concurrency.js +5 -4
- package/dist/concurrency.js.map +1 -1
- package/dist/context/index.cjs +7 -7
- package/dist/context/index.js +3 -3
- package/dist/context-FDOON2DB.js +6 -0
- package/dist/{context-DCECDKWN.js.map → context-FDOON2DB.js.map} +1 -1
- package/dist/context-VMIE4BMD.cjs +23 -0
- package/dist/{context-4HGPCOH6.cjs.map → context-VMIE4BMD.cjs.map} +1 -1
- package/dist/cron-CRwy2JBF.d.ts +240 -0
- package/dist/cron-DxxeQ-sK.d.cts +240 -0
- package/dist/cron.cjs +44 -42
- package/dist/cron.d.cts +5 -3
- package/dist/cron.d.ts +5 -3
- package/dist/cron.js +43 -41
- package/dist/define-tool.d.ts +14 -6
- package/dist/{errors-CHllybaU.d.ts → errors-BgJH9PHi.d.cts} +39 -24
- package/dist/{errors-BSoXcl3F.d.cts → errors-C5fJUqLk.d.ts} +39 -24
- package/dist/errors.cjs +22 -21
- package/dist/errors.d.cts +2 -2
- package/dist/errors.d.ts +2 -2
- package/dist/errors.js +3 -2
- package/dist/eval.cjs +62 -59
- package/dist/eval.cjs.map +1 -1
- package/dist/eval.d.cts +38 -0
- package/dist/eval.d.ts +38 -0
- package/dist/eval.js +52 -49
- package/dist/eval.js.map +1 -1
- package/dist/event-bus.d.ts +16 -0
- package/dist/{executor-3CGPLVJL.js → executor-BMEHFOXZ.js} +8 -7
- package/dist/executor-BMEHFOXZ.js.map +1 -0
- package/dist/{executor-4SW7QGZ4.cjs → executor-ZERJ3DGN.cjs} +25 -24
- package/dist/executor-ZERJ3DGN.cjs.map +1 -0
- package/dist/filesystem/index.cjs +8 -7
- package/dist/filesystem/index.cjs.map +1 -1
- package/dist/filesystem/index.js +4 -3
- package/dist/filesystem/index.js.map +1 -1
- package/dist/filesystem/local-filesystem.d.cts +18 -0
- package/dist/filesystem/local-filesystem.d.ts +18 -0
- package/dist/filesystem/types.d.cts +12 -0
- package/dist/filesystem/types.d.ts +12 -0
- package/dist/fs-session-store-3MOJQGP2.cjs +20 -0
- package/dist/{fs-session-store-VXXDIBGM.cjs.map → fs-session-store-3MOJQGP2.cjs.map} +1 -1
- package/dist/fs-session-store-IN7JTTXD.js +11 -0
- package/dist/{fs-session-store-LIKYT24K.js.map → fs-session-store-IN7JTTXD.js.map} +1 -1
- package/dist/generate-object-N5MDZUJI.js +8 -0
- package/dist/{generate-object-TVQCW2IZ.js.map → generate-object-N5MDZUJI.js.map} +1 -1
- package/dist/generate-object-PGSP5U7N.cjs +21 -0
- package/dist/{generate-object-E465DX5I.cjs.map → generate-object-PGSP5U7N.cjs.map} +1 -1
- package/dist/generate-object.d.ts +20 -0
- package/dist/index-manager-NG5YENWO.cjs +22 -0
- package/dist/{index-manager-HGGL4DD5.cjs.map → index-manager-NG5YENWO.cjs.map} +1 -1
- package/dist/index-manager-ZMRJ6ZII.js +13 -0
- package/dist/{index-manager-EA6FGIQG.js.map → index-manager-ZMRJ6ZII.js.map} +1 -1
- package/dist/index.cjs +176 -154
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +761 -57
- package/dist/index.d.ts +761 -57
- package/dist/index.js +62 -59
- package/dist/index.js.map +1 -1
- package/dist/{inject-session-HO7FYVCX.js → inject-session-DDR6X6PC.js} +9 -8
- package/dist/inject-session-DDR6X6PC.js.map +1 -0
- package/dist/inject-session-XLO3KTBM.cjs +29 -0
- package/dist/inject-session-XLO3KTBM.cjs.map +1 -0
- package/dist/internal/auth/auth-types.d.ts +84 -2
- package/dist/internal/auth/credential-store.d.ts +34 -6
- package/dist/internal/auth/oauth-device.d.ts +2 -3
- package/dist/internal/auth/resolve-credential.d.ts +40 -0
- package/dist/internal/budget/tracker/budget.d.ts +12 -14
- package/dist/internal/budget/usage-accumulator.d.ts +15 -0
- package/dist/internal/llm/anthropic-shared.d.ts +8 -4
- package/dist/internal/llm/model-identifier.d.ts +26 -0
- package/dist/internal/llm/openai.d.ts +8 -0
- package/dist/internal/llm/router.d.ts +8 -0
- package/dist/internal/llm/types.d.ts +12 -1
- package/dist/internal/local-agent/mcp-pool.d.ts +2 -4
- package/dist/internal/local-agent/real-local-run-provider.d.ts +8 -3
- package/dist/internal/local-agent/real-local-run-tools.d.ts +8 -0
- package/dist/internal/mcp/oauth.d.ts +19 -1
- package/dist/internal/mcp/token-storage.d.ts +52 -1
- package/dist/internal/memory/adapters/index.cjs +12 -11
- package/dist/internal/memory/adapters/index.d.cts +3 -1
- package/dist/internal/memory/adapters/index.d.ts +3 -1
- package/dist/internal/memory/adapters/index.js +9 -8
- package/dist/internal/memory/adapters/openai-compatible.d.cts +45 -0
- package/dist/internal/memory/adapters/openai-compatible.d.ts +45 -0
- package/dist/internal/memory/embedding-cache.d.ts +42 -1
- package/dist/internal/memory/escape-like-pattern.d.ts +22 -0
- package/dist/internal/memory/sqlite-vec-loader.d.ts +1 -3
- package/dist/internal/memory/storage/markdown-store.d.ts +0 -5
- package/dist/internal/persistence/atomic-write.d.cts +93 -0
- package/dist/internal/persistence/atomic-write.d.ts +93 -0
- package/dist/internal/persistence/cwd-mutex.d.cts +34 -0
- package/dist/internal/persistence/cwd-mutex.d.ts +34 -0
- package/dist/internal/persistence/exclusive-create.d.cts +31 -0
- package/dist/internal/persistence/exclusive-create.d.ts +31 -0
- package/dist/internal/persistence/file-lock.d.cts +41 -1
- package/dist/internal/persistence/file-lock.d.ts +41 -1
- package/dist/internal/persistence/fs-session-store.d.cts +3 -0
- package/dist/internal/persistence/fs-session-store.d.ts +3 -0
- package/dist/internal/persistence/fts5-sanitize.d.cts +29 -1
- package/dist/internal/persistence/fts5-sanitize.d.ts +29 -1
- package/dist/internal/persistence/index.cjs +40 -39
- package/dist/internal/persistence/index.cjs.map +1 -1
- package/dist/internal/persistence/index.d.cts +6 -1
- package/dist/internal/persistence/index.d.ts +6 -1
- package/dist/internal/persistence/index.js +9 -8
- package/dist/internal/persistence/index.js.map +1 -1
- package/dist/internal/persistence/paths.d.cts +54 -1
- package/dist/internal/persistence/paths.d.ts +54 -1
- package/dist/internal/persistence/persistence-schema.d.cts +9 -1
- package/dist/internal/persistence/persistence-schema.d.ts +9 -1
- package/dist/internal/persistence/schema-version.d.cts +215 -1
- package/dist/internal/persistence/schema-version.d.ts +215 -1
- package/dist/internal/persistence/session-dir.d.cts +1 -0
- package/dist/internal/persistence/session-dir.d.ts +1 -0
- package/dist/internal/persistence/session-writer.d.cts +20 -7
- package/dist/internal/persistence/session-writer.d.ts +20 -7
- package/dist/internal/persistence/sqlite-cas.d.cts +37 -1
- package/dist/internal/persistence/sqlite-cas.d.ts +37 -1
- package/dist/internal/persistence/sqlite-open.d.cts +14 -0
- package/dist/internal/persistence/sqlite-open.d.ts +14 -0
- package/dist/internal/persistence/sqlite-wal.d.cts +53 -0
- package/dist/internal/persistence/sqlite-wal.d.ts +53 -0
- package/dist/internal/persistence/transcript-ops.d.cts +7 -1
- package/dist/internal/persistence/transcript-ops.d.ts +7 -1
- package/dist/internal/plugins/types.d.cts +1 -1
- package/dist/internal/plugins/types.d.ts +1 -1
- package/dist/internal/providers/builtin/cerebras.d.ts +2 -2
- package/dist/internal/providers/builtin/deepinfra.d.ts +1 -1
- package/dist/internal/providers/builtin/openai-chatgpt.d.ts +12 -0
- package/dist/internal/providers/catalog-loader.d.ts +8 -0
- package/dist/internal/providers/catalog-schema.d.ts +55 -0
- package/dist/internal/providers/catalog-source-models-dev.d.ts +37 -1
- package/dist/internal/runtime/concurrency/delegation-depth.d.ts +27 -0
- package/dist/internal/runtime/concurrency/subagent-credentials.d.ts +33 -1
- package/dist/internal/runtime/context/context-discovery-runner.d.ts +44 -0
- package/dist/internal/runtime/context/context-discovery.d.ts +58 -0
- package/dist/internal/runtime/context/context-rules-frontmatter.d.ts +70 -1
- package/dist/internal/runtime/fixtures/fixture-mode.d.ts +15 -1
- package/dist/internal/runtime/lifecycle/env-policy.d.ts +1 -3
- package/dist/internal/runtime/lifecycle/post-run-lifecycle.d.ts +15 -0
- package/dist/internal/runtime/registry/agent-registry-store.d.ts +12 -0
- package/dist/internal/runtime/registry/live-agent-registry.d.ts +37 -0
- package/dist/internal/scorers/llm-judge.d.ts +6 -1
- package/dist/internal/security/index.cjs +14 -13
- package/dist/internal/security/index.d.cts +4 -1
- package/dist/internal/security/index.d.ts +4 -1
- package/dist/internal/security/index.js +4 -3
- package/dist/internal/security/path-guard.d.cts +107 -0
- package/dist/internal/security/path-guard.d.ts +107 -0
- package/dist/internal/security/redact.d.cts +71 -0
- package/dist/internal/security/redact.d.ts +71 -0
- package/dist/internal/session/agent-session.d.ts +15 -4
- package/dist/internal/session/compact-session.d.ts +2 -2
- package/dist/internal/session/session-cache.d.ts +5 -0
- package/dist/internal/task/store.d.ts +91 -5
- package/dist/internal/telemetry/span-names.d.ts +0 -1
- package/dist/internal/telemetry/tracer.d.ts +38 -0
- package/dist/job-queue.d.ts +18 -0
- package/dist/judge-call-DWHAJATE.js +6 -0
- package/dist/{judge-call-QMKGC2ZK.js.map → judge-call-DWHAJATE.js.map} +1 -1
- package/dist/judge-call-EGYRC2RE.cjs +23 -0
- package/dist/{judge-call-GVIJWQVE.cjs.map → judge-call-EGYRC2RE.cjs.map} +1 -1
- package/dist/mcp-auth.cjs +41 -25
- package/dist/mcp-auth.cjs.map +1 -1
- package/dist/mcp-auth.js +34 -18
- package/dist/mcp-auth.js.map +1 -1
- package/dist/models.cjs +43 -28
- package/dist/models.cjs.map +1 -1
- package/dist/models.js +26 -11
- package/dist/models.js.map +1 -1
- package/dist/oauth-transaction-store-BT4GLTLK.cjs +36 -0
- package/dist/{oauth-transaction-store-7CKHPQRN.cjs.map → oauth-transaction-store-BT4GLTLK.cjs.map} +1 -1
- package/dist/oauth-transaction-store-W52KVHQ4.js +3 -0
- package/dist/{oauth-transaction-store-W74I6EFD.js.map → oauth-transaction-store-W52KVHQ4.js.map} +1 -1
- package/dist/path-safety.cjs +11 -10
- package/dist/path-safety.js +4 -3
- package/dist/permission-engine.d.ts +55 -0
- package/dist/persistence.cjs +43 -42
- package/dist/persistence.cjs.map +1 -1
- package/dist/persistence.js +13 -12
- package/dist/persistence.js.map +1 -1
- package/dist/project.cjs +9 -8
- package/dist/project.cjs.map +1 -1
- package/dist/project.js +5 -4
- package/dist/project.js.map +1 -1
- package/dist/providers.cjs +23 -0
- package/dist/providers.cjs.map +1 -0
- package/dist/providers.d.cts +29 -0
- package/dist/providers.d.ts +29 -0
- package/dist/providers.js +10 -0
- package/dist/providers.js.map +1 -0
- package/dist/registry-VFKX7WOP.cjs +47 -0
- package/dist/{registry-UBY26R4I.cjs.map → registry-VFKX7WOP.cjs.map} +1 -1
- package/dist/registry-VFP3WWQP.js +10 -0
- package/dist/{registry-GC7BQMSV.js.map → registry-VFP3WWQP.js.map} +1 -1
- package/dist/retry.cjs +5 -4
- package/dist/retry.js +4 -3
- package/dist/{run-C8FBAC8o.d.ts → run-BYSHf58D.d.cts} +185 -33
- package/dist/{run-C8FBAC8o.d.cts → run-BYSHf58D.d.ts} +185 -33
- package/dist/{run-to-completion-JDPIUKSH.js → run-to-completion-DRO77625.js} +3 -3
- package/dist/{run-to-completion-JDPIUKSH.js.map → run-to-completion-DRO77625.js.map} +1 -1
- package/dist/{run-to-completion-J73I6IY4.cjs → run-to-completion-X4OWM673.cjs} +13 -13
- package/dist/{run-to-completion-J73I6IY4.cjs.map → run-to-completion-X4OWM673.cjs.map} +1 -1
- package/dist/sandbox/bwrap.d.cts +27 -14
- package/dist/sandbox/bwrap.d.ts +27 -14
- package/dist/sandbox/index.cjs +21 -20
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.js +6 -5
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/linux-sandbox.d.cts +72 -0
- package/dist/sandbox/linux-sandbox.d.ts +72 -0
- package/dist/sandbox/local-sandbox.d.cts +41 -0
- package/dist/sandbox/local-sandbox.d.ts +41 -0
- package/dist/sandbox/seccomp.d.cts +6 -0
- package/dist/sandbox/seccomp.d.ts +6 -0
- package/dist/sandbox/types.d.cts +64 -0
- package/dist/sandbox/types.d.ts +64 -0
- package/dist/scorers.d.ts +38 -7
- package/dist/sdk-agent-D8qJVkuV.d.ts +860 -0
- package/dist/sdk-agent-DEoKhA8a.d.cts +860 -0
- package/dist/server/auth/errors.d.cts +1 -1
- package/dist/server/auth/errors.d.ts +1 -1
- package/dist/server/auth/index.cjs +29 -21
- package/dist/server/auth/index.cjs.map +1 -1
- package/dist/server/auth/index.d.cts +25 -15
- package/dist/server/auth/index.d.ts +25 -15
- package/dist/server/auth/index.js +15 -7
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/auth/oauth-transaction-store.d.cts +13 -1
- package/dist/server/auth/oauth-transaction-store.d.ts +13 -1
- package/dist/server/auth/orchestrator.d.cts +1 -1
- package/dist/server/auth/orchestrator.d.ts +1 -1
- package/dist/server/auth/types.d.cts +1 -1
- package/dist/server/auth/types.d.ts +1 -1
- package/dist/server/auth/validate-return-to.d.cts +21 -11
- package/dist/server/auth/validate-return-to.d.ts +21 -11
- package/dist/server/errors-envelope.cjs +15 -14
- package/dist/server/errors-envelope.cjs.map +1 -1
- package/dist/server/errors-envelope.d.cts +4 -4
- package/dist/server/errors-envelope.d.ts +4 -4
- package/dist/server/errors-envelope.js +4 -3
- package/dist/server/errors-envelope.js.map +1 -1
- package/dist/session-transcript-AKDYYGXQ.js +6 -0
- package/dist/{session-transcript-SKIRBEJE.js.map → session-transcript-AKDYYGXQ.js.map} +1 -1
- package/dist/session-transcript-JXHFTB7G.cjs +51 -0
- package/dist/{session-transcript-TNAJ4O3M.cjs.map → session-transcript-JXHFTB7G.cjs.map} +1 -1
- package/dist/skills.cjs +8 -7
- package/dist/skills.js +6 -5
- package/dist/stream-object-BUCF5PHO.cjs +21 -0
- package/dist/{stream-object-T4DAMNVB.cjs.map → stream-object-BUCF5PHO.cjs.map} +1 -1
- package/dist/stream-object-L57K4OFS.js +8 -0
- package/dist/{stream-object-QMNR3YFF.js.map → stream-object-L57K4OFS.js.map} +1 -1
- package/dist/{stream-to-completion-DFJ5T3BK.js → stream-to-completion-QV5HCL3J.js} +3 -3
- package/dist/{stream-to-completion-DFJ5T3BK.js.map → stream-to-completion-QV5HCL3J.js.map} +1 -1
- package/dist/{stream-to-completion-H2MHISSK.cjs → stream-to-completion-SRISU5AB.cjs} +10 -10
- package/dist/{stream-to-completion-H2MHISSK.cjs.map → stream-to-completion-SRISU5AB.cjs.map} +1 -1
- package/dist/subagents-loader-AZIXJ7D3.cjs +16 -0
- package/dist/{subagents-loader-3CXBQWWY.cjs.map → subagents-loader-AZIXJ7D3.cjs.map} +1 -1
- package/dist/subagents-loader-J54ESLDV.js +7 -0
- package/dist/{subagents-loader-WN2SB6PV.js.map → subagents-loader-J54ESLDV.js.map} +1 -1
- package/dist/subagents-loader.cjs +7 -6
- package/dist/subagents-loader.cjs.map +1 -1
- package/dist/subagents-loader.d.cts +3 -2
- package/dist/subagents-loader.d.ts +3 -2
- package/dist/subagents-loader.js +5 -4
- package/dist/subagents-loader.js.map +1 -1
- package/dist/subscription/define-subscription.d.cts +1 -1
- package/dist/subscription/define-subscription.d.ts +1 -1
- package/dist/subscription/index.cjs +22 -9
- package/dist/subscription/index.cjs.map +1 -1
- package/dist/subscription/index.d.cts +1 -1
- package/dist/subscription/index.d.ts +1 -1
- package/dist/subscription/index.js +21 -8
- package/dist/subscription/index.js.map +1 -1
- package/dist/subscription/internal/adapter-types.d.cts +1 -1
- package/dist/subscription/internal/adapter-types.d.ts +1 -1
- package/dist/subscription/internal/server-integration.d.cts +1 -1
- package/dist/subscription/internal/server-integration.d.ts +1 -1
- package/dist/subscription/internal/sse-encoder.d.cts +1 -1
- package/dist/subscription/internal/sse-encoder.d.ts +1 -1
- package/dist/subscription/internal/sse-parser.d.cts +1 -1
- package/dist/subscription/internal/sse-parser.d.ts +1 -1
- package/dist/subscription/internal/subscription-runtime.d.cts +1 -1
- package/dist/subscription/internal/subscription-runtime.d.ts +1 -1
- package/dist/subscription/internal/ws-adapter-node.d.cts +1 -1
- package/dist/subscription/internal/ws-adapter-node.d.ts +1 -1
- package/dist/subscription/theokit-subscribe.d.cts +14 -1
- package/dist/subscription/theokit-subscribe.d.ts +14 -1
- package/dist/subscription/types.d.cts +19 -1
- package/dist/subscription/types.d.ts +19 -1
- package/dist/task-store.cjs +8 -7
- package/dist/task-store.js +5 -4
- package/dist/types/agent-prims.d.ts +14 -0
- package/dist/types/agent.d.ts +69 -17
- package/dist/types/batch.d.ts +7 -1
- package/dist/types/conversation.d.ts +18 -5
- package/dist/types/goal-events.d.ts +4 -8
- package/dist/types/memory-adapter.d.ts +12 -1
- package/dist/types/plugin.d.ts +101 -0
- package/dist/types/provider-profile.d.ts +21 -2
- package/dist/types/run-events.d.ts +28 -1
- package/dist/types/run.d.ts +35 -23
- package/dist/types/sdk-agent.d.ts +14 -0
- package/dist/types/session-record.d.ts +18 -1
- package/dist/types/task.d.ts +15 -1
- package/dist/types/theokit.d.ts +10 -1
- package/dist/types/updates.d.ts +35 -4
- package/dist/types/workflow.d.ts +155 -0
- package/dist/workflow.cjs +29 -28
- package/dist/workflow.d.cts +666 -17
- package/dist/workflow.d.ts +666 -17
- package/dist/workflow.js +8 -7
- package/docs/error-codes.md +208 -172
- package/docs/harness-capability-map.md +1357 -304
- package/package.json +21 -8
- package/bin/init-claude.mjs +0 -68
- package/claude-template/AGENTS.md +0 -157
- package/claude-template/CLAUDE.md +0 -66
- package/claude-template/dot-claude/rules/theokit-conventions.md +0 -32
- package/claude-template/dot-claude/settings.json +0 -16
- package/claude-template/dot-claude/skills/theokit-agent-core/SKILL.md +0 -209
- package/claude-template/dot-claude/skills/theokit-auth/SKILL.md +0 -102
- package/claude-template/dot-claude/skills/theokit-budget/SKILL.md +0 -176
- package/claude-template/dot-claude/skills/theokit-client/SKILL.md +0 -58
- package/claude-template/dot-claude/skills/theokit-compaction/SKILL.md +0 -102
- package/claude-template/dot-claude/skills/theokit-concurrency/SKILL.md +0 -68
- package/claude-template/dot-claude/skills/theokit-config/SKILL.md +0 -139
- package/claude-template/dot-claude/skills/theokit-cron/SKILL.md +0 -148
- package/claude-template/dot-claude/skills/theokit-di/SKILL.md +0 -233
- package/claude-template/dot-claude/skills/theokit-di-agent/SKILL.md +0 -294
- package/claude-template/dot-claude/skills/theokit-errors/SKILL.md +0 -172
- package/claude-template/dot-claude/skills/theokit-eval/SKILL.md +0 -179
- package/claude-template/dot-claude/skills/theokit-filesystem/SKILL.md +0 -74
- package/claude-template/dot-claude/skills/theokit-gateways/SKILL.md +0 -209
- package/claude-template/dot-claude/skills/theokit-memory/SKILL.md +0 -176
- package/claude-template/dot-claude/skills/theokit-messages/SKILL.md +0 -58
- package/claude-template/dot-claude/skills/theokit-models/SKILL.md +0 -79
- package/claude-template/dot-claude/skills/theokit-path-safety/SKILL.md +0 -60
- package/claude-template/dot-claude/skills/theokit-persistence/SKILL.md +0 -85
- package/claude-template/dot-claude/skills/theokit-project/SKILL.md +0 -55
- package/claude-template/dot-claude/skills/theokit-retry/SKILL.md +0 -50
- package/claude-template/dot-claude/skills/theokit-sandbox/SKILL.md +0 -93
- package/claude-template/dot-claude/skills/theokit-sanitize/SKILL.md +0 -66
- package/claude-template/dot-claude/skills/theokit-skills/SKILL.md +0 -68
- package/claude-template/dot-claude/skills/theokit-streaming/SKILL.md +0 -156
- package/claude-template/dot-claude/skills/theokit-subagents/SKILL.md +0 -109
- package/claude-template/dot-claude/skills/theokit-subscriptions/SKILL.md +0 -148
- package/claude-template/dot-claude/skills/theokit-task-store/SKILL.md +0 -75
- package/claude-template/dot-claude/skills/theokit-tools/SKILL.md +0 -170
- package/claude-template/dot-claude/skills/theokit-workflows/SKILL.md +0 -218
- package/dist/agent-JX5SBYDE.cjs +0 -59
- package/dist/agent-ZAGG6ZBS.js +0 -50
- package/dist/agent-session-store-EPX2WQI4.cjs +0 -23
- package/dist/agent-session-store-JMU7ASDB.js +0 -6
- package/dist/batch-NLIS4QTW.js.map +0 -1
- package/dist/batch-WQ3AJCDV.cjs.map +0 -1
- package/dist/chunk-23VZBRDQ.js.map +0 -1
- package/dist/chunk-2CFEET3Y.cjs.map +0 -1
- package/dist/chunk-2QMK627M.cjs.map +0 -1
- package/dist/chunk-2RW7K6FN.cjs.map +0 -1
- package/dist/chunk-2VFZQEDW.cjs.map +0 -1
- package/dist/chunk-2XLKLVVR.js.map +0 -1
- package/dist/chunk-2Y5NO2SY.js.map +0 -1
- package/dist/chunk-2YGIBOUH.cjs.map +0 -1
- package/dist/chunk-2YWWPCGX.js.map +0 -1
- package/dist/chunk-33L2NVTJ.cjs.map +0 -1
- package/dist/chunk-34XOCZJO.js.map +0 -1
- package/dist/chunk-3SHW7XKK.js.map +0 -1
- package/dist/chunk-4NAKHID5.js.map +0 -1
- package/dist/chunk-4X3SBHPK.js.map +0 -1
- package/dist/chunk-5NBUH3NO.js.map +0 -1
- package/dist/chunk-634YVZLU.js.map +0 -1
- package/dist/chunk-6DCTL32L.cjs.map +0 -1
- package/dist/chunk-6PTCKXD3.js.map +0 -1
- package/dist/chunk-7HQVDLFI.cjs.map +0 -1
- package/dist/chunk-7TB5U7RK.js.map +0 -1
- package/dist/chunk-7W7ZWMLQ.js.map +0 -1
- package/dist/chunk-ADVZIC43.cjs.map +0 -1
- package/dist/chunk-AM2CNBKE.js.map +0 -1
- package/dist/chunk-AMYY3JHQ.cjs.map +0 -1
- package/dist/chunk-B4YA6BRS.cjs.map +0 -1
- package/dist/chunk-BBZYXVLZ.cjs.map +0 -1
- package/dist/chunk-BC5EUG7R.cjs.map +0 -1
- package/dist/chunk-CAH3G4IS.js.map +0 -1
- package/dist/chunk-CHVSMEKM.js.map +0 -1
- package/dist/chunk-CZHPR2G7.cjs.map +0 -1
- package/dist/chunk-DEZ75ET5.js.map +0 -1
- package/dist/chunk-DM6Y5B2G.cjs.map +0 -1
- package/dist/chunk-EFXJ5C7X.js.map +0 -1
- package/dist/chunk-EQMLJ52C.cjs.map +0 -1
- package/dist/chunk-FBZMSLDC.cjs.map +0 -1
- package/dist/chunk-HI4ZW62S.js.map +0 -1
- package/dist/chunk-HTK54K2J.js.map +0 -1
- package/dist/chunk-I5OTK2RP.js.map +0 -1
- package/dist/chunk-JJZ4NIAG.js.map +0 -1
- package/dist/chunk-KIX45IKP.js.map +0 -1
- package/dist/chunk-KZBB4YKU.js.map +0 -1
- package/dist/chunk-L5YO6PWL.cjs.map +0 -1
- package/dist/chunk-L7EGRCKJ.js.map +0 -1
- package/dist/chunk-NOS7PTKP.js.map +0 -1
- package/dist/chunk-NUEL6RCZ.cjs.map +0 -1
- package/dist/chunk-NZOR3N4E.js.map +0 -1
- package/dist/chunk-OKLYRPKL.cjs.map +0 -1
- package/dist/chunk-OXNYIMZZ.js.map +0 -1
- package/dist/chunk-PNVDQL5Y.cjs.map +0 -1
- package/dist/chunk-QLAWEGTZ.cjs.map +0 -1
- package/dist/chunk-QN5N3ZVT.cjs.map +0 -1
- package/dist/chunk-R3CKCRK3.cjs.map +0 -1
- package/dist/chunk-R7TKOQMJ.js.map +0 -1
- package/dist/chunk-RP5HQVLD.js.map +0 -1
- package/dist/chunk-SXSPMRSV.cjs.map +0 -1
- package/dist/chunk-T5ZWI3MC.cjs.map +0 -1
- package/dist/chunk-T6QUCG7L.cjs.map +0 -1
- package/dist/chunk-TR4V2LHV.cjs.map +0 -1
- package/dist/chunk-VYCKUKPA.cjs.map +0 -1
- package/dist/chunk-VYHJZVL5.cjs.map +0 -1
- package/dist/chunk-W4FV7JBH.js.map +0 -1
- package/dist/chunk-X2FR4OIT.js.map +0 -1
- package/dist/chunk-XRI6DXPZ.js.map +0 -1
- package/dist/chunk-XWCTBGYK.js.map +0 -1
- package/dist/chunk-YLQQX5W2.cjs.map +0 -1
- package/dist/chunk-YTO5BRBD.cjs.map +0 -1
- package/dist/chunk-Z5U2JGEK.cjs.map +0 -1
- package/dist/compact-session-6GKIS4SD.cjs +0 -58
- package/dist/compact-session-EJ36VH5I.js +0 -21
- package/dist/context-4HGPCOH6.cjs +0 -22
- package/dist/context-DCECDKWN.js +0 -5
- package/dist/cron-DgHJnMAK.d.cts +0 -631
- package/dist/cron-DyWQsEG6.d.ts +0 -631
- package/dist/executor-3CGPLVJL.js.map +0 -1
- package/dist/executor-4SW7QGZ4.cjs.map +0 -1
- package/dist/fs-session-store-LIKYT24K.js +0 -10
- package/dist/fs-session-store-VXXDIBGM.cjs +0 -19
- package/dist/generate-object-E465DX5I.cjs +0 -20
- package/dist/generate-object-TVQCW2IZ.js +0 -7
- package/dist/index-manager-EA6FGIQG.js +0 -12
- package/dist/index-manager-HGGL4DD5.cjs +0 -21
- package/dist/inject-session-67SF65FC.cjs +0 -28
- package/dist/inject-session-67SF65FC.cjs.map +0 -1
- package/dist/inject-session-HO7FYVCX.js.map +0 -1
- package/dist/judge-call-GVIJWQVE.cjs +0 -22
- package/dist/judge-call-QMKGC2ZK.js +0 -5
- package/dist/oauth-transaction-store-7CKHPQRN.cjs +0 -32
- package/dist/oauth-transaction-store-W74I6EFD.js +0 -3
- package/dist/registry-GC7BQMSV.js +0 -9
- package/dist/registry-UBY26R4I.cjs +0 -46
- package/dist/session-transcript-SKIRBEJE.js +0 -5
- package/dist/session-transcript-TNAJ4O3M.cjs +0 -50
- package/dist/stream-object-QMNR3YFF.js +0 -7
- package/dist/stream-object-T4DAMNVB.cjs +0 -20
- package/dist/subagents-loader-3CXBQWWY.cjs +0 -15
- package/dist/subagents-loader-WN2SB6PV.js +0 -6
|
@@ -1 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Post-run side effects executed inside the per-agent send mutex (ADR D19):
|
|
3
|
+
*
|
|
4
|
+
* 1. Persist the assistant turn to the per-agent JSONL (ADR D18).
|
|
5
|
+
* 2. On status=finished, write a session-summary markdown for the
|
|
6
|
+
* `corpus="sessions"` memory_search index (ADR D20).
|
|
7
|
+
* 3. Fire the `postRun` hook with the resolved status.
|
|
8
|
+
* 4. Flush pending session writes so dispose() never races the writer.
|
|
9
|
+
*
|
|
10
|
+
* Errors are swallowed at the call site so `agent.send()` callers observe
|
|
11
|
+
* failures through their own `run.wait()` / `stream()` surfaces. Mutex release
|
|
12
|
+
* is guaranteed via the final `flushSessionWrites` even on the cancelled path.
|
|
13
|
+
*
|
|
14
|
+
* Extracted from LocalAgent to keep that class under the G8 LoC budget.
|
|
15
|
+
*/
|
|
1
16
|
export declare function runPostRunLifecycle(inputs: PostRunLifecycleInputs): Promise<void>;
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent agent registry (ADR D17).
|
|
3
|
+
*
|
|
4
|
+
* Per-cwd JSON file at `.theokit/agents/registry.json`. Atomic writes via
|
|
5
|
+
* `replaceFileAtomic`. Secrets in `options` are stripped before persisting
|
|
6
|
+
* (D17 + reuses the cloud-config-serializer allow-list philosophy).
|
|
7
|
+
*
|
|
8
|
+
* Multi-process write race is the documented limitation: one SDK process per
|
|
9
|
+
* cwd (EC-10).
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
1
13
|
import type { ModelSelection } from "../../../types/agent-prims.js";
|
|
2
14
|
export interface SerializedAgentOptions {
|
|
3
15
|
name?: string;
|
|
@@ -19,6 +19,20 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import type { SDKAgent } from "../../../types/agent.js";
|
|
21
21
|
export type EvictReason = "lru" | "idle" | "explicit";
|
|
22
|
+
/**
|
|
23
|
+
* Knobs for {@link LiveAgentRegistry.configure}.
|
|
24
|
+
*
|
|
25
|
+
* The three numeric fields are a partial reconfigure — one left out keeps its current value.
|
|
26
|
+
* `onEvict` is NOT: it is assigned on every call, so `configure({ maxAgents: 200 })` clears a
|
|
27
|
+
* listener registered earlier. Re-pass the listener whenever you reconfigure.
|
|
28
|
+
*
|
|
29
|
+
* Two values are load-bearing zeroes. `maxAgents: 0` disables caching entirely, so every lookup
|
|
30
|
+
* misses and every agent is rebuilt; `idleTimeoutMs: 0` keeps the cache but leaves LRU as the only
|
|
31
|
+
* eviction, because the sweep is not started at all below that threshold. Negative numbers are
|
|
32
|
+
* clamped rather than rejected — up to 1000ms for `sweepIntervalMs`, up to 0 for the other two.
|
|
33
|
+
*
|
|
34
|
+
* @public
|
|
35
|
+
*/
|
|
22
36
|
export interface AgentRegistryOptions {
|
|
23
37
|
/**
|
|
24
38
|
* Maximum number of agents kept alive simultaneously. LRU eviction when
|
|
@@ -45,6 +59,29 @@ export interface AgentRegistryOptions {
|
|
|
45
59
|
*/
|
|
46
60
|
onEvict?: (id: string, reason: EvictReason) => void;
|
|
47
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* An LRU-plus-idle cache of live `SDKAgent` instances, reached through `Agent.registry`.
|
|
64
|
+
*
|
|
65
|
+
* It exists for long-running servers that would otherwise build a fresh agent per conversation and
|
|
66
|
+
* never release one. Do not confuse it with the metadata registry in `agent-registry.ts`, which
|
|
67
|
+
* persists `RegisteredAgent` records to disk: that one is the address book, this one is the live
|
|
68
|
+
* cache, and they share nothing.
|
|
69
|
+
*
|
|
70
|
+
* The lifecycle rule that matters to callers: eviction — by LRU, by idle timeout, or by an explicit
|
|
71
|
+
* `evict` — calls `dispose()` on the agent. A reference you held onto before eviction is a disposed
|
|
72
|
+
* agent, not a detached one. `get` counts as a use and refreshes the entry's timestamp, so polling
|
|
73
|
+
* for an agent keeps it alive indefinitely.
|
|
74
|
+
*
|
|
75
|
+
* Idle eviction depends on a background sweep that only `configure` starts. A registry nobody
|
|
76
|
+
* configured caches with the documented defaults but evicts by LRU alone, so entries can sit past
|
|
77
|
+
* `idleTimeoutMs` indefinitely; call `configure` — even with no changes — to arm the sweep.
|
|
78
|
+
*
|
|
79
|
+
* Failures on the eviction path are swallowed and reported to the diagnostics channel — a throwing
|
|
80
|
+
* `dispose()` or a throwing `onEvict` listener must not stop the sweep. Configuration is
|
|
81
|
+
* process-wide and last-call-wins.
|
|
82
|
+
*
|
|
83
|
+
* @public
|
|
84
|
+
*/
|
|
48
85
|
export declare class LiveAgentRegistry {
|
|
49
86
|
#private;
|
|
50
87
|
/**
|
|
@@ -6,8 +6,13 @@
|
|
|
6
6
|
* structured judge prompt, parses score from the response. Returns 0 (with
|
|
7
7
|
* diagnostic reason) on any parse failure.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* NOTE — no internal-visibility tag in this block. `tsconfig.base.json` sets `stripInternal: true`,
|
|
10
|
+
* and TypeScript scans EVERY leading comment range of the declaration that follows, including the
|
|
11
|
+
* import right below this one. The tag that used to sit here deleted that import from the emitted
|
|
12
|
+
* `.d.ts`, leaving the types it binds unresolvable for any consumer running type-aware lint
|
|
13
|
+
* (usetheodev/theokit-sdk#283 records the same trap on a declaration).
|
|
10
14
|
*/
|
|
15
|
+
import type { ModelSelection } from "../../types/agent.js";
|
|
11
16
|
import type { Score } from "../../types/eval.js";
|
|
12
17
|
import type { ProviderRoutingSettings } from "../../types/providers.js";
|
|
13
18
|
export interface LlmJudgeOptions {
|
|
@@ -1,52 +1,53 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
require('../../chunk-MUUQ2WFJ.cjs');
|
|
4
|
-
var
|
|
4
|
+
var chunkR3UPQFKK_cjs = require('../../chunk-R3UPQFKK.cjs');
|
|
5
5
|
require('../../chunk-VKJ7V7EB.cjs');
|
|
6
|
-
require('../../chunk-
|
|
7
|
-
var
|
|
6
|
+
require('../../chunk-K3FW2XZD.cjs');
|
|
7
|
+
var chunkJTB5Q42C_cjs = require('../../chunk-JTB5Q42C.cjs');
|
|
8
|
+
require('../../chunk-NUKRL3I6.cjs');
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
Object.defineProperty(exports, "ForbiddenPathError", {
|
|
12
13
|
enumerable: true,
|
|
13
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkR3UPQFKK_cjs.ForbiddenPathError; }
|
|
14
15
|
});
|
|
15
16
|
Object.defineProperty(exports, "PathTraversalError", {
|
|
16
17
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkR3UPQFKK_cjs.PathTraversalError; }
|
|
18
19
|
});
|
|
19
20
|
Object.defineProperty(exports, "assertNoSymlinkEscape", {
|
|
20
21
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkR3UPQFKK_cjs.assertNoSymlinkEscape; }
|
|
22
23
|
});
|
|
23
24
|
Object.defineProperty(exports, "isForbiddenPath", {
|
|
24
25
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
26
|
+
get: function () { return chunkR3UPQFKK_cjs.isForbiddenPath; }
|
|
26
27
|
});
|
|
27
28
|
Object.defineProperty(exports, "safePathJoin", {
|
|
28
29
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
30
|
+
get: function () { return chunkR3UPQFKK_cjs.safePathJoin; }
|
|
30
31
|
});
|
|
31
32
|
Object.defineProperty(exports, "sanitizeIdentifier", {
|
|
32
33
|
enumerable: true,
|
|
33
|
-
get: function () { return
|
|
34
|
+
get: function () { return chunkR3UPQFKK_cjs.sanitizeIdentifier; }
|
|
34
35
|
});
|
|
35
36
|
Object.defineProperty(exports, "validateArtifactPath", {
|
|
36
37
|
enumerable: true,
|
|
37
|
-
get: function () { return
|
|
38
|
+
get: function () { return chunkR3UPQFKK_cjs.validateArtifactPath; }
|
|
38
39
|
});
|
|
39
40
|
Object.defineProperty(exports, "addPattern", {
|
|
40
41
|
enumerable: true,
|
|
41
|
-
get: function () { return
|
|
42
|
+
get: function () { return chunkJTB5Q42C_cjs.addPattern; }
|
|
42
43
|
});
|
|
43
44
|
Object.defineProperty(exports, "maskToken", {
|
|
44
45
|
enumerable: true,
|
|
45
|
-
get: function () { return
|
|
46
|
+
get: function () { return chunkJTB5Q42C_cjs.maskToken; }
|
|
46
47
|
});
|
|
47
48
|
Object.defineProperty(exports, "redactSecrets", {
|
|
48
49
|
enumerable: true,
|
|
49
|
-
get: function () { return
|
|
50
|
+
get: function () { return chunkJTB5Q42C_cjs.redactSecrets; }
|
|
50
51
|
});
|
|
51
52
|
//# sourceMappingURL=index.cjs.map
|
|
52
53
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
* `internal/runtime/agent-session-store.ts`,
|
|
7
7
|
* `internal/memory/migrate-sqlite-to-lance.ts`.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* Semver-exempt: the `@theokit/sdk/internal/security` sub-path exists for packages extracted out of
|
|
10
|
+
* this one and is NOT covered by the package's semver contract. It IS declared in `package.json`
|
|
11
|
+
* `exports`, so every name below must survive into the published declarations.
|
|
10
12
|
*/
|
|
13
|
+
export { assertNoSymlinkEscape, ForbiddenPathError, isForbiddenPath, PathTraversalError, safePathJoin, sanitizeIdentifier, validateArtifactPath, } from "./path-guard.js";
|
|
11
14
|
export { addPattern, maskToken, redactSecrets } from "./redact.js";
|
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
* `internal/runtime/agent-session-store.ts`,
|
|
7
7
|
* `internal/memory/migrate-sqlite-to-lance.ts`.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* Semver-exempt: the `@theokit/sdk/internal/security` sub-path exists for packages extracted out of
|
|
10
|
+
* this one and is NOT covered by the package's semver contract. It IS declared in `package.json`
|
|
11
|
+
* `exports`, so every name below must survive into the published declarations.
|
|
10
12
|
*/
|
|
13
|
+
export { assertNoSymlinkEscape, ForbiddenPathError, isForbiddenPath, PathTraversalError, safePathJoin, sanitizeIdentifier, validateArtifactPath, } from "./path-guard.js";
|
|
11
14
|
export { addPattern, maskToken, redactSecrets } from "./redact.js";
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import '../../chunk-FD2UT76F.js';
|
|
2
|
-
export { ForbiddenPathError, PathTraversalError, assertNoSymlinkEscape, isForbiddenPath, safePathJoin, sanitizeIdentifier, validateArtifactPath } from '../../chunk-
|
|
2
|
+
export { ForbiddenPathError, PathTraversalError, assertNoSymlinkEscape, isForbiddenPath, safePathJoin, sanitizeIdentifier, validateArtifactPath } from '../../chunk-QARJGQSA.js';
|
|
3
3
|
import '../../chunk-RIAM53CP.js';
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
export { addPattern, maskToken, redactSecrets } from '../../chunk-
|
|
4
|
+
import '../../chunk-IDCKSLYH.js';
|
|
5
|
+
export { addPattern, maskToken, redactSecrets } from '../../chunk-T7XEKOVW.js';
|
|
6
|
+
import '../../chunk-T7O6K6PX.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -18,6 +18,15 @@
|
|
|
18
18
|
* @internal
|
|
19
19
|
*/
|
|
20
20
|
import { ConfigurationError } from "../../errors.js";
|
|
21
|
+
/**
|
|
22
|
+
* Thrown when a path operation would escape its allowed base directory.
|
|
23
|
+
* Extends `ConfigurationError` (no new error hierarchy per ADR D65).
|
|
24
|
+
*
|
|
25
|
+
*/
|
|
26
|
+
export declare class PathTraversalError extends ConfigurationError {
|
|
27
|
+
readonly name: string;
|
|
28
|
+
constructor(input: string, resolvedPath: string);
|
|
29
|
+
}
|
|
21
30
|
/**
|
|
22
31
|
* Thrown when an agent tool is asked to read or write a sensitive path
|
|
23
32
|
* that the blocklist forbids (`.env`, `.git/`, `node_modules/`, `.theo/`,
|
|
@@ -32,6 +41,33 @@ export declare class ForbiddenPathError extends ConfigurationError {
|
|
|
32
41
|
readonly name: string;
|
|
33
42
|
constructor(path: string);
|
|
34
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Join `base` with `...parts` and ensure the resolved absolute path stays
|
|
46
|
+
* under `base`. Resolves FIRST, then prefix-checks (ADR D80) — prevents
|
|
47
|
+
* normalized-escape bypasses like `subdir/.\\./bar`.
|
|
48
|
+
*
|
|
49
|
+
* Returns the safe absolute path. Throws `PathTraversalError` if escape.
|
|
50
|
+
*
|
|
51
|
+
*/
|
|
52
|
+
export declare function safePathJoin(base: string, ...parts: string[]): string;
|
|
53
|
+
/**
|
|
54
|
+
* Assert that `path` — including every directory component in the chain —
|
|
55
|
+
* stays under `base` after symlink resolution. No-op when nothing on the
|
|
56
|
+
* path exists yet.
|
|
57
|
+
*
|
|
58
|
+
* Two-bug history:
|
|
59
|
+
* 1. **EC-1** (original fix, kept): a multi-level symlink chain A → B → C
|
|
60
|
+
* must be resolved end-to-end. `realpathSync` does this in 1 syscall.
|
|
61
|
+
* 2. **Defence-in-depth** (added v1.x): the previous implementation only
|
|
62
|
+
* called `lstatSync(path)` on the terminal component. If an INTERMEDIATE
|
|
63
|
+
* directory was a symlink (`base/inner-symlink → /outside`), `lstat` on
|
|
64
|
+
* `base/inner-symlink/file.txt` followed the symlink and reported the
|
|
65
|
+
* regular file — escape went undetected. Fix: walk up to the nearest
|
|
66
|
+
* existing ancestor and `realpath` THAT, then re-attach the suffix and
|
|
67
|
+
* check the result against the canonical base.
|
|
68
|
+
*
|
|
69
|
+
*/
|
|
70
|
+
export declare function assertNoSymlinkEscape(path: string, base: string): void;
|
|
35
71
|
/**
|
|
36
72
|
* Decide whether a project-relative path points to a known-sensitive file
|
|
37
73
|
* that a coding agent must not read or write.
|
|
@@ -54,6 +90,77 @@ export declare class ForbiddenPathError extends ConfigurationError {
|
|
|
54
90
|
* @public
|
|
55
91
|
*/
|
|
56
92
|
export declare function isForbiddenPath(input: string): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* T1.4 — validate a relative artifact path string BEFORE it is used to look
|
|
95
|
+
* up a fixture or to fetch from PaaS. Rejects every well-known traversal
|
|
96
|
+
* vector at the boundary, throwing `PathTraversalError`.
|
|
97
|
+
*
|
|
98
|
+
* Vectors rejected:
|
|
99
|
+
* - classic `..` parent-directory traversal (any segment).
|
|
100
|
+
* - backslash separators (Windows-style `..\\windows`).
|
|
101
|
+
* - URL-encoded `%2e%2e` / `%2E%2E` (double-decoded traversal).
|
|
102
|
+
* - NUL byte injection (`\x00`).
|
|
103
|
+
* - Windows drive letter prefix (`C:`, `D:\\...`).
|
|
104
|
+
* - Home-tilde expansion (`~/`, `~root/...`).
|
|
105
|
+
* - Absolute paths starting with `/`.
|
|
106
|
+
*
|
|
107
|
+
* Does NOT touch the filesystem — the call is shape-only. Live symlink
|
|
108
|
+
* traversal protection happens via `assertNoSymlinkEscape` at the FS-resolve
|
|
109
|
+
* boundary.
|
|
110
|
+
*
|
|
111
|
+
* @param input - Caller-supplied artifact path.
|
|
112
|
+
* @throws `PathTraversalError` on any rejection.
|
|
113
|
+
*
|
|
114
|
+
* Semver-exempt: reachable via the `@theokit/sdk/internal/security` sub-path, which the package
|
|
115
|
+
* declares in `exports` but does NOT cover with its semver contract.
|
|
116
|
+
*/
|
|
117
|
+
export declare function validateArtifactPath(input: string): void;
|
|
118
|
+
/**
|
|
119
|
+
* Validate that `input` is a safe path component (skill name, agent ID,
|
|
120
|
+
* namespace, etc.) and return its lowercase form. Strict grammar
|
|
121
|
+
* `^[a-z0-9][a-z0-9-_]*$` rejects path separators, dots, null bytes,
|
|
122
|
+
* whitespace, unicode invisible chars, and any leading `-`/`_`.
|
|
123
|
+
*
|
|
124
|
+
* ONE error class leaves this function: `ConfigurationError` with code
|
|
125
|
+
* `invalid_identifier`, for every rejection — length out of range, a path
|
|
126
|
+
* separator, `..`, a space, a leading `-`, and a NUL / C0 control char / DEL
|
|
127
|
+
* alike. A caller can branch on that code and know it has covered the whole
|
|
128
|
+
* rejection surface.
|
|
129
|
+
*
|
|
130
|
+
* Before #368 the control-char branch threw `PathTraversalError` instead, which
|
|
131
|
+
* made the error CLASS a function of the attacker's bytes; the message still names
|
|
132
|
+
* the offending byte, which is the part that was worth keeping.
|
|
133
|
+
*
|
|
134
|
+
* @param input - User-supplied identifier candidate.
|
|
135
|
+
* @param options.maxLen - Maximum allowed length (default 64).
|
|
136
|
+
* @returns Lowercase form of `input`.
|
|
137
|
+
* @throws `ConfigurationError` with code `invalid_identifier` on every rejection.
|
|
138
|
+
*/
|
|
57
139
|
export declare function sanitizeIdentifier(input: string, options?: {
|
|
58
140
|
maxLen?: number;
|
|
59
141
|
}): string;
|
|
142
|
+
/**
|
|
143
|
+
* Convert ANY opaque id (agent id, run id, conversation id, namespace, email,
|
|
144
|
+
* arbitrary string) into a deterministic, filesystem-safe filename component.
|
|
145
|
+
*
|
|
146
|
+
* Unlike {@link sanitizeIdentifier} (which THROWS on non-conforming input),
|
|
147
|
+
* this is a total function: it NEVER throws on a non-empty string. It returns
|
|
148
|
+
* the lowercased id verbatim when it already matches the safe grammar
|
|
149
|
+
* `^[a-z0-9][a-z0-9-_]*$` and fits `maxLen` (so UUIDs, hashes, and slugs stay
|
|
150
|
+
* human-readable), otherwise a deterministic `h-<16 hex>` sha256 token
|
|
151
|
+
* (collision-resistant and always a valid filename). The output charset is
|
|
152
|
+
* always `[a-z0-9_-]`, safe as a literal path segment on every filesystem.
|
|
153
|
+
*
|
|
154
|
+
* @param id - any opaque identifier (must be a non-empty string)
|
|
155
|
+
* @param options.maxLen - max length for the passthrough branch (default 128).
|
|
156
|
+
* Ids longer than this are hashed; the hash token itself is always short.
|
|
157
|
+
* @throws ConfigurationError (code `invalid_filename_id`) only on empty input.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* safeFilenameForId("550e8400-e29b-41d4-a716-446655440000") // passthrough
|
|
161
|
+
* safeFilenameForId("user@example.com") // "h-<16hex>"
|
|
162
|
+
*
|
|
163
|
+
*/
|
|
164
|
+
export declare function safeFilenameForId(id: string, options?: {
|
|
165
|
+
maxLen?: number;
|
|
166
|
+
}): string;
|
|
@@ -18,6 +18,15 @@
|
|
|
18
18
|
* @internal
|
|
19
19
|
*/
|
|
20
20
|
import { ConfigurationError } from "../../errors.js";
|
|
21
|
+
/**
|
|
22
|
+
* Thrown when a path operation would escape its allowed base directory.
|
|
23
|
+
* Extends `ConfigurationError` (no new error hierarchy per ADR D65).
|
|
24
|
+
*
|
|
25
|
+
*/
|
|
26
|
+
export declare class PathTraversalError extends ConfigurationError {
|
|
27
|
+
readonly name: string;
|
|
28
|
+
constructor(input: string, resolvedPath: string);
|
|
29
|
+
}
|
|
21
30
|
/**
|
|
22
31
|
* Thrown when an agent tool is asked to read or write a sensitive path
|
|
23
32
|
* that the blocklist forbids (`.env`, `.git/`, `node_modules/`, `.theo/`,
|
|
@@ -32,6 +41,33 @@ export declare class ForbiddenPathError extends ConfigurationError {
|
|
|
32
41
|
readonly name: string;
|
|
33
42
|
constructor(path: string);
|
|
34
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Join `base` with `...parts` and ensure the resolved absolute path stays
|
|
46
|
+
* under `base`. Resolves FIRST, then prefix-checks (ADR D80) — prevents
|
|
47
|
+
* normalized-escape bypasses like `subdir/.\\./bar`.
|
|
48
|
+
*
|
|
49
|
+
* Returns the safe absolute path. Throws `PathTraversalError` if escape.
|
|
50
|
+
*
|
|
51
|
+
*/
|
|
52
|
+
export declare function safePathJoin(base: string, ...parts: string[]): string;
|
|
53
|
+
/**
|
|
54
|
+
* Assert that `path` — including every directory component in the chain —
|
|
55
|
+
* stays under `base` after symlink resolution. No-op when nothing on the
|
|
56
|
+
* path exists yet.
|
|
57
|
+
*
|
|
58
|
+
* Two-bug history:
|
|
59
|
+
* 1. **EC-1** (original fix, kept): a multi-level symlink chain A → B → C
|
|
60
|
+
* must be resolved end-to-end. `realpathSync` does this in 1 syscall.
|
|
61
|
+
* 2. **Defence-in-depth** (added v1.x): the previous implementation only
|
|
62
|
+
* called `lstatSync(path)` on the terminal component. If an INTERMEDIATE
|
|
63
|
+
* directory was a symlink (`base/inner-symlink → /outside`), `lstat` on
|
|
64
|
+
* `base/inner-symlink/file.txt` followed the symlink and reported the
|
|
65
|
+
* regular file — escape went undetected. Fix: walk up to the nearest
|
|
66
|
+
* existing ancestor and `realpath` THAT, then re-attach the suffix and
|
|
67
|
+
* check the result against the canonical base.
|
|
68
|
+
*
|
|
69
|
+
*/
|
|
70
|
+
export declare function assertNoSymlinkEscape(path: string, base: string): void;
|
|
35
71
|
/**
|
|
36
72
|
* Decide whether a project-relative path points to a known-sensitive file
|
|
37
73
|
* that a coding agent must not read or write.
|
|
@@ -54,6 +90,77 @@ export declare class ForbiddenPathError extends ConfigurationError {
|
|
|
54
90
|
* @public
|
|
55
91
|
*/
|
|
56
92
|
export declare function isForbiddenPath(input: string): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* T1.4 — validate a relative artifact path string BEFORE it is used to look
|
|
95
|
+
* up a fixture or to fetch from PaaS. Rejects every well-known traversal
|
|
96
|
+
* vector at the boundary, throwing `PathTraversalError`.
|
|
97
|
+
*
|
|
98
|
+
* Vectors rejected:
|
|
99
|
+
* - classic `..` parent-directory traversal (any segment).
|
|
100
|
+
* - backslash separators (Windows-style `..\\windows`).
|
|
101
|
+
* - URL-encoded `%2e%2e` / `%2E%2E` (double-decoded traversal).
|
|
102
|
+
* - NUL byte injection (`\x00`).
|
|
103
|
+
* - Windows drive letter prefix (`C:`, `D:\\...`).
|
|
104
|
+
* - Home-tilde expansion (`~/`, `~root/...`).
|
|
105
|
+
* - Absolute paths starting with `/`.
|
|
106
|
+
*
|
|
107
|
+
* Does NOT touch the filesystem — the call is shape-only. Live symlink
|
|
108
|
+
* traversal protection happens via `assertNoSymlinkEscape` at the FS-resolve
|
|
109
|
+
* boundary.
|
|
110
|
+
*
|
|
111
|
+
* @param input - Caller-supplied artifact path.
|
|
112
|
+
* @throws `PathTraversalError` on any rejection.
|
|
113
|
+
*
|
|
114
|
+
* Semver-exempt: reachable via the `@theokit/sdk/internal/security` sub-path, which the package
|
|
115
|
+
* declares in `exports` but does NOT cover with its semver contract.
|
|
116
|
+
*/
|
|
117
|
+
export declare function validateArtifactPath(input: string): void;
|
|
118
|
+
/**
|
|
119
|
+
* Validate that `input` is a safe path component (skill name, agent ID,
|
|
120
|
+
* namespace, etc.) and return its lowercase form. Strict grammar
|
|
121
|
+
* `^[a-z0-9][a-z0-9-_]*$` rejects path separators, dots, null bytes,
|
|
122
|
+
* whitespace, unicode invisible chars, and any leading `-`/`_`.
|
|
123
|
+
*
|
|
124
|
+
* ONE error class leaves this function: `ConfigurationError` with code
|
|
125
|
+
* `invalid_identifier`, for every rejection — length out of range, a path
|
|
126
|
+
* separator, `..`, a space, a leading `-`, and a NUL / C0 control char / DEL
|
|
127
|
+
* alike. A caller can branch on that code and know it has covered the whole
|
|
128
|
+
* rejection surface.
|
|
129
|
+
*
|
|
130
|
+
* Before #368 the control-char branch threw `PathTraversalError` instead, which
|
|
131
|
+
* made the error CLASS a function of the attacker's bytes; the message still names
|
|
132
|
+
* the offending byte, which is the part that was worth keeping.
|
|
133
|
+
*
|
|
134
|
+
* @param input - User-supplied identifier candidate.
|
|
135
|
+
* @param options.maxLen - Maximum allowed length (default 64).
|
|
136
|
+
* @returns Lowercase form of `input`.
|
|
137
|
+
* @throws `ConfigurationError` with code `invalid_identifier` on every rejection.
|
|
138
|
+
*/
|
|
57
139
|
export declare function sanitizeIdentifier(input: string, options?: {
|
|
58
140
|
maxLen?: number;
|
|
59
141
|
}): string;
|
|
142
|
+
/**
|
|
143
|
+
* Convert ANY opaque id (agent id, run id, conversation id, namespace, email,
|
|
144
|
+
* arbitrary string) into a deterministic, filesystem-safe filename component.
|
|
145
|
+
*
|
|
146
|
+
* Unlike {@link sanitizeIdentifier} (which THROWS on non-conforming input),
|
|
147
|
+
* this is a total function: it NEVER throws on a non-empty string. It returns
|
|
148
|
+
* the lowercased id verbatim when it already matches the safe grammar
|
|
149
|
+
* `^[a-z0-9][a-z0-9-_]*$` and fits `maxLen` (so UUIDs, hashes, and slugs stay
|
|
150
|
+
* human-readable), otherwise a deterministic `h-<16 hex>` sha256 token
|
|
151
|
+
* (collision-resistant and always a valid filename). The output charset is
|
|
152
|
+
* always `[a-z0-9_-]`, safe as a literal path segment on every filesystem.
|
|
153
|
+
*
|
|
154
|
+
* @param id - any opaque identifier (must be a non-empty string)
|
|
155
|
+
* @param options.maxLen - max length for the passthrough branch (default 128).
|
|
156
|
+
* Ids longer than this are hashed; the hash token itself is always short.
|
|
157
|
+
* @throws ConfigurationError (code `invalid_filename_id`) only on empty input.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* safeFilenameForId("550e8400-e29b-41d4-a716-446655440000") // passthrough
|
|
161
|
+
* safeFilenameForId("user@example.com") // "h-<16hex>"
|
|
162
|
+
*
|
|
163
|
+
*/
|
|
164
|
+
export declare function safeFilenameForId(id: string, options?: {
|
|
165
|
+
maxLen?: number;
|
|
166
|
+
}): string;
|
|
@@ -1,3 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Register an extra pattern for `redactSecrets` to mask, on top of the built-in vendor set.
|
|
3
|
+
*
|
|
4
|
+
* Additive and irreversible for the life of the process: patterns accumulate in module scope,
|
|
5
|
+
* builtins are never replaced or reordered, and there is no way to remove one. Registering the
|
|
6
|
+
* same regex twice registers it twice.
|
|
7
|
+
*
|
|
8
|
+
* Throws immediately when the regex has no `/g` flag. That is not pedantry — `String.replace`
|
|
9
|
+
* with a non-global regex substitutes only the FIRST match, so a pattern registered without it
|
|
10
|
+
* would mask the first credential in a payload and let every later one through, which reads as
|
|
11
|
+
* working.
|
|
12
|
+
*
|
|
13
|
+
* Extras run after the builtins and before the parametric `key=value` sweep, and each whole match
|
|
14
|
+
* is replaced by `maskToken` of that match. Anchor and bound the pattern with care: a regex that
|
|
15
|
+
* matches more than the secret masks more than the secret, and one that backtracks badly runs on
|
|
16
|
+
* every string crossing an output boundary.
|
|
17
|
+
*
|
|
18
|
+
* Registering a pattern does not enable redaction. When `THEOKIT_REDACT_SECRETS` was off at
|
|
19
|
+
* module load, `redactSecrets` returns its input untouched and extras never run.
|
|
20
|
+
*
|
|
21
|
+
* Also exposed publicly, and under semver, as `Security.addPattern` in `src/security.ts`; the
|
|
22
|
+
* direct export here additionally reaches the semver-exempt `@theokit/sdk/internal/security`
|
|
23
|
+
* sub-path.
|
|
24
|
+
*/
|
|
25
|
+
export declare function addPattern(re: RegExp): void;
|
|
26
|
+
/**
|
|
27
|
+
* Mask one string, keeping enough of it to be recognizable in a log.
|
|
28
|
+
*
|
|
29
|
+
* Under 18 characters the whole string becomes the literal `***`; the length is not preserved and
|
|
30
|
+
* nothing of the input survives. From 18 characters up, the result is the first 6 characters, the
|
|
31
|
+
* literal `...`, and the last 4 — so exactly 10 characters of the input are RETAINED IN CLEAR and
|
|
32
|
+
* the middle is dropped. That is the trade the threshold encodes: short strings could be brute
|
|
33
|
+
* forced from a partial, long ones cannot, and the surviving prefix is usually the vendor tag
|
|
34
|
+
* (`sk-ant`, `ghp_de`) that tells an operator which credential misbehaved.
|
|
35
|
+
*
|
|
36
|
+
* Be clear about what this is and is not. It is a readability aid for logs, not an anonymizer and
|
|
37
|
+
* not a security boundary. The retained prefix and suffix identify the credential's issuer and
|
|
38
|
+
* often the credential itself to anyone who has seen it before, so a masked value still belongs in
|
|
39
|
+
* a trusted log and not in a bug report or a support ticket.
|
|
40
|
+
*
|
|
41
|
+
* It masks whatever it is handed. There is no check that the argument is a secret, so calling it
|
|
42
|
+
* on ordinary text mangles the text, and calling it on something the caller merely hopes is a
|
|
43
|
+
* secret proves nothing about what leaked.
|
|
44
|
+
*
|
|
45
|
+
* `redactSecrets` applies it to the ENTIRE match of a pattern, not to a captured group. For a
|
|
46
|
+
* match like `Bearer sk-ant-...` the first 6 characters retained are `Bearer`, not the key's
|
|
47
|
+
* prefix.
|
|
48
|
+
*
|
|
49
|
+
* Semver-exempt: reachable via the `@theokit/sdk/internal/security` sub-path, which the package
|
|
50
|
+
* declares in `exports` but does NOT cover with its semver contract.
|
|
51
|
+
*/
|
|
52
|
+
export declare function maskToken(token: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Redact known credential patterns from `text`. Default behavior masks
|
|
55
|
+
* builtins + extras + parametric `key=value` sinks.
|
|
56
|
+
*
|
|
57
|
+
* With `{ codeFile: true }` (D72), skips PARAM_PATTERN to avoid mangling
|
|
58
|
+
* `.env.example`, schema JSON, or test fixtures that legitimately contain
|
|
59
|
+
* prefix-like strings.
|
|
60
|
+
*
|
|
61
|
+
* Returns the redacted string. Coerces non-strings via JSON.stringify;
|
|
62
|
+
* EC-7 fix (edge-case review): wraps in try/catch so circular references
|
|
63
|
+
* never propagate — returns sentinel `"[unredactable: circular]"`.
|
|
64
|
+
*
|
|
65
|
+
* `null` and `undefined` return `""`. When redaction was switched off at module load via
|
|
66
|
+
* `THEOKIT_REDACT_SECRETS`, the coerced input is returned with no masking at all — the value is
|
|
67
|
+
* still stringified, but nothing is removed from it.
|
|
68
|
+
*
|
|
69
|
+
* Masking is best-effort against a list of known shapes. A credential in a format no pattern
|
|
70
|
+
* covers passes through unchanged, so a redacted string is not a string proven free of secrets.
|
|
71
|
+
*/
|
|
1
72
|
export declare function redactSecrets(text: unknown, opts?: {
|
|
2
73
|
codeFile?: boolean;
|
|
3
74
|
}): string;
|
|
@@ -1,3 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Register an extra pattern for `redactSecrets` to mask, on top of the built-in vendor set.
|
|
3
|
+
*
|
|
4
|
+
* Additive and irreversible for the life of the process: patterns accumulate in module scope,
|
|
5
|
+
* builtins are never replaced or reordered, and there is no way to remove one. Registering the
|
|
6
|
+
* same regex twice registers it twice.
|
|
7
|
+
*
|
|
8
|
+
* Throws immediately when the regex has no `/g` flag. That is not pedantry — `String.replace`
|
|
9
|
+
* with a non-global regex substitutes only the FIRST match, so a pattern registered without it
|
|
10
|
+
* would mask the first credential in a payload and let every later one through, which reads as
|
|
11
|
+
* working.
|
|
12
|
+
*
|
|
13
|
+
* Extras run after the builtins and before the parametric `key=value` sweep, and each whole match
|
|
14
|
+
* is replaced by `maskToken` of that match. Anchor and bound the pattern with care: a regex that
|
|
15
|
+
* matches more than the secret masks more than the secret, and one that backtracks badly runs on
|
|
16
|
+
* every string crossing an output boundary.
|
|
17
|
+
*
|
|
18
|
+
* Registering a pattern does not enable redaction. When `THEOKIT_REDACT_SECRETS` was off at
|
|
19
|
+
* module load, `redactSecrets` returns its input untouched and extras never run.
|
|
20
|
+
*
|
|
21
|
+
* Also exposed publicly, and under semver, as `Security.addPattern` in `src/security.ts`; the
|
|
22
|
+
* direct export here additionally reaches the semver-exempt `@theokit/sdk/internal/security`
|
|
23
|
+
* sub-path.
|
|
24
|
+
*/
|
|
25
|
+
export declare function addPattern(re: RegExp): void;
|
|
26
|
+
/**
|
|
27
|
+
* Mask one string, keeping enough of it to be recognizable in a log.
|
|
28
|
+
*
|
|
29
|
+
* Under 18 characters the whole string becomes the literal `***`; the length is not preserved and
|
|
30
|
+
* nothing of the input survives. From 18 characters up, the result is the first 6 characters, the
|
|
31
|
+
* literal `...`, and the last 4 — so exactly 10 characters of the input are RETAINED IN CLEAR and
|
|
32
|
+
* the middle is dropped. That is the trade the threshold encodes: short strings could be brute
|
|
33
|
+
* forced from a partial, long ones cannot, and the surviving prefix is usually the vendor tag
|
|
34
|
+
* (`sk-ant`, `ghp_de`) that tells an operator which credential misbehaved.
|
|
35
|
+
*
|
|
36
|
+
* Be clear about what this is and is not. It is a readability aid for logs, not an anonymizer and
|
|
37
|
+
* not a security boundary. The retained prefix and suffix identify the credential's issuer and
|
|
38
|
+
* often the credential itself to anyone who has seen it before, so a masked value still belongs in
|
|
39
|
+
* a trusted log and not in a bug report or a support ticket.
|
|
40
|
+
*
|
|
41
|
+
* It masks whatever it is handed. There is no check that the argument is a secret, so calling it
|
|
42
|
+
* on ordinary text mangles the text, and calling it on something the caller merely hopes is a
|
|
43
|
+
* secret proves nothing about what leaked.
|
|
44
|
+
*
|
|
45
|
+
* `redactSecrets` applies it to the ENTIRE match of a pattern, not to a captured group. For a
|
|
46
|
+
* match like `Bearer sk-ant-...` the first 6 characters retained are `Bearer`, not the key's
|
|
47
|
+
* prefix.
|
|
48
|
+
*
|
|
49
|
+
* Semver-exempt: reachable via the `@theokit/sdk/internal/security` sub-path, which the package
|
|
50
|
+
* declares in `exports` but does NOT cover with its semver contract.
|
|
51
|
+
*/
|
|
52
|
+
export declare function maskToken(token: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Redact known credential patterns from `text`. Default behavior masks
|
|
55
|
+
* builtins + extras + parametric `key=value` sinks.
|
|
56
|
+
*
|
|
57
|
+
* With `{ codeFile: true }` (D72), skips PARAM_PATTERN to avoid mangling
|
|
58
|
+
* `.env.example`, schema JSON, or test fixtures that legitimately contain
|
|
59
|
+
* prefix-like strings.
|
|
60
|
+
*
|
|
61
|
+
* Returns the redacted string. Coerces non-strings via JSON.stringify;
|
|
62
|
+
* EC-7 fix (edge-case review): wraps in try/catch so circular references
|
|
63
|
+
* never propagate — returns sentinel `"[unredactable: circular]"`.
|
|
64
|
+
*
|
|
65
|
+
* `null` and `undefined` return `""`. When redaction was switched off at module load via
|
|
66
|
+
* `THEOKIT_REDACT_SECRETS`, the coerced input is returned with no masking at all — the value is
|
|
67
|
+
* still stringified, but nothing is removed from it.
|
|
68
|
+
*
|
|
69
|
+
* Masking is best-effort against a list of known shapes. A credential in a format no pattern
|
|
70
|
+
* covers passes through unchanged, so a redacted string is not a string proven free of secrets.
|
|
71
|
+
*/
|
|
1
72
|
export declare function redactSecrets(text: unknown, opts?: {
|
|
2
73
|
codeFile?: boolean;
|
|
3
74
|
}): string;
|
|
@@ -23,12 +23,23 @@ export declare const MAX_CACHED_SESSIONS = 32;
|
|
|
23
23
|
*/
|
|
24
24
|
export declare function discardSession(cwd: string, agentId: string): number;
|
|
25
25
|
export declare function getSessionMessages(agentId: string): SessionMessage[];
|
|
26
|
-
export declare function clearSession(agentId: string): void;
|
|
27
26
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
27
|
+
* Drop the in-memory message cache for `agentId` and NOTHING else — the hydration marker in
|
|
28
|
+
* `hydratedKeys` deliberately stays.
|
|
29
|
+
*
|
|
30
|
+
* That asymmetry is the feature, not an oversight, and it is what separates this from
|
|
31
|
+
* `invalidateSessionCache`, which drops both. The single caller is the personality switch's
|
|
32
|
+
* `reset: true` path (`internal/personality/switch.ts`): leaving the marker set makes
|
|
33
|
+
* `hydrateSession` return early, so the next send starts from an EMPTY context instead of
|
|
34
|
+
* replaying the pre-reset transcript off disk. Clearing the marker here would re-hydrate the
|
|
35
|
+
* conversation the reset was asked to discard.
|
|
36
|
+
*
|
|
37
|
+
* The same shape read as a bug one function up: `forgetBookkeeping` documents an evicted session
|
|
38
|
+
* coming back empty as "silent amnesia". The difference is intent — eviction wants the transcript
|
|
39
|
+
* back, a reset does not. Anyone reaching for this to invalidate a cache wants
|
|
40
|
+
* `invalidateSessionCache(cwd, agentId)` instead.
|
|
31
41
|
*/
|
|
42
|
+
export declare function clearSession(agentId: string): void;
|
|
32
43
|
/**
|
|
33
44
|
* M50 review F5 — run `fn` serialized on the SAME per-(cwd,agentId) write chain the per-turn
|
|
34
45
|
* persistence uses, so a manual `Agent.compact` can never interleave with an in-flight turn's
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* M50 (agent-builder) — session-transcript compaction
|
|
2
|
+
* M50 (agent-builder) — session-transcript compaction.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* The mechanism:
|
|
5
5
|
* - the replacement history = recent USER messages verbatim (newest→oldest under a token budget;
|
|
6
6
|
* prior summaries filtered by marker) + ONE summary message with a textual marker prefix,
|
|
7
7
|
* injected as `role:"user"` (`build_compacted_history`, compact.rs:589-663);
|