@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,62 @@
|
|
|
1
|
+
const manifest = (() => {
|
|
2
|
+
function __memo(fn) {
|
|
3
|
+
let value;
|
|
4
|
+
return () => value ??= (value = fn());
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
return {
|
|
8
|
+
appDir: "_app",
|
|
9
|
+
appPath: "_app",
|
|
10
|
+
assets: new Set(["favicon.png","fonts/DarkerGrotesque-Black.ttf","fonts/DarkerGrotesque-Bold.ttf","fonts/DarkerGrotesque-Light.ttf","fonts/DarkerGrotesque-Medium.ttf","fonts/DarkerGrotesque-Regular.ttf","fonts/DarkerGrotesque-SemiBold.ttf","fonts.css","recombine.svg"]),
|
|
11
|
+
mimeTypes: {".png":"image/png",".ttf":"font/ttf",".css":"text/css",".svg":"image/svg+xml"},
|
|
12
|
+
_: {
|
|
13
|
+
client: {start:"_app/immutable/entry/start.HrUHLO1x.js",app:"_app/immutable/entry/app.CHZkrV6L.js",imports:["_app/immutable/entry/start.HrUHLO1x.js","_app/immutable/chunks/nJIPv2kB.js","_app/immutable/chunks/BppKCDc7.js","_app/immutable/chunks/DJ94EQYm.js","_app/immutable/entry/app.CHZkrV6L.js","_app/immutable/chunks/jKjWACjA.js","_app/immutable/chunks/DJ94EQYm.js","_app/immutable/chunks/BppKCDc7.js","_app/immutable/chunks/CWj6FrbW.js","_app/immutable/chunks/BwHKvje2.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
|
|
14
|
+
nodes: [
|
|
15
|
+
__memo(() => import('./chunks/0-mYGjPqz5.js')),
|
|
16
|
+
__memo(() => import('./chunks/1-C2hOLQew.js')),
|
|
17
|
+
__memo(() => import('./chunks/2-DvM8Rx7F.js')),
|
|
18
|
+
__memo(() => import('./chunks/3-DzYy6NR4.js')),
|
|
19
|
+
__memo(() => import('./chunks/4-CKj2VFF9.js'))
|
|
20
|
+
],
|
|
21
|
+
remotes: {
|
|
22
|
+
|
|
23
|
+
},
|
|
24
|
+
routes: [
|
|
25
|
+
{
|
|
26
|
+
id: "/",
|
|
27
|
+
pattern: /^\/$/,
|
|
28
|
+
params: [],
|
|
29
|
+
page: { layouts: [0,], errors: [1,], leaf: 2 },
|
|
30
|
+
endpoint: null
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
id: "/chat",
|
|
34
|
+
pattern: /^\/chat\/?$/,
|
|
35
|
+
params: [],
|
|
36
|
+
page: { layouts: [0,], errors: [1,], leaf: 3 },
|
|
37
|
+
endpoint: null
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: "/tests",
|
|
41
|
+
pattern: /^\/tests\/?$/,
|
|
42
|
+
params: [],
|
|
43
|
+
page: { layouts: [0,], errors: [1,], leaf: 4 },
|
|
44
|
+
endpoint: null
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
prerendered_routes: new Set([]),
|
|
48
|
+
matchers: async () => {
|
|
49
|
+
|
|
50
|
+
return { };
|
|
51
|
+
},
|
|
52
|
+
server_assets: {}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
})();
|
|
56
|
+
|
|
57
|
+
const prerendered = new Set([]);
|
|
58
|
+
|
|
59
|
+
const base = "";
|
|
60
|
+
|
|
61
|
+
export { base, manifest, prerendered };
|
|
62
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"favicon.png\",\"fonts/DarkerGrotesque-Black.ttf\",\"fonts/DarkerGrotesque-Bold.ttf\",\"fonts/DarkerGrotesque-Light.ttf\",\"fonts/DarkerGrotesque-Medium.ttf\",\"fonts/DarkerGrotesque-Regular.ttf\",\"fonts/DarkerGrotesque-SemiBold.ttf\",\"fonts.css\",\"recombine.svg\"]),\n\tmimeTypes: {\".png\":\"image/png\",\".ttf\":\"font/ttf\",\".css\":\"text/css\",\".svg\":\"image/svg+xml\"},\n\t_: {\n\t\tclient: {start:\"_app/immutable/entry/start.HrUHLO1x.js\",app:\"_app/immutable/entry/app.CHZkrV6L.js\",imports:[\"_app/immutable/entry/start.HrUHLO1x.js\",\"_app/immutable/chunks/nJIPv2kB.js\",\"_app/immutable/chunks/BppKCDc7.js\",\"_app/immutable/chunks/DJ94EQYm.js\",\"_app/immutable/entry/app.CHZkrV6L.js\",\"_app/immutable/chunks/jKjWACjA.js\",\"_app/immutable/chunks/DJ94EQYm.js\",\"_app/immutable/chunks/BppKCDc7.js\",\"_app/immutable/chunks/CWj6FrbW.js\",\"_app/immutable/chunks/BwHKvje2.js\"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},\n\t\tnodes: [\n\t\t\t__memo(() => import('./nodes/0.js')),\n\t\t\t__memo(() => import('./nodes/1.js')),\n\t\t\t__memo(() => import('./nodes/2.js')),\n\t\t\t__memo(() => import('./nodes/3.js')),\n\t\t\t__memo(() => import('./nodes/4.js'))\n\t\t],\n\t\tremotes: {\n\t\t\t\n\t\t},\n\t\troutes: [\n\t\t\t{\n\t\t\t\tid: \"/\",\n\t\t\t\tpattern: /^\\/$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 2 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/chat\",\n\t\t\t\tpattern: /^\\/chat\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 3 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/tests\",\n\t\t\t\tpattern: /^\\/tests\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 4 },\n\t\t\t\tendpoint: null\n\t\t\t}\n\t\t],\n\t\tprerendered_routes: new Set([]),\n\t\tmatchers: async () => {\n\t\t\t\n\t\t\treturn { };\n\t\t},\n\t\tserver_assets: {}\n\t}\n}\n})();\n\nexport const prerendered = new Set([]);\n\nexport const base = \"\";"],"names":[],"mappings":"AAAY,MAAC,QAAQ,GAAG,CAAC,MAAM;AAC/B,SAAS,MAAM,CAAC,EAAE,EAAE;AACpB,CAAC,IAAI,KAAK;AACV,CAAC,OAAO,MAAM,KAAK,MAAM,KAAK,GAAG,EAAE,EAAE,CAAC;AACtC;;AAEA,OAAO;AACP,CAAC,MAAM,EAAE,MAAM;AACf,CAAC,OAAO,EAAE,MAAM;AAChB,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,iCAAiC,CAAC,gCAAgC,CAAC,iCAAiC,CAAC,kCAAkC,CAAC,mCAAmC,CAAC,oCAAoC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AAC9Q,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC;AAC3F,CAAC,CAAC,EAAE;AACJ,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,wCAAwC,CAAC,GAAG,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAC,wCAAwC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,sCAAsC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACrhB,EAAE,KAAK,EAAE;AACT,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC;AACtC,GAAG;AACH,EAAE,OAAO,EAAE;AACX;AACA,GAAG;AACH,EAAE,MAAM,EAAE;AACV,GAAG;AACH,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,OAAO,EAAE,MAAM;AACnB,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AAClD,IAAI,QAAQ,EAAE;AACd,IAAI;AACJ,GAAG;AACH,IAAI,EAAE,EAAE,OAAO;AACf,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AAClD,IAAI,QAAQ,EAAE;AACd,IAAI;AACJ,GAAG;AACH,IAAI,EAAE,EAAE,QAAQ;AAChB,IAAI,OAAO,EAAE,cAAc;AAC3B,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AAClD,IAAI,QAAQ,EAAE;AACd;AACA,GAAG;AACH,EAAE,kBAAkB,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;AACjC,EAAE,QAAQ,EAAE,YAAY;AACxB;AACA,GAAG,OAAO,IAAI;AACd,EAAE,CAAC;AACH,EAAE,aAAa,EAAE;AACjB;AACA;AACA,CAAC;;AAEW,MAAC,WAAW,GAAG,IAAI,GAAG,CAAC,EAAE;;AAEzB,MAAC,IAAI,GAAG;;;;"}
|
package/build/shims.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import buffer from 'node:buffer';
|
|
2
|
+
import { webcrypto } from 'node:crypto';
|
|
3
|
+
|
|
4
|
+
// `buffer.File` was added in Node 18.13.0 while the `File` global was added in Node 20.0.0
|
|
5
|
+
const File = /** @type {import('node:buffer') & { File?: File}} */ (buffer).File;
|
|
6
|
+
|
|
7
|
+
/** @type {Record<string, any>} */
|
|
8
|
+
const globals = {
|
|
9
|
+
crypto: webcrypto,
|
|
10
|
+
File
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// exported for dev/preview and node environments
|
|
14
|
+
/**
|
|
15
|
+
* Make various web APIs available as globals:
|
|
16
|
+
* - `crypto`
|
|
17
|
+
* - `File`
|
|
18
|
+
*/
|
|
19
|
+
function installPolyfills() {
|
|
20
|
+
for (const name in globals) {
|
|
21
|
+
if (name in globalThis) continue;
|
|
22
|
+
|
|
23
|
+
Object.defineProperty(globalThis, name, {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: globals[name]
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
installPolyfills();
|
package/package.json
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@recombine-ai/bosun",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "EULA",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"build",
|
|
8
|
+
"bin",
|
|
9
|
+
"src/ws-server",
|
|
10
|
+
"src/lib/ws-messages.ts",
|
|
11
|
+
".svelte-kit/tsconfig.json",
|
|
12
|
+
"tsconfig.json",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"dev": "concurrently -n front,back 'yarn dev:vite' 'yarn dev:ws'",
|
|
17
|
+
"dev:vite": "vite dev",
|
|
18
|
+
"dev:ws": "tsx --watch src/ws-server/server.ts",
|
|
19
|
+
"build": "vite build",
|
|
20
|
+
"prepublishOnly": "npm run build",
|
|
21
|
+
"preview": "vite preview",
|
|
22
|
+
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
23
|
+
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
|
24
|
+
"format": "prettier --write .",
|
|
25
|
+
"lint": "prettier --check .",
|
|
26
|
+
"test:unit": "vitest",
|
|
27
|
+
"test": "yarn test:unit -- --run && yarn test:e2e",
|
|
28
|
+
"test:e2e": "playwright test",
|
|
29
|
+
"deploy": "cd deploy && yarn cdk deploy && cd ..",
|
|
30
|
+
"start": "concurrently -n front,back 'vite preview --host' 'tsx src/ws-server/server.ts'",
|
|
31
|
+
"academy:run-prompt-tests": "tsx src/lib/academy/runPromptTests.cli.ts",
|
|
32
|
+
"eslint": "eslint --quiet",
|
|
33
|
+
"eslint:fix": "eslint --fix"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@eslint/js": "^9.26.0",
|
|
37
|
+
"@sveltejs/adapter-auto": "^3.0.0",
|
|
38
|
+
"@sveltejs/adapter-node": "^5.2.9",
|
|
39
|
+
"@sveltejs/kit": "^2.0.0",
|
|
40
|
+
"@sveltejs/vite-plugin-svelte": "^4.0.0",
|
|
41
|
+
"@types/js-yaml": "^4.0.9",
|
|
42
|
+
"@types/ws": "^8.5.14",
|
|
43
|
+
"@typescript-eslint/eslint-plugin": "^8.32.0",
|
|
44
|
+
"autoprefixer": "^10.4.20",
|
|
45
|
+
"concurrently": "^9.1.2",
|
|
46
|
+
"eslint": "^9.26.0",
|
|
47
|
+
"prettier": "^3.3.2",
|
|
48
|
+
"prettier-plugin-svelte": "^3.2.6",
|
|
49
|
+
"prettier-plugin-tailwindcss": "^0.6.5",
|
|
50
|
+
"svelte": "^5.0.0",
|
|
51
|
+
"svelte-check": "^4.0.0",
|
|
52
|
+
"tailwindcss": "^3.4.9",
|
|
53
|
+
"typescript": "^5.0.0",
|
|
54
|
+
"typescript-eslint": "^8.32.0",
|
|
55
|
+
"vite": "^5.4.11",
|
|
56
|
+
"vitest": "^2.0.4"
|
|
57
|
+
},
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"@popperjs/core": "^2.11.8",
|
|
60
|
+
"@recombine-ai/engine": "0.7.1",
|
|
61
|
+
"@tailwindcss/forms": "^0.5.9",
|
|
62
|
+
"@tailwindcss/typography": "^0.5.15",
|
|
63
|
+
"@types/papaparse": "^5.3.16",
|
|
64
|
+
"deepmerge": "^4.3.1",
|
|
65
|
+
"dotenv": "^17.2.2",
|
|
66
|
+
"googleapis": "^159.0.0",
|
|
67
|
+
"js-yaml": "^4.1.0",
|
|
68
|
+
"monaco-editor": "^0.52.2",
|
|
69
|
+
"openai": "^4.78.1",
|
|
70
|
+
"papaparse": "^5.5.3",
|
|
71
|
+
"promptfoo": "0.112.3",
|
|
72
|
+
"tsx": "^4.20.6",
|
|
73
|
+
"ws": "^8.18.0"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createContext,
|
|
3
|
+
makeAction,
|
|
4
|
+
type Action,
|
|
5
|
+
type Message,
|
|
6
|
+
type TestAgent,
|
|
7
|
+
type TestAgentFactory,
|
|
8
|
+
type TestVoiceAgent,
|
|
9
|
+
type StepTracer
|
|
10
|
+
} from '@recombine-ai/engine'
|
|
11
|
+
import type { DelayedActions, LogEntry } from '../lib/ws-message'
|
|
12
|
+
import fs from 'fs'
|
|
13
|
+
import path, { join } from 'path'
|
|
14
|
+
import type { Context, ContextPersistence, StatePersistence } from './fs-persistence'
|
|
15
|
+
import { createLogger } from './logger'
|
|
16
|
+
import type { MessageDispatcher } from './message-dispatcher'
|
|
17
|
+
import { loadProjects } from './projects'
|
|
18
|
+
import { createScheduler, type BosunScheduler } from './scheduler'
|
|
19
|
+
import { createTracer } from './tracer'
|
|
20
|
+
|
|
21
|
+
interface MessageEntry {
|
|
22
|
+
type: 'message'
|
|
23
|
+
payload: Message
|
|
24
|
+
}
|
|
25
|
+
interface ActionEntry {
|
|
26
|
+
type: 'action'
|
|
27
|
+
payload: Action
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
interface HistoryLogEntry {
|
|
31
|
+
type: 'log'
|
|
32
|
+
payload: LogEntry
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type HistoryEntry = MessageEntry | ActionEntry | HistoryLogEntry
|
|
36
|
+
|
|
37
|
+
export interface AgentState {
|
|
38
|
+
id: string
|
|
39
|
+
name: string
|
|
40
|
+
history: HistoryEntry[]
|
|
41
|
+
schedule: DelayedActions
|
|
42
|
+
prev: string | null
|
|
43
|
+
next: string | null
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
type AgentWithState = Awaited<ReturnType<typeof loadAgent>>
|
|
47
|
+
|
|
48
|
+
export function createAgents(
|
|
49
|
+
dispatcher: MessageDispatcher,
|
|
50
|
+
stepTracer: StepTracer,
|
|
51
|
+
statePersistence: StatePersistence,
|
|
52
|
+
contextPersistence: ContextPersistence
|
|
53
|
+
) {
|
|
54
|
+
const agentStates: Record<string, AgentState[]> = {}
|
|
55
|
+
const agents: Record<string, AgentWithState> = {}
|
|
56
|
+
let currentAgent = ''
|
|
57
|
+
|
|
58
|
+
function getCurrentAgent() {
|
|
59
|
+
if (!currentAgent) {
|
|
60
|
+
throw new Error('No agent selected')
|
|
61
|
+
}
|
|
62
|
+
const agent = agents[currentAgent]
|
|
63
|
+
if (!agent) {
|
|
64
|
+
throw new Error(`Agent not found ${currentAgent}`)
|
|
65
|
+
}
|
|
66
|
+
return agent
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
load: async () => {
|
|
71
|
+
const projects = await loadProjects()
|
|
72
|
+
console.log(
|
|
73
|
+
'createAgents, load; loaded projects: ',
|
|
74
|
+
projects.map((p) => `${p.project}: (${Object.keys(p.factories)})`)
|
|
75
|
+
)
|
|
76
|
+
for (let { project, basePath, factories } of projects) {
|
|
77
|
+
for (let agentName in factories) {
|
|
78
|
+
const agentId = `${project}/${agentName}`
|
|
79
|
+
const factory = factories[agentName]
|
|
80
|
+
async function saveStates(states: AgentState[]) {
|
|
81
|
+
await statePersistence.save(agentId, states)
|
|
82
|
+
agentStates[agentId] = states
|
|
83
|
+
console.log('------------- save states ---------------')
|
|
84
|
+
states.forEach((state) => {
|
|
85
|
+
console.log('State:', state.name, state.prev, state.next)
|
|
86
|
+
})
|
|
87
|
+
console.log('-----------------------------------------')
|
|
88
|
+
|
|
89
|
+
await dispatcher.sendUpdateStates(
|
|
90
|
+
states.map((state) => ({
|
|
91
|
+
id: state.id,
|
|
92
|
+
name: state.name,
|
|
93
|
+
userMessage: userMessage(state)
|
|
94
|
+
}))
|
|
95
|
+
)
|
|
96
|
+
}
|
|
97
|
+
const loadedStates = await statePersistence.load(agentId)
|
|
98
|
+
agentStates[agentId] = loadedStates
|
|
99
|
+
agents[agentId] = await loadAgent({
|
|
100
|
+
agentId,
|
|
101
|
+
contextPersistence,
|
|
102
|
+
...dispatcher,
|
|
103
|
+
factory,
|
|
104
|
+
basePath,
|
|
105
|
+
saveStates,
|
|
106
|
+
stepTracer
|
|
107
|
+
})
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
await dispatcher.sendLoaded(Object.keys(agents))
|
|
111
|
+
},
|
|
112
|
+
select: async (agentId: string, stateId?: string | null) => {
|
|
113
|
+
console.log('createAgents, select; agents: ', Object.keys(agents), 'selected: ', agentId)
|
|
114
|
+
currentAgent = agentId
|
|
115
|
+
const agent = getCurrentAgent()
|
|
116
|
+
|
|
117
|
+
dispatcher.sendAgentSelected({
|
|
118
|
+
id: agentId,
|
|
119
|
+
steps: await Promise.all(
|
|
120
|
+
agent.tracer.getSteps().map(async (s) => ({
|
|
121
|
+
name: s.name,
|
|
122
|
+
prompt: await s.prompt.content(),
|
|
123
|
+
type: s.type,
|
|
124
|
+
schema:
|
|
125
|
+
s.prompt.type === 'file' && s.schema
|
|
126
|
+
? await loadSchemaFile(agent.basePath, s.prompt.path)
|
|
127
|
+
: undefined
|
|
128
|
+
}))
|
|
129
|
+
)
|
|
130
|
+
})
|
|
131
|
+
if (agent.ctx.get()) {
|
|
132
|
+
dispatcher.sendContext(agent.ctx.get())
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const states = agentStates[agentId] || []
|
|
136
|
+
let isInitialLoad = false
|
|
137
|
+
if (stateId === undefined && states.length > 0) {
|
|
138
|
+
stateId = states[states.length - 1].id
|
|
139
|
+
isInitialLoad = true
|
|
140
|
+
}
|
|
141
|
+
dispatcher.sendUpdateStates(
|
|
142
|
+
states.map((state) => ({
|
|
143
|
+
id: state.id,
|
|
144
|
+
name: state.name,
|
|
145
|
+
userMessage: userMessage(state)
|
|
146
|
+
}))
|
|
147
|
+
)
|
|
148
|
+
await agent.selectState(states, stateId, isInitialLoad)
|
|
149
|
+
},
|
|
150
|
+
selectStep: async (step: string) => {
|
|
151
|
+
await getCurrentAgent().selectStep(step)
|
|
152
|
+
},
|
|
153
|
+
updateContext: async (context: Context) => {
|
|
154
|
+
await getCurrentAgent().updateContext(context)
|
|
155
|
+
},
|
|
156
|
+
updatePrompt: async (prompt: string) => {
|
|
157
|
+
await getCurrentAgent().updatePrompt(prompt)
|
|
158
|
+
},
|
|
159
|
+
triggerAction: async (action: string) => {
|
|
160
|
+
await getCurrentAgent().triggerAction(action)
|
|
161
|
+
},
|
|
162
|
+
handleMessage: async (message: Message) => {
|
|
163
|
+
await dispatcher.sendMessage(message) // echo message
|
|
164
|
+
await getCurrentAgent().handleMessage(message)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
interface LoadProps extends Omit<MessageDispatcher, 'sendUpdateStates'> {
|
|
170
|
+
agentId: string
|
|
171
|
+
basePath: string
|
|
172
|
+
factory: TestAgentFactory
|
|
173
|
+
saveStates: (states: AgentState[]) => Promise<void>
|
|
174
|
+
stepTracer: StepTracer
|
|
175
|
+
contextPersistence: ContextPersistence
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
async function loadAgent(props: LoadProps) {
|
|
179
|
+
let states: Record<string, AgentState> = {}
|
|
180
|
+
let state = createState({}, null)
|
|
181
|
+
let currentStep = ''
|
|
182
|
+
let scheduler: BosunScheduler | null = null
|
|
183
|
+
let agent: TestAgent | null = null
|
|
184
|
+
const savedContext = await props.contextPersistence.load(props.agentId, 'default')
|
|
185
|
+
const ctx = createContext(savedContext)
|
|
186
|
+
ctx.subscribe((context) => {
|
|
187
|
+
console.log('------ context updated --------')
|
|
188
|
+
props.sendContext(context)
|
|
189
|
+
props.contextPersistence.save(props.agentId, 'default', context)
|
|
190
|
+
})
|
|
191
|
+
const logger = createLogger((msg) => {
|
|
192
|
+
state.history.push({
|
|
193
|
+
type: 'log',
|
|
194
|
+
payload: msg
|
|
195
|
+
})
|
|
196
|
+
props.sendLog(msg)
|
|
197
|
+
})
|
|
198
|
+
|
|
199
|
+
async function sendAction(action: Action) {
|
|
200
|
+
state.history.push({
|
|
201
|
+
type: 'action',
|
|
202
|
+
payload: action
|
|
203
|
+
})
|
|
204
|
+
props.sendAction(action)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const tracer = createTracer(logger)
|
|
208
|
+
|
|
209
|
+
scheduler = createScheduler({
|
|
210
|
+
logger,
|
|
211
|
+
sendAction,
|
|
212
|
+
onUpdate: async (actions) => {
|
|
213
|
+
await props.sendSchedule(actions)
|
|
214
|
+
}
|
|
215
|
+
})
|
|
216
|
+
|
|
217
|
+
agent = await props.factory({
|
|
218
|
+
stepTracer: props.stepTracer,
|
|
219
|
+
tracer,
|
|
220
|
+
logger,
|
|
221
|
+
scheduler,
|
|
222
|
+
getMessages: () => {
|
|
223
|
+
let messages: Array<MessageEntry['payload']> = []
|
|
224
|
+
let curState = state
|
|
225
|
+
while (true) {
|
|
226
|
+
curState.history
|
|
227
|
+
.filter((entry) => entry.type === 'message')
|
|
228
|
+
.reverse()
|
|
229
|
+
.forEach((entry) => {
|
|
230
|
+
messages.push(entry.payload)
|
|
231
|
+
})
|
|
232
|
+
if (!curState.prev) {
|
|
233
|
+
break
|
|
234
|
+
}
|
|
235
|
+
curState = states[curState.prev]
|
|
236
|
+
}
|
|
237
|
+
return messages.reverse()
|
|
238
|
+
},
|
|
239
|
+
sendMessage: async (message: string | Message) => {
|
|
240
|
+
if (typeof message === 'string') {
|
|
241
|
+
state.history.push({
|
|
242
|
+
type: 'message',
|
|
243
|
+
payload: { text: message, sender: 'agent' }
|
|
244
|
+
})
|
|
245
|
+
await props.sendMessage({ text: message, sender: 'agent' })
|
|
246
|
+
} else {
|
|
247
|
+
state.history.push({
|
|
248
|
+
type: 'message',
|
|
249
|
+
payload: message
|
|
250
|
+
})
|
|
251
|
+
await props.sendMessage({ text: message.text, sender: message.sender })
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
sendAction,
|
|
255
|
+
ctx
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
function addState() {
|
|
259
|
+
if (!scheduler) {
|
|
260
|
+
throw new Error('Cannot add state: agent is not initialized')
|
|
261
|
+
}
|
|
262
|
+
console.log('!! add state')
|
|
263
|
+
const newState = createState(scheduler.serialize(), state.id)
|
|
264
|
+
state.next = newState.id
|
|
265
|
+
states[state.id] = clone({ ...state, schedule: scheduler.serialize() })
|
|
266
|
+
props.saveStates(Object.values(states))
|
|
267
|
+
state = newState
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
return {
|
|
271
|
+
agent,
|
|
272
|
+
tracer,
|
|
273
|
+
basePath: props.basePath,
|
|
274
|
+
ctx,
|
|
275
|
+
selectState: async (
|
|
276
|
+
stateHistory: AgentState[],
|
|
277
|
+
stateId?: string | null,
|
|
278
|
+
isInitialLoad?: boolean
|
|
279
|
+
) => {
|
|
280
|
+
states = {}
|
|
281
|
+
stateHistory.forEach((state) => {
|
|
282
|
+
states[state.id] = state
|
|
283
|
+
})
|
|
284
|
+
console.log('states: ' + stateHistory.length, stateId)
|
|
285
|
+
if (stateHistory.length === 0 || !stateId) {
|
|
286
|
+
// this agent loaded for the first time
|
|
287
|
+
console.log(' --- init agent ---')
|
|
288
|
+
state = createState({}, null)
|
|
289
|
+
if (agent) {
|
|
290
|
+
await (isVoiceAgent(agent) ? agent.onCallStart() : agent.start())
|
|
291
|
+
}
|
|
292
|
+
return
|
|
293
|
+
}
|
|
294
|
+
let loadedState = states[stateId]
|
|
295
|
+
if (!loadedState) {
|
|
296
|
+
return
|
|
297
|
+
}
|
|
298
|
+
console.log(' --- loaded state history: ', loadedState.history.length, '---')
|
|
299
|
+
state = loadedState
|
|
300
|
+
const replay: AgentState[] = []
|
|
301
|
+
replay.push(loadedState)
|
|
302
|
+
while (loadedState.prev) {
|
|
303
|
+
loadedState = states[loadedState.prev]
|
|
304
|
+
replay.push(loadedState)
|
|
305
|
+
}
|
|
306
|
+
console.log('replay: ' + replay.length)
|
|
307
|
+
replay.reverse().forEach((state) => {
|
|
308
|
+
state.history.forEach((entry) => {
|
|
309
|
+
switch (entry.type) {
|
|
310
|
+
case 'message':
|
|
311
|
+
props.sendMessage(entry.payload)
|
|
312
|
+
break
|
|
313
|
+
case 'action':
|
|
314
|
+
props.sendAction(entry.payload)
|
|
315
|
+
break
|
|
316
|
+
case 'log':
|
|
317
|
+
props.sendLog(entry.payload)
|
|
318
|
+
break
|
|
319
|
+
}
|
|
320
|
+
})
|
|
321
|
+
})
|
|
322
|
+
scheduler?.setState(state.schedule)
|
|
323
|
+
if (!isInitialLoad) {
|
|
324
|
+
addState()
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
selectStep: async (step: string) => {
|
|
328
|
+
currentStep = step
|
|
329
|
+
const selectedStep = tracer.getSteps().find((s) => s.name === step)
|
|
330
|
+
const prompt = await selectedStep?.prompt.content()
|
|
331
|
+
if (prompt) {
|
|
332
|
+
await props.sendPrompt(prompt)
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
updateContext: async (context: Context) => {
|
|
336
|
+
console.log('--- update context ---')
|
|
337
|
+
ctx.swap(context)
|
|
338
|
+
props.contextPersistence.save(props.agentId, 'default', context)
|
|
339
|
+
},
|
|
340
|
+
updatePrompt: async (prompt: string) => {
|
|
341
|
+
console.log('--- update prompt ---')
|
|
342
|
+
const selectedStep = tracer.getSteps().find((s) => s.name === currentStep)
|
|
343
|
+
if (selectedStep?.prompt.type !== 'file') {
|
|
344
|
+
return
|
|
345
|
+
}
|
|
346
|
+
const promptPath = selectedStep?.prompt.path
|
|
347
|
+
// TODO replace with persistence
|
|
348
|
+
const path = join(props.basePath, selectedStep?.prompt.path)
|
|
349
|
+
fs.promises
|
|
350
|
+
.writeFile(path, prompt, 'utf-8')
|
|
351
|
+
.then(() => {
|
|
352
|
+
console.debug('FS: saved prompt:', promptPath)
|
|
353
|
+
})
|
|
354
|
+
.catch((error) => {
|
|
355
|
+
console.error('FS: failed to save prompt:', error)
|
|
356
|
+
})
|
|
357
|
+
},
|
|
358
|
+
triggerAction: async (action: string) => {
|
|
359
|
+
if (!agent) {
|
|
360
|
+
throw new Error('Cannot trigger action: agent is not initialized')
|
|
361
|
+
}
|
|
362
|
+
if (!scheduler) {
|
|
363
|
+
throw new Error('Cannot trigger action: scheduler is not initialized')
|
|
364
|
+
}
|
|
365
|
+
if ('isAssigned' in agent && (await agent.isAssigned())) {
|
|
366
|
+
try {
|
|
367
|
+
await scheduler.triggerAction(action)
|
|
368
|
+
} catch (e) {
|
|
369
|
+
await agent.onFatalError(e as any)
|
|
370
|
+
}
|
|
371
|
+
state.schedule = scheduler.serialize()
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
handleMessage: async (message: Message) => {
|
|
375
|
+
if (!agent) {
|
|
376
|
+
throw new Error('Cannot handle message: agent is not initialized')
|
|
377
|
+
}
|
|
378
|
+
console.log(' --- handle message --- ')
|
|
379
|
+
state.history.push({
|
|
380
|
+
type: 'message',
|
|
381
|
+
payload: message
|
|
382
|
+
})
|
|
383
|
+
if (isVoiceAgent(agent)) {
|
|
384
|
+
const reactAct = makeAction(sendAction, 'Agent', 'Streaming response')
|
|
385
|
+
await reactAct('started')
|
|
386
|
+
await agent.streamResponse()
|
|
387
|
+
await reactAct('completed')
|
|
388
|
+
} else {
|
|
389
|
+
// text agent
|
|
390
|
+
if (await agent.isAssigned()) {
|
|
391
|
+
try {
|
|
392
|
+
const reactAct = makeAction(sendAction, 'Agent', 'React on message')
|
|
393
|
+
await reactAct('started')
|
|
394
|
+
await agent.reactOnMessage()
|
|
395
|
+
await reactAct('completed')
|
|
396
|
+
|
|
397
|
+
const respondAct = makeAction(sendAction, 'Agent', 'Compose reply')
|
|
398
|
+
await respondAct('started')
|
|
399
|
+
await agent.respondToMessage()
|
|
400
|
+
await respondAct('completed')
|
|
401
|
+
} catch (e) {
|
|
402
|
+
await agent.onFatalError(e as any)
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
addState()
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
function isVoiceAgent(agent: TestAgent): agent is TestVoiceAgent {
|
|
412
|
+
return 'streamResponse' in agent
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
function createState(schedule: DelayedActions, prev: string | null) {
|
|
416
|
+
const state: AgentState = {
|
|
417
|
+
id: new Date().toISOString(),
|
|
418
|
+
name: new Date().toLocaleString(),
|
|
419
|
+
history: [],
|
|
420
|
+
schedule,
|
|
421
|
+
prev,
|
|
422
|
+
next: null
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
return state
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
function clone(obj: any) {
|
|
429
|
+
return JSON.parse(JSON.stringify(obj))
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
function userMessage(st: AgentState): string | undefined {
|
|
433
|
+
for (const entry of st.history) {
|
|
434
|
+
if (entry.type === 'message') {
|
|
435
|
+
const m = entry.payload as Message
|
|
436
|
+
if (m.sender === 'user') {
|
|
437
|
+
if (typeof (m as any).text === 'string' && (m as any).text.trim()) {
|
|
438
|
+
return (m as any).text
|
|
439
|
+
}
|
|
440
|
+
if (typeof (m as any).imageUrl === 'string' && (m as any).imageUrl.trim()) {
|
|
441
|
+
return `[image] ${(m as any).imageUrl}`
|
|
442
|
+
}
|
|
443
|
+
return JSON.stringify(m)
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
return undefined
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
async function loadSchemaFile(basePath: string, promptPath: string) {
|
|
451
|
+
const dir = path.dirname(promptPath)
|
|
452
|
+
const schemaPath = join(basePath, dir, 'schema.ts')
|
|
453
|
+
console.log('loadSchemaFile', schemaPath)
|
|
454
|
+
try {
|
|
455
|
+
return await fs.promises.readFile(schemaPath, 'utf-8')
|
|
456
|
+
} catch (e) {
|
|
457
|
+
console.error(e)
|
|
458
|
+
}
|
|
459
|
+
}
|