@recombine-ai/bosun 0.12.1 → 0.13.0

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 (225) hide show
  1. package/build/client/_app/immutable/assets/0.B-Br6U4N.css +1 -0
  2. package/build/client/_app/immutable/assets/0.B-Br6U4N.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.B-Br6U4N.css.gz +0 -0
  4. package/build/client/_app/immutable/chunks/{D0wo6ydM.js → BOuo-4gP.js} +1 -1
  5. package/build/client/_app/immutable/chunks/BOuo-4gP.js.br +0 -0
  6. package/build/client/_app/immutable/chunks/BOuo-4gP.js.gz +0 -0
  7. package/build/client/_app/immutable/chunks/Cyj62X2W.js +2 -0
  8. package/build/client/_app/immutable/chunks/Cyj62X2W.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/Cyj62X2W.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/{DThbydRF.js → DSDSeO7L.js} +1 -1
  11. package/build/client/_app/immutable/chunks/DSDSeO7L.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/DSDSeO7L.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/{BsXicvii.js → De8YgKS3.js} +1 -1
  14. package/build/client/_app/immutable/chunks/De8YgKS3.js.br +1 -0
  15. package/build/client/_app/immutable/chunks/De8YgKS3.js.gz +0 -0
  16. package/build/client/_app/immutable/entry/{app.CXVcy7KZ.js → app.DK_wVDeR.js} +2 -2
  17. package/build/client/_app/immutable/entry/app.DK_wVDeR.js.br +0 -0
  18. package/build/client/_app/immutable/entry/app.DK_wVDeR.js.gz +0 -0
  19. package/build/client/_app/immutable/entry/start.xQy-2aGo.js +1 -0
  20. package/build/client/_app/immutable/entry/start.xQy-2aGo.js.br +2 -0
  21. package/build/client/_app/immutable/entry/start.xQy-2aGo.js.gz +0 -0
  22. package/build/client/_app/immutable/nodes/{0.Bw5H_3Yi.js → 0.5fEbn14Q.js} +1 -1
  23. package/build/client/_app/immutable/nodes/0.5fEbn14Q.js.br +0 -0
  24. package/build/client/_app/immutable/nodes/0.5fEbn14Q.js.gz +0 -0
  25. package/build/client/_app/immutable/nodes/{1.I6bcxSHO.js → 1.CJrSN8zL.js} +1 -1
  26. package/build/client/_app/immutable/nodes/1.CJrSN8zL.js.br +0 -0
  27. package/build/client/_app/immutable/nodes/1.CJrSN8zL.js.gz +0 -0
  28. package/build/client/_app/immutable/nodes/10.SZwTlOEA.js +12 -0
  29. package/build/client/_app/immutable/nodes/10.SZwTlOEA.js.br +0 -0
  30. package/build/client/_app/immutable/nodes/10.SZwTlOEA.js.gz +0 -0
  31. package/build/client/_app/immutable/nodes/{17.CKhOYbTb.js → 17.D-KFl7Vk.js} +1 -1
  32. package/build/client/_app/immutable/nodes/17.D-KFl7Vk.js.br +0 -0
  33. package/build/client/_app/immutable/nodes/17.D-KFl7Vk.js.gz +0 -0
  34. package/build/client/_app/immutable/nodes/18.DqRdJY9A.js +11 -0
  35. package/build/client/_app/immutable/nodes/18.DqRdJY9A.js.br +0 -0
  36. package/build/client/_app/immutable/nodes/18.DqRdJY9A.js.gz +0 -0
  37. package/build/client/_app/immutable/nodes/{2.DvX0h28l.js → 2.B3Uuk25v.js} +1 -1
  38. package/build/client/_app/immutable/nodes/2.B3Uuk25v.js.br +0 -0
  39. package/build/client/_app/immutable/nodes/2.B3Uuk25v.js.gz +0 -0
  40. package/build/client/_app/immutable/nodes/{3.CGA5hdam.js → 3.B1RGTOJ8.js} +1 -1
  41. package/build/client/_app/immutable/nodes/3.B1RGTOJ8.js.br +0 -0
  42. package/build/client/_app/immutable/nodes/3.B1RGTOJ8.js.gz +0 -0
  43. package/build/client/_app/immutable/nodes/{4.DRd9UCon.js → 4.D2jcIUpD.js} +1 -1
  44. package/build/client/_app/immutable/nodes/4.D2jcIUpD.js.br +0 -0
  45. package/build/client/_app/immutable/nodes/4.D2jcIUpD.js.gz +0 -0
  46. package/build/client/_app/immutable/nodes/{5.QJyyKWtD.js → 5.CUyCIyRd.js} +1 -1
  47. package/build/client/_app/immutable/nodes/5.CUyCIyRd.js.br +0 -0
  48. package/build/client/_app/immutable/nodes/5.CUyCIyRd.js.gz +0 -0
  49. package/build/client/_app/immutable/nodes/{6.DBbtH8p6.js → 6.B8HsGA2V.js} +1 -1
  50. package/build/client/_app/immutable/nodes/6.B8HsGA2V.js.br +0 -0
  51. package/build/client/_app/immutable/nodes/6.B8HsGA2V.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/{8._Ge9D6mw.js → 8.jY56-_OU.js} +1 -1
  53. package/build/client/_app/immutable/nodes/8.jY56-_OU.js.br +0 -0
  54. package/build/client/_app/immutable/nodes/8.jY56-_OU.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/9.v5dX6L9n.js +2 -0
  56. package/build/client/_app/immutable/nodes/9.v5dX6L9n.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/9.v5dX6L9n.js.gz +0 -0
  58. package/build/client/_app/version.json +1 -1
  59. package/build/client/_app/version.json.br +0 -0
  60. package/build/client/_app/version.json.gz +0 -0
  61. package/build/server/chunks/{0-B8IphDS9.js → 0-4QCErf9j.js} +4 -4
  62. package/build/server/chunks/{0-B8IphDS9.js.map → 0-4QCErf9j.js.map} +1 -1
  63. package/build/server/chunks/{1-BoV_CoNT.js → 1-Dsjy8Hzc.js} +3 -3
  64. package/build/server/chunks/{1-BoV_CoNT.js.map → 1-Dsjy8Hzc.js.map} +1 -1
  65. package/build/server/chunks/{10-WFJ6JJF8.js → 10-8061c8ui.js} +3 -3
  66. package/build/server/chunks/{10-WFJ6JJF8.js.map → 10-8061c8ui.js.map} +1 -1
  67. package/build/server/chunks/{15-BMEAVslz.js → 15-BRw8wtLp.js} +2 -2
  68. package/build/server/chunks/{15-BMEAVslz.js.map → 15-BRw8wtLp.js.map} +1 -1
  69. package/build/server/chunks/{17-aUXWTAiC.js → 17-3_5wsIEX.js} +3 -3
  70. package/build/server/chunks/{17-aUXWTAiC.js.map → 17-3_5wsIEX.js.map} +1 -1
  71. package/build/server/chunks/{18-BNN3EZNX.js → 18-D73Mw140.js} +3 -3
  72. package/build/server/chunks/{18-BNN3EZNX.js.map → 18-D73Mw140.js.map} +1 -1
  73. package/build/server/chunks/{2-DBakpxTW.js → 2-DM0VjzFi.js} +3 -3
  74. package/build/server/chunks/{2-DBakpxTW.js.map → 2-DM0VjzFi.js.map} +1 -1
  75. package/build/server/chunks/{3-BUt-0hHy.js → 3-B3zlFGkL.js} +3 -3
  76. package/build/server/chunks/{3-BUt-0hHy.js.map → 3-B3zlFGkL.js.map} +1 -1
  77. package/build/server/chunks/{4-MPLwROF1.js → 4-tESdMZpI.js} +3 -3
  78. package/build/server/chunks/{4-MPLwROF1.js.map → 4-tESdMZpI.js.map} +1 -1
  79. package/build/server/chunks/{5-CIV1pPT6.js → 5-BJMTlq4U.js} +3 -3
  80. package/build/server/chunks/{5-CIV1pPT6.js.map → 5-BJMTlq4U.js.map} +1 -1
  81. package/build/server/chunks/{6-DGec6RWd.js → 6-CDK2Aia6.js} +3 -3
  82. package/build/server/chunks/{6-DGec6RWd.js.map → 6-CDK2Aia6.js.map} +1 -1
  83. package/build/server/chunks/{8-F6UXMyct.js → 8-BJbDytoU.js} +3 -3
  84. package/build/server/chunks/{8-F6UXMyct.js.map → 8-BJbDytoU.js.map} +1 -1
  85. package/build/server/chunks/{9-DtsG_8TJ.js → 9-BNfIeSqk.js} +3 -3
  86. package/build/server/chunks/{9-DtsG_8TJ.js.map → 9-BNfIeSqk.js.map} +1 -1
  87. package/build/server/chunks/{AgentSidebar-DvIlda-E.js → AgentSidebar-C--dGIV5.js} +4 -4
  88. package/build/server/chunks/{AgentSidebar-DvIlda-E.js.map → AgentSidebar-C--dGIV5.js.map} +1 -1
  89. package/build/server/chunks/{Button-BLigKkGG.js → Button-oIUr2LUP.js} +2 -2
  90. package/build/server/chunks/{Button-BLigKkGG.js.map → Button-oIUr2LUP.js.map} +1 -1
  91. package/build/server/chunks/{ChatStepTrace-CqqIjRLU.js → ChatStepTrace-DQL3qlna.js} +84 -13
  92. package/build/server/chunks/ChatStepTrace-DQL3qlna.js.map +1 -0
  93. package/build/server/chunks/{ContextEditor-D5B2mO8Z.js → ContextEditor-ngRBOJVc.js} +4 -4
  94. package/build/server/chunks/{ContextEditor-D5B2mO8Z.js.map → ContextEditor-ngRBOJVc.js.map} +1 -1
  95. package/build/server/chunks/{Dropdown-7dp1qEYv.js → Dropdown-DfCyYHqi.js} +2 -2
  96. package/build/server/chunks/{Dropdown-7dp1qEYv.js.map → Dropdown-DfCyYHqi.js.map} +1 -1
  97. package/build/server/chunks/{Icon-CXFHkSIr.js → Icon-DadJPtVP.js} +2 -2
  98. package/build/server/chunks/{Icon-CXFHkSIr.js.map → Icon-DadJPtVP.js.map} +1 -1
  99. package/build/server/chunks/{Input-OdQKNdS6.js → Input-R74u4cO5.js} +2 -2
  100. package/build/server/chunks/{Input-OdQKNdS6.js.map → Input-R74u4cO5.js.map} +1 -1
  101. package/build/server/chunks/{Modal-DtVsRmmO.js → Modal-CAzVFw5x.js} +4 -4
  102. package/build/server/chunks/Modal-CAzVFw5x.js.map +1 -0
  103. package/build/server/chunks/{Tab-CD1H0E3P.js → Tab-D13L_Up5.js} +4 -4
  104. package/build/server/chunks/{Tab-CD1H0E3P.js.map → Tab-D13L_Up5.js.map} +1 -1
  105. package/build/server/chunks/{_layout.svelte-B-CkD4a0.js → _layout.svelte-BIMexfnk.js} +128 -15
  106. package/build/server/chunks/_layout.svelte-BIMexfnk.js.map +1 -0
  107. package/build/server/chunks/{_layout.svelte-C5eqrEen.js → _layout.svelte-D4EOIHJJ.js} +8 -8
  108. package/build/server/chunks/_layout.svelte-D4EOIHJJ.js.map +1 -0
  109. package/build/server/chunks/{_layout.svelte-BBFCF-xw.js → _layout.svelte-DK7yl8vI.js} +17 -17
  110. package/build/server/chunks/_layout.svelte-DK7yl8vI.js.map +1 -0
  111. package/build/server/chunks/{_layout.svelte-cPhmW5bZ.js → _layout.svelte-Dk-9LkfL.js} +10 -10
  112. package/build/server/chunks/_layout.svelte-Dk-9LkfL.js.map +1 -0
  113. package/build/server/chunks/{_page.svelte-_sXVlB3C.js → _page.svelte-BTKQMuSz.js} +88 -37
  114. package/build/server/chunks/_page.svelte-BTKQMuSz.js.map +1 -0
  115. package/build/server/chunks/{_page.svelte-DbV3HGn5.js → _page.svelte-CeO_ScC8.js} +2 -2
  116. package/build/server/chunks/{_page.svelte-DbV3HGn5.js.map → _page.svelte-CeO_ScC8.js.map} +1 -1
  117. package/build/server/chunks/{_page.svelte-BYVcy49A.js → _page.svelte-Cu8a_kUO.js} +4 -4
  118. package/build/server/chunks/{_page.svelte-BYVcy49A.js.map → _page.svelte-Cu8a_kUO.js.map} +1 -1
  119. package/build/server/chunks/{_page.svelte-BgoX8Y6N.js → _page.svelte-D5S0QjlI.js} +12 -12
  120. package/build/server/chunks/_page.svelte-D5S0QjlI.js.map +1 -0
  121. package/build/server/chunks/{_page.svelte-0J2xaeyC.js → _page.svelte-D6bSXGHX.js} +21 -172
  122. package/build/server/chunks/_page.svelte-D6bSXGHX.js.map +1 -0
  123. package/build/server/chunks/{_page.svelte-CqGOvPRO.js → _page.svelte-YoDx7gDL.js} +6 -6
  124. package/build/server/chunks/{_page.svelte-CqGOvPRO.js.map → _page.svelte-YoDx7gDL.js.map} +1 -1
  125. package/build/server/chunks/{_page.svelte-Cxh9_vUl.js → _page.svelte-ZWNBigwS.js} +15 -12
  126. package/build/server/chunks/_page.svelte-ZWNBigwS.js.map +1 -0
  127. package/build/server/chunks/{_page.svelte-C_S_qUgZ.js → _page.svelte-ej3vdYeF.js} +10 -10
  128. package/build/server/chunks/{_page.svelte-C_S_qUgZ.js.map → _page.svelte-ej3vdYeF.js.map} +1 -1
  129. package/build/server/chunks/{agents-context-rV2narXG.js → agents-context-w03Lz_6n.js} +2 -2
  130. package/build/server/chunks/{agents-context-rV2narXG.js.map → agents-context-w03Lz_6n.js.map} +1 -1
  131. package/build/server/chunks/client-WFEvX_be.js +33 -0
  132. package/build/server/chunks/client-WFEvX_be.js.map +1 -0
  133. package/build/server/chunks/{conversation-view-memory-BZguFlTt.js → conversation-view-memory-B0PllWRL.js} +2 -2
  134. package/build/server/chunks/{conversation-view-memory-BZguFlTt.js.map → conversation-view-memory-B0PllWRL.js.map} +1 -1
  135. package/build/server/chunks/{edit-workspace-context-B1nYQ5hD.js → edit-workspace-context-BEioXKWB.js} +2 -2
  136. package/build/server/chunks/{edit-workspace-context-B1nYQ5hD.js.map → edit-workspace-context-BEioXKWB.js.map} +1 -1
  137. package/build/server/chunks/error.svelte-BjIDhioc.js +15 -0
  138. package/build/server/chunks/{error.svelte-DA-yulF5.js.map → error.svelte-BjIDhioc.js.map} +1 -1
  139. package/build/server/chunks/{index-CSpGrMM2.js → index-rHCWxLFZ.js} +5 -5
  140. package/build/server/chunks/{index-CSpGrMM2.js.map → index-rHCWxLFZ.js.map} +1 -1
  141. package/build/server/chunks/{index-server-DsYEXu5n.js → index-server-BMxlf3ZC.js} +2 -2
  142. package/build/server/chunks/{index-server-DsYEXu5n.js.map → index-server-BMxlf3ZC.js.map} +1 -1
  143. package/build/server/chunks/index2-DdOgqE2_.js +24 -0
  144. package/build/server/chunks/index2-DdOgqE2_.js.map +1 -0
  145. package/build/server/chunks/{index3-qVi61CNf.js → index3-DC4GTqD1.js} +2 -2
  146. package/build/server/chunks/{index3-qVi61CNf.js.map → index3-DC4GTqD1.js.map} +1 -1
  147. package/build/server/chunks/{root-CDJwhpIB.js → root-UeqiktJA.js} +118 -4
  148. package/build/server/chunks/root-UeqiktJA.js.map +1 -0
  149. package/build/server/chunks/{state.svelte-DT7cgvTK.js → state.svelte-CLOYXiU6.js} +3 -3
  150. package/build/server/chunks/{state.svelte-DT7cgvTK.js.map → state.svelte-CLOYXiU6.js.map} +1 -1
  151. package/build/server/index.js +10 -11
  152. package/build/server/index.js.map +1 -1
  153. package/build/server/manifest.js +14 -14
  154. package/build/server/manifest.js.map +1 -1
  155. package/package.json +2 -2
  156. package/src/backend/tests/academy-json.spec.ts +65 -0
  157. package/src/backend/tests/academy.ts +83 -46
  158. package/src/backend/tests/data.ts +6 -2
  159. package/src/backend/tests/emulate-agents.ts +40 -4
  160. package/src/backend/tests/json-field-match.ts +73 -0
  161. package/src/backend/tests/router.ts +5 -1
  162. package/src/backend/tests/suite.spec.ts +54 -0
  163. package/src/backend/tests/suite.ts +20 -11
  164. package/build/client/_app/immutable/assets/0.CH-WU4JN.css +0 -1
  165. package/build/client/_app/immutable/assets/0.CH-WU4JN.css.br +0 -0
  166. package/build/client/_app/immutable/assets/0.CH-WU4JN.css.gz +0 -0
  167. package/build/client/_app/immutable/chunks/Bq2S1bnB.js +0 -3
  168. package/build/client/_app/immutable/chunks/Bq2S1bnB.js.br +0 -0
  169. package/build/client/_app/immutable/chunks/Bq2S1bnB.js.gz +0 -0
  170. package/build/client/_app/immutable/chunks/BsXicvii.js.br +0 -0
  171. package/build/client/_app/immutable/chunks/BsXicvii.js.gz +0 -0
  172. package/build/client/_app/immutable/chunks/D0wo6ydM.js.br +0 -0
  173. package/build/client/_app/immutable/chunks/D0wo6ydM.js.gz +0 -0
  174. package/build/client/_app/immutable/chunks/DThbydRF.js.br +0 -0
  175. package/build/client/_app/immutable/chunks/DThbydRF.js.gz +0 -0
  176. package/build/client/_app/immutable/entry/app.CXVcy7KZ.js.br +0 -0
  177. package/build/client/_app/immutable/entry/app.CXVcy7KZ.js.gz +0 -0
  178. package/build/client/_app/immutable/entry/start.D7WtvWtc.js +0 -1
  179. package/build/client/_app/immutable/entry/start.D7WtvWtc.js.br +0 -2
  180. package/build/client/_app/immutable/entry/start.D7WtvWtc.js.gz +0 -0
  181. package/build/client/_app/immutable/nodes/0.Bw5H_3Yi.js.br +0 -0
  182. package/build/client/_app/immutable/nodes/0.Bw5H_3Yi.js.gz +0 -0
  183. package/build/client/_app/immutable/nodes/1.I6bcxSHO.js.br +0 -0
  184. package/build/client/_app/immutable/nodes/1.I6bcxSHO.js.gz +0 -0
  185. package/build/client/_app/immutable/nodes/10.DTobYgy4.js +0 -7
  186. package/build/client/_app/immutable/nodes/10.DTobYgy4.js.br +0 -0
  187. package/build/client/_app/immutable/nodes/10.DTobYgy4.js.gz +0 -0
  188. package/build/client/_app/immutable/nodes/17.CKhOYbTb.js.br +0 -0
  189. package/build/client/_app/immutable/nodes/17.CKhOYbTb.js.gz +0 -0
  190. package/build/client/_app/immutable/nodes/18.DWPgk8Ie.js +0 -11
  191. package/build/client/_app/immutable/nodes/18.DWPgk8Ie.js.br +0 -0
  192. package/build/client/_app/immutable/nodes/18.DWPgk8Ie.js.gz +0 -0
  193. package/build/client/_app/immutable/nodes/2.DvX0h28l.js.br +0 -0
  194. package/build/client/_app/immutable/nodes/2.DvX0h28l.js.gz +0 -0
  195. package/build/client/_app/immutable/nodes/3.CGA5hdam.js.br +0 -0
  196. package/build/client/_app/immutable/nodes/3.CGA5hdam.js.gz +0 -0
  197. package/build/client/_app/immutable/nodes/4.DRd9UCon.js.br +0 -0
  198. package/build/client/_app/immutable/nodes/4.DRd9UCon.js.gz +0 -0
  199. package/build/client/_app/immutable/nodes/5.QJyyKWtD.js.br +0 -0
  200. package/build/client/_app/immutable/nodes/5.QJyyKWtD.js.gz +0 -0
  201. package/build/client/_app/immutable/nodes/6.DBbtH8p6.js.br +0 -0
  202. package/build/client/_app/immutable/nodes/6.DBbtH8p6.js.gz +0 -0
  203. package/build/client/_app/immutable/nodes/8._Ge9D6mw.js.br +0 -0
  204. package/build/client/_app/immutable/nodes/8._Ge9D6mw.js.gz +0 -0
  205. package/build/client/_app/immutable/nodes/9.LIqPsMWp.js +0 -2
  206. package/build/client/_app/immutable/nodes/9.LIqPsMWp.js.br +0 -0
  207. package/build/client/_app/immutable/nodes/9.LIqPsMWp.js.gz +0 -0
  208. package/build/server/chunks/ChatStepTrace-CqqIjRLU.js.map +0 -1
  209. package/build/server/chunks/MockGenerator-GEpXTgX0.js +0 -117
  210. package/build/server/chunks/MockGenerator-GEpXTgX0.js.map +0 -1
  211. package/build/server/chunks/Modal-DtVsRmmO.js.map +0 -1
  212. package/build/server/chunks/_layout.svelte-B-CkD4a0.js.map +0 -1
  213. package/build/server/chunks/_layout.svelte-BBFCF-xw.js.map +0 -1
  214. package/build/server/chunks/_layout.svelte-C5eqrEen.js.map +0 -1
  215. package/build/server/chunks/_layout.svelte-cPhmW5bZ.js.map +0 -1
  216. package/build/server/chunks/_page.svelte-0J2xaeyC.js.map +0 -1
  217. package/build/server/chunks/_page.svelte-BgoX8Y6N.js.map +0 -1
  218. package/build/server/chunks/_page.svelte-Cxh9_vUl.js.map +0 -1
  219. package/build/server/chunks/_page.svelte-_sXVlB3C.js.map +0 -1
  220. package/build/server/chunks/error.svelte-DA-yulF5.js +0 -15
  221. package/build/server/chunks/events-BQ65tUJo.js +0 -120
  222. package/build/server/chunks/events-BQ65tUJo.js.map +0 -1
  223. package/build/server/chunks/index2-DO4B3D-P.js +0 -52
  224. package/build/server/chunks/index2-DO4B3D-P.js.map +0 -1
  225. package/build/server/chunks/root-CDJwhpIB.js.map +0 -1
@@ -0,0 +1,73 @@
1
+ import { isDeepStrictEqual } from 'node:util'
2
+
3
+ type MatchResult = { pass: true } | { pass: false; reason: string }
4
+
5
+ function isRecord(value: unknown): value is Record<string, unknown> {
6
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
7
+ }
8
+
9
+ function matchExpectedJsonFields(actual: unknown, expected: unknown, path = '$'): MatchResult {
10
+ if (isRecord(expected)) {
11
+ if (!isRecord(actual)) return { pass: false, reason: `Expected an object at ${path}` }
12
+
13
+ for (const [key, expectedValue] of Object.entries(expected)) {
14
+ if (!Object.prototype.hasOwnProperty.call(actual, key)) {
15
+ return { pass: false, reason: `Missing expected field ${path}.${key}` }
16
+ }
17
+ const result = matchExpectedJsonFields(actual[key], expectedValue, `${path}.${key}`)
18
+ if (!result.pass) return result
19
+ }
20
+ return { pass: true }
21
+ }
22
+
23
+ if (Array.isArray(expected)) {
24
+ if (!Array.isArray(actual)) return { pass: false, reason: `Expected an array at ${path}` }
25
+ if (actual.length !== expected.length) {
26
+ return {
27
+ pass: false,
28
+ reason: `Expected ${expected.length} array items at ${path}, received ${actual.length}`
29
+ }
30
+ }
31
+ for (let index = 0; index < expected.length; index += 1) {
32
+ const result = matchExpectedJsonFields(actual[index], expected[index], `${path}[${index}]`)
33
+ if (!result.pass) return result
34
+ }
35
+ return { pass: true }
36
+ }
37
+
38
+ return isDeepStrictEqual(actual, expected)
39
+ ? { pass: true }
40
+ : { pass: false, reason: `Value differs at ${path}` }
41
+ }
42
+
43
+ export function gradeJsonExpectedFields(output: string, expectedOutput: string) {
44
+ let actual: unknown
45
+ let expected: unknown
46
+ try {
47
+ expected = JSON.parse(expectedOutput)
48
+ } catch (error) {
49
+ return {
50
+ pass: false,
51
+ score: 0,
52
+ reason: `Expected step output is not valid JSON: ${error instanceof Error ? error.message : String(error)}`
53
+ }
54
+ }
55
+ try {
56
+ actual = JSON.parse(output)
57
+ } catch (error) {
58
+ return {
59
+ pass: false,
60
+ score: 0,
61
+ reason: `Actual step output is not valid JSON: ${error instanceof Error ? error.message : String(error)}`
62
+ }
63
+ }
64
+
65
+ const result = matchExpectedJsonFields(actual, expected)
66
+ return {
67
+ pass: result.pass,
68
+ score: result.pass ? 1 : 0,
69
+ reason: result.pass
70
+ ? 'All expected JSON fields match the step output'
71
+ : `Step output does not match the expected JSON fields: ${result.reason}`
72
+ }
73
+ }
@@ -293,6 +293,7 @@ export function createTestsRouter(t: TRPCRootObject<TrpcContext, any, any>) {
293
293
  .object({
294
294
  agent: z.string(),
295
295
  region: z.string().nullish(),
296
+ step: z.string(),
296
297
  scope: z.enum(['pinned', 'all']).optional()
297
298
  })
298
299
  .strict(),
@@ -310,7 +311,10 @@ export function createTestsRouter(t: TRPCRootObject<TrpcContext, any, any>) {
310
311
  if ('testId' in input) {
311
312
  return runPromptTestsManaged(selection, { testId: input.testId })
312
313
  }
313
- return runPromptTestsManaged(selection, { scope: input.scope ?? 'pinned' })
314
+ return runPromptTestsManaged(selection, {
315
+ scope: input.scope ?? 'pinned',
316
+ step: input.step
317
+ })
314
318
  }),
315
319
  cancelRun: t.procedure
316
320
  .input(z.object({ agent: z.string(), region: z.string().nullish() }))
@@ -0,0 +1,54 @@
1
+ import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'
2
+ import os from 'node:os'
3
+ import path from 'node:path'
4
+ import { afterEach, describe, expect, it, vi } from 'vitest'
5
+
6
+ const root = vi.hoisted(() => ({ path: '' }))
7
+
8
+ vi.mock('../lib/get-root-path', () => ({ getRootPath: async () => root.path }))
9
+
10
+ import { readSuite } from './suite'
11
+
12
+ const temporaryDirectories: string[] = []
13
+
14
+ afterEach(async () => {
15
+ await Promise.all(temporaryDirectories.splice(0).map((dir) => rm(dir, { recursive: true })))
16
+ })
17
+
18
+ describe('test suite migration', () => {
19
+ it('moves every version-one test to main and removes final capture mode', async () => {
20
+ const dir = await mkdtemp(path.join(os.tmpdir(), 'bosun-suite-migration-'))
21
+ temporaryDirectories.push(dir)
22
+ root.path = path.join(dir, 'index.ts')
23
+ const suitePath = path.join(dir, 'agent.tests.jsonl')
24
+ await writeFile(
25
+ suitePath,
26
+ [
27
+ JSON.stringify({ version: 1, meta: {} }),
28
+ JSON.stringify({
29
+ id: 'old',
30
+ pinned: 'TRUE',
31
+ scenario: 'Old test',
32
+ step: 'experimental-step',
33
+ assertion_type: 'llm-rubric',
34
+ assertion_value: '',
35
+ conversation: 'User: hello',
36
+ expected_output: 'Hello',
37
+ capture_mode: 'final',
38
+ timeout: '0',
39
+ similarity_threshold: '50',
40
+ context: {}
41
+ })
42
+ ].join('\n') + '\n'
43
+ )
44
+
45
+ const suite = await readSuite('agent')
46
+
47
+ expect(suite.version).toBe(2)
48
+ expect(suite.tests[0]).toMatchObject({ step: 'main', evaluation_mode: 'assertion' })
49
+ expect(suite.tests[0]).not.toHaveProperty('capture_mode')
50
+ const persisted = await readFile(suitePath, 'utf8')
51
+ expect(JSON.parse(persisted.split('\n')[0])).toMatchObject({ version: 2 })
52
+ expect(persisted).not.toContain('capture_mode')
53
+ })
54
+ })
@@ -14,7 +14,8 @@ export const TestRowSchema = z.object({
14
14
  assertion_value: z.string(),
15
15
  conversation: z.string(),
16
16
  expected_output: z.string(),
17
- capture_mode: z.enum(['immediate', 'final']).optional(),
17
+ evaluation_mode: z.enum(['assertion', 'json-deep-equal']).optional(),
18
+ context_mode: z.enum(['merge', 'replace']).optional(),
18
19
  timeout: z.string(),
19
20
  similarity_threshold: z.string(),
20
21
  context: z.record(z.unknown()),
@@ -28,7 +29,7 @@ export const SuiteMetaSchema = z.object({
28
29
  })
29
30
 
30
31
  export const TestSuiteSchema = z.object({
31
- version: z.literal(1),
32
+ version: z.literal(2),
32
33
  meta: SuiteMetaSchema.optional(),
33
34
  tests: z.array(TestRowSchema)
34
35
  })
@@ -75,20 +76,28 @@ export async function readSuite(agent: string): Promise<TestSuite> {
75
76
  const raw = await readFile(jsonlPath, 'utf8')
76
77
  const lines = raw.split(/\r?\n/).filter((l) => l.trim().length > 0)
77
78
  let meta: SuiteMeta | undefined
78
- const rows: TestRow[] = []
79
+ let storedVersion = 1
80
+ const rawRows: any[] = []
79
81
  for (const line of lines) {
80
82
  try {
81
83
  const obj = JSON.parse(line)
82
84
  if (obj && (typeof obj.version !== 'undefined' || typeof obj.meta !== 'undefined')) {
83
85
  meta = (obj.meta || {}) as SuiteMeta
86
+ storedVersion = Number(obj.version ?? 1)
84
87
  continue
85
88
  }
86
- rows.push(normalizeRow(obj))
89
+ rawRows.push(obj)
87
90
  } catch {
88
91
  throw new Error(`Malformed line in test suite JSONL file: '${line}'`)
89
92
  }
90
93
  }
91
- return { version: 1, meta: meta || {}, tests: rows }
94
+ const isLegacySuite = !Number.isFinite(storedVersion) || storedVersion < 2
95
+ const rows = rawRows.map((row) =>
96
+ normalizeRow(isLegacySuite ? { ...row, step: 'main', evaluation_mode: 'assertion' } : row)
97
+ )
98
+ const suite: TestSuite = { version: 2, meta: meta || {}, tests: rows }
99
+ if (isLegacySuite) await writeSuite(agent, suite)
100
+ return suite
92
101
  } catch (e) {
93
102
  console.error(e)
94
103
  throw new Error(`Error loading tests at path '${jsonlPath}'`, { cause: e })
@@ -98,7 +107,7 @@ export async function readSuite(agent: string): Promise<TestSuite> {
98
107
  export async function writeSuite(agent: string, suite: TestSuite): Promise<void> {
99
108
  const jsonlPath = await getSuiteFilePath(agent)
100
109
  await mkdir(path.dirname(jsonlPath), { recursive: true })
101
- const header = { version: 1, meta: suite.meta || {} }
110
+ const header = { version: 2, meta: suite.meta || {} }
102
111
  const lines = [JSON.stringify(header), ...suite.tests.map((r) => JSON.stringify(normalizeRow(r)))]
103
112
  const body = lines.join('\n') + '\n'
104
113
  const dir = path.dirname(jsonlPath)
@@ -123,7 +132,7 @@ export async function writeSuite(agent: string, suite: TestSuite): Promise<void>
123
132
 
124
133
  export async function upsertSuiteMeta(agent: string, metaPatch: SuiteMeta): Promise<void> {
125
134
  await withSuiteMutationLock(agent, async () => {
126
- const suite = await readSuite(agent).catch(() => ({ version: 1, tests: [] }) as TestSuite)
135
+ const suite = await readSuite(agent).catch(() => ({ version: 2, tests: [] }) as TestSuite)
127
136
  suite.meta = { ...(suite.meta || {}), ...(metaPatch || {}) }
128
137
  await writeSuite(agent, suite)
129
138
  })
@@ -134,7 +143,7 @@ export function normalizeRow(r: any): TestRow {
134
143
  id: String(r.id || randomUUID()),
135
144
  pinned: String(r.pinned || 'TRUE').toUpperCase() === 'TRUE' ? 'TRUE' : 'FALSE',
136
145
  scenario: String(r.scenario || ''),
137
- step: r.step != null ? String(r.step) : '',
146
+ step: String(r.step || 'main'),
138
147
  author: r.author != null ? String(r.author) : '',
139
148
  category: r.category != null ? String(r.category) : '',
140
149
  assertion_type: String(r.assertion_type || 'llm-rubric'),
@@ -145,9 +154,9 @@ export function normalizeRow(r: any): TestRow {
145
154
  similarity_threshold: String(r.similarity_threshold ?? '50'),
146
155
  context: r.context || {}
147
156
  }
148
- if (r.capture_mode === 'immediate' || r.capture_mode === 'final') {
149
- row.capture_mode = r.capture_mode
150
- }
157
+ if (r.evaluation_mode === 'json-deep-equal') row.evaluation_mode = 'json-deep-equal'
158
+ else row.evaluation_mode = 'assertion'
159
+ row.context_mode = r.context_mode === 'replace' ? 'replace' : 'merge'
151
160
  if (typeof r.mocks !== 'undefined') row.mocks = r.mocks || {}
152
161
  return row
153
162
  }
@@ -1 +0,0 @@
1
- *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:DarkerGrotesque,ui-sans-serif,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-2{top:.5rem;right:.5rem;bottom:.5rem;left:.5rem}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-left-28{left:-7rem}.bottom-0{bottom:0}.bottom-1{bottom:.25rem}.bottom-16{bottom:4rem}.bottom-2{bottom:.5rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.right-0{right:0}.right-2{right:.5rem}.right-6{right:1.5rem}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-full{top:100%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-popover{z-index:1300}.m-0{margin:0}.m-4{margin:1rem}.m-auto{margin:auto}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.ml-11{margin-left:2.75rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-7{margin-left:1.75rem}.ml-9{margin-left:2.25rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-48{margin-top:12rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-cell{display:table-cell}.table-row{display:table-row}.grid{display:grid}.contents{display:contents}.hidden{display:none}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.h-0\.5{height:.125rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-\[55vh\]{height:55vh}.h-\[65vh\]{height:65vh}.h-\[70vh\]{height:70vh}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.h-xl{height:90px}.max-h-56{max-height:14rem}.max-h-60{max-height:15rem}.max-h-96{max-height:24rem}.max-h-\[60vh\]{max-height:60vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(90vh-7rem\)\]{max-height:calc(90vh - 7rem)}.min-h-0{min-height:0px}.min-h-11{min-height:2.75rem}.min-h-96{min-height:24rem}.min-h-\[68vh\]{min-height:68vh}.\!w-\[59px\]{width:59px!important}.\!w-\[80vw\]{width:80vw!important}.\!w-\[85vw\]{width:85vw!important}.\!w-\[95vw\]{width:95vw!important}.w-1\/3{width:33.333333%}.w-16{width:4rem}.w-2{width:.5rem}.w-2\/3{width:66.666667%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-50vw{width:50vw}.w-56{width:14rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[95vw\]{width:95vw}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.w-xl{width:90px}.min-w-0{min-width:0px}.min-w-16{min-width:4rem}.min-w-20{min-width:5rem}.min-w-32{min-width:8rem}.min-w-fit{min-width:-moz-fit-content;min-width:fit-content}.min-w-full{min-width:100%}.min-w-xl{min-width:90px}.\!max-w-3xl{max-width:48rem!important}.\!max-w-4xl{max-width:56rem!important}.\!max-w-5xl{max-width:64rem!important}.\!max-w-\[90rem\]{max-width:90rem!important}.max-w-2xl{max-width:42rem}.max-w-6xl{max-width:72rem}.max-w-\[28rem\]{max-width:28rem}.max-w-\[34rem\]{max-width:34rem}.max-w-\[70\%\]{max-width:70%}.max-w-\[83\%\]{max-width:83%}.max-w-\[90\%\]{max-width:90%}.max-w-\[min\(26rem\,90vw\)\]{max-width:min(26rem,90vw)}.flex-1{flex:1 1 0%}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[5px\]{--tw-translate-y: 5px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.resize{resize:both}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[140px_minmax\(0\,1fr\)\]{grid-template-columns:140px minmax(0,1fr)}.grid-cols-\[18rem\,minmax\(0\,1fr\)\]{grid-template-columns:18rem minmax(0,1fr)}.grid-cols-\[1fr\,2\.25rem\]{grid-template-columns:1fr 2.25rem}.grid-cols-\[2\.25rem\,1fr\]{grid-template-columns:2.25rem 1fr}.grid-cols-\[minmax\(140px\,2fr\)_minmax\(0\,10fr\)_minmax\(0\,11fr\)\]{grid-template-columns:minmax(140px,2fr) minmax(0,10fr) minmax(0,11fr)}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.place-items-center{place-items:center}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-y-0{row-gap:0px}.gap-y-1{row-gap:.25rem}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-nowrap{text-wrap:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:8px}.rounded-md{border-radius:5px}.rounded-none{border-radius:0}.rounded-sm{border-radius:3px}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.\!border{border-width:1px!important}.border{border-width:1px}.border-0{border-width:0px}.border-thin{border-width:.4px}.border-x{border-left-width:1px;border-right-width:1px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0px}.border-b-thin{border-bottom-width:.4px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-r-thin{border-right-width:.4px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-none{border-style:none}.\!border-emerald-500{--tw-border-opacity: 1 !important;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))!important}.\!border-rc-gray-500{--tw-border-opacity: 1 !important;border-color:rgb(75 75 75 / var(--tw-border-opacity, 1))!important}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.border-rc-gray-110{border-color:#dddddd1a}.border-rc-gray-200\/80{border-color:#afafafcc}.border-rc-gray-300{--tw-border-opacity: 1;border-color:rgb(118 118 118 / var(--tw-border-opacity, 1))}.border-rc-gray-300\/40{border-color:#76767666}.border-rc-gray-500{--tw-border-opacity: 1;border-color:rgb(75 75 75 / var(--tw-border-opacity, 1))}.border-rc-gray-500\/70{border-color:#4b4b4bb3}.border-rc-gray-500\/80{border-color:#4b4b4bcc}.border-rc-gray-600{--tw-border-opacity: 1;border-color:rgb(55 55 55 / var(--tw-border-opacity, 1))}.border-rc-gray-650{--tw-border-opacity: 1;border-color:rgb(38 38 38 / var(--tw-border-opacity, 1))}.border-rc-gray-700{--tw-border-opacity: 1;border-color:rgb(34 34 34 / var(--tw-border-opacity, 1))}.border-rc-gray-700\/50{border-color:#22222280}.border-rc-gray-700\/60{border-color:#2229}.border-rc-green-200{--tw-border-opacity: 1;border-color:rgb(0 181 138 / var(--tw-border-opacity, 1))}.border-rc-green-200\/90{border-color:#00b58ae6}.border-rc-green-450{border-color:#0457431a}.border-rc-red-600{--tw-border-opacity: 1;border-color:rgb(255 102 102 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-red-500\/60{border-color:#ef444499}.border-red-500\/70{border-color:#ef4444b3}.border-transparent{border-color:transparent}.border-r-gray-700\/50{border-right-color:#37415180}.border-r-rc-gray-600{--tw-border-opacity: 1;border-right-color:rgb(55 55 55 / var(--tw-border-opacity, 1))}.\!bg-rc-gray-700{--tw-bg-opacity: 1 !important;background-color:rgb(34 34 34 / var(--tw-bg-opacity, 1))!important}.bg-black\/20{background-color:#0003}.bg-black\/50{background-color:#00000080}.bg-black\/60{background-color:#0009}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.bg-rc-gray-500{--tw-bg-opacity: 1;background-color:rgb(75 75 75 / var(--tw-bg-opacity, 1))}.bg-rc-gray-600{--tw-bg-opacity: 1;background-color:rgb(55 55 55 / var(--tw-bg-opacity, 1))}.bg-rc-gray-700{--tw-bg-opacity: 1;background-color:rgb(34 34 34 / var(--tw-bg-opacity, 1))}.bg-rc-gray-700\/45{background-color:#22222273}.bg-rc-gray-700\/60{background-color:#2229}.bg-rc-gray-700\/70{background-color:#222222b3}.bg-rc-gray-800{--tw-bg-opacity: 1;background-color:rgb(29 29 29 / var(--tw-bg-opacity, 1))}.bg-rc-gray-800\/40{background-color:#1d1d1d66}.bg-rc-gray-900{--tw-bg-opacity: 1;background-color:rgb(25 25 25 / var(--tw-bg-opacity, 1))}.bg-rc-gray-900\/40{background-color:#19191966}.bg-rc-gray-900\/60{background-color:#19191999}.bg-rc-gray-900\/95{background-color:#191919f2}.bg-rc-gray-930{background-color:#00000003}.bg-rc-gray-930\/90{background-color:#000000e6}.bg-rc-gray-980{--tw-bg-opacity: 1;background-color:rgb(24 24 24 / var(--tw-bg-opacity, 1))}.bg-rc-green-200{--tw-bg-opacity: 1;background-color:rgb(0 181 138 / var(--tw-bg-opacity, 1))}.bg-rc-green-350{background-color:#09754f99}.bg-rc-green-700{--tw-bg-opacity: 1;background-color:rgb(0 90 69 / var(--tw-bg-opacity, 1))}.bg-rc-green-700\/80{background-color:#005a45cc}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-950\/20{background-color:#450a0a33}.bg-red-950\/30{background-color:#450a0a4d}.bg-red-950\/40{background-color:#450a0a66}.bg-red-950\/90{background-color:#450a0ae6}.bg-transparent{background-color:transparent}.object-contain{-o-object-fit:contain;object-fit:contain}.\!p-2{padding:.5rem!important}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.\!px-0{padding-left:0!important;padding-right:0!important}.\!px-3{padding-left:.75rem!important;padding-right:.75rem!important}.\!py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.\!pb-1{padding-bottom:.25rem!important}.\!pl-\[4\.25rem\]{padding-left:4.25rem!important}.\!pl-\[5\.5rem\]{padding-left:5.5rem!important}.\!pr-8{padding-right:2rem!important}.\!pt-\[5px\]{padding-top:5px!important}.pb-1{padding-bottom:.25rem}.pb-16{padding-bottom:4rem}.pb-2{padding-bottom:.5rem}.pb-2\.5{padding-bottom:.625rem}.pb-3{padding-bottom:.75rem}.pb-6{padding-bottom:1.5rem}.pb-xs{padding-bottom:2px}.pl-11{padding-left:2.75rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pr-80{padding-right:20rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-40{padding-top:10rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.align-text-bottom{vertical-align:text-bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:DarkerGrotesque,ui-sans-serif,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif}.\!text-base{font-size:.875rem!important;line-height:1.2!important}.text-4xl{font-size:2.25rem;line-height:1.2}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[16px\]{font-size:16px}.text-base{font-size:.875rem;line-height:1.2}.text-lg{font-size:1.125rem;line-height:1.2;letter-spacing:.005em}.text-sm{font-size:.8125rem;line-height:1.25;letter-spacing:.005em}.text-xl{font-size:1.25rem;line-height:.9;letter-spacing:.005em}.text-xs{font-size:.75rem;line-height:1.1;letter-spacing:.01em}.\!font-medium{font-weight:500!important}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.\!leading-6{line-height:1.5rem!important}.leading-6{line-height:1.5rem}.leading-\[1\.2\]{line-height:1.2}.leading-\[30px\]{line-height:30px}.leading-none{line-height:1}.leading-snug{line-height:1.375}.tracking-wide{letter-spacing:.025em}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-inherit{color:inherit}.text-rc-blue{--tw-text-opacity: 1;color:rgb(86 156 214 / var(--tw-text-opacity, 1))}.text-rc-gray-050{color:#ffffff1a}.text-rc-gray-100{--tw-text-opacity: 1;color:rgb(221 221 221 / var(--tw-text-opacity, 1))}.text-rc-gray-200{--tw-text-opacity: 1;color:rgb(175 175 175 / var(--tw-text-opacity, 1))}.text-rc-gray-200\/70{color:#afafafb3}.text-rc-gray-300{--tw-text-opacity: 1;color:rgb(118 118 118 / var(--tw-text-opacity, 1))}.text-rc-gray-400{--tw-text-opacity: 1;color:rgb(99 99 99 / var(--tw-text-opacity, 1))}.text-rc-gray-400\/70{color:#636363b3}.text-rc-gray-500{--tw-text-opacity: 1;color:rgb(75 75 75 / var(--tw-text-opacity, 1))}.text-rc-green-200{--tw-text-opacity: 1;color:rgb(0 181 138 / var(--tw-text-opacity, 1))}.text-rc-green-400{--tw-text-opacity: 1;color:rgb(4 87 67 / var(--tw-text-opacity, 1))}.text-rc-red-600{--tw-text-opacity: 1;color:rgb(255 102 102 / var(--tw-text-opacity, 1))}.text-rc-red-800{--tw-text-opacity: 1;color:rgb(255 129 101 / var(--tw-text-opacity, 1))}.text-red-100{--tw-text-opacity: 1;color:rgb(254 226 226 / var(--tw-text-opacity, 1))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-rc-gray-300::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(118 118 118 / var(--tw-placeholder-opacity, 1))}.placeholder-rc-gray-300::placeholder{--tw-placeholder-opacity: 1;color:rgb(118 118 118 / var(--tw-placeholder-opacity, 1))}.\!accent-rc-gray-600{accent-color:#373737!important}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-65{opacity:.65}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_rgba\(0\,0\,0\,0\.12\)\]{--tw-shadow: 0 0 0 1px rgba(0,0,0,.12);--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_rgba\(0\,0\,0\,0\.28\)\]{--tw-shadow: 0 0 0 1px rgba(0,0,0,.28);--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-inner-white-soft{--tw-shadow: inset 0 0 10px 0 rgba(255,255,255,.1);--tw-shadow-colored: inset 0 0 10px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 0 0 1px rgba(118, 118, 118, .4);--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-2xl{--tw-backdrop-blur: blur(40px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-3xl{--tw-backdrop-blur: blur(64px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.\!duration-75{transition-duration:75ms!important}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-75{transition-duration:75ms}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.analysis-quote{border-radius:2px}.analysis-quote-focus{box-shadow:inset 0 0 0 1px #fecacaf2,inset 0 0 0 3px #dc262640;border-radius:2px}.analysis-quote-l1{background:#dc26262e}.analysis-quote-l2{background:#dc26263d}.analysis-quote-l3{background:#dc26264d}.analysis-quote-l4{background:#dc26265c}.analysis-quote-l5{background:#dc26266b}.analysis-quote-l6{background:#dc26267a}.analysis-quote-l7{background:#dc26268a}.analysis-quote-l8{background:#dc262699}.analysis-quote-l9{background:#dc2626a8}.analysis-quote-l10{background:#dc2626b8}.monaco-editor .test-expected-output{color:#00b58a!important}.monaco-editor .test-expected-output-tag{color:#ce9178!important}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.last\:border-b-0:last-child{border-bottom-width:0px}.checked\:border-rc-gray-200:checked{--tw-border-opacity: 1;border-color:rgb(175 175 175 / var(--tw-border-opacity, 1))}.checked\:bg-rc-gray-600:checked{--tw-bg-opacity: 1;background-color:rgb(55 55 55 / var(--tw-bg-opacity, 1))}.hover\:border:hover{border-width:1px}.hover\:\!border-emerald-500:hover{--tw-border-opacity: 1 !important;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))!important}.hover\:border-gray-500:hover{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.hover\:border-rc-gray-200:hover{--tw-border-opacity: 1;border-color:rgb(175 175 175 / var(--tw-border-opacity, 1))}.hover\:border-rc-gray-400:hover{--tw-border-opacity: 1;border-color:rgb(99 99 99 / var(--tw-border-opacity, 1))}.hover\:border-rc-gray-500:hover{--tw-border-opacity: 1;border-color:rgb(75 75 75 / var(--tw-border-opacity, 1))}.hover\:border-rc-green-200:hover{--tw-border-opacity: 1;border-color:rgb(0 181 138 / var(--tw-border-opacity, 1))}.hover\:bg-rc-gray-600:hover{--tw-bg-opacity: 1;background-color:rgb(55 55 55 / var(--tw-bg-opacity, 1))}.hover\:bg-rc-gray-650:hover{--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity, 1))}.hover\:bg-rc-gray-700:hover{--tw-bg-opacity: 1;background-color:rgb(34 34 34 / var(--tw-bg-opacity, 1))}.hover\:bg-rc-gray-700\/70:hover{background-color:#222222b3}.hover\:bg-rc-gray-800:hover{--tw-bg-opacity: 1;background-color:rgb(29 29 29 / var(--tw-bg-opacity, 1))}.hover\:bg-rc-gray-800\/40:hover{background-color:#1d1d1d66}.hover\:bg-rc-gray-900:hover{--tw-bg-opacity: 1;background-color:rgb(25 25 25 / var(--tw-bg-opacity, 1))}.hover\:bg-rc-green-250:hover{background-color:#005c3b99}.hover\:bg-rc-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(0 90 69 / var(--tw-bg-opacity, 1))}.hover\:bg-double-gradient:hover{background-image:linear-gradient(0deg,#00000003,#00000003),linear-gradient(0deg,#ffffff0d,#ffffff0d)}.hover\:text-gray-100:hover{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.hover\:text-gray-200:hover{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.hover\:text-rc-gray-100:hover{--tw-text-opacity: 1;color:rgb(221 221 221 / var(--tw-text-opacity, 1))}.hover\:text-rc-gray-200:hover{--tw-text-opacity: 1;color:rgb(175 175 175 / var(--tw-text-opacity, 1))}.hover\:text-rc-gray-300:hover{--tw-text-opacity: 1;color:rgb(118 118 118 / var(--tw-text-opacity, 1))}.hover\:text-rc-green-100:hover{--tw-text-opacity: 1;color:rgb(147 255 109 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.focus\:\!border-emerald-500:focus{--tw-border-opacity: 1 !important;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))!important}.focus\:border-gray-500:focus{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.focus\:border-rc-gray-300:focus{--tw-border-opacity: 1;border-color:rgb(118 118 118 / var(--tw-border-opacity, 1))}.focus\:border-rc-gray-400:focus{--tw-border-opacity: 1;border-color:rgb(99 99 99 / var(--tw-border-opacity, 1))}.focus\:bg-rc-gray-400:focus{--tw-bg-opacity: 1;background-color:rgb(99 99 99 / var(--tw-bg-opacity, 1))}.focus\:bg-rc-gray-700:focus{--tw-bg-opacity: 1;background-color:rgb(34 34 34 / var(--tw-bg-opacity, 1))}.focus\:bg-rc-green-200:focus{--tw-bg-opacity: 1;background-color:rgb(0 181 138 / var(--tw-bg-opacity, 1))}.focus\:bg-double-gradient:focus{background-image:linear-gradient(0deg,#00000003,#00000003),linear-gradient(0deg,#ffffff0d,#ffffff0d)}.focus\:text-gray-100:focus{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-rc-gray-300:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(118 118 118 / var(--tw-ring-opacity, 1))}.focus-visible\:border-rc-gray-400:focus-visible{--tw-border-opacity: 1;border-color:rgb(99 99 99 / var(--tw-border-opacity, 1))}.focus-visible\:shadow-none:focus-visible{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline:focus-visible{outline-style:solid}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.active\:border-rc-gray-200:active{--tw-border-opacity: 1;border-color:rgb(175 175 175 / var(--tw-border-opacity, 1))}.active\:border-rc-gray-400:active{--tw-border-opacity: 1;border-color:rgb(99 99 99 / var(--tw-border-opacity, 1))}.active\:bg-rc-gray-600:active{--tw-bg-opacity: 1;background-color:rgb(55 55 55 / var(--tw-bg-opacity, 1))}.active\:bg-rc-gray-650:active{--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity, 1))}.active\:bg-rc-green-250:active{background-color:#005c3b99}.active\:bg-double-gradient:active{background-image:linear-gradient(0deg,#00000003,#00000003),linear-gradient(0deg,#ffffff0d,#ffffff0d)}.active\:text-gray-100:active{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:cursor-wait:disabled{cursor:wait}.disabled\:opacity-35:disabled{opacity:.35}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:hover\:bg-transparent:hover:disabled{background-color:transparent}.disabled\:hover\:text-rc-gray-400:hover:disabled{--tw-text-opacity: 1;color:rgb(99 99 99 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-rc-gray-200{--tw-text-opacity: 1;color:rgb(175 175 175 / var(--tw-text-opacity, 1))}.aria-selected\:text-rc-green-200[aria-selected=true]{--tw-text-opacity: 1;color:rgb(0 181 138 / var(--tw-text-opacity, 1))}.aria-selected\:after\:absolute[aria-selected=true]:after{content:var(--tw-content);position:absolute}.aria-selected\:after\:inset-x-0[aria-selected=true]:after{content:var(--tw-content);left:0;right:0}.aria-selected\:after\:bottom-0[aria-selected=true]:after{content:var(--tw-content);bottom:0}.aria-selected\:after\:h-0\.5[aria-selected=true]:after{content:var(--tw-content);height:.125rem}.aria-selected\:after\:bg-rc-green-200[aria-selected=true]:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(0 181 138 / var(--tw-bg-opacity, 1))}.aria-selected\:after\:content-\[\'\'\][aria-selected=true]:after{--tw-content: "";content:var(--tw-content)}@media (min-width: 640px){.sm\:max-w-\[80\%\]{max-width:80%}.sm\:max-w-\[85\%\]{max-width:85%}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 768px){.md\:max-w-\[70\%\]{max-width:70%}.md\:max-w-\[75\%\]{max-width:75%}}@media (min-width: 1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}body{margin:0;padding:0;font-family:DarkerGrotesque,ui-sans-serif,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:.875rem;line-height:1.2;font-weight:400;--tw-text-opacity: 1;color:rgb(118 118 118 / var(--tw-text-opacity, 1))}*{margin:0;padding:0;box-sizing:border-box}
@@ -1,3 +0,0 @@
1
- import{d as ut,b as ee,a as i,f as b,t as G}from"./Ca197UDq.js";import{a as vt}from"./C39ai1md.js";import{p as ft,f as je,c as a,j as t,s as l,r as o,t as R,y as A,a as mt,w as me,n as c,o as Z}from"./CxLomzuE.js";import{s as I}from"./DJriQKD9.js";import{i as k}from"./Buo-57fF.js";import{s as Ce,c as bt}from"./CAjPRvNs.js";import{M as st}from"./CyvQWZoe.js";import{T as it,a as fe}from"./BsDZe4N6.js";import{B as ct}from"./CVlsAO8k.js";import{I as gt}from"./07xNIa59.js";import{a as Ee,R as ht}from"./B_K7D6rX.js";import{c as dt}from"./D-B5X35l.js";import{p as ke}from"./CPXdAKdv.js";import{g as St}from"./DThbydRF.js";import{t as kt}from"./D0wo6ydM.js";import{c as Ct}from"./Bj8jfBTi.js";function xt(s={}){const e=s.thresholdPx??4,w=s.dragCursor??"text";let P=0,p=0,m=!1,U=!1,S=null,D=null;function te(){U=!1,m=!1,S==null||S.style.removeProperty("cursor"),S=null,D==null||D.abort(),D=null}function pe(O){if(typeof window>"u"||O.button!==0)return;D==null||D.abort(),D=null,S==null||S.style.removeProperty("cursor"),P=O.clientX,p=O.clientY,m=!1,U=!0,S=O.currentTarget instanceof HTMLElement?O.currentTarget:null;const V=new AbortController;D=V;const K=Te=>{if(!U||m)return;const F=Math.abs(Te.clientX-P),ge=Math.abs(Te.clientY-p);F+ge<e||(m=!0,S==null||S.style.setProperty("cursor",w))},_e=()=>{U=!1,S==null||S.style.removeProperty("cursor"),S=null,V.abort(),D===V&&(D=null)};window.addEventListener("pointermove",K,{signal:V.signal}),window.addEventListener("pointerup",_e,{signal:V.signal}),window.addEventListener("pointercancel",_e,{signal:V.signal})}function le(O){return O.detail>0&&m}return{onPointerDown:pe,shouldSuppressClick:le,cleanup:te}}var Tt=b('<span class="text-[13px] leading-none text-rc-gray-400"> </span>'),Nt=b('<div class="rounded-md border border-red-500 bg-red-950/40 p-3 font-mono text-sm text-red-200"> </div>'),Rt=b("<!> <!>",1),Mt=b('<div class="flex flex-col gap-3"><!> <div class="flex flex-wrap items-center justify-between gap-2 text-sm text-rc-gray-200"><div class="flex flex-wrap items-center gap-x-4 gap-y-1"><div><span class="text-rc-gray-400">Timing:</span> </div> <div><span class="text-rc-gray-400">Response time:</span> </div> <div><span class="text-rc-gray-400">URL:</span> </div></div> <!></div> <div><!> <div class="mt-2 h-[55vh]"><!></div></div></div>'),At=b('<button type="button" class="flex w-full cursor-pointer select-text items-baseline gap-2 truncate rounded-md bg-transparent px-2 py-1 text-left text-sm text-rc-gray-200 hover:bg-rc-gray-800/40"><!> <!> <span> </span></button> <!>',1);function Mr(s,e){ft(e,!0);let w=me(!1),P=me("request");const p=xt();vt(p.cleanup);function m(_){try{if(typeof _=="string"){const g=_.trim();if(!g)return"";const X=JSON.parse(g);return JSON.stringify(X,null,2)}}catch{}try{return JSON.stringify(_??null,null,2)}catch{return String(_)}}function U(_){return new Date(_).toISOString()}function S(_){if(typeof _!="number"||!Number.isFinite(_))return null;const g=new Date(_);if(Number.isNaN(g.getTime()))return null;const X=String(g.getHours()).padStart(2,"0"),re=String(g.getMinutes()).padStart(2,"0"),Pe=String(g.getSeconds()).padStart(2,"0");return`${X}:${re}:${Pe}`}const D=c(()=>S(e.trace.createdAt)),te=c(()=>{if(e.trace.error!=null)return e.trace.error;if(!(e.trace.ok===!1||typeof e.trace.status=="number"&&e.trace.status>=400))return;const g=e.trace.response;return g&&typeof g=="object"&&"error"in g&&g.error!=null?g.error:{status:e.trace.status,ok:e.trace.ok}}),pe=c(()=>t(te)!=null),le=c(()=>`API: ${e.trace.operationName}`),O=c(()=>e.trace.operationName),V=c(()=>typeof e.trace.createdAt!="number"?"—":U(e.trace.createdAt));async function K(){const _=m(e.trace);try{await navigator.clipboard.writeText(_)}catch(g){console.error("Failed to copy",g)}}const _e=c(()=>m({method:e.trace.method,path:e.trace.path,baseUrl:e.trace.baseUrl,request:e.trace.request})),Te=c(()=>m({status:e.trace.status,ok:e.trace.ok,response:e.trace.response,error:t(te)})),F=c(()=>t(te)!=null?m(t(te)):"");var ge=At(),ye=je(ge),Ne=a(ye);{let _=c(()=>t(pe)?"close":"checkmark"),g=c(()=>t(pe)?"self-center text-red-400":"self-center text-rc-green-200");gt(Ne,{get name(){return t(_)},width:18,height:18,get class(){return t(g)}})}var $=l(Ne,2);{var de=_=>{var g=Tt(),X=a(g,!0);o(g),R(()=>I(X,t(D))),i(_,g)};k($,_=>{t(D)&&_(de)})}var we=l($,2),Oe=a(we,!0);o(we),o(ye);var Re=l(ye,2);{var Fe=_=>{st(_,{get title(){return t(le)},class:"!w-[85vw] !max-w-5xl",get open(){return t(w)},set open(X){A(w,X,!0)},children:X=>{var re=Mt(),Pe=a(re);{var Ke=x=>{var B=Nt(),h=a(B,!0);o(B),R(()=>I(h,t(F))),i(x,B)};k(Pe,x=>{t(F)&&x(Ke)})}var Me=l(Pe,2),xe=a(Me),Ae=a(xe),We=l(a(Ae));o(Ae);var He=l(Ae,2),Qe=l(a(He));o(He);var Be=l(He,2),Ze=l(a(Be));o(Be),o(xe);var d=l(xe,2);ct(d,{variant:"secondary",size:"small",onclick:K,children:(x,B)=>{Z();var h=G("Copy raw trace");i(x,h)},$$slots:{default:!0}}),o(Me);var y=l(Me,2),J=a(y);it(J,{get value(){return t(P)},ariaLabel:"API trace tabs",onChange:({value:x})=>A(P,x,!0),children:(x,B)=>{var h=Rt(),L=je(h);fe(L,{value:"request",class:"px-3",children:(he,be)=>{Z();var Se=G("Request");i(he,Se)},$$slots:{default:!0}});var ae=l(L,2);fe(ae,{value:"response",class:"px-3",children:(he,be)=>{Z();var Se=G("Response");i(he,Se)},$$slots:{default:!0}}),i(x,h)},$$slots:{default:!0}});var z=l(J,2),H=a(z);{var ne=x=>{Ee(x,{get value(){return t(_e)},language:"json",class:"h-full"})},ce=x=>{Ee(x,{get value(){return t(Te)},language:"json",class:"h-full"})};k(H,x=>{t(P)==="request"?x(ne):x(ce,-1)})}o(z),o(y),o(re),R(x=>{I(We,` ${t(V)??""}`),I(Qe,` ${x??""}`),I(Ze,` ${e.trace.path??""}`)},[()=>typeof e.trace.durationMs=="number"?`${Math.round(e.trace.durationMs)}ms`:"—"]),i(X,re)},$$slots:{default:!0}})};k(Re,_=>{t(w)&&_(Fe)})}R(()=>{Ce(we,1,bt(t(pe)?"text-red-200":"")),I(Oe,t(O))}),ee("pointerdown",ye,function(..._){var g;(g=p.onPointerDown)==null||g.apply(this,_)}),ee("click",ye,_=>{p.shouldSuppressClick(_)||A(w,!0)}),i(s,ge),mt()}ut(["pointerdown","click"]);var It=b('<span class="text-[13px] leading-none text-rc-gray-400"> </span>'),Dt=b('<span><span class="cursor-pointer" title="Show prompt-cache calc"> </span></span>'),Lt=b("<span> </span>"),Et=b('<div class="rounded-md border border-red-500 bg-red-950/40 p-3 font-mono text-sm text-red-200"> </div>'),jt=b("<!> <!> <!> <!> <!>",1),Ot=b('<div class="flex h-full flex-col gap-2"><div class="grid grid-cols-2 gap-2"><div class="flex items-center justify-start"><!></div> <div class="flex items-center justify-end"><!></div></div> <!></div>'),Ft=b('<div class="flex flex-col gap-3"><!> <div class="flex flex-wrap items-center gap-x-4 gap-y-1 text-sm text-rc-gray-200"><div><span class="text-rc-gray-400">Timing:</span> </div> <div><span class="text-rc-gray-400">Response time:</span> —</div> <div><span class="text-rc-gray-400">Model:</span> </div></div> <div><!> <div class="mt-2 h-[55vh]"><!></div></div></div>'),Ht=b("<!> <!>",1),qt=b('<div class="flex h-[65vh] min-h-0 flex-col gap-2"><!> <div class="min-h-0 flex-1"><!></div></div>'),Jt=b('<div class="flex w-full select-text items-baseline gap-2 truncate rounded-md bg-transparent px-2 py-1 text-left text-sm text-rc-gray-200 hover:bg-rc-gray-800/40"><button type="button" class="flex min-w-0 cursor-pointer items-baseline gap-2 truncate bg-transparent p-0 text-left text-sm text-rc-gray-200"><!> <!> <span> </span></button> <!> <!></div> <!> <!>',1);function Ar(s,e){ft(e,!0);let w=me(!1),P=me(!1),p=me("diff"),m=me("response");const U=xt();vt(U.cleanup);function S(r){return r&&typeof r.renderedPrompt=="string"?r.renderedPrompt:null}function D(r,n){if(r===n)return r.length;const v=Math.min(r.length,n.length);for(let f=0;f<v;f++)if(r.charCodeAt(f)!==n.charCodeAt(f))return f;return v}function te(r,n){const v=Math.max(r.length,n.length);if(v===0)return 100;const f=D(r,n);return Math.floor(f/v*100)}function pe(r,n){const v=r.length,f=n.length,M=D(r,n),W=Math.max(v,f),C=W===0?100:Math.floor(M/W*100);return{currentLength:v,baselineLength:f,commonPrefixLength:M,denom:W,similarityPct:C}}function le(r,n){const M=r.slice(0,600),W=r.slice(Math.max(M.length,r.length-600)),C=Math.max(0,r.length-M.length-W.length);return{length:r.length,head:M,tail:W,omittedChars:C}}function O(r){const n=r.llmUsage;return!n||typeof n.promptTokens!="number"||!Number.isFinite(n.promptTokens)||n.promptTokens<=0||typeof n.cachedPromptTokens!="number"||!Number.isFinite(n.cachedPromptTokens)||n.cachedPromptTokens<0?null:Math.max(0,Math.min(100,Math.floor(n.cachedPromptTokens/n.promptTokens*100)))}function V(r){const n=new WeakSet;try{return JSON.stringify(r,(v,f)=>{if(typeof f=="bigint")return f.toString();if(f instanceof Error)return{name:f.name,message:f.message,stack:f.stack};if(typeof f=="object"&&f!==null){if(n.has(f))return"[Circular]";n.add(f)}return f},2)??""}catch{return String(r)}}function K(r){if(r==null)return"";if(typeof r=="string"){const n=r.trim();if(!n)return"";try{return JSON.stringify(JSON.parse(n),null,2)}catch{return r}}return V(r)}function _e(r){return new Date(r).toISOString()}function Te(r){if(typeof r!="number"||!Number.isFinite(r))return null;const n=new Date(r);if(Number.isNaN(n.getTime()))return null;const v=String(n.getHours()).padStart(2,"0"),f=String(n.getMinutes()).padStart(2,"0"),M=String(n.getSeconds()).padStart(2,"0");return`${v}:${f}:${M}`}const F=c(()=>Te(e.trace.createdAt)),ge=c(()=>e.trace.error!=null),ye=c(()=>`AI: ${e.trace.name}`),Ne=c(()=>e.trace.name),$=c(()=>{if(e.trace.name!=="main")return null;const r=S(e.trace),n=S(e.compareTrace);return r==null||n==null?null:te(r,n)}),de=c(()=>e.trace.name!=="main"?null:O(e.trace)),we=90,Oe=90,Re=/<break\b[^>]*\/?>/i,Fe='<break /> tag disables streaming and increases latency. If pauses are not large enough, use "..." instead.';function _(r){return typeof r=="string"&&Re.test(r)}const g=c(()=>e.trace.name!=="main"?null:t(de)!=null?t(de)===0&&t($)!=null&&t($)>=Oe?{text:"0% tokens cached. Cache miss",className:"text-red-200"}:t(de)>=we?{text:`${t(de)}% tokens cached`,className:"text-rc-gray-400"}:{text:`${t(de)}% tokens cached - move dynamic parts of prompt to the bottom`,className:"text-red-200"}:t($)!=null?t($)>=we?{text:`${t($)}%`,className:"text-rc-gray-400"}:{text:`${t($)}% cached - move dynamic parts of prompt to the bottom`,className:"text-red-200"}:null),X=c(()=>_(e.trace.response)?{text:"LLM output has <break /> tags",className:"text-red-200"}:null),re=c(()=>{var T;if(e.trace.name!=="main")return null;const r=S(e.trace),n=S(e.compareTrace),v=r!=null&&n!=null?pe(r,n):null,f=e.trace.llmUsage??null,M=t(de),W=M===0&&(v==null?void 0:v.similarityPct)!=null&&v.similarityPct>=Oe;return{version:1,labelSource:M!=null?"llmUsage":t($)!=null?"promptSimilarityFallback":"none",thresholds:{okPct:we,cacheMissSimilarityPct:Oe},inputs:{llmUsage:f,currentRenderedPrompt:r!=null?le(r):null,baselineRenderedPrompt:n!=null?le(n):null},computed:{cachedTokensPct:M,promptSimilarityPct:(v==null?void 0:v.similarityPct)??null,promptSimilarity:v,cacheMiss:W},decision:{text:((T=t(g))==null?void 0:T.text)??null}}}),Pe=c(()=>t(re)?V(t(re)):"{}"),Ke=c(()=>S(e.compareTrace)??""),Me=c(()=>S(e.trace)??""),xe=c(()=>K(e.trace.response)),Ae=c(()=>{const r=e.trace.response;if(typeof r!="string")return"json";try{return JSON.parse(r),"json"}catch{return"text"}}),We=c(()=>e.trace.stringifiedConversation??""),He=c(()=>K(e.trace.renderedPrompt)),Qe=c(()=>K(e.trace.receivedPrompt)),Be=c(()=>K(e.trace.receivedContext)),Ze=c(()=>K(e.trace.schema)),d=c(()=>e.trace.error?V(e.trace.error):"");function y(r){return r==null?"":typeof r=="string"?r:V(r)}const J=c(()=>y(e.trace.receivedPrompt)),z=c(()=>y(e.trace.renderedPrompt));let H=me(null),ne=me(null);async function ce(r){try{const n=r==="raw"?t(J):t(z);await navigator.clipboard.writeText(n),A(H,r,!0),t(ne)&&clearTimeout(t(ne)),A(ne,window.setTimeout(()=>{A(H,null),A(ne,null)},2e3),!0)}catch(n){console.error("Failed to copy prompt",n)}}var x=Jt(),B=je(x),h=a(B),L=a(h);{let r=c(()=>t(ge)?"close":"checkmark"),n=c(()=>t(ge)?"self-center text-red-400":"self-center text-rc-green-200");gt(L,{get name(){return t(r)},width:18,height:18,get class(){return t(n)}})}var ae=l(L,2);{var he=r=>{var n=It(),v=a(n,!0);o(n),R(()=>I(v,t(F))),i(r,n)};k(ae,r=>{t(F)&&r(he)})}var be=l(ae,2),Se=a(be);o(be),o(h);var Ge=l(h,2);{var q=r=>{var n=Dt(),v=a(n),f=a(v,!0);o(v),o(n),R(()=>{Ce(n,1,`shrink-0 text-xs ${t(g).className}`),I(f,t(g).text)}),ee("click",v,M=>{M.stopPropagation(),!U.shouldSuppressClick(M)&&t(re)&&(A(p,"diff"),A(P,!0))}),i(r,n)};k(Ge,r=>{t(g)!=null&&r(q)})}var u=l(Ge,2);{var E=r=>{var n=Lt();dt(n,"title",Fe);var v=a(n,!0);o(n),R(()=>{Ce(n,1,`shrink-0 text-xs ${t(X).className}`),I(v,t(X).text)}),i(r,n)};k(u,r=>{t(X)!=null&&r(E)})}o(B);var Y=l(B,2);{var oe=r=>{st(r,{get title(){return t(ye)},class:"!w-[85vw] !max-w-5xl",get open(){return t(w)},set open(v){A(w,v,!0)},children:v=>{var f=Ft(),M=a(f);{var W=N=>{var Ie=Et(),De=a(Ie,!0);o(Ie),R(()=>I(De,t(d))),i(N,Ie)};k(M,N=>{t(d)&&N(W)})}var C=l(M,2),T=a(C),ue=l(a(T));o(T);var Q=l(T,4),nt=l(a(Q));o(Q),o(C);var Je=l(C,2),Ue=a(Je);it(Ue,{get value(){return t(m)},ariaLabel:"Step trace tabs",onChange:({value:N})=>A(m,N,!0),children:(N,Ie)=>{var De=jt(),Ye=je(De);fe(Ye,{value:"response",class:"px-3",children:(ie,Le)=>{Z();var ve=G("Response");i(ie,ve)},$$slots:{default:!0}});var at=l(Ye,2);fe(at,{value:"conversation",class:"px-3",children:(ie,Le)=>{Z();var ve=G("Conversation");i(ie,ve)},$$slots:{default:!0}});var $e=l(at,2);fe($e,{value:"prompt",class:"px-3",children:(ie,Le)=>{Z();var ve=G("Prompt");i(ie,ve)},$$slots:{default:!0}});var ot=l($e,2);fe(ot,{value:"context",class:"px-3",children:(ie,Le)=>{Z();var ve=G("Context");i(ie,ve)},$$slots:{default:!0}});var lt=l(ot,2);fe(lt,{value:"schema",class:"px-3",children:(ie,Le)=>{Z();var ve=G("Schema");i(ie,ve)},$$slots:{default:!0}}),i(N,De)},$$slots:{default:!0}});var Xe=l(Ue,2),j=a(Xe);{var se=N=>{Ee(N,{get value(){return t(xe)},get language(){return t(Ae)},class:"h-full"})},ze=N=>{Ee(N,{get value(){return t(We)},language:"text",class:"h-full"})},yt=N=>{var Ie=Ot(),De=a(Ie),Ye=a(De),at=a(Ye);{let ie=c(()=>!t(J).trim());ct(at,{variant:"secondary",size:"small",get disabled(){return t(ie)},onclick:()=>ce("raw"),children:(Le,ve)=>{Z();var et=G();R(()=>I(et,t(H)==="raw"?"Copied raw prompt":"Copy raw prompt")),i(Le,et)},$$slots:{default:!0}})}o(Ye);var $e=l(Ye,2),ot=a($e);{let ie=c(()=>!t(z).trim());ct(ot,{variant:"secondary",size:"small",get disabled(){return t(ie)},onclick:()=>ce("rendered"),children:(Le,ve)=>{Z();var et=G();R(()=>I(et,t(H)==="rendered"?"Copied rendered prompt":"Copy rendered prompt")),i(Le,et)},$$slots:{default:!0}})}o($e),o(De);var lt=l(De,2);ht(lt,{get original(){return t(Qe)},get modified(){return t(He)},language:"markdown",class:"min-h-0 flex-1"}),o(Ie),i(N,Ie)},wt=N=>{Ee(N,{get value(){return t(Be)},language:"json",class:"h-full"})},Pt=N=>{Ee(N,{get value(){return t(Ze)},language:"json",class:"h-full"})};k(j,N=>{t(m)==="response"?N(se):t(m)==="conversation"?N(ze,1):t(m)==="prompt"?N(yt,2):t(m)==="context"?N(wt,3):N(Pt,-1)})}o(Xe),o(Je),o(f),R(N=>{I(ue,` ${N??""}`),I(nt,` ${e.trace.model??"—"??""}`)},[()=>typeof e.trace.createdAt=="number"?_e(e.trace.createdAt):"—"]),i(v,f)},$$slots:{default:!0}})};k(Y,r=>{t(w)&&r(oe)})}var Ve=l(Y,2);{var qe=r=>{st(r,{title:"Prompt cache calc",class:"!w-[85vw] !max-w-5xl",get open(){return t(P)},set open(v){A(P,v,!0)},children:v=>{var f=qt(),M=a(f);it(M,{get value(){return t(p)},ariaLabel:"Prompt cache calc tabs",onChange:({value:Q})=>A(p,Q,!0),children:(Q,nt)=>{var Je=Ht(),Ue=je(Je);fe(Ue,{value:"diff",class:"px-3",children:(j,se)=>{Z();var ze=G("Diff");i(j,ze)},$$slots:{default:!0}});var Xe=l(Ue,2);fe(Xe,{value:"raw",class:"px-3",children:(j,se)=>{Z();var ze=G("Raw");i(j,ze)},$$slots:{default:!0}}),i(Q,Je)},$$slots:{default:!0}});var W=l(M,2),C=a(W);{var T=Q=>{ht(Q,{get original(){return t(Ke)},get modified(){return t(Me)},language:"markdown",class:"h-full"})},ue=Q=>{Ee(Q,{get value(){return t(Pe)},language:"json",class:"h-full"})};k(C,Q=>{t(p)==="diff"?Q(T):Q(ue,-1)})}o(W),o(f),i(v,f)},$$slots:{default:!0}})};k(Ve,r=>{t(P)&&r(qe)})}R(()=>{Ce(be,1,bt(t(ge)?"text-red-200":"")),I(Se,`AI: ${t(Ne)??""}`)}),ee("pointerdown",h,function(...r){var n;(n=U.onPointerDown)==null||n.apply(this,r)}),ee("click",h,r=>{U.shouldSuppressClick(r)||A(w,!0)}),i(s,x),mt()}ut(["pointerdown","click"]);function Ut(s){return rt(s)&&rt(s.context)?tt(s.context):tt(s)}function zt(s){if(!(!rt(s)||!rt(s.mocks)))return tt(s.mocks)}function tt(s){return rt(s)?Bt(s):{}}function rt(s){return!!s&&typeof s=="object"&&!Array.isArray(s)}function Bt(s){try{return structuredClone(s)}catch{try{return JSON.parse(JSON.stringify(s))}catch{return s}}}function pt(s){return!("operationName"in s)&&!("eventName"in s)}function Gt(s){return pt(s)&&(s.name==="main"||s.name==="mainReply")}function Vt(s,e,w={}){if(e<0)return null;const P=p=>Gt(p)?w.requireRenderedPrompt?typeof p.renderedPrompt=="string"&&p.renderedPrompt.trim().length>0:!0:!1;return[...s.slice(0,e)].reverse().find(P)??s.slice(e+1).find(P)??null}function Xt(s,e){return e<=0?null:[...s.slice(0,e)].reverse().map(w=>{var P;return pt(w)?(P=w.stringifiedConversation)==null?void 0:P.trim():""}).find(Boolean)??null}function Yt({entries:s,trace:e,fallbackRuntimeContext:w,requireReceivedContext:P=!1}){const p=s.indexOf(e);if(p===-1)throw new Error("Could not locate the response in its trace history");const m=Vt(s,p);if(P&&typeof(m==null?void 0:m.receivedContext)>"u")throw new Error("The source step trace does not have receivedContext");const U=typeof(m==null?void 0:m.stringifiedConversation)=="string"&&m.stringifiedConversation.trim()?m.stringifiedConversation:Xt(s,p)??"",S=(e.content??"").trim(),D=m&&typeof m.receivedContext<"u"?tt(m.receivedContext):Ut(w),te=zt(w);return{pinned:"TRUE",assertion_type:"llm-rubric",assertion_value:"",conversation:_t(U,S),expected_output:S,similarity_threshold:"60",timeout:"0",context:D,...typeof te<"u"?{mocks:te}:{}}}function Kt(s,{fallbackConversation:e=""}={}){var p;if(typeof s.receivedContext>"u")throw new Error("The source step trace does not have receivedContext");const w=(s.response??"").trim();if(!w)throw new Error("The source step trace does not have a response");const P=(p=s.stringifiedConversation)!=null&&p.trim()?s.stringifiedConversation:e??"";return{pinned:"TRUE",step:s.name,assertion_type:"llm-rubric",assertion_value:"",conversation:_t(P,w),expected_output:w,similarity_threshold:"60",timeout:"0",context:tt(s.receivedContext)}}function _t(s,e){const w=(s??"").trim();if(!w)return"";const P=w.split(`
2
- `).map(U=>U.trimEnd()).filter(U=>U.trim()!=="");if(!P.length)return"";const p=P[P.length-1],m=(e??"").trim();return m&&p.includes(m)&&P.pop(),P.join(`
3
- `)}var Wt=b('<span class="text-[13px] leading-none text-rc-gray-400"> </span>'),Qt=b('<div class="min-w-0 break-words"> </div>'),Zt=b('<div class="min-w-0 break-words">Conversation hanged up.</div>'),$t=b('<div class="flex w-full justify-center"><div role="button" tabindex="0"><div class="flex flex-wrap items-baseline gap-x-2 gap-y-0"><!> <!></div></div></div>'),er=b('<div class="mr-2 mt-1 flex h-5 w-5 shrink-0 items-center justify-center rounded-sm bg-rc-green-700 text-sm uppercase text-rc-gray-100 backdrop-blur-md"> </div>'),tr=b('<button type="button" title="Edit this message" class="mr-2 mt-1 shrink-0 self-start rounded p-1 text-rc-gray-500 opacity-80 transition-colors hover:bg-rc-gray-900 hover:text-rc-gray-200 focus:outline-none focus-visible:outline-none"><!></button>'),rr=b('<div class="mt-1 text-right text-xs text-rc-gray-200/70"> </div>'),nr=b('<button type="button"><!></button>'),ar=b('<button type="button" class="inline-flex items-center text-nowrap rounded border-0 bg-transparent px-1 py-0.5 text-rc-gray-400 transition-colors hover:bg-rc-gray-900 hover:text-rc-gray-200 focus:outline-none focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:text-rc-gray-400">Analyze</button>'),or=b('<button type="button" class="inline-flex items-center text-nowrap rounded border-0 bg-transparent px-1 py-0.5 text-rc-gray-400 transition-colors hover:bg-rc-gray-900 hover:text-rc-gray-200 focus:outline-none focus-visible:outline-none">Regenerate</button>'),sr=b('<button type="button" class="inline-flex items-center text-nowrap rounded border-0 bg-transparent px-1 py-0.5 text-rc-gray-400 transition-colors hover:bg-rc-gray-900 hover:text-rc-gray-200 focus:outline-none focus-visible:outline-none">See variants</button>'),ir=b('<div class="mt-1 flex flex-wrap items-center gap-x-2 gap-y-1"><!> <!> <!> <!></div>'),cr=b('<!> <!> <div><div role="button" tabindex="0" class="cursor-pointer select-text"><div><div> </div> <!></div></div> <!></div>',1),lr=b('<div class="rounded-md border border-red-500 bg-red-950/40 p-3 font-mono text-sm text-red-200"> </div>'),dr=b("<!> <!>",1),ur=b('<div class="whitespace-pre-wrap break-words rounded-md border border-rc-gray-650 bg-rc-gray-900/60 p-3 text-sm text-rc-gray-100"> </div>'),vr=b('<div class="flex flex-col gap-3"><!> <div class="flex items-center justify-between gap-2 text-sm text-rc-gray-200"><div class="text-rc-gray-400"> </div> <!></div> <div><!> <div class="mt-2 h-[55vh] overflow-auto"><!></div></div></div>'),fr=b("<div><!></div> <!>",1);function Ir(s,e){ft(e,!0);let w=ke(e,"region",3,null),P=ke(e,"allowAddTest",3,!0),p=ke(e,"testSourceStep",3,void 0),m=ke(e,"testFallbackConversation",3,null),U=ke(e,"requireTestSourceStep",3,!1),S=ke(e,"analyzeDisabled",3,!1),D=ke(e,"showSeeVariants",3,!1),te=ke(e,"variantSelectionState",3,"none"),pe=ke(e,"suppressActionRow",3,!1),le=me(!1),O=me("idle"),V=me("content");const K=xt();vt(K.cleanup);function _e(d){return d?d.split("/").at(-1)??d:""}function Te(d){const y=_e(d).trim().charAt(0);return y?y.toUpperCase():"?"}const F=c(()=>{var d;return e.trace.eventName==="finished-main-streaming-step"||e.trace.eventName==="sent-message"?"agent":e.trace.role==="system"||((d=e.trace)==null?void 0:d.bosunInputMessageSender)==="system"?"system":(e.trace.role==="user","user")}),ge=c(()=>t(F)==="agent"?"max-w-[83%]":t(F)==="user"?"max-w-[90%] sm:max-w-[80%] md:max-w-[70%]":t(F)==="system"?"max-w-[90%] sm:max-w-[85%] md:max-w-[75%]":""),ye=c(()=>{var d;return(t(F)==="user"||t(F)==="system")&&!!e.onRevert&&((d=e.trace)==null?void 0:d.bosunPrevStateId)!==void 0}),Ne=c(()=>e.trace.error!=null),$=c(()=>te()==="source");function de(){A(le,!0),A(V,"content")}function we(d){var y;if(!K.shouldSuppressClick(d)){if(t($)){(y=e.onSelectInVariantMode)==null||y.call(e,e.trace);return}de()}}function Oe(d){if(typeof d!="number"||!Number.isFinite(d))return null;const y=new Date(d);if(Number.isNaN(y.getTime()))return null;const J=String(y.getHours()).padStart(2,"0"),z=String(y.getMinutes()).padStart(2,"0"),H=String(y.getSeconds()).padStart(2,"0");return`${J}:${z}:${H}`}const Re=c(()=>{var d;return Oe((d=e.trace)==null?void 0:d.createdAt)});function Fe(d){try{return JSON.stringify(d??null,null,2)}catch{return String(d)}}async function _(){try{await navigator.clipboard.writeText(Fe(e.trace))}catch(d){console.error("Failed to copy",d)}}function g(){return P()&&t(F)==="agent"&&e.trace.eventName!=="transfer-requested"&&(e.trace.eventName==="finished-main-streaming-step"||e.trace.eventName==="sent-message")?U()?!!p()&&typeof p().receivedContext<"u"&&typeof p().response=="string"&&p().response.trim().length>0:!!(e.agentId&&e.agentId.trim()):!1}function X(){return g()&&!!(e.agentId&&e.agentId.trim())}function re(){return t(F)==="agent"&&e.trace.eventName!=="transfer-requested"&&!!(e.agentId&&e.agentId.trim())&&(e.trace.eventName==="finished-main-streaming-step"||e.trace.eventName==="sent-message")}function Pe(){return re()}async function Ke(){var d;try{A(O,"idle");const y=(e.agentId||"").trim();if(!y)throw new Error("Agent id is not available; cannot add test");const J=p()?Kt(p(),{fallbackConversation:m()}):Yt({entries:Ct,trace:e.trace,fallbackRuntimeContext:e.context});await kt.tests.addTest.mutate({agent:y,region:w(),seed:J,mergeContexts:!1}),A(O,"ok");const z=new URLSearchParams;(d=w())!=null&&d.trim()&&z.set("region",w().trim());const H=z.toString();St(`/edit/${encodeURIComponent(y)}/tests${H?`?${H}`:""}`),setTimeout(()=>A(O,"idle"),3e3)}catch(y){console.error("Failed to add test",y),A(O,"error"),setTimeout(()=>A(O,"idle"),4e3)}}var Me=fr(),xe=je(Me);let Ae;var We=a(xe);{var He=d=>{var y=$t(),J=a(y),z=a(J),H=a(z);{var ne=h=>{var L=Wt(),ae=a(L,!0);o(L),R(()=>I(ae,t(Re))),i(h,L)};k(H,h=>{t(Re)&&h(ne)})}var ce=l(H,2);{var x=h=>{var L=Qt(),ae=a(L);o(L),R(()=>I(ae,`Transfer requested: ${e.trace.content??""}`)),i(h,L)},B=h=>{var L=Zt();i(h,L)};k(ce,h=>{e.trace.eventName==="transfer-requested"?h(x):h(B,-1)})}o(z),o(J),o(y),R(()=>Ce(J,1,`cursor-pointer select-text rounded-full border border-rc-gray-650 bg-rc-gray-800/40 px-4 py-2 text-sm text-rc-gray-100 ${t(Ne)?"border-red-500 bg-red-950/30 text-red-200":""}`)),ee("pointerdown",J,function(...h){var L;(L=K.onPointerDown)==null||L.apply(this,h)}),ee("click",J,h=>{K.shouldSuppressClick(h)||de()}),i(d,y)},Qe=d=>{var y=cr(),J=je(y);{var z=q=>{var u=er(),E=a(u,!0);o(u),R((Y,oe)=>{dt(u,"title",Y),I(E,oe)},[()=>_e(e.agentId),()=>Te(e.agentId)]),i(q,u)};k(J,q=>{t(F)==="agent"&&e.agentId&&q(z)})}var H=l(J,2);{var ne=q=>{var u=tr(),E=a(u);gt(E,{name:"undo",width:16,height:16}),o(u),ee("click",u,Y=>{var oe;Y.stopPropagation(),(oe=e.onRevert)==null||oe.call(e,e.trace)}),i(q,u)};k(H,q=>{t(ye)&&q(ne)})}var ce=l(H,2),x=a(ce),B=a(x),h=a(B),L=a(h,!0);o(h);var ae=l(h,2);{var he=q=>{var u=rr(),E=a(u,!0);o(u),R(()=>I(E,t(Re))),i(q,u)};k(ae,q=>{t(Re)&&q(he)})}o(B),o(x);var be=l(x,2);{var Se=q=>{var u=ir(),E=a(u);{var Y=C=>{var T=nr(),ue=a(T);{var Q=j=>{var se=G("Added");i(j,se)},nt=j=>{var se=G("Failed");i(j,se)},Je=j=>{var se=G("Select agent to add test");i(j,se)},Ue=c(()=>!X()),Xe=j=>{var se=G("Add test");i(j,se)};k(ue,j=>{t(O)==="ok"?j(Q):t(O)==="error"?j(nt,1):t(Ue)?j(Je,2):j(Xe,-1)})}o(T),R((j,se,ze)=>{T.disabled=j,dt(T,"title",se),Ce(T,1,`inline-flex items-center text-nowrap rounded border-0 bg-transparent px-1 py-0.5 transition-colors focus:outline-none focus-visible:outline-none ${ze??""}`)},[()=>!X()||t(O)!=="idle",()=>X()?void 0:"Select an agent in the sidebar before adding a test",()=>t(O)!=="idle"||!X()?"cursor-default text-rc-gray-400":"cursor-pointer text-rc-gray-400 hover:bg-rc-gray-900 hover:text-rc-gray-200"]),ee("click",T,j=>{j.stopPropagation(),Ke()}),i(C,T)},oe=c(()=>g());k(E,C=>{t(oe)&&C(Y)})}var Ve=l(E,2);{var qe=C=>{var T=ar();R(()=>T.disabled=S()),ee("click",T,ue=>{ue.stopPropagation(),e.onAnalyze(e.trace)}),i(C,T)},r=c(()=>re()&&e.onAnalyze);k(Ve,C=>{t(r)&&C(qe)})}var n=l(Ve,2);{var v=C=>{var T=or();ee("click",T,ue=>{ue.stopPropagation(),e.onRegenerate(e.trace)}),i(C,T)},f=c(()=>Pe()&&e.onRegenerate);k(n,C=>{t(f)&&C(v)})}var M=l(n,2);{var W=C=>{var T=sr();ee("click",T,ue=>{ue.stopPropagation(),e.onSeeVariants(e.trace)}),i(C,T)};k(M,C=>{D()&&e.onSeeVariants&&C(W)})}o(u),i(q,u)},Ge=c(()=>!pe()&&(re()||g()||Pe()&&e.onRegenerate||D()));k(be,q=>{t(Ge)&&q(Se)})}o(ce),R(()=>{Ce(ce,1,`min-w-0 ${t(ge)??""}`),Ce(B,1,`rounded-lg ${t(F)==="system"?"justify-between whitespace-pre-line break-words border border-emerald-500 text-emerald-500":t($)?"w-full whitespace-pre-line break-words border border-rc-green-450 bg-transparent backdrop-blur-md hover:bg-rc-green-700":t(F)!=="user"?"w-full whitespace-pre-line break-words bg-rc-green-700 backdrop-blur-md":"whitespace-pre-line break-words bg-rc-gray-700"} ${t(F)==="system"||t($)?"":"border-thin border-rc-gray-110"} p-2 pt-1 text-rc-gray-100 ${t(Ne)?"border-red-500 bg-red-950/30 text-red-200":""}`),I(L,e.trace.content)}),ee("pointerdown",x,function(...q){var u;(u=K.onPointerDown)==null||u.apply(this,q)}),ee("click",x,we),i(d,y)};k(We,d=>{e.trace.eventName==="transfer-requested"||e.trace.eventName==="hangup-requested"?d(He):d(Qe,-1)})}o(xe);var Be=l(xe,2);{var Ze=d=>{{const y=z=>{var H=vr(),ne=a(H);{var ce=u=>{var E=lr(),Y=a(E,!0);o(E),R(oe=>I(Y,oe),[()=>Fe(e.trace.error)]),i(u,E)};k(ne,u=>{t(Ne)&&u(ce)})}var x=l(ne,2),B=a(x),h=a(B);o(B);var L=l(B,2);ct(L,{variant:"secondary",size:"small",onclick:_,children:(u,E)=>{Z();var Y=G("Copy raw trace");i(u,Y)},$$slots:{default:!0}}),o(x);var ae=l(x,2),he=a(ae);it(he,{get value(){return t(V)},ariaLabel:"Conversational trace tabs",onChange:({value:u})=>A(V,u,!0),children:(u,E)=>{var Y=dr(),oe=je(Y);fe(oe,{value:"content",class:"px-3",children:(qe,r)=>{Z();var n=G("Content");i(qe,n)},$$slots:{default:!0}});var Ve=l(oe,2);fe(Ve,{value:"raw",class:"px-3",children:(qe,r)=>{Z();var n=G("Raw");i(qe,n)},$$slots:{default:!0}}),i(u,Y)},$$slots:{default:!0}});var be=l(he,2),Se=a(be);{var Ge=u=>{var E=ur(),Y=a(E,!0);o(E),R(()=>I(Y,e.trace.content)),i(u,E)},q=u=>{{let E=c(()=>Fe(e.trace));Ee(u,{get value(){return t(E)},language:"json",class:"h-full"})}};k(Se,u=>{t(V)==="content"?u(Ge):u(q,-1)})}o(be),o(ae),o(H),R(()=>I(h,`${e.trace.role??""} • ${e.trace.medium??""}`)),i(z,H)};let J=c(()=>`Conversation: ${e.trace.eventName}`);st(d,{get title(){return t(J)},class:"!w-[80vw] !max-w-4xl",get open(){return t(le)},set open(z){A(le,z,!0)},children:y,$$slots:{default:!0}})}};k(Be,d=>{t(le)&&d(Ze)})}R(()=>Ae=Ce(xe,1,"group mb-2 flex w-full items-start",null,Ae,{"justify-end":t(F)==="user"||t(F)==="system"})),i(s,Me),mt()}ut(["pointerdown","click"]);export{Mr as C,Ar as a,Ir as b,Vt as c,tt as d,Ut as e,Xt as f,zt as m};
@@ -1 +0,0 @@
1
- import{l as o,a as r}from"../chunks/DThbydRF.js";export{o as load_css,r as start};
@@ -1,2 +0,0 @@
1
- )�import{l as o,a as r}from"../chunks/DThbydRF.js";export{o as load_css,r as start};
2
-