@theokit/sdk 4.63.4-next.0 → 5.0.0-next.1
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 +708 -0
- package/dist/a2a/index.cjs +29 -13
- package/dist/a2a/index.cjs.map +1 -1
- package/dist/a2a/index.d.cts +1 -1
- package/dist/a2a/index.d.ts +1 -1
- package/dist/a2a/index.js +26 -11
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/message-bus.d.cts +26 -3
- package/dist/a2a/message-bus.d.ts +26 -3
- package/dist/a2a/subagent.d.cts +8 -3
- package/dist/a2a/subagent.d.ts +8 -3
- package/dist/agent-2E7DI47Y.cjs +67 -0
- package/dist/{agent-PVINJTUR.cjs.map → agent-2E7DI47Y.cjs.map} +1 -1
- package/dist/{agent-BFno7Sfn.d.ts → agent-CdYJfKr6.d.ts} +205 -36
- package/dist/{agent-X0DKA943.d.cts → agent-CgNzshyV.d.cts} +205 -36
- package/dist/agent-XMKRP27S.js +58 -0
- package/dist/{agent-3JK7VXNN.js.map → agent-XMKRP27S.js.map} +1 -1
- package/dist/agent-session-store-AFML3AXC.js +6 -0
- package/dist/{agent-session-store-OPGRB4XM.js.map → agent-session-store-AFML3AXC.js.map} +1 -1
- package/dist/agent-session-store-MTSIY3MH.cjs +23 -0
- package/dist/{agent-session-store-6EL5NPA4.cjs.map → agent-session-store-MTSIY3MH.cjs.map} +1 -1
- package/dist/agent.d.ts +1 -1
- package/dist/auth/index.cjs +33 -34
- 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 +6 -7
- package/dist/auth/index.js.map +1 -1
- package/dist/{batch-BXYTW2DP.cjs → batch-I6T6MXZO.cjs} +58 -40
- package/dist/batch-I6T6MXZO.cjs.map +1 -0
- package/dist/{batch-L4ZXS46M.js → batch-US4F6WPK.js} +42 -24
- package/dist/batch-US4F6WPK.js.map +1 -0
- package/dist/chunk-24MGQDK3.js +31 -0
- package/dist/chunk-24MGQDK3.js.map +1 -0
- package/dist/{chunk-UGT7GK7I.cjs → chunk-24SYBZPL.cjs} +36 -18
- package/dist/chunk-24SYBZPL.cjs.map +1 -0
- package/dist/{chunk-KYAJINUI.cjs → chunk-2HPNT6HH.cjs} +581 -401
- package/dist/chunk-2HPNT6HH.cjs.map +1 -0
- package/dist/{chunk-VLVVJLDH.cjs → chunk-2NE7DTOK.cjs} +234 -193
- package/dist/chunk-2NE7DTOK.cjs.map +1 -0
- package/dist/{chunk-N2U4AZGB.js → chunk-2WXHA33T.js} +3 -3
- package/dist/chunk-2WXHA33T.js.map +1 -0
- package/dist/chunk-2XC6KDJM.js +22 -0
- package/dist/chunk-2XC6KDJM.js.map +1 -0
- package/dist/{chunk-L3MTL4NA.js → chunk-2ZLVT7H3.js} +223 -182
- package/dist/chunk-2ZLVT7H3.js.map +1 -0
- package/dist/{chunk-2GUYQR5P.js → chunk-3JHIFQ4I.js} +39 -13
- package/dist/chunk-3JHIFQ4I.js.map +1 -0
- package/dist/{chunk-BU4KFWXF.js → chunk-44I6UYVH.js} +8 -17
- package/dist/chunk-44I6UYVH.js.map +1 -0
- package/dist/{chunk-UNYXQ4M5.js → chunk-47TF32NQ.js} +10 -5
- package/dist/chunk-47TF32NQ.js.map +1 -0
- package/dist/{chunk-WNO3C3N2.cjs → chunk-4A3SKJ53.cjs} +56 -27
- package/dist/chunk-4A3SKJ53.cjs.map +1 -0
- package/dist/{chunk-YML4ME27.cjs → chunk-4HS6FFGL.cjs} +55 -46
- package/dist/chunk-4HS6FFGL.cjs.map +1 -0
- package/dist/{chunk-C72AZW7J.js → chunk-4MMWFSCD.js} +4 -4
- package/dist/chunk-4MMWFSCD.js.map +1 -0
- package/dist/{chunk-6HKGLTJI.cjs → chunk-4NLCWGH7.cjs} +15 -15
- package/dist/chunk-4NLCWGH7.cjs.map +1 -0
- package/dist/{chunk-UBDMVMBZ.js → chunk-55GB6JYQ.js} +33 -22
- package/dist/chunk-55GB6JYQ.js.map +1 -0
- package/dist/{chunk-U6IFHFWK.js → chunk-5WKQDIGO.js} +8 -17
- package/dist/chunk-5WKQDIGO.js.map +1 -0
- package/dist/{chunk-GPKAF7SG.js → chunk-6HIACV34.js} +91 -92
- package/dist/chunk-6HIACV34.js.map +1 -0
- package/dist/{chunk-XL7Q7HB2.cjs → chunk-6LHQPOMI.cjs} +39 -6
- package/dist/chunk-6LHQPOMI.cjs.map +1 -0
- package/dist/{chunk-A4JVILQU.js → chunk-6M2OIS4Y.js} +7 -7
- package/dist/chunk-6M2OIS4Y.js.map +1 -0
- package/dist/{chunk-LWGSI6M3.js → chunk-6PWOWXMC.js} +4 -4
- package/dist/{chunk-LWGSI6M3.js.map → chunk-6PWOWXMC.js.map} +1 -1
- package/dist/{chunk-RNB4APBZ.js → chunk-6WAKKTBO.js} +9 -5
- package/dist/chunk-6WAKKTBO.js.map +1 -0
- package/dist/{chunk-V2BOS4WF.cjs → chunk-7A6535RA.cjs} +11 -11
- package/dist/chunk-7A6535RA.cjs.map +1 -0
- package/dist/{chunk-ZLQSWSJ2.cjs → chunk-7FDKWDA2.cjs} +11 -11
- package/dist/{chunk-ZLQSWSJ2.cjs.map → chunk-7FDKWDA2.cjs.map} +1 -1
- package/dist/{chunk-4VPXM6UU.js → chunk-7I5Z3UBJ.js} +3 -3
- package/dist/{chunk-4VPXM6UU.js.map → chunk-7I5Z3UBJ.js.map} +1 -1
- package/dist/{chunk-B4EOJWOY.cjs → chunk-7JJ3A6AT.cjs} +13 -7
- package/dist/chunk-7JJ3A6AT.cjs.map +1 -0
- package/dist/{chunk-ZWRG4NWT.cjs → chunk-7ZK4DJD7.cjs} +108 -109
- package/dist/chunk-7ZK4DJD7.cjs.map +1 -0
- package/dist/{chunk-WJVHMTKB.cjs → chunk-AA27GEYS.cjs} +3 -3
- package/dist/{chunk-WJVHMTKB.cjs.map → chunk-AA27GEYS.cjs.map} +1 -1
- package/dist/{chunk-BP46RJ5X.js → chunk-AAEZSPTC.js} +5 -5
- package/dist/{chunk-BP46RJ5X.js.map → chunk-AAEZSPTC.js.map} +1 -1
- package/dist/chunk-AGACYRJ2.js +11 -0
- package/dist/chunk-AGACYRJ2.js.map +1 -0
- package/dist/{chunk-ZZMZWBR6.js → chunk-ALUN2B4W.js} +81 -58
- package/dist/chunk-ALUN2B4W.js.map +1 -0
- package/dist/chunk-ANMJJD6D.cjs +18 -0
- package/dist/chunk-ANMJJD6D.cjs.map +1 -0
- package/dist/{chunk-DXGZ2NUG.cjs → chunk-ATT276RD.cjs} +12 -11
- package/dist/chunk-ATT276RD.cjs.map +1 -0
- package/dist/{chunk-4FFBAUFS.js → chunk-AWINL3ZC.js} +6 -6
- package/dist/chunk-AWINL3ZC.js.map +1 -0
- package/dist/{chunk-UU36SHFY.cjs → chunk-BJUJT5ED.cjs} +9 -8
- package/dist/chunk-BJUJT5ED.cjs.map +1 -0
- package/dist/chunk-CEILSTWB.cjs +109 -0
- package/dist/chunk-CEILSTWB.cjs.map +1 -0
- package/dist/{chunk-D4CUGAKZ.js → chunk-CZJ6Q7CW.js} +36 -6
- package/dist/chunk-CZJ6Q7CW.js.map +1 -0
- package/dist/{chunk-KQ7TS7WW.cjs → chunk-D6POWE7E.cjs} +37 -26
- package/dist/chunk-D6POWE7E.cjs.map +1 -0
- package/dist/{chunk-AWO27VRZ.js → chunk-DMRT67Y6.js} +6 -5
- package/dist/chunk-DMRT67Y6.js.map +1 -0
- package/dist/{chunk-5VB22SYX.cjs → chunk-DQZU7JK6.cjs} +7 -7
- package/dist/{chunk-5VB22SYX.cjs.map → chunk-DQZU7JK6.cjs.map} +1 -1
- package/dist/{chunk-3NSS2OIZ.cjs → chunk-DRL7URI4.cjs} +6 -6
- package/dist/{chunk-3NSS2OIZ.cjs.map → chunk-DRL7URI4.cjs.map} +1 -1
- package/dist/{chunk-RFXWMRFC.js → chunk-EFMFILPG.js} +14 -6
- package/dist/chunk-EFMFILPG.js.map +1 -0
- package/dist/{chunk-HS7AVXTF.js → chunk-EH6XD3FY.js} +4 -4
- package/dist/chunk-EH6XD3FY.js.map +1 -0
- package/dist/{chunk-KQRW2GPZ.js → chunk-EIQFAOFD.js} +6 -6
- package/dist/chunk-EIQFAOFD.js.map +1 -0
- package/dist/{chunk-XJCXEKMD.cjs → chunk-EXTRW7GW.cjs} +4 -4
- package/dist/chunk-EXTRW7GW.cjs.map +1 -0
- package/dist/{chunk-U54XCYG3.js → chunk-FJWQP6EE.js} +12 -6
- package/dist/chunk-FJWQP6EE.js.map +1 -0
- package/dist/{chunk-O7DK5PBJ.cjs → chunk-FUSDYC2B.cjs} +26 -42
- package/dist/chunk-FUSDYC2B.cjs.map +1 -0
- package/dist/{chunk-CQBXOJ6U.cjs → chunk-G4ZGYKJG.cjs} +21 -21
- package/dist/chunk-G4ZGYKJG.cjs.map +1 -0
- package/dist/{chunk-4QZSA2HJ.js → chunk-G7BLGBRN.js} +4 -4
- package/dist/chunk-G7BLGBRN.js.map +1 -0
- package/dist/{chunk-BZRFXJHA.js → chunk-GBCVPKHE.js} +55 -26
- package/dist/chunk-GBCVPKHE.js.map +1 -0
- package/dist/{chunk-5HEG4CQH.cjs → chunk-GZV6AVRL.cjs} +8 -8
- package/dist/{chunk-5HEG4CQH.cjs.map → chunk-GZV6AVRL.cjs.map} +1 -1
- package/dist/{chunk-RFMBZPOW.cjs → chunk-HCT4HPCL.cjs} +10 -10
- package/dist/chunk-HCT4HPCL.cjs.map +1 -0
- package/dist/{chunk-OSEG74VJ.js → chunk-HFEJE7AC.js} +52 -43
- package/dist/chunk-HFEJE7AC.js.map +1 -0
- package/dist/{chunk-52NKC5HT.cjs → chunk-HUFSABUZ.cjs} +12 -8
- package/dist/chunk-HUFSABUZ.cjs.map +1 -0
- package/dist/{chunk-4CLOXP6H.cjs → chunk-HW7SEELD.cjs} +4 -4
- package/dist/{chunk-4CLOXP6H.cjs.map → chunk-HW7SEELD.cjs.map} +1 -1
- package/dist/{chunk-ZCIRZE37.cjs → chunk-HWSALKOR.cjs} +26 -17
- package/dist/chunk-HWSALKOR.cjs.map +1 -0
- package/dist/{chunk-ZSWPZ23K.cjs → chunk-I2PWY7VM.cjs} +5 -5
- package/dist/chunk-I2PWY7VM.cjs.map +1 -0
- package/dist/{chunk-VJ26EKGJ.cjs → chunk-IJ7M6GOG.cjs} +3 -3
- package/dist/chunk-IJ7M6GOG.cjs.map +1 -0
- package/dist/{chunk-K5OJUYSZ.js → chunk-IJM7UGS5.js} +19 -10
- package/dist/chunk-IJM7UGS5.js.map +1 -0
- package/dist/{chunk-SAVIWMZB.js → chunk-ILGZ2ZZV.js} +3 -3
- package/dist/chunk-ILGZ2ZZV.js.map +1 -0
- package/dist/{chunk-4ZHTIJNE.cjs → chunk-J7J7J2GN.cjs} +87 -63
- package/dist/chunk-J7J7J2GN.cjs.map +1 -0
- package/dist/{chunk-UALX2J2Q.cjs → chunk-JLRLCBJ4.cjs} +38 -11
- package/dist/chunk-JLRLCBJ4.cjs.map +1 -0
- package/dist/{chunk-2QDYBS2A.js → chunk-JMDDYA22.js} +4 -4
- package/dist/chunk-JMDDYA22.js.map +1 -0
- package/dist/{chunk-LXQ6HKPS.js → chunk-JNAA4G4H.js} +3 -3
- package/dist/{chunk-LXQ6HKPS.js.map → chunk-JNAA4G4H.js.map} +1 -1
- package/dist/{chunk-UMP6OJIM.js → chunk-JOFVLOFY.js} +4 -4
- package/dist/{chunk-UMP6OJIM.js.map → chunk-JOFVLOFY.js.map} +1 -1
- package/dist/chunk-JTZ74HFD.js +100 -0
- package/dist/chunk-JTZ74HFD.js.map +1 -0
- package/dist/{chunk-A46SWMIF.js → chunk-K2VMFZQ5.js} +7 -7
- package/dist/chunk-K2VMFZQ5.js.map +1 -0
- package/dist/{chunk-DN2PACRI.js → chunk-K3NH62DG.js} +461 -282
- package/dist/chunk-K3NH62DG.js.map +1 -0
- package/dist/{chunk-XWTLIGO3.cjs → chunk-KTTHHYEW.cjs} +5 -5
- package/dist/chunk-KTTHHYEW.cjs.map +1 -0
- package/dist/{chunk-3FFAEAUJ.cjs → chunk-KVSAY6NZ.cjs} +18 -18
- package/dist/chunk-KVSAY6NZ.cjs.map +1 -0
- package/dist/{chunk-IAHZCGBE.cjs → chunk-LHSWHYF3.cjs} +120 -146
- package/dist/chunk-LHSWHYF3.cjs.map +1 -0
- package/dist/{chunk-25BD2R5G.js → chunk-NCGWJ3HS.js} +1991 -1854
- package/dist/chunk-NCGWJ3HS.js.map +1 -0
- package/dist/{chunk-3OR54XG4.js → chunk-NJWYQWDL.js} +12 -8
- package/dist/chunk-NJWYQWDL.js.map +1 -0
- package/dist/chunk-NVXXWAU7.cjs +13 -0
- package/dist/chunk-NVXXWAU7.cjs.map +1 -0
- package/dist/{chunk-2D34UTDC.js → chunk-O6USDERH.js} +31 -11
- package/dist/chunk-O6USDERH.js.map +1 -0
- package/dist/{chunk-XO4SOZN6.js → chunk-OR6XIWLB.js} +4 -4
- package/dist/{chunk-XO4SOZN6.js.map → chunk-OR6XIWLB.js.map} +1 -1
- package/dist/{chunk-4PYZ5AX3.cjs → chunk-PRZ3BES7.cjs} +16 -8
- package/dist/chunk-PRZ3BES7.cjs.map +1 -0
- package/dist/{chunk-HCZD23VS.cjs → chunk-QC55H6RJ.cjs} +65 -39
- package/dist/chunk-QC55H6RJ.cjs.map +1 -0
- package/dist/{chunk-4O5TGQBW.cjs → chunk-QME6FDFG.cjs} +9 -5
- package/dist/chunk-QME6FDFG.cjs.map +1 -0
- package/dist/chunk-QOGNZMHD.cjs +34 -0
- package/dist/chunk-QOGNZMHD.cjs.map +1 -0
- package/dist/{chunk-B2J4ZMZL.cjs → chunk-QWD3CZWE.cjs} +6 -5
- package/dist/chunk-QWD3CZWE.cjs.map +1 -0
- package/dist/{chunk-SZVR77EJ.cjs → chunk-QWD4RDZ3.cjs} +15 -24
- package/dist/chunk-QWD4RDZ3.cjs.map +1 -0
- package/dist/{chunk-7BG5UH3T.cjs → chunk-RHZ6HP23.cjs} +4 -4
- package/dist/chunk-RHZ6HP23.cjs.map +1 -0
- package/dist/{chunk-2HVF2WJY.cjs → chunk-RQMCOFAI.cjs} +8 -8
- package/dist/{chunk-2HVF2WJY.cjs.map → chunk-RQMCOFAI.cjs.map} +1 -1
- package/dist/{chunk-VKJ7V7EB.cjs → chunk-SA6K24NB.cjs} +3 -3
- package/dist/chunk-SA6K24NB.cjs.map +1 -0
- package/dist/{chunk-7AD3ZTZL.js → chunk-SAGRF4IB.js} +3 -3
- package/dist/chunk-SAGRF4IB.js.map +1 -0
- package/dist/{chunk-PUAEFLYK.js → chunk-SVQIW5RJ.js} +4 -4
- package/dist/{chunk-PUAEFLYK.js.map → chunk-SVQIW5RJ.js.map} +1 -1
- package/dist/{chunk-3O42QOMJ.js → chunk-TA3K7SBK.js} +7 -6
- package/dist/chunk-TA3K7SBK.js.map +1 -0
- package/dist/{chunk-LYRDF5TQ.cjs → chunk-TFG5IBZS.cjs} +14 -23
- package/dist/chunk-TFG5IBZS.cjs.map +1 -0
- package/dist/{chunk-GKEFRLU7.cjs → chunk-TMKTSYDS.cjs} +6 -6
- package/dist/{chunk-GKEFRLU7.cjs.map → chunk-TMKTSYDS.cjs.map} +1 -1
- package/dist/{chunk-J24VJOH3.cjs → chunk-UADQJBHR.cjs} +31 -11
- package/dist/chunk-UADQJBHR.cjs.map +1 -0
- package/dist/{chunk-TAZVKYWJ.js → chunk-UBR5PWD7.js} +26 -40
- package/dist/chunk-UBR5PWD7.js.map +1 -0
- package/dist/{chunk-IPYYKCRC.js → chunk-UFPUHJWS.js} +5 -5
- package/dist/{chunk-IPYYKCRC.js.map → chunk-UFPUHJWS.js.map} +1 -1
- package/dist/{chunk-OHLDPWTA.cjs → chunk-UGRS7ZA7.cjs} +15 -15
- package/dist/{chunk-OHLDPWTA.cjs.map → chunk-UGRS7ZA7.cjs.map} +1 -1
- package/dist/{chunk-RIAM53CP.js → chunk-UKMBRMGT.js} +3 -3
- package/dist/chunk-UKMBRMGT.js.map +1 -0
- package/dist/{chunk-L4BDVXIM.js → chunk-UNK4HNJH.js} +97 -123
- package/dist/chunk-UNK4HNJH.js.map +1 -0
- package/dist/{chunk-C3NT3PVE.js → chunk-V22DZIXO.js} +3 -3
- package/dist/chunk-V22DZIXO.js.map +1 -0
- package/dist/{chunk-OFRFZRQ4.cjs → chunk-V6ZY4AX6.cjs} +24 -14
- package/dist/chunk-V6ZY4AX6.cjs.map +1 -0
- package/dist/{chunk-B3IMEBOA.js → chunk-VE6DFSKU.js} +3 -3
- package/dist/{chunk-B3IMEBOA.js.map → chunk-VE6DFSKU.js.map} +1 -1
- package/dist/{chunk-WLQNMXQE.js → chunk-VWUXIVEI.js} +53 -26
- package/dist/chunk-VWUXIVEI.js.map +1 -0
- package/dist/{chunk-ACDLHN3W.js → chunk-WJXOICRC.js} +16 -6
- package/dist/chunk-WJXOICRC.js.map +1 -0
- package/dist/{chunk-JJ3OVRUM.cjs → chunk-WMH2MSOP.cjs} +2250 -2113
- package/dist/chunk-WMH2MSOP.cjs.map +1 -0
- package/dist/{chunk-7YGCPMGB.js → chunk-XB4GI5RZ.js} +27 -12
- package/dist/chunk-XB4GI5RZ.js.map +1 -0
- package/dist/{chunk-LXI4XZEC.js → chunk-XCCGNU3D.js} +13 -13
- package/dist/chunk-XCCGNU3D.js.map +1 -0
- package/dist/{chunk-O73J46PV.js → chunk-XDANGA2C.js} +5 -5
- package/dist/{chunk-O73J46PV.js.map → chunk-XDANGA2C.js.map} +1 -1
- package/dist/{chunk-UTSRIDKZ.js → chunk-XYFGKVZ7.js} +3 -3
- package/dist/chunk-XYFGKVZ7.js.map +1 -0
- package/dist/{chunk-RMWTPV3M.cjs → chunk-Y2KYR2ED.cjs} +27 -27
- package/dist/chunk-Y2KYR2ED.cjs.map +1 -0
- package/dist/{chunk-O7LZFG6O.cjs → chunk-YIFFF23U.cjs} +5 -5
- package/dist/chunk-YIFFF23U.cjs.map +1 -0
- package/dist/{chunk-4OTIXDMU.cjs → chunk-YJNYDJ2T.cjs} +12 -4
- package/dist/chunk-YJNYDJ2T.cjs.map +1 -0
- package/dist/{chunk-6JSIEDKL.cjs → chunk-YSTXFWQE.cjs} +13 -7
- package/dist/chunk-YSTXFWQE.cjs.map +1 -0
- package/dist/{chunk-I6HGWHPU.cjs → chunk-Z3NTRKIC.cjs} +4 -4
- package/dist/{chunk-I6HGWHPU.cjs.map → chunk-Z3NTRKIC.cjs.map} +1 -1
- package/dist/compact-session-BHTPCIHA.cjs +61 -0
- package/dist/{compact-session-QV57KR66.cjs.map → compact-session-BHTPCIHA.cjs.map} +1 -1
- package/dist/compact-session-W4WLJTHA.js +24 -0
- package/dist/{compact-session-RIGOWC4Y.js.map → compact-session-W4WLJTHA.js.map} +1 -1
- package/dist/compaction.cjs +20 -17
- package/dist/compaction.d.cts +15 -1
- package/dist/compaction.d.ts +15 -1
- package/dist/compaction.js +3 -4
- package/dist/concurrency.cjs +6 -7
- package/dist/concurrency.cjs.map +1 -1
- package/dist/concurrency.d.cts +6 -3
- package/dist/concurrency.d.ts +6 -3
- package/dist/concurrency.js +4 -5
- package/dist/concurrency.js.map +1 -1
- package/dist/context/index.cjs +6 -6
- package/dist/context/index.js +3 -3
- package/dist/context-74SBFD27.cjs +23 -0
- package/dist/{context-AGQ3DIZU.cjs.map → context-74SBFD27.cjs.map} +1 -1
- package/dist/context-NZ2AC6S7.js +6 -0
- package/dist/{context-GQRFBCLP.js.map → context-NZ2AC6S7.js.map} +1 -1
- package/dist/create-skill.d.ts +4 -1
- package/dist/{cron-BuiRPrvt.d.cts → cron-Bw6mSgD4.d.cts} +8 -2
- package/dist/{cron-C2SIi31n.d.ts → cron-DJv9oXSZ.d.ts} +8 -2
- package/dist/cron.cjs +46 -45
- package/dist/cron.d.cts +5 -4
- package/dist/cron.d.ts +5 -4
- package/dist/cron.js +45 -44
- package/dist/{errors-BgJH9PHi.d.cts → errors-CLOAyuiv.d.ts} +133 -95
- package/dist/{errors-C5fJUqLk.d.ts → errors-DrDEgyz1.d.cts} +133 -95
- package/dist/errors-base-B5g01neU.d.cts +75 -0
- package/dist/errors-base-B5g01neU.d.ts +75 -0
- package/dist/errors-base.d.ts +73 -0
- package/dist/errors.cjs +25 -22
- package/dist/errors.d.cts +3 -2
- package/dist/errors.d.ts +3 -2
- package/dist/errors.js +2 -3
- package/dist/eval.cjs +74 -78
- package/dist/eval.cjs.map +1 -1
- package/dist/eval.js +64 -68
- package/dist/eval.js.map +1 -1
- package/dist/{executor-6CYCA7MI.cjs → executor-XQAOQOHD.cjs} +60 -54
- package/dist/executor-XQAOQOHD.cjs.map +1 -0
- package/dist/{executor-QSEC3MRH.js → executor-ZNDQDX6Q.js} +43 -37
- package/dist/executor-ZNDQDX6Q.js.map +1 -0
- package/dist/filesystem/index.cjs +24 -26
- package/dist/filesystem/index.cjs.map +1 -1
- package/dist/filesystem/index.js +20 -22
- package/dist/filesystem/index.js.map +1 -1
- package/dist/filesystem/types.d.cts +11 -5
- package/dist/filesystem/types.d.ts +11 -5
- package/dist/{fork-agent-RSV4E3EA.js → fork-agent-S2EPIML7.js} +3 -3
- package/dist/fork-agent-S2EPIML7.js.map +1 -0
- package/dist/{fork-agent-Y2IK2RYU.cjs → fork-agent-WAEQI2DL.cjs} +4 -4
- package/dist/fork-agent-WAEQI2DL.cjs.map +1 -0
- package/dist/fs-session-store-77JU46UZ.js +10 -0
- package/dist/{fs-session-store-NM6YSTE2.js.map → fs-session-store-77JU46UZ.js.map} +1 -1
- package/dist/fs-session-store-E4U3P56L.cjs +19 -0
- package/dist/{fs-session-store-4PIHT5UX.cjs.map → fs-session-store-E4U3P56L.cjs.map} +1 -1
- package/dist/generate-object-BXV7BZRP.js +7 -0
- package/dist/{generate-object-GUNAUVBX.js.map → generate-object-BXV7BZRP.js.map} +1 -1
- package/dist/generate-object-YBI2TDJ3.cjs +20 -0
- package/dist/{generate-object-R7HTMW7F.cjs.map → generate-object-YBI2TDJ3.cjs.map} +1 -1
- package/dist/generate-object.d.ts +2 -4
- package/dist/index-manager-DXR2RSFI.cjs +26 -0
- package/dist/{index-manager-2SRX45WJ.cjs.map → index-manager-DXR2RSFI.cjs.map} +1 -1
- package/dist/index-manager-QH6OXEV5.js +17 -0
- package/dist/{index-manager-SP4ISSDX.js.map → index-manager-QH6OXEV5.js.map} +1 -1
- package/dist/index.cjs +234 -194
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +243 -41
- package/dist/index.d.ts +243 -41
- package/dist/index.js +140 -102
- package/dist/index.js.map +1 -1
- package/dist/{inject-session-DAR7OUCW.js → inject-session-SUM6TDJF.js} +9 -9
- package/dist/{inject-session-DAR7OUCW.js.map → inject-session-SUM6TDJF.js.map} +1 -1
- package/dist/inject-session-W6A46J3E.cjs +29 -0
- package/dist/{inject-session-WQKMC3GR.cjs.map → inject-session-W6A46J3E.cjs.map} +1 -1
- package/dist/interactive/index.cjs +12 -6
- package/dist/interactive/index.cjs.map +1 -1
- package/dist/interactive/index.js +12 -6
- package/dist/interactive/index.js.map +1 -1
- package/dist/interactive/types.d.cts +14 -4
- package/dist/interactive/types.d.ts +14 -4
- package/dist/internal/agent-loop/loop-context-init.d.ts +1 -1
- package/dist/internal/agent-loop/loop-finalize.d.ts +25 -0
- package/dist/internal/agent-loop/loop.d.ts +1 -1
- package/dist/internal/agent-loop/message-builders.d.ts +1 -1
- package/dist/internal/agent-loop/replay-messages.d.ts +41 -0
- package/dist/internal/agent-loop/tool-dispatch.d.ts +2 -2
- package/dist/internal/agent-loop/usage-and-cost.d.ts +1 -1
- package/dist/internal/auth/credential-availability.d.ts +61 -0
- package/dist/internal/auth/credential-store.d.ts +1 -1
- package/dist/internal/auth/oauth-device.d.ts +1 -1
- package/dist/internal/auth/oauth-engine.d.ts +1 -1
- package/dist/internal/auth/resolve-credential.d.ts +1 -1
- package/dist/internal/base-url.d.ts +14 -0
- package/dist/internal/cloud-agent/cloud-config-serializer.d.ts +1 -1
- package/dist/internal/{runtime/concurrency → concurrency}/subagent-credentials.d.ts +2 -2
- package/dist/internal/emit-run-event.d.ts +16 -0
- package/dist/internal/error-mappers/shared.d.ts +14 -1
- package/dist/internal/eval/assert.d.ts +2 -1
- package/dist/internal/eval/single-flight.d.ts +2 -1
- package/dist/internal/global-singleton.d.ts +6 -3
- package/dist/internal/llm/responses.d.ts +10 -0
- package/dist/internal/local-agent/local-agent-bootstrap.d.ts +5 -3
- package/dist/internal/local-agent/local-agent-capabilities.d.ts +38 -0
- package/dist/internal/local-agent/local-agent-dispatch.d.ts +2 -2
- package/dist/internal/local-agent/local-agent-memory-provider.d.ts +1 -1
- package/dist/internal/local-agent/local-agent-personality-extensions.d.ts +25 -1
- package/dist/internal/local-agent/local-agent-send.d.ts +42 -1
- package/dist/internal/local-agent/local-option-keys.d.ts +2 -0
- package/dist/internal/local-agent/real-local-run-mcp.d.ts +26 -0
- package/dist/internal/local-agent/real-local-run-options.d.ts +26 -0
- package/dist/internal/local-agent/real-local-run-tools.d.ts +21 -4
- package/dist/internal/local-agent/real-local-run.d.ts +2 -2
- package/dist/internal/mcp/handshake-timeout.d.ts +53 -0
- package/dist/internal/memory/active-memory.d.ts +1 -1
- package/dist/internal/memory/adapters/index.cjs +10 -10
- package/dist/internal/memory/adapters/index.js +9 -9
- package/dist/internal/memory/adapters/openai-embedding.d.cts +10 -0
- package/dist/internal/memory/adapters/openai-embedding.d.ts +10 -0
- package/dist/internal/memory/corpus-sync.d.ts +23 -0
- package/dist/internal/memory/index-db.d.ts +15 -1
- package/dist/internal/memory/index-manager-contract.d.ts +12 -0
- package/dist/internal/memory/index-manager.d.ts +4 -10
- package/dist/internal/memory/index-repository.d.ts +58 -0
- package/dist/internal/memory/lance-memory-adapter.d.ts +16 -14
- package/dist/internal/memory/memory-index.d.ts +15 -0
- package/dist/internal/memory/sdk-memory-peer-loader.d.ts +54 -1
- package/dist/internal/memory/storage/index.cjs +39 -40
- package/dist/internal/memory/storage/index.js +10 -11
- package/dist/internal/memory/storage/memory-root.d.cts +2 -3
- package/dist/internal/memory/storage/memory-root.d.ts +2 -3
- package/dist/internal/persistence/atomic-write.d.cts +4 -4
- package/dist/internal/persistence/atomic-write.d.ts +4 -4
- package/dist/internal/persistence/index.cjs +24 -25
- package/dist/internal/persistence/index.cjs.map +1 -1
- package/dist/internal/persistence/index.js +7 -8
- package/dist/internal/persistence/index.js.map +1 -1
- package/dist/internal/persistence/jsonl.d.cts +3 -1
- package/dist/internal/persistence/jsonl.d.ts +3 -1
- package/dist/internal/persistence/paths.d.cts +2 -2
- package/dist/internal/persistence/paths.d.ts +2 -2
- package/dist/internal/persistence/transcript-ops.d.cts +11 -2
- package/dist/internal/persistence/transcript-ops.d.ts +11 -2
- package/dist/internal/plugins/context.d.cts +0 -10
- package/dist/internal/plugins/context.d.ts +0 -10
- package/dist/internal/plugins/types.d.cts +1 -1
- package/dist/internal/plugins/types.d.ts +1 -1
- package/dist/internal/providers/catalog-schema.d.ts +94 -0
- package/dist/internal/providers/catalog-source-models-dev.d.ts +11 -0
- package/dist/internal/runtime/compat/foreign-config-sources.d.ts +86 -0
- package/dist/internal/runtime/compression/compression-model-registry.d.ts +1 -1
- package/dist/internal/runtime/compression/compression-summarizer.d.ts +5 -1
- package/dist/internal/runtime/fixtures/fixture-events.d.ts +1 -1
- package/dist/internal/runtime/fixtures/fixture-mode.d.ts +8 -14
- package/dist/internal/runtime/fixtures/fixture-run-base.d.ts +1 -1
- package/dist/internal/runtime/fixtures/fixture-scripts.d.ts +2 -2
- package/dist/internal/runtime/hooks/hooks-executor.d.ts +14 -1
- package/dist/internal/runtime/hooks/hooks-source.d.ts +9 -0
- package/dist/internal/runtime/lifecycle/wrap-completion-check-run.d.ts +1 -1
- package/dist/internal/runtime/{memory → memory-glue}/memory-provider.d.ts +1 -1
- package/dist/internal/runtime/{plugins → plugin-loader}/plugin-bundles.d.ts +3 -1
- package/dist/internal/runtime/processors/wrap-output-run.d.ts +1 -1
- package/dist/internal/runtime/registry/live-agent-registry.d.ts +9 -1
- package/dist/internal/runtime/system-prompt/local-assembly.d.ts +2 -1
- package/dist/internal/scorers/llm-judge.d.ts +12 -0
- package/dist/internal/security/index.cjs +14 -15
- package/dist/internal/security/index.d.cts +6 -1
- package/dist/internal/security/index.d.ts +6 -1
- package/dist/internal/security/index.js +4 -5
- package/dist/internal/security/path-containment.d.ts +24 -0
- package/dist/internal/session/agent-session-store.d.ts +1 -1
- package/dist/internal/session/agent-session.d.ts +1 -1
- package/dist/internal/session/index.d.ts +1 -1
- package/dist/internal/session/session-cache.d.ts +9 -3
- package/dist/internal/task/registry.d.ts +1 -1
- package/dist/internal/task/store.d.ts +1 -1
- package/dist/internal/task/subscribe.d.ts +1 -1
- package/dist/internal/task/task-id.d.ts +22 -0
- package/dist/internal/telemetry/adapter-registry.d.ts +12 -2
- package/dist/internal/telemetry/adapters/braintrust.d.ts +6 -1
- package/dist/internal/telemetry/adapters/langsmith.d.ts +6 -1
- package/dist/internal/workflow/executor.d.ts +2 -1
- package/dist/internal/workflow/snapshot-store.d.ts +1 -1
- package/dist/internal/workflow/step-branch.d.ts +2 -2
- package/dist/internal/workflow/step-dowhile.d.ts +2 -2
- package/dist/internal/workflow/step-execution.d.ts +25 -0
- package/dist/internal/workflow/step-foreach.d.ts +2 -2
- package/dist/internal/workflow/step-parallel.d.ts +2 -2
- package/dist/judge-call-6MVARKU2.js +5 -0
- package/dist/{judge-call-LVXABPS3.js.map → judge-call-6MVARKU2.js.map} +1 -1
- package/dist/judge-call-I3P4D5QR.cjs +22 -0
- package/dist/{judge-call-LAHMBJ57.cjs.map → judge-call-I3P4D5QR.cjs.map} +1 -1
- package/dist/mcp-auth.cjs +14 -15
- package/dist/mcp-auth.cjs.map +1 -1
- package/dist/mcp-auth.d.cts +2 -0
- package/dist/mcp-auth.d.ts +2 -0
- package/dist/mcp-auth.js +4 -5
- package/dist/mcp-auth.js.map +1 -1
- package/dist/models.cjs +52 -42
- package/dist/models.cjs.map +1 -1
- package/dist/models.js +39 -29
- package/dist/models.js.map +1 -1
- package/dist/oauth-transaction-store-5RIR6D5C.js +5 -0
- package/dist/{oauth-transaction-store-W52KVHQ4.js.map → oauth-transaction-store-5RIR6D5C.js.map} +1 -1
- package/dist/oauth-transaction-store-SXIE57OD.cjs +38 -0
- package/dist/{oauth-transaction-store-BT4GLTLK.cjs.map → oauth-transaction-store-SXIE57OD.cjs.map} +1 -1
- package/dist/path-safety.cjs +11 -12
- package/dist/path-safety.d.cts +2 -0
- package/dist/path-safety.d.ts +2 -0
- package/dist/path-safety.js +4 -5
- package/dist/permission-engine.d.ts +10 -17
- package/dist/persistence.cjs +31 -31
- package/dist/persistence.cjs.map +1 -1
- package/dist/persistence.d.cts +9 -1
- package/dist/persistence.d.ts +9 -1
- package/dist/persistence.js +12 -13
- package/dist/persistence.js.map +1 -1
- package/dist/project.cjs +5 -6
- package/dist/project.cjs.map +1 -1
- package/dist/project.js +3 -4
- package/dist/project.js.map +1 -1
- package/dist/providers.cjs +10 -10
- package/dist/providers.d.cts +2 -0
- package/dist/providers.d.ts +2 -0
- package/dist/providers.js +8 -8
- package/dist/registry-BZQFYRTL.cjs +46 -0
- package/dist/{registry-V7BDQ6QB.cjs.map → registry-BZQFYRTL.cjs.map} +1 -1
- package/dist/registry-DMWCJKRF.js +9 -0
- package/dist/{registry-75W33OGL.js.map → registry-DMWCJKRF.js.map} +1 -1
- package/dist/retry.cjs +4 -5
- package/dist/retry.d.cts +20 -5
- package/dist/retry.d.ts +20 -5
- package/dist/retry.js +3 -4
- package/dist/{run-BYSHf58D.d.cts → run-CTAdRU3U.d.cts} +120 -152
- package/dist/{run-BYSHf58D.d.ts → run-CTAdRU3U.d.ts} +120 -152
- package/dist/{run-until-HEQOUVU6.js → run-until-6D6TQ4JN.js} +27 -59
- package/dist/run-until-6D6TQ4JN.js.map +1 -0
- package/dist/{run-until-U2B5FJJI.cjs → run-until-DG2KXWB2.cjs} +27 -59
- package/dist/run-until-DG2KXWB2.cjs.map +1 -0
- package/dist/sandbox/bwrap.d.cts +11 -1
- package/dist/sandbox/bwrap.d.ts +11 -1
- package/dist/sandbox/index.cjs +26 -30
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.d.cts +8 -1
- package/dist/sandbox/index.d.ts +8 -1
- package/dist/sandbox/index.js +10 -14
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/linux-sandbox.d.cts +20 -4
- package/dist/sandbox/linux-sandbox.d.ts +20 -4
- package/dist/sandbox/types.d.cts +18 -2
- package/dist/sandbox/types.d.ts +18 -2
- package/dist/sanitize/index.cjs +2 -2
- package/dist/sanitize/index.js +1 -1
- package/dist/sanitize/types.d.cts +15 -2
- package/dist/sanitize/types.d.ts +15 -2
- package/dist/{sdk-agent-D8qJVkuV.d.ts → sdk-agent-Dxjb0IfM.d.cts} +169 -116
- package/dist/{sdk-agent-DEoKhA8a.d.cts → sdk-agent-ldzpyAaF.d.ts} +169 -116
- package/dist/server/auth/errors.d.cts +4 -3
- package/dist/server/auth/errors.d.ts +4 -3
- package/dist/server/auth/index.cjs +28 -28
- package/dist/server/auth/index.cjs.map +1 -1
- package/dist/server/auth/index.d.cts +28 -5
- package/dist/server/auth/index.d.ts +28 -5
- package/dist/server/auth/index.js +13 -13
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/auth/oauth-transaction-store.d.cts +2 -1
- package/dist/server/auth/oauth-transaction-store.d.ts +2 -1
- package/dist/server/auth/orchestrator.d.cts +4 -1
- package/dist/server/auth/orchestrator.d.ts +4 -1
- package/dist/server/auth/types.d.cts +18 -0
- package/dist/server/auth/types.d.ts +18 -0
- package/dist/server/errors-envelope.cjs +14 -15
- package/dist/server/errors-envelope.cjs.map +1 -1
- package/dist/server/errors-envelope.d.cts +3 -3
- package/dist/server/errors-envelope.d.ts +3 -3
- package/dist/server/errors-envelope.js +3 -4
- package/dist/server/errors-envelope.js.map +1 -1
- package/dist/session-transcript-LGHSNVY5.cjs +62 -0
- package/dist/{session-transcript-6WNITKRE.cjs.map → session-transcript-LGHSNVY5.cjs.map} +1 -1
- package/dist/session-transcript-VTBTCGQX.js +5 -0
- package/dist/{session-transcript-XAEKW6P7.js.map → session-transcript-VTBTCGQX.js.map} +1 -1
- package/dist/skills.cjs +8 -9
- package/dist/skills.js +6 -7
- package/dist/stream-object-HBFMIZLD.js +7 -0
- package/dist/{stream-object-UF4QRQRU.js.map → stream-object-HBFMIZLD.js.map} +1 -1
- package/dist/stream-object-QSKHISDJ.cjs +20 -0
- package/dist/{stream-object-ZJTQNKY3.cjs.map → stream-object-QSKHISDJ.cjs.map} +1 -1
- package/dist/stream-object.d.ts +2 -4
- package/dist/subagents-loader-LSKM2UIK.js +7 -0
- package/dist/{subagents-loader-CRT5LLL3.js.map → subagents-loader-LSKM2UIK.js.map} +1 -1
- package/dist/subagents-loader-YWFE7KYE.cjs +16 -0
- package/dist/{subagents-loader-YEUFFPAL.cjs.map → subagents-loader-YWFE7KYE.cjs.map} +1 -1
- package/dist/subagents-loader.cjs +7 -8
- package/dist/subagents-loader.cjs.map +1 -1
- package/dist/subagents-loader.d.cts +5 -3
- package/dist/subagents-loader.d.ts +5 -3
- package/dist/subagents-loader.js +5 -6
- package/dist/subagents-loader.js.map +1 -1
- package/dist/subagents.cjs +2 -2
- package/dist/subagents.cjs.map +1 -1
- package/dist/subagents.js +1 -1
- package/dist/subagents.js.map +1 -1
- package/dist/subscription/define-subscription.d.cts +4 -1
- package/dist/subscription/define-subscription.d.ts +4 -1
- package/dist/subscription/index.cjs +4 -5
- package/dist/subscription/index.cjs.map +1 -1
- package/dist/subscription/index.d.cts +2 -0
- package/dist/subscription/index.d.ts +2 -0
- package/dist/subscription/index.js +3 -4
- package/dist/subscription/index.js.map +1 -1
- package/dist/subscription/internal/server-integration.d.cts +5 -0
- package/dist/subscription/internal/server-integration.d.ts +5 -0
- package/dist/subscription/internal/subscription-runtime.d.cts +13 -1
- package/dist/subscription/internal/subscription-runtime.d.ts +13 -1
- package/dist/task-errors.d.ts +58 -0
- package/dist/task-store.cjs +7 -8
- package/dist/task-store.d.cts +2 -0
- package/dist/task-store.d.ts +2 -0
- package/dist/task-store.js +4 -5
- package/dist/types/agent-prims.d.ts +21 -0
- package/dist/types/agent.d.ts +63 -15
- package/dist/types/batch.d.ts +3 -0
- package/dist/types/budget-tracker.d.ts +3 -0
- package/dist/types/budget.d.ts +12 -3
- package/dist/types/content-blocks.d.ts +3 -0
- package/dist/types/context.d.ts +3 -0
- package/dist/types/conversation.d.ts +5 -0
- package/dist/types/cron.d.ts +5 -0
- package/dist/types/env-policy.d.ts +3 -0
- package/dist/types/eval.d.ts +3 -0
- package/dist/types/fork.d.ts +3 -0
- package/dist/types/goal-events.d.ts +3 -0
- package/dist/types/mcp.d.ts +5 -0
- package/dist/types/memory-adapter.d.ts +3 -0
- package/dist/types/memory-provider.d.ts +44 -5
- package/dist/types/messages-base.d.ts +4 -0
- package/dist/types/messages.d.ts +5 -0
- package/dist/types/plugin.d.ts +32 -4
- package/dist/types/processors.d.ts +3 -0
- package/dist/types/provider-profile.d.ts +3 -0
- package/dist/types/providers.d.ts +3 -0
- package/dist/types/run-events.d.ts +36 -9
- package/dist/types/run.d.ts +29 -2
- package/dist/types/sdk-agent.d.ts +43 -0
- package/dist/types/session-message.d.ts +3 -0
- package/dist/types/session-record.d.ts +3 -0
- package/dist/types/session-store.d.ts +45 -0
- package/dist/types/task.d.ts +3 -11
- package/dist/types/theokit.d.ts +3 -0
- package/dist/types/trajectory.d.ts +3 -0
- package/dist/types/updates.d.ts +5 -0
- package/dist/types/usage.d.ts +4 -1
- package/dist/types/workflow.d.ts +13 -135
- package/dist/workflow-as-tool.d.ts +66 -0
- package/dist/workflow-errors.d.ts +164 -0
- package/dist/workflow.cjs +29 -30
- package/dist/workflow.d.cts +135 -74
- package/dist/workflow.d.ts +135 -74
- package/dist/workflow.js +8 -9
- package/docs/adr/README.md +2604 -0
- package/docs/error-codes.md +137 -103
- package/docs/harness-capability-map.md +30 -20
- package/docs/memory-decisions.md +1 -1
- package/package.json +3 -7
- package/bin/theokit-migrate-config.mjs +0 -278
- package/bin/theokit-migrate-memory.mjs +0 -116
- package/dist/agent-3JK7VXNN.js +0 -57
- package/dist/agent-PVINJTUR.cjs +0 -66
- package/dist/agent-session-store-6EL5NPA4.cjs +0 -24
- package/dist/agent-session-store-OPGRB4XM.js +0 -7
- package/dist/batch-BXYTW2DP.cjs.map +0 -1
- package/dist/batch-L4ZXS46M.js.map +0 -1
- package/dist/chunk-25BD2R5G.js.map +0 -1
- package/dist/chunk-2D34UTDC.js.map +0 -1
- package/dist/chunk-2GUYQR5P.js.map +0 -1
- package/dist/chunk-2QDYBS2A.js.map +0 -1
- package/dist/chunk-3FFAEAUJ.cjs.map +0 -1
- package/dist/chunk-3O42QOMJ.js.map +0 -1
- package/dist/chunk-3OR54XG4.js.map +0 -1
- package/dist/chunk-4FFBAUFS.js.map +0 -1
- package/dist/chunk-4O5TGQBW.cjs.map +0 -1
- package/dist/chunk-4OTIXDMU.cjs.map +0 -1
- package/dist/chunk-4PYZ5AX3.cjs.map +0 -1
- package/dist/chunk-4QZSA2HJ.js.map +0 -1
- package/dist/chunk-4ZHTIJNE.cjs.map +0 -1
- package/dist/chunk-52NKC5HT.cjs.map +0 -1
- package/dist/chunk-6HKGLTJI.cjs.map +0 -1
- package/dist/chunk-6JSIEDKL.cjs.map +0 -1
- package/dist/chunk-7AD3ZTZL.js.map +0 -1
- package/dist/chunk-7BG5UH3T.cjs.map +0 -1
- package/dist/chunk-7YGCPMGB.js.map +0 -1
- package/dist/chunk-A46SWMIF.js.map +0 -1
- package/dist/chunk-A4JVILQU.js.map +0 -1
- package/dist/chunk-ACDLHN3W.js.map +0 -1
- package/dist/chunk-AQO3NSRG.cjs +0 -41
- package/dist/chunk-AQO3NSRG.cjs.map +0 -1
- package/dist/chunk-AWO27VRZ.js.map +0 -1
- package/dist/chunk-B2J4ZMZL.cjs.map +0 -1
- package/dist/chunk-B4EOJWOY.cjs.map +0 -1
- package/dist/chunk-BU4KFWXF.js.map +0 -1
- package/dist/chunk-BZRFXJHA.js.map +0 -1
- package/dist/chunk-C3NT3PVE.js.map +0 -1
- package/dist/chunk-C72AZW7J.js.map +0 -1
- package/dist/chunk-CQBXOJ6U.cjs.map +0 -1
- package/dist/chunk-D4CUGAKZ.js.map +0 -1
- package/dist/chunk-DN2PACRI.js.map +0 -1
- package/dist/chunk-DXGZ2NUG.cjs.map +0 -1
- package/dist/chunk-EG4QM7ZJ.cjs +0 -39
- package/dist/chunk-EG4QM7ZJ.cjs.map +0 -1
- package/dist/chunk-GPKAF7SG.js.map +0 -1
- package/dist/chunk-HCZD23VS.cjs.map +0 -1
- package/dist/chunk-HS7AVXTF.js.map +0 -1
- package/dist/chunk-IAHZCGBE.cjs.map +0 -1
- package/dist/chunk-J24VJOH3.cjs.map +0 -1
- package/dist/chunk-JJ3OVRUM.cjs.map +0 -1
- package/dist/chunk-JPBKYL3B.cjs +0 -18
- package/dist/chunk-JPBKYL3B.cjs.map +0 -1
- package/dist/chunk-K5OJUYSZ.js.map +0 -1
- package/dist/chunk-KQ7TS7WW.cjs.map +0 -1
- package/dist/chunk-KQRW2GPZ.js.map +0 -1
- package/dist/chunk-KYAJINUI.cjs.map +0 -1
- package/dist/chunk-L3MTL4NA.js.map +0 -1
- package/dist/chunk-L4BDVXIM.js.map +0 -1
- package/dist/chunk-LXI4XZEC.js.map +0 -1
- package/dist/chunk-LYRDF5TQ.cjs.map +0 -1
- package/dist/chunk-N2U4AZGB.js.map +0 -1
- package/dist/chunk-O7DK5PBJ.cjs.map +0 -1
- package/dist/chunk-O7LZFG6O.cjs.map +0 -1
- package/dist/chunk-OFRFZRQ4.cjs.map +0 -1
- package/dist/chunk-OSEG74VJ.js.map +0 -1
- package/dist/chunk-RFMBZPOW.cjs.map +0 -1
- package/dist/chunk-RFXWMRFC.js.map +0 -1
- package/dist/chunk-RIAM53CP.js.map +0 -1
- package/dist/chunk-RMWTPV3M.cjs.map +0 -1
- package/dist/chunk-RNB4APBZ.js.map +0 -1
- package/dist/chunk-SAVIWMZB.js.map +0 -1
- package/dist/chunk-SZVR77EJ.cjs.map +0 -1
- package/dist/chunk-TAZVKYWJ.js.map +0 -1
- package/dist/chunk-U54XCYG3.js.map +0 -1
- package/dist/chunk-U6IFHFWK.js.map +0 -1
- package/dist/chunk-UALX2J2Q.cjs.map +0 -1
- package/dist/chunk-UBDMVMBZ.js.map +0 -1
- package/dist/chunk-UFLD2HEV.js +0 -35
- package/dist/chunk-UFLD2HEV.js.map +0 -1
- package/dist/chunk-UGT7GK7I.cjs.map +0 -1
- package/dist/chunk-UNYXQ4M5.js.map +0 -1
- package/dist/chunk-UTSRIDKZ.js.map +0 -1
- package/dist/chunk-UU36SHFY.cjs.map +0 -1
- package/dist/chunk-V2BOS4WF.cjs.map +0 -1
- package/dist/chunk-VJ26EKGJ.cjs.map +0 -1
- package/dist/chunk-VKJ7V7EB.cjs.map +0 -1
- package/dist/chunk-VLVVJLDH.cjs.map +0 -1
- package/dist/chunk-WLQNMXQE.js.map +0 -1
- package/dist/chunk-WNO3C3N2.cjs.map +0 -1
- package/dist/chunk-WTMU7J4U.js +0 -14
- package/dist/chunk-WTMU7J4U.js.map +0 -1
- package/dist/chunk-XEQ3TM66.js +0 -35
- package/dist/chunk-XEQ3TM66.js.map +0 -1
- package/dist/chunk-XJCXEKMD.cjs.map +0 -1
- package/dist/chunk-XL7Q7HB2.cjs.map +0 -1
- package/dist/chunk-XWTLIGO3.cjs.map +0 -1
- package/dist/chunk-YML4ME27.cjs.map +0 -1
- package/dist/chunk-ZCIRZE37.cjs.map +0 -1
- package/dist/chunk-ZSWPZ23K.cjs.map +0 -1
- package/dist/chunk-ZWRG4NWT.cjs.map +0 -1
- package/dist/chunk-ZZMZWBR6.js.map +0 -1
- package/dist/compact-session-QV57KR66.cjs +0 -59
- package/dist/compact-session-RIGOWC4Y.js +0 -22
- package/dist/context-AGQ3DIZU.cjs +0 -24
- package/dist/context-GQRFBCLP.js +0 -7
- package/dist/executor-6CYCA7MI.cjs.map +0 -1
- package/dist/executor-QSEC3MRH.js.map +0 -1
- package/dist/fork-agent-RSV4E3EA.js.map +0 -1
- package/dist/fork-agent-Y2IK2RYU.cjs.map +0 -1
- package/dist/fs-session-store-4PIHT5UX.cjs +0 -20
- package/dist/fs-session-store-NM6YSTE2.js +0 -11
- package/dist/generate-object-GUNAUVBX.js +0 -8
- package/dist/generate-object-R7HTMW7F.cjs +0 -21
- package/dist/index-manager-2SRX45WJ.cjs +0 -27
- package/dist/index-manager-SP4ISSDX.js +0 -18
- package/dist/inject-session-WQKMC3GR.cjs +0 -29
- package/dist/internal/persistence/credential-pool-store.d.cts +0 -32
- package/dist/internal/persistence/credential-pool-store.d.ts +0 -32
- package/dist/internal/runtime/memory/memory-path-selector.d.ts +0 -73
- package/dist/judge-call-LAHMBJ57.cjs +0 -23
- package/dist/judge-call-LVXABPS3.js +0 -6
- package/dist/oauth-transaction-store-BT4GLTLK.cjs +0 -36
- package/dist/oauth-transaction-store-W52KVHQ4.js +0 -3
- package/dist/registry-75W33OGL.js +0 -10
- package/dist/registry-V7BDQ6QB.cjs +0 -47
- package/dist/run-until-HEQOUVU6.js.map +0 -1
- package/dist/run-until-U2B5FJJI.cjs.map +0 -1
- package/dist/server/adapter/express.d.cts +0 -9
- package/dist/server/adapter/express.d.ts +0 -9
- package/dist/server/adapter/fastify.d.cts +0 -9
- package/dist/server/adapter/fastify.d.ts +0 -9
- package/dist/server/adapter/hono.d.cts +0 -9
- package/dist/server/adapter/hono.d.ts +0 -9
- package/dist/server/adapter/shared-handler.d.cts +0 -9
- package/dist/server/adapter/shared-handler.d.ts +0 -9
- package/dist/server/adapter/types.d.cts +0 -33
- package/dist/server/adapter/types.d.ts +0 -33
- package/dist/session-transcript-6WNITKRE.cjs +0 -63
- package/dist/session-transcript-XAEKW6P7.js +0 -6
- package/dist/stream-object-UF4QRQRU.js +0 -8
- package/dist/stream-object-ZJTQNKY3.cjs +0 -21
- package/dist/subagents-loader-CRT5LLL3.js +0 -8
- package/dist/subagents-loader-YEUFFPAL.cjs +0 -17
- /package/dist/{batch.d.ts → internal/agent/batch.d.ts} +0 -0
- /package/dist/{agent-helpers.d.ts → internal/agent/helpers.d.ts} +0 -0
- /package/dist/internal/agent-loop/{loop-types.d.ts → types.d.ts} +0 -0
- /package/dist/internal/auth/{auth-types.d.ts → types.d.ts} +0 -0
- /package/dist/internal/cloud-agent/{cloud-payload-types.d.ts → types.d.ts} +0 -0
- /package/dist/internal/{runtime/concurrency → concurrency}/abort-utils.d.ts +0 -0
- /package/dist/internal/{runtime/concurrency → concurrency}/async-local-storage.d.ts +0 -0
- /package/dist/internal/{runtime/concurrency → concurrency}/async-semaphore.d.ts +0 -0
- /package/dist/internal/{runtime/concurrency → concurrency}/delegation-depth.d.ts +0 -0
- /package/dist/internal/{runtime/concurrency → concurrency}/map-with-concurrency.d.ts +0 -0
- /package/dist/internal/{runtime/retry → error-mappers}/default-retriable.d.ts +0 -0
- /package/dist/internal/{runtime/fixtures/fixture-types.d.ts → memory/storage/list-markdown.d.cts} +0 -0
- /package/dist/internal/{runtime/plugins/plugins-manager.d.ts → memory/storage/list-markdown.d.ts} +0 -0
- /package/dist/internal/{resilience → retry}/circuit-breaker.d.ts +0 -0
- /package/dist/internal/{runtime/retry → retry}/with-retry.d.ts +0 -0
- /package/dist/internal/{security/secret-redactor.d.cts → runtime/fixtures/types.d.ts} +0 -0
- /package/dist/internal/runtime/{memory → memory-glue}/memory-store.d.ts +0 -0
- /package/dist/internal/runtime/{memory → memory-glue}/select-facts.d.ts +0 -0
- /package/dist/internal/runtime/{plugins → plugin-loader}/plugin-frontmatter.d.ts +0 -0
- /package/dist/internal/{security/secret-redactor.d.ts → runtime/plugin-loader/plugins-manager.d.ts} +0 -0
- /package/dist/internal/runtime/{reasoning → system-prompt}/native-reasoning.d.ts +0 -0
- /package/dist/internal/{runtime/context/path-containment.d.ts → security/path-containment.d.cts} +0 -0
- /package/dist/internal/session/{session-types.d.ts → types.d.ts} +0 -0
- /package/dist/internal/{zod/to-json-schema.d.ts → zod-to-json-schema.d.ts} +0 -0
- /package/dist/subscription/internal/{adapter-types.d.cts → types.d.cts} +0 -0
- /package/dist/subscription/internal/{adapter-types.d.ts → types.d.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,713 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 5.0.0-next.1
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- 667bd3d: **BREAKING:** a project's `.claude/` directory is no longer read unless the consumer declares it.
|
|
8
|
+
Pass `local: { compatSources: ["claude-code"] }` to restore today's behaviour.
|
|
9
|
+
|
|
10
|
+
Four subsystems — hooks, skills, subagents and plugin bundles — resolved `<cwd>/.claude` alongside
|
|
11
|
+
`<cwd>/.theokit` with no opt-in anywhere. A directory containing only `.claude/`, and no
|
|
12
|
+
configuration of this SDK at all, had its hooks executed, its subagents registered, and its skill
|
|
13
|
+
text folded into the system prompt.
|
|
14
|
+
|
|
15
|
+
**Trust is not consent.** A consumer's trust gate answers "do I trust the code in this directory?",
|
|
16
|
+
and it was doing double duty as the answer to a different question: "do I want another product's
|
|
17
|
+
configuration imported into this one?" Those come apart in the ordinary case — `.claude/` is
|
|
18
|
+
populated in exactly the repository one trusts most, for a different tool, under a different
|
|
19
|
+
contract, often by a teammate who never heard of this SDK. The measured cost of conflating them was
|
|
20
|
+
the defect fixed one commit earlier: every turn denied by a `PreToolUse` hook nobody had declared.
|
|
21
|
+
|
|
22
|
+
The skills path is the quieter half. A skill's text enters the system prompt, so importing prompt
|
|
23
|
+
content from a directory this SDK does not own is a prompt-injection surface that no consumer opted
|
|
24
|
+
into and none could see.
|
|
25
|
+
|
|
26
|
+
A workspace holding an undeclared `.claude/` now says so once, on the diagnostics channel, naming
|
|
27
|
+
the directory and the line that turns it back on. It goes there rather than to stderr because
|
|
28
|
+
ignoring an undeclared directory is the intended behaviour, not a failure — every repository that
|
|
29
|
+
has Claude Code set up and does *not* want it imported would otherwise pay a line on a TUI host's
|
|
30
|
+
render surface for behaving as instructed.
|
|
31
|
+
|
|
32
|
+
An unrecognised name in `compatSources` is dropped rather than turned into `<cwd>/<name>`: a typo
|
|
33
|
+
must fail closed, since a directory name was never enough to describe a dialect.
|
|
34
|
+
|
|
35
|
+
### Minor Changes
|
|
36
|
+
|
|
37
|
+
- edfa59c: `Agent` can now be asked which operations it supports, instead of being told by an exception.
|
|
38
|
+
|
|
39
|
+
`SDKAgent` is one handle over two runtimes that do not offer the same operations, and the type did
|
|
40
|
+
not model the difference. `downloadArtifact` is a **required** member that rejects for every input on
|
|
41
|
+
a local agent; `listArtifacts` is required and returns `[]` for every state, so "no artifacts" and
|
|
42
|
+
"this runtime has no artifacts" were the same value. On a cloud agent, five members declared
|
|
43
|
+
_optional_ are present-but-throwing — so `typeof agent.fork === "function"` is `true` and calling it
|
|
44
|
+
throws. Neither requiredness nor optionality expresses "exists here, not there", which left a caller
|
|
45
|
+
no way to branch except a `try`/`catch` around a call it did not want to make.
|
|
46
|
+
|
|
47
|
+
Two additive members answer the question first, mirroring `Run.supports(op)` /
|
|
48
|
+
`Run.unsupportedReason(op)`, which already solved this one layer down:
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
if (agent.supports("downloadArtifact")) {
|
|
52
|
+
await agent.downloadArtifact(id);
|
|
53
|
+
} else {
|
|
54
|
+
logger.info(agent.unsupportedReason("downloadArtifact"));
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The new `AgentOperation` union is exported. Nothing was removed and no signature changed, so a
|
|
59
|
+
caller that never asks behaves exactly as before.
|
|
60
|
+
|
|
61
|
+
This is a mitigation. The structural fix is to split `SDKAgent` into a common core plus
|
|
62
|
+
`LocalCapableAgent` / `CloudCapableAgent`, so the compiler refuses the call rather than the runtime.
|
|
63
|
+
That is breaking on a published 4.x surface and is deliberately not done here.
|
|
64
|
+
- 912e3b9: Three silent downgrades now tell you they happened. Behaviour is unchanged; visibility is not.
|
|
65
|
+
|
|
66
|
+
**A failing `MemoryProvider` no longer disappears quietly.** `initLoopContext` caught every provider
|
|
67
|
+
failure into an empty value: an `init` failure meant no memory tool was registered, a `buildTools`
|
|
68
|
+
failure meant no provider tools, an `activePass` failure meant no recalled context in the system
|
|
69
|
+
prompt. The agent answered without the memory it was configured with, and nothing recorded it. There
|
|
70
|
+
is now a `memory_degraded` run event — new `RunMemoryDegradedEvent`, carrying the stage and the
|
|
71
|
+
provider's own message — alongside a stderr diagnostic, so a host can show "memory degraded" instead
|
|
72
|
+
of a healthy run. Degrading to a working agent is still what happens.
|
|
73
|
+
|
|
74
|
+
**The memory FTS fallback is gated on the case it was written for.** Any SQL failure used to become a
|
|
75
|
+
`LIKE '%query%'` scan over the whole table, returning plausible hits at a fixed score — so a corrupt
|
|
76
|
+
database, a missing FTS table and a disk error all looked like a successful search with worse
|
|
77
|
+
relevance. The fallback still runs, and a non-CJK failure now reports that the index may be missing
|
|
78
|
+
or corrupt.
|
|
79
|
+
|
|
80
|
+
**A `@theokit/sdk-memory` peer that fails to load says so.** Absent is expected and stays silent;
|
|
81
|
+
present-but-unloadable — a module-format interop failure, a broken native dependency, a bundler
|
|
82
|
+
rewrite — is reported instead of falling back to the legacy path in silence.
|
|
83
|
+
- 16a996f: Every error this SDK throws is now catchable as `TheokitAgentError`.
|
|
84
|
+
|
|
85
|
+
The README tells you to catch `TheokitAgentError`, and twenty-four exported error classes were not
|
|
86
|
+
one — they extended bare `Error`, so that catch silently missed them and none of them told you
|
|
87
|
+
whether the failure was worth retrying. Among them: `GenerateObjectError`, `StreamObjectError`,
|
|
88
|
+
`FileNotFoundError` and its four siblings, `SandboxSecurityError`, `SandboxNotAvailableError`, the
|
|
89
|
+
three `Auth*Error`s, `A2ARequestTimeoutError`, `MaxDelegationDepthError`, `WorkflowToolError`, and the
|
|
90
|
+
two errors on the `./interactive` subpath.
|
|
91
|
+
|
|
92
|
+
All twenty-four now extend `TheokitAgentError`, carry a `code`, and answer `isRetryable`. The answer
|
|
93
|
+
was decided per class rather than defaulted, and the reasoning is in the source. Two are retryable —
|
|
94
|
+
`A2ARequestTimeoutError` (a peer that missed one deadline may answer the next) and
|
|
95
|
+
`CompressionFailedError` (a single LLM call that failed or came back empty) — plus `FilesystemError`,
|
|
96
|
+
where the underlying I/O failure genuinely can be transient. The rest are not, and say why.
|
|
97
|
+
|
|
98
|
+
This is additive: `instanceof Error` still holds, every `code` value is unchanged, and no signature
|
|
99
|
+
moved. Code that already caught these by their specific class keeps working.
|
|
100
|
+
|
|
101
|
+
`generateObject` and `streamObject` also stop declaring the same failure contract twice with
|
|
102
|
+
byte-identical messages. They share one internal base class and keep their two distinct public names,
|
|
103
|
+
so `streamObjectError instanceof GenerateObjectError` remains false.
|
|
104
|
+
- 374dd5f: The `MemoryProvider` port is now the only memory path. `THEOKIT_PORT_MEMORY_PATH`
|
|
105
|
+
is gone, and the adapter over the built-in memory runs by default; a
|
|
106
|
+
consumer-supplied `memoryProvider` still takes precedence.
|
|
107
|
+
|
|
108
|
+
No typed API was removed — the flag was internal and never appeared in your
|
|
109
|
+
TypeScript types — but three behaviours change:
|
|
110
|
+
|
|
111
|
+
- **Recalled memory is now escaped before it reaches the model.** The port path
|
|
112
|
+
concatenated the recall summary into the system prompt raw, while the assembly
|
|
113
|
+
pipeline has always wrapped it as `<active-memory>` with XML escaping. A recalled
|
|
114
|
+
fact containing `</active-memory>` could close the block early and have everything
|
|
115
|
+
after it read as a system instruction. Both paths now wrap and escape.
|
|
116
|
+
- **Memory tools receive the run's abort signal and transcript projection.** They
|
|
117
|
+
arrive through the same channel as your own tools, so a long memory search is now
|
|
118
|
+
cancellable with the run.
|
|
119
|
+
- **`.theokit/memory` is no longer created by a send that never reaches the agent
|
|
120
|
+
loop** — a fixture-mode send with a `theo_test_*` key used to leave an empty
|
|
121
|
+
SQLite index behind. Real runs are unchanged: the index is created and searchable
|
|
122
|
+
exactly as before.
|
|
123
|
+
- 374dd5f: `MemoryProvider.buildTools(handle, agent)` now declares its second parameter as
|
|
124
|
+
`MemoryProviderAgentRef` — `{ agentId, model }` — which is all the SDK has ever
|
|
125
|
+
passed it.
|
|
126
|
+
|
|
127
|
+
It declared `SDKAgent`, a 33-member interface, and satisfied that with a cast over
|
|
128
|
+
a two-field object. Any implementation reaching for one of the other 31 members —
|
|
129
|
+
`send()`, `fork()`, `dispose()` — got `undefined is not a function` at runtime, with
|
|
130
|
+
no compile-time warning, because the cast removed exactly that check.
|
|
131
|
+
|
|
132
|
+
Non-breaking in both directions: an `SDKAgent` still satisfies the new type, and an
|
|
133
|
+
existing implementation typed `agent: SDKAgent` still compiles. `MemoryProviderAgentRef`
|
|
134
|
+
is exported from the package root so you can name it.
|
|
135
|
+
- 618cd02: `ctx.on(...)` now returns a disposer, so a plugin can detach one hook.
|
|
136
|
+
|
|
137
|
+
It returned `void`, which made the plugin Observer a one-way door: a handler attached through
|
|
138
|
+
`initialize()` had no removal path and ran for the life of the process. The only documented dynamic
|
|
139
|
+
case — a permission plugin re-installed on every prompt — worked because the registry keys plugins by
|
|
140
|
+
name, so re-registering the whole plugin was the only way to remove one hook.
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
const off = ctx.on("pre_tool_call", handler);
|
|
144
|
+
// ...later
|
|
145
|
+
off();
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
The disposer detaches the registration it was given — attaching the same function twice and disposing
|
|
149
|
+
once leaves one — and is idempotent. A handler the SDK refused (a non-function, which is warned and
|
|
150
|
+
ignored) still returns a working no-op disposer, so a caller never has to branch on whether the
|
|
151
|
+
registration took.
|
|
152
|
+
|
|
153
|
+
Two observers in the SDK already worked this way (`Run.onDidChangeStatus`, `MessageBus.unregister`);
|
|
154
|
+
this closes the gap. The new `PluginHookDisposer` type is exported.
|
|
155
|
+
- 31fea8f: `Retry.run(fn, options)` is the new name for `Retry.create(fn, options)`.
|
|
156
|
+
|
|
157
|
+
`create` never created anything — it runs `fn` with retry and resolves to `fn`'s
|
|
158
|
+
result — and the name said otherwise. It is deprecated, still honoured, and
|
|
159
|
+
removed in the next major.
|
|
160
|
+
- 691d8e6: `SandboxBackend`'s derived `glob`, `grep` and `listDir` now throw when the command could not run.
|
|
161
|
+
|
|
162
|
+
They returned `[]` on any non-zero exit, so a search that could not execute reported the same thing as
|
|
163
|
+
a search that found nothing — opposite facts, one normal and one meaning the agent is looking at a
|
|
164
|
+
filesystem it cannot read. That is the failure a backend whose `execute` is not a POSIX shell hits,
|
|
165
|
+
which the class docblock warns about in prose and could not enforce.
|
|
166
|
+
|
|
167
|
+
A genuine no-match still returns `[]`, and the distinction is the one the tools themselves draw:
|
|
168
|
+
`grep` exits 1 for no match and ≥2 for an error, `find` exits 0 with empty output.
|
|
169
|
+
|
|
170
|
+
If you have a custom backend that is not a POSIX shell and relied on these silently returning nothing,
|
|
171
|
+
they now throw a `ConfigurationError` with code `sandbox_derived_helper_failed`, telling you to
|
|
172
|
+
override them — which the docblock already asked for.
|
|
173
|
+
- 0ceeddc: `sanitizeToolInput` now reaches values inside arrays.
|
|
174
|
+
|
|
175
|
+
It never did. `{ tag: " a " }` came back trimmed and `{ tags: [" a "] }` came back untouched, with
|
|
176
|
+
nothing in the type or the documentation distinguishing them — the `@public` docblock on `deep` said
|
|
177
|
+
"recurse into nested objects/arrays", and array elements were not reached by any rung, including
|
|
178
|
+
`trim`, which is on by default.
|
|
179
|
+
|
|
180
|
+
Elements follow the same rules as fields: a string element is sanitized by whichever rungs are on, an
|
|
181
|
+
object element is descended only under `deep`. Array descent itself is not gated by `deep`, because a
|
|
182
|
+
value does not stop being a string by sitting in a list; `maxDepth` counts every hop and is what
|
|
183
|
+
bounds it. Arrays stay arrays.
|
|
184
|
+
|
|
185
|
+
If you were relying on array contents passing through a sanitizer untouched, they no longer do.
|
|
186
|
+
- 558dd30: `SessionStore` declares the three lifecycle hooks the SDK was already calling.
|
|
187
|
+
|
|
188
|
+
The port declared two methods, and the SDK probed for `acquire`, `release` and `dispose` through
|
|
189
|
+
`as unknown` casts. They worked — but nothing in the interface mentioned them, so a store author
|
|
190
|
+
implementing the documented two-method contract got no writer lease, no release and no disposal, with
|
|
191
|
+
no way to discover that those hooks existed.
|
|
192
|
+
|
|
193
|
+
They are now optional members with their contracts written down, including the one that matters:
|
|
194
|
+
a rejection from `acquire` whose `name` is `SessionBusyError` **propagates to the caller**, because
|
|
195
|
+
another process holding the session is a decision the caller has to make. Every other rejection is
|
|
196
|
+
treated as "no lease here" and the turn proceeds.
|
|
197
|
+
|
|
198
|
+
Optional means optional: an existing two-method store keeps working unchanged. What changes is that
|
|
199
|
+
the capability is now readable in the type you implement.
|
|
200
|
+
- 94722e8: `StructuredOutputError` distinguishes the causes it already knew apart.
|
|
201
|
+
|
|
202
|
+
Three different failures reported `no_tool_call`: an agent run that errored
|
|
203
|
+
before producing an answer, a run that was cancelled, and a tool-only completion
|
|
204
|
+
with no text to structure. Only the free-text message differed, so a caller could
|
|
205
|
+
not branch on which had happened without parsing English.
|
|
206
|
+
|
|
207
|
+
They are now `upstream_run_failed`, `run_cancelled` and `no_text_answer`.
|
|
208
|
+
`no_tool_call` keeps its original meaning — the model did not call the forced
|
|
209
|
+
output tool — and `parse_failed` is unchanged.
|
|
210
|
+
|
|
211
|
+
BEHAVIOUR CHANGE for a caller matching `no_tool_call`: three of the five cases it
|
|
212
|
+
used to catch now carry their own code. A caller that branched on it for a
|
|
213
|
+
cancelled run was branching on a defect, but the string it matched does change.
|
|
214
|
+
|
|
215
|
+
The union is exported as `StructuredOutputErrorCode`.
|
|
216
|
+
- 266ffc8: Nine failures that used to arrive as a bare `Error` now carry a type and a code.
|
|
217
|
+
|
|
218
|
+
`docs/error-codes.md` says to branch on `code`, never on the message — messages carry context and
|
|
219
|
+
change with it. These nine gave you no code to branch on:
|
|
220
|
+
|
|
221
|
+
- `MessageBus.send` / `request` against an unregistered peer now reject with the new
|
|
222
|
+
`A2APeerNotRegisteredError` (`a2a_peer_not_registered`), carrying `to`. The timeout branch of those
|
|
223
|
+
same two methods was typed under #380; this was the branch above it.
|
|
224
|
+
- The ChatGPT provider's missing-credential path now throws `AuthenticationError`
|
|
225
|
+
(`missing_credential`), matching the router path that handles the same condition.
|
|
226
|
+
- `createSkill`, `createTokenLimiter`, `defineSkillReadTool`, the two `Workflow` builder guards, and
|
|
227
|
+
`Security.addPattern` now throw `ConfigurationError` with a code each.
|
|
228
|
+
|
|
229
|
+
Because `isTransientError` is `err instanceof TheokitAgentError && err.isRetryable`, a bare `Error`
|
|
230
|
+
was also permanently invisible to retry logic. These now answer the question.
|
|
231
|
+
|
|
232
|
+
### Patch Changes
|
|
233
|
+
|
|
234
|
+
- 667bd3d: A hook or lifecycle command that exits without reading its stdin no longer raises an uncaught
|
|
235
|
+
`EPIPE` in the SDK's own process.
|
|
236
|
+
|
|
237
|
+
`spawnAndCollect` writes the JSON payload to the child's stdin. A child that never reads it —
|
|
238
|
+
`exit 1`, a hook that only inspects the environment, any command that ignores the payload — closes
|
|
239
|
+
the pipe first, and the write then raises `EPIPE` on a stream with no `error` listener, which Node
|
|
240
|
+
promotes to an uncaught exception. The child was behaving perfectly legitimately; the host process
|
|
241
|
+
took the fault.
|
|
242
|
+
|
|
243
|
+
The error is swallowed rather than surfaced: the child's exit code and stderr are the result, and
|
|
244
|
+
both are collected either way. A payload nobody read is not a failure of the spawn.
|
|
245
|
+
- 4415f83: An unrecognised key under `local` is now reported on the diagnostics channel instead of being
|
|
246
|
+
accepted in silence.
|
|
247
|
+
|
|
248
|
+
Measured before this: `Agent.create({ local: { compatSourcess: [...] } })` — one letter wrong —
|
|
249
|
+
created the agent with no throw, no warning, and nothing anywhere. That made two very different
|
|
250
|
+
failures identical: a typo and an SDK too old to know the option both produced the default
|
|
251
|
+
behaviour and no complaint.
|
|
252
|
+
|
|
253
|
+
It is the reason `usetheokit/theokit#634` is blocked rather than merely unimplemented — a forward
|
|
254
|
+
of `compatSources` written against a published SDK would be inert, and no consumer could tell.
|
|
255
|
+
The same shape produced the `$CLAUDE_PROJECT_DIR` defect and motivated the `compatSources` opt-in:
|
|
256
|
+
a surface that accepts input and does nothing with it, where the absence of a complaint reads as
|
|
257
|
+
acceptance.
|
|
258
|
+
|
|
259
|
+
The message names the key and the nearest known one, so one letter wrong is one line to read
|
|
260
|
+
rather than a trip to the documentation. It is a warning, never a refusal: rejecting an unknown key
|
|
261
|
+
would break every consumer passing a forward-compatible extra — the ordinary way to write code that
|
|
262
|
+
runs against two SDK versions — and turn a diagnostic problem into an outage. A correct
|
|
263
|
+
configuration emits nothing, and there is a test for that, because a warning that fires on valid
|
|
264
|
+
input stops being read.
|
|
265
|
+
- 9181434: A failed atomic write no longer leaves its temp file behind.
|
|
266
|
+
|
|
267
|
+
`replaceFileAtomic` — which backs the agent registry, session transcripts, MCP token storage and
|
|
268
|
+
everything else the SDK persists — cleaned up its `.tmp` on a rename failure and on no other. A
|
|
269
|
+
failure between the open and the rename, meaning a write error, a full disk, or an fsync failure,
|
|
270
|
+
closed the file handle and propagated with the temp still on disk.
|
|
271
|
+
|
|
272
|
+
Every failure after the open now removes it. A process killed mid-write still leaves one, which no
|
|
273
|
+
code inside that process can prevent; `sweepStaleAtomicTemps` reaps those on the next registry load.
|
|
274
|
+
- edfa59c: `Agent.batch(prompts, { task })` now rejects when the batch task fails, instead of resolving with an
|
|
275
|
+
empty array.
|
|
276
|
+
|
|
277
|
+
The task-wrapped path assigned its results inside the task's `work` callback and then returned that
|
|
278
|
+
variable unconditionally, so three different failures produced one indistinguishable value: the work
|
|
279
|
+
threw, the task was cancelled, or a fixed 5000-iteration poll budget elapsed. Each returned `[]` on
|
|
280
|
+
a **resolved** promise — which a caller cannot tell apart from `Agent.batch([])` on empty input.
|
|
281
|
+
Nothing threw and nothing was logged, and the registry's own `{ code, message }` for the failure was
|
|
282
|
+
discarded by a loop that read only the task's `state`.
|
|
283
|
+
|
|
284
|
+
The poll is gone. The wait is now the task's terminal event, which carries the failure detail:
|
|
285
|
+
|
|
286
|
+
- work threw → rejects with `code: "batch_task_failed"`, the registry's code on `protoErrorCode`
|
|
287
|
+
- cancelled → rejects with `code: "batch_task_cancelled"` and the reason, when one was given
|
|
288
|
+
|
|
289
|
+
The removed budget was not a safety net: 5000 iterations of a 5 ms sleep is roughly 25 seconds, so a
|
|
290
|
+
batch legitimately longer than that would trip it and return `[]`. The bound generated the failure
|
|
291
|
+
it appeared to guard against.
|
|
292
|
+
|
|
293
|
+
If you were checking `results.length === 0` to detect a failed batch, catch the rejection instead —
|
|
294
|
+
an empty array now means only what it says.
|
|
295
|
+
- edfa59c: Corrected the published JSDoc for `AgentOptions.budgetTracker` and `AgentOptions.memoryProvider`,
|
|
296
|
+
which told consumers the opposite of what the SDK does.
|
|
297
|
+
|
|
298
|
+
Both carried a paragraph stating the option was "wired to the type surface only" and that a consumer
|
|
299
|
+
supplying one "gets the type guarantee but NOT runtime enforcement". Neither has been true for some
|
|
300
|
+
time. `budgetTracker` is read by the agent loop before every iteration (`evaluateBudgetGate`),
|
|
301
|
+
advanced with `nextIteration()`, and charged with `track(...)` after each completion.
|
|
302
|
+
`memoryProvider` has its full lifecycle driven — `init`, `buildTools`, `runActivePass`, `sync`,
|
|
303
|
+
`dispose`.
|
|
304
|
+
|
|
305
|
+
No behaviour changes here; the code was already correct. What changes is what the published `.d.ts`
|
|
306
|
+
tells you, and it was wrong in the expensive direction: a consumer reading it was told the SDK would
|
|
307
|
+
not enforce their cost ceiling, so the rational response was to build a second control outside the
|
|
308
|
+
SDK, or to stop passing the option at all.
|
|
309
|
+
|
|
310
|
+
Six occurrences of the claim were corrected across `types/agent.ts`, `index.ts` and the loop's own
|
|
311
|
+
input types, and a lint now requires any "not implemented yet" note to carry a tracking reference and
|
|
312
|
+
a date, so the next one expires instead of outliving the work it describes.
|
|
313
|
+
- 4be7411: `Budget.create` now refuses `scope: "agent"` and `scope: "call"` with a
|
|
314
|
+
`ConfigurationError` (`unimplemented_budget_scope`).
|
|
315
|
+
|
|
316
|
+
Only `"process"` was ever implemented. Nothing outside the registry read `scope`,
|
|
317
|
+
so the other two were accepted and silently ignored: a caller asking for
|
|
318
|
+
per-agent accounting got process-wide accounting with no signal. A cost control
|
|
319
|
+
that reports the wrong number is worse than a missing feature.
|
|
320
|
+
|
|
321
|
+
`FnStep.compensate` is marked deprecated. It was never implemented — setting it
|
|
322
|
+
arms `WorkflowCompensateNotImplementedError`, so the step fails at run time.
|
|
323
|
+
|
|
324
|
+
`AgentLoopInputs` declares `maxConsecutiveToolErrors` and `maxConcurrentTools`,
|
|
325
|
+
which were read through inline casts and appeared in no type. A typo in either
|
|
326
|
+
name now fails to compile instead of silently taking the default.
|
|
327
|
+
- 24fb692: `Cron.create()` now reports when the job will actually next fire.
|
|
328
|
+
|
|
329
|
+
It reported `now + 1 hour` for every expression. The function behind it read neither the cron
|
|
330
|
+
expression nor the timezone — a `@yearly` job said it would run within the hour, and so did a
|
|
331
|
+
`*/5 * * * *` one. Its own docstring scoped it to fixture mode ("real scheduling uses a proper
|
|
332
|
+
evaluator wired in by the local scheduler"), and its only caller was `Cron.create()`.
|
|
333
|
+
|
|
334
|
+
The local scheduler overwrote the value for jobs it picked up, which is why this survived: the wrong
|
|
335
|
+
number was visible between creating a job and the scheduler reaching it, and permanently for a job
|
|
336
|
+
the scheduler never runs — a job created against a cloud runtime, or created while the scheduler is
|
|
337
|
+
stopped.
|
|
338
|
+
|
|
339
|
+
`nextRunAt` is now computed with croner, which was already a dependency and already doing exactly
|
|
340
|
+
this inside the scheduler. When an expression has no next run — `0 0 30 2 *`, a date that never
|
|
341
|
+
occurs — the field is absent rather than filled with a number, which is what the optional
|
|
342
|
+
`CronJob.nextRunAt` already meant.
|
|
343
|
+
- edfa59c: Two abstractions with no implementers and no consumers are gone. Nothing published changes.
|
|
344
|
+
|
|
345
|
+
`internal/security/secret-redactor.ts` declared a `SecretRedactor` interface that `redactSecrets`
|
|
346
|
+
happened to satisfy. It was added to raise the module's abstractness out of a coupling metric's "zone
|
|
347
|
+
of pain", and nothing ever held it — no implementer, no consumer, absent from every barrel. An
|
|
348
|
+
interface nobody holds does not change what any module depends on, so the number it was added to move
|
|
349
|
+
could not have moved either. Its README section now records that, and keeps the reasoning that
|
|
350
|
+
rejects chasing the metric in the first place.
|
|
351
|
+
|
|
352
|
+
`server/adapter/express.ts`, `fastify.ts` and `hono.ts` were byte-identical below their docblocks:
|
|
353
|
+
two imports and a one-line delegation each, with no framework type imported or adapted anywhere. They
|
|
354
|
+
are replaced by a single `server/adapter/index.ts` whose docblock says what the function actually
|
|
355
|
+
returns — a route descriptor the host binds itself, not middleware. The three per-framework docblocks
|
|
356
|
+
claimed an adaptation that did not exist, which is the half of this that could mislead a reader.
|
|
357
|
+
|
|
358
|
+
Their three test files, which had quietly drifted into three different levels of coverage, are one
|
|
359
|
+
file carrying the union of their cases plus one new case asserting the descriptor contract directly.
|
|
360
|
+
- 374dd5f: Embedding requests now retry with the same jittered exponential backoff the rest of
|
|
361
|
+
the SDK uses, and honour the provider's `Retry-After` header.
|
|
362
|
+
|
|
363
|
+
They used to back off linearly at `50ms * attempt` and ignore `Retry-After`, so two
|
|
364
|
+
clients hitting a rate-limited embedding endpoint retried in lockstep and neither
|
|
365
|
+
waited as long as the provider asked. The delay is tuned tighter than the LLM
|
|
366
|
+
transport's — 250ms base, 4s cap rather than 500ms/32s — because an embedding retry
|
|
367
|
+
sits inside a memory write on the run's critical path.
|
|
368
|
+
- 63617cd: Hooks imported from `.claude/settings.json` now run with `$CLAUDE_PROJECT_DIR` defined, so a
|
|
369
|
+
repository that also uses Claude Code stops denying every turn.
|
|
370
|
+
|
|
371
|
+
Reading that file is a deliberate compatibility decision, but the commands inside it are written for
|
|
372
|
+
Claude Code's runtime, which defines that variable and whose documentation tells hook authors to
|
|
373
|
+
reach project files through it. This SDK did not define it, so `sh` expanded it to the empty string
|
|
374
|
+
and `bash "$CLAUDE_PROJECT_DIR/.claude/hooks/guard.sh"` ran as `bash "/.claude/hooks/guard.sh"` — a
|
|
375
|
+
file that does not exist, which a hook runner correctly reads as a refusal. The result was every
|
|
376
|
+
tool call denied, in any repository whose only unusual property was having Claude Code set up, with
|
|
377
|
+
a message naming a script that was present and executable all along.
|
|
378
|
+
|
|
379
|
+
A denial caused by an undefined variable now names the variable. `$CLAUDE_PLUGIN_ROOT` and the rest
|
|
380
|
+
of that runtime's surface are still not supplied — inventing a value would send a script somewhere
|
|
381
|
+
real and wrong — but a hook that needs one fails saying which, instead of reporting a path that
|
|
382
|
+
failed ten characters later.
|
|
383
|
+
- edfa59c: HTTP 408 is now classified as a retryable timeout instead of a configuration error.
|
|
384
|
+
|
|
385
|
+
`mapHttpStatusToError` in `internal/http.ts` had no arm for 408, so a Request Timeout fell through
|
|
386
|
+
to the generic `4xx` branch and came back as a `ConfigurationError` — `isRetryable: false`. Every
|
|
387
|
+
one of the four provider-specific mappers already did the opposite: `openai-compatible`, `anthropic`,
|
|
388
|
+
`bedrock` and `vertex` all map 408 to a `NetworkError` carrying a `timeout` code, which is retryable.
|
|
389
|
+
The generic ladder is a fifth copy of the same knowledge and it was the copy that drifted.
|
|
390
|
+
|
|
391
|
+
The failure was silent and pointed the wrong way. Nothing threw: a caller branching on
|
|
392
|
+
`isTransientError` simply refused to retry a request that would very likely have succeeded, and did
|
|
393
|
+
so only on the paths that went through the generic mapper rather than a provider one.
|
|
394
|
+
|
|
395
|
+
If you were catching `ConfigurationError` to handle 408 specifically, catch `NetworkError` instead —
|
|
396
|
+
or branch on `code`, which is what `docs/error-codes.md` asks for.
|
|
397
|
+
- edfa59c: The HTTP status ladder now has one definition instead of four, and two drifted copies are repaired.
|
|
398
|
+
|
|
399
|
+
`401/403 → auth_failed`, `402 → quota_exceeded`, `408 → timeout`, `429 → rate_limit`,
|
|
400
|
+
`400 → invalid_request`, `5xx → server_error` is RFC 9110 semantics, not a vendor contract: a 429
|
|
401
|
+
means the same thing whichever provider sent it. It was nevertheless written out in all four
|
|
402
|
+
provider mappers, and the copies had already diverged in two ways that reached users:
|
|
403
|
+
|
|
404
|
+
- **HTTP 402 reached one mapper of four.** `quota_exceeded` was wired into the OpenAI-compatible
|
|
405
|
+
mapper only, so a Bedrock, Vertex or Anthropic endpoint answering 402 fell through every arm and
|
|
406
|
+
surfaced as `unknown`. The canonical bucket existed and three of four mappers could not reach it.
|
|
407
|
+
- **The server arm had two different upper bounds.** Anthropic and OpenAI-compatible guarded
|
|
408
|
+
`>= 500 && < 600`; Bedrock and Vertex guarded `>= 500` with no ceiling, so a malformed or
|
|
409
|
+
proxy-injected 6xx was `server_error` in two mappers and `unknown` in the other two.
|
|
410
|
+
|
|
411
|
+
The ladder now lives once, in `internal/error-mappers/shared.ts`, beside the other dialect-agnostic
|
|
412
|
+
helpers. Each mapper keeps its own body dialect — Anthropic's `context_too_long`, OpenAI's
|
|
413
|
+
`insufficient_quota`, Bedrock's AWS `__type` strings and 404 rule, Vertex's `google.rpc` enum with
|
|
414
|
+
its finer `unauthenticated`/`permission` split — because those *are* per-vendor contracts. The
|
|
415
|
+
shape is now `classifyVendorBody(body) ?? httpStatusToErrorCode(status)`.
|
|
416
|
+
|
|
417
|
+
Visible changes: 402 now yields `quota_exceeded` (was `unknown`) on Anthropic, Bedrock and Vertex,
|
|
418
|
+
and a status of 600 or above now yields `unknown` (was `server_error`) on Bedrock and Vertex. HTTP
|
|
419
|
+
404 is deliberately unchanged everywhere.
|
|
420
|
+
- 926cb81: Removed `LanceMemoryAdapter.unwrap()`, which handed callers the raw `LanceIndex`
|
|
421
|
+
behind the adapter. It had no callers anywhere in the monorepo — including the
|
|
422
|
+
migration tool and benchmark script its own docblock named, both of which open a
|
|
423
|
+
`LanceIndex` directly and never go through the adapter.
|
|
424
|
+
|
|
425
|
+
A caller that needs `addFacts` / `countFacts` / `removeFacts` needs a
|
|
426
|
+
`LanceIndex`, and opening one is the honest way to get it.
|
|
427
|
+
- 7f91326: The Lance memory backend now honours `SearchOptions.vectorWeight` and
|
|
428
|
+
`textWeight`. It blended hits with hard-coded 0.7 / 0.3 literals and never read
|
|
429
|
+
the options, so a caller that tuned the weights had its tuning applied on the
|
|
430
|
+
SQLite backend and silently dropped on Lance.
|
|
431
|
+
|
|
432
|
+
Unweighted Lance results shift slightly as a consequence: the shared defaults are
|
|
433
|
+
0.6 / 0.4, and one of the two hard-coded numbers was never the contract's.
|
|
434
|
+
|
|
435
|
+
Workflow step logging (`ctx.log.debug` / `.info` / `.warn`) now goes through the
|
|
436
|
+
SDK's diagnostics channel instead of `console`, so a host that installs a
|
|
437
|
+
diagnostics sink — a TUI, for instance — receives it instead of having its frame
|
|
438
|
+
written over.
|
|
439
|
+
- edfa59c: Two internal modules moved to the layer they belong to. No public API changed.
|
|
440
|
+
|
|
441
|
+
`src/errors.ts` is the package's leaf — fifteen files under `internal/runtime/` import the typed
|
|
442
|
+
error hierarchy from it — and it imported back up into `internal/runtime/retry/` for one helper. The
|
|
443
|
+
helper encodes which error codes are retriable, which is a property of the error taxonomy rather
|
|
444
|
+
than of the retry runtime, so it now lives in `internal/error-mappers/` beside the other mapping
|
|
445
|
+
knowledge. One import path changed; the file itself was moved, not rewritten.
|
|
446
|
+
|
|
447
|
+
`internal/security/` is the most-depended-upon module in the tree and held node builtins and
|
|
448
|
+
`errors.js` and one exception: a path-containment primitive it reached for in
|
|
449
|
+
`internal/runtime/context/`. That primitive had four consumers and only two were in the folder it
|
|
450
|
+
sat in — it lived there because that is where it was extracted from, not because it belonged there.
|
|
451
|
+
It is now `internal/security/path-containment.ts`, and all four consumers import downward into
|
|
452
|
+
`security/`, the direction the rest of the tree already runs.
|
|
453
|
+
- 243bd2c: The live-agent registry and the session cache survive a package loaded twice.
|
|
454
|
+
|
|
455
|
+
`liveAgentRegistry` and the session cache's two maps were plain module-level `const`s, which are
|
|
456
|
+
singletons per module INSTANCE. A package can be loaded more than once in one process — two copies in
|
|
457
|
+
`node_modules`, ESM and CJS side by side, a monorepo with distinct versions — and each copy then gets
|
|
458
|
+
its own registry. For the live-agent registry, the public one, that means two views of which agents
|
|
459
|
+
are running, and a caller reading the wrong one sees none.
|
|
460
|
+
|
|
461
|
+
All three now go through the same `Symbol.for`-keyed helper the rest of the SDK uses.
|
|
462
|
+
|
|
463
|
+
The session cache's docblock asserted that the instances "remain the only ones in the process, because
|
|
464
|
+
an ES module is a singleton". That is the claim the helper exists to refute; the docblock now says so.
|
|
465
|
+
- edfa59c: `LiveSessionError` from `@theokit/sdk/persistence` is renamed to `LiveTranscriptError`. The old name
|
|
466
|
+
still works and is deprecated.
|
|
467
|
+
|
|
468
|
+
Two different classes were called `LiveSessionError`, exported from two declared subpaths that one
|
|
469
|
+
consumer can hold at once. They have incompatible shapes: the root barrel's is
|
|
470
|
+
`new LiveSessionError(sessionId, reason)` with a `reason` field and no `code`; the persistence one
|
|
471
|
+
was `new LiveSessionError(path)` with a `path` field and `code: "live_session_protected"`.
|
|
472
|
+
|
|
473
|
+
The failure was quiet in the way that costs most. `instanceof` is class identity, so a `catch`
|
|
474
|
+
checking the class imported from the root silently did not match the one thrown from persistence, and
|
|
475
|
+
the fallback ran for a condition the code believed it had handled. A `name` check looked like it
|
|
476
|
+
worked — `err.name === "LiveSessionError"` matched *both* — and then read `err.reason`, which only
|
|
477
|
+
one of them has.
|
|
478
|
+
|
|
479
|
+
The names now say what each refusal is about: refusing to destroy a **session**, and refusing to
|
|
480
|
+
overwrite a **transcript** file. `LiveSessionError` remains exported from `@theokit/sdk/persistence`
|
|
481
|
+
as a deprecated alias so existing imports keep working; it will be removed in the next major.
|
|
482
|
+
- ba6549f: An MCP client with a tight `requestTimeoutMs` can reconnect after a drop.
|
|
483
|
+
|
|
484
|
+
`reconnect()` recovers by spawning a fresh child and running the `initialize` handshake, and that
|
|
485
|
+
handshake was bounded by the same `requestTimeoutMs` the caller set for ordinary requests. Setting a
|
|
486
|
+
tight request budget — an ordinary thing to do for a latency SLO — silently made a client unable to
|
|
487
|
+
recover: every reconnect attempt spawned a process that could not finish inside a steady-state budget,
|
|
488
|
+
the bounded loop exhausted, and the client surfaced `mcp_disconnected`. That is the wedge the bounded
|
|
489
|
+
loop exists to prevent.
|
|
490
|
+
|
|
491
|
+
The reconnect handshake now takes `max(requestTimeoutMs, 10s)`.
|
|
492
|
+
|
|
493
|
+
The **first** connect is unchanged and keeps your budget exactly. The difference is which failure is
|
|
494
|
+
visible: a `requestTimeoutMs` too small to connect at all fails at the call you made, immediately, and
|
|
495
|
+
is yours to correct. The reconnect is the SDK's own recovery, which you never sized and never see
|
|
496
|
+
until a drop happens.
|
|
497
|
+
- edfa59c: `MemoryIndex.sync()` and `.status()` now say whether their numbers were measured.
|
|
498
|
+
|
|
499
|
+
`MemoryIndex` has two implementations. `IndexManager` walks a markdown corpus and counts rows with
|
|
500
|
+
`SELECT COUNT(*)`. The Lance backend has no corpus — it is a vector store fed by explicit writes —
|
|
501
|
+
and it answered with a frozen all-zeros `SyncResult` and a hardcoded `filesIndexed: 0,
|
|
502
|
+
chunksIndexed: 0`. Those are indistinguishable from a real sync that found nothing to do and a real
|
|
503
|
+
index that is empty, and the comment above them stated that as the goal: *"Returns zero counts so
|
|
504
|
+
callers' existing logging does not break."*
|
|
505
|
+
|
|
506
|
+
The consequence was a false negative rather than a crash. A caller deciding "is the index
|
|
507
|
+
populated?" from `chunksIndexed > 0` got `false` on every Lance run, however many rows the table
|
|
508
|
+
held.
|
|
509
|
+
|
|
510
|
+
Two required fields make the difference visible:
|
|
511
|
+
|
|
512
|
+
- `SyncResult.supported` — `true` from `IndexManager`, `false` from Lance
|
|
513
|
+
- `IndexStatus.countsExact` — `true` when counted, `false` when the number is a placeholder
|
|
514
|
+
|
|
515
|
+
The counts stay zero. Inventing a number would have traded one false claim for another; what changed
|
|
516
|
+
is that a caller can no longer read a placeholder as a measurement. Both fields are also on the
|
|
517
|
+
public `MemoryIndexHandle`, so a consumer holding the handle can see them. If you need the real Lance
|
|
518
|
+
count, `unwrap().countFacts()` still returns it.
|
|
519
|
+
- 21be5cb: `migrateSqliteToLance` now rejects a `batchSize` its loop cannot advance with,
|
|
520
|
+
before touching the workspace.
|
|
521
|
+
|
|
522
|
+
A `0` or a negative made the migration spin forever, calling `addFacts([])` and
|
|
523
|
+
logging a progress line every iteration. `NaN` — which `Number("abc")` produces —
|
|
524
|
+
made it migrate nothing and report "Validation FAILED. SQLite preserved.",
|
|
525
|
+
blaming the migration for a typo. Both now raise a `ConfigurationError` with code
|
|
526
|
+
`invalid_batch_size`, naming the value received.
|
|
527
|
+
- edfa59c: A dropped connection to Ollama is now retried instead of surfacing on the first attempt.
|
|
528
|
+
|
|
529
|
+
`OllamaNativeClient` rethrew the raw `fetch` rejection when its own body-dialect mapper did not
|
|
530
|
+
recognise the failure, and threw a bare `new Error` for any HTTP status the dialect did not cover.
|
|
531
|
+
Both land outside the SDK error hierarchy, and that decides retry behaviour by contract rather than
|
|
532
|
+
by chance: `isTransientError` is `err instanceof TheokitAgentError && err.isRetryable === true`, and
|
|
533
|
+
the router wraps every resolved client in `RetryingLlmClient`. A foreign error is therefore
|
|
534
|
+
non-transient by definition — so the most ordinary failure a local Ollama can produce, a dropped
|
|
535
|
+
connection, was never retried.
|
|
536
|
+
|
|
537
|
+
The repository had already found and fixed this for the other transports; `openai.ts` records the
|
|
538
|
+
measurement and names Ollama as the one still carrying it. Transport failures now go through
|
|
539
|
+
`wrapTransportError` (which passes `AbortError` and any already-mapped SDK error through untouched,
|
|
540
|
+
so nothing gets relabelled), and unrecognised statuses go through the shared HTTP status ladder
|
|
541
|
+
rather than a bare `Error`.
|
|
542
|
+
|
|
543
|
+
Visible change: these two paths now reject with `NetworkError` (`code: "transport_failure"`) and a
|
|
544
|
+
typed error carrying the status, instead of a `TypeError` and an `Error`. A caller branching on
|
|
545
|
+
`instanceof Error` is unaffected; a caller branching on `isTransientError` starts getting retries.
|
|
546
|
+
- 5d174f2: Three pieces of duplicated logic now have one owner each. One internal error message improves.
|
|
547
|
+
|
|
548
|
+
The `~4 chars per token` estimate had two `@public` implementations reachable from two entry points —
|
|
549
|
+
`built-in-processors.ts` with a named constant, `compaction.ts` with the ratio inlined. Tuning it, or
|
|
550
|
+
switching to code points instead of UTF-16 units (a caveat both docblocks already carried), would have
|
|
551
|
+
silently diverged them. It lives in `compaction.ts` now, with `CHARS_PER_TOKEN` exported beside it;
|
|
552
|
+
`built-in-processors.ts` re-exports both under the same names, so nothing published changes.
|
|
553
|
+
|
|
554
|
+
The error-body reader duplicated character-for-character in the Bedrock and Vertex mappers is one
|
|
555
|
+
`parseErrorBody` in their shared module. It describes how `fetch` surfaces a body, which is the same
|
|
556
|
+
whoever sent it.
|
|
557
|
+
|
|
558
|
+
`abortError` had three copies — including inside the two files the extraction's own docblock named as
|
|
559
|
+
the ones that should stop having one. **One of the three behaved differently**: the pool-aware client
|
|
560
|
+
discarded a non-`Error` abort reason and raised a generic `"AbortError"`. All three are now the shared
|
|
561
|
+
implementation, which carries the caller's reason through. If you cancel with
|
|
562
|
+
`controller.abort("shutting down")` and the pool-aware client is in the path, the rejection message is
|
|
563
|
+
now `shutting down` rather than `AbortError`.
|
|
564
|
+
- 0c4df84: The `PermissionRule` documentation described a bug that was fixed, and told you to work around it.
|
|
565
|
+
|
|
566
|
+
The public docblock warned that a predicate matcher is invoked with `undefined` when the call omitted
|
|
567
|
+
the argument — so an allow-rule written to narrow would authorize an argument-less call, and a
|
|
568
|
+
deny-rule would throw a `TypeError` out of the permission gate. It closed by telling you to guard the
|
|
569
|
+
parameter in every predicate you write.
|
|
570
|
+
|
|
571
|
+
None of that has been true since `argMatches` started checking for a missing argument first, for
|
|
572
|
+
every matcher form. **A rule that declares an argument the call did not supply does not match, and
|
|
573
|
+
the predicate is not invoked.** You do not need the hand-written guards.
|
|
574
|
+
|
|
575
|
+
The fixed behaviour also had no test — deleting the guard left the entire suite green — so three
|
|
576
|
+
cases now cover it, including the two the old docblock described.
|
|
577
|
+
- edfa59c: The Responses-API transport's SSE state machine is a class, and the eight event kinds it handles are
|
|
578
|
+
now covered by tests.
|
|
579
|
+
|
|
580
|
+
`ResponsesApiClient.stream` inlined the whole dispatch: one 165-line generator, ten mutable locals
|
|
581
|
+
and eight `else if` arms, carrying a suppression that described it as "mirroring
|
|
582
|
+
`OpenAIStreamAccumulator.consume`". It mirrored what that method does, not how it is organised —
|
|
583
|
+
`consume` is seven lines delegating to small private methods. The state machine now lives in a
|
|
584
|
+
`ResponsesStreamAccumulator` shaped like its sibling, the suppression is gone, and every function in
|
|
585
|
+
the file is under the complexity threshold the project sets for itself.
|
|
586
|
+
|
|
587
|
+
The refactor is behaviour-preserving, and that claim was measured rather than asserted. Each arm of
|
|
588
|
+
the dispatch was mutated in turn before the change: three of eight killed a test, five did not — the
|
|
589
|
+
reasoning deltas, the incremental tool-argument accumulation, `response.incomplete` → `max_tokens`,
|
|
590
|
+
the reasoning/cache token counters, and the in-stream failure path. Notably, a comment in the
|
|
591
|
+
existing suite claimed the argument deltas were exercised "because the parsed input below can only
|
|
592
|
+
be right if they were accumulated"; deleting the accumulation left that suite green, because the
|
|
593
|
+
recorded fixture repeats the full arguments on the terminal event.
|
|
594
|
+
|
|
595
|
+
Eight characterisation tests close those gaps, and re-running the battery after the extraction kills
|
|
596
|
+
all eleven mutants. Two behaviours documented for the first time by that battery: the tool name is
|
|
597
|
+
taken from the frame that announced the call when the completion frame omits it, and frames sent
|
|
598
|
+
after `[DONE]` are ignored.
|
|
599
|
+
|
|
600
|
+
No public API changed.
|
|
601
|
+
- d1182ae: A resumed session now replays its history as structured tool calls instead of flat text, so the
|
|
602
|
+
model stops learning to type `[tool call] <name>` as prose.
|
|
603
|
+
|
|
604
|
+
Hydration has always produced two projections of each stored turn: `text`, in which a tool call
|
|
605
|
+
folds to the marker `[tool call] NAME`, and structured `parts`, which carries the call id, the tool
|
|
606
|
+
name and the arguments. The replay read `text` alone. So a resumed session showed the model its own
|
|
607
|
+
prior turn as prose containing the marker, and the model did the reasonable thing with a pattern it
|
|
608
|
+
is shown — it wrote the marker instead of calling the tool. Downstream that surfaced as an assistant
|
|
609
|
+
message ending `"…report its output.[tool call] run_shell"` with no tool call behind it: the tool
|
|
610
|
+
did not run, nothing errored, and the transcript read as the model narrating an action it never took.
|
|
611
|
+
|
|
612
|
+
A turn with no `parts` replays exactly as before, so sessions stored by an older SDK keep the
|
|
613
|
+
behaviour they were written under. Tool results replay as a user message, which is the convention
|
|
614
|
+
the live loop already uses.
|
|
615
|
+
|
|
616
|
+
**An already-affected session recovers on its next turn.** No need to start a new one or delete
|
|
617
|
+
anything: the stored `parts` were always correct — only the `text` projection carried the marker —
|
|
618
|
+
so reading structure instead of prose heals a contaminated transcript rather than merely stopping
|
|
619
|
+
new contamination. Verified against a session that had accumulated seven occurrences of the marker.
|
|
620
|
+
- 1499923: `@theokit/sdk/sandbox` marks `resetInteractiveWarnLatch` and `resetSandboxWarnLatch`
|
|
621
|
+
as deprecated. Both are test seams for WARN-once latches that were re-exported
|
|
622
|
+
under plain camelCase, reading like ordinary API. They still work and are removed
|
|
623
|
+
in the next major; there is no replacement, because production code has no reason
|
|
624
|
+
to reset a warn-once latch.
|
|
625
|
+
|
|
626
|
+
`resetBwrapMemo` is NOT deprecated and now documents why it is public: it is the
|
|
627
|
+
companion to `detectBwrapMemoized`, and the only way to make a long-lived host
|
|
628
|
+
re-probe after `bwrap` is installed.
|
|
629
|
+
- f64ab2b: `SessionManager` gains an optional `getCookieSecret()`, the member `defineAuth`
|
|
630
|
+
uses to encrypt the OAuth transaction cookie.
|
|
631
|
+
|
|
632
|
+
It is additive: a manager without it falls back to `THEOKIT_OAUTH_TX_SECRET`
|
|
633
|
+
exactly as before. What changes is that the orchestrator no longer casts its own
|
|
634
|
+
port away to read an undeclared `secret` field — a shape no conforming
|
|
635
|
+
implementation could supply.
|
|
636
|
+
- 6aeeadb: Telemetry auto-instrumentation now logs what each adapter actually wired.
|
|
637
|
+
|
|
638
|
+
Five of the seven adapters install something concrete — an OTel span processor,
|
|
639
|
+
an event processor, a vendor client. Braintrust and LangSmith cannot: those
|
|
640
|
+
vendors auto-instrument from an env var, so loading the module is the whole
|
|
641
|
+
contribution. Both are legitimate, but the registry printed
|
|
642
|
+
`Braintrust auto-instrumented.` for the second kind, which read as a wired
|
|
643
|
+
telemetry pipeline when nothing had been installed.
|
|
644
|
+
|
|
645
|
+
`register()` now returns what it wired and the registry reports that instead of
|
|
646
|
+
asserting a single outcome for all seven. A vendor that is detected but cannot
|
|
647
|
+
be wired says so too, rather than being logged as instrumented.
|
|
648
|
+
- 7f2bce4: Test-only: the MCP token-store fixtures create their temporary directories atomically.
|
|
649
|
+
|
|
650
|
+
CodeQL reported an insecure temporary file at high severity, and the report was right. The
|
|
651
|
+
directories were built from a predictable name — `theokit-mcp-tokens-${hrtime}` under a
|
|
652
|
+
world-writable `/tmp` — and one of them was created world-writable and populated afterwards. On a
|
|
653
|
+
shared machine another local user can predict the path, win the race to create it, and plant a file
|
|
654
|
+
the test is about to trust; the restrictive mode passed to `mkdirSync` arrives after the name has
|
|
655
|
+
already been claimed.
|
|
656
|
+
|
|
657
|
+
`mkdtempSync` creates with a random suffix and mode 0700 in one atomic step. The one fixture whose
|
|
658
|
+
loose modes ARE the subject — the case proving the gate refuses a world-writable store — creates
|
|
659
|
+
restricted and loosens with `chmod`, so the state under test is identical and the window is closed.
|
|
660
|
+
|
|
661
|
+
No production code is affected and no assertion changed.
|
|
662
|
+
- edfa59c: The "no transport" error no longer tells you to install a package that cannot exist.
|
|
663
|
+
|
|
664
|
+
When a provider declares an `apiMode` the SDK has no transport for, the thrown `ConfigurationError`
|
|
665
|
+
advised: *"Install a third-party transport plugin (`@theokit-transport-{apiMode}`)"*. There is no
|
|
666
|
+
plugin mechanism to install into — `registerTransport` and `transportRegistry` appear nowhere in the
|
|
667
|
+
package, and the only other mention of `theokit-transport` was a docblock describing that very
|
|
668
|
+
message. Someone could publish the package; nothing would load it.
|
|
669
|
+
|
|
670
|
+
The message now says transports are a built-in, closed set, and names all four of them —
|
|
671
|
+
`chat_completions`, `anthropic_messages`, `bedrock_anthropic`, `responses_api` — instead of two. The
|
|
672
|
+
`transport_unavailable` code is unchanged, so anything branching on `code` is unaffected.
|
|
673
|
+
- e0a1ab9: Three public failure paths now carry a type and a code instead of a sentence.
|
|
674
|
+
|
|
675
|
+
`normalizeSchema` threw bare `Error` for both of its failures — a missing
|
|
676
|
+
`@valibot/to-json-schema` peer and an unsupported schema — so a caller could
|
|
677
|
+
branch on nothing but the message. Both are `ConfigurationError` now, with codes
|
|
678
|
+
`valibot_converter_missing` and `unsupported_schema`. It also detects the missing
|
|
679
|
+
peer from `err.code === "ERR_MODULE_NOT_FOUND"` before falling back to matching
|
|
680
|
+
the message text.
|
|
681
|
+
|
|
682
|
+
Resuming an agent whose persisted workspace path exists but is a file now says
|
|
683
|
+
so, instead of reporting it as "missing or inaccessible".
|
|
684
|
+
|
|
685
|
+
Subscription error frames carry the server error's own `code` over the wire, and
|
|
686
|
+
the WebSocket client prefers it over its blanket `ws_server_error`. A caller can
|
|
687
|
+
tell an invalid input from a disconnect without parsing English.
|
|
688
|
+
- edfa59c: Workflow errors now carry `code` and `isRetryable`, so the SDK's own retry helper can see them.
|
|
689
|
+
|
|
690
|
+
Eleven public workflow error classes extended plain `Error`. `isTransientError` is
|
|
691
|
+
`err instanceof TheokitAgentError && err.isRetryable === true`, and it is the default predicate of
|
|
692
|
+
`Retry.create` — so a class outside the hierarchy is permanent *by contract*, whatever it actually
|
|
693
|
+
represents. Wrapping `workflow.run()` in the SDK's own retry helper therefore got `false` for every
|
|
694
|
+
workflow failure, including `WorkflowAlreadyRunningError`, which is precisely the
|
|
695
|
+
try-again-in-a-moment condition.
|
|
696
|
+
|
|
697
|
+
They now extend `TheokitAgentError`, each with a stable `code`:
|
|
698
|
+
|
|
699
|
+
| code | retryable |
|
|
700
|
+
|---|---|
|
|
701
|
+
| `workflow_already_running` | **yes** — another run holds the single-flight lock |
|
|
702
|
+
| `workflow_duplicate_step_id`, `workflow_input_invalid`, `workflow_output_invalid`, `workflow_state_invalid`, `workflow_nested_failed`, `workflow_snapshot_not_found`, `workflow_max_iterations_exceeded`, `workflow_not_serializable`, `workflow_resume_step_not_found`, `workflow_compensate_not_implemented` | no |
|
|
703
|
+
|
|
704
|
+
Source-compatible: `TheokitAgentError extends Error`, so `instanceof Error` and `err.name` are
|
|
705
|
+
unchanged, and every existing field (`stepId`, `workflowName`, `detail`, …) stays where it was.
|
|
706
|
+
|
|
707
|
+
`WorkflowParallelError` is deliberately unchanged — it extends `AggregateError`, and the standard
|
|
708
|
+
`errors` array is why callers catch it. It stays outside the hierarchy, and therefore stays
|
|
709
|
+
non-retryable; inspect `err.errors` and decide per branch.
|
|
710
|
+
|
|
3
711
|
## 4.63.4-next.0
|
|
4
712
|
|
|
5
713
|
### Patch Changes
|