@theokit/sdk 4.53.1 → 4.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1184 -0
- package/README.md +9 -4
- package/dist/a2a/agent-mailbox.d.cts +27 -0
- package/dist/a2a/agent-mailbox.d.ts +27 -0
- package/dist/a2a/index.cjs +9 -4
- package/dist/a2a/index.cjs.map +1 -1
- package/dist/a2a/index.js +7 -2
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/message-bus.d.cts +39 -0
- package/dist/a2a/message-bus.d.ts +39 -0
- package/dist/a2a/subagent.d.cts +68 -7
- package/dist/a2a/subagent.d.ts +68 -7
- package/dist/a2a/types.d.cts +26 -0
- package/dist/a2a/types.d.ts +26 -0
- package/dist/{agent-B9HXlwID.d.ts → agent-D3Xr_-6Z.d.cts} +245 -850
- package/dist/{agent-nLqeXKIX.d.cts → agent-DIu6FooJ.d.ts} +245 -850
- package/dist/agent-HDEVVUBS.js +52 -0
- package/dist/{agent-FFVV4U5N.js.map → agent-HDEVVUBS.js.map} +1 -1
- package/dist/agent-R2HOJFZJ.cjs +61 -0
- package/dist/{agent-YLAHVHEH.cjs.map → agent-R2HOJFZJ.cjs.map} +1 -1
- package/dist/agent-builder.d.ts +19 -0
- package/dist/agent-session-store-P6V3FINW.js +7 -0
- package/dist/{agent-session-store-TNCGL5RN.js.map → agent-session-store-P6V3FINW.js.map} +1 -1
- package/dist/agent-session-store-ZJ3JSRS4.cjs +24 -0
- package/dist/{agent-session-store-DUGBAX5V.cjs.map → agent-session-store-ZJ3JSRS4.cjs.map} +1 -1
- package/dist/agent.d.ts +9 -6
- package/dist/auth/index.cjs +52 -35
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.js +26 -9
- package/dist/auth/index.js.map +1 -1
- package/dist/{batch-UPKN4SG6.js → batch-2TGJMNCJ.js} +14 -13
- package/dist/batch-2TGJMNCJ.js.map +1 -0
- package/dist/{batch-ZEFN5SO7.cjs → batch-ND32UKZS.cjs} +31 -30
- package/dist/batch-ND32UKZS.cjs.map +1 -0
- package/dist/{chunk-TTJ54H3E.cjs → chunk-2ADR2GSO.cjs} +8 -8
- package/dist/chunk-2ADR2GSO.cjs.map +1 -0
- package/dist/chunk-2BDH744Z.js +15 -0
- package/dist/chunk-2BDH744Z.js.map +1 -0
- package/dist/{chunk-VGPXHHF3.cjs → chunk-2C72DXQF.cjs} +63 -27
- package/dist/chunk-2C72DXQF.cjs.map +1 -0
- package/dist/{chunk-4Q4K4WB5.js → chunk-2D34UTDC.js} +20 -4
- package/dist/chunk-2D34UTDC.js.map +1 -0
- package/dist/{chunk-UFIXH26P.js → chunk-2QKTVKH3.js} +4 -4
- package/dist/{chunk-UFIXH26P.js.map → chunk-2QKTVKH3.js.map} +1 -1
- package/dist/{chunk-GBBDINFK.js → chunk-3E77SX4H.js} +4 -4
- package/dist/{chunk-GBBDINFK.js.map → chunk-3E77SX4H.js.map} +1 -1
- package/dist/{chunk-VYHJZVL5.cjs → chunk-3EE6LVWT.cjs} +2 -2
- package/dist/chunk-3EE6LVWT.cjs.map +1 -0
- package/dist/{chunk-5NBUH3NO.js → chunk-3OR54XG4.js} +2 -2
- package/dist/{chunk-C6Y6CWYD.cjs.map → chunk-3OR54XG4.js.map} +1 -1
- package/dist/{chunk-ZN2DGEY3.cjs → chunk-3YJNUKYN.cjs} +15 -15
- package/dist/{chunk-ZN2DGEY3.cjs.map → chunk-3YJNUKYN.cjs.map} +1 -1
- package/dist/{chunk-POWRZSK4.js → chunk-44JAAH4X.js} +3 -3
- package/dist/{chunk-POWRZSK4.js.map → chunk-44JAAH4X.js.map} +1 -1
- package/dist/{chunk-SSDD676S.js → chunk-44MBDIHG.js} +4 -4
- package/dist/{chunk-SSDD676S.js.map → chunk-44MBDIHG.js.map} +1 -1
- package/dist/{chunk-OY7O3Q6R.js → chunk-4ERPXIVB.js} +5 -5
- package/dist/{chunk-OY7O3Q6R.js.map → chunk-4ERPXIVB.js.map} +1 -1
- package/dist/{chunk-3BK6YR5P.cjs → chunk-4I55V454.cjs} +4 -4
- package/dist/{chunk-3BK6YR5P.cjs.map → chunk-4I55V454.cjs.map} +1 -1
- package/dist/{chunk-B4YA6BRS.cjs → chunk-4O5TGQBW.cjs} +30 -7
- package/dist/chunk-4O5TGQBW.cjs.map +1 -0
- package/dist/{chunk-4JBHSLQO.cjs → chunk-4OTIXDMU.cjs} +2 -2
- package/dist/{chunk-4JBHSLQO.cjs.map → chunk-4OTIXDMU.cjs.map} +1 -1
- package/dist/{chunk-C6Y6CWYD.cjs → chunk-52NKC5HT.cjs} +2 -2
- package/dist/chunk-52NKC5HT.cjs.map +1 -0
- package/dist/{chunk-665SFFFR.cjs → chunk-53CBTBWO.cjs} +11 -11
- package/dist/{chunk-665SFFFR.cjs.map → chunk-53CBTBWO.cjs.map} +1 -1
- package/dist/{chunk-FFM3SJTQ.js → chunk-5JLFFPCH.js} +4 -4
- package/dist/{chunk-FFM3SJTQ.js.map → chunk-5JLFFPCH.js.map} +1 -1
- package/dist/{chunk-34XOCZJO.js → chunk-5PHVENFV.js} +3 -3
- package/dist/chunk-5PHVENFV.js.map +1 -0
- package/dist/{chunk-BDTVFIPB.cjs → chunk-5UOVYM3P.cjs} +36 -31
- package/dist/chunk-5UOVYM3P.cjs.map +1 -0
- package/dist/{chunk-VF7X6HDR.cjs → chunk-5USCYPPI.cjs} +15 -15
- package/dist/{chunk-VF7X6HDR.cjs.map → chunk-5USCYPPI.cjs.map} +1 -1
- package/dist/chunk-6HTXPPHK.cjs +18 -0
- package/dist/chunk-6HTXPPHK.cjs.map +1 -0
- package/dist/{chunk-D24WJWN2.js → chunk-AEOZTXVW.js} +3 -3
- package/dist/{chunk-D24WJWN2.js.map → chunk-AEOZTXVW.js.map} +1 -1
- package/dist/{chunk-DGOG5NXR.js → chunk-AG5JPQIY.js} +3 -3
- package/dist/{chunk-DGOG5NXR.js.map → chunk-AG5JPQIY.js.map} +1 -1
- package/dist/{chunk-BFYGJGC5.js → chunk-AQLGBKNT.js} +3 -3
- package/dist/chunk-AQLGBKNT.js.map +1 -0
- package/dist/{chunk-7W7ZWMLQ.js → chunk-AWO27VRZ.js} +3 -3
- package/dist/chunk-AWO27VRZ.js.map +1 -0
- package/dist/{chunk-VYCKUKPA.cjs → chunk-B2J4ZMZL.cjs} +3 -2
- package/dist/chunk-B2J4ZMZL.cjs.map +1 -0
- package/dist/{chunk-BERBYXFH.js → chunk-BMAZLQQ4.js} +3 -3
- package/dist/{chunk-BERBYXFH.js.map → chunk-BMAZLQQ4.js.map} +1 -1
- package/dist/{chunk-5YKNEMXR.cjs → chunk-BVZW2B5V.cjs} +4 -4
- package/dist/chunk-BVZW2B5V.cjs.map +1 -0
- package/dist/{chunk-MSFLYJDY.js → chunk-CQ2TQ32Y.js} +4 -4
- package/dist/chunk-CQ2TQ32Y.js.map +1 -0
- package/dist/{chunk-C5DEO6OI.cjs → chunk-CQGYNZ3K.cjs} +4 -4
- package/dist/{chunk-C5DEO6OI.cjs.map → chunk-CQGYNZ3K.cjs.map} +1 -1
- package/dist/{chunk-D75S2X6I.cjs → chunk-CTCGWIUD.cjs} +5 -5
- package/dist/{chunk-D75S2X6I.cjs.map → chunk-CTCGWIUD.cjs.map} +1 -1
- package/dist/{chunk-NZL4BNFQ.js → chunk-CV7XMBHP.js} +4 -4
- package/dist/chunk-CV7XMBHP.js.map +1 -0
- package/dist/{chunk-SEL2ZQMT.js → chunk-DAPSQZT4.js} +15 -10
- package/dist/chunk-DAPSQZT4.js.map +1 -0
- package/dist/{chunk-SVO5WPZX.cjs → chunk-DQKERTND.cjs} +11 -11
- package/dist/{chunk-SVO5WPZX.cjs.map → chunk-DQKERTND.cjs.map} +1 -1
- package/dist/{chunk-N5CR3TJZ.js → chunk-DZBSJX6J.js} +4 -4
- package/dist/{chunk-N5CR3TJZ.js.map → chunk-DZBSJX6J.js.map} +1 -1
- package/dist/{chunk-RAHSWE5C.cjs → chunk-EI2Q7SJ5.cjs} +12 -12
- package/dist/chunk-EI2Q7SJ5.cjs.map +1 -0
- package/dist/{chunk-UCFONJBG.js → chunk-EPSICJLZ.js} +2 -2
- package/dist/{chunk-UCFONJBG.js.map → chunk-EPSICJLZ.js.map} +1 -1
- package/dist/{chunk-3X6PM7DU.cjs → chunk-F3YZMOAU.cjs} +8 -8
- package/dist/{chunk-3X6PM7DU.cjs.map → chunk-F3YZMOAU.cjs.map} +1 -1
- package/dist/{chunk-F77UENR6.cjs → chunk-F5WMX4EA.cjs} +586 -398
- package/dist/chunk-F5WMX4EA.cjs.map +1 -0
- package/dist/{chunk-HE4BIAOS.js → chunk-F7AQV62G.js} +5 -4
- package/dist/chunk-F7AQV62G.js.map +1 -0
- package/dist/{chunk-2RW7K6FN.cjs → chunk-GHX4P3V2.cjs} +2 -2
- package/dist/chunk-GHX4P3V2.cjs.map +1 -0
- package/dist/{chunk-B6HOIWQ6.js → chunk-GJ6RK75E.js} +5 -5
- package/dist/chunk-GJ6RK75E.js.map +1 -0
- package/dist/{chunk-FOXKFTVZ.cjs → chunk-GNT35C5U.cjs} +13 -13
- package/dist/chunk-GNT35C5U.cjs.map +1 -0
- package/dist/{chunk-4NAKHID5.js → chunk-GTKFV7O5.js} +2 -2
- package/dist/chunk-GTKFV7O5.js.map +1 -0
- package/dist/{chunk-ELKO4ZLR.cjs → chunk-GWC3HADL.cjs} +4 -4
- package/dist/{chunk-ELKO4ZLR.cjs.map → chunk-GWC3HADL.cjs.map} +1 -1
- package/dist/{chunk-OXNYIMZZ.js → chunk-H73MEMQB.js} +2 -2
- package/dist/chunk-H73MEMQB.js.map +1 -0
- package/dist/{chunk-E7FJOO4G.cjs → chunk-HJBMA5MB.cjs} +11 -11
- package/dist/{chunk-E7FJOO4G.cjs.map → chunk-HJBMA5MB.cjs.map} +1 -1
- package/dist/{chunk-2FYEVT2B.cjs → chunk-HLPSLDGL.cjs} +275 -160
- package/dist/chunk-HLPSLDGL.cjs.map +1 -0
- package/dist/{chunk-VW6M4B3Z.cjs → chunk-HY57ULY2.cjs} +5 -5
- package/dist/{chunk-VW6M4B3Z.cjs.map → chunk-HY57ULY2.cjs.map} +1 -1
- package/dist/{chunk-CAH3G4IS.js → chunk-HY66GLM6.js} +2 -2
- package/dist/chunk-HY66GLM6.js.map +1 -0
- package/dist/{chunk-G3JWXOGY.js → chunk-I5BE5M5L.js} +310 -122
- package/dist/chunk-I5BE5M5L.js.map +1 -0
- package/dist/{chunk-C4H6PB5J.cjs → chunk-I6TGFUCO.cjs} +4 -4
- package/dist/{chunk-C4H6PB5J.cjs.map → chunk-I6TGFUCO.cjs.map} +1 -1
- package/dist/{chunk-U4UJHOSH.js → chunk-IDCKSLYH.js} +3 -3
- package/dist/{chunk-U4UJHOSH.js.map → chunk-IDCKSLYH.js.map} +1 -1
- package/dist/{chunk-WQ53UQL4.cjs → chunk-ILCGLTSA.cjs} +4 -4
- package/dist/{chunk-WQ53UQL4.cjs.map → chunk-ILCGLTSA.cjs.map} +1 -1
- package/dist/{chunk-QBTVATSF.cjs → chunk-ITSSOVOB.cjs} +44 -47
- package/dist/chunk-ITSSOVOB.cjs.map +1 -0
- package/dist/{chunk-V6HWJQQV.js → chunk-IVNNSANC.js} +27 -30
- package/dist/chunk-IVNNSANC.js.map +1 -0
- package/dist/{chunk-SZHU7A5B.cjs → chunk-IWBGCBR6.cjs} +4 -4
- package/dist/{chunk-SZHU7A5B.cjs.map → chunk-IWBGCBR6.cjs.map} +1 -1
- package/dist/{chunk-Q4RESANI.cjs → chunk-J24VJOH3.cjs} +20 -4
- package/dist/chunk-J24VJOH3.cjs.map +1 -0
- package/dist/{chunk-Y4AXQOT4.cjs → chunk-JHPGF3FP.cjs} +8 -8
- package/dist/{chunk-Y4AXQOT4.cjs.map → chunk-JHPGF3FP.cjs.map} +1 -1
- package/dist/{chunk-BM6N4KHO.cjs → chunk-JTB5Q42C.cjs} +6 -22
- package/dist/chunk-JTB5Q42C.cjs.map +1 -0
- package/dist/{chunk-LPVIRJVF.cjs → chunk-K3FW2XZD.cjs} +9 -9
- package/dist/{chunk-LPVIRJVF.cjs.map → chunk-K3FW2XZD.cjs.map} +1 -1
- package/dist/{chunk-LS3LMQ23.js → chunk-MVAPK2BX.js} +162 -49
- package/dist/chunk-MVAPK2BX.js.map +1 -0
- package/dist/{chunk-XPR366DL.cjs → chunk-NGESVVJN.cjs} +17 -17
- package/dist/chunk-NGESVVJN.cjs.map +1 -0
- package/dist/{chunk-VUKQL3L2.cjs → chunk-NIRE5CNO.cjs} +20 -13
- package/dist/chunk-NIRE5CNO.cjs.map +1 -0
- package/dist/{chunk-VC5ABJXC.js → chunk-NLTVXLGT.js} +3 -3
- package/dist/{chunk-VC5ABJXC.js.map → chunk-NLTVXLGT.js.map} +1 -1
- package/dist/chunk-NUKRL3I6.cjs +23 -0
- package/dist/chunk-NUKRL3I6.cjs.map +1 -0
- package/dist/{chunk-R5YZACGK.js → chunk-OC4NTGMN.js} +3 -3
- package/dist/{chunk-R5YZACGK.js.map → chunk-OC4NTGMN.js.map} +1 -1
- package/dist/{chunk-GOVJO4YE.js → chunk-OHBIUXKM.js} +6 -6
- package/dist/chunk-OHBIUXKM.js.map +1 -0
- package/dist/{chunk-FPYT5WZP.cjs → chunk-P6A3M6VD.cjs} +10 -10
- package/dist/{chunk-FPYT5WZP.cjs.map → chunk-P6A3M6VD.cjs.map} +1 -1
- package/dist/{chunk-OKLYRPKL.cjs → chunk-Q47R5E2X.cjs} +8 -8
- package/dist/chunk-Q47R5E2X.cjs.map +1 -0
- package/dist/{chunk-HSQ5Q3I5.js → chunk-Q4CMI2LP.js} +12 -5
- package/dist/chunk-Q4CMI2LP.js.map +1 -0
- package/dist/{chunk-2XLKLVVR.js → chunk-Q5EWJPRY.js} +2 -2
- package/dist/chunk-Q5EWJPRY.js.map +1 -0
- package/dist/{chunk-SK4QLUBK.js → chunk-QARJGQSA.js} +16 -7
- package/dist/chunk-QARJGQSA.js.map +1 -0
- package/dist/{chunk-CZ2GKKYL.cjs → chunk-QDED6YO6.cjs} +5 -5
- package/dist/{chunk-CZ2GKKYL.cjs.map → chunk-QDED6YO6.cjs.map} +1 -1
- package/dist/{chunk-VK7MAV65.cjs → chunk-QKLOP4VC.cjs} +2 -2
- package/dist/{chunk-VK7MAV65.cjs.map → chunk-QKLOP4VC.cjs.map} +1 -1
- package/dist/{chunk-FIOCJYLA.js → chunk-QRSUA2CV.js} +3 -3
- package/dist/{chunk-FIOCJYLA.js.map → chunk-QRSUA2CV.js.map} +1 -1
- package/dist/{chunk-ZT57WTUJ.cjs → chunk-R3UPQFKK.cjs} +21 -12
- package/dist/chunk-R3UPQFKK.cjs.map +1 -0
- package/dist/{chunk-X2FR4OIT.js → chunk-R7WIIPUR.js} +2 -2
- package/dist/chunk-R7WIIPUR.js.map +1 -0
- package/dist/{chunk-RP5HQVLD.js → chunk-RNB4APBZ.js} +30 -7
- package/dist/chunk-RNB4APBZ.js.map +1 -0
- package/dist/{chunk-GD63JPGC.cjs → chunk-ROYPRJH4.cjs} +9 -9
- package/dist/{chunk-GD63JPGC.cjs.map → chunk-ROYPRJH4.cjs.map} +1 -1
- package/dist/{chunk-V26QVGUG.js → chunk-RUDY2GTT.js} +59 -23
- package/dist/chunk-RUDY2GTT.js.map +1 -0
- package/dist/{chunk-JIQRXKTA.cjs → chunk-SKXBJ2NU.cjs} +7 -7
- package/dist/chunk-SKXBJ2NU.cjs.map +1 -0
- package/dist/{chunk-XROIW6BH.js → chunk-SUKXXLWD.js} +6 -6
- package/dist/chunk-SUKXXLWD.js.map +1 -0
- package/dist/{chunk-LTSTGCL6.js → chunk-T73NA43R.js} +3 -3
- package/dist/{chunk-LTSTGCL6.js.map → chunk-T73NA43R.js.map} +1 -1
- package/dist/chunk-T7O6K6PX.js +20 -0
- package/dist/chunk-T7O6K6PX.js.map +1 -0
- package/dist/{chunk-5F5NWKPN.js → chunk-T7XEKOVW.js} +5 -20
- package/dist/chunk-T7XEKOVW.js.map +1 -0
- package/dist/{chunk-HAWE74GQ.cjs → chunk-U2AC6JUP.cjs} +8 -8
- package/dist/chunk-U2AC6JUP.cjs.map +1 -0
- package/dist/{chunk-3WVMJY7F.js → chunk-UC3HT2S4.js} +3 -3
- package/dist/{chunk-3WVMJY7F.js.map → chunk-UC3HT2S4.js.map} +1 -1
- package/dist/{chunk-PBZ7HMBP.js → chunk-UPRJR6IP.js} +4 -4
- package/dist/chunk-UPRJR6IP.js.map +1 -0
- package/dist/{chunk-3V7UJLQT.js → chunk-UQGQFBRL.js} +3 -3
- package/dist/chunk-UQGQFBRL.js.map +1 -0
- package/dist/{chunk-2D43RD5D.cjs → chunk-V2UUGUY4.cjs} +27 -27
- package/dist/chunk-V2UUGUY4.cjs.map +1 -0
- package/dist/{chunk-6AZDM6LK.js → chunk-VF7EWVDG.js} +3 -3
- package/dist/{chunk-6AZDM6LK.js.map → chunk-VF7EWVDG.js.map} +1 -1
- package/dist/{chunk-PNVDQL5Y.cjs → chunk-VTYY7XL5.cjs} +2 -2
- package/dist/chunk-VTYY7XL5.cjs.map +1 -0
- package/dist/{chunk-Y4I4EQFK.js → chunk-WKRSH2VR.js} +3 -3
- package/dist/{chunk-Y4I4EQFK.js.map → chunk-WKRSH2VR.js.map} +1 -1
- package/dist/{chunk-4QEC4CCS.js → chunk-WTMU7J4U.js} +2 -2
- package/dist/{chunk-4QEC4CCS.js.map → chunk-WTMU7J4U.js.map} +1 -1
- package/dist/{chunk-KSWHTR54.js → chunk-XN7NOENA.js} +6 -6
- package/dist/chunk-XN7NOENA.js.map +1 -0
- package/dist/{chunk-ADLLFY3H.cjs → chunk-XSX2UU6Y.cjs} +10 -9
- package/dist/chunk-XSX2UU6Y.cjs.map +1 -0
- package/dist/{chunk-LD4MOBFX.js → chunk-XV4IZNV4.js} +9 -9
- package/dist/chunk-XV4IZNV4.js.map +1 -0
- package/dist/{chunk-EZ2YEF4F.cjs → chunk-XWL6O3SW.cjs} +4 -4
- package/dist/chunk-XWL6O3SW.cjs.map +1 -0
- package/dist/{chunk-PGP7IOJ2.js → chunk-YMA4S2WO.js} +4 -4
- package/dist/{chunk-PGP7IOJ2.js.map → chunk-YMA4S2WO.js.map} +1 -1
- package/dist/{chunk-OUOXM36O.cjs → chunk-YPJ5NH5N.cjs} +11 -11
- package/dist/chunk-YPJ5NH5N.cjs.map +1 -0
- package/dist/{chunk-YLQQX5W2.cjs → chunk-ZF2LDKQQ.cjs} +2 -2
- package/dist/chunk-ZF2LDKQQ.cjs.map +1 -0
- package/dist/{chunk-L5YO6PWL.cjs → chunk-ZNW6V4Y6.cjs} +2 -2
- package/dist/chunk-ZNW6V4Y6.cjs.map +1 -0
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/theokit-client.d.cts +36 -0
- package/dist/client/theokit-client.d.ts +36 -0
- package/dist/client/types.d.cts +30 -0
- package/dist/client/types.d.ts +30 -0
- package/dist/compact-session-FUJDVF7B.js +22 -0
- package/dist/{compact-session-4MNKNMO2.js.map → compact-session-FUJDVF7B.js.map} +1 -1
- package/dist/compact-session-LEWF554G.cjs +59 -0
- package/dist/{compact-session-EPFBQ46Z.cjs.map → compact-session-LEWF554G.cjs.map} +1 -1
- package/dist/compaction.cjs +17 -16
- package/dist/compaction.d.cts +13 -13
- package/dist/compaction.d.ts +13 -13
- package/dist/compaction.js +4 -3
- package/dist/concurrency.cjs +7 -6
- package/dist/concurrency.cjs.map +1 -1
- package/dist/concurrency.js +5 -4
- package/dist/concurrency.js.map +1 -1
- package/dist/context/index.cjs +7 -7
- package/dist/context/index.js +3 -3
- package/dist/context-FDOON2DB.js +6 -0
- package/dist/{context-ENXZNF6J.js.map → context-FDOON2DB.js.map} +1 -1
- package/dist/context-VMIE4BMD.cjs +23 -0
- package/dist/{context-7USNN6LP.cjs.map → context-VMIE4BMD.cjs.map} +1 -1
- package/dist/cron-BcWmzWzT.d.cts +240 -0
- package/dist/cron-De6hzWCF.d.ts +240 -0
- package/dist/cron.cjs +43 -41
- package/dist/cron.d.cts +5 -3
- package/dist/cron.d.ts +5 -3
- package/dist/cron.js +42 -40
- package/dist/define-tool.d.ts +14 -6
- package/dist/{errors-BSoXcl3F.d.cts → errors-BgJH9PHi.d.cts} +39 -24
- package/dist/{errors-CHllybaU.d.ts → errors-C5fJUqLk.d.ts} +39 -24
- package/dist/errors.cjs +22 -21
- package/dist/errors.d.cts +2 -2
- package/dist/errors.d.ts +2 -2
- package/dist/errors.js +3 -2
- package/dist/eval.cjs +61 -58
- package/dist/eval.cjs.map +1 -1
- package/dist/eval.d.cts +38 -0
- package/dist/eval.d.ts +38 -0
- package/dist/eval.js +51 -48
- package/dist/eval.js.map +1 -1
- package/dist/event-bus.d.ts +16 -0
- package/dist/{executor-2Z6XJJJG.js → executor-BMEHFOXZ.js} +8 -7
- package/dist/executor-BMEHFOXZ.js.map +1 -0
- package/dist/{executor-2Z3LGG3I.cjs → executor-ZERJ3DGN.cjs} +25 -24
- package/dist/executor-ZERJ3DGN.cjs.map +1 -0
- package/dist/filesystem/index.cjs +8 -7
- package/dist/filesystem/index.cjs.map +1 -1
- package/dist/filesystem/index.js +4 -3
- package/dist/filesystem/index.js.map +1 -1
- package/dist/filesystem/local-filesystem.d.cts +18 -0
- package/dist/filesystem/local-filesystem.d.ts +18 -0
- package/dist/filesystem/types.d.cts +12 -0
- package/dist/filesystem/types.d.ts +12 -0
- package/dist/fs-session-store-3MOJQGP2.cjs +20 -0
- package/dist/{fs-session-store-VVY2AHWG.cjs.map → fs-session-store-3MOJQGP2.cjs.map} +1 -1
- package/dist/fs-session-store-IN7JTTXD.js +11 -0
- package/dist/{fs-session-store-R5FD3EN6.js.map → fs-session-store-IN7JTTXD.js.map} +1 -1
- package/dist/generate-object-N5MDZUJI.js +8 -0
- package/dist/{generate-object-WQRCXFD2.js.map → generate-object-N5MDZUJI.js.map} +1 -1
- package/dist/generate-object-PGSP5U7N.cjs +21 -0
- package/dist/{generate-object-AVXOJK2I.cjs.map → generate-object-PGSP5U7N.cjs.map} +1 -1
- package/dist/generate-object.d.ts +20 -0
- package/dist/index-manager-NG5YENWO.cjs +22 -0
- package/dist/{index-manager-VRU3A2YL.cjs.map → index-manager-NG5YENWO.cjs.map} +1 -1
- package/dist/index-manager-ZMRJ6ZII.js +13 -0
- package/dist/{index-manager-WS7TVKUW.js.map → index-manager-ZMRJ6ZII.js.map} +1 -1
- package/dist/index.cjs +169 -155
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +702 -54
- package/dist/index.d.ts +702 -54
- package/dist/index.js +61 -58
- package/dist/index.js.map +1 -1
- package/dist/{inject-session-GMBMJVNZ.js → inject-session-BJMJH5BX.js} +9 -8
- package/dist/inject-session-BJMJH5BX.js.map +1 -0
- package/dist/inject-session-WQGGMCQY.cjs +29 -0
- package/dist/inject-session-WQGGMCQY.cjs.map +1 -0
- package/dist/internal/auth/auth-types.d.ts +83 -1
- package/dist/internal/auth/credential-store.d.ts +34 -6
- package/dist/internal/auth/oauth-device.d.ts +0 -1
- package/dist/internal/auth/resolve-credential.d.ts +40 -0
- package/dist/internal/budget/tracker/budget.d.ts +12 -14
- package/dist/internal/budget/usage-accumulator.d.ts +15 -0
- package/dist/internal/llm/anthropic-shared.d.ts +8 -4
- package/dist/internal/llm/model-identifier.d.ts +26 -0
- package/dist/internal/llm/openai.d.ts +8 -0
- package/dist/internal/llm/prompt-cache-key.d.ts +1 -0
- package/dist/internal/llm/responses.d.ts +67 -1
- package/dist/internal/llm/router.d.ts +8 -0
- package/dist/internal/llm/types.d.ts +27 -1
- package/dist/internal/local-agent/real-local-run-provider.d.ts +8 -3
- package/dist/internal/local-agent/real-local-run-tools.d.ts +23 -4
- package/dist/internal/mcp/oauth.d.ts +5 -0
- package/dist/internal/mcp/token-storage.d.ts +34 -0
- package/dist/internal/memory/adapters/index.cjs +12 -11
- package/dist/internal/memory/adapters/index.d.cts +3 -1
- package/dist/internal/memory/adapters/index.d.ts +3 -1
- package/dist/internal/memory/adapters/index.js +9 -8
- package/dist/internal/memory/adapters/openai-compatible.d.cts +45 -0
- package/dist/internal/memory/adapters/openai-compatible.d.ts +45 -0
- package/dist/internal/memory/embedding-cache.d.ts +42 -1
- package/dist/internal/memory/escape-like-pattern.d.ts +22 -0
- package/dist/internal/memory/sqlite-vec-loader.d.ts +1 -3
- package/dist/internal/memory/storage/markdown-store.d.ts +0 -5
- package/dist/internal/persistence/cwd-mutex.d.cts +34 -0
- package/dist/internal/persistence/cwd-mutex.d.ts +34 -0
- package/dist/internal/persistence/exclusive-create.d.cts +31 -0
- package/dist/internal/persistence/exclusive-create.d.ts +31 -0
- package/dist/internal/persistence/file-lock.d.cts +28 -0
- package/dist/internal/persistence/file-lock.d.ts +28 -0
- package/dist/internal/persistence/fs-session-store.d.cts +3 -0
- package/dist/internal/persistence/fs-session-store.d.ts +3 -0
- package/dist/internal/persistence/fts5-sanitize.d.cts +20 -0
- package/dist/internal/persistence/fts5-sanitize.d.ts +20 -0
- package/dist/internal/persistence/index.cjs +40 -39
- package/dist/internal/persistence/index.cjs.map +1 -1
- package/dist/internal/persistence/index.d.cts +6 -1
- package/dist/internal/persistence/index.d.ts +6 -1
- package/dist/internal/persistence/index.js +9 -8
- package/dist/internal/persistence/index.js.map +1 -1
- package/dist/internal/persistence/paths.d.cts +54 -1
- package/dist/internal/persistence/paths.d.ts +54 -1
- package/dist/internal/persistence/persistence-schema.d.cts +9 -1
- package/dist/internal/persistence/persistence-schema.d.ts +9 -1
- package/dist/internal/persistence/schema-version.d.cts +215 -1
- package/dist/internal/persistence/schema-version.d.ts +215 -1
- package/dist/internal/persistence/session-writer.d.cts +7 -7
- package/dist/internal/persistence/session-writer.d.ts +7 -7
- package/dist/internal/persistence/sqlite-cas.d.cts +37 -1
- package/dist/internal/persistence/sqlite-cas.d.ts +37 -1
- package/dist/internal/persistence/sqlite-open.d.cts +14 -0
- package/dist/internal/persistence/sqlite-open.d.ts +14 -0
- package/dist/internal/persistence/sqlite-wal.d.cts +45 -0
- package/dist/internal/persistence/sqlite-wal.d.ts +45 -0
- package/dist/internal/persistence/transcript-ops.d.cts +7 -1
- package/dist/internal/persistence/transcript-ops.d.ts +7 -1
- package/dist/internal/plugins/types.d.cts +1 -1
- package/dist/internal/plugins/types.d.ts +1 -1
- package/dist/internal/providers/builtin/openai-chatgpt.d.ts +12 -0
- package/dist/internal/providers/catalog-loader.d.ts +8 -0
- package/dist/internal/providers/catalog-schema.d.ts +55 -0
- package/dist/internal/providers/catalog-source-models-dev.d.ts +36 -0
- package/dist/internal/runtime/concurrency/delegation-depth.d.ts +27 -0
- package/dist/internal/runtime/concurrency/subagent-credentials.d.ts +33 -1
- package/dist/internal/runtime/context/context-discovery-runner.d.ts +44 -0
- package/dist/internal/runtime/context/context-discovery.d.ts +58 -0
- package/dist/internal/runtime/context/context-rules-frontmatter.d.ts +70 -1
- package/dist/internal/runtime/fixtures/fixture-mode.d.ts +15 -1
- package/dist/internal/runtime/lifecycle/post-run-lifecycle.d.ts +15 -0
- package/dist/internal/runtime/registry/agent-registry-store.d.ts +12 -0
- package/dist/internal/runtime/registry/live-agent-registry.d.ts +37 -0
- package/dist/internal/scorers/llm-judge.d.ts +6 -1
- package/dist/internal/security/index.cjs +14 -13
- package/dist/internal/security/index.d.cts +4 -1
- package/dist/internal/security/index.d.ts +4 -1
- package/dist/internal/security/index.js +4 -3
- package/dist/internal/security/path-guard.d.cts +46 -0
- package/dist/internal/security/path-guard.d.ts +46 -0
- package/dist/internal/security/redact.d.cts +71 -0
- package/dist/internal/security/redact.d.ts +71 -0
- package/dist/internal/session/agent-session.d.ts +15 -4
- package/dist/internal/session/session-cache.d.ts +5 -0
- package/dist/internal/task/store.d.ts +91 -5
- package/dist/internal/telemetry/span-names.d.ts +0 -1
- package/dist/internal/telemetry/tracer.d.ts +14 -0
- package/dist/job-queue.d.ts +18 -0
- package/dist/judge-call-DWHAJATE.js +6 -0
- package/dist/{judge-call-MDIPTBJI.js.map → judge-call-DWHAJATE.js.map} +1 -1
- package/dist/judge-call-EGYRC2RE.cjs +23 -0
- package/dist/{judge-call-G5SGV2M2.cjs.map → judge-call-EGYRC2RE.cjs.map} +1 -1
- package/dist/mcp-auth.cjs +41 -25
- package/dist/mcp-auth.cjs.map +1 -1
- package/dist/mcp-auth.js +34 -18
- package/dist/mcp-auth.js.map +1 -1
- package/dist/models.cjs +42 -27
- package/dist/models.cjs.map +1 -1
- package/dist/models.js +25 -10
- package/dist/models.js.map +1 -1
- package/dist/oauth-transaction-store-BT4GLTLK.cjs +36 -0
- package/dist/{oauth-transaction-store-7CKHPQRN.cjs.map → oauth-transaction-store-BT4GLTLK.cjs.map} +1 -1
- package/dist/oauth-transaction-store-W52KVHQ4.js +3 -0
- package/dist/{oauth-transaction-store-W74I6EFD.js.map → oauth-transaction-store-W52KVHQ4.js.map} +1 -1
- package/dist/path-safety.cjs +11 -10
- package/dist/path-safety.js +4 -3
- package/dist/permission-engine.d.ts +55 -0
- package/dist/persistence.cjs +43 -42
- package/dist/persistence.cjs.map +1 -1
- package/dist/persistence.js +13 -12
- package/dist/persistence.js.map +1 -1
- package/dist/project.cjs +9 -8
- package/dist/project.cjs.map +1 -1
- package/dist/project.js +5 -4
- package/dist/project.js.map +1 -1
- package/dist/providers.cjs +23 -0
- package/dist/providers.cjs.map +1 -0
- package/dist/providers.d.cts +29 -0
- package/dist/providers.d.ts +29 -0
- package/dist/providers.js +10 -0
- package/dist/providers.js.map +1 -0
- package/dist/registry-VFKX7WOP.cjs +47 -0
- package/dist/{registry-63ASMXT4.cjs.map → registry-VFKX7WOP.cjs.map} +1 -1
- package/dist/registry-VFP3WWQP.js +10 -0
- package/dist/{registry-O7FJ2MPM.js.map → registry-VFP3WWQP.js.map} +1 -1
- package/dist/retry.cjs +5 -4
- package/dist/retry.js +4 -3
- package/dist/{run-C8FBAC8o.d.cts → run-BYSHf58D.d.cts} +185 -33
- package/dist/{run-C8FBAC8o.d.ts → run-BYSHf58D.d.ts} +185 -33
- package/dist/{run-to-completion-JDPIUKSH.js → run-to-completion-DRO77625.js} +3 -3
- package/dist/{run-to-completion-JDPIUKSH.js.map → run-to-completion-DRO77625.js.map} +1 -1
- package/dist/{run-to-completion-J73I6IY4.cjs → run-to-completion-X4OWM673.cjs} +13 -13
- package/dist/{run-to-completion-J73I6IY4.cjs.map → run-to-completion-X4OWM673.cjs.map} +1 -1
- package/dist/sandbox/bwrap.d.cts +27 -13
- package/dist/sandbox/bwrap.d.ts +27 -13
- package/dist/sandbox/index.cjs +20 -19
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.js +5 -4
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/linux-sandbox.d.cts +72 -0
- package/dist/sandbox/linux-sandbox.d.ts +72 -0
- package/dist/sandbox/local-sandbox.d.cts +41 -0
- package/dist/sandbox/local-sandbox.d.ts +41 -0
- package/dist/sandbox/seccomp.d.cts +6 -0
- package/dist/sandbox/seccomp.d.ts +6 -0
- package/dist/sandbox/types.d.cts +64 -0
- package/dist/sandbox/types.d.ts +64 -0
- package/dist/scorers.d.ts +38 -7
- package/dist/sdk-agent-D8qJVkuV.d.ts +860 -0
- package/dist/sdk-agent-DEoKhA8a.d.cts +860 -0
- package/dist/server/auth/errors.d.cts +1 -1
- package/dist/server/auth/errors.d.ts +1 -1
- package/dist/server/auth/index.cjs +29 -21
- package/dist/server/auth/index.cjs.map +1 -1
- package/dist/server/auth/index.d.cts +25 -15
- package/dist/server/auth/index.d.ts +25 -15
- package/dist/server/auth/index.js +15 -7
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/auth/oauth-transaction-store.d.cts +13 -1
- package/dist/server/auth/oauth-transaction-store.d.ts +13 -1
- package/dist/server/auth/orchestrator.d.cts +1 -1
- package/dist/server/auth/orchestrator.d.ts +1 -1
- package/dist/server/auth/types.d.cts +1 -1
- package/dist/server/auth/types.d.ts +1 -1
- package/dist/server/auth/validate-return-to.d.cts +21 -11
- package/dist/server/auth/validate-return-to.d.ts +21 -11
- package/dist/server/errors-envelope.cjs +15 -14
- package/dist/server/errors-envelope.cjs.map +1 -1
- package/dist/server/errors-envelope.d.cts +4 -4
- package/dist/server/errors-envelope.d.ts +4 -4
- package/dist/server/errors-envelope.js +4 -3
- package/dist/server/errors-envelope.js.map +1 -1
- package/dist/session-transcript-AKDYYGXQ.js +6 -0
- package/dist/{session-transcript-RAKEK76V.js.map → session-transcript-AKDYYGXQ.js.map} +1 -1
- package/dist/session-transcript-JXHFTB7G.cjs +51 -0
- package/dist/{session-transcript-DOM3UTXR.cjs.map → session-transcript-JXHFTB7G.cjs.map} +1 -1
- package/dist/skills.cjs +8 -7
- package/dist/skills.js +6 -5
- package/dist/stream-object-BUCF5PHO.cjs +21 -0
- package/dist/{stream-object-L3Q7PBMF.cjs.map → stream-object-BUCF5PHO.cjs.map} +1 -1
- package/dist/stream-object-L57K4OFS.js +8 -0
- package/dist/{stream-object-ZYXWS4B2.js.map → stream-object-L57K4OFS.js.map} +1 -1
- package/dist/{stream-to-completion-DFJ5T3BK.js → stream-to-completion-QV5HCL3J.js} +3 -3
- package/dist/{stream-to-completion-DFJ5T3BK.js.map → stream-to-completion-QV5HCL3J.js.map} +1 -1
- package/dist/{stream-to-completion-H2MHISSK.cjs → stream-to-completion-SRISU5AB.cjs} +10 -10
- package/dist/{stream-to-completion-H2MHISSK.cjs.map → stream-to-completion-SRISU5AB.cjs.map} +1 -1
- package/dist/subagents-loader-AZIXJ7D3.cjs +16 -0
- package/dist/{subagents-loader-VRW73QQT.cjs.map → subagents-loader-AZIXJ7D3.cjs.map} +1 -1
- package/dist/subagents-loader-J54ESLDV.js +7 -0
- package/dist/{subagents-loader-I56GSKAQ.js.map → subagents-loader-J54ESLDV.js.map} +1 -1
- package/dist/subagents-loader.cjs +7 -6
- package/dist/subagents-loader.cjs.map +1 -1
- package/dist/subagents-loader.d.cts +3 -2
- package/dist/subagents-loader.d.ts +3 -2
- package/dist/subagents-loader.js +5 -4
- package/dist/subagents-loader.js.map +1 -1
- package/dist/subscription/define-subscription.d.cts +1 -1
- package/dist/subscription/define-subscription.d.ts +1 -1
- package/dist/subscription/index.cjs +22 -9
- package/dist/subscription/index.cjs.map +1 -1
- package/dist/subscription/index.d.cts +1 -1
- package/dist/subscription/index.d.ts +1 -1
- package/dist/subscription/index.js +21 -8
- package/dist/subscription/index.js.map +1 -1
- package/dist/subscription/internal/adapter-types.d.cts +1 -1
- package/dist/subscription/internal/adapter-types.d.ts +1 -1
- package/dist/subscription/internal/server-integration.d.cts +1 -1
- package/dist/subscription/internal/server-integration.d.ts +1 -1
- package/dist/subscription/internal/sse-encoder.d.cts +1 -1
- package/dist/subscription/internal/sse-encoder.d.ts +1 -1
- package/dist/subscription/internal/sse-parser.d.cts +1 -1
- package/dist/subscription/internal/sse-parser.d.ts +1 -1
- package/dist/subscription/internal/subscription-runtime.d.cts +1 -1
- package/dist/subscription/internal/subscription-runtime.d.ts +1 -1
- package/dist/subscription/internal/ws-adapter-node.d.cts +1 -1
- package/dist/subscription/internal/ws-adapter-node.d.ts +1 -1
- package/dist/subscription/theokit-subscribe.d.cts +14 -1
- package/dist/subscription/theokit-subscribe.d.ts +14 -1
- package/dist/subscription/types.d.cts +19 -1
- package/dist/subscription/types.d.ts +19 -1
- package/dist/task-store.cjs +8 -7
- package/dist/task-store.js +5 -4
- package/dist/types/agent-prims.d.ts +14 -0
- package/dist/types/agent.d.ts +92 -11
- package/dist/types/batch.d.ts +7 -1
- package/dist/types/conversation.d.ts +18 -5
- package/dist/types/goal-events.d.ts +4 -8
- package/dist/types/memory-adapter.d.ts +12 -1
- package/dist/types/plugin.d.ts +101 -0
- package/dist/types/provider-profile.d.ts +32 -0
- package/dist/types/run-events.d.ts +28 -1
- package/dist/types/run.d.ts +35 -23
- package/dist/types/sdk-agent.d.ts +14 -0
- package/dist/types/session-record.d.ts +18 -1
- package/dist/types/task.d.ts +15 -1
- package/dist/types/theokit.d.ts +10 -1
- package/dist/types/updates.d.ts +35 -4
- package/dist/types/workflow.d.ts +155 -0
- package/dist/workflow.cjs +29 -28
- package/dist/workflow.d.cts +666 -17
- package/dist/workflow.d.ts +666 -17
- package/dist/workflow.js +8 -7
- package/docs/error-codes.md +215 -0
- package/docs/harness-capability-map.md +1358 -0
- package/package.json +29 -16
- package/bin/init-claude.mjs +0 -68
- package/claude-template/AGENTS.md +0 -157
- package/claude-template/CLAUDE.md +0 -66
- package/claude-template/dot-claude/rules/theokit-conventions.md +0 -32
- package/claude-template/dot-claude/settings.json +0 -16
- package/claude-template/dot-claude/skills/theokit-agent-core/SKILL.md +0 -209
- package/claude-template/dot-claude/skills/theokit-auth/SKILL.md +0 -102
- package/claude-template/dot-claude/skills/theokit-budget/SKILL.md +0 -176
- package/claude-template/dot-claude/skills/theokit-client/SKILL.md +0 -58
- package/claude-template/dot-claude/skills/theokit-compaction/SKILL.md +0 -102
- package/claude-template/dot-claude/skills/theokit-concurrency/SKILL.md +0 -68
- package/claude-template/dot-claude/skills/theokit-config/SKILL.md +0 -139
- package/claude-template/dot-claude/skills/theokit-cron/SKILL.md +0 -148
- package/claude-template/dot-claude/skills/theokit-di/SKILL.md +0 -233
- package/claude-template/dot-claude/skills/theokit-di-agent/SKILL.md +0 -294
- package/claude-template/dot-claude/skills/theokit-errors/SKILL.md +0 -172
- package/claude-template/dot-claude/skills/theokit-eval/SKILL.md +0 -179
- package/claude-template/dot-claude/skills/theokit-filesystem/SKILL.md +0 -74
- package/claude-template/dot-claude/skills/theokit-gateways/SKILL.md +0 -209
- package/claude-template/dot-claude/skills/theokit-memory/SKILL.md +0 -176
- package/claude-template/dot-claude/skills/theokit-messages/SKILL.md +0 -58
- package/claude-template/dot-claude/skills/theokit-models/SKILL.md +0 -79
- package/claude-template/dot-claude/skills/theokit-path-safety/SKILL.md +0 -60
- package/claude-template/dot-claude/skills/theokit-persistence/SKILL.md +0 -85
- package/claude-template/dot-claude/skills/theokit-project/SKILL.md +0 -55
- package/claude-template/dot-claude/skills/theokit-retry/SKILL.md +0 -50
- package/claude-template/dot-claude/skills/theokit-sandbox/SKILL.md +0 -93
- package/claude-template/dot-claude/skills/theokit-sanitize/SKILL.md +0 -66
- package/claude-template/dot-claude/skills/theokit-skills/SKILL.md +0 -68
- package/claude-template/dot-claude/skills/theokit-streaming/SKILL.md +0 -156
- package/claude-template/dot-claude/skills/theokit-subagents/SKILL.md +0 -109
- package/claude-template/dot-claude/skills/theokit-subscriptions/SKILL.md +0 -148
- package/claude-template/dot-claude/skills/theokit-task-store/SKILL.md +0 -75
- package/claude-template/dot-claude/skills/theokit-tools/SKILL.md +0 -170
- package/claude-template/dot-claude/skills/theokit-workflows/SKILL.md +0 -218
- package/dist/agent-FFVV4U5N.js +0 -50
- package/dist/agent-YLAHVHEH.cjs +0 -59
- package/dist/agent-session-store-DUGBAX5V.cjs +0 -23
- package/dist/agent-session-store-TNCGL5RN.js +0 -6
- package/dist/batch-UPKN4SG6.js.map +0 -1
- package/dist/batch-ZEFN5SO7.cjs.map +0 -1
- package/dist/chunk-2D43RD5D.cjs.map +0 -1
- package/dist/chunk-2FYEVT2B.cjs.map +0 -1
- package/dist/chunk-2RW7K6FN.cjs.map +0 -1
- package/dist/chunk-2XLKLVVR.js.map +0 -1
- package/dist/chunk-34XOCZJO.js.map +0 -1
- package/dist/chunk-3V7UJLQT.js.map +0 -1
- package/dist/chunk-4NAKHID5.js.map +0 -1
- package/dist/chunk-4Q4K4WB5.js.map +0 -1
- package/dist/chunk-5F5NWKPN.js.map +0 -1
- package/dist/chunk-5NBUH3NO.js.map +0 -1
- package/dist/chunk-5YKNEMXR.cjs.map +0 -1
- package/dist/chunk-7W7ZWMLQ.js.map +0 -1
- package/dist/chunk-ADLLFY3H.cjs.map +0 -1
- package/dist/chunk-B4YA6BRS.cjs.map +0 -1
- package/dist/chunk-B6HOIWQ6.js.map +0 -1
- package/dist/chunk-BDTVFIPB.cjs.map +0 -1
- package/dist/chunk-BFYGJGC5.js.map +0 -1
- package/dist/chunk-BM6N4KHO.cjs.map +0 -1
- package/dist/chunk-CAH3G4IS.js.map +0 -1
- package/dist/chunk-EZ2YEF4F.cjs.map +0 -1
- package/dist/chunk-F77UENR6.cjs.map +0 -1
- package/dist/chunk-FOXKFTVZ.cjs.map +0 -1
- package/dist/chunk-G3JWXOGY.js.map +0 -1
- package/dist/chunk-GOVJO4YE.js.map +0 -1
- package/dist/chunk-HAWE74GQ.cjs.map +0 -1
- package/dist/chunk-HE4BIAOS.js.map +0 -1
- package/dist/chunk-HSQ5Q3I5.js.map +0 -1
- package/dist/chunk-JIQRXKTA.cjs.map +0 -1
- package/dist/chunk-KSWHTR54.js.map +0 -1
- package/dist/chunk-L5YO6PWL.cjs.map +0 -1
- package/dist/chunk-LD4MOBFX.js.map +0 -1
- package/dist/chunk-LS3LMQ23.js.map +0 -1
- package/dist/chunk-MSFLYJDY.js.map +0 -1
- package/dist/chunk-NZL4BNFQ.js.map +0 -1
- package/dist/chunk-OKLYRPKL.cjs.map +0 -1
- package/dist/chunk-OUOXM36O.cjs.map +0 -1
- package/dist/chunk-OXNYIMZZ.js.map +0 -1
- package/dist/chunk-PBZ7HMBP.js.map +0 -1
- package/dist/chunk-PNVDQL5Y.cjs.map +0 -1
- package/dist/chunk-Q4RESANI.cjs.map +0 -1
- package/dist/chunk-QBTVATSF.cjs.map +0 -1
- package/dist/chunk-RAHSWE5C.cjs.map +0 -1
- package/dist/chunk-RP5HQVLD.js.map +0 -1
- package/dist/chunk-SEL2ZQMT.js.map +0 -1
- package/dist/chunk-SK4QLUBK.js.map +0 -1
- package/dist/chunk-TTJ54H3E.cjs.map +0 -1
- package/dist/chunk-V26QVGUG.js.map +0 -1
- package/dist/chunk-V6HWJQQV.js.map +0 -1
- package/dist/chunk-VGPXHHF3.cjs.map +0 -1
- package/dist/chunk-VUKQL3L2.cjs.map +0 -1
- package/dist/chunk-VYCKUKPA.cjs.map +0 -1
- package/dist/chunk-VYHJZVL5.cjs.map +0 -1
- package/dist/chunk-X2FR4OIT.js.map +0 -1
- package/dist/chunk-XPR366DL.cjs.map +0 -1
- package/dist/chunk-XROIW6BH.js.map +0 -1
- package/dist/chunk-YLQQX5W2.cjs.map +0 -1
- package/dist/chunk-ZT57WTUJ.cjs.map +0 -1
- package/dist/compact-session-4MNKNMO2.js +0 -21
- package/dist/compact-session-EPFBQ46Z.cjs +0 -58
- package/dist/context-7USNN6LP.cjs +0 -22
- package/dist/context-ENXZNF6J.js +0 -5
- package/dist/cron-BMjgFH-_.d.ts +0 -631
- package/dist/cron-DFDdCdMM.d.cts +0 -631
- package/dist/executor-2Z3LGG3I.cjs.map +0 -1
- package/dist/executor-2Z6XJJJG.js.map +0 -1
- package/dist/fs-session-store-R5FD3EN6.js +0 -10
- package/dist/fs-session-store-VVY2AHWG.cjs +0 -19
- package/dist/generate-object-AVXOJK2I.cjs +0 -20
- package/dist/generate-object-WQRCXFD2.js +0 -7
- package/dist/index-manager-VRU3A2YL.cjs +0 -21
- package/dist/index-manager-WS7TVKUW.js +0 -12
- package/dist/inject-session-AUQLBDRS.cjs +0 -28
- package/dist/inject-session-AUQLBDRS.cjs.map +0 -1
- package/dist/inject-session-GMBMJVNZ.js.map +0 -1
- package/dist/judge-call-G5SGV2M2.cjs +0 -22
- package/dist/judge-call-MDIPTBJI.js +0 -5
- package/dist/oauth-transaction-store-7CKHPQRN.cjs +0 -32
- package/dist/oauth-transaction-store-W74I6EFD.js +0 -3
- package/dist/registry-63ASMXT4.cjs +0 -46
- package/dist/registry-O7FJ2MPM.js +0 -9
- package/dist/session-transcript-DOM3UTXR.cjs +0 -50
- package/dist/session-transcript-RAKEK76V.js +0 -5
- package/dist/stream-object-L3Q7PBMF.cjs +0 -20
- package/dist/stream-object-ZYXWS4B2.js +0 -7
- package/dist/subagents-loader-I56GSKAQ.js +0 -6
- package/dist/subagents-loader-VRW73QQT.cjs +0 -15
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkHJBMA5MB_cjs = require('./chunk-HJBMA5MB.cjs');
|
|
4
|
+
require('./chunk-IWBGCBR6.cjs');
|
|
5
|
+
require('./chunk-K3FW2XZD.cjs');
|
|
6
|
+
require('./chunk-JTB5Q42C.cjs');
|
|
7
|
+
require('./chunk-NUKRL3I6.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
Object.defineProperty(exports, "loadSubagents", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function () { return chunkHJBMA5MB_cjs.loadSubagents; }
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=subagents-loader-AZIXJ7D3.cjs.map
|
|
16
|
+
//# sourceMappingURL=subagents-loader-AZIXJ7D3.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"subagents-loader-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"subagents-loader-AZIXJ7D3.cjs"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { loadSubagents } from './chunk-2QKTVKH3.js';
|
|
2
|
+
import './chunk-AG5JPQIY.js';
|
|
3
|
+
import './chunk-IDCKSLYH.js';
|
|
4
|
+
import './chunk-T7XEKOVW.js';
|
|
5
|
+
import './chunk-T7O6K6PX.js';
|
|
6
|
+
//# sourceMappingURL=subagents-loader-J54ESLDV.js.map
|
|
7
|
+
//# sourceMappingURL=subagents-loader-J54ESLDV.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"subagents-loader-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"subagents-loader-J54ESLDV.js"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('./chunk-
|
|
5
|
-
var
|
|
6
|
-
require('./chunk-
|
|
3
|
+
var chunkHJBMA5MB_cjs = require('./chunk-HJBMA5MB.cjs');
|
|
4
|
+
require('./chunk-IWBGCBR6.cjs');
|
|
5
|
+
var chunkK3FW2XZD_cjs = require('./chunk-K3FW2XZD.cjs');
|
|
6
|
+
require('./chunk-JTB5Q42C.cjs');
|
|
7
|
+
require('./chunk-NUKRL3I6.cjs');
|
|
7
8
|
|
|
8
9
|
// src/subagents-loader.ts
|
|
9
10
|
var ACCEPTED_SOURCES = ["project"];
|
|
@@ -12,7 +13,7 @@ function resolveSources(options) {
|
|
|
12
13
|
if (declared === void 0) return ACCEPTED_SOURCES;
|
|
13
14
|
for (const source of declared) {
|
|
14
15
|
if (!ACCEPTED_SOURCES.includes(source)) {
|
|
15
|
-
throw new
|
|
16
|
+
throw new chunkK3FW2XZD_cjs.ConfigurationError(
|
|
16
17
|
`Unknown subagent setting source "${String(source)}" (accepted: ${ACCEPTED_SOURCES.join(", ")})`,
|
|
17
18
|
{ code: "subagent_unknown_setting_source" }
|
|
18
19
|
);
|
|
@@ -22,7 +23,7 @@ function resolveSources(options) {
|
|
|
22
23
|
}
|
|
23
24
|
async function discoverSubagents(cwd, options) {
|
|
24
25
|
const sources = resolveSources(options);
|
|
25
|
-
return
|
|
26
|
+
return chunkHJBMA5MB_cjs.loadSubagents(cwd, sources.includes("project"), void 0);
|
|
26
27
|
}
|
|
27
28
|
async function loadSubagentDefinition(name, cwd, options) {
|
|
28
29
|
return (await discoverSubagents(cwd, options))[name];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/subagents-loader.ts"],"names":["ConfigurationError","loadSubagents"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/subagents-loader.ts"],"names":["ConfigurationError","loadSubagents"],"mappings":";;;;;;;;;AAuCA,IAAM,gBAAA,GAA8C,CAAC,SAAS,CAAA;AAgB9D,SAAS,eAAe,OAAA,EAA0E;AAChG,EAAA,MAAM,WAAW,OAAA,EAAS,cAAA;AAC1B,EAAA,IAAI,QAAA,KAAa,QAAW,OAAO,gBAAA;AACnC,EAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,gBAAA,CAAiB,QAAA,CAAS,MAAM,CAAA,EAAG;AACtC,MAAA,MAAM,IAAIA,oCAAA;AAAA,QACR,CAAA,iCAAA,EAAoC,OAAO,MAAM,CAAC,gBAAgB,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,QAC7F,EAAE,MAAM,iCAAA;AAAkC,OAC5C;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAOA,eAAsB,iBAAA,CACpB,KACA,OAAA,EAC0C;AAC1C,EAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA;AACtC,EAAA,OAAOC,gCAAc,GAAA,EAAK,OAAA,CAAQ,QAAA,CAAS,SAAS,GAAG,MAAS,CAAA;AAClE;AAQA,eAAsB,sBAAA,CACpB,IAAA,EACA,GAAA,EACA,OAAA,EACsC;AACtC,EAAA,OAAA,CAAQ,MAAM,iBAAA,CAAkB,GAAA,EAAK,OAAO,GAAG,IAAI,CAAA;AACrD","file":"subagents-loader.cjs","sourcesContent":["/**\n * M81 — `.theokit/agents` discovery, exposed so a consumer can read the on-disk subagent\n * definitions with one import instead of hand-rolling a second parser.\n *\n * ## Why this file exists\n *\n * `src/skills.ts` already exposed `discoverSkills` for the sibling domain. Subagents had the same\n * loader — `internal/runtime/skills/subagents-loader.ts` — with no public door. A consumer behind\n * the layer boundary (the agent-builder never imports `@theokit/sdk*` directly) could not reach it,\n * so re-implementing was the only legal option. It re-implemented, and then wrote a test whose only\n * job was to watch the two parsers for drift. That test is the cleanest possible evidence that the\n * duplication should not exist.\n *\n * ## What crosses is the PARSED config\n *\n * The return is `AgentDefinition` — already interpreted — never the `.md` text or the frontmatter\n * shape. Exporting the file format would freeze an internal detail as public API; exporting the\n * parsed value leaves the format free to change.\n */\n\nimport { ConfigurationError } from \"./errors.js\";\nimport { loadSubagents } from \"./internal/runtime/skills/subagents-loader.js\";\nimport type { AgentDefinition } from \"./types/agent.js\";\n\n/**\n * The parsed subagent definition this module hands back.\n *\n * Re-exported here — beside the loader that produces it — so a consumer can NAME the value it\n * receives without reaching into `types/agent`, which no subpath publishes. A layer above may then\n * alias it (`AgentDefinition as SubagentDefinition`) to sidestep a name it has already spent.\n */\nexport type { AgentDefinition } from \"./types/agent.js\";\n\n/**\n * Where subagent definitions may be read from. A closed union rather than a boolean: a third\n * source can join it without breaking the signature, and the call site reads as what it means.\n */\nexport type SubagentSource = \"project\";\n\nconst ACCEPTED_SOURCES: readonly SubagentSource[] = [\"project\"];\n\n/** Options for {@link discoverSubagents} / {@link loadSubagentDefinition}. */\nexport interface DiscoverSubagentsOptions {\n /**\n * Which sources to read. Defaults to `[\"project\"]` — `<cwd>/.theokit/agents/*.md`.\n *\n * An empty list reads NOTHING: the directory is never opened, so a caller that has not yet\n * established trust in `cwd` can decline the read rather than filter its result.\n */\n readonly settingSources?: readonly SubagentSource[];\n}\n\n// Validated at the boundary (error-handling.md § 2): the union is erased at runtime, so a JS\n// caller — or a value crossing a serialization hop — can still carry a source nobody honors.\n// Dropping it silently would read as \"no subagents found\", which is the same shape as success.\nfunction resolveSources(options: DiscoverSubagentsOptions | undefined): readonly SubagentSource[] {\n const declared = options?.settingSources;\n if (declared === undefined) return ACCEPTED_SOURCES;\n for (const source of declared) {\n if (!ACCEPTED_SOURCES.includes(source)) {\n throw new ConfigurationError(\n `Unknown subagent setting source \"${String(source)}\" (accepted: ${ACCEPTED_SOURCES.join(\", \")})`,\n { code: \"subagent_unknown_setting_source\" },\n );\n }\n }\n return declared;\n}\n\n/**\n * Discover the subagents defined under `<cwd>/.theokit/agents/*.md`.\n *\n * An absent directory yields `{}` — a project without subagents is the common case, not an error.\n */\nexport async function discoverSubagents(\n cwd: string,\n options?: DiscoverSubagentsOptions,\n): Promise<Record<string, AgentDefinition>> {\n const sources = resolveSources(options);\n return loadSubagents(cwd, sources.includes(\"project\"), undefined);\n}\n\n/**\n * Load ONE subagent definition by name, or `undefined` when it is not defined on disk.\n *\n * A thin selector over {@link discoverSubagents} rather than a second reader: one parser is the\n * whole point of this module.\n */\nexport async function loadSubagentDefinition(\n name: string,\n cwd: string,\n options?: DiscoverSubagentsOptions,\n): Promise<AgentDefinition | undefined> {\n return (await discoverSubagents(cwd, options))[name];\n}\n"]}
|
package/dist/subagents-loader.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { loadSubagents } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import { ConfigurationError } from './chunk-
|
|
4
|
-
import './chunk-
|
|
1
|
+
import { loadSubagents } from './chunk-2QKTVKH3.js';
|
|
2
|
+
import './chunk-AG5JPQIY.js';
|
|
3
|
+
import { ConfigurationError } from './chunk-IDCKSLYH.js';
|
|
4
|
+
import './chunk-T7XEKOVW.js';
|
|
5
|
+
import './chunk-T7O6K6PX.js';
|
|
5
6
|
|
|
6
7
|
// src/subagents-loader.ts
|
|
7
8
|
var ACCEPTED_SOURCES = ["project"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/subagents-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/subagents-loader.ts"],"names":[],"mappings":";;;;;;;AAuCA,IAAM,gBAAA,GAA8C,CAAC,SAAS,CAAA;AAgB9D,SAAS,eAAe,OAAA,EAA0E;AAChG,EAAA,MAAM,WAAW,OAAA,EAAS,cAAA;AAC1B,EAAA,IAAI,QAAA,KAAa,QAAW,OAAO,gBAAA;AACnC,EAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,gBAAA,CAAiB,QAAA,CAAS,MAAM,CAAA,EAAG;AACtC,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,iCAAA,EAAoC,OAAO,MAAM,CAAC,gBAAgB,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,QAC7F,EAAE,MAAM,iCAAA;AAAkC,OAC5C;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAOA,eAAsB,iBAAA,CACpB,KACA,OAAA,EAC0C;AAC1C,EAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA;AACtC,EAAA,OAAO,cAAc,GAAA,EAAK,OAAA,CAAQ,QAAA,CAAS,SAAS,GAAG,MAAS,CAAA;AAClE;AAQA,eAAsB,sBAAA,CACpB,IAAA,EACA,GAAA,EACA,OAAA,EACsC;AACtC,EAAA,OAAA,CAAQ,MAAM,iBAAA,CAAkB,GAAA,EAAK,OAAO,GAAG,IAAI,CAAA;AACrD","file":"subagents-loader.js","sourcesContent":["/**\n * M81 — `.theokit/agents` discovery, exposed so a consumer can read the on-disk subagent\n * definitions with one import instead of hand-rolling a second parser.\n *\n * ## Why this file exists\n *\n * `src/skills.ts` already exposed `discoverSkills` for the sibling domain. Subagents had the same\n * loader — `internal/runtime/skills/subagents-loader.ts` — with no public door. A consumer behind\n * the layer boundary (the agent-builder never imports `@theokit/sdk*` directly) could not reach it,\n * so re-implementing was the only legal option. It re-implemented, and then wrote a test whose only\n * job was to watch the two parsers for drift. That test is the cleanest possible evidence that the\n * duplication should not exist.\n *\n * ## What crosses is the PARSED config\n *\n * The return is `AgentDefinition` — already interpreted — never the `.md` text or the frontmatter\n * shape. Exporting the file format would freeze an internal detail as public API; exporting the\n * parsed value leaves the format free to change.\n */\n\nimport { ConfigurationError } from \"./errors.js\";\nimport { loadSubagents } from \"./internal/runtime/skills/subagents-loader.js\";\nimport type { AgentDefinition } from \"./types/agent.js\";\n\n/**\n * The parsed subagent definition this module hands back.\n *\n * Re-exported here — beside the loader that produces it — so a consumer can NAME the value it\n * receives without reaching into `types/agent`, which no subpath publishes. A layer above may then\n * alias it (`AgentDefinition as SubagentDefinition`) to sidestep a name it has already spent.\n */\nexport type { AgentDefinition } from \"./types/agent.js\";\n\n/**\n * Where subagent definitions may be read from. A closed union rather than a boolean: a third\n * source can join it without breaking the signature, and the call site reads as what it means.\n */\nexport type SubagentSource = \"project\";\n\nconst ACCEPTED_SOURCES: readonly SubagentSource[] = [\"project\"];\n\n/** Options for {@link discoverSubagents} / {@link loadSubagentDefinition}. */\nexport interface DiscoverSubagentsOptions {\n /**\n * Which sources to read. Defaults to `[\"project\"]` — `<cwd>/.theokit/agents/*.md`.\n *\n * An empty list reads NOTHING: the directory is never opened, so a caller that has not yet\n * established trust in `cwd` can decline the read rather than filter its result.\n */\n readonly settingSources?: readonly SubagentSource[];\n}\n\n// Validated at the boundary (error-handling.md § 2): the union is erased at runtime, so a JS\n// caller — or a value crossing a serialization hop — can still carry a source nobody honors.\n// Dropping it silently would read as \"no subagents found\", which is the same shape as success.\nfunction resolveSources(options: DiscoverSubagentsOptions | undefined): readonly SubagentSource[] {\n const declared = options?.settingSources;\n if (declared === undefined) return ACCEPTED_SOURCES;\n for (const source of declared) {\n if (!ACCEPTED_SOURCES.includes(source)) {\n throw new ConfigurationError(\n `Unknown subagent setting source \"${String(source)}\" (accepted: ${ACCEPTED_SOURCES.join(\", \")})`,\n { code: \"subagent_unknown_setting_source\" },\n );\n }\n }\n return declared;\n}\n\n/**\n * Discover the subagents defined under `<cwd>/.theokit/agents/*.md`.\n *\n * An absent directory yields `{}` — a project without subagents is the common case, not an error.\n */\nexport async function discoverSubagents(\n cwd: string,\n options?: DiscoverSubagentsOptions,\n): Promise<Record<string, AgentDefinition>> {\n const sources = resolveSources(options);\n return loadSubagents(cwd, sources.includes(\"project\"), undefined);\n}\n\n/**\n * Load ONE subagent definition by name, or `undefined` when it is not defined on disk.\n *\n * A thin selector over {@link discoverSubagents} rather than a second reader: one parser is the\n * whole point of this module.\n */\nexport async function loadSubagentDefinition(\n name: string,\n cwd: string,\n options?: DiscoverSubagentsOptions,\n): Promise<AgentDefinition | undefined> {\n return (await discoverSubagents(cwd, options))[name];\n}\n"]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
3
|
+
var chunkK3FW2XZD_cjs = require('../chunk-K3FW2XZD.cjs');
|
|
4
|
+
require('../chunk-JTB5Q42C.cjs');
|
|
5
|
+
require('../chunk-NUKRL3I6.cjs');
|
|
5
6
|
|
|
6
7
|
// src/subscription/define-subscription.ts
|
|
7
8
|
function defineSubscription(opts) {
|
|
@@ -138,7 +139,7 @@ function tracked(id, payload) {
|
|
|
138
139
|
}
|
|
139
140
|
return [id, payload];
|
|
140
141
|
}
|
|
141
|
-
var SubscriptionError = class extends
|
|
142
|
+
var SubscriptionError = class extends chunkK3FW2XZD_cjs.TheokitAgentError {
|
|
142
143
|
name = "SubscriptionError";
|
|
143
144
|
constructor(message, options = {}) {
|
|
144
145
|
super(message, { ...options, isRetryable: false });
|
|
@@ -217,7 +218,8 @@ async function* subscribe(name, input, opts) {
|
|
|
217
218
|
}
|
|
218
219
|
async function* openSse(name, input, opts) {
|
|
219
220
|
const url = `${stripTrailingSlash(opts.baseUrl)}/api/subscriptions/${encodeURIComponent(name)}?input=${encodeURIComponent(JSON.stringify(input))}`;
|
|
220
|
-
const
|
|
221
|
+
const fetchFn = opts.fetch ?? globalThis.fetch;
|
|
222
|
+
const res = await fetchFn(url, {
|
|
221
223
|
method: "GET",
|
|
222
224
|
headers: {
|
|
223
225
|
accept: "text/event-stream",
|
|
@@ -251,10 +253,10 @@ async function* openSse(name, input, opts) {
|
|
|
251
253
|
async function* openWs(name, input, opts) {
|
|
252
254
|
const baseUrl = stripTrailingSlash(opts.baseUrl);
|
|
253
255
|
const wsUrl = baseUrl.replace(/^http:/, "ws:").replace(/^https:/, "wss:").concat("/api/ws");
|
|
254
|
-
const WS = globalThis.WebSocket;
|
|
256
|
+
const WS = opts.WebSocket ?? globalThis.WebSocket;
|
|
255
257
|
if (WS === void 0) {
|
|
256
258
|
throw new SubscriptionError(
|
|
257
|
-
"Theokit.subscribe(transport='ws'): no global WebSocket available. Use Node >=22 or install 'ws' as a runtime dep + assign to globalThis.WebSocket.",
|
|
259
|
+
"Theokit.subscribe(transport='ws'): no global WebSocket available. Use Node >=22 or install 'ws' as a runtime dep + assign to globalThis.WebSocket, or pass opts.WebSocket.",
|
|
258
260
|
{ code: "ws_global_missing" }
|
|
259
261
|
);
|
|
260
262
|
}
|
|
@@ -330,10 +332,11 @@ async function* openWs(name, input, opts) {
|
|
|
330
332
|
}
|
|
331
333
|
}
|
|
332
334
|
}
|
|
333
|
-
async function selectTransport(pref, _name,
|
|
335
|
+
async function selectTransport(pref, _name, opts) {
|
|
334
336
|
if (pref === "ws") return "ws";
|
|
335
337
|
if (pref === "sse") return "sse";
|
|
336
|
-
|
|
338
|
+
const WS = opts.WebSocket ?? globalThis.WebSocket;
|
|
339
|
+
if (typeof WS === "function") {
|
|
337
340
|
return "ws";
|
|
338
341
|
}
|
|
339
342
|
return "sse";
|
|
@@ -357,13 +360,23 @@ function safeJsonParse(s) {
|
|
|
357
360
|
}
|
|
358
361
|
async function* streamToAsyncIterable(stream) {
|
|
359
362
|
const reader = stream.getReader();
|
|
363
|
+
let finishedNaturally = false;
|
|
360
364
|
try {
|
|
361
365
|
while (true) {
|
|
362
366
|
const { done, value } = await reader.read();
|
|
363
|
-
if (done)
|
|
367
|
+
if (done) {
|
|
368
|
+
finishedNaturally = true;
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
364
371
|
if (value !== void 0) yield value;
|
|
365
372
|
}
|
|
366
373
|
} finally {
|
|
374
|
+
if (!finishedNaturally) {
|
|
375
|
+
try {
|
|
376
|
+
await reader.cancel();
|
|
377
|
+
} catch {
|
|
378
|
+
}
|
|
379
|
+
}
|
|
367
380
|
reader.releaseLock();
|
|
368
381
|
}
|
|
369
382
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/subscription/define-subscription.ts","../../src/subscription/internal/sse-parser.ts","../../src/subscription/types.ts","../../src/subscription/theokit-subscribe.ts"],"names":["TheokitAgentError"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @theokit/sdk — `defineSubscription` DSL (G8 public API).\n *\n * Per ADR D426 (AsyncGenerator handler + Zod input/output schemas).\n *\n * @public\n */\n\nimport type { SubscriptionCtx, SubscriptionDescriptor, TrackedEnvelope, ZodLike } from \"./types.js\";\n\n/**\n * Options accepted by {@link defineSubscription}.\n *\n * @public\n */\nexport interface DefineSubscriptionOptions<TInput, TOutput> {\n /** Optional explicit name. Falls back to filename derivation by the scanner. */\n name?: string;\n /** Zod schema validating subscription input. Required (typed RPC contract). */\n input: ZodLike<TInput>;\n /** Zod schema describing each output frame. Informational; not enforced per-frame. */\n output: ZodLike<TOutput>;\n /**\n * Handler that produces the subscription stream.\n *\n * Receives the validated input + {@link SubscriptionCtx}. Yielding a value\n * emits a plain output frame. Yielding a `tracked(id, payload)` envelope\n * additionally advertises a resume token to the client so reconnects can\n * resume from that point.\n */\n handler: (\n input: TInput,\n ctx: SubscriptionCtx,\n ) => AsyncGenerator<TOutput | TrackedEnvelope<TOutput>, void, void>;\n}\n\n/**\n * Define a typed subscription. Pair with `Theokit.subscribe(name, input)`\n * on the client side.\n *\n * Per ADR D426 — handler is `AsyncGenerator<TOutput | TrackedEnvelope<TOutput>>`.\n * The runtime validates input via `opts.input.safeParse` BEFORE invoking the\n * handler; failure throws {@link import('./types.js').SubscriptionInputError}.\n *\n * @example\n * ```ts\n * import { Subscription } from \"@theokit/sdk/subscription\";\n * import { z } from \"zod\";\n *\n * export default Subscription.create({\n * input: z.object({ topic: z.string() }),\n * output: z.object({ message: z.string(), ts: z.number() }),\n * async *handler(input, ctx) {\n * let cursor = ctx.lastEventId ?? \"0\";\n * while (!ctx.signal.aborted) {\n * const msgs = await fetchMessagesSince(input.topic, cursor);\n * for (const m of msgs) {\n * cursor = m.id;\n * yield ctx.tracked(m.id, { message: m.body, ts: m.ts });\n * }\n * await sleep(1000);\n * }\n * },\n * });\n * ```\n *\n * @public\n */\nexport function defineSubscription<TInput, TOutput>(\n opts: DefineSubscriptionOptions<TInput, TOutput>,\n): SubscriptionDescriptor<TInput, TOutput> {\n if (opts === null || typeof opts !== \"object\") {\n throw new TypeError(\"defineSubscription: options object is required\");\n }\n if (opts.input === undefined || typeof opts.input.safeParse !== \"function\") {\n throw new TypeError(\"defineSubscription: opts.input must be a Zod schema (or ZodLike)\");\n }\n if (opts.output === undefined || typeof opts.output.safeParse !== \"function\") {\n throw new TypeError(\"defineSubscription: opts.output must be a Zod schema (or ZodLike)\");\n }\n if (typeof opts.handler !== \"function\") {\n throw new TypeError(\"defineSubscription: opts.handler must be an async generator function\");\n }\n return {\n ...(opts.name !== undefined ? { name: opts.name } : {}),\n input: opts.input,\n output: opts.output,\n handler: opts.handler,\n };\n}\n\n/** SE36 — `Subscription.create` replaces `defineSubscription` (ADR 0015). @public */\nexport class Subscription {\n private constructor() {}\n static create<TInput, TOutput>(\n opts: DefineSubscriptionOptions<TInput, TOutput>,\n ): SubscriptionDescriptor<TInput, TOutput> {\n return defineSubscription(opts);\n }\n}\n","/**\n * @theokit/sdk — W3C SSE parser (G8 internal).\n *\n * Per ADR D428. Reads from `ReadableStream<Uint8Array>` or async iterable of\n * UTF-8 chunks; yields parsed {@link SSEvent} objects per W3C SSE spec.\n *\n * Independent of `internal/llm/sse.ts:parseSseStream` (LLM-specific a peer vendor AI\n * Data Stream v1; locked by D38). This parser handles the `id:` field needed\n * for tracked envelopes (G8 resume mechanism), which the LLM parser ignores.\n *\n * Reference: https://html.spec.whatwg.org/multipage/server-sent-events.html\n *\n * @internal\n */\n\nimport type { SSEvent } from \"./sse-encoder.js\";\n\nconst decoder = new TextDecoder(\"utf-8\");\n\n/**\n * Parse an async iterable of UTF-8 byte chunks into a stream of SSE events.\n *\n * Implements the W3C event stream parser:\n * - Lines are split by `\\n`, `\\r\\n`, or `\\r`\n * - Events are dispatched on blank line (no `:` and no field name)\n * - Fields: `event`, `data` (multi-line concat with `\\n`), `id`, `retry`\n * - Lines starting with `:` are comments (ignored, except dispatched as `comment`)\n * - Unknown fields silently ignored per spec\n *\n * Empty events (no fields) are NOT dispatched per spec.\n *\n * @internal\n */\nexport async function* parseSseW3C(\n source: AsyncIterable<Uint8Array>,\n): AsyncGenerator<SSEvent, void, void> {\n let buffer = \"\";\n let eventName: string | undefined;\n let dataLines: string[] = [];\n let id: string | undefined;\n let retry: number | undefined;\n let commentLines: string[] = [];\n let hasField = false;\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: dispatch builds SSEvent from per-field state per W3C spec — refactor candidate\n const dispatch = (): SSEvent | null => {\n if (!hasField) {\n // Blank line with no preceding fields → reset state, no dispatch (per spec § 9.2.6)\n eventName = undefined;\n dataLines = [];\n id = undefined;\n retry = undefined;\n commentLines = [];\n return null;\n }\n const chunk: SSEvent = {};\n if (eventName !== undefined) (chunk as { event?: string }).event = eventName;\n if (dataLines.length > 0) (chunk as { data?: string }).data = dataLines.join(\"\\n\");\n if (id !== undefined) (chunk as { id?: string }).id = id;\n if (retry !== undefined) (chunk as { retry?: number }).retry = retry;\n if (commentLines.length > 0) (chunk as { comment?: string }).comment = commentLines.join(\"\\n\");\n eventName = undefined;\n dataLines = [];\n id = undefined;\n retry = undefined;\n commentLines = [];\n hasField = false;\n return chunk;\n };\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: handleLine dispatches across all SSE field kinds per W3C spec — refactor candidate\n const handleLine = (line: string): SSEvent | null => {\n if (line === \"\") {\n return dispatch();\n }\n if (line.startsWith(\":\")) {\n // Comment line — per spec ignored, but we surface it for keepalive visibility.\n commentLines.push(line.slice(1).replace(/^ /, \"\"));\n hasField = true;\n return null;\n }\n const colonIdx = line.indexOf(\":\");\n let field: string;\n let value: string;\n if (colonIdx === -1) {\n field = line;\n value = \"\";\n } else {\n field = line.slice(0, colonIdx);\n value = line.slice(colonIdx + 1);\n // Strip ONE leading space if present (per spec § 9.2.6)\n if (value.startsWith(\" \")) value = value.slice(1);\n }\n switch (field) {\n case \"event\":\n eventName = value;\n hasField = true;\n break;\n case \"data\":\n dataLines.push(value);\n hasField = true;\n break;\n case \"id\":\n // Per spec: id with NULL is ignored\n if (!value.includes(\"\\0\")) {\n id = value;\n hasField = true;\n }\n break;\n case \"retry\":\n if (/^\\d+$/.test(value)) {\n retry = Number.parseInt(value, 10);\n hasField = true;\n }\n break;\n default:\n // Unknown field — ignored per spec\n break;\n }\n return null;\n };\n\n for await (const bytes of source) {\n // Normalize CRLF / CR to LF then split\n buffer += decoder.decode(bytes, { stream: true }).replace(/\\r\\n|\\r/g, \"\\n\");\n let idx: number;\n // biome-ignore lint/suspicious/noAssignInExpressions: idiomatic while-assignment loop for buffered line parsing\n while ((idx = buffer.indexOf(\"\\n\")) !== -1) {\n const line = buffer.slice(0, idx);\n buffer = buffer.slice(idx + 1);\n const event = handleLine(line);\n if (event !== null) yield event;\n }\n }\n // Flush remaining buffer as a final line (no trailing newline case)\n buffer += decoder.decode();\n if (buffer.length > 0) {\n const event = handleLine(buffer);\n if (event !== null) yield event;\n }\n // Final dispatch in case last event lacked terminating blank line\n const tail = dispatch();\n if (tail !== null) yield tail;\n}\n","/**\n * @theokit/sdk — Subscription type contract (G8 v1.7.0).\n *\n * Per ADRs D423 (resume token opaque), D424 (transport selection),\n * D426 (defineSubscription DSL shape).\n *\n * @public\n */\n\nimport { TheokitAgentError } from \"../errors.js\";\n\n/**\n * Transport selection for subscriptions.\n *\n * - `'ws'`: WebSocket (bidirectional). Required for inbound client→server frames.\n * v1.7 ships Node-canonical `ws` adapter; CF/Bun/Deno deferred to v1.8.x per ADR D425.\n * - `'sse'`: W3C Server-Sent Events (server→client only). Browser-native EventSource.\n * - `'auto'`: Prefer WS, fall back SSE on upgrade failure. Default.\n *\n * @public\n */\nexport type SubscriptionTransport = \"ws\" | \"sse\" | \"auto\";\n\n/**\n * Context passed to a subscription `handler` on each invocation.\n *\n * @public\n */\nexport interface SubscriptionCtx {\n /**\n * Opaque resume token forwarded by the client when reconnecting.\n * Handler defines its own semantics (monotonic int, ULID, timestamp,\n * encrypted cursor). SDK passes through unchanged. Per ADR D423.\n */\n readonly lastEventId?: string;\n\n /**\n * AbortSignal that fires when the subscription is cancelled\n * (client disconnect, consumer abort, server shutdown).\n * Handler MUST honor `signal.aborted` in long-running loops.\n */\n readonly signal: AbortSignal;\n\n /**\n * Stable identifier for the underlying transport connection.\n * Different from the subscription name — one connection may host\n * many subscriptions. Useful for logging / per-connection state.\n */\n readonly connectionId: string;\n\n /**\n * Force-close the underlying transport with optional WS close code + reason.\n * Used by consumer code (e.g., auth middleware revoking a session) to\n * terminate a subscription that should not continue.\n */\n disconnect(code?: number, reason?: string): void;\n\n /**\n * Helper to mint a tracked envelope `[id, payload]`.\n * Yielding tracked envelopes lets the client advance `lastEventId`\n * so reconnects can resume from that point.\n */\n tracked<TPayload>(id: string, payload: TPayload): TrackedEnvelope<TPayload>;\n}\n\n/**\n * Tracked envelope: `[id, payload]` tuple yielded by subscription handlers\n * to advertise the resume token associated with the payload.\n *\n * The encoder writes the `id` as an SSE `id:` field or WS payload metadata\n * so the client can echo it back on reconnect (`input.lastEventId`).\n *\n * Per ADR D423.\n *\n * @public\n */\nexport type TrackedEnvelope<T> = readonly [id: string, payload: T];\n\n/**\n * Type guard for {@link TrackedEnvelope}.\n *\n * @public\n */\nexport function isTrackedEnvelope(value: unknown): value is TrackedEnvelope<unknown> {\n return Array.isArray(value) && value.length === 2 && typeof value[0] === \"string\";\n}\n\n/**\n * Mint a tracked envelope. Equivalent to `[id, payload] as const`,\n * exported as a function so consumers don't repeat the tuple cast.\n *\n * @public\n */\nexport function tracked<T>(id: string, payload: T): TrackedEnvelope<T> {\n if (typeof id !== \"string\" || id.length === 0) {\n throw new TypeError(\"tracked(): id must be a non-empty string\");\n }\n return [id, payload] as const;\n}\n\n/**\n * Base error for the subscription subsystem. Extends {@link TheokitAgentError}\n * so existing `instanceof TheokitAgentError` branches keep working.\n *\n * @public\n */\nexport class SubscriptionError extends TheokitAgentError {\n override readonly name: string = \"SubscriptionError\";\n\n constructor(message: string, options: { code?: string; cause?: unknown } = {}) {\n super(message, { ...options, isRetryable: false });\n }\n}\n\n/**\n * Thrown when subscription input fails Zod schema validation.\n *\n * @public\n */\nexport class SubscriptionInputError extends SubscriptionError {\n override readonly name: string = \"SubscriptionInputError\";\n\n readonly issues: unknown;\n\n constructor(message: string, options: { issues: unknown; cause?: unknown }) {\n super(message, { code: \"subscription_input_invalid\", cause: options.cause });\n this.issues = options.issues;\n }\n}\n\n/**\n * Thrown when a subscription transport disconnects unexpectedly\n * AND the client did not opt out of reconnect.\n *\n * @public\n */\nexport class SubscriptionDisconnectError extends SubscriptionError {\n override readonly name: string = \"SubscriptionDisconnectError\";\n\n readonly closeCode?: number;\n readonly closeReason?: string;\n\n constructor(\n message: string,\n options: { closeCode?: number; closeReason?: string; cause?: unknown } = {},\n ) {\n super(message, { code: \"subscription_disconnected\", cause: options.cause });\n if (options.closeCode !== undefined) this.closeCode = options.closeCode;\n if (options.closeReason !== undefined) this.closeReason = options.closeReason;\n }\n}\n\n/**\n * Descriptor returned by {@link Subscription.create}. Carries the typed\n * input/output Zod schemas + handler factory.\n *\n * @public\n */\nexport interface SubscriptionDescriptor<TInput = unknown, TOutput = unknown> {\n /** Optional explicit name; the runtime may also derive name from file path. */\n readonly name?: string;\n /** Zod schema for the subscription input. Validated at dispatch boundary. */\n readonly input: ZodLike<TInput>;\n /** Zod schema for each output frame (informational; not enforced per-frame). */\n readonly output: ZodLike<TOutput>;\n /** Async handler that yields output frames (or tracked envelopes). */\n readonly handler: (\n input: TInput,\n ctx: SubscriptionCtx,\n ) => AsyncGenerator<TOutput | TrackedEnvelope<TOutput>, void, void>;\n}\n\n/**\n * Minimal structural Zod type used to avoid hard peer-dep import.\n * Mirrors the surface used by other SDK modules (e.g., `define-tool.ts`).\n *\n * @internal\n */\nexport interface ZodLike<T> {\n safeParse(value: unknown): { success: true; data: T } | { success: false; error: unknown };\n parse(value: unknown): T;\n}\n","/**\n * @theokit/sdk — `Theokit.subscribe` client (G8 public API).\n *\n * Per ADR D427 (Theokit.subscribe namespace) + D424 (transport selection)\n * + D423 (lastEventId opaque propagation).\n *\n * Returns an AsyncGenerator that yields server-sent values. Transparent\n * reconnect with exponential backoff. Propagates `lastEventId` from the last\n * received tracked envelope on each reconnect attempt.\n *\n * @public\n */\n\nimport { parseSseW3C } from \"./internal/sse-parser.js\";\nimport type { WireFrame } from \"./internal/subscription-runtime.js\";\nimport {\n SubscriptionDisconnectError,\n SubscriptionError,\n type SubscriptionTransport,\n} from \"./types.js\";\n\n/**\n * Options accepted by `Theokit.subscribe(name, input, opts?)`.\n *\n * @public\n */\nexport interface SubscribeOptions {\n /** Base URL of the server (e.g., `\"http://localhost:3000\"`). Required. */\n baseUrl: string;\n /** Preferred transport. Default `\"auto\"` (WS preferred, SSE fallback). */\n transport?: SubscriptionTransport;\n /** Max reconnect attempts (default 10). 0 disables reconnect. */\n maxReconnectAttempts?: number;\n /** Backoff strategy. Default exponential `min(30_000, 1000 * 2^attempt)` ms. */\n retryDelayMs?: (attempt: number) => number;\n /** Caller-supplied abort signal. Cancels the subscription entirely. */\n signal?: AbortSignal;\n /** Additional fetch-style headers (e.g., `Authorization`). */\n headers?: Record<string, string>;\n}\n\nconst defaultRetry = (attempt: number) => Math.min(30_000, 1000 * 2 ** attempt);\n\n/**\n * Subscribe to a typed subscription. Yields values produced by the server\n * handler. On disconnect with reconnect enabled, transparently re-establishes\n * the connection and forwards `lastEventId` from the last received tracked\n * envelope so the server handler can resume.\n *\n * @public\n */\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: G8 subscribe orchestrates reconnect + transport switch + resume — refactor candidate tracked in subscription/theokit-subscribe.ts:52 followup\nexport async function* subscribe<TInput, TOutput>(\n name: string,\n input: TInput,\n opts: SubscribeOptions,\n): AsyncGenerator<TOutput, void, void> {\n if (typeof name !== \"string\" || name.length === 0) {\n throw new SubscriptionError(\"Theokit.subscribe: name must be a non-empty string\", {\n code: \"subscribe_name_invalid\",\n });\n }\n if (opts === null || typeof opts !== \"object\" || typeof opts.baseUrl !== \"string\") {\n throw new SubscriptionError(\"Theokit.subscribe: opts.baseUrl is required\", {\n code: \"subscribe_baseUrl_missing\",\n });\n }\n const transport = opts.transport ?? \"auto\";\n const maxReconnects = opts.maxReconnectAttempts ?? 10;\n const retry = opts.retryDelayMs ?? defaultRetry;\n\n let lastEventId: string | undefined;\n let attempt = 0;\n\n while (true) {\n if (opts.signal?.aborted) return;\n try {\n const inputWithCursor = mergeLastEventId(input, lastEventId);\n const chosen = await selectTransport(transport, name, opts);\n if (chosen === \"ws\") {\n for await (const out of openWs<TOutput>(name, inputWithCursor, opts)) {\n if (out.lastEventId !== undefined) lastEventId = out.lastEventId;\n attempt = 0; // reset backoff on successful frame\n yield out.value;\n }\n } else {\n for await (const out of openSse<TOutput>(name, inputWithCursor, opts)) {\n if (out.lastEventId !== undefined) lastEventId = out.lastEventId;\n attempt = 0;\n yield out.value;\n }\n }\n // Clean end-of-stream — no reconnect.\n return;\n } catch (cause) {\n if (opts.signal?.aborted) return;\n if (maxReconnects === 0 || attempt >= maxReconnects) {\n if (cause instanceof SubscriptionError) throw cause;\n throw new SubscriptionDisconnectError(\n `subscription \"${name}\" disconnected; reconnect exhausted`,\n { cause },\n );\n }\n const delay = retry(attempt);\n attempt++;\n await sleep(delay, opts.signal);\n }\n }\n}\n\ninterface FrameOut<T> {\n readonly value: T;\n readonly lastEventId?: string;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: openSse parses framed SSE stream with abort/error/retry branches — refactor candidate\nasync function* openSse<T>(\n name: string,\n input: unknown,\n opts: SubscribeOptions,\n): AsyncIterable<FrameOut<T>> {\n const url = `${stripTrailingSlash(opts.baseUrl)}/api/subscriptions/${encodeURIComponent(name)}?input=${encodeURIComponent(JSON.stringify(input))}`;\n const res = await fetch(url, {\n method: \"GET\",\n headers: {\n accept: \"text/event-stream\",\n ...(opts.headers ?? {}),\n },\n ...(opts.signal !== undefined ? { signal: opts.signal } : {}),\n });\n if (!res.ok || res.body === null) {\n throw new SubscriptionError(`SSE subscribe failed: HTTP ${res.status} ${res.statusText}`, {\n code: \"sse_http_error\",\n });\n }\n const events = parseSseW3C(streamToAsyncIterable(res.body));\n for await (const ev of events) {\n if (ev.event === \"end\") return;\n if (ev.event === \"error\") {\n throw new SubscriptionError(`SSE server emitted error: ${ev.data ?? \"(no body)\"}`, {\n code: \"sse_server_error\",\n });\n }\n if (ev.event === \"connected\") continue;\n if (ev.data === undefined) continue;\n const parsedValue = safeJsonParse<T>(ev.data);\n if (parsedValue === undefined) continue;\n yield {\n value: parsedValue,\n ...(ev.id !== undefined ? { lastEventId: ev.id } : {}),\n };\n }\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: openWs orchestrates WS lifecycle + envelope decode + cleanup — refactor candidate\nasync function* openWs<T>(\n name: string,\n input: unknown,\n opts: SubscribeOptions,\n): AsyncIterable<FrameOut<T>> {\n const baseUrl = stripTrailingSlash(opts.baseUrl);\n const wsUrl = baseUrl\n .replace(/^http:/, \"ws:\")\n .replace(/^https:/, \"wss:\")\n .concat(\"/api/ws\");\n\n const WS = (globalThis as { WebSocket?: typeof WebSocket }).WebSocket;\n if (WS === undefined) {\n throw new SubscriptionError(\n \"Theokit.subscribe(transport='ws'): no global WebSocket available. Use Node >=22 or install 'ws' as a runtime dep + assign to globalThis.WebSocket.\",\n { code: \"ws_global_missing\" },\n );\n }\n const ws = new WS(wsUrl);\n\n // Set up async iterator-like state.\n const incoming: WireFrame[] = [];\n // biome-ignore lint/suspicious/noConfusingVoidType: idiomatic event-callback signature; refactoring to undefined would mask the no-value semantics\n let waiter: ((value: void) => void) | null = null;\n let closed = false;\n let closeError: Error | undefined;\n\n ws.addEventListener(\"message\", (ev: MessageEvent) => {\n const data = typeof ev.data === \"string\" ? ev.data : \"\";\n const frame = safeJsonParse<WireFrame>(data);\n if (frame !== undefined) {\n incoming.push(frame);\n if (waiter !== null) {\n waiter();\n waiter = null;\n }\n }\n });\n ws.addEventListener(\"close\", () => {\n closed = true;\n if (waiter !== null) {\n waiter();\n waiter = null;\n }\n });\n ws.addEventListener(\"error\", () => {\n closed = true;\n closeError = new Error(\"WebSocket error\");\n if (waiter !== null) {\n waiter();\n waiter = null;\n }\n });\n\n await new Promise<void>((resolve, reject) => {\n ws.addEventListener(\"open\", () => resolve(), { once: true });\n ws.addEventListener(\"error\", () => reject(new Error(\"WS connect failed\")), { once: true });\n });\n\n // Send subscribe request after handshake.\n ws.send(JSON.stringify({ kind: \"subscribe\", name, input }));\n\n if (opts.signal !== undefined) {\n opts.signal.addEventListener(\"abort\", () => ws.close(), { once: true });\n }\n\n try {\n while (true) {\n if (incoming.length === 0) {\n if (closed) {\n if (closeError !== undefined) throw closeError;\n return;\n }\n await new Promise<void>((resolve) => {\n waiter = resolve;\n });\n continue;\n }\n const frame = incoming.shift() as WireFrame;\n if (frame.type === \"end\") return;\n if (frame.type === \"error\") {\n throw new SubscriptionError(\n `WS server emitted error: ${frame.error?.message ?? \"(unknown)\"}`,\n { code: \"ws_server_error\" },\n );\n }\n const value = frame.data as T;\n yield {\n value,\n ...(frame.id !== undefined ? { lastEventId: frame.id } : {}),\n };\n }\n } finally {\n try {\n ws.close();\n } catch {\n /* ignore */\n }\n }\n}\n\nasync function selectTransport(\n pref: SubscriptionTransport,\n _name: string,\n _opts: SubscribeOptions,\n): Promise<\"ws\" | \"sse\"> {\n if (pref === \"ws\") return \"ws\";\n if (pref === \"sse\") return \"sse\";\n // auto — prefer WS if available, else SSE.\n if (typeof (globalThis as { WebSocket?: unknown }).WebSocket === \"function\") {\n return \"ws\";\n }\n return \"sse\";\n}\n\nfunction mergeLastEventId(input: unknown, lastEventId: string | undefined): unknown {\n if (lastEventId === undefined) return input;\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n // Cannot merge into primitive — return as-is.\n return input;\n }\n return { ...(input as object), lastEventId };\n}\n\nfunction stripTrailingSlash(s: string): string {\n return s.endsWith(\"/\") ? s.slice(0, -1) : s;\n}\n\nfunction safeJsonParse<T>(s: string): T | undefined {\n try {\n return JSON.parse(s) as T;\n } catch {\n return undefined;\n }\n}\n\nasync function* streamToAsyncIterable(\n stream: ReadableStream<Uint8Array>,\n): AsyncIterable<Uint8Array> {\n const reader = stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) return;\n if (value !== undefined) yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new Error(\"aborted\"));\n return;\n }\n const t = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(t);\n reject(new Error(\"aborted\"));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/subscription/define-subscription.ts","../../src/subscription/internal/sse-parser.ts","../../src/subscription/types.ts","../../src/subscription/theokit-subscribe.ts"],"names":["TheokitAgentError"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * `defineSubscription` DSL (G8 public API) — `@theokit/sdk`.\n *\n * Per ADR D426 (AsyncGenerator handler + Zod input/output schemas).\n *\n * @public\n */\n\nimport type { SubscriptionCtx, SubscriptionDescriptor, TrackedEnvelope, ZodLike } from \"./types.js\";\n\n/**\n * Options accepted by {@link defineSubscription}.\n *\n * @public\n */\nexport interface DefineSubscriptionOptions<TInput, TOutput> {\n /** Optional explicit name. Falls back to filename derivation by the scanner. */\n name?: string;\n /** Zod schema validating subscription input. Required (typed RPC contract). */\n input: ZodLike<TInput>;\n /** Zod schema describing each output frame. Informational; not enforced per-frame. */\n output: ZodLike<TOutput>;\n /**\n * Handler that produces the subscription stream.\n *\n * Receives the validated input + {@link SubscriptionCtx}. Yielding a value\n * emits a plain output frame. Yielding a `tracked(id, payload)` envelope\n * additionally advertises a resume token to the client so reconnects can\n * resume from that point.\n */\n handler: (\n input: TInput,\n ctx: SubscriptionCtx,\n ) => AsyncGenerator<TOutput | TrackedEnvelope<TOutput>, void, void>;\n}\n\n/**\n * Define a typed subscription. Pair with `Theokit.subscribe(name, input)`\n * on the client side.\n *\n * Per ADR D426 — handler is `AsyncGenerator<TOutput | TrackedEnvelope<TOutput>>`.\n * The runtime validates input via `opts.input.safeParse` BEFORE invoking the\n * handler; failure throws {@link import('./types.js').SubscriptionInputError}.\n *\n * @example\n * ```ts\n * import { Subscription } from \"@theokit/sdk/subscription\";\n * import { z } from \"zod\";\n *\n * export default Subscription.create({\n * input: z.object({ topic: z.string() }),\n * output: z.object({ message: z.string(), ts: z.number() }),\n * async *handler(input, ctx) {\n * let cursor = ctx.lastEventId ?? \"0\";\n * while (!ctx.signal.aborted) {\n * const msgs = await fetchMessagesSince(input.topic, cursor);\n * for (const m of msgs) {\n * cursor = m.id;\n * yield ctx.tracked(m.id, { message: m.body, ts: m.ts });\n * }\n * await sleep(1000);\n * }\n * },\n * });\n * ```\n *\n * @public\n */\nexport function defineSubscription<TInput, TOutput>(\n opts: DefineSubscriptionOptions<TInput, TOutput>,\n): SubscriptionDescriptor<TInput, TOutput> {\n if (opts === null || typeof opts !== \"object\") {\n throw new TypeError(\"defineSubscription: options object is required\");\n }\n if (opts.input === undefined || typeof opts.input.safeParse !== \"function\") {\n throw new TypeError(\"defineSubscription: opts.input must be a Zod schema (or ZodLike)\");\n }\n if (opts.output === undefined || typeof opts.output.safeParse !== \"function\") {\n throw new TypeError(\"defineSubscription: opts.output must be a Zod schema (or ZodLike)\");\n }\n if (typeof opts.handler !== \"function\") {\n throw new TypeError(\"defineSubscription: opts.handler must be an async generator function\");\n }\n return {\n ...(opts.name !== undefined ? { name: opts.name } : {}),\n input: opts.input,\n output: opts.output,\n handler: opts.handler,\n };\n}\n\n/** SE36 — `Subscription.create` replaces `defineSubscription` (ADR 0015). @public */\nexport class Subscription {\n private constructor() {}\n static create<TInput, TOutput>(\n opts: DefineSubscriptionOptions<TInput, TOutput>,\n ): SubscriptionDescriptor<TInput, TOutput> {\n return defineSubscription(opts);\n }\n}\n","/**\n * W3C SSE parser (G8 internal) — `@theokit/sdk`.\n *\n * Per ADR D428. Reads from `ReadableStream<Uint8Array>` or async iterable of\n * UTF-8 chunks; yields parsed {@link SSEvent} objects per W3C SSE spec.\n *\n * Independent of `internal/llm/sse.ts:parseSseStream` (LLM-specific a peer vendor AI\n * Data Stream v1; locked by D38). This parser handles the `id:` field needed\n * for tracked envelopes (G8 resume mechanism), which the LLM parser ignores.\n *\n * Reference: https://html.spec.whatwg.org/multipage/server-sent-events.html\n *\n * @internal\n */\n\nimport type { SSEvent } from \"./sse-encoder.js\";\n\nconst decoder = new TextDecoder(\"utf-8\");\n\n/**\n * Parse an async iterable of UTF-8 byte chunks into a stream of SSE events.\n *\n * Implements the W3C event stream parser:\n * - Lines are split by `\\n`, `\\r\\n`, or `\\r`\n * - Events are dispatched on blank line (no `:` and no field name)\n * - Fields: `event`, `data` (multi-line concat with `\\n`), `id`, `retry`\n * - Lines starting with `:` are comments (ignored, except dispatched as `comment`)\n * - Unknown fields silently ignored per spec\n *\n * Empty events (no fields) are NOT dispatched per spec.\n *\n * @internal\n */\nexport async function* parseSseW3C(\n source: AsyncIterable<Uint8Array>,\n): AsyncGenerator<SSEvent, void, void> {\n let buffer = \"\";\n let eventName: string | undefined;\n let dataLines: string[] = [];\n let id: string | undefined;\n let retry: number | undefined;\n let commentLines: string[] = [];\n let hasField = false;\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: dispatch builds SSEvent from per-field state per W3C spec — refactor candidate\n const dispatch = (): SSEvent | null => {\n if (!hasField) {\n // Blank line with no preceding fields → reset state, no dispatch (per spec § 9.2.6)\n eventName = undefined;\n dataLines = [];\n id = undefined;\n retry = undefined;\n commentLines = [];\n return null;\n }\n const chunk: SSEvent = {};\n if (eventName !== undefined) (chunk as { event?: string }).event = eventName;\n if (dataLines.length > 0) (chunk as { data?: string }).data = dataLines.join(\"\\n\");\n if (id !== undefined) (chunk as { id?: string }).id = id;\n if (retry !== undefined) (chunk as { retry?: number }).retry = retry;\n if (commentLines.length > 0) (chunk as { comment?: string }).comment = commentLines.join(\"\\n\");\n eventName = undefined;\n dataLines = [];\n id = undefined;\n retry = undefined;\n commentLines = [];\n hasField = false;\n return chunk;\n };\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: handleLine dispatches across all SSE field kinds per W3C spec — refactor candidate\n const handleLine = (line: string): SSEvent | null => {\n if (line === \"\") {\n return dispatch();\n }\n if (line.startsWith(\":\")) {\n // Comment line — per spec ignored, but we surface it for keepalive visibility.\n commentLines.push(line.slice(1).replace(/^ /, \"\"));\n hasField = true;\n return null;\n }\n const colonIdx = line.indexOf(\":\");\n let field: string;\n let value: string;\n if (colonIdx === -1) {\n field = line;\n value = \"\";\n } else {\n field = line.slice(0, colonIdx);\n value = line.slice(colonIdx + 1);\n // Strip ONE leading space if present (per spec § 9.2.6)\n if (value.startsWith(\" \")) value = value.slice(1);\n }\n switch (field) {\n case \"event\":\n eventName = value;\n hasField = true;\n break;\n case \"data\":\n dataLines.push(value);\n hasField = true;\n break;\n case \"id\":\n // Per spec: id with NULL is ignored\n if (!value.includes(\"\\0\")) {\n id = value;\n hasField = true;\n }\n break;\n case \"retry\":\n if (/^\\d+$/.test(value)) {\n retry = Number.parseInt(value, 10);\n hasField = true;\n }\n break;\n default:\n // Unknown field — ignored per spec\n break;\n }\n return null;\n };\n\n for await (const bytes of source) {\n // Normalize CRLF / CR to LF then split\n buffer += decoder.decode(bytes, { stream: true }).replace(/\\r\\n|\\r/g, \"\\n\");\n let idx: number;\n // biome-ignore lint/suspicious/noAssignInExpressions: idiomatic while-assignment loop for buffered line parsing\n while ((idx = buffer.indexOf(\"\\n\")) !== -1) {\n const line = buffer.slice(0, idx);\n buffer = buffer.slice(idx + 1);\n const event = handleLine(line);\n if (event !== null) yield event;\n }\n }\n // Flush remaining buffer as a final line (no trailing newline case)\n buffer += decoder.decode();\n if (buffer.length > 0) {\n const event = handleLine(buffer);\n if (event !== null) yield event;\n }\n // Final dispatch in case last event lacked terminating blank line\n const tail = dispatch();\n if (tail !== null) yield tail;\n}\n","/**\n * Subscription type contract (G8 v1.7.0) — `@theokit/sdk`.\n *\n * Per ADRs D423 (resume token opaque), D424 (transport selection),\n * D426 (defineSubscription DSL shape).\n *\n * @public\n */\n\nimport { TheokitAgentError } from \"../errors.js\";\n\n/**\n * Transport selection for subscriptions.\n *\n * - `'ws'`: WebSocket (bidirectional). Required for inbound client→server frames.\n * v1.7 ships Node-canonical `ws` adapter; CF/Bun/Deno deferred to v1.8.x per ADR D425.\n * - `'sse'`: W3C Server-Sent Events (server→client only). Browser-native EventSource.\n * - `'auto'`: Prefer WS, fall back SSE on upgrade failure. Default.\n *\n * @public\n */\nexport type SubscriptionTransport = \"ws\" | \"sse\" | \"auto\";\n\n/**\n * Context passed to a subscription `handler` on each invocation.\n *\n * @public\n */\nexport interface SubscriptionCtx {\n /**\n * Opaque resume token forwarded by the client when reconnecting.\n * Handler defines its own semantics (monotonic int, ULID, timestamp,\n * encrypted cursor). SDK passes through unchanged. Per ADR D423.\n */\n readonly lastEventId?: string;\n\n /**\n * AbortSignal that fires when the subscription is cancelled\n * (client disconnect, consumer abort, server shutdown).\n * Handler MUST honor `signal.aborted` in long-running loops.\n */\n readonly signal: AbortSignal;\n\n /**\n * Stable identifier for the underlying transport connection.\n * Different from the subscription name — one connection may host\n * many subscriptions. Useful for logging / per-connection state.\n */\n readonly connectionId: string;\n\n /**\n * Force-close the underlying transport with optional WS close code + reason.\n * Used by consumer code (e.g., auth middleware revoking a session) to\n * terminate a subscription that should not continue.\n */\n disconnect(code?: number, reason?: string): void;\n\n /**\n * Helper to mint a tracked envelope `[id, payload]`.\n * Yielding tracked envelopes lets the client advance `lastEventId`\n * so reconnects can resume from that point.\n */\n tracked<TPayload>(id: string, payload: TPayload): TrackedEnvelope<TPayload>;\n}\n\n/**\n * Tracked envelope: `[id, payload]` tuple yielded by subscription handlers\n * to advertise the resume token associated with the payload.\n *\n * The encoder writes the `id` as an SSE `id:` field or WS payload metadata\n * so the client can echo it back on reconnect (`input.lastEventId`).\n *\n * Per ADR D423.\n *\n * @public\n */\nexport type TrackedEnvelope<T> = readonly [id: string, payload: T];\n\n/**\n * Type guard for {@link TrackedEnvelope}.\n *\n * @public\n */\nexport function isTrackedEnvelope(value: unknown): value is TrackedEnvelope<unknown> {\n return Array.isArray(value) && value.length === 2 && typeof value[0] === \"string\";\n}\n\n/**\n * Mint a tracked envelope. Equivalent to `[id, payload] as const`,\n * exported as a function so consumers don't repeat the tuple cast.\n *\n * @public\n */\nexport function tracked<T>(id: string, payload: T): TrackedEnvelope<T> {\n if (typeof id !== \"string\" || id.length === 0) {\n throw new TypeError(\"tracked(): id must be a non-empty string\");\n }\n return [id, payload] as const;\n}\n\n/**\n * Base error for the subscription subsystem. Extends {@link TheokitAgentError}\n * so existing `instanceof TheokitAgentError` branches keep working.\n *\n * @public\n */\nexport class SubscriptionError extends TheokitAgentError {\n override readonly name: string = \"SubscriptionError\";\n\n constructor(message: string, options: { code?: string; cause?: unknown } = {}) {\n super(message, { ...options, isRetryable: false });\n }\n}\n\n/**\n * Thrown when subscription input fails Zod schema validation.\n *\n * @public\n */\nexport class SubscriptionInputError extends SubscriptionError {\n override readonly name: string = \"SubscriptionInputError\";\n\n readonly issues: unknown;\n\n constructor(message: string, options: { issues: unknown; cause?: unknown }) {\n super(message, { code: \"subscription_input_invalid\", cause: options.cause });\n this.issues = options.issues;\n }\n}\n\n/**\n * Thrown when a subscription transport disconnects unexpectedly\n * AND the client did not opt out of reconnect.\n *\n * @public\n */\nexport class SubscriptionDisconnectError extends SubscriptionError {\n override readonly name: string = \"SubscriptionDisconnectError\";\n\n readonly closeCode?: number;\n readonly closeReason?: string;\n\n constructor(\n message: string,\n options: { closeCode?: number; closeReason?: string; cause?: unknown } = {},\n ) {\n super(message, { code: \"subscription_disconnected\", cause: options.cause });\n if (options.closeCode !== undefined) this.closeCode = options.closeCode;\n if (options.closeReason !== undefined) this.closeReason = options.closeReason;\n }\n}\n\n/**\n * Descriptor returned by {@link Subscription.create}. Carries the typed\n * input/output Zod schemas + handler factory.\n *\n * @public\n */\nexport interface SubscriptionDescriptor<TInput = unknown, TOutput = unknown> {\n /** Optional explicit name; the runtime may also derive name from file path. */\n readonly name?: string;\n /** Zod schema for the subscription input. Validated at dispatch boundary. */\n readonly input: ZodLike<TInput>;\n /** Zod schema for each output frame (informational; not enforced per-frame). */\n readonly output: ZodLike<TOutput>;\n /** Async handler that yields output frames (or tracked envelopes). */\n readonly handler: (\n input: TInput,\n ctx: SubscriptionCtx,\n ) => AsyncGenerator<TOutput | TrackedEnvelope<TOutput>, void, void>;\n}\n\n/**\n * Minimal structural Zod type used to avoid hard peer-dep import.\n * Mirrors the surface used by other SDK modules (e.g., `define-tool.ts`).\n *\n * Emitted rather than erased: it appears in the signature of `defineSubscription`, which\n * `@theokit/sdk/subscription` publishes, so a consumer's type-aware lint has to be able to\n * resolve it.\n */\nexport interface ZodLike<T> {\n safeParse(value: unknown): { success: true; data: T } | { success: false; error: unknown };\n parse(value: unknown): T;\n}\n","/**\n * `Theokit.subscribe` client (G8 public API) — `@theokit/sdk`.\n *\n * Per ADR D427 (Theokit.subscribe namespace) + D424 (transport selection)\n * + D423 (lastEventId opaque propagation).\n *\n * Returns an AsyncGenerator that yields server-sent values. Transparent\n * reconnect with exponential backoff. Propagates `lastEventId` from the last\n * received tracked envelope on each reconnect attempt.\n *\n * @public\n */\n\nimport { parseSseW3C } from \"./internal/sse-parser.js\";\nimport type { WireFrame } from \"./internal/subscription-runtime.js\";\nimport {\n SubscriptionDisconnectError,\n SubscriptionError,\n type SubscriptionTransport,\n} from \"./types.js\";\n\n/**\n * Options accepted by `Theokit.subscribe(name, input, opts?)`.\n *\n * @public\n */\nexport interface SubscribeOptions {\n /** Base URL of the server (e.g., `\"http://localhost:3000\"`). Required. */\n baseUrl: string;\n /** Preferred transport. Default `\"auto\"` (WS preferred, SSE fallback). */\n transport?: SubscriptionTransport;\n /** Max reconnect attempts (default 10). 0 disables reconnect. */\n maxReconnectAttempts?: number;\n /** Backoff strategy. Default exponential `min(30_000, 1000 * 2^attempt)` ms. */\n retryDelayMs?: (attempt: number) => number;\n /** Caller-supplied abort signal. Cancels the subscription entirely. */\n signal?: AbortSignal;\n /** Additional fetch-style headers (e.g., `Authorization`). */\n headers?: Record<string, string>;\n /**\n * Override the SSE transport's `fetch`. Defaults to `globalThis.fetch`.\n * Lets a consumer supply a proxying agent or instrumented fetch without\n * mutating the runtime global.\n */\n fetch?: typeof globalThis.fetch;\n /**\n * Override the WS transport's `WebSocket` constructor. Defaults to\n * `globalThis.WebSocket`. Lets a consumer polyfill WS on a runtime that\n * lacks it, or supply an instrumented implementation, without mutating\n * the runtime global.\n */\n WebSocket?: typeof WebSocket;\n}\n\nconst defaultRetry = (attempt: number) => Math.min(30_000, 1000 * 2 ** attempt);\n\n/**\n * Subscribe to a typed subscription. Yields values produced by the server\n * handler. On disconnect with reconnect enabled, transparently re-establishes\n * the connection and forwards `lastEventId` from the last received tracked\n * envelope so the server handler can resume.\n *\n * @public\n */\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: G8 subscribe orchestrates reconnect + transport switch + resume — refactor candidate tracked in subscription/theokit-subscribe.ts:52 followup\nexport async function* subscribe<TInput, TOutput>(\n name: string,\n input: TInput,\n opts: SubscribeOptions,\n): AsyncGenerator<TOutput, void, void> {\n if (typeof name !== \"string\" || name.length === 0) {\n throw new SubscriptionError(\"Theokit.subscribe: name must be a non-empty string\", {\n code: \"subscribe_name_invalid\",\n });\n }\n if (opts === null || typeof opts !== \"object\" || typeof opts.baseUrl !== \"string\") {\n throw new SubscriptionError(\"Theokit.subscribe: opts.baseUrl is required\", {\n code: \"subscribe_baseUrl_missing\",\n });\n }\n const transport = opts.transport ?? \"auto\";\n const maxReconnects = opts.maxReconnectAttempts ?? 10;\n const retry = opts.retryDelayMs ?? defaultRetry;\n\n let lastEventId: string | undefined;\n let attempt = 0;\n\n while (true) {\n if (opts.signal?.aborted) return;\n try {\n const inputWithCursor = mergeLastEventId(input, lastEventId);\n const chosen = await selectTransport(transport, name, opts);\n if (chosen === \"ws\") {\n for await (const out of openWs<TOutput>(name, inputWithCursor, opts)) {\n if (out.lastEventId !== undefined) lastEventId = out.lastEventId;\n attempt = 0; // reset backoff on successful frame\n yield out.value;\n }\n } else {\n for await (const out of openSse<TOutput>(name, inputWithCursor, opts)) {\n if (out.lastEventId !== undefined) lastEventId = out.lastEventId;\n attempt = 0;\n yield out.value;\n }\n }\n // Clean end-of-stream — no reconnect.\n return;\n } catch (cause) {\n if (opts.signal?.aborted) return;\n if (maxReconnects === 0 || attempt >= maxReconnects) {\n if (cause instanceof SubscriptionError) throw cause;\n throw new SubscriptionDisconnectError(\n `subscription \"${name}\" disconnected; reconnect exhausted`,\n { cause },\n );\n }\n const delay = retry(attempt);\n attempt++;\n await sleep(delay, opts.signal);\n }\n }\n}\n\ninterface FrameOut<T> {\n readonly value: T;\n readonly lastEventId?: string;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: openSse parses framed SSE stream with abort/error/retry branches — refactor candidate\nasync function* openSse<T>(\n name: string,\n input: unknown,\n opts: SubscribeOptions,\n): AsyncIterable<FrameOut<T>> {\n const url = `${stripTrailingSlash(opts.baseUrl)}/api/subscriptions/${encodeURIComponent(name)}?input=${encodeURIComponent(JSON.stringify(input))}`;\n const fetchFn = opts.fetch ?? globalThis.fetch;\n const res = await fetchFn(url, {\n method: \"GET\",\n headers: {\n accept: \"text/event-stream\",\n ...(opts.headers ?? {}),\n },\n ...(opts.signal !== undefined ? { signal: opts.signal } : {}),\n });\n if (!res.ok || res.body === null) {\n throw new SubscriptionError(`SSE subscribe failed: HTTP ${res.status} ${res.statusText}`, {\n code: \"sse_http_error\",\n });\n }\n const events = parseSseW3C(streamToAsyncIterable(res.body));\n for await (const ev of events) {\n if (ev.event === \"end\") return;\n if (ev.event === \"error\") {\n throw new SubscriptionError(`SSE server emitted error: ${ev.data ?? \"(no body)\"}`, {\n code: \"sse_server_error\",\n });\n }\n if (ev.event === \"connected\") continue;\n if (ev.data === undefined) continue;\n const parsedValue = safeJsonParse<T>(ev.data);\n if (parsedValue === undefined) continue;\n yield {\n value: parsedValue,\n ...(ev.id !== undefined ? { lastEventId: ev.id } : {}),\n };\n }\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: openWs orchestrates WS lifecycle + envelope decode + cleanup — refactor candidate\nasync function* openWs<T>(\n name: string,\n input: unknown,\n opts: SubscribeOptions,\n): AsyncIterable<FrameOut<T>> {\n const baseUrl = stripTrailingSlash(opts.baseUrl);\n const wsUrl = baseUrl\n .replace(/^http:/, \"ws:\")\n .replace(/^https:/, \"wss:\")\n .concat(\"/api/ws\");\n\n const WS = opts.WebSocket ?? (globalThis as { WebSocket?: typeof WebSocket }).WebSocket;\n if (WS === undefined) {\n throw new SubscriptionError(\n \"Theokit.subscribe(transport='ws'): no global WebSocket available. Use Node >=22 or install 'ws' as a runtime dep + assign to globalThis.WebSocket, or pass opts.WebSocket.\",\n { code: \"ws_global_missing\" },\n );\n }\n const ws = new WS(wsUrl);\n\n // Set up async iterator-like state.\n const incoming: WireFrame[] = [];\n // biome-ignore lint/suspicious/noConfusingVoidType: idiomatic event-callback signature; refactoring to undefined would mask the no-value semantics\n let waiter: ((value: void) => void) | null = null;\n let closed = false;\n let closeError: Error | undefined;\n\n ws.addEventListener(\"message\", (ev: MessageEvent) => {\n const data = typeof ev.data === \"string\" ? ev.data : \"\";\n const frame = safeJsonParse<WireFrame>(data);\n if (frame !== undefined) {\n incoming.push(frame);\n if (waiter !== null) {\n waiter();\n waiter = null;\n }\n }\n });\n ws.addEventListener(\"close\", () => {\n closed = true;\n if (waiter !== null) {\n waiter();\n waiter = null;\n }\n });\n ws.addEventListener(\"error\", () => {\n closed = true;\n closeError = new Error(\"WebSocket error\");\n if (waiter !== null) {\n waiter();\n waiter = null;\n }\n });\n\n await new Promise<void>((resolve, reject) => {\n ws.addEventListener(\"open\", () => resolve(), { once: true });\n ws.addEventListener(\"error\", () => reject(new Error(\"WS connect failed\")), { once: true });\n });\n\n // Send subscribe request after handshake.\n ws.send(JSON.stringify({ kind: \"subscribe\", name, input }));\n\n if (opts.signal !== undefined) {\n opts.signal.addEventListener(\"abort\", () => ws.close(), { once: true });\n }\n\n try {\n while (true) {\n if (incoming.length === 0) {\n if (closed) {\n if (closeError !== undefined) throw closeError;\n return;\n }\n await new Promise<void>((resolve) => {\n waiter = resolve;\n });\n continue;\n }\n const frame = incoming.shift() as WireFrame;\n if (frame.type === \"end\") return;\n if (frame.type === \"error\") {\n throw new SubscriptionError(\n `WS server emitted error: ${frame.error?.message ?? \"(unknown)\"}`,\n { code: \"ws_server_error\" },\n );\n }\n const value = frame.data as T;\n yield {\n value,\n ...(frame.id !== undefined ? { lastEventId: frame.id } : {}),\n };\n }\n } finally {\n try {\n ws.close();\n } catch {\n /* ignore */\n }\n }\n}\n\nasync function selectTransport(\n pref: SubscriptionTransport,\n _name: string,\n opts: SubscribeOptions,\n): Promise<\"ws\" | \"sse\"> {\n if (pref === \"ws\") return \"ws\";\n if (pref === \"sse\") return \"sse\";\n // auto — prefer WS if available (injected or global), else SSE.\n const WS = opts.WebSocket ?? (globalThis as { WebSocket?: unknown }).WebSocket;\n if (typeof WS === \"function\") {\n return \"ws\";\n }\n return \"sse\";\n}\n\nfunction mergeLastEventId(input: unknown, lastEventId: string | undefined): unknown {\n if (lastEventId === undefined) return input;\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n // Cannot merge into primitive — return as-is.\n return input;\n }\n return { ...(input as object), lastEventId };\n}\n\nfunction stripTrailingSlash(s: string): string {\n return s.endsWith(\"/\") ? s.slice(0, -1) : s;\n}\n\nfunction safeJsonParse<T>(s: string): T | undefined {\n try {\n return JSON.parse(s) as T;\n } catch {\n return undefined;\n }\n}\n\nasync function* streamToAsyncIterable(\n stream: ReadableStream<Uint8Array>,\n): AsyncIterable<Uint8Array> {\n const reader = stream.getReader();\n let finishedNaturally = false;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n finishedNaturally = true;\n return;\n }\n if (value !== undefined) yield value;\n }\n } finally {\n // B-131: `releaseLock()` alone detaches the reader WITHOUT canceling the stream (WHATWG\n // Streams spec) — the underlying `fetch` response body, and its socket, stays open until\n // something else cancels it or reads it to completion. A consumer that breaks out of the\n // subscription mid-stream (the ordinary shape: `for await ... break`) used to leave that\n // connection dangling. `cancel()` is a no-op once the stream is already closed, so it is safe\n // to call unconditionally on the early-exit path; skip it on natural completion, where the\n // stream is already done and canceling only risks surfacing a spurious rejection.\n if (!finishedNaturally) {\n try {\n await reader.cancel();\n } catch {\n /* best-effort cleanup — the caller's own error (if any) already takes precedence */\n }\n }\n reader.releaseLock();\n }\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new Error(\"aborted\"));\n return;\n }\n const t = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(t);\n reject(new Error(\"aborted\"));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { TheokitAgentError } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
import { TheokitAgentError } from '../chunk-IDCKSLYH.js';
|
|
2
|
+
import '../chunk-T7XEKOVW.js';
|
|
3
|
+
import '../chunk-T7O6K6PX.js';
|
|
3
4
|
|
|
4
5
|
// src/subscription/define-subscription.ts
|
|
5
6
|
function defineSubscription(opts) {
|
|
@@ -215,7 +216,8 @@ async function* subscribe(name, input, opts) {
|
|
|
215
216
|
}
|
|
216
217
|
async function* openSse(name, input, opts) {
|
|
217
218
|
const url = `${stripTrailingSlash(opts.baseUrl)}/api/subscriptions/${encodeURIComponent(name)}?input=${encodeURIComponent(JSON.stringify(input))}`;
|
|
218
|
-
const
|
|
219
|
+
const fetchFn = opts.fetch ?? globalThis.fetch;
|
|
220
|
+
const res = await fetchFn(url, {
|
|
219
221
|
method: "GET",
|
|
220
222
|
headers: {
|
|
221
223
|
accept: "text/event-stream",
|
|
@@ -249,10 +251,10 @@ async function* openSse(name, input, opts) {
|
|
|
249
251
|
async function* openWs(name, input, opts) {
|
|
250
252
|
const baseUrl = stripTrailingSlash(opts.baseUrl);
|
|
251
253
|
const wsUrl = baseUrl.replace(/^http:/, "ws:").replace(/^https:/, "wss:").concat("/api/ws");
|
|
252
|
-
const WS = globalThis.WebSocket;
|
|
254
|
+
const WS = opts.WebSocket ?? globalThis.WebSocket;
|
|
253
255
|
if (WS === void 0) {
|
|
254
256
|
throw new SubscriptionError(
|
|
255
|
-
"Theokit.subscribe(transport='ws'): no global WebSocket available. Use Node >=22 or install 'ws' as a runtime dep + assign to globalThis.WebSocket.",
|
|
257
|
+
"Theokit.subscribe(transport='ws'): no global WebSocket available. Use Node >=22 or install 'ws' as a runtime dep + assign to globalThis.WebSocket, or pass opts.WebSocket.",
|
|
256
258
|
{ code: "ws_global_missing" }
|
|
257
259
|
);
|
|
258
260
|
}
|
|
@@ -328,10 +330,11 @@ async function* openWs(name, input, opts) {
|
|
|
328
330
|
}
|
|
329
331
|
}
|
|
330
332
|
}
|
|
331
|
-
async function selectTransport(pref, _name,
|
|
333
|
+
async function selectTransport(pref, _name, opts) {
|
|
332
334
|
if (pref === "ws") return "ws";
|
|
333
335
|
if (pref === "sse") return "sse";
|
|
334
|
-
|
|
336
|
+
const WS = opts.WebSocket ?? globalThis.WebSocket;
|
|
337
|
+
if (typeof WS === "function") {
|
|
335
338
|
return "ws";
|
|
336
339
|
}
|
|
337
340
|
return "sse";
|
|
@@ -355,13 +358,23 @@ function safeJsonParse(s) {
|
|
|
355
358
|
}
|
|
356
359
|
async function* streamToAsyncIterable(stream) {
|
|
357
360
|
const reader = stream.getReader();
|
|
361
|
+
let finishedNaturally = false;
|
|
358
362
|
try {
|
|
359
363
|
while (true) {
|
|
360
364
|
const { done, value } = await reader.read();
|
|
361
|
-
if (done)
|
|
365
|
+
if (done) {
|
|
366
|
+
finishedNaturally = true;
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
362
369
|
if (value !== void 0) yield value;
|
|
363
370
|
}
|
|
364
371
|
} finally {
|
|
372
|
+
if (!finishedNaturally) {
|
|
373
|
+
try {
|
|
374
|
+
await reader.cancel();
|
|
375
|
+
} catch {
|
|
376
|
+
}
|
|
377
|
+
}
|
|
365
378
|
reader.releaseLock();
|
|
366
379
|
}
|
|
367
380
|
}
|