@recombine-ai/bosun 0.10.1 → 0.11.2

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 (423) hide show
  1. package/README.md +12 -0
  2. package/bin/bosun.js +3 -44
  3. package/build/client/_app/immutable/assets/0.CH-WU4JN.css +1 -0
  4. package/build/client/_app/immutable/assets/0.CH-WU4JN.css.br +0 -0
  5. package/build/client/_app/immutable/assets/0.CH-WU4JN.css.gz +0 -0
  6. package/build/client/_app/immutable/assets/{10.BX46PfEJ.css → 10.DIVePEYf.css} +1 -1
  7. package/build/client/_app/immutable/assets/10.DIVePEYf.css.br +0 -0
  8. package/build/client/_app/immutable/assets/10.DIVePEYf.css.gz +0 -0
  9. package/build/client/_app/immutable/chunks/{Dp760K13.js → 07xNIa59.js} +2 -2
  10. package/build/client/_app/immutable/chunks/07xNIa59.js.br +0 -0
  11. package/build/client/_app/immutable/chunks/07xNIa59.js.gz +0 -0
  12. package/build/client/_app/immutable/chunks/BDl2QuyN.js +1 -0
  13. package/build/client/_app/immutable/chunks/BDl2QuyN.js.br +0 -0
  14. package/build/client/_app/immutable/chunks/BDl2QuyN.js.gz +0 -0
  15. package/build/client/_app/immutable/chunks/{CqxCTxvJ.js → BI42X8h_.js} +1 -1
  16. package/build/client/_app/immutable/chunks/BI42X8h_.js.br +0 -0
  17. package/build/client/_app/immutable/chunks/BI42X8h_.js.gz +0 -0
  18. package/build/client/_app/immutable/chunks/BJTwdUYr.js +1 -0
  19. package/build/client/_app/immutable/chunks/BJTwdUYr.js.br +0 -0
  20. package/build/client/_app/immutable/chunks/BJTwdUYr.js.gz +0 -0
  21. package/build/client/_app/immutable/chunks/BLu86SbA.js +1 -0
  22. package/build/client/_app/immutable/chunks/BLu86SbA.js.br +0 -0
  23. package/build/client/_app/immutable/chunks/BLu86SbA.js.gz +0 -0
  24. package/build/client/_app/immutable/chunks/BNifnXkO.js +1 -0
  25. package/build/client/_app/immutable/chunks/BNifnXkO.js.br +2 -0
  26. package/build/client/_app/immutable/chunks/BNifnXkO.js.gz +0 -0
  27. package/build/client/_app/immutable/chunks/{BM0jKynj.js → BPNEONy5.js} +1 -1
  28. package/build/client/_app/immutable/chunks/BPNEONy5.js.br +0 -0
  29. package/build/client/_app/immutable/chunks/BPNEONy5.js.gz +0 -0
  30. package/build/client/_app/immutable/chunks/B_K7D6rX.js +2 -0
  31. package/build/client/_app/immutable/chunks/B_K7D6rX.js.br +0 -0
  32. package/build/client/_app/immutable/chunks/B_K7D6rX.js.gz +0 -0
  33. package/build/client/_app/immutable/chunks/Bj8jfBTi.js +1 -0
  34. package/build/client/_app/immutable/chunks/Bj8jfBTi.js.br +0 -0
  35. package/build/client/_app/immutable/chunks/Bj8jfBTi.js.gz +0 -0
  36. package/build/client/_app/immutable/chunks/BoPSJr4b.js +1 -0
  37. package/build/client/_app/immutable/chunks/BoPSJr4b.js.br +0 -0
  38. package/build/client/_app/immutable/chunks/BoPSJr4b.js.gz +0 -0
  39. package/build/client/_app/immutable/chunks/BsDZe4N6.js +1 -0
  40. package/build/client/_app/immutable/chunks/BsDZe4N6.js.br +0 -0
  41. package/build/client/_app/immutable/chunks/BsDZe4N6.js.gz +0 -0
  42. package/build/client/_app/immutable/chunks/{CXo2BVs0.js → Buo-57fF.js} +1 -1
  43. package/build/client/_app/immutable/chunks/Buo-57fF.js.br +0 -0
  44. package/build/client/_app/immutable/chunks/Buo-57fF.js.gz +0 -0
  45. package/build/client/_app/immutable/chunks/{C-whEtKd.js → C39ai1md.js} +1 -1
  46. package/build/client/_app/immutable/chunks/C39ai1md.js.br +0 -0
  47. package/build/client/_app/immutable/chunks/C39ai1md.js.gz +0 -0
  48. package/build/client/_app/immutable/chunks/C7he4XPB.js +1 -0
  49. package/build/client/_app/immutable/chunks/C7he4XPB.js.br +0 -0
  50. package/build/client/_app/immutable/chunks/C7he4XPB.js.gz +0 -0
  51. package/build/client/_app/immutable/chunks/{DYhTBLDc.js → CAjPRvNs.js} +2 -2
  52. package/build/client/_app/immutable/chunks/CAjPRvNs.js.br +0 -0
  53. package/build/client/_app/immutable/chunks/CAjPRvNs.js.gz +0 -0
  54. package/build/client/_app/immutable/chunks/CJYOmGlC.js +1 -0
  55. package/build/client/_app/immutable/chunks/CJYOmGlC.js.br +0 -0
  56. package/build/client/_app/immutable/chunks/CJYOmGlC.js.gz +0 -0
  57. package/build/client/_app/immutable/chunks/{CNLU4B3p.js → CMQRtcOV.js} +1 -1
  58. package/build/client/_app/immutable/chunks/CMQRtcOV.js.br +0 -0
  59. package/build/client/_app/immutable/chunks/CMQRtcOV.js.gz +0 -0
  60. package/build/client/_app/immutable/chunks/{HJHYLHDn.js → CPXdAKdv.js} +1 -1
  61. package/build/client/_app/immutable/chunks/CPXdAKdv.js.br +0 -0
  62. package/build/client/_app/immutable/chunks/CPXdAKdv.js.gz +0 -0
  63. package/build/client/_app/immutable/chunks/CVlsAO8k.js +11 -0
  64. package/build/client/_app/immutable/chunks/CVlsAO8k.js.br +0 -0
  65. package/build/client/_app/immutable/chunks/CVlsAO8k.js.gz +0 -0
  66. package/build/client/_app/immutable/chunks/{DNLcpWO_.js → CX0Ekq8t.js} +1 -1
  67. package/build/client/_app/immutable/chunks/CX0Ekq8t.js.br +0 -0
  68. package/build/client/_app/immutable/chunks/CX0Ekq8t.js.gz +0 -0
  69. package/build/client/_app/immutable/chunks/Ca197UDq.js +1 -0
  70. package/build/client/_app/immutable/chunks/Ca197UDq.js.br +0 -0
  71. package/build/client/_app/immutable/chunks/Ca197UDq.js.gz +0 -0
  72. package/build/client/_app/immutable/chunks/CaHl3dME.js +1 -0
  73. package/build/client/_app/immutable/chunks/CaHl3dME.js.br +0 -0
  74. package/build/client/_app/immutable/chunks/CaHl3dME.js.gz +0 -0
  75. package/build/client/_app/immutable/chunks/Cql_e8Of.js +1 -0
  76. package/build/client/_app/immutable/chunks/Cql_e8Of.js.br +2 -0
  77. package/build/client/_app/immutable/chunks/Cql_e8Of.js.gz +0 -0
  78. package/build/client/_app/immutable/chunks/{Dv8m1cTI.js → CxLomzuE.js} +1 -1
  79. package/build/client/_app/immutable/chunks/CxLomzuE.js.br +0 -0
  80. package/build/client/_app/immutable/chunks/{Dv8m1cTI.js.gz → CxLomzuE.js.gz} +0 -0
  81. package/build/client/_app/immutable/chunks/Cyai3SOj.js +1 -0
  82. package/build/client/_app/immutable/chunks/Cyai3SOj.js.br +0 -0
  83. package/build/client/_app/immutable/chunks/Cyai3SOj.js.gz +0 -0
  84. package/build/client/_app/immutable/chunks/{DTXUDKH5.js → CyvQWZoe.js} +4 -4
  85. package/build/client/_app/immutable/chunks/CyvQWZoe.js.br +0 -0
  86. package/build/client/_app/immutable/chunks/CyvQWZoe.js.gz +0 -0
  87. package/build/client/_app/immutable/chunks/CzXNWL4m.js +1 -0
  88. package/build/client/_app/immutable/chunks/CzXNWL4m.js.br +1 -0
  89. package/build/client/_app/immutable/chunks/CzXNWL4m.js.gz +0 -0
  90. package/build/client/_app/immutable/chunks/D-B5X35l.js +1 -0
  91. package/build/client/_app/immutable/chunks/D-B5X35l.js.br +0 -0
  92. package/build/client/_app/immutable/chunks/D-B5X35l.js.gz +0 -0
  93. package/build/client/_app/immutable/chunks/DJriQKD9.js +2 -0
  94. package/build/client/_app/immutable/chunks/DJriQKD9.js.br +0 -0
  95. package/build/client/_app/immutable/chunks/DJriQKD9.js.gz +0 -0
  96. package/build/client/_app/immutable/chunks/DXUXXCDA.js +1 -0
  97. package/build/client/_app/immutable/chunks/DXUXXCDA.js.br +0 -0
  98. package/build/client/_app/immutable/chunks/DXUXXCDA.js.gz +0 -0
  99. package/build/client/_app/immutable/chunks/{CZLNSMhF.js → Dslf9OwW.js} +10 -10
  100. package/build/client/_app/immutable/chunks/Dslf9OwW.js.br +0 -0
  101. package/build/client/_app/immutable/chunks/Dslf9OwW.js.gz +0 -0
  102. package/build/client/_app/immutable/chunks/QpaC6J6s.js +1 -0
  103. package/build/client/_app/immutable/chunks/QpaC6J6s.js.br +0 -0
  104. package/build/client/_app/immutable/chunks/QpaC6J6s.js.gz +0 -0
  105. package/build/client/_app/immutable/chunks/{HXxIsSOO.js → iAhzu4tv.js} +1 -1
  106. package/build/client/_app/immutable/chunks/iAhzu4tv.js.br +0 -0
  107. package/build/client/_app/immutable/chunks/iAhzu4tv.js.gz +0 -0
  108. package/build/client/_app/immutable/chunks/i_5fJYKS.js +3 -0
  109. package/build/client/_app/immutable/chunks/i_5fJYKS.js.br +0 -0
  110. package/build/client/_app/immutable/chunks/i_5fJYKS.js.gz +0 -0
  111. package/build/client/_app/immutable/chunks/{CF66fWJN.js → nYD9wsyN.js} +1 -1
  112. package/build/client/_app/immutable/chunks/nYD9wsyN.js.br +0 -0
  113. package/build/client/_app/immutable/chunks/nYD9wsyN.js.gz +0 -0
  114. package/build/client/_app/immutable/chunks/{BIpSIzUr.js → uLGP0py1.js} +1 -1
  115. package/build/client/_app/immutable/chunks/uLGP0py1.js.br +0 -0
  116. package/build/client/_app/immutable/chunks/uLGP0py1.js.gz +0 -0
  117. package/build/client/_app/immutable/entry/app.Cr7CMG-3.js +2 -0
  118. package/build/client/_app/immutable/entry/app.Cr7CMG-3.js.br +0 -0
  119. package/build/client/_app/immutable/entry/app.Cr7CMG-3.js.gz +0 -0
  120. package/build/client/_app/immutable/entry/start.CDNd0Bml.js +1 -0
  121. package/build/client/_app/immutable/entry/start.CDNd0Bml.js.br +2 -0
  122. package/build/client/_app/immutable/entry/start.CDNd0Bml.js.gz +0 -0
  123. package/build/client/_app/immutable/nodes/{0.BCmKHiYo.js → 0.AyqKXI2h.js} +2 -2
  124. package/build/client/_app/immutable/nodes/0.AyqKXI2h.js.br +0 -0
  125. package/build/client/_app/immutable/nodes/0.AyqKXI2h.js.gz +0 -0
  126. package/build/client/_app/immutable/nodes/1.BRmfm-nN.js +1 -0
  127. package/build/client/_app/immutable/nodes/1.BRmfm-nN.js.br +0 -0
  128. package/build/client/_app/immutable/nodes/1.BRmfm-nN.js.gz +0 -0
  129. package/build/client/_app/immutable/nodes/10.D03jjkr4.js +7 -0
  130. package/build/client/_app/immutable/nodes/10.D03jjkr4.js.br +0 -0
  131. package/build/client/_app/immutable/nodes/10.D03jjkr4.js.gz +0 -0
  132. package/build/client/_app/immutable/nodes/{15.Wmhj7gOy.js → 15.BFy4oAT6.js} +1 -1
  133. package/build/client/_app/immutable/nodes/15.BFy4oAT6.js.br +0 -0
  134. package/build/client/_app/immutable/nodes/15.BFy4oAT6.js.gz +0 -0
  135. package/build/client/_app/immutable/nodes/17.BOYU_WTT.js +3 -0
  136. package/build/client/_app/immutable/nodes/17.BOYU_WTT.js.br +0 -0
  137. package/build/client/_app/immutable/nodes/17.BOYU_WTT.js.gz +0 -0
  138. package/build/client/_app/immutable/nodes/18.Ddx80a4f.js +11 -0
  139. package/build/client/_app/immutable/nodes/18.Ddx80a4f.js.br +0 -0
  140. package/build/client/_app/immutable/nodes/18.Ddx80a4f.js.gz +0 -0
  141. package/build/client/_app/immutable/nodes/{2.BdQ4KFOK.js → 2.CZEboQjo.js} +20 -20
  142. package/build/client/_app/immutable/nodes/2.CZEboQjo.js.br +0 -0
  143. package/build/client/_app/immutable/nodes/2.CZEboQjo.js.gz +0 -0
  144. package/build/client/_app/immutable/nodes/3.dAV7FviN.js +1 -0
  145. package/build/client/_app/immutable/nodes/3.dAV7FviN.js.br +0 -0
  146. package/build/client/_app/immutable/nodes/3.dAV7FviN.js.gz +0 -0
  147. package/build/client/_app/immutable/nodes/4.Cm_vMAEA.js +1 -0
  148. package/build/client/_app/immutable/nodes/4.Cm_vMAEA.js.br +0 -0
  149. package/build/client/_app/immutable/nodes/4.Cm_vMAEA.js.gz +0 -0
  150. package/build/client/_app/immutable/nodes/5.DPWuTlaI.js +1 -0
  151. package/build/client/_app/immutable/nodes/5.DPWuTlaI.js.br +0 -0
  152. package/build/client/_app/immutable/nodes/5.DPWuTlaI.js.gz +0 -0
  153. package/build/client/_app/immutable/nodes/6.DY-NLaRW.js +1 -0
  154. package/build/client/_app/immutable/nodes/6.DY-NLaRW.js.br +0 -0
  155. package/build/client/_app/immutable/nodes/6.DY-NLaRW.js.gz +0 -0
  156. package/build/client/_app/immutable/nodes/{8.DWNYX1kH.js → 8.Chuqhf8W.js} +1 -1
  157. package/build/client/_app/immutable/nodes/8.Chuqhf8W.js.br +0 -0
  158. package/build/client/_app/immutable/nodes/8.Chuqhf8W.js.gz +0 -0
  159. package/build/client/_app/immutable/nodes/9.BOEM8f6B.js +2 -0
  160. package/build/client/_app/immutable/nodes/9.BOEM8f6B.js.br +0 -0
  161. package/build/client/_app/immutable/nodes/9.BOEM8f6B.js.gz +0 -0
  162. package/build/client/_app/version.json +1 -1
  163. package/build/client/_app/version.json.br +0 -0
  164. package/build/client/_app/version.json.gz +0 -0
  165. package/build/server/chunks/0-TQkJBtAu.js +9 -0
  166. package/build/server/chunks/0-TQkJBtAu.js.map +1 -0
  167. package/build/server/chunks/1-CKxKlw1l.js +9 -0
  168. package/build/server/chunks/{1-C1mGPV-S.js.map → 1-CKxKlw1l.js.map} +1 -1
  169. package/build/server/chunks/10-Bly5Nk7M.js +9 -0
  170. package/build/server/chunks/10-Bly5Nk7M.js.map +1 -0
  171. package/build/server/chunks/{15-CZBxPMAc.js → 15-BMEAVslz.js} +2 -2
  172. package/build/server/chunks/{15-CZBxPMAc.js.map → 15-BMEAVslz.js.map} +1 -1
  173. package/build/server/chunks/17-C8CYQOYP.js +9 -0
  174. package/build/server/chunks/17-C8CYQOYP.js.map +1 -0
  175. package/build/server/chunks/18-CtXVGBbS.js +9 -0
  176. package/build/server/chunks/18-CtXVGBbS.js.map +1 -0
  177. package/build/server/chunks/2-DvD0dAh0.js +9 -0
  178. package/build/server/chunks/2-DvD0dAh0.js.map +1 -0
  179. package/build/server/chunks/3-DBzpRDK8.js +9 -0
  180. package/build/server/chunks/3-DBzpRDK8.js.map +1 -0
  181. package/build/server/chunks/4-BUNytyC2.js +9 -0
  182. package/build/server/chunks/4-BUNytyC2.js.map +1 -0
  183. package/build/server/chunks/5-DNo8_tFS.js +9 -0
  184. package/build/server/chunks/{5-DblV-OAd.js.map → 5-DNo8_tFS.js.map} +1 -1
  185. package/build/server/chunks/6-DUMdIfbf.js +9 -0
  186. package/build/server/chunks/6-DUMdIfbf.js.map +1 -0
  187. package/build/server/chunks/8-DxTJ555u.js +9 -0
  188. package/build/server/chunks/8-DxTJ555u.js.map +1 -0
  189. package/build/server/chunks/9-B4-5k50d.js +9 -0
  190. package/build/server/chunks/9-B4-5k50d.js.map +1 -0
  191. package/build/server/chunks/{AgentSidebar-XdGj1sqT.js → AgentSidebar-DvIlda-E.js} +5 -6
  192. package/build/server/chunks/AgentSidebar-DvIlda-E.js.map +1 -0
  193. package/build/server/chunks/{Button-Dsy3QY7B.js → Button-BLigKkGG.js} +2 -2
  194. package/build/server/chunks/Button-BLigKkGG.js.map +1 -0
  195. package/build/server/chunks/{ChatStepTrace-1q74tVYO.js → ChatStepTrace-CqqIjRLU.js} +47 -11
  196. package/build/server/chunks/ChatStepTrace-CqqIjRLU.js.map +1 -0
  197. package/build/server/chunks/{Input-CHFlfduw.js → Input-OdQKNdS6.js} +1 -2
  198. package/build/server/chunks/Input-OdQKNdS6.js.map +1 -0
  199. package/build/server/chunks/MockGenerator-GEpXTgX0.js +117 -0
  200. package/build/server/chunks/MockGenerator-GEpXTgX0.js.map +1 -0
  201. package/build/server/chunks/Modal-DtVsRmmO.js.map +1 -1
  202. package/build/server/chunks/{_layout.svelte-DJ4kDgDL.js → _layout.svelte-B-CkD4a0.js} +14 -8
  203. package/build/server/chunks/_layout.svelte-B-CkD4a0.js.map +1 -0
  204. package/build/server/chunks/{_layout.svelte-B2lwUacy.js → _layout.svelte-BBFCF-xw.js} +8 -4
  205. package/build/server/chunks/_layout.svelte-BBFCF-xw.js.map +1 -0
  206. package/build/server/chunks/{_layout.svelte-C7JgNCIu.js → _layout.svelte-cPhmW5bZ.js} +3 -1
  207. package/build/server/chunks/_layout.svelte-cPhmW5bZ.js.map +1 -0
  208. package/build/server/chunks/{_page.svelte-FufhMKh4.js → _page.svelte-0J2xaeyC.js} +71 -16
  209. package/build/server/chunks/_page.svelte-0J2xaeyC.js.map +1 -0
  210. package/build/server/chunks/{_page.svelte-BpRksNEG.js → _page.svelte-BgoX8Y6N.js} +2 -2
  211. package/build/server/chunks/{_page.svelte-BpRksNEG.js.map → _page.svelte-BgoX8Y6N.js.map} +1 -1
  212. package/build/server/chunks/{_page.svelte-GaxktsuT.js → _page.svelte-C_S_qUgZ.js} +480 -72
  213. package/build/server/chunks/_page.svelte-C_S_qUgZ.js.map +1 -0
  214. package/build/server/chunks/{_page.svelte-DDpBtd3X.js → _page.svelte-CqGOvPRO.js} +3 -4
  215. package/build/server/chunks/_page.svelte-CqGOvPRO.js.map +1 -0
  216. package/build/server/chunks/{_page.svelte-CA3-vgl2.js → _page.svelte-Cxh9_vUl.js} +151 -100
  217. package/build/server/chunks/_page.svelte-Cxh9_vUl.js.map +1 -0
  218. package/build/server/chunks/_page.svelte-zOI_s_3J.js +2151 -0
  219. package/build/server/chunks/_page.svelte-zOI_s_3J.js.map +1 -0
  220. package/build/server/chunks/agents-context-rV2narXG.js.map +1 -1
  221. package/build/server/chunks/conversation-view-memory-BZguFlTt.js +20 -0
  222. package/build/server/chunks/conversation-view-memory-BZguFlTt.js.map +1 -0
  223. package/build/server/chunks/edit-workspace-context-B1nYQ5hD.js.map +1 -1
  224. package/build/server/chunks/index-CSpGrMM2.js.map +1 -1
  225. package/build/server/chunks/{client-DzvEkq51.js → source-selection-CcN1cgXc.js} +122 -117
  226. package/build/server/chunks/source-selection-CcN1cgXc.js.map +1 -0
  227. package/build/server/index.js +1 -1
  228. package/build/server/index.js.map +1 -1
  229. package/build/server/manifest.js +14 -14
  230. package/build/server/manifest.js.map +1 -1
  231. package/package.json +4 -4
  232. package/src/backend/lib/get-agent-factories.spec.ts +59 -0
  233. package/src/backend/lib/get-agent-factories.ts +31 -1
  234. package/src/backend/lib/voice-agent-lifecycle.test.ts +31 -0
  235. package/src/backend/lib/voice-agent-lifecycle.ts +16 -0
  236. package/src/backend/roleplay/agents.ts +189 -69
  237. package/src/backend/roleplay/message-dispatcher.ts +0 -7
  238. package/src/backend/roleplay/router.ts +14 -17
  239. package/src/backend/roleplay/trace-serialization.spec.ts +35 -0
  240. package/src/backend/roleplay/trace-serialization.ts +57 -0
  241. package/src/backend/roleplay/variants.ts +33 -49
  242. package/src/backend/tests/academy.ts +202 -100
  243. package/src/backend/tests/analyze.ts +0 -3
  244. package/src/backend/tests/data.spec.ts +139 -0
  245. package/src/backend/tests/data.ts +452 -68
  246. package/src/backend/tests/emulate-agents.ts +60 -44
  247. package/src/backend/tests/openai-prompt-cache.ts +68 -0
  248. package/src/backend/tests/promptfoo-runtime.spec.ts +41 -0
  249. package/src/backend/tests/promptfoo-runtime.ts +27 -0
  250. package/src/backend/tests/report-files.spec.ts +42 -0
  251. package/src/backend/tests/report-files.ts +101 -0
  252. package/src/backend/tests/router.ts +28 -2
  253. package/src/backend/tests/suite.ts +13 -4
  254. package/build/client/_app/immutable/assets/0.B4t3dozz.css +0 -1
  255. package/build/client/_app/immutable/assets/0.B4t3dozz.css.br +0 -0
  256. package/build/client/_app/immutable/assets/0.B4t3dozz.css.gz +0 -0
  257. package/build/client/_app/immutable/assets/10.BX46PfEJ.css.br +0 -0
  258. package/build/client/_app/immutable/assets/10.BX46PfEJ.css.gz +0 -0
  259. package/build/client/_app/immutable/chunks/7E8m6dwk.js +0 -1
  260. package/build/client/_app/immutable/chunks/7E8m6dwk.js.br +0 -0
  261. package/build/client/_app/immutable/chunks/7E8m6dwk.js.gz +0 -0
  262. package/build/client/_app/immutable/chunks/7qRqthsa.js +0 -1
  263. package/build/client/_app/immutable/chunks/7qRqthsa.js.br +0 -2
  264. package/build/client/_app/immutable/chunks/7qRqthsa.js.gz +0 -0
  265. package/build/client/_app/immutable/chunks/Ajb1KYIn.js +0 -1
  266. package/build/client/_app/immutable/chunks/Ajb1KYIn.js.br +0 -0
  267. package/build/client/_app/immutable/chunks/Ajb1KYIn.js.gz +0 -0
  268. package/build/client/_app/immutable/chunks/B0iEglSe.js +0 -1
  269. package/build/client/_app/immutable/chunks/B0iEglSe.js.br +0 -0
  270. package/build/client/_app/immutable/chunks/B0iEglSe.js.gz +0 -0
  271. package/build/client/_app/immutable/chunks/BIpSIzUr.js.br +0 -0
  272. package/build/client/_app/immutable/chunks/BIpSIzUr.js.gz +0 -0
  273. package/build/client/_app/immutable/chunks/BM0jKynj.js.br +0 -0
  274. package/build/client/_app/immutable/chunks/BM0jKynj.js.gz +0 -0
  275. package/build/client/_app/immutable/chunks/BTvePR6r.js +0 -1
  276. package/build/client/_app/immutable/chunks/BTvePR6r.js.br +0 -2
  277. package/build/client/_app/immutable/chunks/BTvePR6r.js.gz +0 -0
  278. package/build/client/_app/immutable/chunks/Bcu62lFq.js +0 -1
  279. package/build/client/_app/immutable/chunks/Bcu62lFq.js.br +0 -0
  280. package/build/client/_app/immutable/chunks/Bcu62lFq.js.gz +0 -0
  281. package/build/client/_app/immutable/chunks/BwtfALfL.js +0 -11
  282. package/build/client/_app/immutable/chunks/BwtfALfL.js.br +0 -0
  283. package/build/client/_app/immutable/chunks/BwtfALfL.js.gz +0 -0
  284. package/build/client/_app/immutable/chunks/BxsDwlgp.js +0 -4
  285. package/build/client/_app/immutable/chunks/BxsDwlgp.js.br +0 -0
  286. package/build/client/_app/immutable/chunks/BxsDwlgp.js.gz +0 -0
  287. package/build/client/_app/immutable/chunks/C-whEtKd.js.br +0 -2
  288. package/build/client/_app/immutable/chunks/C-whEtKd.js.gz +0 -0
  289. package/build/client/_app/immutable/chunks/C1WqE8CP.js +0 -1
  290. package/build/client/_app/immutable/chunks/C1WqE8CP.js.br +0 -2
  291. package/build/client/_app/immutable/chunks/C1WqE8CP.js.gz +0 -0
  292. package/build/client/_app/immutable/chunks/C4D-JXnS.js +0 -1
  293. package/build/client/_app/immutable/chunks/C4D-JXnS.js.br +0 -0
  294. package/build/client/_app/immutable/chunks/C4D-JXnS.js.gz +0 -0
  295. package/build/client/_app/immutable/chunks/C4SnSfql.js +0 -1
  296. package/build/client/_app/immutable/chunks/C4SnSfql.js.br +0 -0
  297. package/build/client/_app/immutable/chunks/C4SnSfql.js.gz +0 -0
  298. package/build/client/_app/immutable/chunks/CF66fWJN.js.br +0 -0
  299. package/build/client/_app/immutable/chunks/CF66fWJN.js.gz +0 -0
  300. package/build/client/_app/immutable/chunks/CNLU4B3p.js.br +0 -0
  301. package/build/client/_app/immutable/chunks/CNLU4B3p.js.gz +0 -0
  302. package/build/client/_app/immutable/chunks/CXo2BVs0.js.br +0 -0
  303. package/build/client/_app/immutable/chunks/CXo2BVs0.js.gz +0 -0
  304. package/build/client/_app/immutable/chunks/CZLNSMhF.js.br +0 -0
  305. package/build/client/_app/immutable/chunks/CZLNSMhF.js.gz +0 -0
  306. package/build/client/_app/immutable/chunks/CqO5tR2_.js +0 -1
  307. package/build/client/_app/immutable/chunks/CqO5tR2_.js.br +0 -0
  308. package/build/client/_app/immutable/chunks/CqO5tR2_.js.gz +0 -0
  309. package/build/client/_app/immutable/chunks/CqxCTxvJ.js.br +0 -0
  310. package/build/client/_app/immutable/chunks/CqxCTxvJ.js.gz +0 -0
  311. package/build/client/_app/immutable/chunks/D-wf2QNc.js +0 -1
  312. package/build/client/_app/immutable/chunks/D-wf2QNc.js.br +0 -0
  313. package/build/client/_app/immutable/chunks/D-wf2QNc.js.gz +0 -0
  314. package/build/client/_app/immutable/chunks/D4obUD_s.js +0 -1
  315. package/build/client/_app/immutable/chunks/D4obUD_s.js.br +0 -0
  316. package/build/client/_app/immutable/chunks/D4obUD_s.js.gz +0 -0
  317. package/build/client/_app/immutable/chunks/D8e7SQh9.js +0 -1
  318. package/build/client/_app/immutable/chunks/D8e7SQh9.js.br +0 -0
  319. package/build/client/_app/immutable/chunks/D8e7SQh9.js.gz +0 -0
  320. package/build/client/_app/immutable/chunks/DNLcpWO_.js.br +0 -0
  321. package/build/client/_app/immutable/chunks/DNLcpWO_.js.gz +0 -0
  322. package/build/client/_app/immutable/chunks/DTXUDKH5.js.br +0 -0
  323. package/build/client/_app/immutable/chunks/DTXUDKH5.js.gz +0 -0
  324. package/build/client/_app/immutable/chunks/DYhTBLDc.js.br +0 -0
  325. package/build/client/_app/immutable/chunks/DYhTBLDc.js.gz +0 -0
  326. package/build/client/_app/immutable/chunks/DhBm2Vx9.js +0 -1
  327. package/build/client/_app/immutable/chunks/DhBm2Vx9.js.br +0 -0
  328. package/build/client/_app/immutable/chunks/DhBm2Vx9.js.gz +0 -0
  329. package/build/client/_app/immutable/chunks/Dp760K13.js.br +0 -0
  330. package/build/client/_app/immutable/chunks/Dp760K13.js.gz +0 -0
  331. package/build/client/_app/immutable/chunks/Dv0gjm25.js +0 -1
  332. package/build/client/_app/immutable/chunks/Dv0gjm25.js.br +0 -0
  333. package/build/client/_app/immutable/chunks/Dv0gjm25.js.gz +0 -0
  334. package/build/client/_app/immutable/chunks/Dv8m1cTI.js.br +0 -0
  335. package/build/client/_app/immutable/chunks/HJHYLHDn.js.br +0 -0
  336. package/build/client/_app/immutable/chunks/HJHYLHDn.js.gz +0 -0
  337. package/build/client/_app/immutable/chunks/HXxIsSOO.js.br +0 -0
  338. package/build/client/_app/immutable/chunks/HXxIsSOO.js.gz +0 -0
  339. package/build/client/_app/immutable/chunks/_yZg6Sf-.js +0 -2
  340. package/build/client/_app/immutable/chunks/_yZg6Sf-.js.br +0 -0
  341. package/build/client/_app/immutable/chunks/_yZg6Sf-.js.gz +0 -0
  342. package/build/client/_app/immutable/chunks/xebNt8-Z.js +0 -1
  343. package/build/client/_app/immutable/chunks/xebNt8-Z.js.br +0 -0
  344. package/build/client/_app/immutable/chunks/xebNt8-Z.js.gz +0 -0
  345. package/build/client/_app/immutable/entry/app.C4wJtvtH.js +0 -2
  346. package/build/client/_app/immutable/entry/app.C4wJtvtH.js.br +0 -0
  347. package/build/client/_app/immutable/entry/app.C4wJtvtH.js.gz +0 -0
  348. package/build/client/_app/immutable/entry/start.BId2vqhS.js +0 -1
  349. package/build/client/_app/immutable/entry/start.BId2vqhS.js.br +0 -2
  350. package/build/client/_app/immutable/entry/start.BId2vqhS.js.gz +0 -0
  351. package/build/client/_app/immutable/nodes/0.BCmKHiYo.js.br +0 -0
  352. package/build/client/_app/immutable/nodes/0.BCmKHiYo.js.gz +0 -0
  353. package/build/client/_app/immutable/nodes/1.8skEZBEw.js +0 -1
  354. package/build/client/_app/immutable/nodes/1.8skEZBEw.js.br +0 -0
  355. package/build/client/_app/immutable/nodes/1.8skEZBEw.js.gz +0 -0
  356. package/build/client/_app/immutable/nodes/10.YgmBfSWN.js +0 -5
  357. package/build/client/_app/immutable/nodes/10.YgmBfSWN.js.br +0 -0
  358. package/build/client/_app/immutable/nodes/10.YgmBfSWN.js.gz +0 -0
  359. package/build/client/_app/immutable/nodes/15.Wmhj7gOy.js.br +0 -0
  360. package/build/client/_app/immutable/nodes/15.Wmhj7gOy.js.gz +0 -0
  361. package/build/client/_app/immutable/nodes/17.D8ydco6g.js +0 -3
  362. package/build/client/_app/immutable/nodes/17.D8ydco6g.js.br +0 -0
  363. package/build/client/_app/immutable/nodes/17.D8ydco6g.js.gz +0 -0
  364. package/build/client/_app/immutable/nodes/18.C67CqGm5.js +0 -11
  365. package/build/client/_app/immutable/nodes/18.C67CqGm5.js.br +0 -0
  366. package/build/client/_app/immutable/nodes/18.C67CqGm5.js.gz +0 -0
  367. package/build/client/_app/immutable/nodes/2.BdQ4KFOK.js.br +0 -0
  368. package/build/client/_app/immutable/nodes/2.BdQ4KFOK.js.gz +0 -0
  369. package/build/client/_app/immutable/nodes/3.nCmkz6kS.js +0 -1
  370. package/build/client/_app/immutable/nodes/3.nCmkz6kS.js.br +0 -0
  371. package/build/client/_app/immutable/nodes/3.nCmkz6kS.js.gz +0 -0
  372. package/build/client/_app/immutable/nodes/4.DAwO0_Am.js +0 -1
  373. package/build/client/_app/immutable/nodes/4.DAwO0_Am.js.br +0 -0
  374. package/build/client/_app/immutable/nodes/4.DAwO0_Am.js.gz +0 -0
  375. package/build/client/_app/immutable/nodes/5.C_SvvZjG.js +0 -1
  376. package/build/client/_app/immutable/nodes/5.C_SvvZjG.js.br +0 -0
  377. package/build/client/_app/immutable/nodes/5.C_SvvZjG.js.gz +0 -0
  378. package/build/client/_app/immutable/nodes/6.DfOe9lph.js +0 -1
  379. package/build/client/_app/immutable/nodes/6.DfOe9lph.js.br +0 -0
  380. package/build/client/_app/immutable/nodes/6.DfOe9lph.js.gz +0 -0
  381. package/build/client/_app/immutable/nodes/8.DWNYX1kH.js.br +0 -0
  382. package/build/client/_app/immutable/nodes/8.DWNYX1kH.js.gz +0 -0
  383. package/build/client/_app/immutable/nodes/9.D7SG4T7Z.js +0 -2
  384. package/build/client/_app/immutable/nodes/9.D7SG4T7Z.js.br +0 -0
  385. package/build/client/_app/immutable/nodes/9.D7SG4T7Z.js.gz +0 -0
  386. package/build/server/chunks/0-D5BNSI7t.js +0 -9
  387. package/build/server/chunks/0-D5BNSI7t.js.map +0 -1
  388. package/build/server/chunks/1-C1mGPV-S.js +0 -9
  389. package/build/server/chunks/10-BUo1e_HG.js +0 -9
  390. package/build/server/chunks/10-BUo1e_HG.js.map +0 -1
  391. package/build/server/chunks/17-iNFqG1My.js +0 -9
  392. package/build/server/chunks/17-iNFqG1My.js.map +0 -1
  393. package/build/server/chunks/18-u8T5X6fM.js +0 -9
  394. package/build/server/chunks/18-u8T5X6fM.js.map +0 -1
  395. package/build/server/chunks/2-tLlSByHA.js +0 -9
  396. package/build/server/chunks/2-tLlSByHA.js.map +0 -1
  397. package/build/server/chunks/3-D1KY9yVZ.js +0 -9
  398. package/build/server/chunks/3-D1KY9yVZ.js.map +0 -1
  399. package/build/server/chunks/4-7zu0cJha.js +0 -9
  400. package/build/server/chunks/4-7zu0cJha.js.map +0 -1
  401. package/build/server/chunks/5-DblV-OAd.js +0 -9
  402. package/build/server/chunks/6-BDC5budM.js +0 -9
  403. package/build/server/chunks/6-BDC5budM.js.map +0 -1
  404. package/build/server/chunks/8-DhmD-opq.js +0 -9
  405. package/build/server/chunks/8-DhmD-opq.js.map +0 -1
  406. package/build/server/chunks/9-BGj28GI6.js +0 -9
  407. package/build/server/chunks/9-BGj28GI6.js.map +0 -1
  408. package/build/server/chunks/AgentSidebar-XdGj1sqT.js.map +0 -1
  409. package/build/server/chunks/Button-Dsy3QY7B.js.map +0 -1
  410. package/build/server/chunks/ChatStepTrace-1q74tVYO.js.map +0 -1
  411. package/build/server/chunks/Input-CHFlfduw.js.map +0 -1
  412. package/build/server/chunks/_layout.svelte-B2lwUacy.js.map +0 -1
  413. package/build/server/chunks/_layout.svelte-C7JgNCIu.js.map +0 -1
  414. package/build/server/chunks/_layout.svelte-DJ4kDgDL.js.map +0 -1
  415. package/build/server/chunks/_page.svelte-Bl1WcAXy.js +0 -671
  416. package/build/server/chunks/_page.svelte-Bl1WcAXy.js.map +0 -1
  417. package/build/server/chunks/_page.svelte-CA3-vgl2.js.map +0 -1
  418. package/build/server/chunks/_page.svelte-DDpBtd3X.js.map +0 -1
  419. package/build/server/chunks/_page.svelte-FufhMKh4.js.map +0 -1
  420. package/build/server/chunks/_page.svelte-GaxktsuT.js.map +0 -1
  421. package/build/server/chunks/client-DzvEkq51.js.map +0 -1
  422. package/build/server/chunks/source-selection-eA--VEKo.js +0 -124
  423. package/build/server/chunks/source-selection-eA--VEKo.js.map +0 -1
@@ -1,12 +1,12 @@
1
- import { B as Button } from './Button-Dsy3QY7B.js';
1
+ import { l as derived, o as attr_class, j as escape_html, n as ensure_array_like, k as attr, az as clsx, m as stringify, q as attr_style } from './index-CSpGrMM2.js';
2
+ import { B as Button } from './Button-BLigKkGG.js';
2
3
  import { D as Dropdown } from './Dropdown-7dp1qEYv.js';
3
- import { o as attr_class, j as escape_html, n as ensure_array_like, k as attr, az as clsx, m as stringify, l as derived, q as attr_style } from './index-CSpGrMM2.js';
4
4
  import { I as Icon } from './Icon-CXFHkSIr.js';
5
5
  import { t as trpc } from './trpc-client-D8L6vWf4.js';
6
6
  import { g as getEditWorkspaceContext, P as Panel } from './edit-workspace-context-B1nYQ5hD.js';
7
- import { C as ChatApiCallTrace, a as ChatConversationalTrace, b as ChatStepTrace } from './ChatStepTrace-1q74tVYO.js';
7
+ import { C as ChatApiCallTrace, a as ChatConversationalTrace, b as ChatStepTrace, f as findMainStepTraceNear, c as findStringifiedConversationBefore } from './ChatStepTrace-CqqIjRLU.js';
8
8
  import { i as isApiCallTrace, b as isConversationalTrace, d as isStepTrace, e as chatContent, l as logContent, c as clearChatContent, a as clearLogs } from './log-content.svelte-CfQzj-v_.js';
9
- import { I as Input } from './Input-CHFlfduw.js';
9
+ import { I as Input } from './Input-OdQKNdS6.js';
10
10
  import './shared-server-DaWdgxVh.js';
11
11
  import '@trpc/client';
12
12
  import './index-server-DsYEXu5n.js';
@@ -49,7 +49,8 @@ function History($$renderer, $$props) {
49
49
  const raw = state.userMessage;
50
50
  if (raw == null) return "No message";
51
51
  const msg = (typeof raw === "string" ? raw : String(raw)).trim();
52
- return msg || "No message";
52
+ if (!msg) return "No message";
53
+ return state.userMessageSender === "system" ? `System: ${msg}` : msg;
53
54
  }
54
55
  function truncateMessage(message, maxLength = 50, ellipsis = "…") {
55
56
  if (!message) return "";
@@ -169,6 +170,32 @@ function History($$renderer, $$props) {
169
170
  $$renderer2.subsume($$inner_renderer);
170
171
  });
171
172
  }
173
+ function agentContextFromRuntime(value) {
174
+ if (isRecord(value) && isRecord(value.context)) return cloneRecord(value.context);
175
+ return cloneRecord(value);
176
+ }
177
+ function mocksFromRuntime(value) {
178
+ if (!isRecord(value) || !isRecord(value.mocks)) return void 0;
179
+ return cloneRecord(value.mocks);
180
+ }
181
+ function cloneRecord(value) {
182
+ if (!isRecord(value)) return {};
183
+ return cloneValue(value);
184
+ }
185
+ function isRecord(value) {
186
+ return !!value && typeof value === "object" && !Array.isArray(value);
187
+ }
188
+ function cloneValue(value) {
189
+ try {
190
+ return structuredClone(value);
191
+ } catch {
192
+ try {
193
+ return JSON.parse(JSON.stringify(value));
194
+ } catch {
195
+ return value;
196
+ }
197
+ }
198
+ }
172
199
  function Dialog($$renderer, $$props) {
173
200
  $$renderer.component(($$renderer2) => {
174
201
  let dialog;
@@ -435,6 +462,8 @@ function PlaygroundChat($$renderer, $$props) {
435
462
  let inputEl = null;
436
463
  let ghostTextStyle = "";
437
464
  let aiGenerating = false;
465
+ let sendRole = "user";
466
+ let actionError = null;
438
467
  let userHistory = [];
439
468
  let inputFocused = false;
440
469
  let autocompleteDismissed = false;
@@ -521,17 +550,29 @@ function PlaygroundChat($$renderer, $$props) {
521
550
  return null;
522
551
  }
523
552
  function isRenderableConversationalMessage(trace) {
553
+ if ((trace.eventName === "received-message" || trace.eventName === "llm-handler-stream-requested") && !String(trace.content ?? "").trim()) {
554
+ return false;
555
+ }
524
556
  return trace.eventName === "received-message" || trace.eventName === "llm-handler-stream-requested" || trace.eventName === "finished-main-streaming-step" || trace.eventName === "sent-message" || trace.eventName === "transfer-requested" || trace.eventName === "hangup-requested";
525
557
  }
526
558
  function isVariantEligibleTrace(trace) {
527
559
  return !!(agentId && agentId.trim()) && trace.eventName !== "transfer-requested" && (trace.eventName === "finished-main-streaming-step" || trace.eventName === "sent-message");
528
560
  }
561
+ function isUserConversationalTrace(trace) {
562
+ return trace.role === "user" || trace.eventName === "received-message" || trace.eventName === "llm-handler-stream-requested";
563
+ }
529
564
  function extractUserText(raw) {
530
565
  const value = String(raw ?? "").trim();
531
566
  if (!value) return "";
532
567
  if (/^\[image\]\s+/.test(value)) return "";
533
568
  return value;
534
569
  }
570
+ function inputSenderForTrace(trace) {
571
+ const rawSender = trace?.bosunInputMessageSender;
572
+ if (rawSender === "system") return "system";
573
+ if (rawSender === "user") return "user";
574
+ return trace.role === "system" ? "system" : "user";
575
+ }
535
576
  function handleRevertTrace(trace) {
536
577
  if (!onRevertToState) return;
537
578
  const rawPrev = trace?.bosunPrevStateId;
@@ -539,6 +580,9 @@ function PlaygroundChat($$renderer, $$props) {
539
580
  onRevertToState(prevStateId);
540
581
  const rawUserMessage = typeof trace?.bosunUserMessage === "string" ? trace.bosunUserMessage : trace.content;
541
582
  text = extractUserText(rawUserMessage);
583
+ sendRole = inputSenderForTrace(trace);
584
+ autocompleteDismissed = false;
585
+ selectedSuggestionIndex = null;
542
586
  requestAnimationFrame(() => {
543
587
  try {
544
588
  inputEl?.focus();
@@ -596,13 +640,11 @@ function PlaygroundChat($$renderer, $$props) {
596
640
  return chatContent.findLast((e) => isConversationalTrace(e))?.eventName === "hangup-requested";
597
641
  });
598
642
  const lastVariantEligibleTrace = derived(() => {
599
- for (let index = renderableEntries().length - 1; index >= 0; index--) {
600
- const entry = renderableEntries()[index];
601
- if (!isConversationalTrace(entry)) continue;
602
- if (!isVariantEligibleTrace(entry)) continue;
603
- return entry;
604
- }
605
- return null;
643
+ const match = renderableEntries().map((entry, index) => ({ entry, index })).reverse().find(({ entry, index }) => {
644
+ if (!isConversationalTrace(entry) || !isVariantEligibleTrace(entry)) return false;
645
+ return renderableEntries().slice(0, index).some((candidate) => isConversationalTrace(candidate) && isUserConversationalTrace(candidate));
646
+ });
647
+ return match && isConversationalTrace(match.entry) ? match.entry : null;
606
648
  });
607
649
  const aiResponseContext = derived(() => {
608
650
  const trace = lastVariantEligibleTrace();
@@ -618,49 +660,18 @@ function PlaygroundChat($$renderer, $$props) {
618
660
  return null;
619
661
  }
620
662
  });
621
- function findMainStepTraceForConversationTrace(idx) {
622
- for (let i = idx - 1; i >= 0; i--) {
623
- const entry = chatContent[i];
624
- if (!isStepTrace(entry)) continue;
625
- if (entry.name !== "main" && entry.name !== "mainReply") continue;
626
- if (typeof entry.renderedPrompt !== "string") continue;
627
- if (!entry.renderedPrompt.trim()) continue;
628
- return entry;
629
- }
630
- for (let i = idx + 1; i < chatContent.length; i++) {
631
- const entry = chatContent[i];
632
- if (!isStepTrace(entry)) continue;
633
- if (entry.name !== "main" && entry.name !== "mainReply") continue;
634
- if (typeof entry.renderedPrompt !== "string") continue;
635
- if (!entry.renderedPrompt.trim()) continue;
636
- return entry;
637
- }
638
- return null;
639
- }
640
- function findNearestStringifiedConversation(idx) {
641
- for (let i = idx - 1; i >= 0; i--) {
642
- const entry = chatContent[i];
643
- if (!isStepTrace(entry)) continue;
644
- if (typeof entry.stringifiedConversation !== "string") continue;
645
- const sc = entry.stringifiedConversation.trim();
646
- if (!sc) continue;
647
- return sc;
648
- }
649
- return null;
650
- }
651
663
  function buildAnalyzeTraceInput(trace) {
652
664
  const agent = (agentId ?? "").trim();
653
665
  if (!agent) throw new Error("Agent id is not available; cannot analyze");
654
666
  const idx = chatContent.indexOf(trace);
655
667
  if (idx === -1) throw new Error("Could not locate trace in chat history");
656
- const stepTrace = findMainStepTraceForConversationTrace(idx);
668
+ const stepTrace = findMainStepTraceNear(chatContent, idx, { requireRenderedPrompt: true });
657
669
  if (!stepTrace) {
658
670
  throw new Error("Could not find main step trace for this message");
659
671
  }
660
672
  const renderedPrompt = typeof stepTrace.renderedPrompt === "string" ? stepTrace.renderedPrompt : "";
661
673
  if (!renderedPrompt.trim()) throw new Error("Main step rendered prompt is missing");
662
- const stringifiedConversation = typeof stepTrace.stringifiedConversation === "string" && stepTrace.stringifiedConversation.trim() ? stepTrace.stringifiedConversation : findNearestStringifiedConversation(idx) ?? "";
663
- if (!stringifiedConversation.trim()) throw new Error("Main step conversation is missing");
674
+ const stringifiedConversation = typeof stepTrace.stringifiedConversation === "string" && stepTrace.stringifiedConversation.trim() ? stepTrace.stringifiedConversation : findStringifiedConversationBefore(chatContent, idx) ?? "";
664
675
  const response = String(trace?.content ?? "");
665
676
  if (!response.trim()) throw new Error("Message content is missing");
666
677
  const model = typeof stepTrace?.model === "string" ? String(stepTrace.model) : void 0;
@@ -679,9 +690,21 @@ function PlaygroundChat($$renderer, $$props) {
679
690
  function handleAnalyzeTrace(trace) {
680
691
  if (!onAnalyzeTrace) return;
681
692
  try {
693
+ actionError = null;
682
694
  onAnalyzeTrace(buildAnalyzeTraceInput(trace));
683
695
  } catch (e) {
684
696
  console.error(e);
697
+ actionError = e instanceof Error ? e.message : String(e);
698
+ }
699
+ }
700
+ function handleRegenerateTrace(trace) {
701
+ if (!onRegenerateTrace) return;
702
+ try {
703
+ actionError = null;
704
+ onRegenerateTrace(trace);
705
+ } catch (e) {
706
+ console.error(e);
707
+ actionError = e instanceof Error ? e.message : String(e);
685
708
  }
686
709
  }
687
710
  async function handleGenerateUserResponse() {
@@ -771,9 +794,10 @@ function PlaygroundChat($$renderer, $$props) {
771
794
  trace: entry,
772
795
  context,
773
796
  agentId,
797
+ region,
774
798
  analyzeDisabled,
775
799
  onAnalyze: onAnalyzeTrace ? handleAnalyzeTrace : void 0,
776
- onRegenerate: onRegenerateTrace,
800
+ onRegenerate: onRegenerateTrace ? handleRegenerateTrace : void 0,
777
801
  onRevert: onRevertToState ? handleRevertTrace : void 0,
778
802
  showSeeVariants: !!onSeeVariants && !variantSourceTrace && entry === lastVariantEligibleTrace(),
779
803
  onSeeVariants,
@@ -825,7 +849,13 @@ function PlaygroundChat($$renderer, $$props) {
825
849
  $$renderer4.push(`<div class="absolute bottom-2 left-2 right-2 z-10 flex items-center gap-3 rounded-lg border border-rc-green-450 bg-rc-gray-930/90 px-3 py-3 font-semibold text-rc-gray-100 shadow-inner-white-soft backdrop-blur-3xl"><span>Choose a variant above to continue</span> <button type="button"${attr("disabled", !onRegenerateVariants || variantLoading || variantApplyingId !== null, true)} class="rounded border-0 bg-transparent px-1 py-0.5 text-rc-gray-300 transition-colors hover:bg-rc-gray-900 hover:text-rc-gray-100 focus:outline-none focus-visible:outline-none disabled:cursor-wait disabled:opacity-50">Regenerate</button> <button type="button" class="rounded border-0 bg-transparent px-1 py-0.5 text-rc-gray-300 transition-colors hover:bg-rc-gray-900 hover:text-rc-gray-100 focus:outline-none focus-visible:outline-none">Cancel</button></div>`);
826
850
  } else {
827
851
  $$renderer4.push("<!--[-1-->");
828
- $$renderer4.push(`<form><fieldset${attr("disabled", controlsDisabled(), true)} class="absolute bottom-2 left-2 right-2 z-10 flex gap-2 disabled:opacity-35"><div class="relative flex-1">`);
852
+ if (actionError) {
853
+ $$renderer4.push("<!--[0-->");
854
+ $$renderer4.push(`<div class="absolute bottom-16 left-2 right-2 z-20 rounded-lg border border-red-500/60 bg-red-950/90 px-3 py-2 text-sm text-red-100 shadow-lg" role="alert">${escape_html(actionError)}</div>`);
855
+ } else {
856
+ $$renderer4.push("<!--[-1-->");
857
+ }
858
+ $$renderer4.push(`<!--]--> <form><fieldset${attr("disabled", controlsDisabled(), true)} class="absolute bottom-2 left-2 right-2 z-10 flex gap-2 disabled:opacity-35"><div class="relative flex-1">`);
829
859
  if (dropdownOpen()) {
830
860
  $$renderer4.push("<!--[0-->");
831
861
  $$renderer4.push(`<div class="absolute bottom-full left-0 right-0 mb-1 max-h-60 overflow-y-auto rounded-lg border border-rc-gray-110 bg-rc-gray-930 shadow-inner-white-soft backdrop-blur-2xl" role="listbox"><!--[-->`);
@@ -847,7 +877,8 @@ function PlaygroundChat($$renderer, $$props) {
847
877
  $$renderer4.push(`<!--]--> `);
848
878
  Input($$renderer4, {
849
879
  variant: "chat",
850
- placeholder: aiGenerating ? "Generating" : "Enter user's message...",
880
+ class: `!text-base !leading-6 !duration-75 ${sendRole === "system" ? "!border-emerald-500 !pl-[5.5rem] hover:!border-emerald-500 focus:!border-emerald-500" : "!pl-[4.25rem]"}`,
881
+ placeholder: aiGenerating ? "Generating" : "Enter message...",
851
882
  autocomplete: "off",
852
883
  readonly: aiGenerating,
853
884
  onfocus: handleInputFocus,
@@ -869,7 +900,7 @@ function PlaygroundChat($$renderer, $$props) {
869
900
  $$settled = false;
870
901
  }
871
902
  });
872
- $$renderer4.push(`<!----> `);
903
+ $$renderer4.push(`<!----> <button type="button"${attr("title", sendRole === "system" ? "Switch to user" : "Switch to system")}${attr("aria-label", sendRole === "system" ? "Switch to user" : "Switch to system")}${attr("disabled", aiGenerating, true)} class="absolute bottom-0 left-3 top-0 z-20 inline-flex items-center border-r border-rc-gray-500/70 bg-transparent pr-2 text-base font-semibold leading-6 text-rc-gray-300 transition-colors duration-75 hover:text-rc-gray-300 focus:outline-none focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50">${escape_html(sendRole === "system" ? "System" : "User")}</button> `);
873
904
  if (selectedSuggestionIndex !== null && ghostSuffix()) {
874
905
  $$renderer4.push("<!--[0-->");
875
906
  $$renderer4.push(`<div class="pointer-events-none absolute inset-0 z-10 overflow-hidden rounded-lg" aria-hidden="true"><div class="whitespace-pre text-rc-gray-400/70"${attr_style(ghostTextStyle)}><span class="invisible">${escape_html(text)}</span><span>${escape_html(ghostSuffix())}</span></div></div>`);
@@ -897,30 +928,40 @@ function PlaygroundChat($$renderer, $$props) {
897
928
  $$slots: { default: true }
898
929
  });
899
930
  $$renderer4.push(`<!----> `);
900
- Button($$renderer4, {
901
- size: "small",
902
- type: showGenerateAction() ? "button" : "submit",
903
- title: showGenerateAction() ? "Generate response" : void 0,
904
- "aria-label": showGenerateAction() ? "Generate response" : "Send message",
905
- disabled: aiGenerating || showGenerateAction() && !aiResponseContext(),
906
- onclick: (event) => {
907
- if (!showGenerateAction()) return;
908
- event.preventDefault();
909
- void handleGenerateUserResponse();
910
- },
911
- children: ($$renderer5) => {
912
- if (showGenerateAction()) {
913
- $$renderer5.push("<!--[0-->");
931
+ if (showGenerateAction()) {
932
+ $$renderer4.push("<!--[0-->");
933
+ Button($$renderer4, {
934
+ size: "small",
935
+ type: "button",
936
+ title: "Generate response",
937
+ "aria-label": "Generate response",
938
+ disabled: aiGenerating || !aiResponseContext(),
939
+ class: "inline-flex !w-[59px] items-center justify-center !px-0",
940
+ onclick: (event) => {
941
+ event.preventDefault();
942
+ void handleGenerateUserResponse();
943
+ },
944
+ children: ($$renderer5) => {
914
945
  Icon($$renderer5, { name: "sparkles" });
915
- } else {
916
- $$renderer5.push("<!--[-1-->");
946
+ },
947
+ $$slots: { default: true }
948
+ });
949
+ } else {
950
+ $$renderer4.push("<!--[-1-->");
951
+ Button($$renderer4, {
952
+ size: "small",
953
+ type: "submit",
954
+ title: sendRole === "system" ? "Send as system" : "Send as user",
955
+ "aria-label": sendRole === "system" ? "Send as system" : "Send as user",
956
+ disabled: aiGenerating,
957
+ class: "inline-flex !w-[59px] items-center justify-center !px-0",
958
+ children: ($$renderer5) => {
917
959
  Icon($$renderer5, { name: "send" });
918
- }
919
- $$renderer5.push(`<!--]-->`);
920
- },
921
- $$slots: { default: true }
922
- });
923
- $$renderer4.push(`<!----></fieldset></form>`);
960
+ },
961
+ $$slots: { default: true }
962
+ });
963
+ }
964
+ $$renderer4.push(`<!--]--></fieldset></form>`);
924
965
  }
925
966
  $$renderer4.push(`<!--]-->`);
926
967
  }
@@ -944,6 +985,10 @@ function _page($$renderer, $$props) {
944
985
  let copyTimer = null;
945
986
  let copyMenuOpen = false;
946
987
  let copyMenuAnchorEl = null;
988
+ const canGenerateVariants = derived(() => {
989
+ const latestStateId = workspace.agentStates.at(-1)?.id ?? null;
990
+ return !!latestStateId && workspace.currentState === latestStateId;
991
+ });
947
992
  function agentLabel(agentId) {
948
993
  const label = (agentId || "").trim();
949
994
  if (!label) return "Agent";
@@ -1051,34 +1096,44 @@ function _page($$renderer, $$props) {
1051
1096
  actions.closeContextPopover();
1052
1097
  actions.selectState(null);
1053
1098
  }
1054
- function parseUserMessageHeader(raw) {
1099
+ function parseStoredInputMessage(raw, sender = "user") {
1055
1100
  const trimmed = String(raw ?? "").trim();
1056
1101
  if (!trimmed) return null;
1057
1102
  const m = /^\[image\]\s+(.+)$/.exec(trimmed);
1058
1103
  if (m) {
1059
1104
  const url = (m[1] ?? "").trim();
1060
1105
  if (!url) return null;
1061
- return { text: "", imageUrl: url };
1106
+ return { sender, text: "", imageUrl: url };
1062
1107
  }
1063
- return { text: trimmed };
1108
+ return { sender, text: trimmed };
1109
+ }
1110
+ function normalizeInputSender(raw) {
1111
+ return raw === "system" ? "system" : "user";
1064
1112
  }
1065
1113
  function handleRegenerateTrace(trace) {
1066
1114
  clearVariantMode();
1067
1115
  const rawPrevStateId = trace?.bosunPrevStateId;
1068
1116
  const prevStateId = typeof rawPrevStateId === "string" && rawPrevStateId.trim() ? rawPrevStateId : null;
1069
1117
  const rawUserMessage = typeof trace?.bosunUserMessage === "string" && trace.bosunUserMessage || null;
1070
- let message = rawUserMessage ? parseUserMessageHeader(rawUserMessage) : null;
1118
+ const traceSender = normalizeInputSender(trace?.bosunInputMessageSender);
1119
+ let message = rawUserMessage ? parseStoredInputMessage(rawUserMessage, traceSender) : null;
1071
1120
  if (!message) {
1072
1121
  const traceStateId = trace?.bosunStateId;
1073
1122
  if (typeof traceStateId === "string" && traceStateId.trim()) {
1074
1123
  const state = workspace.agentStates.find((s) => s.id === traceStateId);
1075
- message = parseUserMessageHeader(state?.userMessage ?? "");
1124
+ message = parseStoredInputMessage(state?.userMessage ?? "", normalizeInputSender(state?.userMessageSender));
1076
1125
  }
1077
1126
  }
1078
- if (!message) return;
1127
+ if (!message) {
1128
+ if (rawPrevStateId === void 0) {
1129
+ throw new Error("Cannot regenerate: this response has no saved state metadata");
1130
+ }
1131
+ actions.selectState(prevStateId);
1132
+ return;
1133
+ }
1079
1134
  actions.selectState(prevStateId);
1080
1135
  actions.sendChatMessage({
1081
- sender: "user",
1136
+ sender: message.sender,
1082
1137
  text: message.text,
1083
1138
  imageUrl: message.imageUrl
1084
1139
  });
@@ -1093,26 +1148,25 @@ function _page($$renderer, $$props) {
1093
1148
  if (typeof prompt !== "string") return null;
1094
1149
  return { step: stepName, prompt };
1095
1150
  }
1096
- function rawUserMessageForTrace(trace) {
1097
- const rawUserMessage = typeof trace?.bosunUserMessage === "string" ? trace.bosunUserMessage : null;
1098
- if (rawUserMessage && rawUserMessage.trim()) return rawUserMessage;
1099
- const traceStateId = trace?.bosunStateId;
1100
- if (typeof traceStateId !== "string" || !traceStateId.trim()) return null;
1101
- const state = workspace.agentStates.find((entry) => entry.id === traceStateId);
1102
- const candidate = typeof state?.userMessage === "string" ? state.userMessage.trim() : "";
1103
- return candidate || null;
1151
+ function agentContextForVariant(trace) {
1152
+ const idx = chatContent.indexOf(trace);
1153
+ const stepTrace = idx === -1 ? null : findMainStepTraceNear(chatContent, idx);
1154
+ if (stepTrace && typeof stepTrace.receivedContext !== "undefined") {
1155
+ return cloneRecord(stepTrace.receivedContext);
1156
+ }
1157
+ return agentContextFromRuntime(workspace.context);
1158
+ }
1159
+ function bosunRuntimeContextForVariant(trace) {
1160
+ const context = agentContextForVariant(trace);
1161
+ const mocks = mocksFromRuntime(workspace.context);
1162
+ return mocks ? { context, mocks } : context;
1104
1163
  }
1105
1164
  async function requestVariants(trace) {
1106
- const targetStateId = typeof trace?.bosunStateId === "string" && trace.bosunStateId.trim() ? trace.bosunStateId.trim() : null;
1107
- if (!workspace.agentId || !targetStateId) return;
1108
- const rawUserMessage = rawUserMessageForTrace(trace);
1109
- if (!rawUserMessage) return;
1110
- const prevStateId = typeof trace?.bosunPrevStateId === "string" && trace.bosunPrevStateId.trim() ? trace.bosunPrevStateId.trim() : null;
1165
+ if (!workspace.agentId) return;
1111
1166
  const promptUpdate = currentVariantPromptUpdate();
1112
1167
  await actions.flushPromptSave();
1113
1168
  variantMode = {
1114
1169
  sourceTrace: trace,
1115
- targetStateId,
1116
1170
  choices: [],
1117
1171
  loading: true,
1118
1172
  applyingId: null,
@@ -1122,17 +1176,15 @@ function _page($$renderer, $$props) {
1122
1176
  const choices = await trpc.agents.generateVariants.mutate({
1123
1177
  agentId: workspace.agentId,
1124
1178
  region: workspace.region,
1125
- prevStateId,
1126
- rawUserMessage,
1127
- context: workspace.context,
1179
+ context: bosunRuntimeContextForVariant(trace),
1128
1180
  promptUpdate,
1129
1181
  count: 9
1130
1182
  });
1131
- if (!variantMode || variantMode.sourceTrace !== trace || variantMode.targetStateId !== targetStateId) return;
1183
+ if (!variantMode || variantMode.sourceTrace !== trace) return;
1132
1184
  variantMode = { ...variantMode, choices, loading: false, error: null };
1133
1185
  } catch (error) {
1134
1186
  console.error("Failed to generate variants", error);
1135
- if (!variantMode || variantMode.sourceTrace !== trace || variantMode.targetStateId !== targetStateId) return;
1187
+ if (!variantMode || variantMode.sourceTrace !== trace) return;
1136
1188
  variantMode = {
1137
1189
  ...variantMode,
1138
1190
  choices: [],
@@ -1161,7 +1213,6 @@ function _page($$renderer, $$props) {
1161
1213
  await trpc.agents.commitVariant.mutate({
1162
1214
  agentId: workspace.agentId,
1163
1215
  region: workspace.region,
1164
- targetStateId: variantMode.targetStateId,
1165
1216
  state: choice.state
1166
1217
  });
1167
1218
  clearVariantMode();
@@ -1342,7 +1393,7 @@ function _page($$renderer, $$props) {
1342
1393
  onAnalyzeTrace: handleAnalyzeTrace,
1343
1394
  onRegenerateTrace: handleRegenerateTrace,
1344
1395
  onRevertToState: (stateId) => actions.selectState(stateId),
1345
- onSeeVariants: handleSeeVariants,
1396
+ onSeeVariants: canGenerateVariants() ? handleSeeVariants : void 0,
1346
1397
  onHangup: handleHangup,
1347
1398
  variantSourceTrace: variantMode?.sourceTrace ?? null,
1348
1399
  variantChoices: variantMode?.choices ?? [],
@@ -1368,4 +1419,4 @@ function _page($$renderer, $$props) {
1368
1419
  }
1369
1420
 
1370
1421
  export { _page as default };
1371
- //# sourceMappingURL=_page.svelte-CA3-vgl2.js.map
1422
+ //# sourceMappingURL=_page.svelte-Cxh9_vUl.js.map