@recombine-ai/bosun 0.16.2 → 0.17.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 +24 -0
- package/bin/bosun.js +153 -20
- package/bin/git-mode.js +1139 -0
- package/build/client/_app/immutable/assets/0.D9HpHezk.css +1 -0
- package/build/client/_app/immutable/assets/0.D9HpHezk.css.br +0 -0
- package/build/client/_app/immutable/assets/0.D9HpHezk.css.gz +0 -0
- package/build/client/_app/immutable/assets/{2.DtxQDOXx.css → 2.Bc0Sf3YD.css} +1 -1
- package/build/client/_app/immutable/assets/2.Bc0Sf3YD.css.br +0 -0
- package/build/client/_app/immutable/assets/2.Bc0Sf3YD.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{DneQQ7D5.js → -3ZOIHDA.js} +1 -1
- package/build/client/_app/immutable/chunks/-3ZOIHDA.js.br +0 -0
- package/build/client/_app/immutable/chunks/-3ZOIHDA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/7hV1SZxK.js +1 -0
- package/build/client/_app/immutable/chunks/7hV1SZxK.js.br +2 -0
- package/build/client/_app/immutable/chunks/7hV1SZxK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B-dTD_wm.js +1 -0
- package/build/client/_app/immutable/chunks/B-dTD_wm.js.br +0 -0
- package/build/client/_app/immutable/chunks/B-dTD_wm.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{UqjCSZmA.js → B-iasAJv.js} +1 -1
- package/build/client/_app/immutable/chunks/B-iasAJv.js.br +0 -0
- package/build/client/_app/immutable/chunks/B-iasAJv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BDijIo6D.js +33 -0
- package/build/client/_app/immutable/chunks/BDijIo6D.js.br +0 -0
- package/build/client/_app/immutable/chunks/BDijIo6D.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BHB0Pj1h.js +2 -0
- package/build/client/_app/immutable/chunks/BHB0Pj1h.js.br +0 -0
- package/build/client/_app/immutable/chunks/BHB0Pj1h.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Bog028VR.js → BKfmN1Rj.js} +1 -1
- package/build/client/_app/immutable/chunks/BKfmN1Rj.js.br +0 -0
- package/build/client/_app/immutable/chunks/BKfmN1Rj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{pPpIn6tB.js → BlFOg-Sd.js} +1 -1
- package/build/client/_app/immutable/chunks/BlFOg-Sd.js.br +0 -0
- package/build/client/_app/immutable/chunks/BlFOg-Sd.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CJcZ2GVC.js → Byg3jr1u.js} +1 -1
- package/build/client/_app/immutable/chunks/Byg3jr1u.js.br +0 -0
- package/build/client/_app/immutable/chunks/Byg3jr1u.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Bmd5zhWC.js → BzxxLgHi.js} +1 -1
- package/build/client/_app/immutable/chunks/BzxxLgHi.js.br +0 -0
- package/build/client/_app/immutable/chunks/BzxxLgHi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CEHsomMo.js → C4UC6AgE.js} +1 -1
- package/build/client/_app/immutable/chunks/C4UC6AgE.js.br +0 -0
- package/build/client/_app/immutable/chunks/{CEHsomMo.js.gz → C4UC6AgE.js.gz} +0 -0
- package/build/client/_app/immutable/chunks/C60AG6QQ.js +1 -0
- package/build/client/_app/immutable/chunks/C60AG6QQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/C60AG6QQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CAIfVN23.js +1 -0
- package/build/client/_app/immutable/chunks/CAIfVN23.js.br +0 -0
- package/build/client/_app/immutable/chunks/CAIfVN23.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{JcG4w2gF.js → CB9iDxwI.js} +1 -1
- package/build/client/_app/immutable/chunks/CB9iDxwI.js.br +0 -0
- package/build/client/_app/immutable/chunks/CB9iDxwI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DoD3q5w5.js → CD_KdWs9.js} +1 -1
- package/build/client/_app/immutable/chunks/CD_KdWs9.js.br +0 -0
- package/build/client/_app/immutable/chunks/CD_KdWs9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CDy1LBR5.js +1 -0
- package/build/client/_app/immutable/chunks/CDy1LBR5.js.br +0 -0
- package/build/client/_app/immutable/chunks/CDy1LBR5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DCXjBDmY.js → CMFNmSvo.js} +1 -1
- package/build/client/_app/immutable/chunks/CMFNmSvo.js.br +0 -0
- package/build/client/_app/immutable/chunks/CMFNmSvo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Bv1mNXs0.js → CNIn4L55.js} +1 -1
- package/build/client/_app/immutable/chunks/CNIn4L55.js.br +0 -0
- package/build/client/_app/immutable/chunks/CNIn4L55.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CUKoVL36.js +1 -0
- package/build/client/_app/immutable/chunks/CUKoVL36.js.br +0 -0
- package/build/client/_app/immutable/chunks/CUKoVL36.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CYGbCr1i.js +3 -0
- package/build/client/_app/immutable/chunks/CYGbCr1i.js.br +0 -0
- package/build/client/_app/immutable/chunks/CYGbCr1i.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CYr0FGgn.js +1 -0
- package/build/client/_app/immutable/chunks/CYr0FGgn.js.br +0 -0
- package/build/client/_app/immutable/chunks/CYr0FGgn.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DtXXy94i.js → Ce6a22qU.js} +1 -1
- package/build/client/_app/immutable/chunks/Ce6a22qU.js.br +0 -0
- package/build/client/_app/immutable/chunks/Ce6a22qU.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DfcDjAv-.js → CeoQ-OhK.js} +1 -1
- package/build/client/_app/immutable/chunks/CeoQ-OhK.js.br +0 -0
- package/build/client/_app/immutable/chunks/CeoQ-OhK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{D8mA-uZ4.js → CupXtwVS.js} +1 -1
- package/build/client/_app/immutable/chunks/CupXtwVS.js.br +0 -0
- package/build/client/_app/immutable/chunks/CupXtwVS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{B5zf3x62.js → Cy2Uze-c.js} +1 -1
- package/build/client/_app/immutable/chunks/Cy2Uze-c.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cy2Uze-c.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Dg0A8wPA.js → D8Lmn3S5.js} +1 -1
- package/build/client/_app/immutable/chunks/D8Lmn3S5.js.br +0 -0
- package/build/client/_app/immutable/chunks/D8Lmn3S5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D8doM1Y6.js +1 -0
- package/build/client/_app/immutable/chunks/D8doM1Y6.js.br +2 -0
- package/build/client/_app/immutable/chunks/D8doM1Y6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BHHfrjbV.js → D9BWOD7V.js} +1 -1
- package/build/client/_app/immutable/chunks/D9BWOD7V.js.br +3 -0
- package/build/client/_app/immutable/chunks/D9BWOD7V.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Cp_st-64.js → DBB88ZB7.js} +1 -1
- package/build/client/_app/immutable/chunks/DBB88ZB7.js.br +2 -0
- package/build/client/_app/immutable/chunks/DBB88ZB7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Dm49pcMm.js → DC7lPrn4.js} +1 -1
- package/build/client/_app/immutable/chunks/DC7lPrn4.js.br +0 -0
- package/build/client/_app/immutable/chunks/DC7lPrn4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DCwWNTpf.js +9 -0
- package/build/client/_app/immutable/chunks/DCwWNTpf.js.br +0 -0
- package/build/client/_app/immutable/chunks/DCwWNTpf.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{wcTQUnZO.js → DEnUeQNt.js} +1 -1
- package/build/client/_app/immutable/chunks/DEnUeQNt.js.br +0 -0
- package/build/client/_app/immutable/chunks/DEnUeQNt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D_laxq3h.js +1 -0
- package/build/client/_app/immutable/chunks/D_laxq3h.js.br +0 -0
- package/build/client/_app/immutable/chunks/D_laxq3h.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Ddv5LgEc.js → DfkYlKBk.js} +1 -1
- package/build/client/_app/immutable/chunks/DfkYlKBk.js.br +0 -0
- package/build/client/_app/immutable/chunks/DfkYlKBk.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DnMS2X6M.js +2 -0
- package/build/client/_app/immutable/chunks/DnMS2X6M.js.br +0 -0
- package/build/client/_app/immutable/chunks/DnMS2X6M.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{B1HdnQRQ.js → DrE1ro9S.js} +1 -1
- package/build/client/_app/immutable/chunks/DrE1ro9S.js.br +0 -0
- package/build/client/_app/immutable/chunks/DrE1ro9S.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DzY_RPb9.js +1 -0
- package/build/client/_app/immutable/chunks/DzY_RPb9.js.br +0 -0
- package/build/client/_app/immutable/chunks/DzY_RPb9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/PrCSpCPg.js +1 -0
- package/build/client/_app/immutable/chunks/PrCSpCPg.js.br +0 -0
- package/build/client/_app/immutable/chunks/PrCSpCPg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CN555stc.js → eMofpOrR.js} +1 -1
- package/build/client/_app/immutable/chunks/eMofpOrR.js.br +0 -0
- package/build/client/_app/immutable/chunks/eMofpOrR.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.BQUuHkSR.js +2 -0
- package/build/client/_app/immutable/entry/app.BQUuHkSR.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BQUuHkSR.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.DoeTycdu.js +1 -0
- package/build/client/_app/immutable/entry/start.DoeTycdu.js.br +2 -0
- package/build/client/_app/immutable/entry/start.DoeTycdu.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.DBnFpwRM.js +4 -0
- package/build/client/_app/immutable/nodes/0.DBnFpwRM.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.DBnFpwRM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.D-kI-fLd.js +1 -0
- package/build/client/_app/immutable/nodes/1.D-kI-fLd.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.D-kI-fLd.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.DWb5H7vX.js +28 -0
- package/build/client/_app/immutable/nodes/10.DWb5H7vX.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.DWb5H7vX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{15.D2I0y3ys.js → 15.CGc3_07c.js} +1 -1
- package/build/client/_app/immutable/nodes/15.CGc3_07c.js.br +3 -0
- package/build/client/_app/immutable/nodes/15.CGc3_07c.js.gz +0 -0
- package/build/client/_app/immutable/nodes/17.BIba62hW.js +3 -0
- package/build/client/_app/immutable/nodes/17.BIba62hW.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.BIba62hW.js.gz +0 -0
- package/build/client/_app/immutable/nodes/18.Clxr6FwI.js +11 -0
- package/build/client/_app/immutable/nodes/18.Clxr6FwI.js.br +0 -0
- package/build/client/_app/immutable/nodes/18.Clxr6FwI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.cbpnR8be.js +35 -0
- package/build/client/_app/immutable/nodes/2.cbpnR8be.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.cbpnR8be.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.DsP759xk.js +1 -0
- package/build/client/_app/immutable/nodes/3.DsP759xk.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DsP759xk.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.C8VxVbVn.js → 4.BIGLAIDe.js} +1 -1
- package/build/client/_app/immutable/nodes/4.BIGLAIDe.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BIGLAIDe.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.BjrnKYaA.js → 5.zMHOyhDv.js} +1 -1
- package/build/client/_app/immutable/nodes/5.zMHOyhDv.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.zMHOyhDv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.DFQ1IZsQ.js +1 -0
- package/build/client/_app/immutable/nodes/6.DFQ1IZsQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.DFQ1IZsQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.CTgEdr7L.js +2 -0
- package/build/client/_app/immutable/nodes/8.CTgEdr7L.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.CTgEdr7L.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.BidF5Uvq.js +2 -0
- package/build/client/_app/immutable/nodes/9.BidF5Uvq.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.BidF5Uvq.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-BZOFUIfF.js +9 -0
- package/build/server/chunks/0-BZOFUIfF.js.map +1 -0
- package/build/server/chunks/1-XwGU5VVN.js +9 -0
- package/build/server/chunks/{1-C0HdTvXW.js.map → 1-XwGU5VVN.js.map} +1 -1
- package/build/server/chunks/10-BgFSx4ib.js +9 -0
- package/build/server/chunks/10-BgFSx4ib.js.map +1 -0
- package/build/server/chunks/15-BjTTC1jf.js +9 -0
- package/build/server/chunks/{15-BQcb9C_y.js.map → 15-BjTTC1jf.js.map} +1 -1
- package/build/server/chunks/17-BEkWCfzc.js +9 -0
- package/build/server/chunks/17-BEkWCfzc.js.map +1 -0
- package/build/server/chunks/18-C-S0wKdp.js +9 -0
- package/build/server/chunks/18-C-S0wKdp.js.map +1 -0
- package/build/server/chunks/2-o-cIkIjs.js +9 -0
- package/build/server/chunks/2-o-cIkIjs.js.map +1 -0
- package/build/server/chunks/3-B-ABlyFO.js +9 -0
- package/build/server/chunks/3-B-ABlyFO.js.map +1 -0
- package/build/server/chunks/4-joAFA_Y8.js +9 -0
- package/build/server/chunks/4-joAFA_Y8.js.map +1 -0
- package/build/server/chunks/5-DIhC9k4l.js +9 -0
- package/build/server/chunks/5-DIhC9k4l.js.map +1 -0
- package/build/server/chunks/6-CMuAQIcW.js +9 -0
- package/build/server/chunks/6-CMuAQIcW.js.map +1 -0
- package/build/server/chunks/8-CbETTVRG.js +9 -0
- package/build/server/chunks/8-CbETTVRG.js.map +1 -0
- package/build/server/chunks/9-nMV90uVU.js +9 -0
- package/build/server/chunks/9-nMV90uVU.js.map +1 -0
- package/build/server/chunks/{AgentSidebar-BWBnqHnV.js → AgentSidebar-BEbSdZdN.js} +4 -4
- package/build/server/chunks/{AgentSidebar-BWBnqHnV.js.map → AgentSidebar-BEbSdZdN.js.map} +1 -1
- package/build/server/chunks/{Button-DH7gdU0s.js → Button-Dc9CR4Wh.js} +2 -2
- package/build/server/chunks/{Button-DH7gdU0s.js.map → Button-Dc9CR4Wh.js.map} +1 -1
- package/build/server/chunks/{ChatStepTrace-BivoNYOY.js → ChatStepTrace-OM96X4g8.js} +18 -7
- package/build/server/chunks/ChatStepTrace-OM96X4g8.js.map +1 -0
- package/build/server/chunks/{Dropdown-DnARl86Q.js → Dropdown-Cgd7pG-k.js} +2 -2
- package/build/server/chunks/{Dropdown-DnARl86Q.js.map → Dropdown-Cgd7pG-k.js.map} +1 -1
- package/build/server/chunks/GitControlsButton-BLcNzrDt.js +81 -0
- package/build/server/chunks/GitControlsButton-BLcNzrDt.js.map +1 -0
- package/build/server/chunks/{Icon-DP1YKCRV.js → Icon-Bogvl2n9.js} +2 -2
- package/build/server/chunks/{Icon-DP1YKCRV.js.map → Icon-Bogvl2n9.js.map} +1 -1
- package/build/server/chunks/{Input-CUJ9Cg7b.js → Input-7hpw1WLW.js} +2 -2
- package/build/server/chunks/{Input-CUJ9Cg7b.js.map → Input-7hpw1WLW.js.map} +1 -1
- package/build/server/chunks/{Modal-CGJuNpZ0.js → Modal-7IIIfFEG.js} +5 -5
- package/build/server/chunks/{Modal-CGJuNpZ0.js.map → Modal-7IIIfFEG.js.map} +1 -1
- package/build/server/chunks/{Panel-zvjxe036.js → Panel-Cj1mXx9-.js} +2 -2
- package/build/server/chunks/{Panel-zvjxe036.js.map → Panel-Cj1mXx9-.js.map} +1 -1
- package/build/server/chunks/{Tab-CUkyLqbN.js → Tab-bf4ZDs5y.js} +4 -4
- package/build/server/chunks/{Tab-CUkyLqbN.js.map → Tab-bf4ZDs5y.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-BnrWYuLv.js → _layout.svelte-C71luIwv.js} +10 -10
- package/build/server/chunks/{_layout.svelte-BnrWYuLv.js.map → _layout.svelte-C71luIwv.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-wi6o5Ecu.js → _layout.svelte-CFhHgXI_.js} +24 -18
- package/build/server/chunks/_layout.svelte-CFhHgXI_.js.map +1 -0
- package/build/server/chunks/_layout.svelte-CJd_pmkx.js +431 -0
- package/build/server/chunks/_layout.svelte-CJd_pmkx.js.map +1 -0
- package/build/server/chunks/{_layout.svelte-B88WMyk0.js → _layout.svelte-D6rhwm98.js} +445 -70
- package/build/server/chunks/_layout.svelte-D6rhwm98.js.map +1 -0
- package/build/server/chunks/{_page.svelte-CeS_21Ho.js → _page.svelte-BBvDMiTV.js} +25 -21
- package/build/server/chunks/_page.svelte-BBvDMiTV.js.map +1 -0
- package/build/server/chunks/{_page.svelte-h_J4lNT9.js → _page.svelte-BQs9dEuq.js} +8 -7
- package/build/server/chunks/{_page.svelte-h_J4lNT9.js.map → _page.svelte-BQs9dEuq.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DhFNFMnl.js → _page.svelte-BoO2LWVX.js} +34 -14
- package/build/server/chunks/_page.svelte-BoO2LWVX.js.map +1 -0
- package/build/server/chunks/{_page.svelte-CHgQjBQj.js → _page.svelte-DUCTSdv-.js} +2 -2
- package/build/server/chunks/{_page.svelte-CHgQjBQj.js.map → _page.svelte-DUCTSdv-.js.map} +1 -1
- package/build/server/chunks/_page.svelte-FXYLKyMw.js +110 -0
- package/build/server/chunks/_page.svelte-FXYLKyMw.js.map +1 -0
- package/build/server/chunks/{_page.svelte-57pyhszV.js → _page.svelte-KA1hqKj2.js} +20 -107
- package/build/server/chunks/_page.svelte-KA1hqKj2.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BSVJ2d2G.js → _page.svelte-y8CZFL8a.js} +210 -106
- package/build/server/chunks/_page.svelte-y8CZFL8a.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DHSYVLoj.js → _page.svelte-yIHSIEW6.js} +21 -15
- package/build/server/chunks/_page.svelte-yIHSIEW6.js.map +1 -0
- package/build/server/chunks/_server.ts-Cp9DgLcE.js +336 -0
- package/build/server/chunks/_server.ts-Cp9DgLcE.js.map +1 -0
- package/build/server/chunks/{agents-context-CbFsZmi5.js → agents-context-owgusUPR.js} +2 -2
- package/build/server/chunks/{agents-context-CbFsZmi5.js.map → agents-context-owgusUPR.js.map} +1 -1
- package/build/server/chunks/{client-DO-hqMbT.js → client-P-7bDULt.js} +4 -4
- package/build/server/chunks/{client-DO-hqMbT.js.map → client-P-7bDULt.js.map} +1 -1
- package/build/server/chunks/{conversation-view-memory-CtbUZd_L.js → conversation-view-memory-SdpdqTR7.js} +2 -2
- package/build/server/chunks/{conversation-view-memory-CtbUZd_L.js.map → conversation-view-memory-SdpdqTR7.js.map} +1 -1
- package/build/server/chunks/{edit-workspace-context-tyHBPujC.js → edit-workspace-context-hanFnXR3.js} +2 -2
- package/build/server/chunks/{edit-workspace-context-tyHBPujC.js.map → edit-workspace-context-hanFnXR3.js.map} +1 -1
- package/build/server/chunks/error.svelte-yI9RS6H4.js +15 -0
- package/build/server/chunks/{error.svelte-DmKKN1RU.js.map → error.svelte-yI9RS6H4.js.map} +1 -1
- package/build/server/chunks/git-mode-context-BpNsAUGF.js +18 -0
- package/build/server/chunks/git-mode-context-BpNsAUGF.js.map +1 -0
- package/build/server/chunks/{index-LMsd1ih2.js → index-DGtbUu8Y.js} +2 -2
- package/build/server/chunks/{index-LMsd1ih2.js.map → index-DGtbUu8Y.js.map} +1 -1
- package/build/server/chunks/{index-server-BRr5mZEq.js → index-server-l8-WsVn4.js} +2 -2
- package/build/server/chunks/{index-server-BRr5mZEq.js.map → index-server-l8-WsVn4.js.map} +1 -1
- package/build/server/chunks/{index2-ClgfzZ89.js → index2-CtgLiJVO.js} +3 -3
- package/build/server/chunks/{index2-ClgfzZ89.js.map → index2-CtgLiJVO.js.map} +1 -1
- package/build/server/chunks/{index3-BdRUAffj.js → index3-4hbbCqW0.js} +2 -2
- package/build/server/chunks/{index3-BdRUAffj.js.map → index3-4hbbCqW0.js.map} +1 -1
- package/build/server/chunks/{root-4q2Pr7ck.js → root-sWPnlpi3.js} +2 -2
- package/build/server/chunks/{root-4q2Pr7ck.js.map → root-sWPnlpi3.js.map} +1 -1
- package/build/server/chunks/{source-selection-CcN1cgXc.js → source-selection-DSkaPGfZ.js} +7 -2
- package/build/server/chunks/source-selection-DSkaPGfZ.js.map +1 -0
- package/build/server/chunks/{state.svelte-Bd1i-u49.js → state.svelte-BkvaElc6.js} +3 -3
- package/build/server/chunks/{state.svelte-Bd1i-u49.js.map → state.svelte-BkvaElc6.js.map} +1 -1
- package/build/server/chunks/trpc-client-Cr8RJ4UO.js +260 -0
- package/build/server/chunks/trpc-client-Cr8RJ4UO.js.map +1 -0
- package/build/server/index.js +4 -4
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +15 -15
- package/build/server/manifest.js.map +1 -1
- package/package.json +1 -1
- package/src/backend/git-mode/command.spec.ts +172 -0
- package/src/backend/git-mode/command.ts +405 -0
- package/src/backend/git-mode/config.spec.ts +45 -0
- package/src/backend/git-mode/config.ts +90 -0
- package/src/backend/git-mode/index.ts +20 -0
- package/src/backend/git-mode/repository-write-gate.spec.ts +116 -0
- package/src/backend/git-mode/repository-write-gate.ts +260 -0
- package/src/backend/git-mode/router.ts +59 -0
- package/src/backend/git-mode/service.spec.ts +1653 -0
- package/src/backend/git-mode/service.ts +2183 -0
- package/src/backend/git-mode/types.ts +82 -0
- package/src/backend/git-mode/write-tracker.spec.ts +46 -0
- package/src/backend/git-mode/write-tracker.ts +39 -0
- package/src/backend/lib/backend-restart.spec.ts +27 -0
- package/src/backend/lib/backend-restart.ts +16 -2
- package/src/backend/lib/middleware/cors.spec.ts +67 -0
- package/src/backend/lib/middleware/cors.ts +40 -12
- package/src/backend/roleplay/agent-loader.ts +49 -0
- package/src/backend/roleplay/old-server.ts +106 -56
- package/src/backend/roleplay/prompt-edit-proposals.ts +38 -4
- package/src/backend/roleplay/prompt-file.ts +59 -0
- package/src/backend/roleplay/router.spec.ts +75 -0
- package/src/backend/roleplay/router.ts +123 -69
- package/src/backend/roleplay/suggest-file-edit.ts +160 -0
- package/src/backend/roleplay/suggest-prompt-edit.ts +9 -138
- package/src/backend/roleplay/suggest-test-fix.spec.ts +50 -0
- package/src/backend/roleplay/suggest-test-fix.ts +65 -0
- package/src/backend/roleplay/test-fix-proposal-acceptance.spec.ts +253 -0
- package/src/backend/server.ts +116 -13
- package/src/backend/tests/academy.ts +17 -3
- package/src/backend/tests/data.spec.ts +81 -2
- package/src/backend/tests/data.ts +74 -4
- package/src/backend/tests/router.ts +101 -36
- package/src/backend/tests/suggest-test-history-edit.spec.ts +20 -0
- package/src/backend/tests/suggest-test-history-edit.ts +52 -0
- package/src/backend/tests/test-edit-source.spec.ts +61 -0
- package/src/backend/tests/test-edit-source.ts +34 -0
- package/src/backend/tests/test-history-edit-proposals.ts +69 -0
- package/src/backend/tests/test-history-overrides.spec.ts +24 -0
- package/src/backend/tests/test-selection.ts +27 -0
- package/src/lib/api-telescope/source-selection.spec.ts +44 -0
- package/src/lib/api-telescope/source-selection.ts +28 -0
- package/src/lib/components/Modal.svelte +1 -1
- package/src/lib/edit/edit-workspace-context.ts +33 -3
- package/src/lib/edit/test-ai-edit.spec.ts +31 -0
- package/src/lib/edit/test-ai-edit.ts +52 -0
- package/src/lib/git-mode/BlockingGitDialog.svelte +118 -0
- package/src/lib/git-mode/GitControlsButton.svelte +96 -0
- package/src/lib/git-mode/client-admission.spec.ts +304 -0
- package/src/lib/git-mode/client-admission.ts +343 -0
- package/src/lib/git-mode/errors.ts +2 -0
- package/src/lib/git-mode/git-mode-context.ts +70 -0
- package/src/lib/git-mode/refresh-policy.spec.ts +95 -0
- package/src/lib/git-mode/refresh-policy.ts +39 -0
- package/src/lib/git-mode/status-recovery.spec.ts +86 -0
- package/src/lib/git-mode/status-recovery.ts +33 -0
- package/src/lib/monaco/bosun-theme.ts +6 -83
- package/src/lib/monaco/editor-appearance.spec.ts +84 -0
- package/src/lib/monaco/editor-appearance.ts +154 -0
- package/src/lib/monaco/editor-decorations.spec.ts +91 -0
- package/src/lib/monaco/editor-decorations.ts +133 -0
- package/src/lib/tests/assertion-types.ts +74 -0
- package/src/lib/trpc-client.ts +15 -1
- package/src/lib/ws-client.spec.ts +208 -0
- package/src/lib/ws-client.ts +196 -14
- package/src/lib/ws-message.ts +24 -0
- package/build/client/_app/immutable/assets/0.Rrc0O--C.css +0 -1
- package/build/client/_app/immutable/assets/0.Rrc0O--C.css.br +0 -0
- package/build/client/_app/immutable/assets/0.Rrc0O--C.css.gz +0 -0
- package/build/client/_app/immutable/assets/2.DtxQDOXx.css.br +0 -0
- package/build/client/_app/immutable/assets/2.DtxQDOXx.css.gz +0 -0
- package/build/client/_app/immutable/chunks/B1HdnQRQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/B1HdnQRQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B5zf3x62.js.br +0 -0
- package/build/client/_app/immutable/chunks/B5zf3x62.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BHHfrjbV.js.br +0 -2
- package/build/client/_app/immutable/chunks/BHHfrjbV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BU7aeYn4.js +0 -1
- package/build/client/_app/immutable/chunks/BU7aeYn4.js.br +0 -0
- package/build/client/_app/immutable/chunks/BU7aeYn4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BbGYcfPY.js +0 -3
- package/build/client/_app/immutable/chunks/BbGYcfPY.js.br +0 -0
- package/build/client/_app/immutable/chunks/BbGYcfPY.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bmd5zhWC.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bmd5zhWC.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BnqH7p3U.js +0 -33
- package/build/client/_app/immutable/chunks/BnqH7p3U.js.br +0 -0
- package/build/client/_app/immutable/chunks/BnqH7p3U.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bog028VR.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bog028VR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bv1mNXs0.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bv1mNXs0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BvjXTrOz.js +0 -1
- package/build/client/_app/immutable/chunks/BvjXTrOz.js.br +0 -0
- package/build/client/_app/immutable/chunks/BvjXTrOz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C1R-s4aD.js +0 -1
- package/build/client/_app/immutable/chunks/C1R-s4aD.js.br +0 -0
- package/build/client/_app/immutable/chunks/C1R-s4aD.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CC1OcqhR.js +0 -1
- package/build/client/_app/immutable/chunks/CC1OcqhR.js.br +0 -0
- package/build/client/_app/immutable/chunks/CC1OcqhR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CEHsomMo.js.br +0 -0
- package/build/client/_app/immutable/chunks/CJcZ2GVC.js.br +0 -0
- package/build/client/_app/immutable/chunks/CJcZ2GVC.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CN555stc.js.br +0 -0
- package/build/client/_app/immutable/chunks/CN555stc.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CQg2Mme0.js +0 -9
- package/build/client/_app/immutable/chunks/CQg2Mme0.js.br +0 -0
- package/build/client/_app/immutable/chunks/CQg2Mme0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cp_st-64.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cp_st-64.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D8mA-uZ4.js.br +0 -0
- package/build/client/_app/immutable/chunks/D8mA-uZ4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DCXjBDmY.js.br +0 -0
- package/build/client/_app/immutable/chunks/DCXjBDmY.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DSLyVE1P.js +0 -1
- package/build/client/_app/immutable/chunks/DSLyVE1P.js.br +0 -0
- package/build/client/_app/immutable/chunks/DSLyVE1P.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Ddv5LgEc.js.br +0 -0
- package/build/client/_app/immutable/chunks/Ddv5LgEc.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DfcDjAv-.js.br +0 -0
- package/build/client/_app/immutable/chunks/DfcDjAv-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dg0A8wPA.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dg0A8wPA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dm49pcMm.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dm49pcMm.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DneQQ7D5.js.br +0 -0
- package/build/client/_app/immutable/chunks/DneQQ7D5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DoD3q5w5.js.br +0 -0
- package/build/client/_app/immutable/chunks/DoD3q5w5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DtXXy94i.js.br +0 -0
- package/build/client/_app/immutable/chunks/DtXXy94i.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dy2CFyD6.js +0 -2
- package/build/client/_app/immutable/chunks/Dy2CFyD6.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dy2CFyD6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DyBwTDJp.js +0 -2
- package/build/client/_app/immutable/chunks/DyBwTDJp.js.br +0 -0
- package/build/client/_app/immutable/chunks/DyBwTDJp.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ILTCveYH.js +0 -1
- package/build/client/_app/immutable/chunks/ILTCveYH.js.br +0 -0
- package/build/client/_app/immutable/chunks/ILTCveYH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/JcG4w2gF.js.br +0 -0
- package/build/client/_app/immutable/chunks/JcG4w2gF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/UqjCSZmA.js.br +0 -0
- package/build/client/_app/immutable/chunks/UqjCSZmA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/_YcrHZ6P.js +0 -1
- package/build/client/_app/immutable/chunks/_YcrHZ6P.js.br +0 -2
- package/build/client/_app/immutable/chunks/_YcrHZ6P.js.gz +0 -0
- package/build/client/_app/immutable/chunks/i6ygh6h8.js +0 -1
- package/build/client/_app/immutable/chunks/i6ygh6h8.js.br +0 -2
- package/build/client/_app/immutable/chunks/i6ygh6h8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/oRi68ch3.js +0 -1
- package/build/client/_app/immutable/chunks/oRi68ch3.js.br +0 -0
- package/build/client/_app/immutable/chunks/oRi68ch3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/pPpIn6tB.js.br +0 -0
- package/build/client/_app/immutable/chunks/pPpIn6tB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/r0sHOWrM.js +0 -1
- package/build/client/_app/immutable/chunks/r0sHOWrM.js.br +0 -0
- package/build/client/_app/immutable/chunks/r0sHOWrM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/wcTQUnZO.js.br +0 -0
- package/build/client/_app/immutable/chunks/wcTQUnZO.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DdO0gkPg.js +0 -2
- package/build/client/_app/immutable/entry/app.DdO0gkPg.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DdO0gkPg.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.eAjDq0c9.js +0 -1
- package/build/client/_app/immutable/entry/start.eAjDq0c9.js.br +0 -2
- package/build/client/_app/immutable/entry/start.eAjDq0c9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.nG3DdvIX.js +0 -3
- package/build/client/_app/immutable/nodes/0.nG3DdvIX.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.nG3DdvIX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.Ceu0XS6v.js +0 -1
- package/build/client/_app/immutable/nodes/1.Ceu0XS6v.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.Ceu0XS6v.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.dm2dgy31.js +0 -13
- package/build/client/_app/immutable/nodes/10.dm2dgy31.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.dm2dgy31.js.gz +0 -0
- package/build/client/_app/immutable/nodes/15.D2I0y3ys.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.D2I0y3ys.js.gz +0 -0
- package/build/client/_app/immutable/nodes/17.CKxGp0E7.js +0 -3
- package/build/client/_app/immutable/nodes/17.CKxGp0E7.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.CKxGp0E7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/18.DHJxyQpw.js +0 -11
- package/build/client/_app/immutable/nodes/18.DHJxyQpw.js.br +0 -0
- package/build/client/_app/immutable/nodes/18.DHJxyQpw.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DesR2keg.js +0 -35
- package/build/client/_app/immutable/nodes/2.DesR2keg.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DesR2keg.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.BUKrXGR_.js +0 -1
- package/build/client/_app/immutable/nodes/3.BUKrXGR_.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BUKrXGR_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.C8VxVbVn.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.C8VxVbVn.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.BjrnKYaA.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.BjrnKYaA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.C_hEzPrU.js +0 -1
- package/build/client/_app/immutable/nodes/6.C_hEzPrU.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.C_hEzPrU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.BTYaOiDC.js +0 -2
- package/build/client/_app/immutable/nodes/8.BTYaOiDC.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.BTYaOiDC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.DVspuDYY.js +0 -2
- package/build/client/_app/immutable/nodes/9.DVspuDYY.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.DVspuDYY.js.gz +0 -0
- package/build/server/chunks/0-D_duQDWy.js +0 -9
- package/build/server/chunks/0-D_duQDWy.js.map +0 -1
- package/build/server/chunks/1-C0HdTvXW.js +0 -9
- package/build/server/chunks/10-DcfhCR4R.js +0 -9
- package/build/server/chunks/10-DcfhCR4R.js.map +0 -1
- package/build/server/chunks/15-BQcb9C_y.js +0 -9
- package/build/server/chunks/17-DuVCTioj.js +0 -9
- package/build/server/chunks/17-DuVCTioj.js.map +0 -1
- package/build/server/chunks/18-CT0VFW_p.js +0 -9
- package/build/server/chunks/18-CT0VFW_p.js.map +0 -1
- package/build/server/chunks/2-DgTzKQAP.js +0 -9
- package/build/server/chunks/2-DgTzKQAP.js.map +0 -1
- package/build/server/chunks/3-eQMSMzXP.js +0 -9
- package/build/server/chunks/3-eQMSMzXP.js.map +0 -1
- package/build/server/chunks/4-OaAJtDqP.js +0 -9
- package/build/server/chunks/4-OaAJtDqP.js.map +0 -1
- package/build/server/chunks/5-CBdMutbv.js +0 -9
- package/build/server/chunks/5-CBdMutbv.js.map +0 -1
- package/build/server/chunks/6-FoEi7ggm.js +0 -9
- package/build/server/chunks/6-FoEi7ggm.js.map +0 -1
- package/build/server/chunks/8-B44yRkfX.js +0 -9
- package/build/server/chunks/8-B44yRkfX.js.map +0 -1
- package/build/server/chunks/9-eUjFpHzI.js +0 -9
- package/build/server/chunks/9-eUjFpHzI.js.map +0 -1
- package/build/server/chunks/ChatStepTrace-BivoNYOY.js.map +0 -1
- package/build/server/chunks/_layout.svelte-B-0DHjLB.js +0 -45
- package/build/server/chunks/_layout.svelte-B-0DHjLB.js.map +0 -1
- package/build/server/chunks/_layout.svelte-B88WMyk0.js.map +0 -1
- package/build/server/chunks/_layout.svelte-wi6o5Ecu.js.map +0 -1
- package/build/server/chunks/_page.svelte-57pyhszV.js.map +0 -1
- package/build/server/chunks/_page.svelte-BSVJ2d2G.js.map +0 -1
- package/build/server/chunks/_page.svelte-BoHt2cpr.js +0 -61
- package/build/server/chunks/_page.svelte-BoHt2cpr.js.map +0 -1
- package/build/server/chunks/_page.svelte-CeS_21Ho.js.map +0 -1
- package/build/server/chunks/_page.svelte-DHSYVLoj.js.map +0 -1
- package/build/server/chunks/_page.svelte-DhFNFMnl.js.map +0 -1
- package/build/server/chunks/_server.ts-D_eo_OAK.js +0 -139
- package/build/server/chunks/_server.ts-D_eo_OAK.js.map +0 -1
- package/build/server/chunks/error.svelte-DmKKN1RU.js +0 -15
- package/build/server/chunks/source-selection-CcN1cgXc.js.map +0 -1
- package/build/server/chunks/trpc-client-D8L6vWf4.js +0 -14
- package/build/server/chunks/trpc-client-D8L6vWf4.js.map +0 -1
|
@@ -1,25 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { P as Panel } from './Panel-
|
|
3
|
-
import { B as Button } from './Button-
|
|
4
|
-
import { D as Dropdown } from './Dropdown-
|
|
5
|
-
import { I as Icon } from './Icon-
|
|
6
|
-
import { T as Tabs, a as Tab } from './Tab-
|
|
7
|
-
import { M as Modal } from './Modal-
|
|
8
|
-
import { o as onDestroy, t as tick } from './index-server-
|
|
9
|
-
import { g as goto, r as replaceState } from './client-
|
|
10
|
-
import { p as page } from './index2-
|
|
1
|
+
import { n as derived, k as escape_html, l as attr, o as stringify, m as attr_class, p as ensure_array_like, q as attributes, r as clsx, t as bind_props } from './index-DGtbUu8Y.js';
|
|
2
|
+
import { P as Panel } from './Panel-Cj1mXx9-.js';
|
|
3
|
+
import { B as Button } from './Button-Dc9CR4Wh.js';
|
|
4
|
+
import { D as Dropdown } from './Dropdown-Cgd7pG-k.js';
|
|
5
|
+
import { I as Icon } from './Icon-Bogvl2n9.js';
|
|
6
|
+
import { T as Tabs, a as Tab } from './Tab-bf4ZDs5y.js';
|
|
7
|
+
import { M as Modal } from './Modal-7IIIfFEG.js';
|
|
8
|
+
import { o as onDestroy, t as tick } from './index-server-l8-WsVn4.js';
|
|
9
|
+
import { g as goto, r as replaceState } from './client-P-7bDULt.js';
|
|
10
|
+
import { p as page } from './index2-CtgLiJVO.js';
|
|
11
11
|
import { p as public_env } from './shared-server-DaWdgxVh.js';
|
|
12
|
-
import { t as trpc } from './trpc-client-
|
|
12
|
+
import { r as repositoryClientAdmission, t as trpc, g as gitFlushRequestOptions, i as isGitModeMutationBlockedError } from './trpc-client-Cr8RJ4UO.js';
|
|
13
|
+
import { g as getGitModeContext } from './git-mode-context-BpNsAUGF.js';
|
|
13
14
|
import nunjucks from 'nunjucks';
|
|
14
|
-
import { A as AgentSidebar } from './AgentSidebar-
|
|
15
|
-
import { g as getAgentsContext } from './agents-context-
|
|
16
|
-
import { s as setEditWorkspaceContext, g as getEditWorkspaceContext } from './edit-workspace-context-
|
|
15
|
+
import { A as AgentSidebar } from './AgentSidebar-BEbSdZdN.js';
|
|
16
|
+
import { g as getAgentsContext } from './agents-context-owgusUPR.js';
|
|
17
|
+
import { s as setEditWorkspaceContext, g as getEditWorkspaceContext } from './edit-workspace-context-hanFnXR3.js';
|
|
17
18
|
import 'js-yaml';
|
|
18
19
|
import { c as clearChatContent, a as clearLogs } from './log-content.svelte-CfQzj-v_.js';
|
|
19
|
-
import './
|
|
20
|
-
import './
|
|
21
|
-
import './
|
|
20
|
+
import { G as GitControlsButton } from './GitControlsButton-BLcNzrDt.js';
|
|
21
|
+
import './index3-4hbbCqW0.js';
|
|
22
|
+
import './root-sWPnlpi3.js';
|
|
23
|
+
import './state.svelte-BkvaElc6.js';
|
|
22
24
|
import '@trpc/client';
|
|
25
|
+
import '@trpc/server/observable';
|
|
23
26
|
|
|
24
27
|
function Textarea($$renderer, $$props) {
|
|
25
28
|
$$renderer.component(($$renderer2) => {
|
|
@@ -48,9 +51,38 @@ function PopoverModal($$renderer, $$props) {
|
|
|
48
51
|
children($$renderer);
|
|
49
52
|
$$renderer.push(`<!----></div></div>`);
|
|
50
53
|
}
|
|
54
|
+
function assertNever(value) {
|
|
55
|
+
throw new Error(`Unhandled client WebSocket message: ${JSON.stringify(value)}`);
|
|
56
|
+
}
|
|
57
|
+
function clientWsMessageDisposition(message) {
|
|
58
|
+
if (message.channel === "chat") return "block";
|
|
59
|
+
switch (message.event.type) {
|
|
60
|
+
case "select-agent":
|
|
61
|
+
case "reload-project":
|
|
62
|
+
case "step-selected":
|
|
63
|
+
case "prompt-overrides-updated":
|
|
64
|
+
return "defer";
|
|
65
|
+
case "context-updated":
|
|
66
|
+
case "prompt-updated":
|
|
67
|
+
case "trigger-action":
|
|
68
|
+
case "hangup":
|
|
69
|
+
return "block";
|
|
70
|
+
default:
|
|
71
|
+
return assertNever(message.event);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function deferredMessageKey(message) {
|
|
75
|
+
return message.channel === "chat" ? "chat" : message.event.type;
|
|
76
|
+
}
|
|
51
77
|
class WebSocketClient {
|
|
52
|
-
constructor(wsUrl) {
|
|
78
|
+
constructor(wsUrl, admission = repositoryClientAdmission) {
|
|
53
79
|
this.wsUrl = wsUrl;
|
|
80
|
+
this.admission = admission;
|
|
81
|
+
this.unregisterAdmissionListener = this.admission.onStateChange((state) => {
|
|
82
|
+
if (state.mode !== "open") return;
|
|
83
|
+
if (this.wantsConnection) this.init();
|
|
84
|
+
this.flushDeferredMessages();
|
|
85
|
+
});
|
|
54
86
|
}
|
|
55
87
|
ws = null;
|
|
56
88
|
openHandler = null;
|
|
@@ -62,23 +94,33 @@ class WebSocketClient {
|
|
|
62
94
|
retryDelay = 500;
|
|
63
95
|
retryTimeout = null;
|
|
64
96
|
isOpen = false;
|
|
97
|
+
isConnecting = false;
|
|
65
98
|
isDestroyed = false;
|
|
99
|
+
wantsConnection = false;
|
|
66
100
|
agentsLoaded = false;
|
|
101
|
+
deferredMessages = /* @__PURE__ */ new Map();
|
|
102
|
+
pendingGitSyncs = /* @__PURE__ */ new Map();
|
|
103
|
+
unregisterAdmissionListener;
|
|
67
104
|
init = () => {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
105
|
+
this.wantsConnection = true;
|
|
106
|
+
if (!this.admission.isOpen() || this.isOpen || this.isConnecting) return;
|
|
71
107
|
this.agentsLoaded = false;
|
|
72
108
|
console.log(`Initializing websocket connection with [${this.wsUrl}]`);
|
|
73
109
|
try {
|
|
110
|
+
this.isConnecting = true;
|
|
74
111
|
this.ws = new WebSocket(this.wsUrl);
|
|
75
112
|
} catch {
|
|
113
|
+
this.isConnecting = false;
|
|
76
114
|
this.retryConnect();
|
|
77
115
|
return;
|
|
78
116
|
}
|
|
79
117
|
this.isDestroyed = false;
|
|
80
118
|
this.ws.onmessage = (event) => {
|
|
81
119
|
const message = JSON.parse(event.data);
|
|
120
|
+
if (message.channel === "app-events" && message.event.type === "git-sync-complete") {
|
|
121
|
+
this.resolveGitSync(message.event.requestId);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
82
124
|
if (message.channel === "error") {
|
|
83
125
|
this.errorHandler?.(message.message);
|
|
84
126
|
} else if (message.channel === "app-events") {
|
|
@@ -108,25 +150,41 @@ class WebSocketClient {
|
|
|
108
150
|
this.ws.onerror = (error) => {
|
|
109
151
|
console.error("Websocket error:", error);
|
|
110
152
|
this.ws?.close();
|
|
111
|
-
this.retryConnect();
|
|
112
153
|
};
|
|
113
154
|
this.ws.onclose = () => {
|
|
114
155
|
console.log("Websocket closed");
|
|
115
156
|
this.isOpen = false;
|
|
157
|
+
this.isConnecting = false;
|
|
158
|
+
this.rejectPendingGitSyncs("The roleplay connection closed before pending writes finished.");
|
|
159
|
+
this.closeHandler?.();
|
|
116
160
|
this.retryConnect();
|
|
117
161
|
};
|
|
118
162
|
this.ws.onopen = () => {
|
|
163
|
+
this.isConnecting = false;
|
|
164
|
+
if (this.isDestroyed || !this.admission.isOpen()) {
|
|
165
|
+
this.ws?.close();
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
119
168
|
this.retries = 0;
|
|
120
169
|
this.isOpen = true;
|
|
121
170
|
if (this.retryTimeout) {
|
|
122
171
|
clearTimeout(this.retryTimeout);
|
|
172
|
+
this.retryTimeout = null;
|
|
123
173
|
}
|
|
124
174
|
this.openHandler?.();
|
|
175
|
+
this.flushDeferredMessages();
|
|
125
176
|
console.log("Websocket connected");
|
|
126
177
|
};
|
|
127
178
|
};
|
|
128
179
|
destroy = () => {
|
|
180
|
+
this.wantsConnection = false;
|
|
129
181
|
this.isDestroyed = true;
|
|
182
|
+
this.clearDeferredMessages();
|
|
183
|
+
this.rejectPendingGitSyncs("The roleplay connection closed before pending writes finished.");
|
|
184
|
+
if (this.retryTimeout) {
|
|
185
|
+
clearTimeout(this.retryTimeout);
|
|
186
|
+
this.retryTimeout = null;
|
|
187
|
+
}
|
|
130
188
|
this.ws?.close();
|
|
131
189
|
};
|
|
132
190
|
onOpen = (handler) => {
|
|
@@ -147,22 +205,113 @@ class WebSocketClient {
|
|
|
147
205
|
onMessage = (handler) => {
|
|
148
206
|
this.messageHandler = handler;
|
|
149
207
|
};
|
|
150
|
-
sendMessage = (message) => {
|
|
208
|
+
sendMessage = (message, options) => {
|
|
151
209
|
if (message.channel === "app-events") ;
|
|
152
|
-
this.
|
|
210
|
+
const flushAuthorized = this.admission.isFlushAuthorized(options?.gitFlushOperationId);
|
|
211
|
+
const state = this.admission.getState();
|
|
212
|
+
const disposition = clientWsMessageDisposition(message);
|
|
213
|
+
if (!flushAuthorized && state.mode !== "open") {
|
|
214
|
+
if (disposition === "defer") {
|
|
215
|
+
this.deferMessage(message);
|
|
216
|
+
return "deferred";
|
|
217
|
+
}
|
|
218
|
+
this.admission.blockMutation(
|
|
219
|
+
message.channel === "chat" ? "websocket.chat" : `websocket.${message.event.type}`
|
|
220
|
+
);
|
|
221
|
+
return "blocked";
|
|
222
|
+
}
|
|
223
|
+
if (!this.isOpen || !this.ws) {
|
|
224
|
+
if (disposition === "defer") {
|
|
225
|
+
this.deferMessage(message);
|
|
226
|
+
this.init();
|
|
227
|
+
return "deferred";
|
|
228
|
+
}
|
|
229
|
+
this.errorHandler?.("The roleplay connection is not ready. Wait for it to reconnect.");
|
|
230
|
+
return "not-ready";
|
|
231
|
+
}
|
|
232
|
+
this.ws.send(JSON.stringify(message));
|
|
233
|
+
return "sent";
|
|
234
|
+
};
|
|
235
|
+
sendGitSyncRequest = (requestId, operationId) => {
|
|
236
|
+
if (!this.admission.isFlushAuthorized(operationId)) {
|
|
237
|
+
return Promise.reject(
|
|
238
|
+
new Error("The Git WebSocket barrier is not authorized for the active refresh.")
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
if (!this.isOpen || !this.ws) {
|
|
242
|
+
return Promise.reject(
|
|
243
|
+
new Error("The roleplay connection closed before pending writes finished.")
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
return new Promise((resolve, reject) => {
|
|
247
|
+
const timer = setTimeout(() => {
|
|
248
|
+
this.pendingGitSyncs.delete(requestId);
|
|
249
|
+
reject(new Error("Timed out while waiting for pending roleplay writes to finish."));
|
|
250
|
+
}, 5e3);
|
|
251
|
+
this.pendingGitSyncs.set(requestId, { resolve, reject, timer });
|
|
252
|
+
try {
|
|
253
|
+
this.ws?.send(
|
|
254
|
+
JSON.stringify({
|
|
255
|
+
channel: "app-events",
|
|
256
|
+
event: { type: "git-sync-request", requestId }
|
|
257
|
+
})
|
|
258
|
+
);
|
|
259
|
+
} catch (error) {
|
|
260
|
+
clearTimeout(timer);
|
|
261
|
+
this.pendingGitSyncs.delete(requestId);
|
|
262
|
+
reject(error instanceof Error ? error : new Error(String(error)));
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
};
|
|
266
|
+
clearDeferredMessages = () => {
|
|
267
|
+
this.deferredMessages.clear();
|
|
153
268
|
};
|
|
154
269
|
isReady = () => this.isOpen && this.agentsLoaded;
|
|
155
270
|
retryConnect = () => {
|
|
156
271
|
if (this.isDestroyed) return;
|
|
157
|
-
if (!this.isOpen
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
this.retryTimeout = setTimeout(this.retryConnect, this.retryDelay);
|
|
161
|
-
} else {
|
|
272
|
+
if (!this.admission.isOpen()) return;
|
|
273
|
+
if (this.isOpen || this.isConnecting || this.retryTimeout) return;
|
|
274
|
+
if (this.retries >= this.maxRetries) {
|
|
162
275
|
this.errorHandler?.("WebSocket Error, please reload the browser");
|
|
163
276
|
this.closeHandler?.();
|
|
277
|
+
return;
|
|
164
278
|
}
|
|
279
|
+
this.retryTimeout = setTimeout(() => {
|
|
280
|
+
this.retryTimeout = null;
|
|
281
|
+
if (this.isDestroyed || !this.admission.isOpen() || this.isOpen || this.isConnecting) return;
|
|
282
|
+
this.retries++;
|
|
283
|
+
this.init();
|
|
284
|
+
}, this.retryDelay);
|
|
165
285
|
};
|
|
286
|
+
deferMessage(message) {
|
|
287
|
+
const key = deferredMessageKey(message);
|
|
288
|
+
if (message.channel === "app-events" && message.event.type === "select-agent") {
|
|
289
|
+
this.deferredMessages.delete("step-selected");
|
|
290
|
+
this.deferredMessages.delete("prompt-overrides-updated");
|
|
291
|
+
}
|
|
292
|
+
this.deferredMessages.delete(key);
|
|
293
|
+
this.deferredMessages.set(key, message);
|
|
294
|
+
}
|
|
295
|
+
flushDeferredMessages() {
|
|
296
|
+
if (!this.admission.isOpen() || !this.isOpen || !this.ws) return;
|
|
297
|
+
const messages = [...this.deferredMessages.values()];
|
|
298
|
+
this.deferredMessages.clear();
|
|
299
|
+
for (const message of messages) this.ws.send(JSON.stringify(message));
|
|
300
|
+
}
|
|
301
|
+
resolveGitSync(requestId) {
|
|
302
|
+
const pending = this.pendingGitSyncs.get(requestId);
|
|
303
|
+
if (!pending) return;
|
|
304
|
+
clearTimeout(pending.timer);
|
|
305
|
+
this.pendingGitSyncs.delete(requestId);
|
|
306
|
+
pending.resolve();
|
|
307
|
+
}
|
|
308
|
+
rejectPendingGitSyncs(message) {
|
|
309
|
+
for (const pending of this.pendingGitSyncs.values()) {
|
|
310
|
+
clearTimeout(pending.timer);
|
|
311
|
+
pending.reject(new Error(message));
|
|
312
|
+
}
|
|
313
|
+
this.pendingGitSyncs.clear();
|
|
314
|
+
}
|
|
166
315
|
}
|
|
167
316
|
const wsHost = public_env.PUBLIC_WS_HOST ?? `ws://${public_env.PUBLIC_WS_HOSTNAME ?? "localhost"}:${public_env.PUBLIC_WS_PORT ?? "8080"}`;
|
|
168
317
|
const wsClient = new WebSocketClient(wsHost);
|
|
@@ -171,6 +320,7 @@ function SchemaEditor($$renderer, $$props) {
|
|
|
171
320
|
let editor = null;
|
|
172
321
|
let model = null;
|
|
173
322
|
let disposables = [];
|
|
323
|
+
getGitModeContext();
|
|
174
324
|
let { class: className } = $$props;
|
|
175
325
|
onDestroy(() => {
|
|
176
326
|
for (const d of disposables) {
|
|
@@ -242,12 +392,13 @@ function PromptEditor($$renderer, $$props) {
|
|
|
242
392
|
showPreviewToggle = true,
|
|
243
393
|
preview = null,
|
|
244
394
|
onPreviewChange,
|
|
245
|
-
onEditorReady
|
|
395
|
+
onEditorReady,
|
|
396
|
+
onReadOnlyEditAttempt
|
|
246
397
|
} = $$props;
|
|
247
398
|
let internalPreview = false;
|
|
248
399
|
const effectivePreview = derived(() => preview !== null ? preview : internalPreview);
|
|
249
400
|
Panel($$renderer2, {
|
|
250
|
-
class: `relative overflow-hidden ${stringify(className)}`,
|
|
401
|
+
class: `prompt-editor-frame relative overflow-hidden ${stringify(className)}`,
|
|
251
402
|
children: ($$renderer3) => {
|
|
252
403
|
$$renderer3.push(`<div class="prompt-editor flex h-full flex-col"><div class="relative flex-1"><div class="h-full w-full"></div> `);
|
|
253
404
|
if (showPreviewToggle && !readOnly) {
|
|
@@ -283,7 +434,8 @@ function ReadOnlyMonacoDiff($$renderer, $$props) {
|
|
|
283
434
|
let {
|
|
284
435
|
class: className = ""
|
|
285
436
|
} = $$props;
|
|
286
|
-
|
|
437
|
+
const frameClass = derived(() => "prompt-editor prompt-editor-frame");
|
|
438
|
+
$$renderer2.push(`<div${attr_class(`overflow-hidden ${frameClass()} ${className}`)}><div class="h-full w-full"></div></div>`);
|
|
287
439
|
});
|
|
288
440
|
}
|
|
289
441
|
function ModeAsyncPopoverContent($$renderer, $$props) {
|
|
@@ -421,6 +573,7 @@ function ContextEditor($$renderer, $$props) {
|
|
|
421
573
|
let model = null;
|
|
422
574
|
let editorDisposables = [];
|
|
423
575
|
let persistViewStateTimeout = null;
|
|
576
|
+
getGitModeContext();
|
|
424
577
|
let {
|
|
425
578
|
class: className,
|
|
426
579
|
editorStateKey = "editorState/context/default"
|
|
@@ -459,6 +612,7 @@ function ContextEditor($$renderer, $$props) {
|
|
|
459
612
|
});
|
|
460
613
|
Panel($$renderer2, {
|
|
461
614
|
class: `min-h-0 overflow-hidden ${stringify(
|
|
615
|
+
// Keep model language in sync without recreating the editor
|
|
462
616
|
// Keep model language in sync without recreating the editor
|
|
463
617
|
// Update value only when actual text differs to avoid caret jumps
|
|
464
618
|
// If the next canonical text equals the last user-emitted serialization,
|
|
@@ -474,6 +628,9 @@ function ModeContextPopoverContent($$renderer, $$props) {
|
|
|
474
628
|
$$renderer.component(($$renderer2) => {
|
|
475
629
|
const tmp = getEditWorkspaceContext(), workspace = tmp.state;
|
|
476
630
|
tmp.actions;
|
|
631
|
+
const gitMode = getGitModeContext();
|
|
632
|
+
const unregisterGitBlocker = gitMode.registerBlocker("roleplay-context-draft", () => "The roleplay context editor is open.");
|
|
633
|
+
onDestroy(unregisterGitBlocker);
|
|
477
634
|
$$renderer2.push(`<div class="min-h-0 flex-1 overflow-hidden p-3">`);
|
|
478
635
|
ContextEditor($$renderer2, {
|
|
479
636
|
class: "h-full min-h-0 border-thin border-rc-gray-650 shadow-inner-white-soft backdrop-blur-3xl focus:outline-none focus:ring-0",
|
|
@@ -773,6 +930,7 @@ function _layout($$renderer, $$props) {
|
|
|
773
930
|
$$renderer.component(($$renderer2) => {
|
|
774
931
|
let { params, children } = $$props;
|
|
775
932
|
const { onError } = getAgentsContext();
|
|
933
|
+
const gitMode = getGitModeContext();
|
|
776
934
|
let agents = [];
|
|
777
935
|
const dec = (s) => {
|
|
778
936
|
try {
|
|
@@ -797,6 +955,7 @@ function _layout($$renderer, $$props) {
|
|
|
797
955
|
currentStep: null,
|
|
798
956
|
promptDrafts: {},
|
|
799
957
|
promptEdits: {},
|
|
958
|
+
testHistoryEdits: {},
|
|
800
959
|
context: null,
|
|
801
960
|
promptContext: null,
|
|
802
961
|
agentStates: [],
|
|
@@ -814,11 +973,17 @@ function _layout($$renderer, $$props) {
|
|
|
814
973
|
else url.searchParams.set(key, value);
|
|
815
974
|
replaceState(url.toString());
|
|
816
975
|
}
|
|
817
|
-
function sendAppEvent(event) {
|
|
818
|
-
wsClient.sendMessage({ channel: "app-events", event });
|
|
976
|
+
function sendAppEvent(event, options) {
|
|
977
|
+
wsClient.sendMessage({ channel: "app-events", event }, options);
|
|
978
|
+
}
|
|
979
|
+
function flushWebSocketWrites(context) {
|
|
980
|
+
if (!wsClient.isReady()) return Promise.resolve();
|
|
981
|
+
return wsClient.sendGitSyncRequest(crypto.randomUUID(), context.operationId);
|
|
819
982
|
}
|
|
983
|
+
gitMode.registerFlusher("edit-websocket-writes", flushWebSocketWrites, { final: true });
|
|
820
984
|
const activeStepName = derived(() => workspace.currentStep?.name ?? null);
|
|
821
985
|
const promptEditKey = (agentId, stepName) => `${agentId}\0${stepName}`;
|
|
986
|
+
const testHistoryEditKey = (agentId, region, testId) => `${agentId}\0${region ?? ""}\0${testId}`;
|
|
822
987
|
const activePromptEdit = derived(() => {
|
|
823
988
|
const stepName = activeStepName();
|
|
824
989
|
if (!stepName) return null;
|
|
@@ -831,6 +996,7 @@ function _layout($$renderer, $$props) {
|
|
|
831
996
|
return typeof draft === "string" ? draft : "";
|
|
832
997
|
});
|
|
833
998
|
const activeRuntimePrompt = derived(() => activePromptEdit()?.suggestedPrompt ?? activePromptDraft());
|
|
999
|
+
const promptWritesPaused = derived(() => gitMode.isWritePaused());
|
|
834
1000
|
function getPromptOverrides(agentId = workspace.agentId) {
|
|
835
1001
|
const overrides = {};
|
|
836
1002
|
for (const proposal of Object.values(workspace.promptEdits)) {
|
|
@@ -838,6 +1004,15 @@ function _layout($$renderer, $$props) {
|
|
|
838
1004
|
}
|
|
839
1005
|
return overrides;
|
|
840
1006
|
}
|
|
1007
|
+
function getTestHistoryOverrides(agentId = workspace.agentId, region = workspace.region) {
|
|
1008
|
+
const overrides = {};
|
|
1009
|
+
for (const proposal of Object.values(workspace.testHistoryEdits)) {
|
|
1010
|
+
if (proposal.agentId === agentId && proposal.region === region) {
|
|
1011
|
+
overrides[proposal.testId] = { conversation: proposal.suggestedConversation };
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
return overrides;
|
|
1015
|
+
}
|
|
841
1016
|
function syncRuntimePromptOverrides() {
|
|
842
1017
|
if (!workspace.wsLoaded) return;
|
|
843
1018
|
sendAppEvent({
|
|
@@ -851,16 +1026,23 @@ function _layout($$renderer, $$props) {
|
|
|
851
1026
|
}
|
|
852
1027
|
let promptSaveTimer = null;
|
|
853
1028
|
let pendingPromptSave = null;
|
|
1029
|
+
let acceptedPromptSaveToSkip = null;
|
|
854
1030
|
let promptSaveQueue = Promise.resolve();
|
|
1031
|
+
let promptSaveInFlight = 0;
|
|
855
1032
|
const PROMPT_SAVE_DEBOUNCE_MS = 800;
|
|
856
1033
|
function clearPromptSaveTimer() {
|
|
857
1034
|
if (!promptSaveTimer) return;
|
|
858
1035
|
clearTimeout(promptSaveTimer);
|
|
859
1036
|
promptSaveTimer = null;
|
|
860
1037
|
}
|
|
861
|
-
async function persistPromptSave(agentId, stepName, prompt) {
|
|
1038
|
+
async function persistPromptSave(agentId, stepName, prompt, flushContext) {
|
|
1039
|
+
promptSaveInFlight += 1;
|
|
862
1040
|
try {
|
|
863
|
-
await trpc.agents.savePrompt.mutate({ agentId, step: stepName, prompt });
|
|
1041
|
+
await trpc.agents.savePrompt.mutate({ agentId, step: stepName, prompt }, flushContext ? gitFlushRequestOptions(flushContext.operationId) : void 0);
|
|
1042
|
+
if (workspace.agentId === agentId) {
|
|
1043
|
+
workspace.steps = workspace.steps.map((step) => step.name === stepName ? { ...step, prompt } : step);
|
|
1044
|
+
workspace.currentStep = workspace.steps.find((step) => step.name === activeStepName()) ?? workspace.currentStep;
|
|
1045
|
+
}
|
|
864
1046
|
} catch (error) {
|
|
865
1047
|
console.error("Failed to save prompt", error);
|
|
866
1048
|
const currentDraft = workspace.promptDrafts[stepName];
|
|
@@ -868,23 +1050,29 @@ function _layout($$renderer, $$props) {
|
|
|
868
1050
|
pendingPromptSave = { stepName, prompt };
|
|
869
1051
|
}
|
|
870
1052
|
throw error;
|
|
1053
|
+
} finally {
|
|
1054
|
+
promptSaveInFlight -= 1;
|
|
871
1055
|
}
|
|
872
1056
|
}
|
|
873
|
-
function queuePromptSave(agentId, stepName, prompt) {
|
|
1057
|
+
function queuePromptSave(agentId, stepName, prompt, flushContext) {
|
|
874
1058
|
const op = promptSaveQueue.catch(() => {
|
|
875
|
-
}).then(() => persistPromptSave(agentId, stepName, prompt));
|
|
1059
|
+
}).then(() => persistPromptSave(agentId, stepName, prompt, flushContext));
|
|
876
1060
|
promptSaveQueue = op.catch(() => {
|
|
877
1061
|
});
|
|
878
1062
|
return op;
|
|
879
1063
|
}
|
|
880
|
-
async function flushPromptSave() {
|
|
881
|
-
if (!
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
1064
|
+
async function flushPromptSave(force = false, flushContext) {
|
|
1065
|
+
if (!force && gitMode.isWritePaused()) return;
|
|
1066
|
+
await promptSaveQueue;
|
|
1067
|
+
while (pendingPromptSave) {
|
|
1068
|
+
const agentId = workspace.agentId.trim();
|
|
1069
|
+
if (!agentId) return;
|
|
1070
|
+
const { stepName, prompt } = pendingPromptSave;
|
|
1071
|
+
clearPromptSaveTimer();
|
|
1072
|
+
pendingPromptSave = null;
|
|
1073
|
+
await queuePromptSave(agentId, stepName, prompt, flushContext);
|
|
1074
|
+
await promptSaveQueue;
|
|
1075
|
+
}
|
|
888
1076
|
}
|
|
889
1077
|
function schedulePromptSave(stepName, prompt) {
|
|
890
1078
|
pendingPromptSave = { stepName, prompt };
|
|
@@ -892,19 +1080,33 @@ function _layout($$renderer, $$props) {
|
|
|
892
1080
|
promptSaveTimer = setTimeout(
|
|
893
1081
|
() => {
|
|
894
1082
|
promptSaveTimer = null;
|
|
1083
|
+
if (gitMode.isWritePaused()) return;
|
|
895
1084
|
void flushPromptSave();
|
|
896
1085
|
},
|
|
897
1086
|
PROMPT_SAVE_DEBOUNCE_MS
|
|
898
1087
|
);
|
|
899
1088
|
}
|
|
1089
|
+
const unregisterGitPromptFlusher = gitMode.registerFlusher("edit-prompt", (context) => flushPromptSave(true, context));
|
|
1090
|
+
const unregisterGitPromptBlocker = gitMode.registerBlocker("edit-prompt-save", () => {
|
|
1091
|
+
if (promptSaveTimer || pendingPromptSave || promptSaveInFlight > 0) {
|
|
1092
|
+
return "A prompt edit is still being saved.";
|
|
1093
|
+
}
|
|
1094
|
+
return null;
|
|
1095
|
+
});
|
|
900
1096
|
function handlePromptChanged(newPrompt) {
|
|
901
1097
|
const stepName = activeStepName();
|
|
902
1098
|
if (!stepName) return;
|
|
903
1099
|
workspace.promptDrafts[stepName] = newPrompt;
|
|
1100
|
+
if (acceptedPromptSaveToSkip?.stepName === stepName && acceptedPromptSaveToSkip.prompt === newPrompt) {
|
|
1101
|
+
acceptedPromptSaveToSkip = null;
|
|
1102
|
+
return;
|
|
1103
|
+
}
|
|
1104
|
+
acceptedPromptSaveToSkip = null;
|
|
904
1105
|
schedulePromptSave(stepName, newPrompt);
|
|
905
1106
|
}
|
|
906
1107
|
let aiEditModalOpen = false;
|
|
907
1108
|
let aiEditRequest = "";
|
|
1109
|
+
let aiEditTarget = null;
|
|
908
1110
|
let aiEditGenerating = false;
|
|
909
1111
|
let aiEditProgress = null;
|
|
910
1112
|
function formatAiEditStatus(summary) {
|
|
@@ -916,10 +1118,37 @@ function _layout($$renderer, $$props) {
|
|
|
916
1118
|
let aiEditResolutionError = null;
|
|
917
1119
|
let aiEditResolving = false;
|
|
918
1120
|
let noChangesModalOpen = false;
|
|
1121
|
+
let aiEditGenerationInFlight = 0;
|
|
919
1122
|
let aiEditRequestId = 0;
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
1123
|
+
let editShellDestroyed = false;
|
|
1124
|
+
const unregisterGitAiEditBlocker = gitMode.registerBlocker("ai-prompt-edit", () => {
|
|
1125
|
+
if (aiEditGenerationInFlight > 0 || aiEditGenerating) {
|
|
1126
|
+
return "An AI edit is still being generated.";
|
|
1127
|
+
}
|
|
1128
|
+
if (aiEditResolving) return "An AI edit is still being accepted.";
|
|
1129
|
+
if (Object.keys(workspace.promptEdits).length > 0) {
|
|
1130
|
+
return "Accept or reject the pending AI prompt edit before refreshing.";
|
|
1131
|
+
}
|
|
1132
|
+
if (Object.keys(workspace.testHistoryEdits).length > 0) {
|
|
1133
|
+
return "Accept or reject the pending AI test history edit before refreshing.";
|
|
1134
|
+
}
|
|
1135
|
+
if (aiEditModalOpen && aiEditRequest.trim()) {
|
|
1136
|
+
return "Finish or cancel the open AI edit before refreshing.";
|
|
1137
|
+
}
|
|
1138
|
+
return null;
|
|
1139
|
+
});
|
|
1140
|
+
function aiEditStartIsBlocked() {
|
|
1141
|
+
if (!gitMode.isWritePaused() && !gitMode.isActivationStarting()) return false;
|
|
1142
|
+
gitMode.requestBlockedOperationNotice();
|
|
1143
|
+
return true;
|
|
1144
|
+
}
|
|
1145
|
+
function openAiEditModal(request = "", target) {
|
|
1146
|
+
if (!workspace.currentStep) return;
|
|
1147
|
+
const targetPromptEdit = target ? activePromptEditFor(workspace.agentId, target.step) : activePromptEdit();
|
|
1148
|
+
if ((!target || target.kind === "test-fix") && targetPromptEdit) return;
|
|
1149
|
+
if (aiEditStartIsBlocked()) return;
|
|
1150
|
+
aiEditRequest = request;
|
|
1151
|
+
aiEditTarget = target ?? null;
|
|
923
1152
|
aiEditError = null;
|
|
924
1153
|
noChangesModalOpen = false;
|
|
925
1154
|
aiEditModalOpen = true;
|
|
@@ -928,6 +1157,7 @@ function _layout($$renderer, $$props) {
|
|
|
928
1157
|
aiEditRequestId += 1;
|
|
929
1158
|
aiEditGenerating = false;
|
|
930
1159
|
aiEditModalOpen = false;
|
|
1160
|
+
aiEditTarget = null;
|
|
931
1161
|
noChangesModalOpen = false;
|
|
932
1162
|
}
|
|
933
1163
|
async function pollAiEditProgress(progressId, requestId) {
|
|
@@ -952,34 +1182,88 @@ function _layout($$renderer, $$props) {
|
|
|
952
1182
|
}
|
|
953
1183
|
async function requestAiEdit() {
|
|
954
1184
|
const request = aiEditRequest.trim();
|
|
955
|
-
const
|
|
1185
|
+
const target = aiEditTarget;
|
|
1186
|
+
const stepName = target?.step ?? activeStepName();
|
|
956
1187
|
const agentId = workspace.agentId.trim();
|
|
957
1188
|
if (!request || !stepName || !agentId || aiEditGenerating) return;
|
|
1189
|
+
if (aiEditStartIsBlocked()) return;
|
|
958
1190
|
const requestId = ++aiEditRequestId;
|
|
959
1191
|
const progressId = crypto.randomUUID();
|
|
960
1192
|
aiEditGenerating = true;
|
|
1193
|
+
aiEditGenerationInFlight += 1;
|
|
961
1194
|
aiEditProgress = null;
|
|
962
1195
|
aiEditError = null;
|
|
963
1196
|
void pollAiEditProgress(progressId, requestId);
|
|
964
1197
|
try {
|
|
965
|
-
|
|
966
|
-
|
|
1198
|
+
if (!target) {
|
|
1199
|
+
await flushPromptSave();
|
|
1200
|
+
if (editShellDestroyed || requestId !== aiEditRequestId) return;
|
|
1201
|
+
if (gitMode.isWritePaused()) {
|
|
1202
|
+
gitMode.requestBlockedOperationNotice();
|
|
1203
|
+
return;
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
let historyProposal = null;
|
|
1207
|
+
let historyResult = null;
|
|
1208
|
+
let result = null;
|
|
1209
|
+
if (target?.kind === "test-fix") {
|
|
1210
|
+
const fixResult = await trpc.agents.suggestTestFix.mutate({
|
|
1211
|
+
agentId,
|
|
1212
|
+
region: workspace.region,
|
|
1213
|
+
testId: target.testId,
|
|
1214
|
+
step: stepName,
|
|
1215
|
+
request,
|
|
1216
|
+
prompt: target.prompt,
|
|
1217
|
+
basePrompt: target.basePrompt,
|
|
1218
|
+
currentIncorrectOutcome: target.currentIncorrectOutcome ?? "",
|
|
1219
|
+
progressId
|
|
1220
|
+
});
|
|
1221
|
+
historyResult = fixResult.history;
|
|
1222
|
+
result = fixResult.prompt;
|
|
1223
|
+
} else if (target) {
|
|
1224
|
+
historyResult = await trpc.tests.suggestHistoryEdit.mutate({
|
|
1225
|
+
agent: agentId,
|
|
1226
|
+
region: workspace.region,
|
|
1227
|
+
testId: target.testId,
|
|
1228
|
+
step: stepName,
|
|
1229
|
+
request,
|
|
1230
|
+
prompt: target.prompt,
|
|
1231
|
+
basePrompt: target.basePrompt,
|
|
1232
|
+
progressId
|
|
1233
|
+
});
|
|
1234
|
+
} else {
|
|
1235
|
+
result = await trpc.agents.suggestPromptEdit.mutate({ agentId, step: stepName, request, progressId });
|
|
1236
|
+
}
|
|
967
1237
|
if (requestId !== aiEditRequestId) return;
|
|
968
|
-
if (
|
|
1238
|
+
if (target && historyResult?.status === "changed") {
|
|
1239
|
+
historyProposal = historyResult.proposal;
|
|
1240
|
+
}
|
|
1241
|
+
if (!historyProposal && (!result || result.status === "unchanged")) {
|
|
969
1242
|
noChangesModalOpen = true;
|
|
970
1243
|
return;
|
|
971
1244
|
}
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
1245
|
+
if (historyProposal) {
|
|
1246
|
+
workspace.testHistoryEdits[testHistoryEditKey(historyProposal.agentId, historyProposal.region, historyProposal.testId)] = historyProposal;
|
|
1247
|
+
}
|
|
1248
|
+
if (result?.status === "changed") {
|
|
1249
|
+
const proposal = result.proposal;
|
|
1250
|
+
workspace.promptEdits[promptEditKey(proposal.agentId, proposal.step)] = proposal;
|
|
1251
|
+
setQueryParam("promptEdit", proposal.id);
|
|
1252
|
+
previewEnabled = false;
|
|
1253
|
+
syncRuntimePromptOverrides();
|
|
1254
|
+
}
|
|
975
1255
|
aiEditModalOpen = false;
|
|
976
|
-
|
|
977
|
-
syncRuntimePromptOverrides();
|
|
1256
|
+
aiEditTarget = null;
|
|
978
1257
|
} catch (error) {
|
|
979
1258
|
if (requestId !== aiEditRequestId) return;
|
|
1259
|
+
if (isGitModeMutationBlockedError(error)) {
|
|
1260
|
+
gitMode.requestBlockedOperationNotice();
|
|
1261
|
+
return;
|
|
1262
|
+
}
|
|
980
1263
|
console.error("Failed to suggest prompt edits", error);
|
|
981
1264
|
aiEditError = error instanceof Error ? error.message : "Failed to suggest edits";
|
|
982
1265
|
} finally {
|
|
1266
|
+
aiEditGenerationInFlight -= 1;
|
|
983
1267
|
if (requestId === aiEditRequestId) {
|
|
984
1268
|
aiEditGenerating = false;
|
|
985
1269
|
aiEditProgress = null;
|
|
@@ -992,9 +1276,39 @@ function _layout($$renderer, $$props) {
|
|
|
992
1276
|
}
|
|
993
1277
|
if (page.url.searchParams.get("promptEdit") === proposalId) setQueryParam("promptEdit", null);
|
|
994
1278
|
}
|
|
1279
|
+
function captureAiEditScroll() {
|
|
1280
|
+
const editor = inspectionPromptEditor ?? pendingDiffModifiedEditor;
|
|
1281
|
+
const viewState = editor?.saveViewState() ?? null;
|
|
1282
|
+
if (!editor || !viewState) return null;
|
|
1283
|
+
const topLine = editor.getVisibleRanges()[0]?.startLineNumber ?? null;
|
|
1284
|
+
return {
|
|
1285
|
+
viewState,
|
|
1286
|
+
topLine,
|
|
1287
|
+
topLineOffset: topLine ? editor.getTopForLineNumber(topLine) - editor.getScrollTop() : 0
|
|
1288
|
+
};
|
|
1289
|
+
}
|
|
1290
|
+
function restoreAiEditScroll(snapshot) {
|
|
1291
|
+
if (!snapshot || !basePromptEditor) return;
|
|
1292
|
+
const editor = basePromptEditor;
|
|
1293
|
+
const apply = () => {
|
|
1294
|
+
if (basePromptEditor !== editor) return;
|
|
1295
|
+
try {
|
|
1296
|
+
editor.restoreViewState(snapshot.viewState);
|
|
1297
|
+
if (snapshot.topLine) {
|
|
1298
|
+
editor.setScrollTop(editor.getTopForLineNumber(snapshot.topLine) - snapshot.topLineOffset);
|
|
1299
|
+
}
|
|
1300
|
+
} catch (error) {
|
|
1301
|
+
console.warn("Failed to preserve prompt scroll position", error);
|
|
1302
|
+
}
|
|
1303
|
+
};
|
|
1304
|
+
apply();
|
|
1305
|
+
requestAnimationFrame(apply);
|
|
1306
|
+
}
|
|
995
1307
|
function rejectAiEdit() {
|
|
996
1308
|
const proposal = activePromptEdit();
|
|
997
1309
|
if (!proposal || aiEditResolving) return;
|
|
1310
|
+
const scrollSnapshot = captureAiEditScroll();
|
|
1311
|
+
restoreAiEditScroll(scrollSnapshot);
|
|
998
1312
|
closeModePopover();
|
|
999
1313
|
aiEditResolutionError = null;
|
|
1000
1314
|
removePromptEditFromWorkspace(proposal.id);
|
|
@@ -1003,21 +1317,55 @@ function _layout($$renderer, $$props) {
|
|
|
1003
1317
|
console.error("Failed to release rejected prompt edit", error);
|
|
1004
1318
|
});
|
|
1005
1319
|
}
|
|
1320
|
+
function applyAcceptedPromptToUndoHistory(stepName, prompt) {
|
|
1321
|
+
if (activeStepName() !== stepName || !basePromptEditor) return false;
|
|
1322
|
+
const model = basePromptEditor.getModel();
|
|
1323
|
+
if (!model) return false;
|
|
1324
|
+
if (model.getValue() === prompt) return true;
|
|
1325
|
+
try {
|
|
1326
|
+
acceptedPromptSaveToSkip = { stepName, prompt };
|
|
1327
|
+
model.pushStackElement();
|
|
1328
|
+
model.pushEditOperations(
|
|
1329
|
+
basePromptEditor.getSelections(),
|
|
1330
|
+
[
|
|
1331
|
+
{
|
|
1332
|
+
range: model.getFullModelRange(),
|
|
1333
|
+
text: prompt,
|
|
1334
|
+
forceMoveMarkers: true
|
|
1335
|
+
}
|
|
1336
|
+
],
|
|
1337
|
+
() => null
|
|
1338
|
+
);
|
|
1339
|
+
model.pushStackElement();
|
|
1340
|
+
return model.getValue() === prompt;
|
|
1341
|
+
} catch (error) {
|
|
1342
|
+
console.warn("Failed to add the accepted prompt edit to Monaco undo history", error);
|
|
1343
|
+
return false;
|
|
1344
|
+
} finally {
|
|
1345
|
+
acceptedPromptSaveToSkip = null;
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1006
1348
|
async function acceptAiEdit() {
|
|
1007
1349
|
const proposal = activePromptEdit();
|
|
1008
1350
|
if (!proposal || aiEditResolving) return;
|
|
1351
|
+
const scrollSnapshot = captureAiEditScroll();
|
|
1009
1352
|
closeModePopover();
|
|
1010
1353
|
aiEditResolving = true;
|
|
1011
1354
|
aiEditResolutionError = null;
|
|
1012
1355
|
try {
|
|
1013
1356
|
const result = await trpc.agents.acceptPromptEdit.mutate({ id: proposal.id });
|
|
1357
|
+
if (editShellDestroyed) return;
|
|
1358
|
+
applyAcceptedPromptToUndoHistory(proposal.step, result.prompt);
|
|
1014
1359
|
workspace.promptDrafts[proposal.step] = result.prompt;
|
|
1015
1360
|
workspace.steps = workspace.steps.map((step) => step.name === proposal.step ? { ...step, prompt: result.prompt } : step);
|
|
1016
1361
|
workspace.currentStep = workspace.steps.find((step) => step.name === activeStepName()) ?? workspace.currentStep;
|
|
1017
1362
|
await tick();
|
|
1363
|
+
if (editShellDestroyed) return;
|
|
1364
|
+
restoreAiEditScroll(scrollSnapshot);
|
|
1018
1365
|
removePromptEditFromWorkspace(proposal.id);
|
|
1019
1366
|
syncRuntimePromptOverrides();
|
|
1020
1367
|
} catch (error) {
|
|
1368
|
+
if (editShellDestroyed) return;
|
|
1021
1369
|
console.error("Failed to accept prompt edit", error);
|
|
1022
1370
|
aiEditResolutionError = error instanceof Error ? error.message : "Failed to save prompt";
|
|
1023
1371
|
} finally {
|
|
@@ -1032,6 +1380,11 @@ function _layout($$renderer, $$props) {
|
|
|
1032
1380
|
let schemaSaveError = null;
|
|
1033
1381
|
let schemaSaveNotice = null;
|
|
1034
1382
|
const schemaDirty = derived(() => schemaDraft !== (schemaValue() ?? ""));
|
|
1383
|
+
const unregisterGitSchemaBlocker = gitMode.registerBlocker("schema-draft", () => {
|
|
1384
|
+
if (schemaSaving) return "The schema is still being saved.";
|
|
1385
|
+
if (schemaModalOpen && schemaDirty()) return "An unsaved schema draft is open.";
|
|
1386
|
+
return null;
|
|
1387
|
+
});
|
|
1035
1388
|
function openSchemaModal() {
|
|
1036
1389
|
if (!schemaValue()) return;
|
|
1037
1390
|
schemaDraft = schemaValue();
|
|
@@ -1133,6 +1486,9 @@ function _layout($$renderer, $$props) {
|
|
|
1133
1486
|
}
|
|
1134
1487
|
let basePromptHighlighter = null;
|
|
1135
1488
|
let inspectionPromptHighlighter = null;
|
|
1489
|
+
let basePromptEditor = null;
|
|
1490
|
+
let inspectionPromptEditor = null;
|
|
1491
|
+
let pendingDiffModifiedEditor = null;
|
|
1136
1492
|
let previewEnabled = false;
|
|
1137
1493
|
function renderPromptPreview(prompt) {
|
|
1138
1494
|
try {
|
|
@@ -1154,11 +1510,13 @@ function _layout($$renderer, $$props) {
|
|
|
1154
1510
|
return previewEnabled ? renderPromptPreview(proposal.suggestedPrompt) : proposal.suggestedPrompt;
|
|
1155
1511
|
});
|
|
1156
1512
|
function handleBasePromptEditorReady(editor, monaco) {
|
|
1513
|
+
basePromptEditor = editor;
|
|
1157
1514
|
basePromptHighlighter?.dispose();
|
|
1158
1515
|
basePromptHighlighter = createPromptHighlighter(editor, monaco);
|
|
1159
1516
|
basePromptHighlighter.setHighlights(workspace.edit.highlights);
|
|
1160
1517
|
}
|
|
1161
1518
|
function handleInspectionPromptEditorReady(editor, monaco) {
|
|
1519
|
+
inspectionPromptEditor = editor;
|
|
1162
1520
|
inspectionPromptHighlighter?.dispose();
|
|
1163
1521
|
inspectionPromptHighlighter = createPromptHighlighter(editor, monaco);
|
|
1164
1522
|
inspectionPromptHighlighter.setHighlights(workspace.edit.highlights);
|
|
@@ -1252,17 +1610,19 @@ function _layout($$renderer, $$props) {
|
|
|
1252
1610
|
openContextPopover,
|
|
1253
1611
|
closeContextPopover,
|
|
1254
1612
|
toggleContextPopover,
|
|
1613
|
+
openAiEdit: (request, target) => openAiEditModal(request, target),
|
|
1255
1614
|
sendAppEvent,
|
|
1256
1615
|
sendChatMessage: (message) => {
|
|
1257
1616
|
if (!workspace.wsLoaded || !workspace.chatReady) {
|
|
1258
1617
|
console.warn("[roleplay] Ignoring chat message while websocket session is reconnecting");
|
|
1259
|
-
return;
|
|
1618
|
+
return false;
|
|
1260
1619
|
}
|
|
1261
1620
|
syncRuntimePromptOverrides();
|
|
1262
|
-
wsClient.sendMessage({ channel: "chat", message });
|
|
1621
|
+
return wsClient.sendMessage({ channel: "chat", message }) === "sent";
|
|
1263
1622
|
},
|
|
1264
1623
|
flushPromptSave,
|
|
1265
1624
|
getPromptOverrides: () => getPromptOverrides(),
|
|
1625
|
+
getTestHistoryOverrides: () => getTestHistoryOverrides(),
|
|
1266
1626
|
getActivePromptEditId: () => activePromptEdit()?.id ?? null,
|
|
1267
1627
|
selectState: (stateId) => {
|
|
1268
1628
|
void flushPromptSave();
|
|
@@ -1288,12 +1648,23 @@ function _layout($$renderer, $$props) {
|
|
|
1288
1648
|
}
|
|
1289
1649
|
});
|
|
1290
1650
|
onDestroy(() => {
|
|
1651
|
+
editShellDestroyed = true;
|
|
1652
|
+
aiEditRequestId += 1;
|
|
1653
|
+
aiEditGenerating = false;
|
|
1654
|
+
unregisterGitPromptFlusher();
|
|
1655
|
+
unregisterGitPromptBlocker();
|
|
1656
|
+
unregisterGitAiEditBlocker();
|
|
1657
|
+
unregisterGitSchemaBlocker();
|
|
1658
|
+
wsClient.clearDeferredMessages();
|
|
1291
1659
|
void flushPromptSave();
|
|
1292
1660
|
clearPromptSaveTimer();
|
|
1293
1661
|
basePromptHighlighter?.dispose();
|
|
1294
1662
|
basePromptHighlighter = null;
|
|
1663
|
+
basePromptEditor = null;
|
|
1295
1664
|
inspectionPromptHighlighter?.dispose();
|
|
1296
1665
|
inspectionPromptHighlighter = null;
|
|
1666
|
+
inspectionPromptEditor = null;
|
|
1667
|
+
pendingDiffModifiedEditor = null;
|
|
1297
1668
|
});
|
|
1298
1669
|
let $$settled = true;
|
|
1299
1670
|
let $$inner_renderer;
|
|
@@ -1400,7 +1771,9 @@ function _layout($$renderer, $$props) {
|
|
|
1400
1771
|
} else {
|
|
1401
1772
|
$$renderer3.push("<!--[-1-->");
|
|
1402
1773
|
}
|
|
1403
|
-
$$renderer3.push(`<!--]
|
|
1774
|
+
$$renderer3.push(`<!--]--> `);
|
|
1775
|
+
GitControlsButton($$renderer3);
|
|
1776
|
+
$$renderer3.push(`<!----></div></nav> <div class="flex-1 overflow-hidden"><div class="grid h-full w-full grid-cols-[minmax(140px,2fr)_minmax(0,10fr)_minmax(0,11fr)]">`);
|
|
1404
1777
|
Panel($$renderer3, {
|
|
1405
1778
|
class: "flex h-full min-w-0 flex-col !rounded-none p-0",
|
|
1406
1779
|
children: ($$renderer4) => {
|
|
@@ -1438,7 +1811,7 @@ function _layout($$renderer, $$props) {
|
|
|
1438
1811
|
Button($$renderer3, {
|
|
1439
1812
|
variant: "secondary",
|
|
1440
1813
|
disabled: !workspace.currentStep || !!activePromptEdit() || aiEditGenerating,
|
|
1441
|
-
onclick: openAiEditModal,
|
|
1814
|
+
onclick: () => openAiEditModal(),
|
|
1442
1815
|
children: ($$renderer4) => {
|
|
1443
1816
|
$$renderer4.push(`<!---->Edit with AI`);
|
|
1444
1817
|
},
|
|
@@ -1450,18 +1823,19 @@ function _layout($$renderer, $$props) {
|
|
|
1450
1823
|
$$renderer3.push(`<div class="relative h-full min-w-0"><!---->`);
|
|
1451
1824
|
{
|
|
1452
1825
|
PromptEditor($$renderer3, {
|
|
1453
|
-
class: "h-full min-w-0
|
|
1826
|
+
class: "h-full min-w-0 focus:outline-none focus:ring-0",
|
|
1454
1827
|
initialPrompt: activePromptDraft(),
|
|
1455
1828
|
agentId: workspace.agentId,
|
|
1456
1829
|
stepName: workspace.currentStep.name,
|
|
1457
1830
|
onPromptChanged: handlePromptChanged,
|
|
1458
1831
|
showSchemaButton: hasSchema() && !activePromptEdit(),
|
|
1459
1832
|
onSchemaClick: openSchemaModal,
|
|
1460
|
-
readOnly: !!activePromptEdit(),
|
|
1461
|
-
readOnlyMessage: activePromptEdit() ? "Accept or reject the AI suggestion before editing." : "",
|
|
1833
|
+
readOnly: !!activePromptEdit() || promptWritesPaused(),
|
|
1834
|
+
readOnlyMessage: activePromptEdit() ? "Accept or reject the AI suggestion before editing." : promptWritesPaused() ? "Bosun is refreshing the project." : "",
|
|
1462
1835
|
showPreviewToggle: false,
|
|
1463
1836
|
preview: activePromptEdit() ? false : previewEnabled,
|
|
1464
|
-
onEditorReady: handleBasePromptEditorReady
|
|
1837
|
+
onEditorReady: handleBasePromptEditorReady,
|
|
1838
|
+
onReadOnlyEditAttempt: gitMode.requestBlockedOperationNotice
|
|
1465
1839
|
});
|
|
1466
1840
|
}
|
|
1467
1841
|
$$renderer3.push(`<!----> `);
|
|
@@ -1471,7 +1845,7 @@ function _layout($$renderer, $$props) {
|
|
|
1471
1845
|
if (workspace.edit.popover) {
|
|
1472
1846
|
$$renderer3.push("<!--[0-->");
|
|
1473
1847
|
PromptEditor($$renderer3, {
|
|
1474
|
-
class: "h-full min-w-0
|
|
1848
|
+
class: "h-full min-w-0 focus:outline-none focus:ring-0",
|
|
1475
1849
|
initialPrompt: activePromptEdit().suggestedPrompt,
|
|
1476
1850
|
agentId: workspace.agentId,
|
|
1477
1851
|
stepName: workspace.currentStep.name,
|
|
@@ -1482,12 +1856,13 @@ function _layout($$renderer, $$props) {
|
|
|
1482
1856
|
readOnlyMessage: "Accept or reject the AI suggestion before editing.",
|
|
1483
1857
|
bottomPadding: 56,
|
|
1484
1858
|
showPreviewToggle: false,
|
|
1485
|
-
onEditorReady: handleInspectionPromptEditorReady
|
|
1859
|
+
onEditorReady: handleInspectionPromptEditorReady,
|
|
1860
|
+
onReadOnlyEditAttempt: gitMode.requestBlockedOperationNotice
|
|
1486
1861
|
});
|
|
1487
1862
|
} else {
|
|
1488
1863
|
$$renderer3.push("<!--[-1-->");
|
|
1489
1864
|
ReadOnlyMonacoDiff($$renderer3, {
|
|
1490
|
-
class: "h-full min-w-0
|
|
1865
|
+
class: "h-full min-w-0",
|
|
1491
1866
|
original: pendingDiffOriginal(),
|
|
1492
1867
|
modified: pendingDiffModified()
|
|
1493
1868
|
});
|
|
@@ -1790,4 +2165,4 @@ function _layout($$renderer, $$props) {
|
|
|
1790
2165
|
}
|
|
1791
2166
|
|
|
1792
2167
|
export { _layout as default };
|
|
1793
|
-
//# sourceMappingURL=_layout.svelte-
|
|
2168
|
+
//# sourceMappingURL=_layout.svelte-D6rhwm98.js.map
|