@recombine-ai/bosun 0.1.9 → 0.2.0-draft

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 (440) hide show
  1. package/bin/bosun.js +9 -8
  2. package/build/academy/academy.ts +584 -0
  3. package/build/academy/csv/index.ts +155 -0
  4. package/build/academy/data.ts +299 -0
  5. package/build/academy/emulate-agents.ts +129 -0
  6. package/build/academy/google-sheets/index.ts +187 -0
  7. package/build/academy/runPromptTests.cli.ts +99 -0
  8. package/build/academy/suite.ts +99 -0
  9. package/build/client/_app/immutable/assets/0.3Ve1RxLg.css +1 -0
  10. package/build/client/_app/immutable/assets/0.3Ve1RxLg.css.br +0 -0
  11. package/build/client/_app/immutable/assets/0.3Ve1RxLg.css.gz +0 -0
  12. package/build/client/_app/immutable/assets/3.C7pCuiHL.css +1 -0
  13. package/build/client/_app/immutable/assets/3.C7pCuiHL.css.br +0 -0
  14. package/build/client/_app/immutable/assets/3.C7pCuiHL.css.gz +0 -0
  15. package/build/client/_app/immutable/assets/4.Baezuvdj.css +1 -0
  16. package/build/client/_app/immutable/assets/4.Baezuvdj.css.br +0 -0
  17. package/build/client/_app/immutable/assets/4.Baezuvdj.css.gz +0 -0
  18. package/build/client/_app/immutable/assets/6.CebW_jOJ.css +1 -0
  19. package/build/client/_app/immutable/assets/6.CebW_jOJ.css.br +0 -0
  20. package/build/client/_app/immutable/assets/6.CebW_jOJ.css.gz +0 -0
  21. package/build/client/_app/immutable/assets/8.f3T7i0UW.css +1 -0
  22. package/build/client/_app/immutable/assets/8.f3T7i0UW.css.br +0 -0
  23. package/build/client/_app/immutable/assets/8.f3T7i0UW.css.gz +0 -0
  24. package/build/client/_app/immutable/assets/AgentSidebar.BEG0l2mN.css +1 -0
  25. package/build/client/_app/immutable/assets/AgentSidebar.BEG0l2mN.css.br +0 -0
  26. package/build/client/_app/immutable/assets/AgentSidebar.BEG0l2mN.css.gz +0 -0
  27. package/build/client/_app/immutable/assets/Link.D7uHGZ0C.css +1 -0
  28. package/build/client/_app/immutable/assets/Link.D7uHGZ0C.css.br +1 -0
  29. package/build/client/_app/immutable/assets/Link.D7uHGZ0C.css.gz +0 -0
  30. package/build/client/_app/immutable/assets/Tab.DrtF13Tg.css +1 -0
  31. package/build/client/_app/immutable/assets/Tab.DrtF13Tg.css.br +0 -0
  32. package/build/client/_app/immutable/assets/Tab.DrtF13Tg.css.gz +0 -0
  33. package/build/client/_app/immutable/chunks/B6Eu_a6G.js +8 -0
  34. package/build/client/_app/immutable/chunks/B6Eu_a6G.js.br +0 -0
  35. package/build/client/_app/immutable/chunks/B6Eu_a6G.js.gz +0 -0
  36. package/build/client/_app/immutable/chunks/B946i1vX.js +1 -0
  37. package/build/client/_app/immutable/chunks/B946i1vX.js.br +0 -0
  38. package/build/client/_app/immutable/chunks/B946i1vX.js.gz +0 -0
  39. package/build/client/_app/immutable/chunks/BDr6IUDE.js +1 -0
  40. package/build/client/_app/immutable/chunks/BDr6IUDE.js.br +0 -0
  41. package/build/client/_app/immutable/chunks/BDr6IUDE.js.gz +0 -0
  42. package/build/client/_app/immutable/chunks/BJ0PAzRz.js +1 -0
  43. package/build/client/_app/immutable/chunks/BJ0PAzRz.js.br +0 -0
  44. package/build/client/_app/immutable/chunks/BJ0PAzRz.js.gz +0 -0
  45. package/build/client/_app/immutable/chunks/BQsXEsya.js +2 -0
  46. package/build/client/_app/immutable/chunks/BQsXEsya.js.br +0 -0
  47. package/build/client/_app/immutable/chunks/BQsXEsya.js.gz +0 -0
  48. package/build/client/_app/immutable/chunks/BVH8cl8Q.js +1 -0
  49. package/build/client/_app/immutable/chunks/BVH8cl8Q.js.br +0 -0
  50. package/build/client/_app/immutable/chunks/BVH8cl8Q.js.gz +0 -0
  51. package/build/client/_app/immutable/chunks/Bckf35or.js +1 -0
  52. package/build/client/_app/immutable/chunks/Bckf35or.js.br +1 -0
  53. package/build/client/_app/immutable/chunks/Bckf35or.js.gz +0 -0
  54. package/build/client/_app/immutable/chunks/BcyK4bvI.js +1 -0
  55. package/build/client/_app/immutable/chunks/BcyK4bvI.js.br +0 -0
  56. package/build/client/_app/immutable/chunks/BcyK4bvI.js.gz +0 -0
  57. package/build/client/_app/immutable/chunks/BpsvkpCa.js +1 -0
  58. package/build/client/_app/immutable/chunks/BpsvkpCa.js.br +0 -0
  59. package/build/client/_app/immutable/chunks/BpsvkpCa.js.gz +0 -0
  60. package/build/client/_app/immutable/chunks/C7b8kjFl.js +33 -0
  61. package/build/client/_app/immutable/chunks/C7b8kjFl.js.br +0 -0
  62. package/build/client/_app/immutable/chunks/C7b8kjFl.js.gz +0 -0
  63. package/build/client/_app/immutable/chunks/{D5O98MXA.js → C9ihsQgF.js} +2 -2
  64. package/build/client/_app/immutable/chunks/C9ihsQgF.js.br +6 -0
  65. package/build/client/_app/immutable/chunks/C9ihsQgF.js.gz +0 -0
  66. package/build/client/_app/immutable/chunks/CEHtmspK.js +1 -0
  67. package/build/client/_app/immutable/chunks/CEHtmspK.js.br +0 -0
  68. package/build/client/_app/immutable/chunks/CEHtmspK.js.gz +0 -0
  69. package/build/client/_app/immutable/chunks/CHop8m-3.js +1 -0
  70. package/build/client/_app/immutable/chunks/CHop8m-3.js.br +0 -0
  71. package/build/client/_app/immutable/chunks/CHop8m-3.js.gz +0 -0
  72. package/build/client/_app/immutable/chunks/CUWa2xqt.js +1 -0
  73. package/build/client/_app/immutable/chunks/CUWa2xqt.js.br +0 -0
  74. package/build/client/_app/immutable/chunks/CUWa2xqt.js.gz +0 -0
  75. package/build/client/_app/immutable/chunks/ClfaR3Y2.js +1 -0
  76. package/build/client/_app/immutable/chunks/ClfaR3Y2.js.br +0 -0
  77. package/build/client/_app/immutable/chunks/ClfaR3Y2.js.gz +0 -0
  78. package/build/client/_app/immutable/chunks/DAgYAbDT.js +3 -0
  79. package/build/client/_app/immutable/chunks/DAgYAbDT.js.br +0 -0
  80. package/build/client/_app/immutable/chunks/DAgYAbDT.js.gz +0 -0
  81. package/build/client/_app/immutable/chunks/DBCXNg0T.js +1 -0
  82. package/build/client/_app/immutable/chunks/DBCXNg0T.js.br +0 -0
  83. package/build/client/_app/immutable/chunks/DBCXNg0T.js.gz +0 -0
  84. package/build/client/_app/immutable/chunks/DDncCuU5.js +1 -0
  85. package/build/client/_app/immutable/chunks/DDncCuU5.js.br +2 -0
  86. package/build/client/_app/immutable/chunks/DDncCuU5.js.gz +0 -0
  87. package/build/client/_app/immutable/chunks/DHQ8_yIz.js +1 -0
  88. package/build/client/_app/immutable/chunks/DHQ8_yIz.js.br +0 -0
  89. package/build/client/_app/immutable/chunks/DHQ8_yIz.js.gz +0 -0
  90. package/build/client/_app/immutable/chunks/Deb2U3a-.js +1 -0
  91. package/build/client/_app/immutable/chunks/Deb2U3a-.js.br +0 -0
  92. package/build/client/_app/immutable/chunks/Deb2U3a-.js.gz +0 -0
  93. package/build/client/_app/immutable/chunks/{B8bx6-qu.js → DgNsppMf.js} +1 -1
  94. package/build/client/_app/immutable/chunks/DgNsppMf.js.br +0 -0
  95. package/build/client/_app/immutable/chunks/DgNsppMf.js.gz +0 -0
  96. package/build/client/_app/immutable/chunks/DgSSnt2u.js +1 -0
  97. package/build/client/_app/immutable/chunks/DgSSnt2u.js.br +0 -0
  98. package/build/client/_app/immutable/chunks/DgSSnt2u.js.gz +0 -0
  99. package/build/client/_app/immutable/chunks/Dr0H-PA9.js +1 -0
  100. package/build/client/_app/immutable/chunks/Dr0H-PA9.js.br +0 -0
  101. package/build/client/_app/immutable/chunks/Dr0H-PA9.js.gz +0 -0
  102. package/build/client/_app/immutable/chunks/HA3qddzj.js +1 -0
  103. package/build/client/_app/immutable/chunks/HA3qddzj.js.br +0 -0
  104. package/build/client/_app/immutable/chunks/HA3qddzj.js.gz +0 -0
  105. package/build/client/_app/immutable/chunks/LPKWlFs0.js +1 -0
  106. package/build/client/_app/immutable/chunks/LPKWlFs0.js.br +3 -0
  107. package/build/client/_app/immutable/chunks/LPKWlFs0.js.gz +0 -0
  108. package/build/client/_app/immutable/chunks/VpPuF4LW.js +3 -0
  109. package/build/client/_app/immutable/chunks/VpPuF4LW.js.br +0 -0
  110. package/build/client/_app/immutable/chunks/VpPuF4LW.js.gz +0 -0
  111. package/build/client/_app/immutable/chunks/XyRovF4A.js +1 -0
  112. package/build/client/_app/immutable/chunks/XyRovF4A.js.br +0 -0
  113. package/build/client/_app/immutable/chunks/XyRovF4A.js.gz +0 -0
  114. package/build/client/_app/immutable/chunks/mRVZsLQ4.js +1 -0
  115. package/build/client/_app/immutable/chunks/mRVZsLQ4.js.br +2 -0
  116. package/build/client/_app/immutable/chunks/mRVZsLQ4.js.gz +0 -0
  117. package/build/client/_app/immutable/entry/app.CVDHq7dN.js +2 -0
  118. package/build/client/_app/immutable/entry/app.CVDHq7dN.js.br +0 -0
  119. package/build/client/_app/immutable/entry/app.CVDHq7dN.js.gz +0 -0
  120. package/build/client/_app/immutable/entry/start.a4wXr-rh.js +1 -0
  121. package/build/client/_app/immutable/entry/start.a4wXr-rh.js.br +2 -0
  122. package/build/client/_app/immutable/entry/start.a4wXr-rh.js.gz +0 -0
  123. package/build/client/_app/immutable/nodes/0.q5P1PqkU.js +3 -0
  124. package/build/client/_app/immutable/nodes/0.q5P1PqkU.js.br +0 -0
  125. package/build/client/_app/immutable/nodes/0.q5P1PqkU.js.gz +0 -0
  126. package/build/client/_app/immutable/nodes/1.TfmDsqd-.js +1 -0
  127. package/build/client/_app/immutable/nodes/1.TfmDsqd-.js.br +0 -0
  128. package/build/client/_app/immutable/nodes/1.TfmDsqd-.js.gz +0 -0
  129. package/build/client/_app/immutable/nodes/10.BpXsBlTN.js +1 -0
  130. package/build/client/_app/immutable/nodes/10.BpXsBlTN.js.br +0 -0
  131. package/build/client/_app/immutable/nodes/10.BpXsBlTN.js.gz +0 -0
  132. package/build/client/_app/immutable/nodes/11.Bs_5a_H1.js +1 -0
  133. package/build/client/_app/immutable/nodes/11.Bs_5a_H1.js.br +0 -0
  134. package/build/client/_app/immutable/nodes/11.Bs_5a_H1.js.gz +0 -0
  135. package/build/client/_app/immutable/nodes/2.BWtLQzzv.js +3 -0
  136. package/build/client/_app/immutable/nodes/2.BWtLQzzv.js.br +0 -0
  137. package/build/client/_app/immutable/nodes/2.BWtLQzzv.js.gz +0 -0
  138. package/build/client/_app/immutable/nodes/3.BlYIVobe.js +1 -0
  139. package/build/client/_app/immutable/nodes/3.BlYIVobe.js.br +0 -0
  140. package/build/client/_app/immutable/nodes/3.BlYIVobe.js.gz +0 -0
  141. package/build/client/_app/immutable/nodes/4.DMboagHp.js +38 -0
  142. package/build/client/_app/immutable/nodes/4.DMboagHp.js.br +0 -0
  143. package/build/client/_app/immutable/nodes/4.DMboagHp.js.gz +0 -0
  144. package/build/client/_app/immutable/nodes/5.DJDEfbU1.js +1 -0
  145. package/build/client/_app/immutable/nodes/5.DJDEfbU1.js.br +0 -0
  146. package/build/client/_app/immutable/nodes/5.DJDEfbU1.js.gz +0 -0
  147. package/build/client/_app/immutable/nodes/6.Co1n7leD.js +12 -0
  148. package/build/client/_app/immutable/nodes/6.Co1n7leD.js.br +0 -0
  149. package/build/client/_app/immutable/nodes/6.Co1n7leD.js.gz +0 -0
  150. package/build/client/_app/immutable/nodes/7.3clSez0f.js +1 -0
  151. package/build/client/_app/immutable/nodes/7.3clSez0f.js.br +0 -0
  152. package/build/client/_app/immutable/nodes/7.3clSez0f.js.gz +0 -0
  153. package/build/client/_app/immutable/nodes/8.D4xImLsM.js +1 -0
  154. package/build/client/_app/immutable/nodes/8.D4xImLsM.js.br +0 -0
  155. package/build/client/_app/immutable/nodes/8.D4xImLsM.js.gz +0 -0
  156. package/build/client/_app/immutable/nodes/9.C1KWPSTf.js +1 -0
  157. package/build/client/_app/immutable/nodes/9.C1KWPSTf.js.br +0 -0
  158. package/build/client/_app/immutable/nodes/9.C1KWPSTf.js.gz +0 -0
  159. package/build/client/_app/version.json +1 -1
  160. package/build/client/_app/version.json.br +0 -0
  161. package/build/client/_app/version.json.gz +0 -0
  162. package/build/server/chunks/0-CgyQG-Vf.js +9 -0
  163. package/build/server/chunks/0-CgyQG-Vf.js.map +1 -0
  164. package/build/server/chunks/1-DACiLfsu.js +9 -0
  165. package/build/server/chunks/{1-Cwk3hpe9.js.map → 1-DACiLfsu.js.map} +1 -1
  166. package/build/server/chunks/10-zMqY0bCj.js +9 -0
  167. package/build/server/chunks/10-zMqY0bCj.js.map +1 -0
  168. package/build/server/chunks/11-B7cPB4ip.js +9 -0
  169. package/build/server/chunks/11-B7cPB4ip.js.map +1 -0
  170. package/build/server/chunks/2-uTf78dNT.js +9 -0
  171. package/build/server/chunks/2-uTf78dNT.js.map +1 -0
  172. package/build/server/chunks/3-DOOLRXaZ.js +9 -0
  173. package/build/server/chunks/3-DOOLRXaZ.js.map +1 -0
  174. package/build/server/chunks/4-CLK_BxY0.js +9 -0
  175. package/build/server/chunks/4-CLK_BxY0.js.map +1 -0
  176. package/build/server/chunks/5-DfZ6yJrz.js +9 -0
  177. package/build/server/chunks/5-DfZ6yJrz.js.map +1 -0
  178. package/build/server/chunks/6-B2BoZUr6.js +22 -0
  179. package/build/server/chunks/6-B2BoZUr6.js.map +1 -0
  180. package/build/server/chunks/{5-p3BDfNc2.js → 7-DmgY6drC.js} +6 -6
  181. package/build/server/chunks/7-DmgY6drC.js.map +1 -0
  182. package/build/server/chunks/8-Bku8n4Ko.js +9 -0
  183. package/build/server/chunks/8-Bku8n4Ko.js.map +1 -0
  184. package/build/server/chunks/{7-C_AGqUAU.js → 9-nwlpMH7t.js} +5 -5
  185. package/build/server/chunks/9-nwlpMH7t.js.map +1 -0
  186. package/build/server/chunks/AgentSidebar-CZIBBsSh.js +141 -0
  187. package/build/server/chunks/AgentSidebar-CZIBBsSh.js.map +1 -0
  188. package/build/server/chunks/Button-OUO_MioZ.js +44 -0
  189. package/build/server/chunks/Button-OUO_MioZ.js.map +1 -0
  190. package/build/server/chunks/ContextEditor-stz14-2o.js +48 -0
  191. package/build/server/chunks/ContextEditor-stz14-2o.js.map +1 -0
  192. package/build/server/chunks/{Dropdown-B-UCol1v.js → Dropdown-BTr_XiAm.js} +2 -2
  193. package/build/server/chunks/Dropdown-BTr_XiAm.js.map +1 -0
  194. package/build/server/chunks/{Input-DLAEH36y.js → Input-B_jIG2tD.js} +2 -2
  195. package/build/server/chunks/Input-B_jIG2tD.js.map +1 -0
  196. package/build/server/chunks/{Icon-DDJ9D6Sq.js → Link-DaOJVbdB.js} +25 -42
  197. package/build/server/chunks/Link-DaOJVbdB.js.map +1 -0
  198. package/build/server/chunks/{Panel-KZDoG3_L.js → Panel-CmvYn6IC.js} +2 -2
  199. package/build/server/chunks/Panel-CmvYn6IC.js.map +1 -0
  200. package/build/server/chunks/Tab-n348Mfiq.js +84 -0
  201. package/build/server/chunks/Tab-n348Mfiq.js.map +1 -0
  202. package/build/server/chunks/_layout.svelte-CP6tz6DB.js +62 -0
  203. package/build/server/chunks/_layout.svelte-CP6tz6DB.js.map +1 -0
  204. package/build/server/chunks/{_layout.svelte-BoAJDYC1.js → _layout.svelte-CvGX8M4U.js} +68 -18
  205. package/build/server/chunks/_layout.svelte-CvGX8M4U.js.map +1 -0
  206. package/build/server/chunks/{_page.svelte-CdEfc0bc.js → _page.svelte-AHHrodUG.js} +94 -86
  207. package/build/server/chunks/_page.svelte-AHHrodUG.js.map +1 -0
  208. package/build/server/chunks/_page.svelte-Bm-iBjXM.js +80 -0
  209. package/build/server/chunks/_page.svelte-Bm-iBjXM.js.map +1 -0
  210. package/build/server/chunks/_page.svelte-D5Xqk3cI.js +52 -0
  211. package/build/server/chunks/_page.svelte-D5Xqk3cI.js.map +1 -0
  212. package/build/server/chunks/{_page.svelte-CNhxx79k.js → _page.svelte-DKBFi-JF.js} +202 -240
  213. package/build/server/chunks/_page.svelte-DKBFi-JF.js.map +1 -0
  214. package/build/server/chunks/{_page.svelte-DQUdiD4S.js → _page.svelte-DSefP5E9.js} +6 -5
  215. package/build/server/chunks/_page.svelte-DSefP5E9.js.map +1 -0
  216. package/build/server/chunks/{_page.svelte-kLLxi8vG.js → _page.svelte-Dldwxu4m.js} +28 -6
  217. package/build/server/chunks/_page.svelte-Dldwxu4m.js.map +1 -0
  218. package/build/server/chunks/{_page.svelte-Cc0DAAQW.js → _page.svelte-lU1-SHJj.js} +5 -4
  219. package/build/server/chunks/_page.svelte-lU1-SHJj.js.map +1 -0
  220. package/build/server/chunks/{_page.svelte-nsIWq28L.js → _page.svelte-vGR-ltk7.js} +7 -27
  221. package/build/server/chunks/_page.svelte-vGR-ltk7.js.map +1 -0
  222. package/build/server/chunks/{_server.ts-d0Tii8aZ.js → _server.ts-3D9tpnMZ.js} +3 -2
  223. package/build/server/chunks/_server.ts-3D9tpnMZ.js.map +1 -0
  224. package/build/server/chunks/{_server.ts-BBxm_xV1.js → _server.ts-B56wS_0L.js} +4 -1
  225. package/build/server/chunks/_server.ts-B56wS_0L.js.map +1 -0
  226. package/build/server/chunks/{_server.ts-CLKPeFqF.js → _server.ts-BCBY3OIY.js} +3 -2
  227. package/build/server/chunks/_server.ts-BCBY3OIY.js.map +1 -0
  228. package/build/server/chunks/{_server.ts-BmZBSYvJ.js → _server.ts-BCfiuZgS.js} +19 -8
  229. package/build/server/chunks/_server.ts-BCfiuZgS.js.map +1 -0
  230. package/build/server/chunks/_server.ts-BkL-sSQA.js.map +1 -1
  231. package/build/server/chunks/{_server.ts-DEHw6op6.js → _server.ts-D0C3cRDU.js} +3 -2
  232. package/build/server/chunks/_server.ts-D0C3cRDU.js.map +1 -0
  233. package/build/server/chunks/{_server.ts-BYDdbqNr.js → _server.ts-Dc989xbA.js} +3 -2
  234. package/build/server/chunks/_server.ts-Dc989xbA.js.map +1 -0
  235. package/build/server/chunks/_server.ts-Ddto8x_p.js.map +1 -1
  236. package/build/server/chunks/{_server.ts-BIcKE9RQ.js → _server.ts-I-18L-Sg.js} +3 -2
  237. package/build/server/chunks/_server.ts-I-18L-Sg.js.map +1 -0
  238. package/build/server/chunks/_server.ts-iuWHhHZx.js +629 -0
  239. package/build/server/chunks/_server.ts-iuWHhHZx.js.map +1 -0
  240. package/build/server/chunks/agents-context-C4MM7lSl.js +6 -0
  241. package/build/server/chunks/agents-context-C4MM7lSl.js.map +1 -0
  242. package/build/server/chunks/{client2-tp0-IQU0.js → client-BhnXtftB.js} +6 -29
  243. package/build/server/chunks/client-BhnXtftB.js.map +1 -0
  244. package/build/server/chunks/{index2-CVBATI2G.js → context-Dy9MY1Z0.js} +253 -965
  245. package/build/server/chunks/context-Dy9MY1Z0.js.map +1 -0
  246. package/build/server/chunks/{data-CbXDDeDB.js → data-BltJc-uF.js} +29 -89
  247. package/build/server/chunks/data-BltJc-uF.js.map +1 -0
  248. package/build/server/chunks/error.svelte-Cn6umEWY.js +14 -0
  249. package/build/server/chunks/error.svelte-Cn6umEWY.js.map +1 -0
  250. package/build/server/chunks/errors-B8liwVcD.js +17 -0
  251. package/build/server/chunks/errors-B8liwVcD.js.map +1 -0
  252. package/build/server/chunks/{events-A18hGvKp.js → events-BFcZEt66.js} +3 -9
  253. package/build/server/chunks/events-BFcZEt66.js.map +1 -0
  254. package/build/server/chunks/{index-BoStl4QO.js → index-C0ds_eUO.js} +8 -3
  255. package/build/server/chunks/index-C0ds_eUO.js.map +1 -0
  256. package/build/server/chunks/index-server-CMCI3p2Y.js +18 -0
  257. package/build/server/chunks/index-server-CMCI3p2Y.js.map +1 -0
  258. package/build/server/chunks/index2-B1rkViAM.js +860 -0
  259. package/build/server/chunks/index2-B1rkViAM.js.map +1 -0
  260. package/build/server/chunks/index3-CVYj52gl.js.map +1 -1
  261. package/build/server/chunks/index4-DSZuWW-A.js +47 -0
  262. package/build/server/chunks/index4-DSZuWW-A.js.map +1 -0
  263. package/build/server/chunks/main-DL75vM4l.js +2250 -0
  264. package/build/server/chunks/main-DL75vM4l.js.map +1 -0
  265. package/build/server/chunks/{state.svelte-Dze7OxC_.js → state.svelte-CBgyohE1.js} +2 -2
  266. package/build/server/chunks/state.svelte-CBgyohE1.js.map +1 -0
  267. package/build/server/chunks/suite-4--Gr0jF.js +60 -0
  268. package/build/server/chunks/suite-4--Gr0jF.js.map +1 -0
  269. package/build/server/chunks/ws-client-CyJORDFw.js +98 -0
  270. package/build/server/chunks/ws-client-CyJORDFw.js.map +1 -0
  271. package/build/server/index.js +167 -90
  272. package/build/server/index.js.map +1 -1
  273. package/build/server/manifest.js +83 -75
  274. package/build/server/manifest.js.map +1 -1
  275. package/package.json +3 -1
  276. package/src/ws-server/projects.ts +82 -9
  277. package/build/client/_app/immutable/assets/0.7xdY7TSX.css +0 -1
  278. package/build/client/_app/immutable/assets/0.7xdY7TSX.css.br +0 -0
  279. package/build/client/_app/immutable/assets/0.7xdY7TSX.css.gz +0 -0
  280. package/build/client/_app/immutable/assets/10.C1o6a69m.css +0 -1
  281. package/build/client/_app/immutable/assets/10.C1o6a69m.css.br +0 -1
  282. package/build/client/_app/immutable/assets/10.C1o6a69m.css.gz +0 -0
  283. package/build/client/_app/immutable/assets/4.858mUNwe.css +0 -1
  284. package/build/client/_app/immutable/assets/4.858mUNwe.css.br +0 -0
  285. package/build/client/_app/immutable/assets/4.858mUNwe.css.gz +0 -0
  286. package/build/client/_app/immutable/assets/6.CD1QZ0pt.css +0 -1
  287. package/build/client/_app/immutable/assets/6.CD1QZ0pt.css.br +0 -0
  288. package/build/client/_app/immutable/assets/6.CD1QZ0pt.css.gz +0 -0
  289. package/build/client/_app/immutable/chunks/2PVbuV1X.js +0 -1
  290. package/build/client/_app/immutable/chunks/2PVbuV1X.js.br +0 -1
  291. package/build/client/_app/immutable/chunks/2PVbuV1X.js.gz +0 -0
  292. package/build/client/_app/immutable/chunks/9OGf6H2n.js +0 -1
  293. package/build/client/_app/immutable/chunks/9OGf6H2n.js.br +0 -2
  294. package/build/client/_app/immutable/chunks/9OGf6H2n.js.gz +0 -0
  295. package/build/client/_app/immutable/chunks/B8bx6-qu.js.br +0 -1
  296. package/build/client/_app/immutable/chunks/B8bx6-qu.js.gz +0 -0
  297. package/build/client/_app/immutable/chunks/BDTuVTVZ.js +0 -1
  298. package/build/client/_app/immutable/chunks/BDTuVTVZ.js.br +0 -0
  299. package/build/client/_app/immutable/chunks/BDTuVTVZ.js.gz +0 -0
  300. package/build/client/_app/immutable/chunks/BTGV3Gq0.js +0 -8
  301. package/build/client/_app/immutable/chunks/BTGV3Gq0.js.br +0 -0
  302. package/build/client/_app/immutable/chunks/BTGV3Gq0.js.gz +0 -0
  303. package/build/client/_app/immutable/chunks/BUoURvZ_.js +0 -1
  304. package/build/client/_app/immutable/chunks/BUoURvZ_.js.br +0 -0
  305. package/build/client/_app/immutable/chunks/BUoURvZ_.js.gz +0 -0
  306. package/build/client/_app/immutable/chunks/BdOqksoz.js +0 -1
  307. package/build/client/_app/immutable/chunks/BdOqksoz.js.br +0 -0
  308. package/build/client/_app/immutable/chunks/BdOqksoz.js.gz +0 -0
  309. package/build/client/_app/immutable/chunks/Be371ezp.js +0 -2
  310. package/build/client/_app/immutable/chunks/Be371ezp.js.br +0 -0
  311. package/build/client/_app/immutable/chunks/Be371ezp.js.gz +0 -0
  312. package/build/client/_app/immutable/chunks/Bmx4ManB.js +0 -1
  313. package/build/client/_app/immutable/chunks/Bmx4ManB.js.br +0 -0
  314. package/build/client/_app/immutable/chunks/Bmx4ManB.js.gz +0 -0
  315. package/build/client/_app/immutable/chunks/C2Y9UxTx.js +0 -1
  316. package/build/client/_app/immutable/chunks/C2Y9UxTx.js.br +0 -0
  317. package/build/client/_app/immutable/chunks/C2Y9UxTx.js.gz +0 -0
  318. package/build/client/_app/immutable/chunks/C681lv5i.js +0 -3
  319. package/build/client/_app/immutable/chunks/C681lv5i.js.br +0 -0
  320. package/build/client/_app/immutable/chunks/C681lv5i.js.gz +0 -0
  321. package/build/client/_app/immutable/chunks/CYuXdPQc.js +0 -1
  322. package/build/client/_app/immutable/chunks/CYuXdPQc.js.br +0 -0
  323. package/build/client/_app/immutable/chunks/CYuXdPQc.js.gz +0 -0
  324. package/build/client/_app/immutable/chunks/CpZGG0E7.js +0 -1
  325. package/build/client/_app/immutable/chunks/CpZGG0E7.js.br +0 -0
  326. package/build/client/_app/immutable/chunks/CpZGG0E7.js.gz +0 -0
  327. package/build/client/_app/immutable/chunks/CpdYAO0i.js +0 -1
  328. package/build/client/_app/immutable/chunks/CpdYAO0i.js.br +0 -0
  329. package/build/client/_app/immutable/chunks/CpdYAO0i.js.gz +0 -0
  330. package/build/client/_app/immutable/chunks/CtpS-ZbM.js +0 -1
  331. package/build/client/_app/immutable/chunks/CtpS-ZbM.js.br +0 -0
  332. package/build/client/_app/immutable/chunks/CtpS-ZbM.js.gz +0 -0
  333. package/build/client/_app/immutable/chunks/D5O98MXA.js.br +0 -0
  334. package/build/client/_app/immutable/chunks/D5O98MXA.js.gz +0 -0
  335. package/build/client/_app/immutable/chunks/DIiF2tGe.js +0 -1
  336. package/build/client/_app/immutable/chunks/DIiF2tGe.js.br +0 -0
  337. package/build/client/_app/immutable/chunks/DIiF2tGe.js.gz +0 -0
  338. package/build/client/_app/immutable/chunks/D_4dC3JZ.js +0 -1
  339. package/build/client/_app/immutable/chunks/D_4dC3JZ.js.br +0 -0
  340. package/build/client/_app/immutable/chunks/D_4dC3JZ.js.gz +0 -0
  341. package/build/client/_app/immutable/chunks/DveC87gn.js +0 -33
  342. package/build/client/_app/immutable/chunks/DveC87gn.js.br +0 -0
  343. package/build/client/_app/immutable/chunks/DveC87gn.js.gz +0 -0
  344. package/build/client/_app/immutable/chunks/ISgeSat5.js +0 -1
  345. package/build/client/_app/immutable/chunks/ISgeSat5.js.br +0 -0
  346. package/build/client/_app/immutable/chunks/ISgeSat5.js.gz +0 -0
  347. package/build/client/_app/immutable/chunks/uzczSfVx.js +0 -3
  348. package/build/client/_app/immutable/chunks/uzczSfVx.js.br +0 -0
  349. package/build/client/_app/immutable/chunks/uzczSfVx.js.gz +0 -0
  350. package/build/client/_app/immutable/entry/app.CSVt0Fuk.js +0 -2
  351. package/build/client/_app/immutable/entry/app.CSVt0Fuk.js.br +0 -0
  352. package/build/client/_app/immutable/entry/app.CSVt0Fuk.js.gz +0 -0
  353. package/build/client/_app/immutable/entry/start.BQnEMq3G.js +0 -1
  354. package/build/client/_app/immutable/entry/start.BQnEMq3G.js.br +0 -2
  355. package/build/client/_app/immutable/entry/start.BQnEMq3G.js.gz +0 -0
  356. package/build/client/_app/immutable/nodes/0.BFGm6g4L.js +0 -1
  357. package/build/client/_app/immutable/nodes/0.BFGm6g4L.js.br +0 -0
  358. package/build/client/_app/immutable/nodes/0.BFGm6g4L.js.gz +0 -0
  359. package/build/client/_app/immutable/nodes/1.B_l4Mw8E.js +0 -1
  360. package/build/client/_app/immutable/nodes/1.B_l4Mw8E.js.br +0 -0
  361. package/build/client/_app/immutable/nodes/1.B_l4Mw8E.js.gz +0 -0
  362. package/build/client/_app/immutable/nodes/10.Bdd6Le3Q.js +0 -1
  363. package/build/client/_app/immutable/nodes/10.Bdd6Le3Q.js.br +0 -0
  364. package/build/client/_app/immutable/nodes/10.Bdd6Le3Q.js.gz +0 -0
  365. package/build/client/_app/immutable/nodes/2.DPpr5BK7.js +0 -3
  366. package/build/client/_app/immutable/nodes/2.DPpr5BK7.js.br +0 -0
  367. package/build/client/_app/immutable/nodes/2.DPpr5BK7.js.gz +0 -0
  368. package/build/client/_app/immutable/nodes/4.BokOq116.js +0 -12
  369. package/build/client/_app/immutable/nodes/4.BokOq116.js.br +0 -0
  370. package/build/client/_app/immutable/nodes/4.BokOq116.js.gz +0 -0
  371. package/build/client/_app/immutable/nodes/5.BqyMuHwQ.js +0 -1
  372. package/build/client/_app/immutable/nodes/5.BqyMuHwQ.js.br +0 -0
  373. package/build/client/_app/immutable/nodes/5.BqyMuHwQ.js.gz +0 -0
  374. package/build/client/_app/immutable/nodes/6.7qo5WmXj.js +0 -38
  375. package/build/client/_app/immutable/nodes/6.7qo5WmXj.js.br +0 -0
  376. package/build/client/_app/immutable/nodes/6.7qo5WmXj.js.gz +0 -0
  377. package/build/client/_app/immutable/nodes/7.CvDadi99.js +0 -1
  378. package/build/client/_app/immutable/nodes/7.CvDadi99.js.br +0 -0
  379. package/build/client/_app/immutable/nodes/7.CvDadi99.js.gz +0 -0
  380. package/build/client/_app/immutable/nodes/8.CLZUC68b.js +0 -1
  381. package/build/client/_app/immutable/nodes/8.CLZUC68b.js.br +0 -0
  382. package/build/client/_app/immutable/nodes/8.CLZUC68b.js.gz +0 -0
  383. package/build/client/_app/immutable/nodes/9.BCC-2Any.js +0 -1
  384. package/build/client/_app/immutable/nodes/9.BCC-2Any.js.br +0 -0
  385. package/build/client/_app/immutable/nodes/9.BCC-2Any.js.gz +0 -0
  386. package/build/server/chunks/0-DMd6Dk79.js +0 -9
  387. package/build/server/chunks/0-DMd6Dk79.js.map +0 -1
  388. package/build/server/chunks/1-Cwk3hpe9.js +0 -9
  389. package/build/server/chunks/10-Ci_AhluU.js +0 -9
  390. package/build/server/chunks/10-Ci_AhluU.js.map +0 -1
  391. package/build/server/chunks/2-BLxdw-8l.js +0 -9
  392. package/build/server/chunks/2-BLxdw-8l.js.map +0 -1
  393. package/build/server/chunks/3-DGFu_uy6.js +0 -19
  394. package/build/server/chunks/3-DGFu_uy6.js.map +0 -1
  395. package/build/server/chunks/4-MwbWFUCO.js +0 -22
  396. package/build/server/chunks/4-MwbWFUCO.js.map +0 -1
  397. package/build/server/chunks/5-p3BDfNc2.js.map +0 -1
  398. package/build/server/chunks/6-CK3NUjnH.js +0 -9
  399. package/build/server/chunks/6-CK3NUjnH.js.map +0 -1
  400. package/build/server/chunks/7-C_AGqUAU.js.map +0 -1
  401. package/build/server/chunks/8-Dr1vf8BH.js +0 -9
  402. package/build/server/chunks/8-Dr1vf8BH.js.map +0 -1
  403. package/build/server/chunks/9-DAsQ5XZx.js +0 -9
  404. package/build/server/chunks/9-DAsQ5XZx.js.map +0 -1
  405. package/build/server/chunks/AgentDropdown-C3XtwkaV.js +0 -162
  406. package/build/server/chunks/AgentDropdown-C3XtwkaV.js.map +0 -1
  407. package/build/server/chunks/Dropdown-B-UCol1v.js.map +0 -1
  408. package/build/server/chunks/Icon-DDJ9D6Sq.js.map +0 -1
  409. package/build/server/chunks/Input-DLAEH36y.js.map +0 -1
  410. package/build/server/chunks/Panel-KZDoG3_L.js.map +0 -1
  411. package/build/server/chunks/_layout.svelte-22nlfSFq.js +0 -9
  412. package/build/server/chunks/_layout.svelte-22nlfSFq.js.map +0 -1
  413. package/build/server/chunks/_layout.svelte-BoAJDYC1.js.map +0 -1
  414. package/build/server/chunks/_page.svelte-CNhxx79k.js.map +0 -1
  415. package/build/server/chunks/_page.svelte-Cc0DAAQW.js.map +0 -1
  416. package/build/server/chunks/_page.svelte-CdEfc0bc.js.map +0 -1
  417. package/build/server/chunks/_page.svelte-DQUdiD4S.js.map +0 -1
  418. package/build/server/chunks/_page.svelte-kLLxi8vG.js.map +0 -1
  419. package/build/server/chunks/_page.svelte-nsIWq28L.js.map +0 -1
  420. package/build/server/chunks/_server.ts-BBxm_xV1.js.map +0 -1
  421. package/build/server/chunks/_server.ts-BIcKE9RQ.js.map +0 -1
  422. package/build/server/chunks/_server.ts-BYDdbqNr.js.map +0 -1
  423. package/build/server/chunks/_server.ts-BmZBSYvJ.js.map +0 -1
  424. package/build/server/chunks/_server.ts-CLKPeFqF.js.map +0 -1
  425. package/build/server/chunks/_server.ts-DEHw6op6.js.map +0 -1
  426. package/build/server/chunks/_server.ts-DTyPQO2I.js +0 -93
  427. package/build/server/chunks/_server.ts-DTyPQO2I.js.map +0 -1
  428. package/build/server/chunks/_server.ts-d0Tii8aZ.js.map +0 -1
  429. package/build/server/chunks/client-DpkplAAP.js +0 -25
  430. package/build/server/chunks/client-DpkplAAP.js.map +0 -1
  431. package/build/server/chunks/client2-tp0-IQU0.js.map +0 -1
  432. package/build/server/chunks/context-DVQH5kJk.js +0 -113
  433. package/build/server/chunks/context-DVQH5kJk.js.map +0 -1
  434. package/build/server/chunks/data-CbXDDeDB.js.map +0 -1
  435. package/build/server/chunks/error.svelte-DNcHZkvg.js +0 -29
  436. package/build/server/chunks/error.svelte-DNcHZkvg.js.map +0 -1
  437. package/build/server/chunks/events-A18hGvKp.js.map +0 -1
  438. package/build/server/chunks/index-BoStl4QO.js.map +0 -1
  439. package/build/server/chunks/index2-CVBATI2G.js.map +0 -1
  440. package/build/server/chunks/state.svelte-Dze7OxC_.js.map +0 -1
@@ -1,11 +1,20 @@
1
- import { a0 as bind_props, a1 as derived, Z as attr, Y as attr_class, X as ensure_array_like, a2 as stringify, a3 as attr_style, a4 as attributes, a5 as spread_props, a6 as clsx } from './index2-CVBATI2G.js';
2
- import { P as Panel } from './Panel-KZDoG3_L.js';
3
- import { o as onDestroy, A as AgentDropdown, C as ContextEditor, m as mount, u as unmount, t as tick } from './AgentDropdown-C3XtwkaV.js';
4
- import { B as Button, I as Icon$1, h as html } from './Icon-DDJ9D6Sq.js';
5
- import { h as hasContext, g as getContext, s as setContext, e as escape_html, b as getAllContexts } from './context-DVQH5kJk.js';
6
- import { o as on } from './events-A18hGvKp.js';
7
- import { D as Dropdown } from './Dropdown-B-UCol1v.js';
1
+ import { s as store_get, u as unsubscribe_stores, c as bind_props, j as derived, b as attr, a as attr_class, f as stringify, e as ensure_array_like, d as attr_style, g as attributes, k as spread_props, l as clsx } from './index2-B1rkViAM.js';
2
+ import { P as Panel } from './Panel-CmvYn6IC.js';
3
+ import { C as ContextEditor } from './ContextEditor-stz14-2o.js';
4
+ import { B as Button } from './Button-OUO_MioZ.js';
5
+ import { Y as hasContext, Z as getContext, n as setContext, W as escape_html, _ as getAllContexts } from './context-Dy9MY1Z0.js';
6
+ import { o as onDestroy, m as mount, u as unmount, t as tick } from './index-server-CMCI3p2Y.js';
7
+ import { o as on } from './events-BFcZEt66.js';
8
+ import { h as html } from './Link-DaOJVbdB.js';
9
+ import { p as page, g as goto } from './index4-DSZuWW-A.js';
10
+ import { A as AgentSidebar } from './AgentSidebar-CZIBBsSh.js';
11
+ import { T as Tabs, a as Tab } from './Tab-n348Mfiq.js';
12
+ import { g as getAgentsContext } from './agents-context-C4MM7lSl.js';
13
+ import './errors-B8liwVcD.js';
8
14
  import 'js-yaml';
15
+ import './state.svelte-CBgyohE1.js';
16
+ import './utils-KcIDVAAe.js';
17
+ import './index-C0ds_eUO.js';
9
18
 
10
19
  // http://www.w3.org/TR/CSS21/grammar.html
11
20
  // https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027
@@ -2778,8 +2787,7 @@ function addCollection(data, provider) {
2778
2787
  prefix,
2779
2788
  name: "a"
2780
2789
  })) return false;
2781
- const storage2 = getStorage(provider, prefix);
2782
- return !!addIconSet(storage2, data);
2790
+ return !!addIconSet(getStorage(provider, prefix), data);
2783
2791
  }
2784
2792
  const defaultIconSizeCustomisations = Object.freeze({
2785
2793
  width: null,
@@ -2932,16 +2940,21 @@ function iconToSVG(icon, customisations) {
2932
2940
  };
2933
2941
  }
2934
2942
  const regex = /\sid="(\S+)"/g;
2935
- const randomPrefix = "IconifyId" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);
2936
- let counter = 0;
2937
- function replaceIDs(body, prefix = randomPrefix) {
2943
+ const counters = /* @__PURE__ */ new Map();
2944
+ function nextID(id) {
2945
+ id = id.replace(/[0-9]+$/, "") || "a";
2946
+ const count = counters.get(id) || 0;
2947
+ counters.set(id, count + 1);
2948
+ return count ? `${id}${count}` : id;
2949
+ }
2950
+ function replaceIDs(body) {
2938
2951
  const ids = [];
2939
2952
  let match;
2940
2953
  while (match = regex.exec(body)) ids.push(match[1]);
2941
2954
  if (!ids.length) return body;
2942
2955
  const suffix = "suffix" + (Math.random() * 16777216 | Date.now()).toString(16);
2943
2956
  ids.forEach((id) => {
2944
- const newID = typeof prefix === "function" ? prefix(id) : prefix + (counter++).toString();
2957
+ const newID = nextID(id);
2945
2958
  const escapedID = id.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
2946
2959
  body = body.replace(new RegExp('([#;"])(' + escapedID + ')([")]|\\.[a-z])', "g"), "$1" + newID + suffix + "$3");
2947
2960
  });
@@ -2962,7 +2975,7 @@ function createAPIConfig(source) {
2962
2975
  resources = source.resources;
2963
2976
  if (!(resources instanceof Array) || !resources.length) return null;
2964
2977
  }
2965
- const result = {
2978
+ return {
2966
2979
  resources,
2967
2980
  path: source.path || "/",
2968
2981
  maxURL: source.maxURL || 500,
@@ -2972,7 +2985,6 @@ function createAPIConfig(source) {
2972
2985
  index: source.index || 0,
2973
2986
  dataAfterTimeout: source.dataAfterTimeout !== false
2974
2987
  };
2975
- return result;
2976
2988
  }
2977
2989
  const configStorage = /* @__PURE__ */ Object.create(null);
2978
2990
  const fallBackAPISources = ["https://api.simplesvg.com", "https://api.unisvg.com"];
@@ -3062,8 +3074,7 @@ const send = (host, params, callback) => {
3062
3074
  switch (params.type) {
3063
3075
  case "icons": {
3064
3076
  const prefix = params.prefix;
3065
- const icons = params.icons;
3066
- const iconsList = icons.join(",");
3077
+ const iconsList = params.icons.join(",");
3067
3078
  const urlParams = new URLSearchParams({ icons: iconsList });
3068
3079
  path += prefix + ".json?" + urlParams.toString();
3069
3080
  break;
@@ -3375,7 +3386,7 @@ function initRedundancy(cfg) {
3375
3386
  return callback(value);
3376
3387
  }) || null;
3377
3388
  }
3378
- const instance = {
3389
+ return {
3379
3390
  query,
3380
3391
  find,
3381
3392
  setIndex: (index) => {
@@ -3384,7 +3395,6 @@ function initRedundancy(cfg) {
3384
3395
  getIndex: () => config.index,
3385
3396
  cleanup
3386
3397
  };
3387
- return instance;
3388
3398
  }
3389
3399
  function emptyCallback$1() {
3390
3400
  }
@@ -3393,12 +3403,10 @@ function getRedundancyCache(provider) {
3393
3403
  if (!redundancyCache[provider]) {
3394
3404
  const config = getAPIConfig(provider);
3395
3405
  if (!config) return;
3396
- const redundancy = initRedundancy(config);
3397
- const cachedReundancy = {
3406
+ redundancyCache[provider] = {
3398
3407
  config,
3399
- redundancy
3408
+ redundancy: initRedundancy(config)
3400
3409
  };
3401
- redundancyCache[provider] = cachedReundancy;
3402
3410
  }
3403
3411
  return redundancyCache[provider];
3404
3412
  }
@@ -3418,8 +3426,7 @@ function sendAPIQuery(target, query, callback) {
3418
3426
  const config = createAPIConfig(target);
3419
3427
  if (config) {
3420
3428
  redundancy = initRedundancy(config);
3421
- const moduleKey = target.resources ? target.resources[0] : "";
3422
- const api = getAPIModule(moduleKey);
3429
+ const api = getAPIModule(target.resources ? target.resources[0] : "");
3423
3430
  if (api) send2 = api.send;
3424
3431
  }
3425
3432
  }
@@ -3460,8 +3467,7 @@ function parseLoaderResponse(storage2, icons, data) {
3460
3467
  });
3461
3468
  }
3462
3469
  if (data && typeof data === "object") try {
3463
- const parsed = addIconSet(storage2, data);
3464
- if (!parsed.length) {
3470
+ if (!addIconSet(storage2, data).length) {
3465
3471
  checkMissing();
3466
3472
  return;
3467
3473
  }
@@ -3499,13 +3505,11 @@ function loadNewIcons(storage2, icons) {
3499
3505
  }
3500
3506
  if (customIconLoader) {
3501
3507
  icons$1.forEach((name) => {
3502
- const response = customIconLoader(name, prefix, provider);
3503
- parsePossiblyAsyncResponse(response, (data) => {
3504
- const iconSet = data ? {
3508
+ parsePossiblyAsyncResponse(customIconLoader(name, prefix, provider), (data) => {
3509
+ parseLoaderResponse(storage2, [name], data ? {
3505
3510
  prefix,
3506
3511
  icons: { [name]: data }
3507
- } : null;
3508
- parseLoaderResponse(storage2, [name], iconSet);
3512
+ } : null);
3509
3513
  });
3510
3514
  });
3511
3515
  return;
@@ -3518,8 +3522,7 @@ function loadNewIcons(storage2, icons) {
3518
3522
  parseLoaderResponse(storage2, valid, null);
3519
3523
  return;
3520
3524
  }
3521
- const params = api.prepare(provider, prefix, valid);
3522
- params.forEach((item) => {
3525
+ api.prepare(provider, prefix, valid).forEach((item) => {
3523
3526
  sendAPIQuery(provider, item, (data) => {
3524
3527
  parseLoaderResponse(storage2, item.icons, data);
3525
3528
  });
@@ -3528,8 +3531,7 @@ function loadNewIcons(storage2, icons) {
3528
3531
  }
3529
3532
  }
3530
3533
  const loadIcons = (icons, callback) => {
3531
- const cleanedIcons = listToIcons(icons, true, allowSimpleNames());
3532
- const sortedIcons = sortIcons(cleanedIcons);
3534
+ const sortedIcons = sortIcons(listToIcons(icons, true, allowSimpleNames()));
3533
3535
  if (!sortedIcons.pending.length) {
3534
3536
  let callCallback = true;
3535
3537
  if (callback) setTimeout(() => {
@@ -3580,8 +3582,7 @@ function mergeCustomisations(defaults, item) {
3580
3582
  const separator = /[\s,]+/;
3581
3583
  function flipFromString(custom, flip) {
3582
3584
  flip.split(separator).forEach((str) => {
3583
- const value = str.trim();
3584
- switch (value) {
3585
+ switch (str.trim()) {
3585
3586
  case "horizontal":
3586
3587
  custom.hFlip = true;
3587
3588
  break;
@@ -3735,15 +3736,10 @@ function render(icon, props) {
3735
3736
  if (style !== "") {
3736
3737
  componentProps.style = style;
3737
3738
  }
3738
- let localCounter = 0;
3739
- let id = props.id;
3740
- if (typeof id === "string") {
3741
- id = id.replace(/-/g, "_");
3742
- }
3743
3739
  return {
3744
3740
  svg: true,
3745
3741
  attributes: componentProps,
3746
- body: replaceIDs(item.body, id ? () => id + "ID" + localCounter++ : "iconifySvelte")
3742
+ body: replaceIDs(item.body)
3747
3743
  };
3748
3744
  }
3749
3745
  const { body, width, height } = icon;
@@ -3820,7 +3816,14 @@ if (typeof document !== "undefined" && typeof window !== "undefined") {
3820
3816
  }
3821
3817
  }
3822
3818
  }
3823
- function checkIconState(icon, state, mounted, callback, onload) {
3819
+ function isSSR() {
3820
+ try {
3821
+ return typeof window !== "object";
3822
+ } catch (err) {
3823
+ return true;
3824
+ }
3825
+ }
3826
+ function checkIconState(icon, state, callback, onload) {
3824
3827
  function abortLoading() {
3825
3828
  if (state.loading) {
3826
3829
  state.loading.abort();
@@ -3839,7 +3842,7 @@ function checkIconState(icon, state, mounted, callback, onload) {
3839
3842
  }
3840
3843
  const data = getIconData(iconName);
3841
3844
  if (!data) {
3842
- if (mounted && (!state.loading || state.loading.name !== icon)) {
3845
+ if (!isSSR() && (!state.loading || state.loading.name !== icon)) {
3843
3846
  abortLoading();
3844
3847
  state.name = "";
3845
3848
  state.loading = {
@@ -3884,10 +3887,8 @@ function Icon($$renderer, $$props) {
3884
3887
  destroyed: false
3885
3888
  };
3886
3889
  const { $$slots, $$events, ...props } = $$props;
3887
- let mounted = false;
3888
- let isMounted = !!props.ssr || mounted;
3889
3890
  let iconData = (() => {
3890
- return checkIconState(props.icon, iconState, isMounted, loaded, props.onload);
3891
+ return checkIconState(props.icon, iconState, loaded, props.onload);
3891
3892
  })();
3892
3893
  let data = (() => {
3893
3894
  const generatedData = iconData ? generateIcon(iconData.data, props) : null;
@@ -3973,15 +3974,10 @@ var INSTRUCTION_IDs$1 = {
3973
3974
  _ID_TO_INSTRUCTION = {}, _defineProperty(_ID_TO_INSTRUCTION, INSTRUCTION_IDs$1.DND_ZONE_ACTIVE, "Tab to one the items and press space-bar or enter to start dragging it"), _defineProperty(_ID_TO_INSTRUCTION, INSTRUCTION_IDs$1.DND_ZONE_DRAG_DISABLED, "This is a disabled drag and drop list");
3974
3975
  function _page($$renderer, $$props) {
3975
3976
  $$renderer.component(($$renderer2) => {
3977
+ var $$store_subs;
3976
3978
  let { data } = $$props;
3977
3979
  const project = data.project;
3978
3980
  const agent = data.agent;
3979
- const agentId = `${project}/${agent}`;
3980
- const agents = [agentId];
3981
- let currentAgent = agentId;
3982
- function handleSelectAgent(agent2) {
3983
- currentAgent = agent2;
3984
- }
3985
3981
  let repeats = 1;
3986
3982
  let concurrency = 1;
3987
3983
  let defaultContext = { tenant: project, agent, now: (/* @__PURE__ */ new Date()).toISOString() };
@@ -4125,60 +4121,17 @@ function _page($$renderer, $$props) {
4125
4121
  let running = false;
4126
4122
  const pendingSaves = /* @__PURE__ */ new Set();
4127
4123
  const isSaving = pendingSaves.size > 0;
4128
- let activeCategory = null;
4129
- const UNCATEGORIZED_LABEL = "Uncategorized";
4130
- const CATEGORY_COLOR_CLASSES = [
4131
- "bg-amber-600 text-white",
4132
- "bg-sky-600 text-white",
4133
- "bg-emerald-600 text-white",
4134
- "bg-violet-600 text-white",
4135
- "bg-rose-600 text-white",
4136
- "bg-cyan-600 text-white",
4137
- "bg-lime-600 text-black",
4138
- "bg-fuchsia-600 text-white"
4139
- ];
4140
- function categoryClass(name) {
4141
- if (!name) return "bg-gray-600 text-white";
4142
- let h = 0;
4143
- for (let i = 0; i < name.length; i++) h = h * 31 + name.charCodeAt(i) >>> 0;
4144
- const idx = h % CATEGORY_COLOR_CLASSES.length;
4145
- return CATEGORY_COLOR_CLASSES[idx];
4146
- }
4147
- const categories = (() => {
4148
- const list = Array.isArray(tests) ? tests : [];
4149
- const set = /* @__PURE__ */ new Set();
4150
- for (const t of list) set.add((t.category || "").trim());
4151
- return Array.from(set).map((c) => (c || "").trim()).sort((a, b) => a.localeCompare(b));
4152
- })();
4153
- const filteredTests = (() => {
4154
- const list = Array.isArray(tests) ? tests : [];
4155
- return list;
4156
- })();
4157
4124
  function trackSave(p) {
4158
4125
  pendingSaves.add(p);
4159
4126
  p.finally(() => pendingSaves.delete(p));
4160
4127
  return p;
4161
4128
  }
4162
- let categoryMenuOpenFor = null;
4163
- let categoryAnchorEl = null;
4164
- function closeCategoryMenu() {
4165
- categoryMenuOpenFor = null;
4166
- categoryAnchorEl = null;
4167
- }
4168
4129
  const pinnedCount = tests.filter((t) => t.pinned).length;
4169
4130
  const hasPinned = pinnedCount > 0;
4170
4131
  const allPinned = tests.length > 0 && pinnedCount === tests.length;
4171
4132
  const somePinned = pinnedCount > 0 && !allPinned;
4172
- const pinnedCountFiltered = filteredTests.filter((t) => t.pinned).length;
4173
- filteredTests.length > 0 && pinnedCountFiltered === filteredTests.length;
4174
- const headerAllPinned = allPinned;
4175
- const headerSomePinned = somePinned;
4176
4133
  async function addTest() {
4177
- const res = await fetch(`/academy/${project}/${agent}/api/tests`, {
4178
- method: "POST",
4179
- headers: void 0,
4180
- body: void 0
4181
- });
4134
+ const res = await fetch(`/tests/${project}/${agent}/api/tests`, { method: "POST" });
4182
4135
  const r = await res.json();
4183
4136
  tests = [
4184
4137
  {
@@ -4186,7 +4139,6 @@ function _page($$renderer, $$props) {
4186
4139
  pinned: String(r.pinned).toUpperCase() === "TRUE",
4187
4140
  scenario: r.scenario || "New scenario",
4188
4141
  author: r.author || "",
4189
- category: r.category || activeCategory || "",
4190
4142
  assertion_type: r.assertion_type || "llm-rubric",
4191
4143
  assertion_value: r.assertion_value || "",
4192
4144
  conversation: r.conversation || "user: ...",
@@ -4214,42 +4166,148 @@ function _page($$renderer, $$props) {
4214
4166
  }
4215
4167
  }
4216
4168
  const saveTimers = /* @__PURE__ */ new Map();
4217
- function saveRowDebounced(id, patch, field, delay = 600) {
4218
- const key = `${id}:${field}`;
4169
+ function saveRowDebounced(id, patch, delay = 600) {
4170
+ const key = `${id}:context`;
4219
4171
  const prev = saveTimers.get(key);
4220
- if (prev) clearTimeout(prev.timer);
4221
- const fire = () => {
4222
- saveTimers.delete(key);
4223
- saveRow(id, patch);
4224
- };
4225
- const timer = setTimeout(fire, delay);
4226
- saveTimers.set(key, { timer, fire });
4172
+ if (prev) clearTimeout(prev);
4173
+ const t = setTimeout(
4174
+ () => {
4175
+ trackSave(saveRow(id, patch));
4176
+ saveTimers.delete(key);
4177
+ },
4178
+ delay
4179
+ );
4180
+ saveTimers.set(key, t);
4227
4181
  }
4228
4182
  async function saveRow(id, patch) {
4229
- const p = fetch(`/academy/${project}/${agent}/api/tests/${id}`, {
4183
+ await fetch(`/tests/${project}/${agent}/api/tests/${id}`, {
4230
4184
  method: "PATCH",
4231
4185
  headers: { "content-type": "application/json" },
4232
4186
  body: JSON.stringify(patch)
4233
4187
  });
4234
- return trackSave(p);
4235
4188
  }
4236
4189
  async function saveConfigPatch(patch) {
4237
- await fetch(`/academy/${project}/${agent}/api/config`, {
4190
+ await fetch(`/tests/${project}/${agent}/api/config`, {
4238
4191
  method: "PATCH",
4239
4192
  headers: { "content-type": "application/json" },
4240
4193
  body: JSON.stringify(patch)
4241
4194
  });
4242
4195
  }
4243
- onDestroy(() => {
4244
- for (const { timer } of saveTimers.values()) clearTimeout(timer);
4245
- saveTimers.clear();
4246
- });
4196
+ const { agents, currentAgent, onAgentSelect } = getAgentsContext();
4197
+ let sidebarCollapsed = false;
4198
+ const dec = (s) => {
4199
+ try {
4200
+ return s ? decodeURIComponent(s) : "";
4201
+ } catch {
4202
+ return s || "";
4203
+ }
4204
+ };
4205
+ const currentAgentNorm = (() => {
4206
+ return dec(store_get($$store_subs ??= {}, "$currentAgent", currentAgent)).trim().replace(/^\/+|\/+$/g, "");
4207
+ })();
4208
+ const activeTopTab = (() => page.url.pathname.split("/")[1])();
4209
+ function handleTabChange({ value }) {
4210
+ if (value === activeTopTab) return;
4211
+ const [proj, ag] = currentAgentNorm.split("/");
4212
+ if (!proj || !ag) return;
4213
+ if (value === "roleplay") {
4214
+ goto();
4215
+ return;
4216
+ }
4217
+ if (value === "tests") {
4218
+ goto();
4219
+ return;
4220
+ }
4221
+ if (value === "traces") {
4222
+ goto();
4223
+ return;
4224
+ }
4225
+ goto();
4226
+ }
4247
4227
  let $$settled = true;
4248
4228
  let $$inner_renderer;
4249
4229
  function $$render_inner($$renderer3) {
4250
- $$renderer3.push(`<nav class="flex h-14 flex-none items-center justify-between border-b border-b-gray-700 bg-rc-gray-700 px-4 text-gray-500"><div class="ml-3 flex items-center gap-5"><div class="flex items-center gap-2"><a href="https://recombine.ai/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1"><img src="/recombine.svg" alt="Recombine Logo" width="20" height="20" class="shrink-0"/> <span class="text-lg font-semibold text-rc-gray-100 hover:text-rc-green-200">Recombine</span></a></div> `);
4251
- AgentDropdown($$renderer3, { agents, currentAgent, onSelect: handleSelectAgent });
4252
- $$renderer3.push(`<!----></div> <div class="ml-auto"></div></nav> `);
4230
+ $$renderer3.push(`<div class="flex h-screen">`);
4231
+ AgentSidebar($$renderer3, {
4232
+ className: "flex-none",
4233
+ agents: store_get($$store_subs ??= {}, "$agents", agents),
4234
+ currentAgent: currentAgentNorm,
4235
+ onAgentClick: onAgentSelect,
4236
+ onToggle: () => sidebarCollapsed = !sidebarCollapsed,
4237
+ isCollapsed: sidebarCollapsed
4238
+ });
4239
+ $$renderer3.push(`<!----> <div class="flex h-full min-w-0 flex-1 flex-col bg-rc-gray-700 py-2 pr-lg"><nav class="flex h-14 flex-none items-center justify-between bg-rc-gray-700"><div class="flex items-center">`);
4240
+ Tabs($$renderer3, {
4241
+ value: activeTopTab,
4242
+ ariaLabel: "Top tabs",
4243
+ onChange: handleTabChange,
4244
+ children: ($$renderer4) => {
4245
+ Tab($$renderer4, {
4246
+ value: "roleplay",
4247
+ children: ($$renderer5) => {
4248
+ $$renderer5.push(`<!---->Roleplay`);
4249
+ }
4250
+ });
4251
+ $$renderer4.push(`<!----> `);
4252
+ Tab($$renderer4, {
4253
+ value: "tests",
4254
+ children: ($$renderer5) => {
4255
+ $$renderer5.push(`<!---->Tests`);
4256
+ }
4257
+ });
4258
+ $$renderer4.push(`<!----> `);
4259
+ Tab($$renderer4, {
4260
+ value: "traces",
4261
+ children: ($$renderer5) => {
4262
+ $$renderer5.push(`<!---->Traces`);
4263
+ }
4264
+ });
4265
+ $$renderer4.push(`<!---->`);
4266
+ },
4267
+ $$slots: { default: true }
4268
+ });
4269
+ $$renderer3.push(`<!----></div> `);
4270
+ Panel($$renderer3, {
4271
+ class: "!rounded-none p-3",
4272
+ children: ($$renderer4) => {
4273
+ $$renderer4.push(`<div class="flex items-center justify-between gap-12"><div class="flex items-center gap-3">`);
4274
+ Button($$renderer4, {
4275
+ variant: "outlined",
4276
+ size: "small",
4277
+ onclick: addTest,
4278
+ children: ($$renderer5) => {
4279
+ $$renderer5.push(`<!---->+ Add test`);
4280
+ },
4281
+ $$slots: { default: true }
4282
+ });
4283
+ $$renderer4.push(`<!----> `);
4284
+ Button($$renderer4, {
4285
+ variant: "outlined",
4286
+ size: "small",
4287
+ onclick: () => {
4288
+ defaultContextDraft = safeClone(defaultContext);
4289
+ showDefaultContextModal = true;
4290
+ },
4291
+ children: ($$renderer5) => {
4292
+ $$renderer5.push(`<!---->Edit default context`);
4293
+ },
4294
+ $$slots: { default: true }
4295
+ });
4296
+ $$renderer4.push(`<!----></div> <div class="flex flex-wrap items-center gap-3">`);
4297
+ if (isSaving) {
4298
+ $$renderer4.push("<!--[-->");
4299
+ $$renderer4.push(`<span class="animate-pulse rounded bg-amber-600 px-2 py-1 text-xs text-white">Saving…</span>`);
4300
+ } else {
4301
+ $$renderer4.push("<!--[!-->");
4302
+ }
4303
+ $$renderer4.push(`<!--]--> `);
4304
+ {
4305
+ $$renderer4.push("<!--[!-->");
4306
+ }
4307
+ $$renderer4.push(`<!--]--> <div class="flex items-center gap-2"><label class="text-sm text-gray-300">Repeats</label> <input type="number" class="rc-input w-20 svelte-1tukwqy" min="0" max="500"${attr("value", repeats)}/></div> <div class="flex items-center gap-2"><label class="text-sm text-gray-300">Concurrency</label> <input type="number" class="rc-input w-20 svelte-1tukwqy" min="0" max="20"${attr("value", concurrency)}/></div> <div class="text-sm text-gray-300">Pinned: ${escape_html(pinnedCount)}/${escape_html(tests.length)}</div> <button class="btn btn-secondary disabled:cursor-not-allowed disabled:opacity-50 svelte-1tukwqy"${attr("disabled", !hasPinned || running || isSaving, true)}>Run pinned</button> <button class="btn btn-primary disabled:cursor-not-allowed disabled:opacity-50 svelte-1tukwqy"${attr("disabled", isSaving, true)}>Run all</button></div></div>`);
4308
+ }
4309
+ });
4310
+ $$renderer3.push(`<!----></nav> `);
4253
4311
  {
4254
4312
  let children = function($$renderer4) {
4255
4313
  ContextEditor($$renderer4, {
@@ -4257,7 +4315,7 @@ function _page($$renderer, $$props) {
4257
4315
  context: defaultContextDraft,
4258
4316
  onContextChanged: (ctx) => defaultContextDraft = ctx,
4259
4317
  suppressErrors: true,
4260
- defaultFormat: "yaml",
4318
+ defaultFormat: "json",
4261
4319
  hideHeader: true
4262
4320
  });
4263
4321
  }, footer = function($$renderer4) {
@@ -4330,7 +4388,7 @@ function _page($$renderer, $$props) {
4330
4388
  const row = tests.find((r) => r.id === activeContextTestId);
4331
4389
  if (row) {
4332
4390
  row.context = testContextDraft;
4333
- await saveRow(row.id, { context: row.context });
4391
+ await trackSave(saveRow(row.id, { context: row.context }));
4334
4392
  }
4335
4393
  showTestContextModal = false;
4336
4394
  activeContextTestId = null;
@@ -4402,119 +4460,28 @@ function _page($$renderer, $$props) {
4402
4460
  });
4403
4461
  }
4404
4462
  $$renderer3.push(`<!----> <div class="h-[calc(100vh-3.5rem)] overflow-auto p-0">`);
4405
- Panel($$renderer3, {
4406
- class: "!rounded-none p-3",
4407
- children: ($$renderer4) => {
4408
- $$renderer4.push(`<div class="flex items-center justify-between gap-3"><div class="flex items-center gap-3">`);
4409
- Button($$renderer4, {
4410
- variant: "outlined",
4411
- size: "small",
4412
- onclick: addTest,
4413
- children: ($$renderer5) => {
4414
- $$renderer5.push(`<!---->+ Add test`);
4415
- },
4416
- $$slots: { default: true }
4417
- });
4418
- $$renderer4.push(`<!----> `);
4419
- Button($$renderer4, {
4420
- variant: "outlined",
4421
- size: "small",
4422
- onclick: () => {
4423
- defaultContextDraft = safeClone(defaultContext);
4424
- showDefaultContextModal = true;
4425
- },
4426
- children: ($$renderer5) => {
4427
- $$renderer5.push(`<!---->Edit default context`);
4428
- },
4429
- $$slots: { default: true }
4430
- });
4431
- $$renderer4.push(`<!----></div> <div class="flex flex-wrap items-center gap-3">`);
4432
- if (isSaving) {
4433
- $$renderer4.push("<!--[-->");
4434
- $$renderer4.push(`<span class="animate-pulse rounded bg-amber-600 px-2 py-1 text-xs text-white">Saving…</span>`);
4435
- } else {
4436
- $$renderer4.push("<!--[!-->");
4437
- }
4438
- $$renderer4.push(`<!--]--> `);
4439
- {
4440
- $$renderer4.push("<!--[!-->");
4441
- }
4442
- $$renderer4.push(`<!--]--> <div class="flex items-center gap-2"><label class="text-sm text-gray-300">Repeats</label> <input type="number" class="rc-input w-20 svelte-1o8ahil" min="0" max="500"${attr("value", repeats)}/></div> <div class="flex items-center gap-2"><label class="text-sm text-gray-300">Concurrency</label> <input type="number" class="rc-input w-20 svelte-1o8ahil" min="0" max="20"${attr("value", concurrency)}/></div> <div class="text-sm text-gray-300">`);
4443
- {
4444
- $$renderer4.push("<!--[-->");
4445
- $$renderer4.push(`Pinned: ${escape_html(pinnedCount)}/${escape_html(tests.length)}`);
4446
- }
4447
- $$renderer4.push(`<!--]--></div> <button class="btn btn-secondary disabled:cursor-not-allowed disabled:opacity-50 svelte-1o8ahil"${attr("disabled", !hasPinned || running || isSaving, true)}>Run pinned</button> <button class="btn btn-primary disabled:cursor-not-allowed disabled:opacity-50 svelte-1o8ahil"${attr("disabled", isSaving, true)}>Run all</button></div></div> <div class="mt-3 flex flex-wrap items-center gap-2 border-t border-rc-gray-700 pt-2"><button${attr_class(
4448
- `rounded px-2 py-1 text-sm ${"bg-rc-gray-600 text-white"}`,
4449
- "svelte-1o8ahil"
4450
- )}>All tests</button> `);
4451
- if (categories.length > 0) {
4452
- $$renderer4.push("<!--[-->");
4453
- $$renderer4.push(`<!--[-->`);
4454
- const each_array = ensure_array_like(categories);
4455
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
4456
- let cat = each_array[$$index];
4457
- $$renderer4.push(`<button${attr_class(`rounded px-2 py-1 text-sm ${activeCategory === (cat || "") ? categoryClass(cat || "") : ""} ${activeCategory !== (cat || "") ? "opacity-80" : ""}`, "svelte-1o8ahil")}>${escape_html((cat || "").trim() || UNCATEGORIZED_LABEL)}</button>`);
4458
- }
4459
- $$renderer4.push(`<!--]-->`);
4460
- } else {
4461
- $$renderer4.push("<!--[!-->");
4462
- }
4463
- $$renderer4.push(`<!--]--></div>`);
4464
- }
4465
- });
4466
- $$renderer3.push(`<!----> `);
4467
4463
  Panel($$renderer3, {
4468
4464
  class: "overflow-hidden !rounded-none p-0",
4469
4465
  children: ($$renderer4) => {
4470
- $$renderer4.push(`<div class="overflow-auto"><table class="min-w-full text-sm"><thead><tr class="align-top"><th class="w-20 p-0 text-center align-top"><div class="border-b border-rc-gray-700 p-2"><button${attr_class(`inline-flex h-8 w-8 items-center justify-center rounded disabled:cursor-not-allowed disabled:opacity-50 ${stringify(headerAllPinned || headerSomePinned ? "text-rc-green-400 hover:text-rc-green-300" : "text-gray-400 hover:text-gray-200")}`)} aria-label="Pin/unpin all" title="Pin/unpin all"${attr("disabled", isSaving || tests.length === 0, true)}>`);
4466
+ $$renderer4.push(`<div class="overflow-auto"><table class="min-w-full text-sm"><thead><tr class="align-top"><th class="w-20 p-0 text-center align-top"><div class="border-b border-rc-gray-700 p-2"><button${attr_class(`inline-flex h-8 w-8 items-center justify-center rounded disabled:cursor-not-allowed disabled:opacity-50 ${stringify(allPinned || somePinned ? "text-rc-green-400 hover:text-rc-green-300" : "text-gray-400 hover:text-gray-200")}`)} aria-label="Pin/unpin all" title="Pin/unpin all"${attr("disabled", isSaving || tests.length === 0, true)}>`);
4471
4467
  Icon($$renderer4, {
4472
- icon: headerAllPinned ? "mdi:pin" : "mdi:pin-outline",
4468
+ icon: allPinned ? "mdi:pin" : "mdi:pin-outline",
4473
4469
  width: 18,
4474
4470
  height: 18,
4475
4471
  class: "relative top-[1px]"
4476
4472
  });
4477
4473
  $$renderer4.push(`<!----></button></div></th><th class="p-0 text-left"><div class="border-b border-rc-gray-700 p-2"><div class="grid grid-cols-1 gap-3 md:grid-cols-12"><div class="text-xs font-semibold uppercase tracking-wide text-gray-300 md:col-span-4">Test</div> <div class="text-xs font-semibold uppercase tracking-wide text-gray-300 md:col-span-8">Result</div></div></div></th></tr></thead><tbody><!--[-->`);
4478
- const each_array_1 = ensure_array_like(filteredTests);
4479
- for (let i = 0, $$length = each_array_1.length; i < $$length; i++) {
4480
- let t = each_array_1[i];
4481
- $$renderer4.push(`<tr class="align-top"><td class="w-20 p-0 text-center align-top"><div class="border-b border-rc-gray-700 p-2"><div class="flex items-center justify-center gap-1"><span class="inline-flex h-8 w-8 cursor-grab select-none items-center justify-center rounded text-[20px] leading-none text-gray-400 hover:text-gray-200 active:cursor-grabbing"${attr_style("")} title="Drag row" aria-label="Drag row">⠿</span> <button${attr_class(`inline-flex h-8 w-8 items-center justify-center rounded disabled:cursor-not-allowed disabled:opacity-50 ${stringify(t.pinned ? "text-rc-green-400 hover:text-rc-green-300" : "text-gray-400 hover:text-gray-200")}`)}${attr("aria-label", t.pinned ? "Unpin" : "Pin")}${attr("title", t.pinned ? "Unpin" : "Pin")}${attr("disabled", isSaving, true)}>`);
4474
+ const each_array = ensure_array_like(tests);
4475
+ for (let i = 0, $$length = each_array.length; i < $$length; i++) {
4476
+ let t = each_array[i];
4477
+ $$renderer4.push(`<tr class="align-top"><td class="w-20 p-0 text-center align-top"><div class="border-b border-rc-gray-700 p-2"><div class="flex items-center justify-center gap-1"><span class="inline-flex h-8 w-8 cursor-grab select-none items-center justify-center rounded text-[20px] leading-none text-gray-400 hover:text-gray-200 active:cursor-grabbing" title="Drag row" aria-label="Drag row">⠿</span> <button${attr_class(`inline-flex h-8 w-8 items-center justify-center rounded disabled:cursor-not-allowed disabled:opacity-50 ${stringify(t.pinned ? "text-rc-green-400 hover:text-rc-green-300" : "text-gray-400 hover:text-gray-200")}`)}${attr("aria-label", t.pinned ? "Unpin" : "Pin")}${attr("title", t.pinned ? "Unpin" : "Pin")}${attr("disabled", isSaving, true)}>`);
4482
4478
  Icon($$renderer4, {
4483
4479
  icon: t.pinned ? "mdi:pin" : "mdi:pin-outline",
4484
4480
  width: 18,
4485
4481
  height: 18,
4486
4482
  class: "relative top-[1px]"
4487
4483
  });
4488
- $$renderer4.push(`<!----></button></div></div></td><td class="p-0"><div class="border-b border-rc-gray-700 p-2"><div class="mt-2 grid grid-cols-1 gap-3 md:grid-cols-12"><div class="self-start md:col-span-4"><div class="left-details-bg flex flex-col gap-2 rounded border border-rc-gray-700 p-2 svelte-1o8ahil"><div class="mb-1"><input class="card-input-title svelte-1o8ahil" type="text" placeholder="Scenario"${attr("value", t.scenario)}/> <div class="mt-1 flex items-center gap-2"><input class="card-input-subtle svelte-1o8ahil" type="text" placeholder="Author"${attr("value", t.author)}/> <button${attr_class(`inline-flex items-center gap-1 rounded px-2 py-0.5 text-xs ${categoryClass(t.category || "")}`, "svelte-1o8ahil")} aria-haspopup="listbox" title="Category"><span>${escape_html((t.category || "").trim() || UNCATEGORIZED_LABEL)}</span> `);
4489
- Icon$1($$renderer4, { name: "chevron-down", width: 14, height: 14 });
4490
- $$renderer4.push(`<!----></button> `);
4491
- {
4492
- let children = function($$renderer5) {
4493
- $$renderer5.push(`<div class="mt-1 min-w-48 overflow-y-auto border border-rc-gray-600 bg-rc-gray-800 shadow-lg"><button class="w-full px-3 py-2 text-left text-sm hover:bg-rc-gray-700">Uncategorized</button> <!--[-->`);
4494
- const each_array_2 = ensure_array_like(categories);
4495
- for (let $$index_1 = 0, $$length2 = each_array_2.length; $$index_1 < $$length2; $$index_1++) {
4496
- let cat = each_array_2[$$index_1];
4497
- if ((cat || "").trim()) {
4498
- $$renderer5.push("<!--[-->");
4499
- $$renderer5.push(`<button class="w-full px-3 py-2 text-left text-sm hover:bg-rc-gray-700">${escape_html(cat)}</button>`);
4500
- } else {
4501
- $$renderer5.push("<!--[!-->");
4502
- }
4503
- $$renderer5.push(`<!--]-->`);
4504
- }
4505
- $$renderer5.push(`<!--]--> <hr class="border-rc-gray-700"/> <button class="w-full px-3 py-2 text-left text-sm text-rc-green-300 hover:bg-rc-gray-700">+ New category…</button></div>`);
4506
- };
4507
- Dropdown($$renderer4, {
4508
- id: `category-dropdown-${t.id}`,
4509
- open: categoryMenuOpenFor === t.id,
4510
- anchorEl: categoryAnchorEl,
4511
- onClose: closeCategoryMenu,
4512
- placement: "bottom-start",
4513
- offset: [0, 1],
4514
- children
4515
- });
4516
- }
4517
- $$renderer4.push(`<!----></div></div> <div class="flex items-center gap-2">`);
4484
+ $$renderer4.push(`<!----></button></div></div></td><td class="p-0"><div class="border-b border-rc-gray-700 p-2"><div class="mt-2 grid grid-cols-1 gap-3 md:grid-cols-12"><div class="self-start md:col-span-4"><div class="left-details-bg flex flex-col gap-2 rounded border border-rc-gray-700 p-2 svelte-1tukwqy"><div class="mb-1"><input class="card-input-title svelte-1tukwqy" type="text" placeholder="Scenario"${attr("value", t.scenario)}/> <input class="card-input-subtle mt-1 svelte-1tukwqy" type="text" placeholder="Author"${attr("value", t.author)}/></div> <div class="flex items-center gap-2">`);
4518
4485
  $$renderer4.select(
4519
4486
  {
4520
4487
  class: "rc-input w-36",
@@ -4524,20 +4491,20 @@ function _page($$renderer, $$props) {
4524
4491
  },
4525
4492
  ($$renderer5) => {
4526
4493
  $$renderer5.push(`<!--[-->`);
4527
- const each_array_3 = ensure_array_like(assertionTypes);
4528
- for (let $$index_2 = 0, $$length2 = each_array_3.length; $$index_2 < $$length2; $$index_2++) {
4529
- let opt = each_array_3[$$index_2];
4494
+ const each_array_1 = ensure_array_like(assertionTypes);
4495
+ for (let $$index = 0, $$length2 = each_array_1.length; $$index < $$length2; $$index++) {
4496
+ let opt = each_array_1[$$index];
4530
4497
  $$renderer5.option({ value: opt.value }, ($$renderer6) => {
4531
4498
  $$renderer6.push(`${escape_html(opt.label)}`);
4532
4499
  });
4533
4500
  }
4534
4501
  $$renderer5.push(`<!--]-->`);
4535
4502
  },
4536
- "svelte-1o8ahil"
4503
+ "svelte-1tukwqy"
4537
4504
  );
4538
- $$renderer4.push(` <input class="rc-input min-w-0 flex-1 svelte-1o8ahil" type="text"${attr("value", t.assertion_value)} placeholder="Assertion value"/> <button title="Duplicate" class="ml-2 shrink-0 text-gray-300 hover:text-gray-100 disabled:cursor-not-allowed disabled:opacity-50"${attr("disabled", isSaving, true)}>`);
4505
+ $$renderer4.push(` <input class="rc-input min-w-0 flex-1 svelte-1tukwqy" type="text"${attr("value", t.assertion_value)} placeholder="Assertion value"/> <button title="Duplicate" class="ml-2 shrink-0 text-gray-300 hover:text-gray-100 disabled:cursor-not-allowed disabled:opacity-50"${attr("disabled", isSaving, true)}>`);
4539
4506
  Icon($$renderer4, { icon: "mdi:content-copy", width: 18, height: 18 });
4540
- $$renderer4.push(`<!----></button> <button title="Delete" class="ml-2 shrink-0 text-red-400 hover:text-red-300">🗑</button></div> <div class="flex items-center gap-3"><div class="flex items-center gap-1"><span class="text-[11px] uppercase tracking-wide text-gray-400">Timeout</span> <input class="rc-input no-spin w-16 svelte-1o8ahil" type="number" min="0" max="999"${attr("value", t.timeout)} placeholder="Timeout"/> <span class="text-xs text-gray-400">sec</span></div> <div class="flex items-center gap-1"><span class="text-[11px] uppercase tracking-wide text-gray-400">Similarity</span> <input class="rc-input no-spin w-16 svelte-1o8ahil" type="number" min="0" max="100"${attr("value", t.similarity_threshold)} placeholder="Similarity (%)"/> <span class="text-xs text-gray-400">%</span></div></div> <div class="text-[11px] uppercase tracking-wide text-gray-400">Test context</div> `);
4507
+ $$renderer4.push(`<!----></button> <button title="Delete" class="ml-2 shrink-0 text-red-400 hover:text-red-300">🗑</button></div> <div class="flex items-center gap-3"><div class="flex items-center gap-1"><span class="text-[11px] uppercase tracking-wide text-gray-400">Timeout</span> <input class="rc-input no-spin w-16 svelte-1tukwqy" type="number" min="0" max="999"${attr("value", t.timeout)} placeholder="Timeout"/> <span class="text-xs text-gray-400">sec</span></div> <div class="flex items-center gap-1"><span class="text-[11px] uppercase tracking-wide text-gray-400">Similarity</span> <input class="rc-input no-spin w-16 svelte-1tukwqy" type="number" min="0" max="100"${attr("value", t.similarity_threshold)} placeholder="Similarity (%)"/> <span class="text-xs text-gray-400">%</span></div></div> <div class="text-[11px] uppercase tracking-wide text-gray-400">Test context</div> `);
4541
4508
  ContextEditor($$renderer4, {
4542
4509
  class: "h-24",
4543
4510
  context: parseJson(t.context),
@@ -4548,7 +4515,7 @@ function _page($$renderer, $$props) {
4548
4515
  try {
4549
4516
  const str = JSON.stringify(ctx);
4550
4517
  t.context = str;
4551
- saveRowDebounced(t.id, { context: str }, "context");
4518
+ saveRowDebounced(t.id, { context: str });
4552
4519
  } catch {
4553
4520
  }
4554
4521
  }
@@ -4556,10 +4523,7 @@ function _page($$renderer, $$props) {
4556
4523
  $$renderer4.push(`<!----> <div class="text-[11px] uppercase tracking-wide text-gray-400">Conversation</div> `);
4557
4524
  MiniEditor($$renderer4, {
4558
4525
  value: t.conversation,
4559
- onChange: (v) => {
4560
- t.conversation = v;
4561
- saveRowDebounced(t.id, { conversation: t.conversation }, "conversation");
4562
- },
4526
+ onChange: (v) => t.conversation = v,
4563
4527
  onBlur: () => saveRow(t.id, { conversation: t.conversation }),
4564
4528
  language: "markdown",
4565
4529
  height: 140
@@ -4567,10 +4531,7 @@ function _page($$renderer, $$props) {
4567
4531
  $$renderer4.push(`<!----> <div class="text-[11px] uppercase tracking-wide text-gray-400">Expected</div> `);
4568
4532
  MiniEditor($$renderer4, {
4569
4533
  value: t.expected_output,
4570
- onChange: (v) => {
4571
- t.expected_output = v;
4572
- saveRowDebounced(t.id, { expected_output: t.expected_output }, "expected_output");
4573
- },
4534
+ onChange: (v) => t.expected_output = v,
4574
4535
  onBlur: () => saveRow(t.id, { expected_output: t.expected_output }),
4575
4536
  language: "markdown",
4576
4537
  height: 120
@@ -4587,10 +4548,10 @@ function _page($$renderer, $$props) {
4587
4548
  if (t.result) {
4588
4549
  $$renderer4.push("<!--[-->");
4589
4550
  $$renderer4.push(`<div class="flex flex-col gap-3"><!--[-->`);
4590
- const each_array_4 = ensure_array_like(t.result.runs);
4591
- for (let $$index_3 = 0, $$length2 = each_array_4.length; $$index_3 < $$length2; $$index_3++) {
4592
- let run = each_array_4[$$index_3];
4593
- $$renderer4.push(`<div class="rounded-md border border-rc-gray-700 bg-rc-gray-800/40 px-3 py-2"><div${attr_class(`w-fit max-w-[700px] whitespace-pre-wrap break-words rounded px-3 py-2 text-sm text-rc-gray-100 ${run.success ? "bg-emerald-700" : ""}`, "svelte-1o8ahil")}${attr_style(!run.success ? "background-color: rgb(156 80 80)" : "")}>${escape_html(run.text || "—")}</div> <div${attr_class(`mt-2 text-xs ${run.success ? "text-rc-green-200" : "text-red-400"}`, "svelte-1o8ahil")}>${escape_html(run.success ? "Pass" : formatEvaluation(run.evaluation) || "Fail")}</div> <div class="mt-2 flex flex-wrap items-center gap-2">`);
4551
+ const each_array_2 = ensure_array_like(t.result.runs);
4552
+ for (let $$index_1 = 0, $$length2 = each_array_2.length; $$index_1 < $$length2; $$index_1++) {
4553
+ let run = each_array_2[$$index_1];
4554
+ $$renderer4.push(`<div class="rounded-md border border-rc-gray-700 bg-rc-gray-800/40 px-3 py-2"><div${attr_class(`w-fit max-w-[700px] whitespace-pre-wrap break-words rounded px-3 py-2 text-sm text-rc-gray-100 ${run.success ? "bg-emerald-700" : ""}`, "svelte-1tukwqy")}${attr_style(!run.success ? "background-color: rgb(156 80 80)" : "")}>${escape_html(run.text || "—")}</div> <div${attr_class(`mt-2 text-xs ${run.success ? "text-rc-green-200" : "text-red-400"}`, "svelte-1tukwqy")}>${escape_html(run.success ? "Pass" : formatEvaluation(run.evaluation) || "Fail")}</div> <div class="mt-2 flex flex-wrap items-center gap-2">`);
4594
4555
  Button($$renderer4, {
4595
4556
  variant: "outlined",
4596
4557
  size: "small",
@@ -4668,7 +4629,7 @@ function _page($$renderer, $$props) {
4668
4629
  $$renderer4.push(`<!--]--></tbody></table></div>`);
4669
4630
  }
4670
4631
  });
4671
- $$renderer3.push(`<!----></div>`);
4632
+ $$renderer3.push(`<!----></div></div></div>`);
4672
4633
  }
4673
4634
  do {
4674
4635
  $$settled = true;
@@ -4676,8 +4637,9 @@ function _page($$renderer, $$props) {
4676
4637
  $$render_inner($$inner_renderer);
4677
4638
  } while (!$$settled);
4678
4639
  $$renderer2.subsume($$inner_renderer);
4640
+ if ($$store_subs) unsubscribe_stores($$store_subs);
4679
4641
  });
4680
4642
  }
4681
4643
 
4682
4644
  export { _page as default };
4683
- //# sourceMappingURL=_page.svelte-CNhxx79k.js.map
4645
+ //# sourceMappingURL=_page.svelte-DKBFi-JF.js.map