@recombine-ai/bosun 0.10.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -0
- package/bin/bosun.js +188 -43
- package/build/client/_app/immutable/assets/0.Dz9hcoGY.css +1 -0
- package/build/client/_app/immutable/assets/0.Dz9hcoGY.css.br +0 -0
- package/build/client/_app/immutable/assets/0.Dz9hcoGY.css.gz +0 -0
- package/build/client/_app/immutable/assets/10.BX46PfEJ.css.gz +0 -0
- package/build/client/_app/immutable/assets/18.C5apk4jm.css.gz +0 -0
- package/build/client/_app/immutable/assets/2.DxwYfh1z.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.Dzh7_Q8n.css.gz +0 -0
- package/build/client/_app/immutable/assets/5.CZVw96CJ.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.DlSPCZj0.css.gz +0 -0
- package/build/client/_app/immutable/assets/AgentSidebar.BL1i3rB_.css.gz +0 -0
- package/build/client/_app/immutable/assets/Input.CJ8KyccG.css.gz +0 -0
- package/build/client/_app/immutable/assets/Modal.tn0RQdqM.css.gz +0 -0
- package/build/client/_app/immutable/assets/Popper.CLTyHc88.css.gz +0 -0
- package/build/client/_app/immutable/assets/Tab.DlCfjMY1.css.gz +0 -0
- package/build/client/_app/immutable/assets/chat-content.Cabnnfyv.css.gz +0 -0
- package/build/client/_app/immutable/assets/editor.BMIWPGx3.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{BbgtW0nn.js → -g1l5aoS.js} +3 -3
- package/build/client/_app/immutable/chunks/-g1l5aoS.js.br +0 -0
- package/build/client/_app/immutable/chunks/-g1l5aoS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/0cvrggvQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/25W9uPmb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/4Ik7cdeQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/5Rap-vPy.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BhoEG2uc.js → 7E8m6dwk.js} +1 -1
- package/build/client/_app/immutable/chunks/7E8m6dwk.js.br +0 -0
- package/build/client/_app/immutable/chunks/7E8m6dwk.js.gz +0 -0
- package/build/client/_app/immutable/chunks/7qRqthsa.js +1 -0
- package/build/client/_app/immutable/chunks/7qRqthsa.js.br +2 -0
- package/build/client/_app/immutable/chunks/7qRqthsa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{M-7sJE5g.js → AocOovHL.js} +2 -2
- package/build/client/_app/immutable/chunks/AocOovHL.js.br +0 -0
- package/build/client/_app/immutable/chunks/AocOovHL.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B03wrqEc.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B0iEglSe.js +1 -0
- package/build/client/_app/immutable/chunks/B0iEglSe.js.br +0 -0
- package/build/client/_app/immutable/chunks/B0iEglSe.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B5zXfXm9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B9Xyijhd.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BFG1Mk7z.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CByqsLTI.js → BIpSIzUr.js} +1 -1
- package/build/client/_app/immutable/chunks/BIpSIzUr.js.br +0 -0
- package/build/client/_app/immutable/chunks/BIpSIzUr.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BIv9DU6q.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BKlk5iyT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BL8rPcmP.js +1 -0
- package/build/client/_app/immutable/chunks/BL8rPcmP.js.br +0 -0
- package/build/client/_app/immutable/chunks/BL8rPcmP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BM0jKynj.js +1 -0
- package/build/client/_app/immutable/chunks/BM0jKynj.js.br +0 -0
- package/build/client/_app/immutable/chunks/BM0jKynj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BMYSavKM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CIXWWiNs.js → BR5f5i_E.js} +1 -1
- package/build/client/_app/immutable/chunks/BR5f5i_E.js.br +0 -0
- package/build/client/_app/immutable/chunks/BR5f5i_E.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BSkB5QuD.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BTvePR6r.js +1 -0
- package/build/client/_app/immutable/chunks/BTvePR6r.js.br +2 -0
- package/build/client/_app/immutable/chunks/BTvePR6r.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BU7aeYn4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BY8d35y9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B_c3zf-v.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B_fMsGYe.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BaJupSGV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BaLxmfj-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bc-ZgV77.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CjrpbQ5G.js → Bcu62lFq.js} +1 -1
- package/build/client/_app/immutable/chunks/Bcu62lFq.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bcu62lFq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BfEKNvv3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bhzvs7bI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bio4gycK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BoFRg7Ot.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bqgm2twL.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BrgZPUOV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BsTHnhdd.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C-whEtKd.js +1 -0
- package/build/client/_app/immutable/chunks/C-whEtKd.js.br +2 -0
- package/build/client/_app/immutable/chunks/C-whEtKd.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C1FmrZbK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C1WqE8CP.js +1 -0
- package/build/client/_app/immutable/chunks/C1WqE8CP.js.br +2 -0
- package/build/client/_app/immutable/chunks/C1WqE8CP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{18TZju1H.js → C4SnSfql.js} +1 -1
- package/build/client/_app/immutable/chunks/C4SnSfql.js.br +0 -0
- package/build/client/_app/immutable/chunks/C4SnSfql.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C4mbwMvt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C5WLch3f.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CAFoob5N.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CCSDG5nI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CDGzqUPQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CDntyWJ8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CFKIUWau.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CFOPXBzS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CGinwM47.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CLLBncYj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/COyEY5Pt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CPajHgWi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CSv1VDXg.js +1 -0
- package/build/client/_app/immutable/chunks/CSv1VDXg.js.br +0 -0
- package/build/client/_app/immutable/chunks/CSv1VDXg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CVwtpugi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CX-rkNHf.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CXOwvkN_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{C3xZmy9H.js → CXo2BVs0.js} +1 -1
- package/build/client/_app/immutable/chunks/CXo2BVs0.js.br +0 -0
- package/build/client/_app/immutable/chunks/CXo2BVs0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{8AHOieX7.js → CZLNSMhF.js} +17 -17
- package/build/client/_app/immutable/chunks/CZLNSMhF.js.br +0 -0
- package/build/client/_app/immutable/chunks/CZLNSMhF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CdQndTaG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Ce3n6wWz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cg7bfA9N.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cosugfe8.js +1 -0
- package/build/client/_app/immutable/chunks/Cosugfe8.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cosugfe8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cp1zYvxS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CpIb_Oan.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cpb6xl2v.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cphgjts3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CqxCTxvJ.js +1 -0
- package/build/client/_app/immutable/chunks/CqxCTxvJ.js.br +0 -0
- package/build/client/_app/immutable/chunks/CqxCTxvJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CrxwEwqu.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CwNk8-XU.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CwmAWymP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BoYwKlhd.js → CxLG58rb.js} +1 -1
- package/build/client/_app/immutable/chunks/CxLG58rb.js.br +0 -0
- package/build/client/_app/immutable/chunks/CxLG58rb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CzKuDChf.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D-MeaMDU.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BFZvm_aX.js → D-puyTnN.js} +1 -1
- package/build/client/_app/immutable/chunks/D-puyTnN.js.br +0 -0
- package/build/client/_app/immutable/chunks/D-puyTnN.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D3h14YRZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D4obUD_s.js +1 -0
- package/build/client/_app/immutable/chunks/D4obUD_s.js.br +0 -0
- package/build/client/_app/immutable/chunks/D4obUD_s.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D5C2fndG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BjbsXXMP.js → D8e7SQh9.js} +1 -1
- package/build/client/_app/immutable/chunks/D8e7SQh9.js.br +0 -0
- package/build/client/_app/immutable/chunks/D8e7SQh9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DDMPVpvs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DDwshQtU.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DHaeiCBh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DLQqXQ6R.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CHE9OFXA.js → DNLcpWO_.js} +1 -1
- package/build/client/_app/immutable/chunks/DNLcpWO_.js.br +0 -0
- package/build/client/_app/immutable/chunks/DNLcpWO_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DRIMs3uA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DSZPf7rp.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DTECt2xU.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DTlGvFHe.js +11 -0
- package/build/client/_app/immutable/chunks/DTlGvFHe.js.br +0 -0
- package/build/client/_app/immutable/chunks/DTlGvFHe.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DUeN9t8P.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DWH0347h.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DXyYeYxl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{hS1PAb5I.js → DYhTBLDc.js} +1 -1
- package/build/client/_app/immutable/chunks/DYhTBLDc.js.br +0 -0
- package/build/client/_app/immutable/chunks/DYhTBLDc.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DZxMt77D.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dd3NCNK9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DfzH4Xui.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DgyLZaXg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DjDhNM9l.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DlZKMmqG.js +4 -0
- package/build/client/_app/immutable/chunks/DlZKMmqG.js.br +0 -0
- package/build/client/_app/immutable/chunks/DlZKMmqG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DnHyzjbg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DrQuvNYM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Drc7WvVn.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dv0gjm25.js +1 -0
- package/build/client/_app/immutable/chunks/Dv0gjm25.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dv0gjm25.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{d-TWvvCu.js → Dv8m1cTI.js} +1 -1
- package/build/client/_app/immutable/chunks/Dv8m1cTI.js.br +0 -0
- package/build/client/_app/immutable/chunks/{d-TWvvCu.js.gz → Dv8m1cTI.js.gz} +0 -0
- package/build/client/_app/immutable/chunks/DwJ7jVG9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DyP6w7ZV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{0a4GbU-O.js → HJHYLHDn.js} +1 -1
- package/build/client/_app/immutable/chunks/HJHYLHDn.js.br +0 -0
- package/build/client/_app/immutable/chunks/HJHYLHDn.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DkeWvyEi.js → HXxIsSOO.js} +1 -1
- package/build/client/_app/immutable/chunks/HXxIsSOO.js.br +0 -0
- package/build/client/_app/immutable/chunks/HXxIsSOO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/JcG4w2gF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/OA8UcISh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/T0seCQS_.js +1 -0
- package/build/client/_app/immutable/chunks/T0seCQS_.js.br +0 -0
- package/build/client/_app/immutable/chunks/T0seCQS_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Tw7wswEv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CAOT34jI.js → UiXQyKcj.js} +1 -1
- package/build/client/_app/immutable/chunks/UiXQyKcj.js.br +0 -0
- package/build/client/_app/immutable/chunks/UiXQyKcj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/YWi4-JPR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ZGfwyPNq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Zznr-cwX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CynZnIyI.js → _yZg6Sf-.js} +2 -2
- package/build/client/_app/immutable/chunks/_yZg6Sf-.js.br +0 -0
- package/build/client/_app/immutable/chunks/_yZg6Sf-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/bynEV6cE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/dUCx_-0o.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ddC1NP9R.js.gz +0 -0
- package/build/client/_app/immutable/chunks/deUWdS0T.js.gz +0 -0
- package/build/client/_app/immutable/chunks/gULlE0tz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/i9-g7ZhI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ks45gSgq.js +1 -0
- package/build/client/_app/immutable/chunks/ks45gSgq.js.br +0 -0
- package/build/client/_app/immutable/chunks/ks45gSgq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/nf6ki56Z.js.gz +0 -0
- package/build/client/_app/immutable/chunks/pnP8ivHi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/rUNN04Wq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/tGk8EFnU.js.gz +0 -0
- package/build/client/_app/immutable/chunks/xC2C8d09.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.qxHHRD2v.js +2 -0
- package/build/client/_app/immutable/entry/app.qxHHRD2v.js.br +0 -0
- package/build/client/_app/immutable/entry/app.qxHHRD2v.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CSxD7zE8.js +1 -0
- package/build/client/_app/immutable/entry/start.CSxD7zE8.js.br +2 -0
- package/build/client/_app/immutable/entry/start.CSxD7zE8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.DXz9KfRr.js → 0.BiYgQci8.js} +2 -2
- package/build/client/_app/immutable/nodes/0.BiYgQci8.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BiYgQci8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.CShtqUFK.js +1 -0
- package/build/client/_app/immutable/nodes/1.CShtqUFK.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.CShtqUFK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.dE-XOJgk.js +7 -0
- package/build/client/_app/immutable/nodes/10.dE-XOJgk.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.dE-XOJgk.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.CsTD16Gn.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12.DYXd_leK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.DQMjAUKq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/14.C59tyoG0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{15.yHpdn4IC.js → 15.Wmhj7gOy.js} +1 -1
- package/build/client/_app/immutable/nodes/15.Wmhj7gOy.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.Wmhj7gOy.js.gz +0 -0
- package/build/client/_app/immutable/nodes/16.DRwcAQjb.js.gz +0 -0
- package/build/client/_app/immutable/nodes/17.BwzZwCD0.js +3 -0
- package/build/client/_app/immutable/nodes/17.BwzZwCD0.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.BwzZwCD0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/18.BUMDuaQF.js +11 -0
- package/build/client/_app/immutable/nodes/18.BUMDuaQF.js.br +0 -0
- package/build/client/_app/immutable/nodes/18.BUMDuaQF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.DC1Zz78t.js → 2.DniQTiGZ.js} +3 -3
- package/build/client/_app/immutable/nodes/2.DniQTiGZ.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DniQTiGZ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.BIO1e-qq.js +1 -0
- package/build/client/_app/immutable/nodes/3.BIO1e-qq.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BIO1e-qq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.C3SmjDhF.js → 4.BwfVTawo.js} +1 -1
- package/build/client/_app/immutable/nodes/4.BwfVTawo.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BwfVTawo.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.DdodCQcX.js +1 -0
- package/build/client/_app/immutable/nodes/5.DdodCQcX.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.DdodCQcX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.EIjYVI_W.js +1 -0
- package/build/client/_app/immutable/nodes/6.EIjYVI_W.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.EIjYVI_W.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.7N4iPidV.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.lyH0lIKf.js → 8.2oZsfzo8.js} +1 -1
- package/build/client/_app/immutable/nodes/8.2oZsfzo8.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.2oZsfzo8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.CjWG6Ha9.js +2 -0
- package/build/client/_app/immutable/nodes/9.CjWG6Ha9.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CjWG6Ha9.js.gz +0 -0
- package/build/client/_app/immutable/workers/css.worker-BRIrhzkG.js.gz +0 -0
- package/build/client/_app/immutable/workers/editor.worker-DX6ApQqM.js.gz +0 -0
- package/build/client/_app/immutable/workers/html.worker-CBI4EQBP.js.gz +0 -0
- package/build/client/_app/immutable/workers/json.worker-CIZWV9vN.js.gz +0 -0
- package/build/client/_app/immutable/workers/ts.worker-Ds4I2Msu.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/client/fonts.css.gz +0 -0
- package/build/client/recombine.svg.gz +0 -0
- package/build/client/telescope-icon.svg.gz +0 -0
- package/build/client/ui/arrow_tests.svg.gz +0 -0
- package/build/client/ui/paperclip.svg.gz +0 -0
- package/build/client/ui/send.svg.gz +0 -0
- package/build/server/chunks/0-S8VzkGgQ.js +9 -0
- package/build/server/chunks/0-S8VzkGgQ.js.map +1 -0
- package/build/server/chunks/1-BQkMpHdq.js +9 -0
- package/build/server/chunks/{1-DHJzzXji.js.map → 1-BQkMpHdq.js.map} +1 -1
- package/build/server/chunks/10-D1k3_nkw.js +9 -0
- package/build/server/chunks/10-D1k3_nkw.js.map +1 -0
- package/build/server/chunks/{15-ICdGKEie.js → 15-CZBxPMAc.js} +2 -2
- package/build/server/chunks/{15-ICdGKEie.js.map → 15-CZBxPMAc.js.map} +1 -1
- package/build/server/chunks/17-B72NO3Iu.js +9 -0
- package/build/server/chunks/17-B72NO3Iu.js.map +1 -0
- package/build/server/chunks/18-4kgQqgz-.js +9 -0
- package/build/server/chunks/18-4kgQqgz-.js.map +1 -0
- package/build/server/chunks/2-DO8jW3Pl.js +9 -0
- package/build/server/chunks/2-DO8jW3Pl.js.map +1 -0
- package/build/server/chunks/3-0_f3eZZi.js +9 -0
- package/build/server/chunks/3-0_f3eZZi.js.map +1 -0
- package/build/server/chunks/4-UxjRsyDW.js +9 -0
- package/build/server/chunks/4-UxjRsyDW.js.map +1 -0
- package/build/server/chunks/5-C7KuaSU9.js +9 -0
- package/build/server/chunks/{5-CwrZ3RpM.js.map → 5-C7KuaSU9.js.map} +1 -1
- package/build/server/chunks/6-C6EG0SXo.js +9 -0
- package/build/server/chunks/{6-BtuvKB8a.js.map → 6-C6EG0SXo.js.map} +1 -1
- package/build/server/chunks/8-BTSvDZhI.js +9 -0
- package/build/server/chunks/8-BTSvDZhI.js.map +1 -0
- package/build/server/chunks/9-CepnUatA.js +9 -0
- package/build/server/chunks/9-CepnUatA.js.map +1 -0
- package/build/server/chunks/AgentSidebar-XdGj1sqT.js.map +1 -1
- package/build/server/chunks/{Button-Dsy3QY7B.js → Button-BLigKkGG.js} +2 -2
- package/build/server/chunks/Button-BLigKkGG.js.map +1 -0
- package/build/server/chunks/{ChatStepTrace-ZynTuQTL.js → ChatStepTrace-DnvGtFpb.js} +30 -9
- package/build/server/chunks/ChatStepTrace-DnvGtFpb.js.map +1 -0
- package/build/server/chunks/{Input-CHFlfduw.js → Input-OdQKNdS6.js} +1 -2
- package/build/server/chunks/Input-OdQKNdS6.js.map +1 -0
- package/build/server/chunks/Modal-DtVsRmmO.js.map +1 -1
- package/build/server/chunks/{_layout.svelte-2zFP7RWi.js → _layout.svelte-C5Y9nSXi.js} +5 -4
- package/build/server/chunks/{_layout.svelte-2zFP7RWi.js.map → _layout.svelte-C5Y9nSXi.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-Cgnhhd3c.js → _layout.svelte-_oqm8kmr.js} +5 -5
- package/build/server/chunks/_layout.svelte-_oqm8kmr.js.map +1 -0
- package/build/server/chunks/{_page.svelte-C9wKPt_S.js → _page.svelte-BYVcy49A.js} +3 -2
- package/build/server/chunks/{_page.svelte-C9wKPt_S.js.map → _page.svelte-BYVcy49A.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Cwut2PVb.js → _page.svelte-BpRksNEG.js} +3 -2
- package/build/server/chunks/{_page.svelte-Cwut2PVb.js.map → _page.svelte-BpRksNEG.js.map} +1 -1
- package/build/server/chunks/_page.svelte-CEhhEdMi.js +2100 -0
- package/build/server/chunks/_page.svelte-CEhhEdMi.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BsIw3yWt.js → _page.svelte-DDpBtd3X.js} +3 -2
- package/build/server/chunks/{_page.svelte-BsIw3yWt.js.map → _page.svelte-DDpBtd3X.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-CY4SZM-i.js → _page.svelte-DOhPbizt.js} +137 -97
- package/build/server/chunks/_page.svelte-DOhPbizt.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DdmEn1df.js → _page.svelte-QlYvVgTj.js} +71 -5
- package/build/server/chunks/_page.svelte-QlYvVgTj.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BhU1G2ip.js → _page.svelte-bkzbqII3.js} +470 -100
- package/build/server/chunks/_page.svelte-bkzbqII3.js.map +1 -0
- package/build/server/chunks/agents-context-rV2narXG.js.map +1 -1
- package/build/server/chunks/edit-workspace-context-B1nYQ5hD.js.map +1 -1
- package/build/server/chunks/index-CSpGrMM2.js.map +1 -1
- package/build/server/chunks/latency--f3JYIRg.js +157 -0
- package/build/server/chunks/latency--f3JYIRg.js.map +1 -0
- package/build/server/chunks/log-content.svelte-CfQzj-v_.js.map +1 -1
- package/build/server/chunks/trpc-client-D8L6vWf4.js +14 -0
- package/build/server/chunks/trpc-client-D8L6vWf4.js.map +1 -0
- package/build/server/index.js +1 -1
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +14 -14
- package/build/server/manifest.js.map +1 -1
- package/package.json +6 -2
- package/src/backend/lib/voice-agent-lifecycle.test.ts +27 -0
- package/src/backend/lib/voice-agent-lifecycle.ts +15 -0
- package/src/backend/roleplay/agents.ts +172 -70
- package/src/backend/roleplay/message-dispatcher.ts +0 -7
- package/src/backend/roleplay/router.ts +6 -14
- package/src/backend/roleplay/trace-serialization.spec.ts +35 -0
- package/src/backend/roleplay/trace-serialization.ts +57 -0
- package/src/backend/roleplay/variants.ts +33 -49
- package/src/backend/server.ts +22 -3
- package/src/backend/tests/academy.ts +55 -11
- package/src/backend/tests/data.ts +167 -14
- package/src/backend/tests/emulate-agents.ts +19 -3
- package/src/backend/tests/router.ts +21 -1
- package/src/backend/tests/suite.ts +13 -4
- package/build/client/_app/immutable/assets/0.DsHRdhUK.css +0 -1
- package/build/client/_app/immutable/assets/0.DsHRdhUK.css.br +0 -0
- package/build/client/_app/immutable/assets/0.DsHRdhUK.css.gz +0 -0
- package/build/client/_app/immutable/chunks/0a4GbU-O.js.br +0 -0
- package/build/client/_app/immutable/chunks/0a4GbU-O.js.gz +0 -0
- package/build/client/_app/immutable/chunks/18TZju1H.js.br +0 -0
- package/build/client/_app/immutable/chunks/18TZju1H.js.gz +0 -0
- package/build/client/_app/immutable/chunks/5qVV3FOd.js +0 -1
- package/build/client/_app/immutable/chunks/5qVV3FOd.js.br +0 -0
- package/build/client/_app/immutable/chunks/5qVV3FOd.js.gz +0 -0
- package/build/client/_app/immutable/chunks/8AHOieX7.js.br +0 -0
- package/build/client/_app/immutable/chunks/8AHOieX7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B2CB3tIy.js +0 -1
- package/build/client/_app/immutable/chunks/B2CB3tIy.js.br +0 -0
- package/build/client/_app/immutable/chunks/B2CB3tIy.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BFZvm_aX.js.br +0 -0
- package/build/client/_app/immutable/chunks/BFZvm_aX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BQorBhFb.js +0 -1
- package/build/client/_app/immutable/chunks/BQorBhFb.js.br +0 -0
- package/build/client/_app/immutable/chunks/BQorBhFb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bas80-m6.js +0 -1
- package/build/client/_app/immutable/chunks/Bas80-m6.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bas80-m6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BbgtW0nn.js.br +0 -0
- package/build/client/_app/immutable/chunks/BbgtW0nn.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BhoEG2uc.js.br +0 -0
- package/build/client/_app/immutable/chunks/BhoEG2uc.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BjbsXXMP.js.br +0 -0
- package/build/client/_app/immutable/chunks/BjbsXXMP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BoYwKlhd.js.br +0 -0
- package/build/client/_app/immutable/chunks/BoYwKlhd.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C3xZmy9H.js.br +0 -0
- package/build/client/_app/immutable/chunks/C3xZmy9H.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CAOT34jI.js.br +0 -0
- package/build/client/_app/immutable/chunks/CAOT34jI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CByqsLTI.js.br +0 -0
- package/build/client/_app/immutable/chunks/CByqsLTI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CGS76TsG.js +0 -1
- package/build/client/_app/immutable/chunks/CGS76TsG.js.br +0 -2
- package/build/client/_app/immutable/chunks/CGS76TsG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CHE9OFXA.js.br +0 -0
- package/build/client/_app/immutable/chunks/CHE9OFXA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CIXWWiNs.js.br +0 -0
- package/build/client/_app/immutable/chunks/CIXWWiNs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CQd8uuj9.js +0 -1
- package/build/client/_app/immutable/chunks/CQd8uuj9.js.br +0 -2
- package/build/client/_app/immutable/chunks/CQd8uuj9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CV_MnPl-.js +0 -1
- package/build/client/_app/immutable/chunks/CV_MnPl-.js.br +0 -0
- package/build/client/_app/immutable/chunks/CV_MnPl-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CaligHlp.js +0 -1
- package/build/client/_app/immutable/chunks/CaligHlp.js.br +0 -0
- package/build/client/_app/immutable/chunks/CaligHlp.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CbvL5X4R.js +0 -4
- package/build/client/_app/immutable/chunks/CbvL5X4R.js.br +0 -0
- package/build/client/_app/immutable/chunks/CbvL5X4R.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CjrpbQ5G.js.br +0 -0
- package/build/client/_app/immutable/chunks/CjrpbQ5G.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cx0HrUMB.js +0 -11
- package/build/client/_app/immutable/chunks/Cx0HrUMB.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cx0HrUMB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CynZnIyI.js.br +0 -0
- package/build/client/_app/immutable/chunks/CynZnIyI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DHHC89bH.js +0 -1
- package/build/client/_app/immutable/chunks/DHHC89bH.js.br +0 -2
- package/build/client/_app/immutable/chunks/DHHC89bH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DVqtH_YB.js +0 -1
- package/build/client/_app/immutable/chunks/DVqtH_YB.js.br +0 -0
- package/build/client/_app/immutable/chunks/DVqtH_YB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DaV9XiwS.js +0 -1
- package/build/client/_app/immutable/chunks/DaV9XiwS.js.br +0 -0
- package/build/client/_app/immutable/chunks/DaV9XiwS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DkeWvyEi.js.br +0 -0
- package/build/client/_app/immutable/chunks/DkeWvyEi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/M-7sJE5g.js.br +0 -0
- package/build/client/_app/immutable/chunks/M-7sJE5g.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Ps08lWnD.js +0 -1
- package/build/client/_app/immutable/chunks/Ps08lWnD.js.br +0 -0
- package/build/client/_app/immutable/chunks/Ps08lWnD.js.gz +0 -0
- package/build/client/_app/immutable/chunks/d-TWvvCu.js.br +0 -0
- package/build/client/_app/immutable/chunks/hS1PAb5I.js.br +0 -0
- package/build/client/_app/immutable/chunks/hS1PAb5I.js.gz +0 -0
- package/build/client/_app/immutable/chunks/wZR3OpgZ.js +0 -1
- package/build/client/_app/immutable/chunks/wZR3OpgZ.js.br +0 -2
- package/build/client/_app/immutable/chunks/wZR3OpgZ.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.4nlNBoFO.js +0 -2
- package/build/client/_app/immutable/entry/app.4nlNBoFO.js.br +0 -0
- package/build/client/_app/immutable/entry/app.4nlNBoFO.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.Du6iPGlG.js +0 -1
- package/build/client/_app/immutable/entry/start.Du6iPGlG.js.br +0 -2
- package/build/client/_app/immutable/entry/start.Du6iPGlG.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.DXz9KfRr.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.DXz9KfRr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.C14tFTfE.js +0 -1
- package/build/client/_app/immutable/nodes/1.C14tFTfE.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.C14tFTfE.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.D2pJamM_.js +0 -5
- package/build/client/_app/immutable/nodes/10.D2pJamM_.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.D2pJamM_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/15.yHpdn4IC.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.yHpdn4IC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/17.tRxMrZSc.js +0 -4
- package/build/client/_app/immutable/nodes/17.tRxMrZSc.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.tRxMrZSc.js.gz +0 -0
- package/build/client/_app/immutable/nodes/18.h3m2E_FB.js +0 -11
- package/build/client/_app/immutable/nodes/18.h3m2E_FB.js.br +0 -0
- package/build/client/_app/immutable/nodes/18.h3m2E_FB.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DC1Zz78t.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DC1Zz78t.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CwOiRWmo.js +0 -1
- package/build/client/_app/immutable/nodes/3.CwOiRWmo.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CwOiRWmo.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.C3SmjDhF.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.C3SmjDhF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.26wwTN6d.js +0 -1
- package/build/client/_app/immutable/nodes/5.26wwTN6d.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.26wwTN6d.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.DYzKzkhv.js +0 -1
- package/build/client/_app/immutable/nodes/6.DYzKzkhv.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.DYzKzkhv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.lyH0lIKf.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.lyH0lIKf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.UnSjcLjn.js +0 -2
- package/build/client/_app/immutable/nodes/9.UnSjcLjn.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.UnSjcLjn.js.gz +0 -0
- package/build/server/chunks/0-D0-90TbM.js +0 -9
- package/build/server/chunks/0-D0-90TbM.js.map +0 -1
- package/build/server/chunks/1-DHJzzXji.js +0 -9
- package/build/server/chunks/10-3jjzakty.js +0 -9
- package/build/server/chunks/10-3jjzakty.js.map +0 -1
- package/build/server/chunks/17-Bozc5IJF.js +0 -9
- package/build/server/chunks/17-Bozc5IJF.js.map +0 -1
- package/build/server/chunks/18-DoqpHfoi.js +0 -9
- package/build/server/chunks/18-DoqpHfoi.js.map +0 -1
- package/build/server/chunks/2-DhghCZp5.js +0 -9
- package/build/server/chunks/2-DhghCZp5.js.map +0 -1
- package/build/server/chunks/3-Cx4tDHgq.js +0 -9
- package/build/server/chunks/3-Cx4tDHgq.js.map +0 -1
- package/build/server/chunks/4-DCqFV5Ug.js +0 -9
- package/build/server/chunks/4-DCqFV5Ug.js.map +0 -1
- package/build/server/chunks/5-CwrZ3RpM.js +0 -9
- package/build/server/chunks/6-BtuvKB8a.js +0 -9
- package/build/server/chunks/8-Di6Wb0mD.js +0 -9
- package/build/server/chunks/8-Di6Wb0mD.js.map +0 -1
- package/build/server/chunks/9-CXT-H9KT.js +0 -9
- package/build/server/chunks/9-CXT-H9KT.js.map +0 -1
- package/build/server/chunks/Button-Dsy3QY7B.js.map +0 -1
- package/build/server/chunks/ChatStepTrace-ZynTuQTL.js.map +0 -1
- package/build/server/chunks/Input-CHFlfduw.js.map +0 -1
- package/build/server/chunks/_layout.svelte-Cgnhhd3c.js.map +0 -1
- package/build/server/chunks/_page.svelte-BhU1G2ip.js.map +0 -1
- package/build/server/chunks/_page.svelte-CY4SZM-i.js.map +0 -1
- package/build/server/chunks/_page.svelte-DdmEn1df.js.map +0 -1
- package/build/server/chunks/_page.svelte-DiI_KSHV.js +0 -670
- package/build/server/chunks/_page.svelte-DiI_KSHV.js.map +0 -1
- package/build/server/chunks/trpc-client-Bucti7HD.js +0 -13
- package/build/server/chunks/trpc-client-Bucti7HD.js.map +0 -1
|
@@ -104,7 +104,7 @@ export function createRolePlayRouter(t: TRPCRootObject<TrpcContext, any, any>) {
|
|
|
104
104
|
if (entry.type !== 'message') continue
|
|
105
105
|
const payload = entry.payload
|
|
106
106
|
if (!payload || typeof payload !== 'object') continue
|
|
107
|
-
if (payload.sender !== 'user') continue
|
|
107
|
+
if (payload.sender !== 'user' && payload.sender !== 'system') continue
|
|
108
108
|
|
|
109
109
|
const rawText = payload.text
|
|
110
110
|
if (typeof rawText !== 'string') continue
|
|
@@ -130,8 +130,6 @@ export function createRolePlayRouter(t: TRPCRootObject<TrpcContext, any, any>) {
|
|
|
130
130
|
z.object({
|
|
131
131
|
agentId: AgentIdSchema,
|
|
132
132
|
region: z.string().trim().min(1).max(128).nullable().optional(),
|
|
133
|
-
prevStateId: z.string().trim().min(1).max(2048).nullable(),
|
|
134
|
-
rawUserMessage: z.string().trim().min(1).max(100_000),
|
|
135
133
|
context: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
136
134
|
promptUpdate: z
|
|
137
135
|
.object({
|
|
@@ -155,16 +153,13 @@ export function createRolePlayRouter(t: TRPCRootObject<TrpcContext, any, any>) {
|
|
|
155
153
|
const rawStates = await fsStatePersistence.load(stateKey)
|
|
156
154
|
const states = Array.isArray(rawStates) ? rawStates : []
|
|
157
155
|
const context =
|
|
158
|
-
input.context
|
|
159
|
-
|
|
160
|
-
: ((await fsContextPersistence.load('default')) as Record<string, any>) || {}
|
|
156
|
+
input.context ??
|
|
157
|
+
(((await fsContextPersistence.load('default')) as Record<string, any> | null) || {})
|
|
161
158
|
|
|
162
159
|
const variants = await generateReplyVariants({
|
|
163
160
|
agentId: input.agentId,
|
|
164
161
|
region: input.region ?? null,
|
|
165
162
|
states,
|
|
166
|
-
prevStateId: input.prevStateId ?? null,
|
|
167
|
-
rawUserMessage: input.rawUserMessage,
|
|
168
163
|
count: input.count,
|
|
169
164
|
context
|
|
170
165
|
})
|
|
@@ -183,7 +178,6 @@ export function createRolePlayRouter(t: TRPCRootObject<TrpcContext, any, any>) {
|
|
|
183
178
|
z.object({
|
|
184
179
|
agentId: AgentIdSchema,
|
|
185
180
|
region: z.string().trim().min(1).max(128).nullable().optional(),
|
|
186
|
-
targetStateId: z.string().trim().min(1).max(2048),
|
|
187
181
|
state: z.object({
|
|
188
182
|
history: z.unknown(),
|
|
189
183
|
schedule: z.unknown()
|
|
@@ -194,12 +188,10 @@ export function createRolePlayRouter(t: TRPCRootObject<TrpcContext, any, any>) {
|
|
|
194
188
|
const stateKey = resolveAgentStateKey(input.agentId, input.region ?? null)
|
|
195
189
|
const rawStates = await fsStatePersistence.load(stateKey)
|
|
196
190
|
const states = Array.isArray(rawStates) ? rawStates : []
|
|
197
|
-
|
|
198
|
-
if (states
|
|
199
|
-
throw new Error('Variants can only be applied to the latest saved reply')
|
|
200
|
-
}
|
|
191
|
+
const latestState = states.at(-1)
|
|
192
|
+
if (!latestState) throw new Error('No saved roleplay states found for this agent')
|
|
201
193
|
|
|
202
|
-
const nextStates = replaceSavedState(states,
|
|
194
|
+
const nextStates = replaceSavedState(states, latestState.id, {
|
|
203
195
|
history: input.state.history as AgentState['history'],
|
|
204
196
|
schedule: input.state.schedule as AgentState['schedule']
|
|
205
197
|
})
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import { normalizeTracePayload } from './trace-serialization'
|
|
3
|
+
|
|
4
|
+
describe('normalizeTracePayload', () => {
|
|
5
|
+
it('keeps error details when trace payloads are JSON serialized', () => {
|
|
6
|
+
const cause = new Error('schema expected array')
|
|
7
|
+
const error = new Error('Response parsing error') as Error & {
|
|
8
|
+
cause?: unknown
|
|
9
|
+
operation?: string
|
|
10
|
+
}
|
|
11
|
+
error.cause = cause
|
|
12
|
+
error.operation = 'fetchCustomerDetails'
|
|
13
|
+
|
|
14
|
+
const normalized = normalizeTracePayload({
|
|
15
|
+
name: 'request-customer-details',
|
|
16
|
+
error
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
expect(normalized.error).toMatchObject({
|
|
20
|
+
name: 'Error',
|
|
21
|
+
message: 'Response parsing error',
|
|
22
|
+
operation: 'fetchCustomerDetails',
|
|
23
|
+
cause: {
|
|
24
|
+
name: 'Error',
|
|
25
|
+
message: 'schema expected array'
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
expect(JSON.parse(JSON.stringify(normalized)).error).toMatchObject({
|
|
29
|
+
message: 'Response parsing error',
|
|
30
|
+
cause: {
|
|
31
|
+
message: 'schema expected array'
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
})
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export function normalizeTracePayload<T>(value: T): T {
|
|
2
|
+
return normalizeValue(value, new WeakMap<object, unknown>()) as T
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
function normalizeValue(value: unknown, seen: WeakMap<object, unknown>): unknown {
|
|
6
|
+
if (value == null) return value
|
|
7
|
+
if (typeof value === 'bigint') return value.toString()
|
|
8
|
+
if (typeof value !== 'object') return value
|
|
9
|
+
if (value instanceof Error) return normalizeError(value, seen)
|
|
10
|
+
if (value instanceof Date) return value.toISOString()
|
|
11
|
+
|
|
12
|
+
const existing = seen.get(value)
|
|
13
|
+
if (existing) return '[Circular]'
|
|
14
|
+
|
|
15
|
+
if (Array.isArray(value)) {
|
|
16
|
+
const next: unknown[] = []
|
|
17
|
+
seen.set(value, next)
|
|
18
|
+
for (const item of value) {
|
|
19
|
+
const normalized = normalizeValue(item, seen)
|
|
20
|
+
next.push(normalized === undefined ? null : normalized)
|
|
21
|
+
}
|
|
22
|
+
return next
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const next: Record<string, unknown> = {}
|
|
26
|
+
seen.set(value, next)
|
|
27
|
+
for (const [key, item] of Object.entries(value)) {
|
|
28
|
+
next[key] = normalizeValue(item, seen)
|
|
29
|
+
}
|
|
30
|
+
return next
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function normalizeError(error: Error, seen: WeakMap<object, unknown>): Record<string, unknown> {
|
|
34
|
+
const existing = seen.get(error)
|
|
35
|
+
if (existing) return { name: error.name || 'Error', message: '[Circular]' }
|
|
36
|
+
|
|
37
|
+
const next: Record<string, unknown> = {
|
|
38
|
+
name: error.name || 'Error',
|
|
39
|
+
message: error.message || String(error)
|
|
40
|
+
}
|
|
41
|
+
seen.set(error, next)
|
|
42
|
+
|
|
43
|
+
if (typeof error.stack === 'string' && error.stack) {
|
|
44
|
+
next.stack = error.stack
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if ('cause' in error) {
|
|
48
|
+
next.cause = normalizeValue((error as Error & { cause?: unknown }).cause, seen)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
for (const key of Object.getOwnPropertyNames(error)) {
|
|
52
|
+
if (key in next) continue
|
|
53
|
+
next[key] = normalizeValue((error as unknown as Record<string, unknown>)[key], seen)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return next
|
|
57
|
+
}
|
|
@@ -28,28 +28,30 @@ export async function generateReplyVariants(props: {
|
|
|
28
28
|
agentId: string
|
|
29
29
|
region?: string | null
|
|
30
30
|
states: AgentState[]
|
|
31
|
-
prevStateId: string | null
|
|
32
|
-
rawUserMessage: string
|
|
33
31
|
count: number
|
|
34
32
|
context: Record<string, any>
|
|
35
33
|
}): Promise<GeneratedVariant[]> {
|
|
36
|
-
const { agentId, region, states,
|
|
34
|
+
const { agentId, region, states, count, context } = props
|
|
37
35
|
if (!Number.isFinite(count) || count <= 0) return []
|
|
36
|
+
const targetState = states.at(-1)
|
|
37
|
+
if (!targetState) throw new Error('No saved roleplay state found for variants')
|
|
38
38
|
|
|
39
39
|
const rootPath = await getRootPath()
|
|
40
40
|
const { factories } = await getAgentFactories(rootPath, getImportNonce())
|
|
41
41
|
const factory = factories[agentId]
|
|
42
42
|
if (!factory) throw new Error(`Cannot find agent ${agentId}`)
|
|
43
43
|
|
|
44
|
-
const statesById = new Map
|
|
45
|
-
for (const state of states) statesById.set(state.id, clone(state))
|
|
44
|
+
const statesById = new Map(states.map((state) => [state.id, clone(state)]))
|
|
46
45
|
|
|
46
|
+
const prevStateId = targetState.prev
|
|
47
47
|
const prevState = prevStateId ? (statesById.get(prevStateId) ?? null) : null
|
|
48
48
|
if (prevStateId && !prevState) {
|
|
49
49
|
throw new Error('Could not find the previous roleplay state for this reply')
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
const message =
|
|
52
|
+
const message = latestInputMessage(targetState)
|
|
53
|
+
if (!message) throw new Error('Could not reconstruct the input message for variants')
|
|
54
|
+
|
|
53
55
|
return Promise.all(
|
|
54
56
|
Array.from({ length: count }, (_, index) =>
|
|
55
57
|
generateSingleReplyVariant({
|
|
@@ -59,7 +61,6 @@ export async function generateReplyVariants(props: {
|
|
|
59
61
|
context,
|
|
60
62
|
prevState,
|
|
61
63
|
statesById,
|
|
62
|
-
rawUserMessage,
|
|
63
64
|
message
|
|
64
65
|
})
|
|
65
66
|
)
|
|
@@ -84,20 +85,6 @@ export function replaceSavedState(
|
|
|
84
85
|
return next
|
|
85
86
|
}
|
|
86
87
|
|
|
87
|
-
function parseRawUserMessage(raw: string): Message {
|
|
88
|
-
const trimmed = String(raw ?? '').trim()
|
|
89
|
-
if (!trimmed) throw new Error('Could not reconstruct the user message for variants')
|
|
90
|
-
|
|
91
|
-
const imageMatch = /^\[image\]\s+(.+)$/u.exec(trimmed)
|
|
92
|
-
if (imageMatch) {
|
|
93
|
-
const imageUrl = (imageMatch[1] ?? '').trim()
|
|
94
|
-
if (!imageUrl) throw new Error('Image variant message is missing its URL')
|
|
95
|
-
return { sender: 'user', text: '', imageUrl }
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return { sender: 'user', text: trimmed }
|
|
99
|
-
}
|
|
100
|
-
|
|
101
88
|
function collectMessagesUpToState(
|
|
102
89
|
statesById: Map<string, AgentState>,
|
|
103
90
|
stateId: string | null
|
|
@@ -124,30 +111,32 @@ function collectMessagesUpToState(
|
|
|
124
111
|
}
|
|
125
112
|
|
|
126
113
|
function collectMessagesFromHistory(history: AgentState['history']): Message[] {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
114
|
+
return history.filter((entry) => entry.type === 'message').map((entry) => entry.payload)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function latestInputMessage(state: AgentState): Message | null {
|
|
118
|
+
const entry = [...state.history]
|
|
119
|
+
.reverse()
|
|
120
|
+
.find(
|
|
121
|
+
(entry) =>
|
|
122
|
+
entry.type === 'message' &&
|
|
123
|
+
(entry.payload.sender === 'user' || entry.payload.sender === 'system')
|
|
124
|
+
)
|
|
125
|
+
return entry ? clone(entry.payload as Message) : null
|
|
133
126
|
}
|
|
134
127
|
|
|
135
128
|
function extractVariantText(state: AgentState): string {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
}
|
|
129
|
+
const traceEntry = [...state.history].reverse().find((entry) => {
|
|
130
|
+
if (entry.type !== 'conversational-trace') return false
|
|
131
|
+
const trace = entry.payload
|
|
132
|
+
return trace.eventName === 'finished-main-streaming-step' || trace.eventName === 'sent-message'
|
|
133
|
+
})
|
|
134
|
+
if (traceEntry) return String((traceEntry.payload as ConversationalTrace).content ?? '')
|
|
144
135
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
if (payload.sender === 'agent') return String(payload.text ?? '')
|
|
150
|
-
}
|
|
136
|
+
const messageEntry = [...state.history]
|
|
137
|
+
.reverse()
|
|
138
|
+
.find((entry) => entry.type === 'message' && entry.payload.sender === 'agent')
|
|
139
|
+
if (messageEntry) return String((messageEntry.payload as Message).text ?? '')
|
|
151
140
|
|
|
152
141
|
return ''
|
|
153
142
|
}
|
|
@@ -171,10 +160,9 @@ async function generateSingleReplyVariant(props: {
|
|
|
171
160
|
context: Record<string, any>
|
|
172
161
|
prevState: AgentState | null
|
|
173
162
|
statesById: Map<string, AgentState>
|
|
174
|
-
rawUserMessage: string
|
|
175
163
|
message: Message
|
|
176
164
|
}): Promise<GeneratedVariant> {
|
|
177
|
-
const { index, factory, region, context, prevState, statesById,
|
|
165
|
+
const { index, factory, region, context, prevState, statesById, message } = props
|
|
178
166
|
|
|
179
167
|
const state = createVariantState(prevState?.id ?? null, index)
|
|
180
168
|
const scheduleSeed = clone(prevState?.schedule ?? {})
|
|
@@ -212,9 +200,6 @@ async function generateSingleReplyVariant(props: {
|
|
|
212
200
|
}
|
|
213
201
|
const conversationalTracer: ConversationalTracer = {
|
|
214
202
|
addConversationalTrace: (trace: ConversationalTrace) => {
|
|
215
|
-
;(trace as any).bosunStateId = state.id
|
|
216
|
-
;(trace as any).bosunPrevStateId = state.prev
|
|
217
|
-
;(trace as any).bosunUserMessage = rawUserMessage
|
|
218
203
|
state.history.push({
|
|
219
204
|
type: 'conversational-trace',
|
|
220
205
|
payload: trace
|
|
@@ -228,9 +213,6 @@ async function generateSingleReplyVariant(props: {
|
|
|
228
213
|
const current = (ctx.get() as Record<string, unknown> | null | undefined) || {}
|
|
229
214
|
ctx.set({ ...current, recombineRegion: region })
|
|
230
215
|
}
|
|
231
|
-
if (context && typeof context === 'object') {
|
|
232
|
-
ctx.swap(region ? { ...context, recombineRegion: region } : context)
|
|
233
|
-
}
|
|
234
216
|
|
|
235
217
|
const getMessages = () => [
|
|
236
218
|
...collectMessagesUpToState(statesById, state.prev),
|
|
@@ -263,6 +245,8 @@ async function generateSingleReplyVariant(props: {
|
|
|
263
245
|
}
|
|
264
246
|
})
|
|
265
247
|
|
|
248
|
+
ctx.swap(region ? { ...context, recombineRegion: region } : context)
|
|
249
|
+
|
|
266
250
|
scheduler.setState(scheduleSeed)
|
|
267
251
|
|
|
268
252
|
if (!state.prev && hasStart(agent)) {
|
package/src/backend/server.ts
CHANGED
|
@@ -9,12 +9,16 @@ import { createRegionConfigRouter } from './region/router'
|
|
|
9
9
|
import { createContext, type TrpcContext } from './lib/trpc-context'
|
|
10
10
|
import { cors } from './lib/middleware/cors'
|
|
11
11
|
|
|
12
|
-
const WS_PORT = 8080
|
|
13
|
-
const HTTP_PORT = 2022
|
|
12
|
+
const WS_PORT = readPort(['BOSUN_WS_PORT', 'PUBLIC_WS_PORT'], 8080)
|
|
13
|
+
const HTTP_PORT = readPort(['BOSUN_TRPC_PORT', 'PUBLIC_TRPC_PORT'], 2022)
|
|
14
14
|
|
|
15
15
|
const wss = new WebSocketServer({ port: WS_PORT })
|
|
16
16
|
|
|
17
|
-
wss.on('connection',
|
|
17
|
+
wss.on('connection', (ws) => {
|
|
18
|
+
void oldServer(ws).catch((error: unknown) => {
|
|
19
|
+
console.error(error)
|
|
20
|
+
})
|
|
21
|
+
})
|
|
18
22
|
|
|
19
23
|
console.log(`WebSocket server started on ws://localhost:${WS_PORT}`)
|
|
20
24
|
|
|
@@ -49,3 +53,18 @@ function shutdown() {
|
|
|
49
53
|
server.close()
|
|
50
54
|
wss.close()
|
|
51
55
|
}
|
|
56
|
+
|
|
57
|
+
function readPort(names: string[], fallback: number): number {
|
|
58
|
+
for (const name of names) {
|
|
59
|
+
const value = process.env[name]
|
|
60
|
+
if (!value) continue
|
|
61
|
+
|
|
62
|
+
const port = Number(value)
|
|
63
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
64
|
+
throw new Error(`Invalid port for ${name}: ${value}`)
|
|
65
|
+
}
|
|
66
|
+
return port
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return fallback
|
|
70
|
+
}
|
|
@@ -8,7 +8,7 @@ import { type Assertion as PFAssertion } from 'promptfoo'
|
|
|
8
8
|
import { tryReadConfig } from './config'
|
|
9
9
|
import { mkdir, rename, unlink, writeFile } from 'node:fs/promises'
|
|
10
10
|
import path from 'node:path'
|
|
11
|
-
import { readSuite } from './suite'
|
|
11
|
+
import { readSuite, type TestRow as SuiteTestRow } from './suite'
|
|
12
12
|
// Use types derived from promptfoo exports instead of incorrect default type imports
|
|
13
13
|
|
|
14
14
|
import type { ApiProvider, CallApiContextParams, ProviderResponse } from 'promptfoo'
|
|
@@ -30,9 +30,13 @@ interface CsvRow {
|
|
|
30
30
|
expected_output: string
|
|
31
31
|
similarity_threshold: number | string
|
|
32
32
|
pinned: 'TRUE' | 'FALSE'
|
|
33
|
-
context: string
|
|
33
|
+
context: string | Record<string, unknown>
|
|
34
|
+
mocks?: string | Record<string, unknown>
|
|
34
35
|
timeout: string
|
|
36
|
+
capture_mode?: string
|
|
35
37
|
scenario?: string
|
|
38
|
+
step?: string
|
|
39
|
+
author?: string
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
export interface ResultEntry {
|
|
@@ -65,6 +69,7 @@ export interface WrittenRunReportConfig {
|
|
|
65
69
|
}
|
|
66
70
|
|
|
67
71
|
export interface WrittenRunReportRow extends TableRow {
|
|
72
|
+
test: SuiteTestRow
|
|
68
73
|
agent: string
|
|
69
74
|
test_id: string
|
|
70
75
|
run_timestamp: string
|
|
@@ -84,6 +89,7 @@ export interface WrittenRunReport {
|
|
|
84
89
|
type PromptTestsScope = 'all' | 'pinned'
|
|
85
90
|
|
|
86
91
|
type PromptTestsSelection = { scope: PromptTestsScope } | { testId: string }
|
|
92
|
+
type CaptureMode = 'immediate' | 'final'
|
|
87
93
|
|
|
88
94
|
const activeRunsBySuiteKey = new Map<string, AbortController>()
|
|
89
95
|
|
|
@@ -209,7 +215,7 @@ function toTestInputs(
|
|
|
209
215
|
value: row.assertion_value
|
|
210
216
|
},
|
|
211
217
|
{
|
|
212
|
-
type: 'similar' as
|
|
218
|
+
type: 'similar' as const,
|
|
213
219
|
value: String(row.expected_output),
|
|
214
220
|
threshold: Number(row.similarity_threshold) / 100
|
|
215
221
|
}
|
|
@@ -217,7 +223,9 @@ function toTestInputs(
|
|
|
217
223
|
context: (() => {
|
|
218
224
|
const testCtx = makeContext(row.context)
|
|
219
225
|
return defaultContext ? mergeContexts(defaultContext, testCtx) : testCtx
|
|
220
|
-
})()
|
|
226
|
+
})(),
|
|
227
|
+
captureMode: row.capture_mode === 'final' ? 'final' : 'immediate',
|
|
228
|
+
mocks: typeof row.mocks === 'undefined' ? undefined : makeContext(row.mocks)
|
|
221
229
|
}
|
|
222
230
|
})
|
|
223
231
|
}
|
|
@@ -248,13 +256,18 @@ export class RecombineAgentProvider implements ApiProvider {
|
|
|
248
256
|
conversation: Conversation
|
|
249
257
|
conversationParseError?: string
|
|
250
258
|
context: Context
|
|
259
|
+
mocks?: Context
|
|
260
|
+
captureMode?: CaptureMode | string
|
|
251
261
|
}
|
|
252
262
|
|
|
253
263
|
if (typeof vars.conversationParseError === 'string' && vars.conversationParseError.trim()) {
|
|
254
264
|
return { output: '', error: vars.conversationParseError }
|
|
255
265
|
}
|
|
256
266
|
|
|
267
|
+
const captureMode: CaptureMode = vars.captureMode === 'final' ? 'final' : 'immediate'
|
|
257
268
|
let captured: string = ''
|
|
269
|
+
let captureEnabled = false
|
|
270
|
+
const finalCaptureErrors: string[] = []
|
|
258
271
|
const capturedLogs: string[] = []
|
|
259
272
|
const capturedStepTraces: StepTrace[] = []
|
|
260
273
|
|
|
@@ -265,7 +278,7 @@ export class RecombineAgentProvider implements ApiProvider {
|
|
|
265
278
|
// Clone the conversation so parallel runs don't share the same array reference.
|
|
266
279
|
// Shallow-clone each message; messages are simple { sender, text } objects in this flow.
|
|
267
280
|
const conv: Conversation = Array.isArray(vars.conversation)
|
|
268
|
-
?
|
|
281
|
+
? vars.conversation.map((m) => ({ ...m }))
|
|
269
282
|
: []
|
|
270
283
|
|
|
271
284
|
// Prepare a streaming log writer so logs are written as they occur
|
|
@@ -307,6 +320,9 @@ export class RecombineAgentProvider implements ApiProvider {
|
|
|
307
320
|
line = line.slice(0, 5000) + '... [TRUNCATED]'
|
|
308
321
|
}
|
|
309
322
|
capturedLogs.push(line)
|
|
323
|
+
if (captureMode === 'final' && captureEnabled && level === 'error') {
|
|
324
|
+
finalCaptureErrors.push(line)
|
|
325
|
+
}
|
|
310
326
|
try {
|
|
311
327
|
logStream.write(line + '\n')
|
|
312
328
|
} catch {
|
|
@@ -331,14 +347,24 @@ export class RecombineAgentProvider implements ApiProvider {
|
|
|
331
347
|
getMessages: () => conv,
|
|
332
348
|
sendMessage: async (message: Message | string) => {
|
|
333
349
|
const m = typeof message === 'string' ? { sender: 'agent', text: message } : message
|
|
334
|
-
if (m.sender === 'agent') {
|
|
335
|
-
|
|
336
|
-
|
|
350
|
+
if (captureEnabled && m.sender === 'agent') {
|
|
351
|
+
const text = typeof m.text === 'string' ? m.text : JSON.stringify(m)
|
|
352
|
+
if (captureMode === 'final' || !captured) {
|
|
353
|
+
captured = text
|
|
354
|
+
logger.log('Agent message captured:', captured)
|
|
355
|
+
} else {
|
|
356
|
+
logger.log('Agent message ignored after immediate capture:', text)
|
|
357
|
+
}
|
|
337
358
|
}
|
|
338
359
|
},
|
|
360
|
+
onBeforeTestResponse: () => {
|
|
361
|
+
captured = ''
|
|
362
|
+
captureEnabled = true
|
|
363
|
+
},
|
|
339
364
|
stepTracer,
|
|
340
365
|
logger,
|
|
341
366
|
context: vars.context || {},
|
|
367
|
+
mocks: vars.mocks,
|
|
342
368
|
abortSignal: this.abortSignal
|
|
343
369
|
})
|
|
344
370
|
|
|
@@ -378,6 +404,19 @@ export class RecombineAgentProvider implements ApiProvider {
|
|
|
378
404
|
? capturedStepTraces.map(sanitizeTrace)
|
|
379
405
|
: []
|
|
380
406
|
|
|
407
|
+
if (captureMode === 'final' && finalCaptureErrors.length > 0) {
|
|
408
|
+
const detail = finalCaptureErrors.at(-1) ?? 'Unknown final capture error'
|
|
409
|
+
return {
|
|
410
|
+
output: captured,
|
|
411
|
+
error: `Final capture failed because a subsequent step emitted an error: ${detail}`,
|
|
412
|
+
metadata: {
|
|
413
|
+
logs: capturedLogs,
|
|
414
|
+
stepTraces: sanitizedStepTraces,
|
|
415
|
+
rawStepTraces: capturedStepTraces
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
381
420
|
if (captured && captured.trim()) {
|
|
382
421
|
return {
|
|
383
422
|
output: captured,
|
|
@@ -531,7 +570,7 @@ export async function runPromptTests(
|
|
|
531
570
|
const onlyTestId = 'testId' in selection ? selection.testId : undefined
|
|
532
571
|
const suiteKey = suite.suiteKey
|
|
533
572
|
const loadedSuite = await readSuite(suiteKey)
|
|
534
|
-
const rows = loadedSuite.tests
|
|
573
|
+
const rows = loadedSuite.tests
|
|
535
574
|
const cfg = (await tryReadConfig(suiteKey)) || {}
|
|
536
575
|
|
|
537
576
|
const repeats = Number(cfg?.repeats ?? 1)
|
|
@@ -539,7 +578,7 @@ export async function runPromptTests(
|
|
|
539
578
|
const baseContext = loadedSuite?.meta?.defaultContext || {}
|
|
540
579
|
|
|
541
580
|
// Add an index field to each row for mapping
|
|
542
|
-
const typedRows = rows
|
|
581
|
+
const typedRows = rows
|
|
543
582
|
const indexedRows = typedRows.map((row, index) => ({ ...row, index }))
|
|
544
583
|
|
|
545
584
|
if (onlyTestId && !indexedRows.some((row) => String(row.id ?? '') === String(onlyTestId))) {
|
|
@@ -578,6 +617,8 @@ export async function runPromptTests(
|
|
|
578
617
|
agentId: suite.agentId,
|
|
579
618
|
...(suite.region ? { region: suite.region } : {}),
|
|
580
619
|
context: test.context,
|
|
620
|
+
...(typeof test.mocks !== 'undefined' ? { mocks: test.mocks } : {}),
|
|
621
|
+
captureMode: test.captureMode,
|
|
581
622
|
conversation: test.conversation,
|
|
582
623
|
...(test.conversationParseError
|
|
583
624
|
? { conversationParseError: test.conversationParseError }
|
|
@@ -639,7 +680,7 @@ export async function runPromptTests(
|
|
|
639
680
|
|
|
640
681
|
const byTestId = new Map<string, WrittenRunReportRow>()
|
|
641
682
|
|
|
642
|
-
const originalRowById = new Map<string,
|
|
683
|
+
const originalRowById = new Map<string, SuiteTestRow>()
|
|
643
684
|
for (const r of typedRows) {
|
|
644
685
|
const id = String((r as any)?.id ?? '').trim()
|
|
645
686
|
if (id) originalRowById.set(id, r)
|
|
@@ -685,6 +726,7 @@ export async function runPromptTests(
|
|
|
685
726
|
String((originalRow as any).pinned || '').toUpperCase() === 'TRUE' ? 'TRUE' : 'FALSE'
|
|
686
727
|
const nextRow: WrittenRunReportRow = {
|
|
687
728
|
...(originalRow as any),
|
|
729
|
+
test: originalRow,
|
|
688
730
|
prompts: `suite://${suiteKey}?testId=${testId}`,
|
|
689
731
|
success_rate_percent: 0,
|
|
690
732
|
success_rate: '0/0',
|
|
@@ -742,6 +784,7 @@ export async function runPromptTests(
|
|
|
742
784
|
(rowToWrite.pinned || '').toUpperCase() === 'TRUE' ? 'TRUE' : 'FALSE'
|
|
743
785
|
byTestId.set(testId, {
|
|
744
786
|
...rowToWrite,
|
|
787
|
+
test: originalRow,
|
|
745
788
|
agent: suiteKey,
|
|
746
789
|
test_id: testId,
|
|
747
790
|
run_timestamp: iso,
|
|
@@ -778,6 +821,7 @@ export async function runPromptTests(
|
|
|
778
821
|
(rowToWrite.pinned || '').toUpperCase() === 'TRUE' ? 'TRUE' : 'FALSE'
|
|
779
822
|
byTestId.set(testId, {
|
|
780
823
|
...rowToWrite,
|
|
824
|
+
test: originalRow,
|
|
781
825
|
agent: suiteKey,
|
|
782
826
|
test_id: testId,
|
|
783
827
|
run_timestamp: iso,
|