@recombine-ai/bosun 0.16.1 → 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.
Files changed (543) hide show
  1. package/README.md +24 -0
  2. package/bin/bosun.js +153 -20
  3. package/bin/git-mode.js +1139 -0
  4. package/build/client/_app/immutable/assets/0.D9HpHezk.css +1 -0
  5. package/build/client/_app/immutable/assets/0.D9HpHezk.css.br +0 -0
  6. package/build/client/_app/immutable/assets/0.D9HpHezk.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/2.Bc0Sf3YD.css +1 -0
  8. package/build/client/_app/immutable/assets/2.Bc0Sf3YD.css.br +0 -0
  9. package/build/client/_app/immutable/assets/2.Bc0Sf3YD.css.gz +0 -0
  10. package/build/client/_app/immutable/assets/ReadOnlyMonacoDiff.iiWNRlR-.css +1 -0
  11. package/build/client/_app/immutable/assets/ReadOnlyMonacoDiff.iiWNRlR-.css.br +0 -0
  12. package/build/client/_app/immutable/assets/ReadOnlyMonacoDiff.iiWNRlR-.css.gz +0 -0
  13. package/build/client/_app/immutable/chunks/{BI42X8h_.js → -3ZOIHDA.js} +1 -1
  14. package/build/client/_app/immutable/chunks/-3ZOIHDA.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/-3ZOIHDA.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/7hV1SZxK.js +1 -0
  17. package/build/client/_app/immutable/chunks/7hV1SZxK.js.br +2 -0
  18. package/build/client/_app/immutable/chunks/7hV1SZxK.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/{Bw7xm6iT.js → B-dTD_wm.js} +1 -1
  20. package/build/client/_app/immutable/chunks/B-dTD_wm.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/B-dTD_wm.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/{Bj8jfBTi.js → B-iasAJv.js} +1 -1
  23. package/build/client/_app/immutable/chunks/B-iasAJv.js.br +0 -0
  24. package/build/client/_app/immutable/chunks/B-iasAJv.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/BDijIo6D.js +33 -0
  26. package/build/client/_app/immutable/chunks/BDijIo6D.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/BDijIo6D.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/BHB0Pj1h.js +2 -0
  29. package/build/client/_app/immutable/chunks/BHB0Pj1h.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/BHB0Pj1h.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/{CJYOmGlC.js → BKfmN1Rj.js} +1 -1
  32. package/build/client/_app/immutable/chunks/BKfmN1Rj.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/BKfmN1Rj.js.gz +0 -0
  34. package/build/client/_app/immutable/chunks/{BJTwdUYr.js → BlFOg-Sd.js} +1 -1
  35. package/build/client/_app/immutable/chunks/BlFOg-Sd.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/BlFOg-Sd.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/{CVlsAO8k.js → Byg3jr1u.js} +1 -1
  38. package/build/client/_app/immutable/chunks/Byg3jr1u.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/Byg3jr1u.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/{CX0Ekq8t.js → BzxxLgHi.js} +1 -1
  41. package/build/client/_app/immutable/chunks/BzxxLgHi.js.br +0 -0
  42. package/build/client/_app/immutable/chunks/BzxxLgHi.js.gz +0 -0
  43. package/build/client/_app/immutable/chunks/C4UC6AgE.js +1 -0
  44. package/build/client/_app/immutable/chunks/C4UC6AgE.js.br +0 -0
  45. package/build/client/_app/immutable/chunks/C4UC6AgE.js.gz +0 -0
  46. package/build/client/_app/immutable/chunks/C60AG6QQ.js +1 -0
  47. package/build/client/_app/immutable/chunks/C60AG6QQ.js.br +0 -0
  48. package/build/client/_app/immutable/chunks/C60AG6QQ.js.gz +0 -0
  49. package/build/client/_app/immutable/chunks/CAIfVN23.js +1 -0
  50. package/build/client/_app/immutable/chunks/CAIfVN23.js.br +0 -0
  51. package/build/client/_app/immutable/chunks/CAIfVN23.js.gz +0 -0
  52. package/build/client/_app/immutable/chunks/{JcG4w2gF.js → CB9iDxwI.js} +1 -1
  53. package/build/client/_app/immutable/chunks/CB9iDxwI.js.br +0 -0
  54. package/build/client/_app/immutable/chunks/CB9iDxwI.js.gz +0 -0
  55. package/build/client/_app/immutable/chunks/{C39ai1md.js → CD_KdWs9.js} +1 -1
  56. package/build/client/_app/immutable/chunks/CD_KdWs9.js.br +0 -0
  57. package/build/client/_app/immutable/chunks/CD_KdWs9.js.gz +0 -0
  58. package/build/client/_app/immutable/chunks/CDy1LBR5.js +1 -0
  59. package/build/client/_app/immutable/chunks/CDy1LBR5.js.br +0 -0
  60. package/build/client/_app/immutable/chunks/CDy1LBR5.js.gz +0 -0
  61. package/build/client/_app/immutable/chunks/{Ca197UDq.js → CMFNmSvo.js} +1 -1
  62. package/build/client/_app/immutable/chunks/CMFNmSvo.js.br +0 -0
  63. package/build/client/_app/immutable/chunks/CMFNmSvo.js.gz +0 -0
  64. package/build/client/_app/immutable/chunks/{iAhzu4tv.js → CNIn4L55.js} +1 -1
  65. package/build/client/_app/immutable/chunks/CNIn4L55.js.br +0 -0
  66. package/build/client/_app/immutable/chunks/CNIn4L55.js.gz +0 -0
  67. package/build/client/_app/immutable/chunks/CUKoVL36.js +1 -0
  68. package/build/client/_app/immutable/chunks/CUKoVL36.js.br +0 -0
  69. package/build/client/_app/immutable/chunks/CUKoVL36.js.gz +0 -0
  70. package/build/client/_app/immutable/chunks/CYGbCr1i.js +3 -0
  71. package/build/client/_app/immutable/chunks/CYGbCr1i.js.br +0 -0
  72. package/build/client/_app/immutable/chunks/CYGbCr1i.js.gz +0 -0
  73. package/build/client/_app/immutable/chunks/CYr0FGgn.js +1 -0
  74. package/build/client/_app/immutable/chunks/CYr0FGgn.js.br +0 -0
  75. package/build/client/_app/immutable/chunks/CYr0FGgn.js.gz +0 -0
  76. package/build/client/_app/immutable/chunks/{BLu86SbA.js → Ce6a22qU.js} +1 -1
  77. package/build/client/_app/immutable/chunks/Ce6a22qU.js.br +0 -0
  78. package/build/client/_app/immutable/chunks/Ce6a22qU.js.gz +0 -0
  79. package/build/client/_app/immutable/chunks/{nYD9wsyN.js → CeoQ-OhK.js} +1 -1
  80. package/build/client/_app/immutable/chunks/CeoQ-OhK.js.br +0 -0
  81. package/build/client/_app/immutable/chunks/CeoQ-OhK.js.gz +0 -0
  82. package/build/client/_app/immutable/chunks/{CPXdAKdv.js → CupXtwVS.js} +1 -1
  83. package/build/client/_app/immutable/chunks/CupXtwVS.js.br +0 -0
  84. package/build/client/_app/immutable/chunks/CupXtwVS.js.gz +0 -0
  85. package/build/client/_app/immutable/chunks/{uLGP0py1.js → Cy2Uze-c.js} +1 -1
  86. package/build/client/_app/immutable/chunks/Cy2Uze-c.js.br +0 -0
  87. package/build/client/_app/immutable/chunks/Cy2Uze-c.js.gz +0 -0
  88. package/build/client/_app/immutable/chunks/{D-B5X35l.js → D8Lmn3S5.js} +1 -1
  89. package/build/client/_app/immutable/chunks/D8Lmn3S5.js.br +0 -0
  90. package/build/client/_app/immutable/chunks/D8Lmn3S5.js.gz +0 -0
  91. package/build/client/_app/immutable/chunks/D8doM1Y6.js +1 -0
  92. package/build/client/_app/immutable/chunks/D8doM1Y6.js.br +2 -0
  93. package/build/client/_app/immutable/chunks/D8doM1Y6.js.gz +0 -0
  94. package/build/client/_app/immutable/chunks/{Buo-57fF.js → D9BWOD7V.js} +1 -1
  95. package/build/client/_app/immutable/chunks/D9BWOD7V.js.br +3 -0
  96. package/build/client/_app/immutable/chunks/D9BWOD7V.js.gz +0 -0
  97. package/build/client/_app/immutable/chunks/{Ce9aG7vY.js → DBB88ZB7.js} +1 -1
  98. package/build/client/_app/immutable/chunks/DBB88ZB7.js.br +2 -0
  99. package/build/client/_app/immutable/chunks/DBB88ZB7.js.gz +0 -0
  100. package/build/client/_app/immutable/chunks/{BPNEONy5.js → DC7lPrn4.js} +1 -1
  101. package/build/client/_app/immutable/chunks/DC7lPrn4.js.br +0 -0
  102. package/build/client/_app/immutable/chunks/DC7lPrn4.js.gz +0 -0
  103. package/build/client/_app/immutable/chunks/DCwWNTpf.js +9 -0
  104. package/build/client/_app/immutable/chunks/DCwWNTpf.js.br +0 -0
  105. package/build/client/_app/immutable/chunks/DCwWNTpf.js.gz +0 -0
  106. package/build/client/_app/immutable/chunks/{CaHl3dME.js → DEnUeQNt.js} +1 -1
  107. package/build/client/_app/immutable/chunks/DEnUeQNt.js.br +0 -0
  108. package/build/client/_app/immutable/chunks/DEnUeQNt.js.gz +0 -0
  109. package/build/client/_app/immutable/chunks/D_laxq3h.js +1 -0
  110. package/build/client/_app/immutable/chunks/D_laxq3h.js.br +0 -0
  111. package/build/client/_app/immutable/chunks/D_laxq3h.js.gz +0 -0
  112. package/build/client/_app/immutable/chunks/{07xNIa59.js → DfkYlKBk.js} +1 -1
  113. package/build/client/_app/immutable/chunks/DfkYlKBk.js.br +0 -0
  114. package/build/client/_app/immutable/chunks/DfkYlKBk.js.gz +0 -0
  115. package/build/client/_app/immutable/chunks/DnMS2X6M.js +2 -0
  116. package/build/client/_app/immutable/chunks/DnMS2X6M.js.br +0 -0
  117. package/build/client/_app/immutable/chunks/DnMS2X6M.js.gz +0 -0
  118. package/build/client/_app/immutable/chunks/{Cyai3SOj.js → DrE1ro9S.js} +1 -1
  119. package/build/client/_app/immutable/chunks/DrE1ro9S.js.br +0 -0
  120. package/build/client/_app/immutable/chunks/DrE1ro9S.js.gz +0 -0
  121. package/build/client/_app/immutable/chunks/DzY_RPb9.js +1 -0
  122. package/build/client/_app/immutable/chunks/DzY_RPb9.js.br +0 -0
  123. package/build/client/_app/immutable/chunks/DzY_RPb9.js.gz +0 -0
  124. package/build/client/_app/immutable/chunks/PrCSpCPg.js +1 -0
  125. package/build/client/_app/immutable/chunks/PrCSpCPg.js.br +0 -0
  126. package/build/client/_app/immutable/chunks/PrCSpCPg.js.gz +0 -0
  127. package/build/client/_app/immutable/chunks/{DJriQKD9.js → eMofpOrR.js} +1 -1
  128. package/build/client/_app/immutable/chunks/eMofpOrR.js.br +0 -0
  129. package/build/client/_app/immutable/chunks/eMofpOrR.js.gz +0 -0
  130. package/build/client/_app/immutable/entry/app.BQUuHkSR.js +2 -0
  131. package/build/client/_app/immutable/entry/app.BQUuHkSR.js.br +0 -0
  132. package/build/client/_app/immutable/entry/app.BQUuHkSR.js.gz +0 -0
  133. package/build/client/_app/immutable/entry/start.DoeTycdu.js +1 -0
  134. package/build/client/_app/immutable/entry/start.DoeTycdu.js.br +2 -0
  135. package/build/client/_app/immutable/entry/start.DoeTycdu.js.gz +0 -0
  136. package/build/client/_app/immutable/nodes/0.DBnFpwRM.js +4 -0
  137. package/build/client/_app/immutable/nodes/0.DBnFpwRM.js.br +0 -0
  138. package/build/client/_app/immutable/nodes/0.DBnFpwRM.js.gz +0 -0
  139. package/build/client/_app/immutable/nodes/1.D-kI-fLd.js +1 -0
  140. package/build/client/_app/immutable/nodes/1.D-kI-fLd.js.br +0 -0
  141. package/build/client/_app/immutable/nodes/1.D-kI-fLd.js.gz +0 -0
  142. package/build/client/_app/immutable/nodes/10.DWb5H7vX.js +28 -0
  143. package/build/client/_app/immutable/nodes/10.DWb5H7vX.js.br +0 -0
  144. package/build/client/_app/immutable/nodes/10.DWb5H7vX.js.gz +0 -0
  145. package/build/client/_app/immutable/nodes/{15.BFy4oAT6.js → 15.CGc3_07c.js} +1 -1
  146. package/build/client/_app/immutable/nodes/15.CGc3_07c.js.br +3 -0
  147. package/build/client/_app/immutable/nodes/15.CGc3_07c.js.gz +0 -0
  148. package/build/client/_app/immutable/nodes/17.BIba62hW.js +3 -0
  149. package/build/client/_app/immutable/nodes/17.BIba62hW.js.br +0 -0
  150. package/build/client/_app/immutable/nodes/17.BIba62hW.js.gz +0 -0
  151. package/build/client/_app/immutable/nodes/18.Clxr6FwI.js +11 -0
  152. package/build/client/_app/immutable/nodes/18.Clxr6FwI.js.br +0 -0
  153. package/build/client/_app/immutable/nodes/18.Clxr6FwI.js.gz +0 -0
  154. package/build/client/_app/immutable/nodes/2.cbpnR8be.js +35 -0
  155. package/build/client/_app/immutable/nodes/2.cbpnR8be.js.br +0 -0
  156. package/build/client/_app/immutable/nodes/2.cbpnR8be.js.gz +0 -0
  157. package/build/client/_app/immutable/nodes/3.DsP759xk.js +1 -0
  158. package/build/client/_app/immutable/nodes/3.DsP759xk.js.br +0 -0
  159. package/build/client/_app/immutable/nodes/3.DsP759xk.js.gz +0 -0
  160. package/build/client/_app/immutable/nodes/{4.C5HDYxuE.js → 4.BIGLAIDe.js} +1 -1
  161. package/build/client/_app/immutable/nodes/4.BIGLAIDe.js.br +0 -0
  162. package/build/client/_app/immutable/nodes/4.BIGLAIDe.js.gz +0 -0
  163. package/build/client/_app/immutable/nodes/{5.BRZRzqKl.js → 5.zMHOyhDv.js} +1 -1
  164. package/build/client/_app/immutable/nodes/5.zMHOyhDv.js.br +0 -0
  165. package/build/client/_app/immutable/nodes/5.zMHOyhDv.js.gz +0 -0
  166. package/build/client/_app/immutable/nodes/6.DFQ1IZsQ.js +1 -0
  167. package/build/client/_app/immutable/nodes/6.DFQ1IZsQ.js.br +0 -0
  168. package/build/client/_app/immutable/nodes/6.DFQ1IZsQ.js.gz +0 -0
  169. package/build/client/_app/immutable/nodes/8.CTgEdr7L.js +2 -0
  170. package/build/client/_app/immutable/nodes/8.CTgEdr7L.js.br +0 -0
  171. package/build/client/_app/immutable/nodes/8.CTgEdr7L.js.gz +0 -0
  172. package/build/client/_app/immutable/nodes/9.BidF5Uvq.js +2 -0
  173. package/build/client/_app/immutable/nodes/9.BidF5Uvq.js.br +0 -0
  174. package/build/client/_app/immutable/nodes/9.BidF5Uvq.js.gz +0 -0
  175. package/build/client/_app/version.json +1 -1
  176. package/build/client/_app/version.json.br +0 -0
  177. package/build/client/_app/version.json.gz +0 -0
  178. package/build/server/chunks/0-BZOFUIfF.js +9 -0
  179. package/build/server/chunks/0-BZOFUIfF.js.map +1 -0
  180. package/build/server/chunks/1-XwGU5VVN.js +9 -0
  181. package/build/server/chunks/{1-p4jSVKu9.js.map → 1-XwGU5VVN.js.map} +1 -1
  182. package/build/server/chunks/10-BgFSx4ib.js +9 -0
  183. package/build/server/chunks/10-BgFSx4ib.js.map +1 -0
  184. package/build/server/chunks/15-BjTTC1jf.js +9 -0
  185. package/build/server/chunks/{15-BRw8wtLp.js.map → 15-BjTTC1jf.js.map} +1 -1
  186. package/build/server/chunks/17-BEkWCfzc.js +9 -0
  187. package/build/server/chunks/17-BEkWCfzc.js.map +1 -0
  188. package/build/server/chunks/18-C-S0wKdp.js +9 -0
  189. package/build/server/chunks/18-C-S0wKdp.js.map +1 -0
  190. package/build/server/chunks/2-o-cIkIjs.js +9 -0
  191. package/build/server/chunks/2-o-cIkIjs.js.map +1 -0
  192. package/build/server/chunks/3-B-ABlyFO.js +9 -0
  193. package/build/server/chunks/3-B-ABlyFO.js.map +1 -0
  194. package/build/server/chunks/4-joAFA_Y8.js +9 -0
  195. package/build/server/chunks/4-joAFA_Y8.js.map +1 -0
  196. package/build/server/chunks/5-DIhC9k4l.js +9 -0
  197. package/build/server/chunks/5-DIhC9k4l.js.map +1 -0
  198. package/build/server/chunks/6-CMuAQIcW.js +9 -0
  199. package/build/server/chunks/6-CMuAQIcW.js.map +1 -0
  200. package/build/server/chunks/8-CbETTVRG.js +9 -0
  201. package/build/server/chunks/8-CbETTVRG.js.map +1 -0
  202. package/build/server/chunks/9-nMV90uVU.js +9 -0
  203. package/build/server/chunks/9-nMV90uVU.js.map +1 -0
  204. package/build/server/chunks/{AgentSidebar-C--dGIV5.js → AgentSidebar-BEbSdZdN.js} +4 -4
  205. package/build/server/chunks/{AgentSidebar-C--dGIV5.js.map → AgentSidebar-BEbSdZdN.js.map} +1 -1
  206. package/build/server/chunks/{Button-oIUr2LUP.js → Button-Dc9CR4Wh.js} +2 -2
  207. package/build/server/chunks/{Button-oIUr2LUP.js.map → Button-Dc9CR4Wh.js.map} +1 -1
  208. package/build/server/chunks/{ChatStepTrace-CX2Zolmp.js → ChatStepTrace-OM96X4g8.js} +20 -7
  209. package/build/server/chunks/ChatStepTrace-OM96X4g8.js.map +1 -0
  210. package/build/server/chunks/{Dropdown-DfCyYHqi.js → Dropdown-Cgd7pG-k.js} +2 -2
  211. package/build/server/chunks/{Dropdown-DfCyYHqi.js.map → Dropdown-Cgd7pG-k.js.map} +1 -1
  212. package/build/server/chunks/GitControlsButton-BLcNzrDt.js +81 -0
  213. package/build/server/chunks/GitControlsButton-BLcNzrDt.js.map +1 -0
  214. package/build/server/chunks/{Icon-DadJPtVP.js → Icon-Bogvl2n9.js} +2 -2
  215. package/build/server/chunks/{Icon-DadJPtVP.js.map → Icon-Bogvl2n9.js.map} +1 -1
  216. package/build/server/chunks/{Input-R74u4cO5.js → Input-7hpw1WLW.js} +2 -2
  217. package/build/server/chunks/{Input-R74u4cO5.js.map → Input-7hpw1WLW.js.map} +1 -1
  218. package/build/server/chunks/{Modal-CAzVFw5x.js → Modal-7IIIfFEG.js} +21 -9
  219. package/build/server/chunks/{Modal-CAzVFw5x.js.map → Modal-7IIIfFEG.js.map} +1 -1
  220. package/build/server/chunks/{Panel-D0IY1AzO.js → Panel-Cj1mXx9-.js} +2 -2
  221. package/build/server/chunks/{Panel-D0IY1AzO.js.map → Panel-Cj1mXx9-.js.map} +1 -1
  222. package/build/server/chunks/{Tab-D13L_Up5.js → Tab-bf4ZDs5y.js} +4 -4
  223. package/build/server/chunks/{Tab-D13L_Up5.js.map → Tab-bf4ZDs5y.js.map} +1 -1
  224. package/build/server/chunks/{_layout.svelte-Dk-9LkfL.js → _layout.svelte-C71luIwv.js} +10 -10
  225. package/build/server/chunks/{_layout.svelte-Dk-9LkfL.js.map → _layout.svelte-C71luIwv.js.map} +1 -1
  226. package/build/server/chunks/{_layout.svelte-BIMexfnk.js → _layout.svelte-CFhHgXI_.js} +24 -18
  227. package/build/server/chunks/_layout.svelte-CFhHgXI_.js.map +1 -0
  228. package/build/server/chunks/_layout.svelte-CJd_pmkx.js +431 -0
  229. package/build/server/chunks/_layout.svelte-CJd_pmkx.js.map +1 -0
  230. package/build/server/chunks/_layout.svelte-D6rhwm98.js +2168 -0
  231. package/build/server/chunks/_layout.svelte-D6rhwm98.js.map +1 -0
  232. package/build/server/chunks/{_page.svelte-CoCBnE2l.js → _page.svelte-BBvDMiTV.js} +25 -21
  233. package/build/server/chunks/_page.svelte-BBvDMiTV.js.map +1 -0
  234. package/build/server/chunks/{_page.svelte-YoDx7gDL.js → _page.svelte-BQs9dEuq.js} +8 -7
  235. package/build/server/chunks/{_page.svelte-YoDx7gDL.js.map → _page.svelte-BQs9dEuq.js.map} +1 -1
  236. package/build/server/chunks/{_page.svelte-xf-0yXQM.js → _page.svelte-BoO2LWVX.js} +45 -23
  237. package/build/server/chunks/_page.svelte-BoO2LWVX.js.map +1 -0
  238. package/build/server/chunks/{_page.svelte-CeO_ScC8.js → _page.svelte-DUCTSdv-.js} +2 -2
  239. package/build/server/chunks/{_page.svelte-CeO_ScC8.js.map → _page.svelte-DUCTSdv-.js.map} +1 -1
  240. package/build/server/chunks/_page.svelte-FXYLKyMw.js +110 -0
  241. package/build/server/chunks/_page.svelte-FXYLKyMw.js.map +1 -0
  242. package/build/server/chunks/{_page.svelte-DZvcjON6.js → _page.svelte-KA1hqKj2.js} +20 -107
  243. package/build/server/chunks/_page.svelte-KA1hqKj2.js.map +1 -0
  244. package/build/server/chunks/{_page.svelte-CY0Be19a.js → _page.svelte-y8CZFL8a.js} +210 -106
  245. package/build/server/chunks/_page.svelte-y8CZFL8a.js.map +1 -0
  246. package/build/server/chunks/{_page.svelte-D5S0QjlI.js → _page.svelte-yIHSIEW6.js} +21 -15
  247. package/build/server/chunks/_page.svelte-yIHSIEW6.js.map +1 -0
  248. package/build/server/chunks/_server.ts-Cp9DgLcE.js +336 -0
  249. package/build/server/chunks/_server.ts-Cp9DgLcE.js.map +1 -0
  250. package/build/server/chunks/{agents-context-w03Lz_6n.js → agents-context-owgusUPR.js} +2 -2
  251. package/build/server/chunks/{agents-context-w03Lz_6n.js.map → agents-context-owgusUPR.js.map} +1 -1
  252. package/build/server/chunks/{client-WFEvX_be.js → client-P-7bDULt.js} +4 -4
  253. package/build/server/chunks/{client-WFEvX_be.js.map → client-P-7bDULt.js.map} +1 -1
  254. package/build/server/chunks/{conversation-view-memory-B0PllWRL.js → conversation-view-memory-SdpdqTR7.js} +2 -2
  255. package/build/server/chunks/{conversation-view-memory-B0PllWRL.js.map → conversation-view-memory-SdpdqTR7.js.map} +1 -1
  256. package/build/server/chunks/{edit-workspace-context-biaZqjOf.js → edit-workspace-context-hanFnXR3.js} +2 -2
  257. package/build/server/chunks/{edit-workspace-context-biaZqjOf.js.map → edit-workspace-context-hanFnXR3.js.map} +1 -1
  258. package/build/server/chunks/error.svelte-yI9RS6H4.js +15 -0
  259. package/build/server/chunks/{error.svelte-BjIDhioc.js.map → error.svelte-yI9RS6H4.js.map} +1 -1
  260. package/build/server/chunks/git-mode-context-BpNsAUGF.js +18 -0
  261. package/build/server/chunks/git-mode-context-BpNsAUGF.js.map +1 -0
  262. package/build/server/chunks/{index-rHCWxLFZ.js → index-DGtbUu8Y.js} +2 -2
  263. package/build/server/chunks/{index-rHCWxLFZ.js.map → index-DGtbUu8Y.js.map} +1 -1
  264. package/build/server/chunks/{index-server-BMxlf3ZC.js → index-server-l8-WsVn4.js} +2 -2
  265. package/build/server/chunks/{index-server-BMxlf3ZC.js.map → index-server-l8-WsVn4.js.map} +1 -1
  266. package/build/server/chunks/{index2-DdOgqE2_.js → index2-CtgLiJVO.js} +3 -3
  267. package/build/server/chunks/{index2-DdOgqE2_.js.map → index2-CtgLiJVO.js.map} +1 -1
  268. package/build/server/chunks/{index3-DC4GTqD1.js → index3-4hbbCqW0.js} +2 -2
  269. package/build/server/chunks/{index3-DC4GTqD1.js.map → index3-4hbbCqW0.js.map} +1 -1
  270. package/build/server/chunks/{root-UeqiktJA.js → root-sWPnlpi3.js} +2 -2
  271. package/build/server/chunks/{root-UeqiktJA.js.map → root-sWPnlpi3.js.map} +1 -1
  272. package/build/server/chunks/{source-selection-CcN1cgXc.js → source-selection-DSkaPGfZ.js} +7 -2
  273. package/build/server/chunks/source-selection-DSkaPGfZ.js.map +1 -0
  274. package/build/server/chunks/{state.svelte-CLOYXiU6.js → state.svelte-BkvaElc6.js} +3 -3
  275. package/build/server/chunks/{state.svelte-CLOYXiU6.js.map → state.svelte-BkvaElc6.js.map} +1 -1
  276. package/build/server/chunks/trpc-client-Cr8RJ4UO.js +260 -0
  277. package/build/server/chunks/trpc-client-Cr8RJ4UO.js.map +1 -0
  278. package/build/server/index.js +4 -4
  279. package/build/server/index.js.map +1 -1
  280. package/build/server/manifest.js +15 -15
  281. package/build/server/manifest.js.map +1 -1
  282. package/package.json +1 -1
  283. package/src/backend/git-mode/command.spec.ts +172 -0
  284. package/src/backend/git-mode/command.ts +405 -0
  285. package/src/backend/git-mode/config.spec.ts +45 -0
  286. package/src/backend/git-mode/config.ts +90 -0
  287. package/src/backend/git-mode/index.ts +20 -0
  288. package/src/backend/git-mode/repository-write-gate.spec.ts +116 -0
  289. package/src/backend/git-mode/repository-write-gate.ts +260 -0
  290. package/src/backend/git-mode/router.ts +59 -0
  291. package/src/backend/git-mode/service.spec.ts +1653 -0
  292. package/src/backend/git-mode/service.ts +2183 -0
  293. package/src/backend/git-mode/types.ts +82 -0
  294. package/src/backend/git-mode/write-tracker.spec.ts +46 -0
  295. package/src/backend/git-mode/write-tracker.ts +39 -0
  296. package/src/backend/lib/apply-v4a-diff.spec.ts +45 -0
  297. package/src/backend/lib/apply-v4a-diff.ts +167 -0
  298. package/src/backend/lib/backend-restart.spec.ts +27 -0
  299. package/src/backend/lib/backend-restart.ts +16 -2
  300. package/src/backend/lib/middleware/cors.spec.ts +67 -0
  301. package/src/backend/lib/middleware/cors.ts +40 -12
  302. package/src/backend/roleplay/agent-loader.ts +49 -0
  303. package/src/backend/roleplay/agents.ts +16 -2
  304. package/src/backend/roleplay/old-server.ts +115 -51
  305. package/src/backend/roleplay/prompt-edit-progress.ts +36 -0
  306. package/src/backend/roleplay/prompt-edit-proposals.ts +72 -0
  307. package/src/backend/roleplay/prompt-file.ts +59 -0
  308. package/src/backend/roleplay/router.spec.ts +75 -0
  309. package/src/backend/roleplay/router.ts +174 -72
  310. package/src/backend/roleplay/step-registry.spec.ts +20 -0
  311. package/src/backend/roleplay/step-registry.ts +13 -2
  312. package/src/backend/roleplay/suggest-file-edit.ts +160 -0
  313. package/src/backend/roleplay/suggest-prompt-edit.ts +34 -0
  314. package/src/backend/roleplay/suggest-test-fix.spec.ts +50 -0
  315. package/src/backend/roleplay/suggest-test-fix.ts +65 -0
  316. package/src/backend/roleplay/test-fix-proposal-acceptance.spec.ts +253 -0
  317. package/src/backend/roleplay/variants.ts +8 -4
  318. package/src/backend/server.ts +116 -13
  319. package/src/backend/tests/academy.ts +23 -3
  320. package/src/backend/tests/data.spec.ts +81 -2
  321. package/src/backend/tests/data.ts +74 -4
  322. package/src/backend/tests/emulate-agents.spec.ts +106 -0
  323. package/src/backend/tests/emulate-agents.ts +42 -4
  324. package/src/backend/tests/router.ts +109 -36
  325. package/src/backend/tests/suggest-test-history-edit.spec.ts +20 -0
  326. package/src/backend/tests/suggest-test-history-edit.ts +52 -0
  327. package/src/backend/tests/test-edit-source.spec.ts +61 -0
  328. package/src/backend/tests/test-edit-source.ts +34 -0
  329. package/src/backend/tests/test-history-edit-proposals.ts +69 -0
  330. package/src/backend/tests/test-history-overrides.spec.ts +24 -0
  331. package/src/backend/tests/test-selection.ts +27 -0
  332. package/src/lib/api-telescope/source-selection.spec.ts +44 -0
  333. package/src/lib/api-telescope/source-selection.ts +28 -0
  334. package/src/lib/components/Modal.svelte +42 -13
  335. package/src/lib/components/Textarea.svelte +41 -0
  336. package/src/lib/edit/edit-workspace-context.ts +45 -3
  337. package/src/lib/edit/test-ai-edit.spec.ts +31 -0
  338. package/src/lib/edit/test-ai-edit.ts +52 -0
  339. package/src/lib/git-mode/BlockingGitDialog.svelte +118 -0
  340. package/src/lib/git-mode/GitControlsButton.svelte +96 -0
  341. package/src/lib/git-mode/client-admission.spec.ts +304 -0
  342. package/src/lib/git-mode/client-admission.ts +343 -0
  343. package/src/lib/git-mode/errors.ts +2 -0
  344. package/src/lib/git-mode/git-mode-context.ts +70 -0
  345. package/src/lib/git-mode/refresh-policy.spec.ts +95 -0
  346. package/src/lib/git-mode/refresh-policy.ts +39 -0
  347. package/src/lib/git-mode/status-recovery.spec.ts +86 -0
  348. package/src/lib/git-mode/status-recovery.ts +33 -0
  349. package/src/lib/monaco/bosun-theme.ts +6 -83
  350. package/src/lib/monaco/editor-appearance.spec.ts +84 -0
  351. package/src/lib/monaco/editor-appearance.ts +154 -0
  352. package/src/lib/monaco/editor-decorations.spec.ts +91 -0
  353. package/src/lib/monaco/editor-decorations.ts +133 -0
  354. package/src/lib/tests/assertion-types.ts +74 -0
  355. package/src/lib/trpc-client.ts +15 -1
  356. package/src/lib/ws-client.spec.ts +208 -0
  357. package/src/lib/ws-client.ts +196 -14
  358. package/src/lib/ws-message.ts +31 -0
  359. package/build/client/_app/immutable/assets/0.FwR3B_mV.css +0 -1
  360. package/build/client/_app/immutable/assets/0.FwR3B_mV.css.br +0 -0
  361. package/build/client/_app/immutable/assets/0.FwR3B_mV.css.gz +0 -0
  362. package/build/client/_app/immutable/assets/2.DxwYfh1z.css +0 -1
  363. package/build/client/_app/immutable/assets/2.DxwYfh1z.css.br +0 -0
  364. package/build/client/_app/immutable/assets/2.DxwYfh1z.css.gz +0 -0
  365. package/build/client/_app/immutable/assets/Modal.tn0RQdqM.css +0 -0
  366. package/build/client/_app/immutable/assets/Modal.tn0RQdqM.css.br +0 -1
  367. package/build/client/_app/immutable/assets/Modal.tn0RQdqM.css.gz +0 -0
  368. package/build/client/_app/immutable/chunks/07xNIa59.js.br +0 -0
  369. package/build/client/_app/immutable/chunks/07xNIa59.js.gz +0 -0
  370. package/build/client/_app/immutable/chunks/BDl2QuyN.js +0 -1
  371. package/build/client/_app/immutable/chunks/BDl2QuyN.js.br +0 -0
  372. package/build/client/_app/immutable/chunks/BDl2QuyN.js.gz +0 -0
  373. package/build/client/_app/immutable/chunks/BI42X8h_.js.br +0 -0
  374. package/build/client/_app/immutable/chunks/BI42X8h_.js.gz +0 -0
  375. package/build/client/_app/immutable/chunks/BJTwdUYr.js.br +0 -0
  376. package/build/client/_app/immutable/chunks/BJTwdUYr.js.gz +0 -0
  377. package/build/client/_app/immutable/chunks/BLu86SbA.js.br +0 -0
  378. package/build/client/_app/immutable/chunks/BLu86SbA.js.gz +0 -0
  379. package/build/client/_app/immutable/chunks/BNifnXkO.js +0 -1
  380. package/build/client/_app/immutable/chunks/BNifnXkO.js.br +0 -2
  381. package/build/client/_app/immutable/chunks/BNifnXkO.js.gz +0 -0
  382. package/build/client/_app/immutable/chunks/BPNEONy5.js.br +0 -0
  383. package/build/client/_app/immutable/chunks/BPNEONy5.js.gz +0 -0
  384. package/build/client/_app/immutable/chunks/BU7aeYn4.js +0 -1
  385. package/build/client/_app/immutable/chunks/BU7aeYn4.js.br +0 -0
  386. package/build/client/_app/immutable/chunks/BU7aeYn4.js.gz +0 -0
  387. package/build/client/_app/immutable/chunks/B_K7D6rX.js +0 -2
  388. package/build/client/_app/immutable/chunks/B_K7D6rX.js.br +0 -0
  389. package/build/client/_app/immutable/chunks/B_K7D6rX.js.gz +0 -0
  390. package/build/client/_app/immutable/chunks/BbBuNuSi.js +0 -3
  391. package/build/client/_app/immutable/chunks/BbBuNuSi.js.br +0 -0
  392. package/build/client/_app/immutable/chunks/BbBuNuSi.js.gz +0 -0
  393. package/build/client/_app/immutable/chunks/Bj8jfBTi.js.br +0 -0
  394. package/build/client/_app/immutable/chunks/Bj8jfBTi.js.gz +0 -0
  395. package/build/client/_app/immutable/chunks/BsDZe4N6.js +0 -1
  396. package/build/client/_app/immutable/chunks/BsDZe4N6.js.br +0 -0
  397. package/build/client/_app/immutable/chunks/BsDZe4N6.js.gz +0 -0
  398. package/build/client/_app/immutable/chunks/Buo-57fF.js.br +0 -0
  399. package/build/client/_app/immutable/chunks/Buo-57fF.js.gz +0 -0
  400. package/build/client/_app/immutable/chunks/Bw7xm6iT.js.br +0 -0
  401. package/build/client/_app/immutable/chunks/Bw7xm6iT.js.gz +0 -0
  402. package/build/client/_app/immutable/chunks/C39ai1md.js.br +0 -0
  403. package/build/client/_app/immutable/chunks/C39ai1md.js.gz +0 -0
  404. package/build/client/_app/immutable/chunks/C7he4XPB.js +0 -1
  405. package/build/client/_app/immutable/chunks/C7he4XPB.js.br +0 -0
  406. package/build/client/_app/immutable/chunks/C7he4XPB.js.gz +0 -0
  407. package/build/client/_app/immutable/chunks/CAjPRvNs.js +0 -2
  408. package/build/client/_app/immutable/chunks/CAjPRvNs.js.br +0 -0
  409. package/build/client/_app/immutable/chunks/CAjPRvNs.js.gz +0 -0
  410. package/build/client/_app/immutable/chunks/CJYOmGlC.js.br +0 -0
  411. package/build/client/_app/immutable/chunks/CJYOmGlC.js.gz +0 -0
  412. package/build/client/_app/immutable/chunks/CPXdAKdv.js.br +0 -0
  413. package/build/client/_app/immutable/chunks/CPXdAKdv.js.gz +0 -0
  414. package/build/client/_app/immutable/chunks/CVlsAO8k.js.br +0 -0
  415. package/build/client/_app/immutable/chunks/CVlsAO8k.js.gz +0 -0
  416. package/build/client/_app/immutable/chunks/CX0Ekq8t.js.br +0 -0
  417. package/build/client/_app/immutable/chunks/CX0Ekq8t.js.gz +0 -0
  418. package/build/client/_app/immutable/chunks/Ca197UDq.js.br +0 -0
  419. package/build/client/_app/immutable/chunks/Ca197UDq.js.gz +0 -0
  420. package/build/client/_app/immutable/chunks/CaHl3dME.js.br +0 -0
  421. package/build/client/_app/immutable/chunks/CaHl3dME.js.gz +0 -0
  422. package/build/client/_app/immutable/chunks/Ce9aG7vY.js.br +0 -0
  423. package/build/client/_app/immutable/chunks/Ce9aG7vY.js.gz +0 -0
  424. package/build/client/_app/immutable/chunks/Cql_e8Of.js +0 -1
  425. package/build/client/_app/immutable/chunks/Cql_e8Of.js.br +0 -2
  426. package/build/client/_app/immutable/chunks/Cql_e8Of.js.gz +0 -0
  427. package/build/client/_app/immutable/chunks/CxLomzuE.js +0 -1
  428. package/build/client/_app/immutable/chunks/CxLomzuE.js.br +0 -0
  429. package/build/client/_app/immutable/chunks/CxLomzuE.js.gz +0 -0
  430. package/build/client/_app/immutable/chunks/Cyai3SOj.js.br +0 -0
  431. package/build/client/_app/immutable/chunks/Cyai3SOj.js.gz +0 -0
  432. package/build/client/_app/immutable/chunks/CyvQWZoe.js +0 -8
  433. package/build/client/_app/immutable/chunks/CyvQWZoe.js.br +0 -0
  434. package/build/client/_app/immutable/chunks/CyvQWZoe.js.gz +0 -0
  435. package/build/client/_app/immutable/chunks/CzXNWL4m.js +0 -1
  436. package/build/client/_app/immutable/chunks/CzXNWL4m.js.br +0 -1
  437. package/build/client/_app/immutable/chunks/CzXNWL4m.js.gz +0 -0
  438. package/build/client/_app/immutable/chunks/D-B5X35l.js.br +0 -0
  439. package/build/client/_app/immutable/chunks/D-B5X35l.js.gz +0 -0
  440. package/build/client/_app/immutable/chunks/DJriQKD9.js.br +0 -0
  441. package/build/client/_app/immutable/chunks/DJriQKD9.js.gz +0 -0
  442. package/build/client/_app/immutable/chunks/DpBxGfau.js +0 -1
  443. package/build/client/_app/immutable/chunks/DpBxGfau.js.br +0 -0
  444. package/build/client/_app/immutable/chunks/DpBxGfau.js.gz +0 -0
  445. package/build/client/_app/immutable/chunks/Dslf9OwW.js +0 -33
  446. package/build/client/_app/immutable/chunks/Dslf9OwW.js.br +0 -0
  447. package/build/client/_app/immutable/chunks/Dslf9OwW.js.gz +0 -0
  448. package/build/client/_app/immutable/chunks/JcG4w2gF.js.br +0 -0
  449. package/build/client/_app/immutable/chunks/JcG4w2gF.js.gz +0 -0
  450. package/build/client/_app/immutable/chunks/QpaC6J6s.js +0 -1
  451. package/build/client/_app/immutable/chunks/QpaC6J6s.js.br +0 -0
  452. package/build/client/_app/immutable/chunks/QpaC6J6s.js.gz +0 -0
  453. package/build/client/_app/immutable/chunks/iAhzu4tv.js.br +0 -0
  454. package/build/client/_app/immutable/chunks/iAhzu4tv.js.gz +0 -0
  455. package/build/client/_app/immutable/chunks/nYD9wsyN.js.br +0 -0
  456. package/build/client/_app/immutable/chunks/nYD9wsyN.js.gz +0 -0
  457. package/build/client/_app/immutable/chunks/uLGP0py1.js.br +0 -0
  458. package/build/client/_app/immutable/chunks/uLGP0py1.js.gz +0 -0
  459. package/build/client/_app/immutable/entry/app.Ghwm_QxJ.js +0 -2
  460. package/build/client/_app/immutable/entry/app.Ghwm_QxJ.js.br +0 -0
  461. package/build/client/_app/immutable/entry/app.Ghwm_QxJ.js.gz +0 -0
  462. package/build/client/_app/immutable/entry/start.SqT6xQ-7.js +0 -1
  463. package/build/client/_app/immutable/entry/start.SqT6xQ-7.js.br +0 -2
  464. package/build/client/_app/immutable/entry/start.SqT6xQ-7.js.gz +0 -0
  465. package/build/client/_app/immutable/nodes/0.LR7iEcCa.js +0 -3
  466. package/build/client/_app/immutable/nodes/0.LR7iEcCa.js.br +0 -0
  467. package/build/client/_app/immutable/nodes/0.LR7iEcCa.js.gz +0 -0
  468. package/build/client/_app/immutable/nodes/1.CWSas7JK.js +0 -1
  469. package/build/client/_app/immutable/nodes/1.CWSas7JK.js.br +0 -0
  470. package/build/client/_app/immutable/nodes/1.CWSas7JK.js.gz +0 -0
  471. package/build/client/_app/immutable/nodes/10.BoxFN5Nv.js +0 -13
  472. package/build/client/_app/immutable/nodes/10.BoxFN5Nv.js.br +0 -0
  473. package/build/client/_app/immutable/nodes/10.BoxFN5Nv.js.gz +0 -0
  474. package/build/client/_app/immutable/nodes/15.BFy4oAT6.js.br +0 -0
  475. package/build/client/_app/immutable/nodes/15.BFy4oAT6.js.gz +0 -0
  476. package/build/client/_app/immutable/nodes/17.C6M3Ukek.js +0 -3
  477. package/build/client/_app/immutable/nodes/17.C6M3Ukek.js.br +0 -0
  478. package/build/client/_app/immutable/nodes/17.C6M3Ukek.js.gz +0 -0
  479. package/build/client/_app/immutable/nodes/18.C7Jynwaf.js +0 -11
  480. package/build/client/_app/immutable/nodes/18.C7Jynwaf.js.br +0 -0
  481. package/build/client/_app/immutable/nodes/18.C7Jynwaf.js.gz +0 -0
  482. package/build/client/_app/immutable/nodes/2.C9LJ_7n5.js +0 -35
  483. package/build/client/_app/immutable/nodes/2.C9LJ_7n5.js.br +0 -0
  484. package/build/client/_app/immutable/nodes/2.C9LJ_7n5.js.gz +0 -0
  485. package/build/client/_app/immutable/nodes/3.Cldr3PEw.js +0 -1
  486. package/build/client/_app/immutable/nodes/3.Cldr3PEw.js.br +0 -0
  487. package/build/client/_app/immutable/nodes/3.Cldr3PEw.js.gz +0 -0
  488. package/build/client/_app/immutable/nodes/4.C5HDYxuE.js.br +0 -0
  489. package/build/client/_app/immutable/nodes/4.C5HDYxuE.js.gz +0 -0
  490. package/build/client/_app/immutable/nodes/5.BRZRzqKl.js.br +0 -0
  491. package/build/client/_app/immutable/nodes/5.BRZRzqKl.js.gz +0 -0
  492. package/build/client/_app/immutable/nodes/6.BEjGUOuB.js +0 -1
  493. package/build/client/_app/immutable/nodes/6.BEjGUOuB.js.br +0 -0
  494. package/build/client/_app/immutable/nodes/6.BEjGUOuB.js.gz +0 -0
  495. package/build/client/_app/immutable/nodes/8.wHpoUA6X.js +0 -2
  496. package/build/client/_app/immutable/nodes/8.wHpoUA6X.js.br +0 -0
  497. package/build/client/_app/immutable/nodes/8.wHpoUA6X.js.gz +0 -0
  498. package/build/client/_app/immutable/nodes/9.CpmcUS87.js +0 -2
  499. package/build/client/_app/immutable/nodes/9.CpmcUS87.js.br +0 -0
  500. package/build/client/_app/immutable/nodes/9.CpmcUS87.js.gz +0 -0
  501. package/build/server/chunks/0-CesYJG8k.js +0 -9
  502. package/build/server/chunks/0-CesYJG8k.js.map +0 -1
  503. package/build/server/chunks/1-p4jSVKu9.js +0 -9
  504. package/build/server/chunks/10-BVCIK_-n.js +0 -9
  505. package/build/server/chunks/10-BVCIK_-n.js.map +0 -1
  506. package/build/server/chunks/15-BRw8wtLp.js +0 -9
  507. package/build/server/chunks/17-DRS7q3gb.js +0 -9
  508. package/build/server/chunks/17-DRS7q3gb.js.map +0 -1
  509. package/build/server/chunks/18-CPOL7uEZ.js +0 -9
  510. package/build/server/chunks/18-CPOL7uEZ.js.map +0 -1
  511. package/build/server/chunks/2-Cd22UmxM.js +0 -9
  512. package/build/server/chunks/2-Cd22UmxM.js.map +0 -1
  513. package/build/server/chunks/3-mcDvhjv6.js +0 -9
  514. package/build/server/chunks/3-mcDvhjv6.js.map +0 -1
  515. package/build/server/chunks/4-D0D66uQr.js +0 -9
  516. package/build/server/chunks/4-D0D66uQr.js.map +0 -1
  517. package/build/server/chunks/5-D1bI9E9O.js +0 -9
  518. package/build/server/chunks/5-D1bI9E9O.js.map +0 -1
  519. package/build/server/chunks/6-BJxJFeJN.js +0 -9
  520. package/build/server/chunks/6-BJxJFeJN.js.map +0 -1
  521. package/build/server/chunks/8-DBNRpB4j.js +0 -9
  522. package/build/server/chunks/8-DBNRpB4j.js.map +0 -1
  523. package/build/server/chunks/9-Dr21aceD.js +0 -9
  524. package/build/server/chunks/9-Dr21aceD.js.map +0 -1
  525. package/build/server/chunks/ChatStepTrace-CX2Zolmp.js.map +0 -1
  526. package/build/server/chunks/_layout.svelte-BIMexfnk.js.map +0 -1
  527. package/build/server/chunks/_layout.svelte-Blfto3jh.js +0 -1143
  528. package/build/server/chunks/_layout.svelte-Blfto3jh.js.map +0 -1
  529. package/build/server/chunks/_layout.svelte-D4EOIHJJ.js +0 -45
  530. package/build/server/chunks/_layout.svelte-D4EOIHJJ.js.map +0 -1
  531. package/build/server/chunks/_page.svelte-B1erTzoN.js +0 -61
  532. package/build/server/chunks/_page.svelte-B1erTzoN.js.map +0 -1
  533. package/build/server/chunks/_page.svelte-CY0Be19a.js.map +0 -1
  534. package/build/server/chunks/_page.svelte-CoCBnE2l.js.map +0 -1
  535. package/build/server/chunks/_page.svelte-D5S0QjlI.js.map +0 -1
  536. package/build/server/chunks/_page.svelte-DZvcjON6.js.map +0 -1
  537. package/build/server/chunks/_page.svelte-xf-0yXQM.js.map +0 -1
  538. package/build/server/chunks/_server.ts-D_eo_OAK.js +0 -139
  539. package/build/server/chunks/_server.ts-D_eo_OAK.js.map +0 -1
  540. package/build/server/chunks/error.svelte-BjIDhioc.js +0 -15
  541. package/build/server/chunks/source-selection-CcN1cgXc.js.map +0 -1
  542. package/build/server/chunks/trpc-client-D8L6vWf4.js +0 -14
  543. package/build/server/chunks/trpc-client-D8L6vWf4.js.map +0 -1
@@ -1,88 +1,5 @@
1
1
  import type * as Monaco from 'monaco-editor'
2
2
 
3
- export interface PromptDecorations {
4
- update: () => void
5
- dispose: () => void
6
- }
7
-
8
- export function createPromptDecorations(
9
- monaco: typeof Monaco,
10
- editor: Monaco.editor.IStandaloneCodeEditor
11
- ) {
12
- const collection = editor.createDecorationsCollection()
13
-
14
- function update() {
15
- const model = editor.getModel()
16
- if (!model) return
17
-
18
- const decorations: Monaco.editor.IModelDeltaDecoration[] = []
19
- const lineCount = model.getLineCount()
20
-
21
- for (let lineNumber = 1; lineNumber <= lineCount; lineNumber++) {
22
- const lineText = model.getLineContent(lineNumber)
23
-
24
- // Headings
25
- const match = /^(#+)\s/.exec(lineText)
26
- if (match) {
27
- const level = match[1].length
28
- let cls = 'prompt-heading-3'
29
-
30
- if (level === 1) {
31
- cls = 'prompt-heading-1'
32
- } else if (level === 2) {
33
- cls = 'prompt-heading-2'
34
- }
35
-
36
- decorations.push({
37
- range: new monaco.Range(lineNumber, 1, lineNumber, lineText.length + 1),
38
- options: {
39
- isWholeLine: true,
40
- inlineClassName: cls
41
- }
42
- })
43
- }
44
-
45
- // Symbols '#' and '*'
46
- for (let column = 1; column <= lineText.length; column++) {
47
- const ch = lineText[column - 1]
48
- if (ch === '#' || ch === '*') {
49
- decorations.push({
50
- range: new monaco.Range(lineNumber, column, lineNumber, column + 1),
51
- options: {
52
- inlineClassName: 'prompt-symbol'
53
- }
54
- })
55
- }
56
- }
57
-
58
- // Subnumbers
59
- const subMatch = lineText.match(/^(\s+)(\d+(?:\.\d+)+\.?)(?=[\s)]|$)/)
60
- if (subMatch) {
61
- const leading = subMatch[1]
62
- const numberText = subMatch[2]
63
-
64
- const startColumn = leading.length + 1
65
- const endColumn = startColumn + numberText.length
66
-
67
- decorations.push({
68
- range: new monaco.Range(lineNumber, startColumn, lineNumber, endColumn),
69
- options: {
70
- inlineClassName: 'prompt-subnumber'
71
- }
72
- })
73
- }
74
- }
75
-
76
- collection.set(decorations)
77
- }
78
-
79
- function dispose() {
80
- collection.clear()
81
- }
82
-
83
- return { update, dispose }
84
- }
85
-
86
3
  export const bosunDarkTheme: Monaco.editor.IStandaloneThemeData = {
87
4
  base: 'vs-dark',
88
5
  inherit: true,
@@ -110,6 +27,12 @@ export const bosunDarkTheme: Monaco.editor.IStandaloneThemeData = {
110
27
  'editor.inactiveSelectionBackground': '#4B5563A0',
111
28
  'editor.lineHighlightBackground': '#FFFFFF08',
112
29
  'editorLineNumber.background': '#1D1D1D',
30
+ 'diffEditor.insertedTextBackground': '#00B58A33',
31
+ 'diffEditor.insertedLineBackground': '#00B58A1A',
32
+ 'diffEditor.removedTextBackground': '#FF666633',
33
+ 'diffEditor.removedLineBackground': '#FF66661A',
34
+ 'diffEditor.border': '#373737',
35
+ 'diffEditor.diagonalFill': '#76767633',
113
36
 
114
37
  // Nunjucks tag highlight (DocumentHighlightProvider)
115
38
  'editor.wordHighlightBackground': '#ff480159'
@@ -0,0 +1,84 @@
1
+ import type * as Monaco from 'monaco-editor'
2
+ import { afterEach, describe, expect, it, vi } from 'vitest'
3
+ import {
4
+ EDITOR_FONT_FAMILY,
5
+ EDITOR_FONT_SIZE,
6
+ createPromptWrapController,
7
+ getEditorAppearanceOptions
8
+ } from './editor-appearance'
9
+
10
+ describe('getEditorAppearanceOptions', () => {
11
+ it('keeps prompt appearance in one preset', () => {
12
+ expect(getEditorAppearanceOptions('prompt', { bottomPadding: 56 })).toMatchObject({
13
+ theme: 'bosun-dark',
14
+ fontSize: EDITOR_FONT_SIZE,
15
+ fontFamily: EDITOR_FONT_FAMILY,
16
+ wordWrap: 'bounded',
17
+ wordWrapColumn: 120,
18
+ wrappingStrategy: 'advanced',
19
+ bracketPairColorization: { enabled: true },
20
+ padding: { top: 32, bottom: 56 }
21
+ })
22
+ })
23
+
24
+ it('keeps test-history appearance in one preset', () => {
25
+ expect(getEditorAppearanceOptions('test-history')).toMatchObject({
26
+ fontSize: EDITOR_FONT_SIZE,
27
+ fontFamily: EDITOR_FONT_FAMILY,
28
+ wordWrap: 'bounded',
29
+ wordWrapColumn: 75,
30
+ wrappingStrategy: 'advanced',
31
+ scrollbar: { vertical: 'hidden', horizontal: 'hidden' },
32
+ padding: { top: 4, bottom: 4 }
33
+ })
34
+ expect(getEditorAppearanceOptions('test-history', { bottomPadding: 56 }).padding).toEqual({
35
+ top: 4,
36
+ bottom: 56
37
+ })
38
+ })
39
+
40
+ it('preserves Monaco font defaults for generic diffs', () => {
41
+ const options = getEditorAppearanceOptions('generic')
42
+ expect(options).not.toHaveProperty('fontSize')
43
+ expect(options).not.toHaveProperty('fontFamily')
44
+ })
45
+ })
46
+
47
+ describe('createPromptWrapController', () => {
48
+ afterEach(() => vi.unstubAllGlobals())
49
+
50
+ it('updates and disposes responsive wrapping', () => {
51
+ let frame!: FrameRequestCallback
52
+ let layoutListener!: () => void
53
+ const cancelAnimationFrame = vi.fn()
54
+ vi.stubGlobal('requestAnimationFrame', (callback: FrameRequestCallback) => {
55
+ frame = callback
56
+ return 7
57
+ })
58
+ vi.stubGlobal('cancelAnimationFrame', cancelAnimationFrame)
59
+
60
+ const updateOptions = vi.fn()
61
+ const disposeLayoutListener = vi.fn()
62
+ const editor = {
63
+ getLayoutInfo: () => ({ contentWidth: 724 }),
64
+ getOption: () => ({ typicalHalfwidthCharacterWidth: 7 }),
65
+ updateOptions,
66
+ onDidLayoutChange: (listener: () => void) => {
67
+ layoutListener = listener
68
+ return { dispose: disposeLayoutListener }
69
+ }
70
+ } as unknown as Monaco.editor.IStandaloneCodeEditor
71
+ const monaco = {
72
+ editor: { EditorOption: { fontInfo: 0 } }
73
+ } as unknown as typeof Monaco
74
+
75
+ const controller = createPromptWrapController(editor, monaco)
76
+ expect(frame).toBeTypeOf('function')
77
+ frame(0)
78
+ expect(updateOptions).toHaveBeenCalledWith({ wordWrap: 'bounded', wordWrapColumn: 100 })
79
+ layoutListener()
80
+ controller.dispose()
81
+ expect(disposeLayoutListener).toHaveBeenCalledOnce()
82
+ expect(cancelAnimationFrame).toHaveBeenCalledWith(7)
83
+ })
84
+ })
@@ -0,0 +1,154 @@
1
+ import type * as Monaco from 'monaco-editor'
2
+
3
+ export type EditorAppearance = 'generic' | 'prompt' | 'test-history'
4
+
5
+ export const EDITOR_FONT_SIZE = 14
6
+ export const EDITOR_FONT_FAMILY =
7
+ 'ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"'
8
+
9
+ interface EditorAppearanceOptions {
10
+ bottomPadding?: number
11
+ }
12
+
13
+ export function getEditorAppearanceOptions(
14
+ appearance: EditorAppearance,
15
+ options: EditorAppearanceOptions = {}
16
+ ): Monaco.editor.IStandaloneEditorConstructionOptions {
17
+ const common: Monaco.editor.IStandaloneEditorConstructionOptions = {
18
+ theme: 'bosun-dark',
19
+ lineNumbers: 'off',
20
+ automaticLayout: true,
21
+ minimap: { enabled: false }
22
+ }
23
+
24
+ if (appearance === 'prompt') {
25
+ return {
26
+ ...common,
27
+ fontSize: EDITOR_FONT_SIZE,
28
+ fontFamily: EDITOR_FONT_FAMILY,
29
+ wordBasedSuggestions: 'off',
30
+ wordWrap: 'bounded',
31
+ wordWrapColumn: 120,
32
+ wrappingStrategy: 'advanced',
33
+ matchBrackets: 'never',
34
+ bracketPairColorization: { enabled: true },
35
+ guides: {
36
+ highlightActiveBracketPair: false,
37
+ bracketPairs: false,
38
+ bracketPairsHorizontal: false
39
+ },
40
+ selectionHighlight: false,
41
+ unicodeHighlight: {
42
+ ambiguousCharacters: false,
43
+ nonBasicASCII: false,
44
+ invisibleCharacters: false,
45
+ includeStrings: false,
46
+ includeComments: false
47
+ },
48
+ autoClosingQuotes: 'never',
49
+ padding: { top: 32, bottom: options.bottomPadding ?? 0 }
50
+ }
51
+ }
52
+
53
+ if (appearance === 'test-history') {
54
+ return {
55
+ ...common,
56
+ fontSize: EDITOR_FONT_SIZE,
57
+ fontFamily: EDITOR_FONT_FAMILY,
58
+ wordBasedSuggestions: 'off',
59
+ wordWrap: 'bounded',
60
+ wordWrapColumn: 75,
61
+ wrappingStrategy: 'advanced',
62
+ scrollbar: { vertical: 'hidden', horizontal: 'hidden' },
63
+ overviewRulerLanes: 0,
64
+ renderLineHighlight: 'none',
65
+ folding: false,
66
+ renderWhitespace: 'none',
67
+ padding: { top: 4, bottom: options.bottomPadding ?? 4 },
68
+ matchBrackets: 'never',
69
+ bracketPairColorization: { enabled: false },
70
+ guides: {
71
+ highlightActiveBracketPair: false,
72
+ bracketPairs: false,
73
+ bracketPairsHorizontal: false
74
+ },
75
+ occurrencesHighlight: 'off',
76
+ selectionHighlight: false,
77
+ unicodeHighlight: {
78
+ ambiguousCharacters: false,
79
+ nonBasicASCII: false,
80
+ invisibleCharacters: false,
81
+ includeStrings: false,
82
+ includeComments: false
83
+ },
84
+ autoClosingQuotes: 'never'
85
+ }
86
+ }
87
+
88
+ return {
89
+ ...common,
90
+ scrollBeyondLastLine: false,
91
+ wordWrap: 'on',
92
+ padding: { bottom: options.bottomPadding ?? 0 },
93
+ overviewRulerBorder: false,
94
+ hideCursorInOverviewRuler: true,
95
+ matchBrackets: 'never',
96
+ bracketPairColorization: { enabled: false },
97
+ guides: {
98
+ highlightActiveBracketPair: false,
99
+ bracketPairs: false,
100
+ bracketPairsHorizontal: false
101
+ },
102
+ occurrencesHighlight: 'off',
103
+ selectionHighlight: false,
104
+ renderLineHighlight: 'none'
105
+ }
106
+ }
107
+
108
+ export function createPromptWrapController(
109
+ editor: Monaco.editor.IStandaloneCodeEditor,
110
+ monaco: typeof Monaco
111
+ ): Monaco.IDisposable {
112
+ let updateFrame: number | null = null
113
+ let lastWrapColumn = 0
114
+ let disposed = false
115
+
116
+ function scheduleUpdate() {
117
+ if (disposed || updateFrame !== null) return
118
+ updateFrame = requestAnimationFrame(() => {
119
+ updateFrame = null
120
+ if (disposed) return
121
+
122
+ const layout = editor.getLayoutInfo()
123
+ const contentWidth = Number(layout?.contentWidth ?? 0)
124
+ const fontInfo = editor.getOption(monaco.editor.EditorOption.fontInfo) as any
125
+ const charWidth =
126
+ Number(fontInfo?.typicalHalfwidthCharacterWidth) ||
127
+ Number(fontInfo?.typicalFullwidthCharacterWidth) ||
128
+ 7
129
+ const wrapColumn =
130
+ Number.isFinite(contentWidth) &&
131
+ contentWidth > 0 &&
132
+ Number.isFinite(charWidth) &&
133
+ charWidth > 0
134
+ ? Math.max(20, Math.floor((contentWidth - 24) / charWidth))
135
+ : 80
136
+
137
+ if (wrapColumn === lastWrapColumn) return
138
+ lastWrapColumn = wrapColumn
139
+ editor.updateOptions({ wordWrap: 'bounded', wordWrapColumn: wrapColumn })
140
+ })
141
+ }
142
+
143
+ const layoutDisposable = editor.onDidLayoutChange(scheduleUpdate)
144
+ scheduleUpdate()
145
+
146
+ return {
147
+ dispose() {
148
+ disposed = true
149
+ layoutDisposable.dispose()
150
+ if (updateFrame !== null) cancelAnimationFrame(updateFrame)
151
+ updateFrame = null
152
+ }
153
+ }
154
+ }
@@ -0,0 +1,91 @@
1
+ import type * as Monaco from 'monaco-editor'
2
+ import { describe, expect, it, vi } from 'vitest'
3
+ import { createPromptDecorations, createTestEditorDecorations } from './editor-decorations'
4
+
5
+ class FakeRange {
6
+ constructor(
7
+ readonly startLineNumber: number,
8
+ readonly startColumn: number,
9
+ readonly endLineNumber: number,
10
+ readonly endColumn: number
11
+ ) {}
12
+ }
13
+
14
+ function createFixture(initialLines: string[]) {
15
+ let lines = initialLines
16
+ let hasModel = true
17
+ const set = vi.fn()
18
+ const clear = vi.fn()
19
+ const model = {
20
+ getLineCount: () => lines.length,
21
+ getLineContent: (lineNumber: number) => lines[lineNumber - 1],
22
+ getLineMaxColumn: (lineNumber: number) => lines[lineNumber - 1].length + 1
23
+ }
24
+ const editor = {
25
+ createDecorationsCollection: () => ({ set, clear }),
26
+ getModel: () => (hasModel ? model : null)
27
+ } as unknown as Monaco.editor.IStandaloneCodeEditor
28
+ const monaco = { Range: FakeRange } as unknown as typeof Monaco
29
+
30
+ return {
31
+ monaco,
32
+ editor,
33
+ set,
34
+ clear,
35
+ setLines: (nextLines: string[]) => (lines = nextLines),
36
+ removeModel: () => (hasModel = false)
37
+ }
38
+ }
39
+
40
+ describe('createPromptDecorations', () => {
41
+ it('styles headings, symbols, and subnumbers from either prompt editor', () => {
42
+ const fixture = createFixture(['# Title', ' 1.2) Detail', '**Important**'])
43
+ const decorations = createPromptDecorations(fixture.monaco, fixture.editor)
44
+
45
+ decorations.update()
46
+ const applied = fixture.set.mock.calls[0][0] as Monaco.editor.IModelDeltaDecoration[]
47
+ expect(applied.map((decoration) => decoration.options.inlineClassName)).toEqual(
48
+ expect.arrayContaining(['prompt-heading-1', 'prompt-symbol', 'prompt-subnumber'])
49
+ )
50
+
51
+ fixture.setLines(['## Changed'])
52
+ decorations.update()
53
+ const updated = fixture.set.mock.calls[1][0] as Monaco.editor.IModelDeltaDecoration[]
54
+ expect(updated.map((decoration) => decoration.options.inlineClassName)).toContain(
55
+ 'prompt-heading-2'
56
+ )
57
+
58
+ decorations.dispose()
59
+ expect(fixture.clear).toHaveBeenCalledOnce()
60
+ })
61
+ })
62
+
63
+ describe('createTestEditorDecorations', () => {
64
+ it('styles expected output and nested tags from either history editor', () => {
65
+ const fixture = createFixture(['User: hello', 'Agent: <answer>yes</answer>'])
66
+ const decorations = createTestEditorDecorations(fixture.monaco, fixture.editor)
67
+
68
+ decorations.update([{ startLine: 2, endLine: 2, className: 'test-expected-output' }])
69
+ const applied = fixture.set.mock.calls[0][0] as Monaco.editor.IModelDeltaDecoration[]
70
+ expect(applied.map((decoration) => decoration.options.inlineClassName)).toEqual([
71
+ 'test-expected-output',
72
+ 'test-expected-output-tag',
73
+ 'test-expected-output-tag'
74
+ ])
75
+ })
76
+
77
+ it('replaces stale ranges and clears when the model is removed', () => {
78
+ const fixture = createFixture(['Agent: old'])
79
+ const decorations = createTestEditorDecorations(fixture.monaco, fixture.editor)
80
+
81
+ decorations.update([{ startLine: 1, endLine: 1, className: 'test-expected-output' }])
82
+ fixture.setLines(['User: new', 'Agent: new'])
83
+ decorations.update([{ startLine: 2, endLine: 2, className: 'test-expected-output' }])
84
+ const updated = fixture.set.mock.calls[1][0] as Monaco.editor.IModelDeltaDecoration[]
85
+ expect((updated[0].range as FakeRange).startLineNumber).toBe(2)
86
+
87
+ fixture.removeModel()
88
+ decorations.update([])
89
+ expect(fixture.clear).toHaveBeenCalledOnce()
90
+ })
91
+ })
@@ -0,0 +1,133 @@
1
+ import type * as Monaco from 'monaco-editor'
2
+
3
+ export interface EditorHighlight {
4
+ startLine: number
5
+ endLine: number
6
+ className: string
7
+ }
8
+
9
+ export interface PromptDecorations {
10
+ update: () => void
11
+ dispose: () => void
12
+ }
13
+
14
+ export interface TestEditorDecorations {
15
+ update: (highlights: readonly EditorHighlight[]) => void
16
+ dispose: () => void
17
+ }
18
+
19
+ export function createPromptDecorations(
20
+ monaco: typeof Monaco,
21
+ editor: Monaco.editor.IStandaloneCodeEditor
22
+ ): PromptDecorations {
23
+ const collection = editor.createDecorationsCollection()
24
+
25
+ function update() {
26
+ const model = editor.getModel()
27
+ if (!model) {
28
+ collection.clear()
29
+ return
30
+ }
31
+
32
+ const decorations: Monaco.editor.IModelDeltaDecoration[] = []
33
+ const lineCount = model.getLineCount()
34
+
35
+ for (let lineNumber = 1; lineNumber <= lineCount; lineNumber++) {
36
+ const lineText = model.getLineContent(lineNumber)
37
+ const heading = /^(#+)\s/.exec(lineText)
38
+ if (heading) {
39
+ const level = heading[1].length
40
+ const className =
41
+ level === 1 ? 'prompt-heading-1' : level === 2 ? 'prompt-heading-2' : 'prompt-heading-3'
42
+ decorations.push({
43
+ range: new monaco.Range(lineNumber, 1, lineNumber, lineText.length + 1),
44
+ options: { isWholeLine: true, inlineClassName: className }
45
+ })
46
+ }
47
+
48
+ for (let column = 1; column <= lineText.length; column++) {
49
+ const character = lineText[column - 1]
50
+ if (character !== '#' && character !== '*') continue
51
+ decorations.push({
52
+ range: new monaco.Range(lineNumber, column, lineNumber, column + 1),
53
+ options: { inlineClassName: 'prompt-symbol' }
54
+ })
55
+ }
56
+
57
+ const subnumber = lineText.match(/^(\s+)(\d+(?:\.\d+)+\.?)(?=[\s)]|$)/)
58
+ if (!subnumber) continue
59
+ const startColumn = subnumber[1].length + 1
60
+ decorations.push({
61
+ range: new monaco.Range(
62
+ lineNumber,
63
+ startColumn,
64
+ lineNumber,
65
+ startColumn + subnumber[2].length
66
+ ),
67
+ options: { inlineClassName: 'prompt-subnumber' }
68
+ })
69
+ }
70
+
71
+ collection.set(decorations)
72
+ }
73
+
74
+ return {
75
+ update,
76
+ dispose: () => collection.clear()
77
+ }
78
+ }
79
+
80
+ export function createTestEditorDecorations(
81
+ monaco: typeof Monaco,
82
+ editor: Monaco.editor.IStandaloneCodeEditor
83
+ ): TestEditorDecorations {
84
+ const collection = editor.createDecorationsCollection()
85
+
86
+ function update(highlights: readonly EditorHighlight[]) {
87
+ const model = editor.getModel()
88
+ if (!model) {
89
+ collection.clear()
90
+ return
91
+ }
92
+
93
+ const decorations: Monaco.editor.IModelDeltaDecoration[] = []
94
+ const lineCount = model.getLineCount()
95
+ for (const highlight of highlights) {
96
+ const startLine = Math.max(1, Math.min(lineCount, Number(highlight.startLine) || 1))
97
+ const endLine = Math.max(
98
+ startLine,
99
+ Math.min(lineCount, Number(highlight.endLine) || startLine)
100
+ )
101
+ decorations.push({
102
+ range: new monaco.Range(startLine, 1, endLine, model.getLineMaxColumn(endLine)),
103
+ options: { inlineClassName: highlight.className }
104
+ })
105
+
106
+ if (highlight.className !== 'test-expected-output') continue
107
+ for (let lineNumber = startLine; lineNumber <= endLine; lineNumber++) {
108
+ const lineText = model.getLineContent(lineNumber)
109
+ const tagPattern = /<\/?[A-Za-z][^>]*?>/g
110
+ let match: RegExpExecArray | null
111
+ while ((match = tagPattern.exec(lineText))) {
112
+ const startColumn = match.index + 1
113
+ const endColumn = Math.min(
114
+ model.getLineMaxColumn(lineNumber),
115
+ startColumn + match[0].length
116
+ )
117
+ if (endColumn <= startColumn) continue
118
+ decorations.push({
119
+ range: new monaco.Range(lineNumber, startColumn, lineNumber, endColumn),
120
+ options: { inlineClassName: 'test-expected-output-tag' }
121
+ })
122
+ }
123
+ }
124
+ }
125
+
126
+ collection.set(decorations)
127
+ }
128
+
129
+ return {
130
+ update,
131
+ dispose: () => collection.clear()
132
+ }
133
+ }
@@ -0,0 +1,74 @@
1
+ export type AssertionOption = { value: string; label: string }
2
+
3
+ const baseAssertionTypes: AssertionOption[] = [
4
+ { value: 'llm-rubric', label: 'LLM' },
5
+ { value: 'answer-relevance', label: 'Answer Relevance (LLM)' },
6
+ { value: 'context-faithfulness', label: 'Context Faithfulness (LLM)' },
7
+ { value: 'context-recall', label: 'Context Recall (LLM)' },
8
+ { value: 'context-relevance', label: 'Context Relevance (LLM)' },
9
+ { value: 'model-graded-closedqa', label: 'Model-Graded Closed QA' },
10
+ { value: 'model-graded-factuality', label: 'Model-Graded Factuality' },
11
+ { value: 'moderation', label: 'Moderation' },
12
+ { value: 'classifier', label: 'Classifier' },
13
+ { value: 'g-eval', label: 'G-Eval' },
14
+ { value: 'factuality', label: 'Factuality' },
15
+ { value: 'conversation-relevance', label: 'Conversation Relevance' },
16
+
17
+ { value: 'equals', label: 'Equals' },
18
+ { value: 'contains', label: 'Contains' },
19
+ { value: 'icontains', label: 'Contains (case-insensitive)' },
20
+ { value: 'contains-all', label: 'Contains All' },
21
+ { value: 'contains-any', label: 'Contains Any' },
22
+ { value: 'icontains-all', label: 'Contains All (iCase)' },
23
+ { value: 'icontains-any', label: 'Contains Any (iCase)' },
24
+ { value: 'starts-with', label: 'Starts With' },
25
+ { value: 'regex', label: 'Regex' },
26
+ { value: 'levenshtein', label: 'Levenshtein Distance' },
27
+ { value: 'is-refusal', label: 'Is Refusal' },
28
+
29
+ { value: 'is-html', label: 'Is HTML' },
30
+ { value: 'contains-html', label: 'Contains HTML' },
31
+ { value: 'is-json', label: 'Is JSON' },
32
+ { value: 'contains-json', label: 'Contains JSON' },
33
+ { value: 'is-xml', label: 'Is XML' },
34
+ { value: 'contains-xml', label: 'Contains XML' },
35
+ { value: 'is-sql', label: 'Is SQL' },
36
+ { value: 'contains-sql', label: 'Contains SQL' },
37
+
38
+ { value: 'similar', label: 'Semantic Similarity' },
39
+ { value: 'rouge-n', label: 'ROUGE-N' },
40
+ { value: 'bleu', label: 'BLEU' },
41
+ { value: 'gleu', label: 'GLEU' },
42
+ { value: 'meteor', label: 'METEOR' },
43
+ { value: 'perplexity', label: 'Perplexity' },
44
+ { value: 'perplexity-score', label: 'Perplexity Score' },
45
+
46
+ { value: 'latency', label: 'Latency' },
47
+ { value: 'cost', label: 'Cost' },
48
+ { value: 'finish-reason', label: 'Finish Reason' },
49
+ { value: 'trace-error-spans', label: 'Trace Error Spans' },
50
+ { value: 'trace-span-count', label: 'Trace Span Count' },
51
+ { value: 'trace-span-duration', label: 'Trace Span Duration' },
52
+
53
+ { value: 'is-valid-function-call', label: 'Is Valid Function Call' },
54
+ { value: 'is-valid-openai-function-call', label: 'Is Valid OpenAI Function Call' },
55
+ { value: 'is-valid-openai-tools-call', label: 'Is Valid OpenAI Tools Call' },
56
+ { value: 'guardrails', label: 'Guardrails' },
57
+
58
+ { value: 'javascript', label: 'JavaScript (custom)' },
59
+ { value: 'python', label: 'Python (custom)' },
60
+ { value: 'webhook', label: 'Webhook (custom)' },
61
+ { value: 'pi', label: 'Pi Scorer' }
62
+ ]
63
+
64
+ export const assertionTypes: AssertionOption[] = [
65
+ ...baseAssertionTypes,
66
+ ...baseAssertionTypes.map((option) => ({
67
+ value: `not-${option.value}`,
68
+ label: `Not ${option.label}`
69
+ }))
70
+ ]
71
+
72
+ export function assertionLabel(value: string): string {
73
+ return assertionTypes.find((option) => option.value === value)?.label ?? value
74
+ }
@@ -1,16 +1,30 @@
1
1
  import { env } from '$env/dynamic/public'
2
2
  import { createTRPCClient, httpLink } from '@trpc/client'
3
3
  import type { AppRouter } from '../backend/server'
4
+ import { repositoryAdmissionLink, repositoryClientAdmission } from './git-mode/client-admission'
4
5
 
5
- const trpcUrl =
6
+ export const trpcUrl =
6
7
  env.PUBLIC_TRPC_URL ??
7
8
  `http://${env.PUBLIC_TRPC_HOSTNAME ?? 'localhost'}:${env.PUBLIC_TRPC_PORT ?? '2022'}`
8
9
 
9
10
  // ref: https://github.com/trpc/trpc/blob/main/examples/standalone-server/src/client.ts
10
11
  export const trpc = createTRPCClient<AppRouter>({
11
12
  links: [
13
+ repositoryAdmissionLink<AppRouter>(repositoryClientAdmission),
12
14
  httpLink({
13
15
  url: trpcUrl
14
16
  })
15
17
  ]
16
18
  })
19
+
20
+ export function unregisterGitModeTab(tabId: string): Promise<void> {
21
+ if (!tabId || typeof window === 'undefined') return Promise.resolve()
22
+ return fetch(`${trpcUrl}/gitMode.unregister`, {
23
+ method: 'POST',
24
+ headers: { 'content-type': 'application/json' },
25
+ body: JSON.stringify({ tabId }),
26
+ keepalive: true
27
+ })
28
+ .then(() => undefined)
29
+ .catch(() => undefined)
30
+ }