@recombine-ai/bosun 0.1.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/.svelte-kit/tsconfig.json +52 -0
- package/README.md +38 -0
- package/bin/bosun.js +90 -0
- package/build/client/_app/immutable/assets/0.CGZoSC08.css +1 -0
- package/build/client/_app/immutable/assets/0.CGZoSC08.css.br +0 -0
- package/build/client/_app/immutable/assets/0.CGZoSC08.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.ZYCb8BZl.css +1 -0
- package/build/client/_app/immutable/assets/3.ZYCb8BZl.css.br +3 -0
- package/build/client/_app/immutable/assets/3.ZYCb8BZl.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.f3T7i0UW.css +1 -0
- package/build/client/_app/immutable/assets/4.f3T7i0UW.css.br +0 -0
- package/build/client/_app/immutable/assets/4.f3T7i0UW.css.gz +0 -0
- package/build/client/_app/immutable/assets/Link.COHc7T1l.css +1 -0
- package/build/client/_app/immutable/assets/Link.COHc7T1l.css.br +0 -0
- package/build/client/_app/immutable/assets/Link.COHc7T1l.css.gz +0 -0
- package/build/client/_app/immutable/assets/codicon.DCmgc-ay.ttf +0 -0
- package/build/client/_app/immutable/assets/editor.BMIWPGx3.css +1 -0
- package/build/client/_app/immutable/assets/editor.BMIWPGx3.css.br +0 -0
- package/build/client/_app/immutable/assets/editor.BMIWPGx3.css.gz +0 -0
- package/build/client/_app/immutable/chunks/0cvrggvQ.js +6 -0
- package/build/client/_app/immutable/chunks/0cvrggvQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/0cvrggvQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/25W9uPmb.js +6 -0
- package/build/client/_app/immutable/chunks/25W9uPmb.js.br +0 -0
- package/build/client/_app/immutable/chunks/25W9uPmb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/4Ik7cdeQ.js +8 -0
- package/build/client/_app/immutable/chunks/4Ik7cdeQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/4Ik7cdeQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/5Rap-vPy.js +6 -0
- package/build/client/_app/immutable/chunks/5Rap-vPy.js.br +3 -0
- package/build/client/_app/immutable/chunks/5Rap-vPy.js.gz +0 -0
- package/build/client/_app/immutable/chunks/9Nygv5WR.js +9 -0
- package/build/client/_app/immutable/chunks/9Nygv5WR.js.br +0 -0
- package/build/client/_app/immutable/chunks/9Nygv5WR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B03wrqEc.js +6 -0
- package/build/client/_app/immutable/chunks/B03wrqEc.js.br +0 -0
- package/build/client/_app/immutable/chunks/B03wrqEc.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B5zXfXm9.js +6 -0
- package/build/client/_app/immutable/chunks/B5zXfXm9.js.br +0 -0
- package/build/client/_app/immutable/chunks/B5zXfXm9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B9Xyijhd.js +6 -0
- package/build/client/_app/immutable/chunks/B9Xyijhd.js.br +0 -0
- package/build/client/_app/immutable/chunks/B9Xyijhd.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BFG1Mk7z.js +6 -0
- package/build/client/_app/immutable/chunks/BFG1Mk7z.js.br +0 -0
- package/build/client/_app/immutable/chunks/BFG1Mk7z.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BIv9DU6q.js +303 -0
- package/build/client/_app/immutable/chunks/BIv9DU6q.js.br +0 -0
- package/build/client/_app/immutable/chunks/BIv9DU6q.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BKlk5iyT.js +6 -0
- package/build/client/_app/immutable/chunks/BKlk5iyT.js.br +0 -0
- package/build/client/_app/immutable/chunks/BKlk5iyT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BSkB5QuD.js +6 -0
- package/build/client/_app/immutable/chunks/BSkB5QuD.js.br +0 -0
- package/build/client/_app/immutable/chunks/BSkB5QuD.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BZvw7aKD.js +751 -0
- package/build/client/_app/immutable/chunks/BZvw7aKD.js.br +0 -0
- package/build/client/_app/immutable/chunks/BZvw7aKD.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B_c3zf-v.js +6 -0
- package/build/client/_app/immutable/chunks/B_c3zf-v.js.br +0 -0
- package/build/client/_app/immutable/chunks/B_c3zf-v.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B_fMsGYe.js +6 -0
- package/build/client/_app/immutable/chunks/B_fMsGYe.js.br +0 -0
- package/build/client/_app/immutable/chunks/B_fMsGYe.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BaJupSGV.js +6 -0
- package/build/client/_app/immutable/chunks/BaJupSGV.js.br +0 -0
- package/build/client/_app/immutable/chunks/BaJupSGV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BaLxmfj-.js +6 -0
- package/build/client/_app/immutable/chunks/BaLxmfj-.js.br +0 -0
- package/build/client/_app/immutable/chunks/BaLxmfj-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bc-ZgV77.js +6 -0
- package/build/client/_app/immutable/chunks/Bc-ZgV77.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bc-ZgV77.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Beal4i3M.js +6 -0
- package/build/client/_app/immutable/chunks/Beal4i3M.js.br +0 -0
- package/build/client/_app/immutable/chunks/Beal4i3M.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BfEKNvv3.js +7 -0
- package/build/client/_app/immutable/chunks/BfEKNvv3.js.br +0 -0
- package/build/client/_app/immutable/chunks/BfEKNvv3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bhzvs7bI.js +6 -0
- package/build/client/_app/immutable/chunks/Bhzvs7bI.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bhzvs7bI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bio4gycK.js +6 -0
- package/build/client/_app/immutable/chunks/Bio4gycK.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bio4gycK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BoFRg7Ot.js +6 -0
- package/build/client/_app/immutable/chunks/BoFRg7Ot.js.br +0 -0
- package/build/client/_app/immutable/chunks/BoFRg7Ot.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BppKCDc7.js +2 -0
- package/build/client/_app/immutable/chunks/BppKCDc7.js.br +0 -0
- package/build/client/_app/immutable/chunks/BppKCDc7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bqgm2twL.js +6 -0
- package/build/client/_app/immutable/chunks/Bqgm2twL.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bqgm2twL.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BrgZPUOV.js +6 -0
- package/build/client/_app/immutable/chunks/BrgZPUOV.js.br +0 -0
- package/build/client/_app/immutable/chunks/BrgZPUOV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BsTHnhdd.js +7 -0
- package/build/client/_app/immutable/chunks/BsTHnhdd.js.br +0 -0
- package/build/client/_app/immutable/chunks/BsTHnhdd.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BwHKvje2.js +1 -0
- package/build/client/_app/immutable/chunks/BwHKvje2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BwHKvje2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BzepE-td.js +6 -0
- package/build/client/_app/immutable/chunks/BzepE-td.js.br +0 -0
- package/build/client/_app/immutable/chunks/BzepE-td.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C5WLch3f.js +6 -0
- package/build/client/_app/immutable/chunks/C5WLch3f.js.br +0 -0
- package/build/client/_app/immutable/chunks/C5WLch3f.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CCSDG5nI.js +6 -0
- package/build/client/_app/immutable/chunks/CCSDG5nI.js.br +0 -0
- package/build/client/_app/immutable/chunks/CCSDG5nI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CDGzqUPQ.js +6 -0
- package/build/client/_app/immutable/chunks/CDGzqUPQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/CDGzqUPQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CDntyWJ8.js +6 -0
- package/build/client/_app/immutable/chunks/CDntyWJ8.js.br +0 -0
- package/build/client/_app/immutable/chunks/CDntyWJ8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CFKIUWau.js +6 -0
- package/build/client/_app/immutable/chunks/CFKIUWau.js.br +0 -0
- package/build/client/_app/immutable/chunks/CFKIUWau.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CFOPXBzS.js +6 -0
- package/build/client/_app/immutable/chunks/CFOPXBzS.js.br +0 -0
- package/build/client/_app/immutable/chunks/CFOPXBzS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CLLBncYj.js +6 -0
- package/build/client/_app/immutable/chunks/CLLBncYj.js.br +0 -0
- package/build/client/_app/immutable/chunks/CLLBncYj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/COyEY5Pt.js +7 -0
- package/build/client/_app/immutable/chunks/COyEY5Pt.js.br +0 -0
- package/build/client/_app/immutable/chunks/COyEY5Pt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CPajHgWi.js +6 -0
- package/build/client/_app/immutable/chunks/CPajHgWi.js.br +0 -0
- package/build/client/_app/immutable/chunks/CPajHgWi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CVwtpugi.js +6 -0
- package/build/client/_app/immutable/chunks/CVwtpugi.js.br +0 -0
- package/build/client/_app/immutable/chunks/CVwtpugi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CWP1LX-6.js +16 -0
- package/build/client/_app/immutable/chunks/CWP1LX-6.js.br +0 -0
- package/build/client/_app/immutable/chunks/CWP1LX-6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CWj6FrbW.js +1 -0
- package/build/client/_app/immutable/chunks/CWj6FrbW.js.br +0 -0
- package/build/client/_app/immutable/chunks/CWj6FrbW.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CX-rkNHf.js +6 -0
- package/build/client/_app/immutable/chunks/CX-rkNHf.js.br +0 -0
- package/build/client/_app/immutable/chunks/CX-rkNHf.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CX7tZMmh.js +8 -0
- package/build/client/_app/immutable/chunks/CX7tZMmh.js.br +0 -0
- package/build/client/_app/immutable/chunks/CX7tZMmh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CXOwvkN_.js +6 -0
- package/build/client/_app/immutable/chunks/CXOwvkN_.js.br +0 -0
- package/build/client/_app/immutable/chunks/CXOwvkN_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CaCSYZEr.js +6 -0
- package/build/client/_app/immutable/chunks/CaCSYZEr.js.br +0 -0
- package/build/client/_app/immutable/chunks/CaCSYZEr.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CdQndTaG.js +6 -0
- package/build/client/_app/immutable/chunks/CdQndTaG.js.br +0 -0
- package/build/client/_app/immutable/chunks/CdQndTaG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Ce3n6wWz.js +6 -0
- package/build/client/_app/immutable/chunks/Ce3n6wWz.js.br +0 -0
- package/build/client/_app/immutable/chunks/Ce3n6wWz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cg7bfA9N.js +6 -0
- package/build/client/_app/immutable/chunks/Cg7bfA9N.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cg7bfA9N.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cp1zYvxS.js +6 -0
- package/build/client/_app/immutable/chunks/Cp1zYvxS.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cp1zYvxS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CpIb_Oan.js +6 -0
- package/build/client/_app/immutable/chunks/CpIb_Oan.js.br +0 -0
- package/build/client/_app/immutable/chunks/CpIb_Oan.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cpb6xl2v.js +6 -0
- package/build/client/_app/immutable/chunks/Cpb6xl2v.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cpb6xl2v.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cphgjts3.js +6 -0
- package/build/client/_app/immutable/chunks/Cphgjts3.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cphgjts3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CwNk8-XU.js +6 -0
- package/build/client/_app/immutable/chunks/CwNk8-XU.js.br +0 -0
- package/build/client/_app/immutable/chunks/CwNk8-XU.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CyDODH-U.js +6 -0
- package/build/client/_app/immutable/chunks/CyDODH-U.js.br +0 -0
- package/build/client/_app/immutable/chunks/CyDODH-U.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CzKuDChf.js +6 -0
- package/build/client/_app/immutable/chunks/CzKuDChf.js.br +0 -0
- package/build/client/_app/immutable/chunks/CzKuDChf.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D-MeaMDU.js +6 -0
- package/build/client/_app/immutable/chunks/D-MeaMDU.js.br +0 -0
- package/build/client/_app/immutable/chunks/D-MeaMDU.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D3h14YRZ.js +8 -0
- package/build/client/_app/immutable/chunks/D3h14YRZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/D3h14YRZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D5C2fndG.js +6 -0
- package/build/client/_app/immutable/chunks/D5C2fndG.js.br +0 -0
- package/build/client/_app/immutable/chunks/D5C2fndG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DDwshQtU.js +6 -0
- package/build/client/_app/immutable/chunks/DDwshQtU.js.br +0 -0
- package/build/client/_app/immutable/chunks/DDwshQtU.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DHaeiCBh.js +6 -0
- package/build/client/_app/immutable/chunks/DHaeiCBh.js.br +0 -0
- package/build/client/_app/immutable/chunks/DHaeiCBh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DJ94EQYm.js +1 -0
- package/build/client/_app/immutable/chunks/DJ94EQYm.js.br +0 -0
- package/build/client/_app/immutable/chunks/DJ94EQYm.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DKBhwAQS.js +6 -0
- package/build/client/_app/immutable/chunks/DKBhwAQS.js.br +0 -0
- package/build/client/_app/immutable/chunks/DKBhwAQS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DSZPf7rp.js +6 -0
- package/build/client/_app/immutable/chunks/DSZPf7rp.js.br +0 -0
- package/build/client/_app/immutable/chunks/DSZPf7rp.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DSnIFjhj.js +9 -0
- package/build/client/_app/immutable/chunks/DSnIFjhj.js.br +0 -0
- package/build/client/_app/immutable/chunks/DSnIFjhj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DTECt2xU.js +6 -0
- package/build/client/_app/immutable/chunks/DTECt2xU.js.br +0 -0
- package/build/client/_app/immutable/chunks/DTECt2xU.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DXyYeYxl.js +6 -0
- package/build/client/_app/immutable/chunks/DXyYeYxl.js.br +0 -0
- package/build/client/_app/immutable/chunks/DXyYeYxl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dd3NCNK9.js +6 -0
- package/build/client/_app/immutable/chunks/Dd3NCNK9.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dd3NCNK9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DfzH4Xui.js +6 -0
- package/build/client/_app/immutable/chunks/DfzH4Xui.js.br +0 -0
- package/build/client/_app/immutable/chunks/DfzH4Xui.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DgyLZaXg.js +6 -0
- package/build/client/_app/immutable/chunks/DgyLZaXg.js.br +0 -0
- package/build/client/_app/immutable/chunks/DgyLZaXg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Di1E5kHZ.js +6 -0
- package/build/client/_app/immutable/chunks/Di1E5kHZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/Di1E5kHZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DkXc3qEp.js +6 -0
- package/build/client/_app/immutable/chunks/DkXc3qEp.js.br +0 -0
- package/build/client/_app/immutable/chunks/DkXc3qEp.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DnHyzjbg.js +6 -0
- package/build/client/_app/immutable/chunks/DnHyzjbg.js.br +0 -0
- package/build/client/_app/immutable/chunks/DnHyzjbg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DoKYQW6_.js +6 -0
- package/build/client/_app/immutable/chunks/DoKYQW6_.js.br +0 -0
- package/build/client/_app/immutable/chunks/DoKYQW6_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DrQuvNYM.js +6 -0
- package/build/client/_app/immutable/chunks/DrQuvNYM.js.br +0 -0
- package/build/client/_app/immutable/chunks/DrQuvNYM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Drc7WvVn.js +6 -0
- package/build/client/_app/immutable/chunks/Drc7WvVn.js.br +0 -0
- package/build/client/_app/immutable/chunks/Drc7WvVn.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DwJ7jVG9.js +8 -0
- package/build/client/_app/immutable/chunks/DwJ7jVG9.js.br +0 -0
- package/build/client/_app/immutable/chunks/DwJ7jVG9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DyP6w7ZV.js +6 -0
- package/build/client/_app/immutable/chunks/DyP6w7ZV.js.br +0 -0
- package/build/client/_app/immutable/chunks/DyP6w7ZV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/LXAHj1IR.js +6 -0
- package/build/client/_app/immutable/chunks/LXAHj1IR.js.br +0 -0
- package/build/client/_app/immutable/chunks/LXAHj1IR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Tw7wswEv.js +6 -0
- package/build/client/_app/immutable/chunks/Tw7wswEv.js.br +0 -0
- package/build/client/_app/immutable/chunks/Tw7wswEv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/YWi4-JPR.js +6 -0
- package/build/client/_app/immutable/chunks/YWi4-JPR.js.br +0 -0
- package/build/client/_app/immutable/chunks/YWi4-JPR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Zznr-cwX.js +6 -0
- package/build/client/_app/immutable/chunks/Zznr-cwX.js.br +0 -0
- package/build/client/_app/immutable/chunks/Zznr-cwX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/biVXCNdV.js +9 -0
- package/build/client/_app/immutable/chunks/biVXCNdV.js.br +0 -0
- package/build/client/_app/immutable/chunks/biVXCNdV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/dUCx_-0o.js +6 -0
- package/build/client/_app/immutable/chunks/dUCx_-0o.js.br +0 -0
- package/build/client/_app/immutable/chunks/dUCx_-0o.js.gz +0 -0
- package/build/client/_app/immutable/chunks/deUWdS0T.js +6 -0
- package/build/client/_app/immutable/chunks/deUWdS0T.js.br +0 -0
- package/build/client/_app/immutable/chunks/deUWdS0T.js.gz +0 -0
- package/build/client/_app/immutable/chunks/evsPIoF1.js +15 -0
- package/build/client/_app/immutable/chunks/evsPIoF1.js.br +0 -0
- package/build/client/_app/immutable/chunks/evsPIoF1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/i9-g7ZhI.js +6 -0
- package/build/client/_app/immutable/chunks/i9-g7ZhI.js.br +0 -0
- package/build/client/_app/immutable/chunks/i9-g7ZhI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/iYdxUtet.js +6 -0
- package/build/client/_app/immutable/chunks/iYdxUtet.js.br +0 -0
- package/build/client/_app/immutable/chunks/iYdxUtet.js.gz +0 -0
- package/build/client/_app/immutable/chunks/jKjWACjA.js +1 -0
- package/build/client/_app/immutable/chunks/jKjWACjA.js.br +0 -0
- package/build/client/_app/immutable/chunks/jKjWACjA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/nJIPv2kB.js +3 -0
- package/build/client/_app/immutable/chunks/nJIPv2kB.js.br +0 -0
- package/build/client/_app/immutable/chunks/nJIPv2kB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/nf6ki56Z.js +6 -0
- package/build/client/_app/immutable/chunks/nf6ki56Z.js.br +0 -0
- package/build/client/_app/immutable/chunks/nf6ki56Z.js.gz +0 -0
- package/build/client/_app/immutable/chunks/pnP8ivHi.js +6 -0
- package/build/client/_app/immutable/chunks/pnP8ivHi.js.br +0 -0
- package/build/client/_app/immutable/chunks/pnP8ivHi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/rUNN04Wq.js +6 -0
- package/build/client/_app/immutable/chunks/rUNN04Wq.js.br +0 -0
- package/build/client/_app/immutable/chunks/rUNN04Wq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/tGk8EFnU.js +6 -0
- package/build/client/_app/immutable/chunks/tGk8EFnU.js.br +0 -0
- package/build/client/_app/immutable/chunks/tGk8EFnU.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.CHZkrV6L.js +2 -0
- package/build/client/_app/immutable/entry/app.CHZkrV6L.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CHZkrV6L.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.HrUHLO1x.js +1 -0
- package/build/client/_app/immutable/entry/start.HrUHLO1x.js.br +0 -0
- package/build/client/_app/immutable/entry/start.HrUHLO1x.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.CKOyFIgZ.js +1 -0
- package/build/client/_app/immutable/nodes/0.CKOyFIgZ.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CKOyFIgZ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.KWaXKMWz.js +1 -0
- package/build/client/_app/immutable/nodes/1.KWaXKMWz.js.br +2 -0
- package/build/client/_app/immutable/nodes/1.KWaXKMWz.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CrnoJCHB.js +37 -0
- package/build/client/_app/immutable/nodes/3.CrnoJCHB.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CrnoJCHB.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.CQAHhHcW.js +1 -0
- package/build/client/_app/immutable/nodes/4.CQAHhHcW.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CQAHhHcW.js.gz +0 -0
- package/build/client/_app/version.json +1 -0
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/client/favicon.png +0 -0
- package/build/client/fonts/DarkerGrotesque-Black.ttf +0 -0
- package/build/client/fonts/DarkerGrotesque-Bold.ttf +0 -0
- package/build/client/fonts/DarkerGrotesque-Light.ttf +0 -0
- package/build/client/fonts/DarkerGrotesque-Medium.ttf +0 -0
- package/build/client/fonts/DarkerGrotesque-Regular.ttf +0 -0
- package/build/client/fonts/DarkerGrotesque-SemiBold.ttf +0 -0
- package/build/client/fonts.css +42 -0
- package/build/client/fonts.css.br +0 -0
- package/build/client/fonts.css.gz +0 -0
- package/build/client/recombine.svg +11 -0
- package/build/client/recombine.svg.br +0 -0
- package/build/client/recombine.svg.gz +0 -0
- package/build/env.js +45 -0
- package/build/handler.js +1376 -0
- package/build/index.js +334 -0
- package/build/server/chunks/0-mYGjPqz5.js +9 -0
- package/build/server/chunks/0-mYGjPqz5.js.map +1 -0
- package/build/server/chunks/1-C2hOLQew.js +9 -0
- package/build/server/chunks/1-C2hOLQew.js.map +1 -0
- package/build/server/chunks/2-DvM8Rx7F.js +19 -0
- package/build/server/chunks/2-DvM8Rx7F.js.map +1 -0
- package/build/server/chunks/3-DzYy6NR4.js +9 -0
- package/build/server/chunks/3-DzYy6NR4.js.map +1 -0
- package/build/server/chunks/4-CKj2VFF9.js +9 -0
- package/build/server/chunks/4-CKj2VFF9.js.map +1 -0
- package/build/server/chunks/Link--GZl5SPN.js +173 -0
- package/build/server/chunks/Link--GZl5SPN.js.map +1 -0
- package/build/server/chunks/_layout.svelte-Djb8kzRL.js +9 -0
- package/build/server/chunks/_layout.svelte-Djb8kzRL.js.map +1 -0
- package/build/server/chunks/_page.svelte--F_wcrBT.js +270 -0
- package/build/server/chunks/_page.svelte--F_wcrBT.js.map +1 -0
- package/build/server/chunks/_page.svelte-BTrMVKBN.js +323 -0
- package/build/server/chunks/_page.svelte-BTrMVKBN.js.map +1 -0
- package/build/server/chunks/error.svelte-CdLF6LnB.js +45 -0
- package/build/server/chunks/error.svelte-CdLF6LnB.js.map +1 -0
- package/build/server/chunks/index-Djsj11qr.js +214 -0
- package/build/server/chunks/index-Djsj11qr.js.map +1 -0
- package/build/server/chunks/index-o5QjKPCU.js +318 -0
- package/build/server/chunks/index-o5QjKPCU.js.map +1 -0
- package/build/server/chunks/utils-D9U67AWL.js +327 -0
- package/build/server/chunks/utils-D9U67AWL.js.map +1 -0
- package/build/server/index.js +7595 -0
- package/build/server/index.js.map +1 -0
- package/build/server/manifest.js +62 -0
- package/build/server/manifest.js.map +1 -0
- package/build/shims.js +32 -0
- package/package.json +75 -0
- package/src/ws-server/agents.ts +459 -0
- package/src/ws-server/fs-persistence.ts +80 -0
- package/src/ws-server/logger.ts +30 -0
- package/src/ws-server/message-dispatcher.ts +76 -0
- package/src/ws-server/projects.ts +58 -0
- package/src/ws-server/scheduler.ts +89 -0
- package/src/ws-server/server.ts +77 -0
- package/src/ws-server/tracer.ts +11 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type AgentState } from './agents'
|
|
2
|
+
import fs from 'fs'
|
|
3
|
+
import path from 'path'
|
|
4
|
+
|
|
5
|
+
export interface StatePersistence {
|
|
6
|
+
load: (agentId: string) => Promise<AgentState[]>
|
|
7
|
+
save: (agentId: string, states: AgentState[]) => Promise<void>
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type Context = Record<string, any>
|
|
11
|
+
|
|
12
|
+
export interface ContextPersistence {
|
|
13
|
+
load: (agentId: string, contextName: string) => Promise<Context>
|
|
14
|
+
save: (agentId: string, contextName: string, context: Context) => Promise<void>
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const fsStatePersistence: StatePersistence = {
|
|
18
|
+
load: async (agentId: string) => {
|
|
19
|
+
const filePath = path.join('.', 'data', 'history', `${agentId}.json`)
|
|
20
|
+
return fsPersistence.load(filePath)
|
|
21
|
+
},
|
|
22
|
+
save: async (agentId: string, states: AgentState[]) => {
|
|
23
|
+
const filePath = path.join('.', 'data', 'history', `${agentId}.json`)
|
|
24
|
+
return fsPersistence.save(filePath, states)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const fsContextPersistence: ContextPersistence = {
|
|
29
|
+
load: async (agentId: string, contextName: string) => {
|
|
30
|
+
const filePath = path.join('.', 'data', 'contexts', contextName, `${agentId}.json`)
|
|
31
|
+
return fsPersistence.load(filePath)
|
|
32
|
+
},
|
|
33
|
+
save: async (agentId: string, contextName: string, context: Context) => {
|
|
34
|
+
const filePath = path.join('.', 'data', 'contexts', contextName, `${agentId}.json`)
|
|
35
|
+
return fsPersistence.save(filePath, context)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const fsPersistence = {
|
|
40
|
+
load: async (filePath: string) => {
|
|
41
|
+
try {
|
|
42
|
+
const data = String(await fs.promises.readFile(filePath))
|
|
43
|
+
return data ? JSON.parse(data) : ''
|
|
44
|
+
} catch (error) {
|
|
45
|
+
if ((error as any).code === 'ENOENT') {
|
|
46
|
+
await createFileIfNotExists(filePath)
|
|
47
|
+
return ''
|
|
48
|
+
}
|
|
49
|
+
console.error('error loading: ', filePath, String(await fs.promises.readFile(filePath)))
|
|
50
|
+
throw error
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
// TODO replace with JSONObject | JSONArray
|
|
54
|
+
save: async (filePath: string, toSave: Object) => {
|
|
55
|
+
await createFileIfNotExists(filePath)
|
|
56
|
+
await fs.promises.writeFile(filePath, JSON.stringify(toSave, null, 2))
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Ensures that a file exists by creating any necessary parent directories and the file itself
|
|
62
|
+
* @param filePath Path to the file, may include nested directories
|
|
63
|
+
*/
|
|
64
|
+
async function createFileIfNotExists(filePath: string) {
|
|
65
|
+
const directory = path.dirname(filePath)
|
|
66
|
+
|
|
67
|
+
try {
|
|
68
|
+
await fs.promises.access(directory)
|
|
69
|
+
} catch (error) {
|
|
70
|
+
// Directory doesn't exist, create it recursively
|
|
71
|
+
await fs.promises.mkdir(directory, { recursive: true })
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
await fs.promises.access(filePath)
|
|
76
|
+
} catch (error) {
|
|
77
|
+
// File doesn't exist, create an empty file
|
|
78
|
+
await fs.promises.writeFile(filePath, '')
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { inspect } from 'util'
|
|
2
|
+
import type { LogEntry } from '../lib/ws-message'
|
|
3
|
+
|
|
4
|
+
export function createLogger(sendMessage: (msg: LogEntry) => void) {
|
|
5
|
+
const enableConsole = !!process.env.PRINT_CONSOLE
|
|
6
|
+
return {
|
|
7
|
+
log: (...args: any[]) => {
|
|
8
|
+
if (enableConsole) console.log(...args)
|
|
9
|
+
sendMessage({ message: prettyArgs(args), severity: 'INFO' })
|
|
10
|
+
},
|
|
11
|
+
debug: (...args: any[]) => {
|
|
12
|
+
if (enableConsole) console.debug(...args)
|
|
13
|
+
sendMessage({ message: prettyArgs(args), severity: 'DEBUG' })
|
|
14
|
+
},
|
|
15
|
+
error: (...args: any[]) => {
|
|
16
|
+
if (enableConsole) console.error(...args)
|
|
17
|
+
sendMessage({ message: prettyArgs(args), severity: 'ERROR' })
|
|
18
|
+
},
|
|
19
|
+
warn: (...args: any[]) => {
|
|
20
|
+
if (enableConsole) console.warn(...args)
|
|
21
|
+
sendMessage({ message: prettyArgs(args), severity: 'WARNING' })
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function prettyArgs(args: any[]) {
|
|
27
|
+
return args
|
|
28
|
+
.map((arg) => (typeof arg === 'object' ? inspect(arg, { depth: null }) : arg))
|
|
29
|
+
.join(' ')
|
|
30
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
DelayedActions,
|
|
3
|
+
LogEntry,
|
|
4
|
+
AgentPayload,
|
|
5
|
+
AgentSateHeader,
|
|
6
|
+
WsMessage
|
|
7
|
+
} from '../lib/ws-message'
|
|
8
|
+
import { type Action, type Message } from '@recombine-ai/engine'
|
|
9
|
+
import { WebSocket } from 'ws'
|
|
10
|
+
|
|
11
|
+
export class MessageDispatcher {
|
|
12
|
+
constructor(private ws: WebSocket) {}
|
|
13
|
+
|
|
14
|
+
private sendWsMessage(message: WsMessage) {
|
|
15
|
+
if (message.channel === 'app-events') {
|
|
16
|
+
console.log('<-- ', message.channel, message.event.type)
|
|
17
|
+
} else if (message.channel === 'chat') {
|
|
18
|
+
console.log('<-- ', message.channel, message.message)
|
|
19
|
+
}
|
|
20
|
+
this.ws.send(JSON.stringify(message))
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
sendAction = (action: Action) => {
|
|
24
|
+
this.sendWsMessage({ channel: 'actions', action })
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
sendMessage = async (message: Message) => {
|
|
28
|
+
this.sendWsMessage({ channel: 'chat', message })
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
sendLog = async (message: LogEntry) => {
|
|
32
|
+
this.sendWsMessage({ channel: 'log', message })
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
sendSchedule = async (actions: DelayedActions) => {
|
|
36
|
+
this.sendWsMessage({
|
|
37
|
+
channel: 'app-events',
|
|
38
|
+
event: { type: 'delayed-actions-updated', actions }
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
sendAgentSelected = async (agent: AgentPayload) => {
|
|
43
|
+
this.sendWsMessage({
|
|
44
|
+
channel: 'app-events',
|
|
45
|
+
event: { type: 'agent-selected', agent }
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
sendContext = async (context: Record<string, any>) => {
|
|
50
|
+
this.sendWsMessage({
|
|
51
|
+
channel: 'app-events',
|
|
52
|
+
event: { type: 'context-updated', context }
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
sendPrompt = async (prompt: string) => {
|
|
57
|
+
this.sendWsMessage({
|
|
58
|
+
channel: 'app-events',
|
|
59
|
+
event: { type: 'prompt-updated', prompt }
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
sendLoaded = async (agents: string[]) => {
|
|
64
|
+
this.sendWsMessage({
|
|
65
|
+
channel: 'app-events',
|
|
66
|
+
event: { type: 'agents-loaded', agents }
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
sendUpdateStates = async (states: AgentSateHeader[]) => {
|
|
71
|
+
this.sendWsMessage({
|
|
72
|
+
channel: 'app-events',
|
|
73
|
+
event: { type: 'update-states', states }
|
|
74
|
+
})
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { TestAgentFactory } from '@recombine-ai/engine'
|
|
2
|
+
import { glob } from 'glob'
|
|
3
|
+
import path from 'node:path'
|
|
4
|
+
import { pathToFileURL } from 'node:url'
|
|
5
|
+
import { readFile } from 'node:fs/promises'
|
|
6
|
+
|
|
7
|
+
export interface Project {
|
|
8
|
+
factories: Record<string, TestAgentFactory>
|
|
9
|
+
project: string
|
|
10
|
+
basePath: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// TODO Drop this when all agents have bosun root
|
|
14
|
+
const legacyPath = 'src/bosun/workflows.ts'
|
|
15
|
+
|
|
16
|
+
export async function loadProjects() {
|
|
17
|
+
const projectRoot = process.env.BOSUN_NPX_RUN === 'true' ? process.cwd() : 'projects/*/'
|
|
18
|
+
const projectFiles = await glob(`${projectRoot}/package.json`, { absolute: true })
|
|
19
|
+
console.log('loadProjects, projectFiles: ', projectFiles)
|
|
20
|
+
|
|
21
|
+
const agentFactories: Project[] = []
|
|
22
|
+
|
|
23
|
+
for (const file of projectFiles) {
|
|
24
|
+
let pkg: any
|
|
25
|
+
try {
|
|
26
|
+
const raw = await readFile(file, 'utf8')
|
|
27
|
+
pkg = JSON.parse(raw)
|
|
28
|
+
} catch (e) {
|
|
29
|
+
console.error('Failed to read package.json:', file, e)
|
|
30
|
+
continue
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const agentsRoot = pkg?.bosun?.root ?? legacyPath
|
|
34
|
+
const projectName = path.basename(path.dirname(file))
|
|
35
|
+
const agentsRootPath = path.resolve(path.dirname(file), agentsRoot)
|
|
36
|
+
const modUrl = pathToFileURL(agentsRootPath).href
|
|
37
|
+
|
|
38
|
+
let mod: any
|
|
39
|
+
try {
|
|
40
|
+
mod = await import(modUrl)
|
|
41
|
+
} catch (e) {
|
|
42
|
+
console.error('Failed to import agents module:', modUrl, e)
|
|
43
|
+
continue
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const basePath = mod?.basePath ?? path.dirname(agentsRootPath)
|
|
47
|
+
|
|
48
|
+
if (projectName && mod?.default) {
|
|
49
|
+
agentFactories.push({
|
|
50
|
+
basePath,
|
|
51
|
+
project: projectName,
|
|
52
|
+
factories: mod.default as Record<string, TestAgentFactory>
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return agentFactories
|
|
58
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { Logger, Scheduler, SendAction } from '@recombine-ai/engine'
|
|
2
|
+
import type { DelayedActions } from '../lib/ws-message'
|
|
3
|
+
|
|
4
|
+
export type DelayedActionRegistry<T> = Record<
|
|
5
|
+
string,
|
|
6
|
+
{ at: string | null; handler: (data: T) => Promise<unknown>; data: T | null }
|
|
7
|
+
>
|
|
8
|
+
|
|
9
|
+
export interface BosunScheduler extends Scheduler {
|
|
10
|
+
triggerAction: (actionName: string) => Promise<void>
|
|
11
|
+
serialize: () => DelayedActions
|
|
12
|
+
setState(state: DelayedActions): void
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface Props {
|
|
16
|
+
logger: Logger
|
|
17
|
+
sendAction: SendAction
|
|
18
|
+
onUpdate: (actions: DelayedActions) => void
|
|
19
|
+
}
|
|
20
|
+
export function createScheduler(
|
|
21
|
+
{ logger, sendAction, onUpdate }: Props,
|
|
22
|
+
delayedActions: DelayedActionRegistry<string> = {}
|
|
23
|
+
) {
|
|
24
|
+
const scheduler: BosunScheduler = {
|
|
25
|
+
clearAllPendingActions: async () => {
|
|
26
|
+
sendAction({
|
|
27
|
+
id: Math.random().toString(),
|
|
28
|
+
type: 'Scheduler',
|
|
29
|
+
state: 'completed',
|
|
30
|
+
message: 'Clear all pending actions'
|
|
31
|
+
})
|
|
32
|
+
Object.keys(delayedActions).forEach((actionName) => {
|
|
33
|
+
delayedActions[actionName] = {
|
|
34
|
+
at: null,
|
|
35
|
+
handler: delayedActions[actionName].handler,
|
|
36
|
+
data: null
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
console.log('clearAllPendingActions')
|
|
40
|
+
onUpdate(delayedActions)
|
|
41
|
+
},
|
|
42
|
+
registerAction(actionName, handler) {
|
|
43
|
+
delayedActions[actionName] = { at: null, handler, data: null }
|
|
44
|
+
// console.log('registerAction', actionName)
|
|
45
|
+
onUpdate(delayedActions)
|
|
46
|
+
// TODO should be generic data instead of string phone
|
|
47
|
+
return async (delay, phone) => {
|
|
48
|
+
const msg = `Scheduled action "${actionName}" at ${delay.toLocaleString()}`
|
|
49
|
+
delayedActions[actionName] = { at: delay.toLocaleString(), data: phone, handler }
|
|
50
|
+
// console.log('registerAction', actionName, delay)
|
|
51
|
+
onUpdate(delayedActions)
|
|
52
|
+
logger.log(msg)
|
|
53
|
+
sendAction({
|
|
54
|
+
id: Math.random().toString(),
|
|
55
|
+
type: 'Scheduler',
|
|
56
|
+
state: 'completed',
|
|
57
|
+
message: msg
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
triggerAction: async (actionName: string) => {
|
|
62
|
+
const action = delayedActions[actionName]
|
|
63
|
+
if (!action) {
|
|
64
|
+
logger.error(`Action "${actionName}" not found`)
|
|
65
|
+
return
|
|
66
|
+
}
|
|
67
|
+
const msg = `Triggered action "${actionName}" at ${new Date().toLocaleString()}`
|
|
68
|
+
logger.log(msg)
|
|
69
|
+
delayedActions[actionName] = { at: null, handler: action.handler, data: null }
|
|
70
|
+
console.log('triggerAction', actionName)
|
|
71
|
+
onUpdate(delayedActions)
|
|
72
|
+
if (!action.data) {
|
|
73
|
+
throw new Error('Action data is missing')
|
|
74
|
+
}
|
|
75
|
+
await action.handler(action.data)
|
|
76
|
+
},
|
|
77
|
+
serialize: () => delayedActions,
|
|
78
|
+
setState: (state) => {
|
|
79
|
+
for (const key in state) {
|
|
80
|
+
const oldSchedule = delayedActions[key]
|
|
81
|
+
if (oldSchedule) {
|
|
82
|
+
delayedActions[key] = { ...oldSchedule, ...state[key] }
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
onUpdate(delayedActions)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return scheduler
|
|
89
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import 'dotenv/config'
|
|
2
|
+
import { WebSocketServer } from 'ws'
|
|
3
|
+
import type { WsMessage } from '../lib/ws-message'
|
|
4
|
+
import { createAgents } from './agents'
|
|
5
|
+
import { fsContextPersistence, fsStatePersistence } from './fs-persistence'
|
|
6
|
+
import { MessageDispatcher } from './message-dispatcher'
|
|
7
|
+
import type { StepTracer } from '@recombine-ai/engine'
|
|
8
|
+
|
|
9
|
+
const wss = new WebSocketServer({ port: 8080 })
|
|
10
|
+
|
|
11
|
+
wss.on('connection', async (ws) => {
|
|
12
|
+
console.log('----------------- Client connected -----------------')
|
|
13
|
+
|
|
14
|
+
const stepTracer: StepTracer = {
|
|
15
|
+
addStepTrace: (stepTrace) => {
|
|
16
|
+
// TODO: client doesn't react to step traces yet - but should
|
|
17
|
+
ws.send(
|
|
18
|
+
JSON.stringify({
|
|
19
|
+
channel: 'app-events',
|
|
20
|
+
event: { type: 'step-trace', stepTrace }
|
|
21
|
+
})
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const agents = createAgents(
|
|
26
|
+
new MessageDispatcher(ws),
|
|
27
|
+
stepTracer,
|
|
28
|
+
fsStatePersistence,
|
|
29
|
+
fsContextPersistence
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
agents.load()
|
|
33
|
+
|
|
34
|
+
ws.on('message', async (event) => {
|
|
35
|
+
const msg = JSON.parse(event.toString()) as WsMessage
|
|
36
|
+
// @ts-ignore
|
|
37
|
+
console.log('--> ', msg.channel, msg.event?.type || '')
|
|
38
|
+
try {
|
|
39
|
+
switch (msg.channel) {
|
|
40
|
+
case 'app-events':
|
|
41
|
+
switch (msg.event.type) {
|
|
42
|
+
case 'select-agent':
|
|
43
|
+
await agents.select(msg.event.agent, msg.event.state)
|
|
44
|
+
break
|
|
45
|
+
case 'context-updated':
|
|
46
|
+
agents.updateContext(msg.event.context)
|
|
47
|
+
break
|
|
48
|
+
case 'prompt-updated':
|
|
49
|
+
agents.updatePrompt(msg.event.prompt)
|
|
50
|
+
break
|
|
51
|
+
case 'trigger-action':
|
|
52
|
+
agents.triggerAction(msg.event.action)
|
|
53
|
+
break
|
|
54
|
+
case 'step-selected':
|
|
55
|
+
agents.selectStep(msg.event.step)
|
|
56
|
+
break
|
|
57
|
+
|
|
58
|
+
default:
|
|
59
|
+
console.error(`Unknown event type: ${msg.event.type}`)
|
|
60
|
+
}
|
|
61
|
+
break
|
|
62
|
+
case 'chat':
|
|
63
|
+
await agents.handleMessage(msg.message)
|
|
64
|
+
break
|
|
65
|
+
default:
|
|
66
|
+
console.error(`Unknown channel: ${msg.channel}`)
|
|
67
|
+
}
|
|
68
|
+
} catch (error) {
|
|
69
|
+
console.error('Error handling message', error)
|
|
70
|
+
ws.send(JSON.stringify({ channel: 'error', message: String(error) }))
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
console.log('---------------------------------------')
|
|
76
|
+
console.log('WebSocket server started on ws://localhost:8080')
|
|
77
|
+
console.log('---------------------------------------')
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./.svelte-kit/tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"allowJs": true,
|
|
5
|
+
"checkJs": true,
|
|
6
|
+
"esModuleInterop": true,
|
|
7
|
+
"forceConsistentCasingInFileNames": true,
|
|
8
|
+
"resolveJsonModule": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"strict": true,
|
|
12
|
+
"moduleResolution": "bundler",
|
|
13
|
+
"types": ["svelte"],
|
|
14
|
+
"allowArbitraryExtensions": true
|
|
15
|
+
},
|
|
16
|
+
// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
|
|
17
|
+
// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
|
|
18
|
+
//
|
|
19
|
+
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
|
|
20
|
+
// from the referenced tsconfig.json - TypeScript does not merge them in
|
|
21
|
+
}
|