@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
package/README.md CHANGED
@@ -26,6 +26,30 @@ In your Recombine Agent folder
26
26
 
27
27
  Bosun automatically chooses free local ports when the default ports are already in use, so you can run it from multiple agent repos at the same time.
28
28
 
29
+ ## Git mode (optional)
30
+
31
+ Git mode keeps a personal branch up to date with a release branch. It adds **Discard**, **Save**, and **Prepare for release** controls. It can pull, merge, commit, stash, and push project changes.
32
+
33
+ Add these settings to the project `.env` where you run `bosun`:
34
+
35
+ ```dotenv
36
+ BOSUN_GIT_MODE=true
37
+ BOSUN_CURRENT_BRANCH=next-release
38
+ BOSUN_PERSONAL_BRANCH=your-name/next-release
39
+ # Optional; the default is 10.
40
+ BOSUN_GIT_ACTIVATION_IDLE_MINUTES=10
41
+ ```
42
+
43
+ Before you start Bosun:
44
+
45
+ - Use macOS, Linux, or WSL. Native Windows is not supported.
46
+ - Run `bosun` from the root of the primary Git checkout, with the personal branch checked out.
47
+ - Create both branches locally. They must track different branches on the same remote. The remote must use one URL for both fetch and push.
48
+ - Do not use a linked worktree or a repository with submodules. The release branch must not be open in another worktree.
49
+ - Finish or abort any merge or rebase.
50
+
51
+ The first Bosun page that you open after startup refreshes the repository. **Save** commits all project changes to the personal branch and pushes them. **Discard** moves tracked and non-ignored untracked changes to the Git stash. **Prepare for release** publishes the result to both upstream branches in one atomic push. If pulled files change, Bosun installs locked dependencies without project scripts, restarts, and reloads its pages.
52
+
29
53
  ## Roleplay context and variants
30
54
 
31
55
  Bosun keeps roleplay conversation state separately from agent context:
package/bin/bosun.js CHANGED
@@ -6,6 +6,14 @@ import { existsSync, readFileSync } from 'fs'
6
6
  import { createServer } from 'net'
7
7
  import { resolve, dirname } from 'path'
8
8
  import { fileURLToPath } from 'url'
9
+ import {
10
+ cleanupGitModeRuntime,
11
+ createBosunChildEnvironment,
12
+ GIT_ACTIVATION_RESTART_EXIT_CODE,
13
+ prepareGitModeRuntime,
14
+ registerGitModeChildProcess,
15
+ unregisterGitModeChildProcess
16
+ } from './git-mode.js'
9
17
 
10
18
  const __filename = fileURLToPath(import.meta.url)
11
19
  const __dirname = dirname(__filename)
@@ -29,6 +37,11 @@ let backendProcess = null
29
37
  let frontendProcess = null
30
38
 
31
39
  let isShuttingDown = false
40
+ /** @type {Promise<void> | null} */
41
+ let shutdownPromise = null
42
+
43
+ /** @type {WeakMap<ChildProcess, Promise<{ code: number | null, signal: NodeJS.Signals | null }>>} */
44
+ const childExitPromises = new WeakMap()
32
45
 
33
46
  const BACKEND_RESTART_EXIT_CODE = 75
34
47
 
@@ -36,10 +49,13 @@ const envPath = resolve(process.cwd(), '.env')
36
49
  const envConfig = existsSync(envPath) ? dotenv.parse(readFileSync(envPath)) : {}
37
50
  const baseEnv = { ...process.env, ...envConfig }
38
51
 
52
+ /** @type {import('./git-mode.js').GitModeRuntime | null} */
53
+ let gitModeRuntime = null
54
+
39
55
  /** @type {{ frontend: number, ws: number, trpc: number } | null} */
40
56
  let ports = null
41
57
 
42
- main()
58
+ void main()
43
59
 
44
60
  /* ========= Implementation =========== */
45
61
 
@@ -47,6 +63,7 @@ async function main() {
47
63
  // Initial start
48
64
  try {
49
65
  checkBosunLibVersionMatch()
66
+ gitModeRuntime = prepareGitModeRuntime({ cwd: process.cwd(), projectEnv: envConfig })
50
67
  ports = await selectPorts()
51
68
 
52
69
  // Start backend
@@ -63,25 +80,31 @@ async function main() {
63
80
  console.log(`WebSocket: ws://localhost:${ports.ws}`)
64
81
  console.log(`tRPC: http://localhost:${ports.trpc}`)
65
82
  } catch (error) {
66
- console.error('❌ Error:', String(error))
67
- process.exit(1)
83
+ console.error(
84
+ '❌ Bosun could not start:',
85
+ error instanceof Error ? error.message : String(error)
86
+ )
87
+ await shutdown(1)
68
88
  }
69
89
  }
70
90
 
71
91
  function startBackend() {
72
92
  if (!ports) throw new Error('Ports were not selected before starting the backend.')
73
93
 
74
- const tsxBin = process.platform === 'win32' ? 'tsx.cmd' : 'tsx'
75
- const tsxPath = resolve(rootDir, 'node_modules', '.bin', tsxBin)
76
94
  const serverPath = resolve(rootDir, 'src', 'backend', 'server.ts')
77
- const command = process.platform === 'win32' ? tsxPath : process.execPath
78
- const commandArgs = process.platform === 'win32' ? [serverPath] : [tsxPath, serverPath]
79
-
80
- const child = spawn(command, commandArgs, {
95
+ // The tsx CLI launches the actual TypeScript program in a grandchild. Run its loader in this
96
+ // child instead so SIGTERM reaches the server that owns the write/command drains.
97
+ const tsxLoaderUrl = import.meta.resolve('tsx')
98
+ const childEnv = createBosunChildEnvironment(
99
+ baseEnv,
100
+ gitModeRuntime,
101
+ `http://localhost:${ports.frontend}`
102
+ )
103
+ const child = spawn(process.execPath, ['--import', tsxLoaderUrl, serverPath], {
81
104
  cwd: process.cwd(),
82
105
  stdio: 'inherit',
83
106
  env: {
84
- ...baseEnv,
107
+ ...childEnv,
85
108
  BOSUN_WS_PORT: String(ports.ws),
86
109
  BOSUN_TRPC_PORT: String(ports.trpc),
87
110
  PUBLIC_WS_HOST: `ws://localhost:${ports.ws}`,
@@ -90,8 +113,9 @@ function startBackend() {
90
113
  PUBLIC_TRPC_PORT: String(ports.trpc),
91
114
  BOSUN_NPX_RUN: 'true'
92
115
  },
93
- shell: process.platform === 'win32'
116
+ shell: false
94
117
  })
118
+ registerChildOrStop(child, 'backend')
95
119
  watchChild(child, 'backend')
96
120
  return child
97
121
  }
@@ -101,12 +125,17 @@ function startFrontend() {
101
125
 
102
126
  const frontPath = resolve(rootDir, 'build', 'index.js')
103
127
  const bodySizeLimit = baseEnv.BODY_SIZE_LIMIT || 'Infinity'
128
+ const childEnv = createBosunChildEnvironment(
129
+ baseEnv,
130
+ gitModeRuntime,
131
+ `http://localhost:${ports.frontend}`
132
+ )
104
133
 
105
134
  const child = spawn(process.execPath, [frontPath], {
106
135
  cwd: process.cwd(),
107
136
  stdio: 'inherit',
108
137
  env: {
109
- ...baseEnv,
138
+ ...childEnv,
110
139
  HOST: 'localhost',
111
140
  PORT: String(ports.frontend),
112
141
  PUBLIC_WS_HOST: `ws://localhost:${ports.ws}`,
@@ -118,8 +147,9 @@ function startFrontend() {
118
147
  // Latency recordings are uploaded as WAV files and can be large.
119
148
  BODY_SIZE_LIMIT: bodySizeLimit
120
149
  },
121
- shell: process.platform === 'win32'
150
+ shell: false
122
151
  })
152
+ registerChildOrStop(child, 'frontend')
123
153
  watchChild(child, 'frontend')
124
154
  return child
125
155
  }
@@ -253,40 +283,143 @@ function isUnsupportedIpv6Error(error) {
253
283
  * @param {string} name
254
284
  */
255
285
  function watchChild(child, name) {
286
+ /** @type {(outcome: { code: number | null, signal: NodeJS.Signals | null }) => void} */
287
+ let resolveExit = () => {}
288
+ const exitPromise = new Promise((resolvePromise) => {
289
+ resolveExit = resolvePromise
290
+ })
291
+ childExitPromises.set(child, exitPromise)
292
+
256
293
  child.on('error', (error) => {
257
294
  if (isShuttingDown) return
258
295
  console.error(`❌ Bosun ${name} failed to start:`, error.message)
259
- shutdown(1)
296
+ void shutdown(1)
260
297
  })
261
298
 
262
- child.on('exit', (code, signal) => {
299
+ child.on('close', (code, signal) => {
300
+ try {
301
+ unregisterGitModeChildProcess(gitModeRuntime, child.pid)
302
+ } catch (error) {
303
+ console.error(`❌ Bosun could not update ${name} process state:`, error)
304
+ }
305
+ resolveExit({ code, signal })
263
306
  if (isShuttingDown) return
264
307
  if (name === 'backend' && code === BACKEND_RESTART_EXIT_CODE && !signal) {
265
308
  console.log('🔄 Bosun backend restarting to load project changes')
266
309
  backendProcess = startBackend()
267
310
  return
268
311
  }
312
+ if (name === 'backend' && code === GIT_ACTIVATION_RESTART_EXIT_CODE && !signal) {
313
+ console.log('🔄 Bosun backend restarting after Git refresh')
314
+ backendProcess = startBackend()
315
+ return
316
+ }
269
317
 
270
318
  const reason = signal ? `signal ${signal}` : `exit code ${code ?? 1}`
271
319
  console.error(`❌ Bosun ${name} stopped unexpectedly (${reason}).`)
272
- shutdown(code ?? 1)
320
+ void shutdown(code ?? 1)
273
321
  })
274
322
  }
275
323
 
324
+ /** @param {ChildProcess} child @param {string} name */
325
+ function registerChildOrStop(child, name) {
326
+ try {
327
+ registerGitModeChildProcess(gitModeRuntime, child.pid, name)
328
+ } catch (error) {
329
+ try {
330
+ child.kill('SIGKILL')
331
+ } catch {}
332
+ throw error
333
+ }
334
+ }
335
+
276
336
  // Handle cleanup
277
- process.on('SIGINT', () => shutdown(0))
278
- process.on('SIGTERM', () => shutdown(0))
337
+ process.on('SIGINT', () => void shutdown(0))
338
+ process.on('SIGTERM', () => void shutdown(0))
279
339
 
280
340
  /**
281
341
  * @param {number} code
282
342
  */
283
343
  function shutdown(code) {
344
+ if (shutdownPromise) return shutdownPromise
284
345
  isShuttingDown = true
285
- if (backendProcess) backendProcess.kill()
286
- if (frontendProcess) frontendProcess.kill()
346
+ shutdownPromise = performShutdown(code)
347
+ return shutdownPromise
348
+ }
349
+
350
+ /** @param {number} code */
351
+ async function performShutdown(code) {
352
+ const backendAtShutdown = backendProcess
353
+ const frontendAtShutdown = frontendProcess
354
+ // The backend first closes the cross-process write gate and drains any frontend file operation
355
+ // admitted before that lock. Keep the frontend alive for that drain, then stop it.
356
+ const backendStopped = await stopChild(backendAtShutdown, 'backend')
357
+ const frontendStopped = await stopChild(frontendAtShutdown, 'frontend')
358
+ const childrenStopped = backendStopped && frontendStopped
359
+
360
+ if (gitModeRuntime) {
361
+ if (childrenStopped) {
362
+ try {
363
+ cleanupGitModeRuntime(gitModeRuntime)
364
+ } catch (error) {
365
+ code = 1
366
+ console.error(
367
+ '❌ Bosun retained the repository lease because shutdown cleanup could not be verified:',
368
+ error instanceof Error ? error.message : String(error)
369
+ )
370
+ }
371
+ } else {
372
+ code = 1
373
+ console.error(
374
+ '❌ Bosun could not confirm that all child processes stopped. Restart Bosun after they exit.'
375
+ )
376
+ }
377
+ }
378
+
287
379
  process.exit(code)
288
380
  }
289
381
 
382
+ /**
383
+ * @param {ChildProcess | null} child
384
+ * @param {string} name
385
+ * @returns {Promise<boolean>}
386
+ */
387
+ async function stopChild(child, name) {
388
+ if (!child) return true
389
+ const exit = childExitPromises.get(child)
390
+ if (!exit) {
391
+ return child.exitCode !== null || child.signalCode !== null
392
+ }
393
+
394
+ if (child.exitCode === null && child.signalCode === null) {
395
+ try {
396
+ child.kill('SIGTERM')
397
+ } catch (error) {
398
+ console.error(`❌ Bosun could not ask the ${name} process to stop:`, error)
399
+ }
400
+ }
401
+
402
+ const gracefulOutcome = await settleWithin(exit, 12_000)
403
+ if (gracefulOutcome) return true
404
+
405
+ console.error(`❌ Bosun ${name} did not stop gracefully; forcing it to exit.`)
406
+ try {
407
+ child.kill('SIGKILL')
408
+ } catch (error) {
409
+ console.error(`❌ Bosun could not force the ${name} process to stop:`, error)
410
+ }
411
+ const forcedOutcome = await settleWithin(exit, 3_000)
412
+ return forcedOutcome !== null
413
+ }
414
+
415
+ /** @template T @param {Promise<T>} promise @param {number} timeoutMs */
416
+ function settleWithin(promise, timeoutMs) {
417
+ return Promise.race([
418
+ promise.then((value) => ({ settled: true, value })),
419
+ sleep(timeoutMs).then(() => ({ settled: false, value: null }))
420
+ ]).then((result) => (result.settled ? result.value : null))
421
+ }
422
+
290
423
  function isLinked() {
291
424
  return !__filename.includes('node_modules/@recombine-ai/bosun')
292
425
  }