@recombine-ai/bosun 0.3.12 → 0.4.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/build/client/_app/immutable/assets/0.B5gApcUL.css +1 -0
- package/build/client/_app/immutable/assets/0.B5gApcUL.css.br +0 -0
- package/build/client/_app/immutable/assets/0.B5gApcUL.css.gz +0 -0
- package/build/client/_app/immutable/chunks/8B3OPwlB.js +1 -0
- package/build/client/_app/immutable/chunks/8B3OPwlB.js.br +2 -0
- package/build/client/_app/immutable/chunks/8B3OPwlB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B5-6Ezv3.js +1 -0
- package/build/client/_app/immutable/chunks/B5-6Ezv3.js.br +2 -0
- package/build/client/_app/immutable/chunks/B5-6Ezv3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BA8mqPb-.js +1 -0
- package/build/client/_app/immutable/chunks/BA8mqPb-.js.br +0 -0
- package/build/client/_app/immutable/chunks/BA8mqPb-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BCG4zvjp.js +2 -0
- package/build/client/_app/immutable/chunks/BCG4zvjp.js.br +0 -0
- package/build/client/_app/immutable/chunks/BCG4zvjp.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{oeB0PCTX.js → BMYSavKM.js} +1 -1
- package/build/client/_app/immutable/chunks/BMYSavKM.js.br +0 -0
- package/build/client/_app/immutable/chunks/BMYSavKM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{TO5ESkEd.js → BY8d35y9.js} +1 -1
- package/build/client/_app/immutable/chunks/BY8d35y9.js.br +0 -0
- package/build/client/_app/immutable/chunks/BY8d35y9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CFwu9ET3.js → BdZ7JhAm.js} +1 -1
- package/build/client/_app/immutable/chunks/BdZ7JhAm.js.br +0 -0
- package/build/client/_app/immutable/chunks/BdZ7JhAm.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BWo2H__f.js → BmadykGs.js} +3 -3
- package/build/client/_app/immutable/chunks/BmadykGs.js.br +0 -0
- package/build/client/_app/immutable/chunks/BmadykGs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bmb8cHfR.js +1 -0
- package/build/client/_app/immutable/chunks/Bmb8cHfR.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bmb8cHfR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bx2X1niE.js +1 -0
- package/build/client/_app/immutable/chunks/Bx2X1niE.js.br +2 -0
- package/build/client/_app/immutable/chunks/Bx2X1niE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C-xhOnoy.js +1 -0
- package/build/client/_app/immutable/chunks/C-xhOnoy.js.br +0 -0
- package/build/client/_app/immutable/chunks/C-xhOnoy.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C1FmrZbK.js +1 -0
- package/build/client/_app/immutable/chunks/C1FmrZbK.js.br +0 -0
- package/build/client/_app/immutable/chunks/C1FmrZbK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Bdb5tyDH.js → C4mbwMvt.js} +1 -1
- package/build/client/_app/immutable/chunks/C4mbwMvt.js.br +0 -0
- package/build/client/_app/immutable/chunks/C4mbwMvt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CdzpH-Ca.js → CAFoob5N.js} +1 -1
- package/build/client/_app/immutable/chunks/CAFoob5N.js.br +0 -0
- package/build/client/_app/immutable/chunks/CAFoob5N.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Bk1rEq7o.js → CGinwM47.js} +1 -1
- package/build/client/_app/immutable/chunks/CGinwM47.js.br +0 -0
- package/build/client/_app/immutable/chunks/CGinwM47.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CI-reiW2.js +1 -0
- package/build/client/_app/immutable/chunks/CI-reiW2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CI-reiW2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CNPsxMFi.js +1 -0
- package/build/client/_app/immutable/chunks/CNPsxMFi.js.br +1 -0
- package/build/client/_app/immutable/chunks/CNPsxMFi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C_ZSt1CI.js +2 -0
- package/build/client/_app/immutable/chunks/C_ZSt1CI.js.br +0 -0
- package/build/client/_app/immutable/chunks/C_ZSt1CI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CVHvdSBf.js → CfbYRn5k.js} +1 -1
- package/build/client/_app/immutable/chunks/CfbYRn5k.js.br +0 -0
- package/build/client/_app/immutable/chunks/{CVHvdSBf.js.gz → CfbYRn5k.js.gz} +0 -0
- package/build/client/_app/immutable/chunks/CqcOmWJt.js +1 -0
- package/build/client/_app/immutable/chunks/CqcOmWJt.js.br +0 -0
- package/build/client/_app/immutable/chunks/CqcOmWJt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CNMNmz2q.js → CrxwEwqu.js} +1 -1
- package/build/client/_app/immutable/chunks/CrxwEwqu.js.br +0 -0
- package/build/client/_app/immutable/chunks/CrxwEwqu.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CsYbWoTD.js +8 -0
- package/build/client/_app/immutable/chunks/CsYbWoTD.js.br +0 -0
- package/build/client/_app/immutable/chunks/CsYbWoTD.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CIIE25ox.js → CwmAWymP.js} +1 -1
- package/build/client/_app/immutable/chunks/CwmAWymP.js.br +0 -0
- package/build/client/_app/immutable/chunks/CwmAWymP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CxPv-oiS.js +1 -0
- package/build/client/_app/immutable/chunks/CxPv-oiS.js.br +0 -0
- package/build/client/_app/immutable/chunks/CxPv-oiS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DOatwnEt.js → DDMPVpvs.js} +1 -1
- package/build/client/_app/immutable/chunks/DDMPVpvs.js.br +0 -0
- package/build/client/_app/immutable/chunks/DDMPVpvs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DGa-EyU2.js +1 -0
- package/build/client/_app/immutable/chunks/DGa-EyU2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DGa-EyU2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BfHUxT3G.js → DLQqXQ6R.js} +7 -7
- package/build/client/_app/immutable/chunks/DLQqXQ6R.js.br +0 -0
- package/build/client/_app/immutable/chunks/DLQqXQ6R.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DQA6NP5y.js +2 -0
- package/build/client/_app/immutable/chunks/DQA6NP5y.js.br +0 -0
- package/build/client/_app/immutable/chunks/DQA6NP5y.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{HPBQctDD.js → DRIMs3uA.js} +1 -1
- package/build/client/_app/immutable/chunks/DRIMs3uA.js.br +0 -0
- package/build/client/_app/immutable/chunks/DRIMs3uA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{ByQey8Oa.js → DUeN9t8P.js} +1 -1
- package/build/client/_app/immutable/chunks/DUeN9t8P.js.br +0 -0
- package/build/client/_app/immutable/chunks/DUeN9t8P.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{KDW88ZZa.js → DWH0347h.js} +1 -1
- package/build/client/_app/immutable/chunks/DWH0347h.js.br +0 -0
- package/build/client/_app/immutable/chunks/DWH0347h.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BnxfhlSj.js → DZxMt77D.js} +1 -1
- package/build/client/_app/immutable/chunks/DZxMt77D.js.br +0 -0
- package/build/client/_app/immutable/chunks/DZxMt77D.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DaR1ExPh.js +1 -0
- package/build/client/_app/immutable/chunks/DaR1ExPh.js.br +0 -0
- package/build/client/_app/immutable/chunks/DaR1ExPh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{rtsVMmSs.js → DjDhNM9l.js} +1 -1
- package/build/client/_app/immutable/chunks/DjDhNM9l.js.br +0 -0
- package/build/client/_app/immutable/chunks/DjDhNM9l.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dl6q6wVH.js +1 -0
- package/build/client/_app/immutable/chunks/Dl6q6wVH.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dl6q6wVH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DptDdzMi.js +4 -0
- package/build/client/_app/immutable/chunks/DptDdzMi.js.br +0 -0
- package/build/client/_app/immutable/chunks/DptDdzMi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/JA_7cQFn.js +1 -0
- package/build/client/_app/immutable/chunks/JA_7cQFn.js.br +0 -0
- package/build/client/_app/immutable/chunks/JA_7cQFn.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BqROrg0C.js → OMeqFb0I.js} +1 -1
- package/build/client/_app/immutable/chunks/OMeqFb0I.js.br +0 -0
- package/build/client/_app/immutable/chunks/OMeqFb0I.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Ct9HfpvA.js → ZGfwyPNq.js} +1 -1
- package/build/client/_app/immutable/chunks/ZGfwyPNq.js.br +0 -0
- package/build/client/_app/immutable/chunks/ZGfwyPNq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DSfxalyG.js → bynEV6cE.js} +1 -1
- package/build/client/_app/immutable/chunks/bynEV6cE.js.br +0 -0
- package/build/client/_app/immutable/chunks/bynEV6cE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/i_HX2z3K.js +1 -0
- package/build/client/_app/immutable/chunks/i_HX2z3K.js.br +0 -0
- package/build/client/_app/immutable/chunks/i_HX2z3K.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{yWz0pZR0.js → wDFujNbC.js} +1 -1
- package/build/client/_app/immutable/chunks/wDFujNbC.js.br +0 -0
- package/build/client/_app/immutable/chunks/wDFujNbC.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CZPhtqrs.js → wtOMB7ao.js} +3 -3
- package/build/client/_app/immutable/chunks/wtOMB7ao.js.br +0 -0
- package/build/client/_app/immutable/chunks/wtOMB7ao.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DfqDSpBG.js +2 -0
- package/build/client/_app/immutable/entry/app.DfqDSpBG.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DfqDSpBG.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.Duif51BE.js +1 -0
- package/build/client/_app/immutable/entry/start.Duif51BE.js.br +2 -0
- package/build/client/_app/immutable/entry/start.Duif51BE.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.CwdXLzyE.js → 0.Dub0qZPU.js} +1 -1
- package/build/client/_app/immutable/nodes/0.Dub0qZPU.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.Dub0qZPU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.DsLuferm.js +1 -0
- package/build/client/_app/immutable/nodes/1.DsLuferm.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.DsLuferm.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{13.DaAF9e8t.js → 14.zP-B7lEl.js} +1 -1
- package/build/client/_app/immutable/nodes/14.zP-B7lEl.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.zP-B7lEl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{14.BcXGBqPj.js → 15.D2YLTl3S.js} +3 -3
- package/build/client/_app/immutable/nodes/15.D2YLTl3S.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.D2YLTl3S.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.BbzjrdMu.js +35 -0
- package/build/client/_app/immutable/nodes/2.BbzjrdMu.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.BbzjrdMu.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CS8k_54b.js +1 -0
- package/build/client/_app/immutable/nodes/3.CS8k_54b.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CS8k_54b.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.DBO0gLSr.js +1 -0
- package/build/client/_app/immutable/nodes/4.DBO0gLSr.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.DBO0gLSr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.CqUx8Ggk.js → 5.BpnPdti2.js} +1 -1
- package/build/client/_app/immutable/nodes/5.BpnPdti2.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.BpnPdti2.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.CkeP1yO3.js +1 -0
- package/build/client/_app/immutable/nodes/6.CkeP1yO3.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.CkeP1yO3.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.CB2Z5SOz.js +2 -0
- package/build/client/_app/immutable/nodes/7.CB2Z5SOz.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.CB2Z5SOz.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.B6QVJ_di.js → 8.ARGsrw2j.js} +2 -2
- package/build/client/_app/immutable/nodes/8.ARGsrw2j.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.ARGsrw2j.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.C3E_sxSn.js +5 -0
- package/build/client/_app/immutable/nodes/9.C3E_sxSn.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.C3E_sxSn.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/server/chunks/0-CbLBIQC7.js +9 -0
- package/build/server/chunks/0-CbLBIQC7.js.map +1 -0
- package/build/server/chunks/1-gh5xP1Bp.js +9 -0
- package/build/server/chunks/1-gh5xP1Bp.js.map +1 -0
- package/build/server/chunks/{9-W6XYayeK.js → 10-DZjMDIvS.js} +3 -3
- package/build/server/chunks/10-DZjMDIvS.js.map +1 -0
- package/build/server/chunks/{10-C7WLHR92.js → 11-D6F4I8KX.js} +3 -3
- package/build/server/chunks/{10-C7WLHR92.js.map → 11-D6F4I8KX.js.map} +1 -1
- package/build/server/chunks/{11-CPYwUx-7.js → 12-2vbUmx0n.js} +3 -3
- package/build/server/chunks/{11-CPYwUx-7.js.map → 12-2vbUmx0n.js.map} +1 -1
- package/build/server/chunks/{12-C5OSs5Op.js → 13-11CHqz2G.js} +3 -3
- package/build/server/chunks/{12-C5OSs5Op.js.map → 13-11CHqz2G.js.map} +1 -1
- package/build/server/chunks/{13-DPcsc1p-.js → 14-C4iOZL2L.js} +3 -3
- package/build/server/chunks/14-C4iOZL2L.js.map +1 -0
- package/build/server/chunks/15-kvHsGxjF.js +9 -0
- package/build/server/chunks/15-kvHsGxjF.js.map +1 -0
- package/build/server/chunks/2-C5u7WpBH.js +9 -0
- package/build/server/chunks/2-C5u7WpBH.js.map +1 -0
- package/build/server/chunks/3-BrobxxI7.js +9 -0
- package/build/server/chunks/3-BrobxxI7.js.map +1 -0
- package/build/server/chunks/4-ClIdwABM.js +9 -0
- package/build/server/chunks/4-ClIdwABM.js.map +1 -0
- package/build/server/chunks/5-ox8PkWxC.js +9 -0
- package/build/server/chunks/5-ox8PkWxC.js.map +1 -0
- package/build/server/chunks/{6-uS_X9B0s.js → 6-B6C38HXu.js} +7 -3
- package/build/server/chunks/6-B6C38HXu.js.map +1 -0
- package/build/server/chunks/7-BgYWIBj-.js +9 -0
- package/build/server/chunks/7-BgYWIBj-.js.map +1 -0
- package/build/server/chunks/8-CgCeoIqV.js +9 -0
- package/build/server/chunks/8-CgCeoIqV.js.map +1 -0
- package/build/server/chunks/9-CWM_WQXH.js +9 -0
- package/build/server/chunks/9-CWM_WQXH.js.map +1 -0
- package/build/server/chunks/{ChatStepTrace-B5HQ8Zv3.js → ChatStepTrace-BIghWRaw.js} +3 -59
- package/build/server/chunks/ChatStepTrace-BIghWRaw.js.map +1 -0
- package/build/server/chunks/Dropdown-Bz9eHilg.js +61 -0
- package/build/server/chunks/Dropdown-Bz9eHilg.js.map +1 -0
- package/build/server/chunks/{_layout.svelte-Svi5xbzP.js → _layout.svelte-B6NfHVfy.js} +2 -2
- package/build/server/chunks/{_layout.svelte-Svi5xbzP.js.map → _layout.svelte-B6NfHVfy.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-Fo2hGNeP.js → _layout.svelte-BKnunWZl.js} +129 -14
- package/build/server/chunks/_layout.svelte-BKnunWZl.js.map +1 -0
- package/build/server/chunks/{_layout.svelte-h89mGXIj.js → _layout.svelte-WXSvPGRU.js} +2 -2
- package/build/server/chunks/{_layout.svelte-h89mGXIj.js.map → _layout.svelte-WXSvPGRU.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-CnjXZO9K.js → _page.svelte-CLBi-ypL.js} +2 -2
- package/build/server/chunks/{_page.svelte-CnjXZO9K.js.map → _page.svelte-CLBi-ypL.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Hg-ZSzf1.js → _page.svelte-CLiLwJTq.js} +4 -3
- package/build/server/chunks/_page.svelte-CLiLwJTq.js.map +1 -0
- package/build/server/chunks/{_page.svelte-CC26hDwf.js → _page.svelte-CdczF37D.js} +3 -2
- package/build/server/chunks/_page.svelte-CdczF37D.js.map +1 -0
- package/build/server/chunks/_page.svelte-Ck9Utnoc.js +60 -0
- package/build/server/chunks/_page.svelte-Ck9Utnoc.js.map +1 -0
- package/build/server/chunks/{_page.svelte-Dl3GoTy1.js → _page.svelte-DBrprjQP.js} +5 -4
- package/build/server/chunks/_page.svelte-DBrprjQP.js.map +1 -0
- package/build/server/chunks/{error.svelte-zyW9aOoU.js → error.svelte-DP2oBSvv.js} +2 -2
- package/build/server/chunks/{error.svelte-zyW9aOoU.js.map → error.svelte-DP2oBSvv.js.map} +1 -1
- package/build/server/chunks/{index3-DeV2OWZf.js → index3-CpMl6FwG.js} +7 -2
- package/build/server/chunks/index3-CpMl6FwG.js.map +1 -0
- package/build/server/index.js +1 -1
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +32 -24
- package/build/server/manifest.js.map +1 -1
- package/package.json +1 -1
- package/src/backend/lib/get-agent-factories.ts +13 -2
- package/src/backend/lib/get-root-path.ts +30 -5
- package/src/backend/lib/import-nonce.ts +10 -0
- package/src/backend/region/router.ts +67 -0
- package/src/backend/roleplay/agents.ts +51 -11
- package/src/backend/roleplay/old-server.ts +4 -1
- package/src/backend/server.ts +3 -1
- package/src/backend/tests/academy.ts +106 -73
- package/src/backend/tests/emulate-agents.ts +20 -1
- package/src/backend/tests/router.ts +220 -38
- package/build/client/_app/immutable/assets/0.DsZUjxNX.css +0 -1
- package/build/client/_app/immutable/assets/0.DsZUjxNX.css.br +0 -0
- package/build/client/_app/immutable/assets/0.DsZUjxNX.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BTlUd_Lo.js +0 -8
- package/build/client/_app/immutable/chunks/BTlUd_Lo.js.br +0 -0
- package/build/client/_app/immutable/chunks/BTlUd_Lo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BVDwc-2z.js +0 -1
- package/build/client/_app/immutable/chunks/BVDwc-2z.js.br +0 -0
- package/build/client/_app/immutable/chunks/BVDwc-2z.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BWo2H__f.js.br +0 -0
- package/build/client/_app/immutable/chunks/BWo2H__f.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BXkrt826.js +0 -1
- package/build/client/_app/immutable/chunks/BXkrt826.js.br +0 -0
- package/build/client/_app/immutable/chunks/BXkrt826.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bdb5tyDH.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bdb5tyDH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BfHUxT3G.js.br +0 -0
- package/build/client/_app/immutable/chunks/BfHUxT3G.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bk1rEq7o.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bk1rEq7o.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BkclRFLx.js +0 -3
- package/build/client/_app/immutable/chunks/BkclRFLx.js.br +0 -0
- package/build/client/_app/immutable/chunks/BkclRFLx.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BnxfhlSj.js.br +0 -0
- package/build/client/_app/immutable/chunks/BnxfhlSj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BqROrg0C.js.br +0 -0
- package/build/client/_app/immutable/chunks/BqROrg0C.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ByQey8Oa.js.br +0 -0
- package/build/client/_app/immutable/chunks/ByQey8Oa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CFwu9ET3.js.br +0 -0
- package/build/client/_app/immutable/chunks/CFwu9ET3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CIIE25ox.js.br +0 -0
- package/build/client/_app/immutable/chunks/CIIE25ox.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CNMNmz2q.js.br +0 -0
- package/build/client/_app/immutable/chunks/CNMNmz2q.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CNvyTQrC.js +0 -1
- package/build/client/_app/immutable/chunks/CNvyTQrC.js.br +0 -2
- package/build/client/_app/immutable/chunks/CNvyTQrC.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CVHvdSBf.js.br +0 -0
- package/build/client/_app/immutable/chunks/CYiRxJxs.js +0 -1
- package/build/client/_app/immutable/chunks/CYiRxJxs.js.br +0 -0
- package/build/client/_app/immutable/chunks/CYiRxJxs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CZPhtqrs.js.br +0 -0
- package/build/client/_app/immutable/chunks/CZPhtqrs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CdzpH-Ca.js.br +0 -0
- package/build/client/_app/immutable/chunks/CdzpH-Ca.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cf8q8_nj.js +0 -1
- package/build/client/_app/immutable/chunks/Cf8q8_nj.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cf8q8_nj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cg3F7Z11.js +0 -1
- package/build/client/_app/immutable/chunks/Cg3F7Z11.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cg3F7Z11.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CpSIcnXs.js +0 -1
- package/build/client/_app/immutable/chunks/CpSIcnXs.js.br +0 -0
- package/build/client/_app/immutable/chunks/CpSIcnXs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Ct9HfpvA.js.br +0 -0
- package/build/client/_app/immutable/chunks/Ct9HfpvA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D42t-LiJ.js +0 -4
- package/build/client/_app/immutable/chunks/D42t-LiJ.js.br +0 -0
- package/build/client/_app/immutable/chunks/D42t-LiJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DJPBfZIx.js +0 -1
- package/build/client/_app/immutable/chunks/DJPBfZIx.js.br +0 -0
- package/build/client/_app/immutable/chunks/DJPBfZIx.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DOatwnEt.js.br +0 -0
- package/build/client/_app/immutable/chunks/DOatwnEt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DQqJYxgt.js +0 -1
- package/build/client/_app/immutable/chunks/DQqJYxgt.js.br +0 -0
- package/build/client/_app/immutable/chunks/DQqJYxgt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DSfxalyG.js.br +0 -0
- package/build/client/_app/immutable/chunks/DSfxalyG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DujX6kBV.js +0 -2
- package/build/client/_app/immutable/chunks/DujX6kBV.js.br +0 -0
- package/build/client/_app/immutable/chunks/DujX6kBV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/HPBQctDD.js.br +0 -0
- package/build/client/_app/immutable/chunks/HPBQctDD.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Jaf1TUfw.js +0 -1
- package/build/client/_app/immutable/chunks/Jaf1TUfw.js.br +0 -2
- package/build/client/_app/immutable/chunks/Jaf1TUfw.js.gz +0 -0
- package/build/client/_app/immutable/chunks/KDW88ZZa.js.br +0 -0
- package/build/client/_app/immutable/chunks/KDW88ZZa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/TO5ESkEd.js.br +0 -0
- package/build/client/_app/immutable/chunks/TO5ESkEd.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ZH2wGpZM.js +0 -1
- package/build/client/_app/immutable/chunks/ZH2wGpZM.js.br +0 -0
- package/build/client/_app/immutable/chunks/ZH2wGpZM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/axPa8Xqj.js +0 -1
- package/build/client/_app/immutable/chunks/axPa8Xqj.js.br +0 -0
- package/build/client/_app/immutable/chunks/axPa8Xqj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/oeB0PCTX.js.br +0 -0
- package/build/client/_app/immutable/chunks/oeB0PCTX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/rtsVMmSs.js.br +0 -0
- package/build/client/_app/immutable/chunks/rtsVMmSs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/uS7H_Vea.js +0 -1
- package/build/client/_app/immutable/chunks/uS7H_Vea.js.br +0 -0
- package/build/client/_app/immutable/chunks/uS7H_Vea.js.gz +0 -0
- package/build/client/_app/immutable/chunks/yWz0pZR0.js.br +0 -0
- package/build/client/_app/immutable/chunks/yWz0pZR0.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.yCT9HX-q.js +0 -2
- package/build/client/_app/immutable/entry/app.yCT9HX-q.js.br +0 -0
- package/build/client/_app/immutable/entry/app.yCT9HX-q.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.FbJeJ8ru.js +0 -1
- package/build/client/_app/immutable/entry/start.FbJeJ8ru.js.br +0 -2
- package/build/client/_app/immutable/entry/start.FbJeJ8ru.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.CwdXLzyE.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CwdXLzyE.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.CJSJdR2U.js +0 -1
- package/build/client/_app/immutable/nodes/1.CJSJdR2U.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.CJSJdR2U.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.DaAF9e8t.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.DaAF9e8t.js.gz +0 -0
- package/build/client/_app/immutable/nodes/14.BcXGBqPj.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.BcXGBqPj.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DISE-c5q.js +0 -35
- package/build/client/_app/immutable/nodes/2.DISE-c5q.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DISE-c5q.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.BtAUfPNQ.js +0 -1
- package/build/client/_app/immutable/nodes/3.BtAUfPNQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BtAUfPNQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.DylMSvDw.js +0 -1
- package/build/client/_app/immutable/nodes/4.DylMSvDw.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.DylMSvDw.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CqUx8Ggk.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CqUx8Ggk.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.CPYhLc46.js +0 -1
- package/build/client/_app/immutable/nodes/6.CPYhLc46.js.br +0 -4
- package/build/client/_app/immutable/nodes/6.CPYhLc46.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.B6QVJ_di.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.B6QVJ_di.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.DhQWMEsP.js +0 -6
- package/build/client/_app/immutable/nodes/8.DhQWMEsP.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.DhQWMEsP.js.gz +0 -0
- package/build/server/chunks/0-DnZ1CmpH.js +0 -9
- package/build/server/chunks/0-DnZ1CmpH.js.map +0 -1
- package/build/server/chunks/1-BW2Kegam.js +0 -9
- package/build/server/chunks/1-BW2Kegam.js.map +0 -1
- package/build/server/chunks/13-DPcsc1p-.js.map +0 -1
- package/build/server/chunks/14-Ddk1gksy.js +0 -9
- package/build/server/chunks/14-Ddk1gksy.js.map +0 -1
- package/build/server/chunks/2-Co5sKQqN.js +0 -9
- package/build/server/chunks/2-Co5sKQqN.js.map +0 -1
- package/build/server/chunks/3-Czp3KEzr.js +0 -9
- package/build/server/chunks/3-Czp3KEzr.js.map +0 -1
- package/build/server/chunks/4-BML64sIA.js +0 -9
- package/build/server/chunks/4-BML64sIA.js.map +0 -1
- package/build/server/chunks/5-9yHXJzTj.js +0 -9
- package/build/server/chunks/5-9yHXJzTj.js.map +0 -1
- package/build/server/chunks/6-uS_X9B0s.js.map +0 -1
- package/build/server/chunks/7-CgqcRvLC.js +0 -9
- package/build/server/chunks/7-CgqcRvLC.js.map +0 -1
- package/build/server/chunks/8-CddjGDu2.js +0 -9
- package/build/server/chunks/8-CddjGDu2.js.map +0 -1
- package/build/server/chunks/9-W6XYayeK.js.map +0 -1
- package/build/server/chunks/ChatStepTrace-B5HQ8Zv3.js.map +0 -1
- package/build/server/chunks/_layout.svelte-Fo2hGNeP.js.map +0 -1
- package/build/server/chunks/_page.svelte-CC26hDwf.js.map +0 -1
- package/build/server/chunks/_page.svelte-Dl3GoTy1.js.map +0 -1
- package/build/server/chunks/_page.svelte-Hg-ZSzf1.js.map +0 -1
- package/build/server/chunks/index3-DeV2OWZf.js.map +0 -1
- /package/build/client/_app/immutable/assets/{14.C5apk4jm.css → 15.C5apk4jm.css} +0 -0
- /package/build/client/_app/immutable/assets/{14.C5apk4jm.css.br → 15.C5apk4jm.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{14.C5apk4jm.css.gz → 15.C5apk4jm.css.gz} +0 -0
- /package/build/client/_app/immutable/assets/{7.DlSPCZj0.css → 8.DlSPCZj0.css} +0 -0
- /package/build/client/_app/immutable/assets/{7.DlSPCZj0.css.br → 8.DlSPCZj0.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{7.DlSPCZj0.css.gz → 8.DlSPCZj0.css.gz} +0 -0
- /package/build/client/_app/immutable/assets/{8.BX46PfEJ.css → 9.BX46PfEJ.css} +0 -0
- /package/build/client/_app/immutable/assets/{8.BX46PfEJ.css.br → 9.BX46PfEJ.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{8.BX46PfEJ.css.gz → 9.BX46PfEJ.css.gz} +0 -0
- /package/build/client/_app/immutable/assets/{bosun-theme.tn0RQdqM.css → Modal.tn0RQdqM.css} +0 -0
- /package/build/client/_app/immutable/assets/{bosun-theme.tn0RQdqM.css.br → Modal.tn0RQdqM.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{bosun-theme.tn0RQdqM.css.gz → Modal.tn0RQdqM.css.gz} +0 -0
- /package/build/client/_app/immutable/assets/{ChatStepTrace.NFJFjHv0.css → chat-content.NFJFjHv0.css} +0 -0
- /package/build/client/_app/immutable/assets/{ChatStepTrace.NFJFjHv0.css.br → chat-content.NFJFjHv0.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{ChatStepTrace.NFJFjHv0.css.gz → chat-content.NFJFjHv0.css.gz} +0 -0
- /package/build/client/_app/immutable/nodes/{9.BVI-eEdV.js → 10.BVI-eEdV.js} +0 -0
- /package/build/client/_app/immutable/nodes/{9.BVI-eEdV.js.br → 10.BVI-eEdV.js.br} +0 -0
- /package/build/client/_app/immutable/nodes/{9.BVI-eEdV.js.gz → 10.BVI-eEdV.js.gz} +0 -0
- /package/build/client/_app/immutable/nodes/{10.BHSGZYEC.js → 11.BHSGZYEC.js} +0 -0
- /package/build/client/_app/immutable/nodes/{10.BHSGZYEC.js.br → 11.BHSGZYEC.js.br} +0 -0
- /package/build/client/_app/immutable/nodes/{10.BHSGZYEC.js.gz → 11.BHSGZYEC.js.gz} +0 -0
- /package/build/client/_app/immutable/nodes/{11.CZ_7M4AF.js → 12.CZ_7M4AF.js} +0 -0
- /package/build/client/_app/immutable/nodes/{11.CZ_7M4AF.js.br → 12.CZ_7M4AF.js.br} +0 -0
- /package/build/client/_app/immutable/nodes/{11.CZ_7M4AF.js.gz → 12.CZ_7M4AF.js.gz} +0 -0
- /package/build/client/_app/immutable/nodes/{12.DRr2l3NZ.js → 13.DRr2l3NZ.js} +0 -0
- /package/build/client/_app/immutable/nodes/{12.DRr2l3NZ.js.br → 13.DRr2l3NZ.js.br} +0 -0
- /package/build/client/_app/immutable/nodes/{12.DRr2l3NZ.js.gz → 13.DRr2l3NZ.js.gz} +0 -0
|
@@ -85,28 +85,37 @@ type PromptTestsScope = 'all' | 'pinned'
|
|
|
85
85
|
|
|
86
86
|
type PromptTestsSelection = { scope: PromptTestsScope } | { testId: string }
|
|
87
87
|
|
|
88
|
-
const
|
|
88
|
+
const activeRunsBySuiteKey = new Map<string, AbortController>()
|
|
89
89
|
|
|
90
|
-
export
|
|
91
|
-
|
|
90
|
+
export type SuiteSelection = {
|
|
91
|
+
// `suiteKey` is the filesystem/report key (e.g. `voiceSupport.en-gb`).
|
|
92
|
+
// `agentId` is the canonical factory key (workflow export key, e.g. `voiceSupport`).
|
|
93
|
+
// Keeping these separate avoids any parsing/guessing in the test runner.
|
|
94
|
+
suiteKey: string
|
|
95
|
+
agentId: string
|
|
96
|
+
region?: string
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function cancelPromptTests(suiteKey: string): boolean {
|
|
100
|
+
const controller = activeRunsBySuiteKey.get(suiteKey)
|
|
92
101
|
if (!controller) return false
|
|
93
102
|
controller.abort()
|
|
94
103
|
return true
|
|
95
104
|
}
|
|
96
105
|
|
|
97
106
|
export async function runPromptTestsManaged(
|
|
98
|
-
|
|
107
|
+
suite: SuiteSelection,
|
|
99
108
|
selection: PromptTestsSelection = { scope: 'pinned' }
|
|
100
109
|
): Promise<WrittenRunReport> {
|
|
101
|
-
if (
|
|
110
|
+
if (activeRunsBySuiteKey.has(suite.suiteKey)) {
|
|
102
111
|
throw new Error('Tests already running for this agent')
|
|
103
112
|
}
|
|
104
113
|
const controller = new AbortController()
|
|
105
|
-
|
|
114
|
+
activeRunsBySuiteKey.set(suite.suiteKey, controller)
|
|
106
115
|
try {
|
|
107
|
-
return await runPromptTests(
|
|
116
|
+
return await runPromptTests(suite, selection, { signal: controller.signal })
|
|
108
117
|
} finally {
|
|
109
|
-
|
|
118
|
+
activeRunsBySuiteKey.delete(suite.suiteKey)
|
|
110
119
|
}
|
|
111
120
|
}
|
|
112
121
|
|
|
@@ -134,7 +143,8 @@ function parseConversationFromSheet(conversation: string | undefined | null): Co
|
|
|
134
143
|
}
|
|
135
144
|
}
|
|
136
145
|
|
|
137
|
-
for (
|
|
146
|
+
for (let i = 0; i < lines.length; i++) {
|
|
147
|
+
const line = lines[i] ?? ''
|
|
138
148
|
const m = roleMatch(line)
|
|
139
149
|
if (m) {
|
|
140
150
|
// Starting a new role block; flush previous
|
|
@@ -146,8 +156,16 @@ function parseConversationFromSheet(conversation: string | undefined | null): Co
|
|
|
146
156
|
// Continuation of the current role block (allow blank lines)
|
|
147
157
|
buffer.push(line)
|
|
148
158
|
} else {
|
|
149
|
-
//
|
|
150
|
-
|
|
159
|
+
// No current role block yet.
|
|
160
|
+
// Previously we silently ignored preamble lines; that's almost always a test authoring mistake
|
|
161
|
+
// (e.g. a malformed "User:"/"Agent:" prefix like "?Agent:").
|
|
162
|
+
if (line.trim()) {
|
|
163
|
+
const snippet = line.length > 200 ? `${line.slice(0, 200)}…` : line
|
|
164
|
+
throw new Error(
|
|
165
|
+
`Unparsed conversation content before the first role block at line ${i + 1}: ${snippet}\n` +
|
|
166
|
+
`Start each block with "User:", "Agent:" (or "Assistant:"), or "System:".`
|
|
167
|
+
)
|
|
168
|
+
}
|
|
151
169
|
}
|
|
152
170
|
}
|
|
153
171
|
|
|
@@ -170,43 +188,55 @@ function toTestInputs(
|
|
|
170
188
|
if ('testId' in selection) return String(r.id ?? '') === String(selection.testId)
|
|
171
189
|
return selection.scope === 'all' ? true : r.pinned === 'TRUE'
|
|
172
190
|
})
|
|
173
|
-
.map((row) =>
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
191
|
+
.map((row) => {
|
|
192
|
+
let conversation: Conversation = []
|
|
193
|
+
let conversationParseError: string | undefined
|
|
194
|
+
try {
|
|
195
|
+
conversation = parseConversationFromSheet(row.conversation)
|
|
196
|
+
} catch (err) {
|
|
197
|
+
conversation = []
|
|
198
|
+
conversationParseError = err instanceof Error ? err.message : String(err)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return {
|
|
202
|
+
id: row.id,
|
|
203
|
+
scenario: row.scenario,
|
|
204
|
+
conversation,
|
|
205
|
+
conversationParseError,
|
|
206
|
+
assertions: [
|
|
207
|
+
{
|
|
208
|
+
type: row.assertion_type as PFAssertion['type'],
|
|
209
|
+
value: row.assertion_value
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
type: 'similar' as 'similar',
|
|
213
|
+
value: String(row.expected_output),
|
|
214
|
+
threshold: Number(row.similarity_threshold) / 100
|
|
215
|
+
}
|
|
216
|
+
],
|
|
217
|
+
context: (() => {
|
|
218
|
+
const testCtx = makeContext(row.context)
|
|
219
|
+
return defaultContext ? mergeContexts(defaultContext, testCtx) : testCtx
|
|
220
|
+
})(),
|
|
221
|
+
timeoutSeconds: (() => {
|
|
222
|
+
const rawValue = row.timeout
|
|
223
|
+
if (rawValue === undefined || rawValue === null || String(rawValue).trim() === '') {
|
|
224
|
+
throw new Error('Timeout value is required')
|
|
225
|
+
}
|
|
226
|
+
const raw = Number(rawValue)
|
|
227
|
+
if (isNaN(raw)) {
|
|
228
|
+
throw new Error(`Invalid timeout value: ${rawValue}`)
|
|
229
|
+
}
|
|
230
|
+
if (raw > 1000) {
|
|
231
|
+
throw new Error(`Timeout value exceeds maximum of 1000: ${raw}`)
|
|
232
|
+
}
|
|
233
|
+
if (raw < 0) {
|
|
234
|
+
throw new Error(`Timeout value must be non-negative: ${raw}`)
|
|
235
|
+
}
|
|
236
|
+
return raw
|
|
237
|
+
})()
|
|
238
|
+
}
|
|
239
|
+
})
|
|
210
240
|
}
|
|
211
241
|
|
|
212
242
|
export class RecombineAgentProvider implements ApiProvider {
|
|
@@ -230,12 +260,18 @@ export class RecombineAgentProvider implements ApiProvider {
|
|
|
230
260
|
async callApi(_prompt: string, context?: CallApiContextParams): Promise<ProviderResponse> {
|
|
231
261
|
const projectRoot = path.dirname(await getRootPath())
|
|
232
262
|
const vars = (context?.vars || {}) as unknown as {
|
|
233
|
-
|
|
263
|
+
agentId: string
|
|
264
|
+
region?: string
|
|
234
265
|
conversation: Conversation
|
|
266
|
+
conversationParseError?: string
|
|
235
267
|
context: Context
|
|
236
268
|
timeoutSeconds?: number
|
|
237
269
|
}
|
|
238
270
|
|
|
271
|
+
if (typeof vars.conversationParseError === 'string' && vars.conversationParseError.trim()) {
|
|
272
|
+
return { output: '', error: vars.conversationParseError }
|
|
273
|
+
}
|
|
274
|
+
|
|
239
275
|
let captured: string = ''
|
|
240
276
|
const capturedLogs: string[] = []
|
|
241
277
|
const capturedStepTraces: StepTrace[] = []
|
|
@@ -249,15 +285,6 @@ export class RecombineAgentProvider implements ApiProvider {
|
|
|
249
285
|
const conv: Conversation = Array.isArray(vars.conversation)
|
|
250
286
|
? (vars.conversation as Conversation).map((m) => ({ ...m }))
|
|
251
287
|
: []
|
|
252
|
-
const lastUserIndex = (() => {
|
|
253
|
-
for (let i = conv.length - 1; i >= 0; i--) {
|
|
254
|
-
if (conv[i]?.sender === 'user') return i
|
|
255
|
-
}
|
|
256
|
-
return -1
|
|
257
|
-
})()
|
|
258
|
-
if (lastUserIndex < 0) {
|
|
259
|
-
return { output: '', error: 'No user message found in conversation' }
|
|
260
|
-
}
|
|
261
288
|
|
|
262
289
|
// Prepare a streaming log writer so logs are written as they occur
|
|
263
290
|
{
|
|
@@ -317,7 +344,8 @@ export class RecombineAgentProvider implements ApiProvider {
|
|
|
317
344
|
try {
|
|
318
345
|
// Run the agent via loadAgents using provided conversation
|
|
319
346
|
await loadAgents({
|
|
320
|
-
agentId: vars.
|
|
347
|
+
agentId: vars.agentId,
|
|
348
|
+
region: vars.region,
|
|
321
349
|
getMessages: () => conv,
|
|
322
350
|
sendMessage: async (message: Message | string) => {
|
|
323
351
|
const m = typeof message === 'string' ? { sender: 'agent', text: message } : message
|
|
@@ -513,20 +541,21 @@ function buildTableRows(
|
|
|
513
541
|
}
|
|
514
542
|
|
|
515
543
|
export async function runPromptTests(
|
|
516
|
-
|
|
544
|
+
suite: SuiteSelection,
|
|
517
545
|
selection: PromptTestsSelection = { scope: 'pinned' },
|
|
518
546
|
opts?: { signal?: AbortSignal }
|
|
519
547
|
): Promise<WrittenRunReport> {
|
|
520
548
|
const signal = opts?.signal
|
|
521
549
|
const scope = 'scope' in selection ? selection.scope : 'pinned'
|
|
522
550
|
const onlyTestId = 'testId' in selection ? selection.testId : undefined
|
|
523
|
-
const
|
|
524
|
-
const
|
|
525
|
-
const
|
|
551
|
+
const suiteKey = suite.suiteKey
|
|
552
|
+
const loadedSuite = await readSuite(suiteKey)
|
|
553
|
+
const rows = loadedSuite.tests as unknown as CsvRow[]
|
|
554
|
+
const cfg = (await tryReadConfig(suiteKey)) || {}
|
|
526
555
|
|
|
527
556
|
const repeats = Number(cfg?.repeats ?? 1)
|
|
528
557
|
const concurrency = Number(cfg?.concurrency ?? 1)
|
|
529
|
-
const baseContext =
|
|
558
|
+
const baseContext = loadedSuite?.meta?.defaultContext || {}
|
|
530
559
|
|
|
531
560
|
// Add an index field to each row for mapping
|
|
532
561
|
const typedRows = rows as unknown as CsvRow[]
|
|
@@ -565,9 +594,13 @@ export async function runPromptTests(
|
|
|
565
594
|
assert: test.assertions,
|
|
566
595
|
model: 'not used!',
|
|
567
596
|
vars: {
|
|
568
|
-
|
|
597
|
+
agentId: suite.agentId,
|
|
598
|
+
...(suite.region ? { region: suite.region } : {}),
|
|
569
599
|
context: test.context,
|
|
570
600
|
conversation: test.conversation,
|
|
601
|
+
...(test.conversationParseError
|
|
602
|
+
? { conversationParseError: test.conversationParseError }
|
|
603
|
+
: {}),
|
|
571
604
|
timeoutSeconds: (test as any).timeoutSeconds
|
|
572
605
|
}
|
|
573
606
|
}
|
|
@@ -583,7 +616,7 @@ export async function runPromptTests(
|
|
|
583
616
|
// Use full ISO timestamp and sanitize ':' for filesystem safety
|
|
584
617
|
const iso = new Date().toISOString()
|
|
585
618
|
const isoFile = iso.replace(/:/g, '-')
|
|
586
|
-
const outPath = path.join(outDir, `${
|
|
619
|
+
const outPath = path.join(outDir, `${suiteKey}.${isoFile}.report.json`)
|
|
587
620
|
|
|
588
621
|
async function writeReport(report: WrittenRunReport) {
|
|
589
622
|
const dir = path.dirname(outPath)
|
|
@@ -614,7 +647,7 @@ export async function runPromptTests(
|
|
|
614
647
|
}
|
|
615
648
|
|
|
616
649
|
const body: WrittenRunReport = {
|
|
617
|
-
agent,
|
|
650
|
+
agent: suiteKey,
|
|
618
651
|
run_timestamp: iso,
|
|
619
652
|
run_scope: scope,
|
|
620
653
|
run_config: runConfig,
|
|
@@ -672,11 +705,11 @@ export async function runPromptTests(
|
|
|
672
705
|
String((originalRow as any).pinned || '').toUpperCase() === 'TRUE' ? 'TRUE' : 'FALSE'
|
|
673
706
|
const nextRow: WrittenRunReportRow = {
|
|
674
707
|
...(originalRow as any),
|
|
675
|
-
prompts: `suite://${
|
|
708
|
+
prompts: `suite://${suiteKey}?testId=${testId}`,
|
|
676
709
|
success_rate_percent: 0,
|
|
677
710
|
success_rate: '0/0',
|
|
678
711
|
results: [],
|
|
679
|
-
agent,
|
|
712
|
+
agent: suiteKey,
|
|
680
713
|
test_id: testId,
|
|
681
714
|
run_timestamp: iso,
|
|
682
715
|
run_config: JSON.stringify(runConfig),
|
|
@@ -724,12 +757,12 @@ export async function runPromptTests(
|
|
|
724
757
|
})
|
|
725
758
|
|
|
726
759
|
if (originalRow && testId) {
|
|
727
|
-
const rowToWrite = buildTableRows([ev], [originalRow],
|
|
760
|
+
const rowToWrite = buildTableRows([ev], [originalRow], suiteKey)[0]
|
|
728
761
|
const pinned: 'TRUE' | 'FALSE' =
|
|
729
762
|
(rowToWrite.pinned || '').toUpperCase() === 'TRUE' ? 'TRUE' : 'FALSE'
|
|
730
763
|
byTestId.set(testId, {
|
|
731
764
|
...rowToWrite,
|
|
732
|
-
agent,
|
|
765
|
+
agent: suiteKey,
|
|
733
766
|
test_id: testId,
|
|
734
767
|
run_timestamp: iso,
|
|
735
768
|
run_config: JSON.stringify(runConfig),
|
|
@@ -760,12 +793,12 @@ export async function runPromptTests(
|
|
|
760
793
|
|
|
761
794
|
// Persist failure row immediately for real-time UI updates.
|
|
762
795
|
if (originalRow && testId) {
|
|
763
|
-
const rowToWrite = buildTableRows([ev], [originalRow],
|
|
796
|
+
const rowToWrite = buildTableRows([ev], [originalRow], suiteKey)[0]
|
|
764
797
|
const pinned: 'TRUE' | 'FALSE' =
|
|
765
798
|
(rowToWrite.pinned || '').toUpperCase() === 'TRUE' ? 'TRUE' : 'FALSE'
|
|
766
799
|
byTestId.set(testId, {
|
|
767
800
|
...rowToWrite,
|
|
768
|
-
agent,
|
|
801
|
+
agent: suiteKey,
|
|
769
802
|
test_id: testId,
|
|
770
803
|
run_timestamp: iso,
|
|
771
804
|
run_config: JSON.stringify(runConfig),
|
|
@@ -7,10 +7,12 @@ import {
|
|
|
7
7
|
type TestVoiceAgent
|
|
8
8
|
} from '@recombine-ai/engine'
|
|
9
9
|
import { getAgentFactories } from '../lib/get-agent-factories'
|
|
10
|
+
import { getImportNonce } from '../lib/import-nonce'
|
|
10
11
|
import { getRootPath } from '../lib/get-root-path'
|
|
11
12
|
|
|
12
13
|
export async function loadAgents(props: {
|
|
13
14
|
agentId: string
|
|
15
|
+
region?: string | null
|
|
14
16
|
getMessages: () => Message[]
|
|
15
17
|
sendMessage: (message: Message | string) => Promise<void>
|
|
16
18
|
stepTracer: StepTracer
|
|
@@ -21,6 +23,7 @@ export async function loadAgents(props: {
|
|
|
21
23
|
}): Promise<void> {
|
|
22
24
|
const {
|
|
23
25
|
agentId,
|
|
26
|
+
region,
|
|
24
27
|
getMessages,
|
|
25
28
|
sendMessage,
|
|
26
29
|
stepTracer: stepTracer,
|
|
@@ -29,7 +32,8 @@ export async function loadAgents(props: {
|
|
|
29
32
|
timeoutSeconds,
|
|
30
33
|
abortSignal
|
|
31
34
|
} = props
|
|
32
|
-
const
|
|
35
|
+
const importNonce = getImportNonce()
|
|
36
|
+
const { factories } = await getAgentFactories(await getRootPath(), importNonce)
|
|
33
37
|
const factory = factories[agentId]
|
|
34
38
|
if (!factory) throw new Error('Factory not found')
|
|
35
39
|
|
|
@@ -68,6 +72,13 @@ export async function loadAgents(props: {
|
|
|
68
72
|
addStep: () => {}
|
|
69
73
|
}
|
|
70
74
|
|
|
75
|
+
if (region) {
|
|
76
|
+
// The UI-selected region is stored in Bosun's runtime ctx and consumed by the project's workflows.
|
|
77
|
+
// Setting it before calling the factory ensures region-scoped config/strings are used for this run.
|
|
78
|
+
const current = (ctx.get() as Record<string, unknown> | null | undefined) || {}
|
|
79
|
+
ctx.set({ ...current, recombineRegion: region })
|
|
80
|
+
}
|
|
81
|
+
|
|
71
82
|
const agent = await factory({
|
|
72
83
|
stepTracer: stepTracer,
|
|
73
84
|
stepRegistry,
|
|
@@ -123,6 +134,10 @@ export async function loadAgents(props: {
|
|
|
123
134
|
}
|
|
124
135
|
|
|
125
136
|
try {
|
|
137
|
+
if (hasStart(agent)) {
|
|
138
|
+
// Some project workflows (e.g. voice) persist required per-run state (like region) during `start()`.
|
|
139
|
+
await withAbort(Promise.resolve().then(() => agent.start()))
|
|
140
|
+
}
|
|
126
141
|
if (isVoiceAgent(agent)) {
|
|
127
142
|
await withAbort(agent.streamResponse())
|
|
128
143
|
} else {
|
|
@@ -150,3 +165,7 @@ export async function loadAgents(props: {
|
|
|
150
165
|
function isVoiceAgent(agent: TestAgent): agent is TestVoiceAgent {
|
|
151
166
|
return 'streamResponse' in agent
|
|
152
167
|
}
|
|
168
|
+
|
|
169
|
+
function hasStart(agent: TestAgent): agent is TestAgent & { start: () => Promise<void> | void } {
|
|
170
|
+
return typeof (agent as { start?: unknown }).start === 'function'
|
|
171
|
+
}
|