@recombine-ai/bosun 0.12.2 → 0.14.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 (231) hide show
  1. package/build/client/_app/immutable/assets/0.C52H_1gD.css +1 -0
  2. package/build/client/_app/immutable/assets/0.C52H_1gD.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.C52H_1gD.css.gz +0 -0
  4. package/build/client/_app/immutable/chunks/DT-Nc4X8.js +1 -0
  5. package/build/client/_app/immutable/chunks/DT-Nc4X8.js.br +0 -0
  6. package/build/client/_app/immutable/chunks/DT-Nc4X8.js.gz +0 -0
  7. package/build/client/_app/immutable/chunks/{CFkSbzDR.js → DpK9GbNl.js} +1 -1
  8. package/build/client/_app/immutable/chunks/DpK9GbNl.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/DpK9GbNl.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/DpnRcXcI.js +1 -0
  11. package/build/client/_app/immutable/chunks/DpnRcXcI.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/DpnRcXcI.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/WU4sY4ua.js +3 -0
  14. package/build/client/_app/immutable/chunks/WU4sY4ua.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/WU4sY4ua.js.gz +0 -0
  16. package/build/client/_app/immutable/entry/{app.o-KFh_Cb.js → app.Dsozg03K.js} +2 -2
  17. package/build/client/_app/immutable/entry/app.Dsozg03K.js.br +0 -0
  18. package/build/client/_app/immutable/entry/app.Dsozg03K.js.gz +0 -0
  19. package/build/client/_app/immutable/entry/start.u3sAF1g1.js +1 -0
  20. package/build/client/_app/immutable/entry/start.u3sAF1g1.js.br +2 -0
  21. package/build/client/_app/immutable/entry/start.u3sAF1g1.js.gz +0 -0
  22. package/build/client/_app/immutable/nodes/{0.DzAzg3lC.js → 0.PqjhF1QL.js} +1 -1
  23. package/build/client/_app/immutable/nodes/0.PqjhF1QL.js.br +0 -0
  24. package/build/client/_app/immutable/nodes/0.PqjhF1QL.js.gz +0 -0
  25. package/build/client/_app/immutable/nodes/{1.CgJnX42R.js → 1.CeaYEPDC.js} +1 -1
  26. package/build/client/_app/immutable/nodes/1.CeaYEPDC.js.br +0 -0
  27. package/build/client/_app/immutable/nodes/1.CeaYEPDC.js.gz +0 -0
  28. package/build/client/_app/immutable/nodes/10.DDmx2fJe.js +12 -0
  29. package/build/client/_app/immutable/nodes/10.DDmx2fJe.js.br +0 -0
  30. package/build/client/_app/immutable/nodes/10.DDmx2fJe.js.gz +0 -0
  31. package/build/client/_app/immutable/nodes/{17.Dh0U5ZLs.js → 17.DSVuCWoY.js} +1 -1
  32. package/build/client/_app/immutable/nodes/17.DSVuCWoY.js.br +0 -0
  33. package/build/client/_app/immutable/nodes/17.DSVuCWoY.js.gz +0 -0
  34. package/build/client/_app/immutable/nodes/18.D5HhWZR8.js +11 -0
  35. package/build/client/_app/immutable/nodes/18.D5HhWZR8.js.br +0 -0
  36. package/build/client/_app/immutable/nodes/18.D5HhWZR8.js.gz +0 -0
  37. package/build/client/_app/immutable/nodes/{2.CUHzTabj.js → 2.D6Bd4az6.js} +1 -1
  38. package/build/client/_app/immutable/nodes/2.D6Bd4az6.js.br +0 -0
  39. package/build/client/_app/immutable/nodes/2.D6Bd4az6.js.gz +0 -0
  40. package/build/client/_app/immutable/nodes/{3.fG_Roq0i.js → 3.LaYKamuf.js} +1 -1
  41. package/build/client/_app/immutable/nodes/3.LaYKamuf.js.br +0 -0
  42. package/build/client/_app/immutable/nodes/3.LaYKamuf.js.gz +0 -0
  43. package/build/client/_app/immutable/nodes/{4.CLFkMI6C.js → 4.DvSSPHp6.js} +1 -1
  44. package/build/client/_app/immutable/nodes/4.DvSSPHp6.js.br +0 -0
  45. package/build/client/_app/immutable/nodes/4.DvSSPHp6.js.gz +0 -0
  46. package/build/client/_app/immutable/nodes/{5.DTNqvnb6.js → 5.D0AE4cAT.js} +1 -1
  47. package/build/client/_app/immutable/nodes/5.D0AE4cAT.js.br +0 -0
  48. package/build/client/_app/immutable/nodes/5.D0AE4cAT.js.gz +0 -0
  49. package/build/client/_app/immutable/nodes/{6.4xYVoDHd.js → 6.l_w8FITo.js} +1 -1
  50. package/build/client/_app/immutable/nodes/6.l_w8FITo.js.br +0 -0
  51. package/build/client/_app/immutable/nodes/6.l_w8FITo.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/{8.CRjSjXfT.js → 8.D51f7wuE.js} +1 -1
  53. package/build/client/_app/immutable/nodes/8.D51f7wuE.js.br +0 -0
  54. package/build/client/_app/immutable/nodes/8.D51f7wuE.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/9.6UjiO-jB.js +2 -0
  56. package/build/client/_app/immutable/nodes/9.6UjiO-jB.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/9.6UjiO-jB.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-DZjFjCYb.js → 0-C8GM7KhM.js} +4 -4
  62. package/build/server/chunks/{0-DZjFjCYb.js.map → 0-C8GM7KhM.js.map} +1 -1
  63. package/build/server/chunks/{1-BnDJQctI.js → 1-D6beYunF.js} +3 -3
  64. package/build/server/chunks/{1-BnDJQctI.js.map → 1-D6beYunF.js.map} +1 -1
  65. package/build/server/chunks/{10-CaY_D1yr.js → 10-DUm1sxLB.js} +3 -3
  66. package/build/server/chunks/{10-CaY_D1yr.js.map → 10-DUm1sxLB.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-n_LzmOIf.js → 17-DmTinIOr.js} +3 -3
  70. package/build/server/chunks/{17-n_LzmOIf.js.map → 17-DmTinIOr.js.map} +1 -1
  71. package/build/server/chunks/{18-DGfJMJic.js → 18-WwHhv16m.js} +3 -3
  72. package/build/server/chunks/{18-DGfJMJic.js.map → 18-WwHhv16m.js.map} +1 -1
  73. package/build/server/chunks/{2-CNylBPwc.js → 2-OnF-oKQM.js} +3 -3
  74. package/build/server/chunks/{2-CNylBPwc.js.map → 2-OnF-oKQM.js.map} +1 -1
  75. package/build/server/chunks/{3-Cfx-Gcr_.js → 3-Dd-gL5uB.js} +3 -3
  76. package/build/server/chunks/{3-Cfx-Gcr_.js.map → 3-Dd-gL5uB.js.map} +1 -1
  77. package/build/server/chunks/{4-B6TVtBCA.js → 4-C3x6cmyv.js} +3 -3
  78. package/build/server/chunks/{4-B6TVtBCA.js.map → 4-C3x6cmyv.js.map} +1 -1
  79. package/build/server/chunks/{5-BLm6rhN5.js → 5-CiuoFl6L.js} +3 -3
  80. package/build/server/chunks/{5-BLm6rhN5.js.map → 5-CiuoFl6L.js.map} +1 -1
  81. package/build/server/chunks/{6-DNRqV68B.js → 6-D_KHM930.js} +3 -3
  82. package/build/server/chunks/{6-DNRqV68B.js.map → 6-D_KHM930.js.map} +1 -1
  83. package/build/server/chunks/{8-CMgxOut_.js → 8-WnGdxpYD.js} +3 -3
  84. package/build/server/chunks/{8-CMgxOut_.js.map → 8-WnGdxpYD.js.map} +1 -1
  85. package/build/server/chunks/{9-6WeCfWuG.js → 9-CwinUUou.js} +3 -3
  86. package/build/server/chunks/{9-6WeCfWuG.js.map → 9-CwinUUou.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-DirlvCw9.js} +97 -14
  92. package/build/server/chunks/ChatStepTrace-DirlvCw9.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-0J2xaeyC.js → _page.svelte-B81e653N.js} +25 -174
  114. package/build/server/chunks/_page.svelte-B81e653N.js.map +1 -0
  115. package/build/server/chunks/{_page.svelte-_sXVlB3C.js → _page.svelte-BTKQMuSz.js} +88 -37
  116. package/build/server/chunks/_page.svelte-BTKQMuSz.js.map +1 -0
  117. package/build/server/chunks/{_page.svelte-Cxh9_vUl.js → _page.svelte-BkmclXmx.js} +17 -12
  118. package/build/server/chunks/_page.svelte-BkmclXmx.js.map +1 -0
  119. package/build/server/chunks/{_page.svelte-DbV3HGn5.js → _page.svelte-CeO_ScC8.js} +2 -2
  120. package/build/server/chunks/{_page.svelte-DbV3HGn5.js.map → _page.svelte-CeO_ScC8.js.map} +1 -1
  121. package/build/server/chunks/{_page.svelte-BYVcy49A.js → _page.svelte-Cu8a_kUO.js} +4 -4
  122. package/build/server/chunks/{_page.svelte-BYVcy49A.js.map → _page.svelte-Cu8a_kUO.js.map} +1 -1
  123. package/build/server/chunks/{_page.svelte-BgoX8Y6N.js → _page.svelte-D5S0QjlI.js} +12 -12
  124. package/build/server/chunks/_page.svelte-D5S0QjlI.js.map +1 -0
  125. package/build/server/chunks/{_page.svelte-CqGOvPRO.js → _page.svelte-YoDx7gDL.js} +6 -6
  126. package/build/server/chunks/{_page.svelte-CqGOvPRO.js.map → _page.svelte-YoDx7gDL.js.map} +1 -1
  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/pii-sanitized-test-drafts.spec.ts +162 -0
  162. package/src/backend/tests/pii-sanitized-test-drafts.ts +106 -0
  163. package/src/backend/tests/pii-sanitizer.spec.ts +145 -0
  164. package/src/backend/tests/pii-sanitizer.ts +171 -0
  165. package/src/backend/tests/router.ts +42 -1
  166. package/src/backend/tests/suite.spec.ts +54 -0
  167. package/src/backend/tests/suite.ts +20 -11
  168. package/build/client/_app/immutable/assets/0.CH-WU4JN.css +0 -1
  169. package/build/client/_app/immutable/assets/0.CH-WU4JN.css.br +0 -0
  170. package/build/client/_app/immutable/assets/0.CH-WU4JN.css.gz +0 -0
  171. package/build/client/_app/immutable/chunks/CFkSbzDR.js.br +0 -0
  172. package/build/client/_app/immutable/chunks/CFkSbzDR.js.gz +0 -0
  173. package/build/client/_app/immutable/chunks/DQmjMBKm.js +0 -1
  174. package/build/client/_app/immutable/chunks/DQmjMBKm.js.br +0 -0
  175. package/build/client/_app/immutable/chunks/DQmjMBKm.js.gz +0 -0
  176. package/build/client/_app/immutable/chunks/DUdfYZrb.js +0 -3
  177. package/build/client/_app/immutable/chunks/DUdfYZrb.js.br +0 -0
  178. package/build/client/_app/immutable/chunks/DUdfYZrb.js.gz +0 -0
  179. package/build/client/_app/immutable/chunks/W6dJ5sed.js +0 -1
  180. package/build/client/_app/immutable/chunks/W6dJ5sed.js.br +0 -0
  181. package/build/client/_app/immutable/chunks/W6dJ5sed.js.gz +0 -0
  182. package/build/client/_app/immutable/entry/app.o-KFh_Cb.js.br +0 -0
  183. package/build/client/_app/immutable/entry/app.o-KFh_Cb.js.gz +0 -0
  184. package/build/client/_app/immutable/entry/start.B5RrntSX.js +0 -1
  185. package/build/client/_app/immutable/entry/start.B5RrntSX.js.br +0 -2
  186. package/build/client/_app/immutable/entry/start.B5RrntSX.js.gz +0 -0
  187. package/build/client/_app/immutable/nodes/0.DzAzg3lC.js.br +0 -0
  188. package/build/client/_app/immutable/nodes/0.DzAzg3lC.js.gz +0 -0
  189. package/build/client/_app/immutable/nodes/1.CgJnX42R.js.br +0 -0
  190. package/build/client/_app/immutable/nodes/1.CgJnX42R.js.gz +0 -0
  191. package/build/client/_app/immutable/nodes/10.BiOIt6Na.js +0 -7
  192. package/build/client/_app/immutable/nodes/10.BiOIt6Na.js.br +0 -0
  193. package/build/client/_app/immutable/nodes/10.BiOIt6Na.js.gz +0 -0
  194. package/build/client/_app/immutable/nodes/17.Dh0U5ZLs.js.br +0 -0
  195. package/build/client/_app/immutable/nodes/17.Dh0U5ZLs.js.gz +0 -0
  196. package/build/client/_app/immutable/nodes/18.CgBjPl-X.js +0 -11
  197. package/build/client/_app/immutable/nodes/18.CgBjPl-X.js.br +0 -0
  198. package/build/client/_app/immutable/nodes/18.CgBjPl-X.js.gz +0 -0
  199. package/build/client/_app/immutable/nodes/2.CUHzTabj.js.br +0 -0
  200. package/build/client/_app/immutable/nodes/2.CUHzTabj.js.gz +0 -0
  201. package/build/client/_app/immutable/nodes/3.fG_Roq0i.js.br +0 -0
  202. package/build/client/_app/immutable/nodes/3.fG_Roq0i.js.gz +0 -0
  203. package/build/client/_app/immutable/nodes/4.CLFkMI6C.js.br +0 -0
  204. package/build/client/_app/immutable/nodes/4.CLFkMI6C.js.gz +0 -0
  205. package/build/client/_app/immutable/nodes/5.DTNqvnb6.js.br +0 -0
  206. package/build/client/_app/immutable/nodes/5.DTNqvnb6.js.gz +0 -0
  207. package/build/client/_app/immutable/nodes/6.4xYVoDHd.js.br +0 -0
  208. package/build/client/_app/immutable/nodes/6.4xYVoDHd.js.gz +0 -0
  209. package/build/client/_app/immutable/nodes/8.CRjSjXfT.js.br +0 -0
  210. package/build/client/_app/immutable/nodes/8.CRjSjXfT.js.gz +0 -0
  211. package/build/client/_app/immutable/nodes/9.KqgZD6ts.js +0 -2
  212. package/build/client/_app/immutable/nodes/9.KqgZD6ts.js.br +0 -0
  213. package/build/client/_app/immutable/nodes/9.KqgZD6ts.js.gz +0 -0
  214. package/build/server/chunks/ChatStepTrace-CqqIjRLU.js.map +0 -1
  215. package/build/server/chunks/MockGenerator-GEpXTgX0.js +0 -117
  216. package/build/server/chunks/MockGenerator-GEpXTgX0.js.map +0 -1
  217. package/build/server/chunks/Modal-DtVsRmmO.js.map +0 -1
  218. package/build/server/chunks/_layout.svelte-B-CkD4a0.js.map +0 -1
  219. package/build/server/chunks/_layout.svelte-BBFCF-xw.js.map +0 -1
  220. package/build/server/chunks/_layout.svelte-C5eqrEen.js.map +0 -1
  221. package/build/server/chunks/_layout.svelte-cPhmW5bZ.js.map +0 -1
  222. package/build/server/chunks/_page.svelte-0J2xaeyC.js.map +0 -1
  223. package/build/server/chunks/_page.svelte-BgoX8Y6N.js.map +0 -1
  224. package/build/server/chunks/_page.svelte-Cxh9_vUl.js.map +0 -1
  225. package/build/server/chunks/_page.svelte-_sXVlB3C.js.map +0 -1
  226. package/build/server/chunks/error.svelte-DA-yulF5.js +0 -15
  227. package/build/server/chunks/events-BQ65tUJo.js +0 -120
  228. package/build/server/chunks/events-BQ65tUJo.js.map +0 -1
  229. package/build/server/chunks/index2-DO4B3D-P.js +0 -52
  230. package/build/server/chunks/index2-DO4B3D-P.js.map +0 -1
  231. package/build/server/chunks/root-CDJwhpIB.js.map +0 -1
@@ -10,27 +10,27 @@ return {
10
10
  assets: new Set(["favicon.png","fonts/DarkerGrotesque-Black.ttf","fonts/DarkerGrotesque-Bold.ttf","fonts/DarkerGrotesque-Light.ttf","fonts/DarkerGrotesque-Medium.ttf","fonts/DarkerGrotesque-Regular.ttf","fonts/DarkerGrotesque-SemiBold.ttf","fonts.css","recombine.svg","telescope-icon.svg","ui/arrow_tests.svg","ui/paperclip.svg","ui/send.svg"]),
11
11
  mimeTypes: {".png":"image/png",".ttf":"font/ttf",".css":"text/css",".svg":"image/svg+xml"},
12
12
  _: {
13
- client: {start:"_app/immutable/entry/start.B5RrntSX.js",app:"_app/immutable/entry/app.o-KFh_Cb.js",imports:["_app/immutable/entry/start.B5RrntSX.js","_app/immutable/chunks/W6dJ5sed.js","_app/immutable/chunks/CxLomzuE.js","_app/immutable/chunks/uLGP0py1.js","_app/immutable/chunks/OA8UcISh.js","_app/immutable/chunks/C39ai1md.js","_app/immutable/entry/app.o-KFh_Cb.js","_app/immutable/chunks/C1FmrZbK.js","_app/immutable/chunks/CxLomzuE.js","_app/immutable/chunks/DJriQKD9.js","_app/immutable/chunks/Ca197UDq.js","_app/immutable/chunks/xC2C8d09.js","_app/immutable/chunks/C39ai1md.js","_app/immutable/chunks/Buo-57fF.js","_app/immutable/chunks/CJYOmGlC.js","_app/immutable/chunks/Cyai3SOj.js","_app/immutable/chunks/BLu86SbA.js","_app/immutable/chunks/CPXdAKdv.js","_app/immutable/chunks/uLGP0py1.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:true},
13
+ client: {start:"_app/immutable/entry/start.u3sAF1g1.js",app:"_app/immutable/entry/app.Dsozg03K.js",imports:["_app/immutable/entry/start.u3sAF1g1.js","_app/immutable/chunks/DpnRcXcI.js","_app/immutable/chunks/CxLomzuE.js","_app/immutable/chunks/uLGP0py1.js","_app/immutable/chunks/OA8UcISh.js","_app/immutable/chunks/C39ai1md.js","_app/immutable/entry/app.Dsozg03K.js","_app/immutable/chunks/C1FmrZbK.js","_app/immutable/chunks/CxLomzuE.js","_app/immutable/chunks/DJriQKD9.js","_app/immutable/chunks/Ca197UDq.js","_app/immutable/chunks/xC2C8d09.js","_app/immutable/chunks/C39ai1md.js","_app/immutable/chunks/Buo-57fF.js","_app/immutable/chunks/CJYOmGlC.js","_app/immutable/chunks/Cyai3SOj.js","_app/immutable/chunks/BLu86SbA.js","_app/immutable/chunks/CPXdAKdv.js","_app/immutable/chunks/uLGP0py1.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:true},
14
14
  nodes: [
15
- __memo(() => import('./chunks/0-DZjFjCYb.js')),
16
- __memo(() => import('./chunks/1-BnDJQctI.js')),
17
- __memo(() => import('./chunks/2-CNylBPwc.js')),
18
- __memo(() => import('./chunks/3-Cfx-Gcr_.js')),
19
- __memo(() => import('./chunks/4-B6TVtBCA.js')),
20
- __memo(() => import('./chunks/5-BLm6rhN5.js')),
21
- __memo(() => import('./chunks/6-DNRqV68B.js')),
15
+ __memo(() => import('./chunks/0-C8GM7KhM.js')),
16
+ __memo(() => import('./chunks/1-D6beYunF.js')),
17
+ __memo(() => import('./chunks/2-OnF-oKQM.js')),
18
+ __memo(() => import('./chunks/3-Dd-gL5uB.js')),
19
+ __memo(() => import('./chunks/4-C3x6cmyv.js')),
20
+ __memo(() => import('./chunks/5-CiuoFl6L.js')),
21
+ __memo(() => import('./chunks/6-D_KHM930.js')),
22
22
  __memo(() => import('./chunks/7-olXOjo4r.js')),
23
- __memo(() => import('./chunks/8-CMgxOut_.js')),
24
- __memo(() => import('./chunks/9-6WeCfWuG.js')),
25
- __memo(() => import('./chunks/10-CaY_D1yr.js')),
23
+ __memo(() => import('./chunks/8-WnGdxpYD.js')),
24
+ __memo(() => import('./chunks/9-CwinUUou.js')),
25
+ __memo(() => import('./chunks/10-DUm1sxLB.js')),
26
26
  __memo(() => import('./chunks/11-CB5q84io.js')),
27
27
  __memo(() => import('./chunks/12-CfqC_Y1R.js')),
28
28
  __memo(() => import('./chunks/13-ByddfU7G.js')),
29
29
  __memo(() => import('./chunks/14-Dk7DCwHC.js')),
30
- __memo(() => import('./chunks/15-BMEAVslz.js')),
30
+ __memo(() => import('./chunks/15-BRw8wtLp.js')),
31
31
  __memo(() => import('./chunks/16-Y9KLA9UF.js')),
32
- __memo(() => import('./chunks/17-n_LzmOIf.js')),
33
- __memo(() => import('./chunks/18-DGfJMJic.js'))
32
+ __memo(() => import('./chunks/17-DmTinIOr.js')),
33
+ __memo(() => import('./chunks/18-WwHhv16m.js'))
34
34
  ],
35
35
  remotes: {
36
36
 
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"favicon.png\",\"fonts/DarkerGrotesque-Black.ttf\",\"fonts/DarkerGrotesque-Bold.ttf\",\"fonts/DarkerGrotesque-Light.ttf\",\"fonts/DarkerGrotesque-Medium.ttf\",\"fonts/DarkerGrotesque-Regular.ttf\",\"fonts/DarkerGrotesque-SemiBold.ttf\",\"fonts.css\",\"recombine.svg\",\"telescope-icon.svg\",\"ui/arrow_tests.svg\",\"ui/paperclip.svg\",\"ui/send.svg\"]),\n\tmimeTypes: {\".png\":\"image/png\",\".ttf\":\"font/ttf\",\".css\":\"text/css\",\".svg\":\"image/svg+xml\"},\n\t_: {\n\t\tclient: {start:\"_app/immutable/entry/start.B5RrntSX.js\",app:\"_app/immutable/entry/app.o-KFh_Cb.js\",imports:[\"_app/immutable/entry/start.B5RrntSX.js\",\"_app/immutable/chunks/W6dJ5sed.js\",\"_app/immutable/chunks/CxLomzuE.js\",\"_app/immutable/chunks/uLGP0py1.js\",\"_app/immutable/chunks/OA8UcISh.js\",\"_app/immutable/chunks/C39ai1md.js\",\"_app/immutable/entry/app.o-KFh_Cb.js\",\"_app/immutable/chunks/C1FmrZbK.js\",\"_app/immutable/chunks/CxLomzuE.js\",\"_app/immutable/chunks/DJriQKD9.js\",\"_app/immutable/chunks/Ca197UDq.js\",\"_app/immutable/chunks/xC2C8d09.js\",\"_app/immutable/chunks/C39ai1md.js\",\"_app/immutable/chunks/Buo-57fF.js\",\"_app/immutable/chunks/CJYOmGlC.js\",\"_app/immutable/chunks/Cyai3SOj.js\",\"_app/immutable/chunks/BLu86SbA.js\",\"_app/immutable/chunks/CPXdAKdv.js\",\"_app/immutable/chunks/uLGP0py1.js\"],stylesheets:[],fonts:[],uses_env_dynamic_public:true},\n\t\tnodes: [\n\t\t\t__memo(() => import('./nodes/0.js')),\n\t\t\t__memo(() => import('./nodes/1.js')),\n\t\t\t__memo(() => import('./nodes/2.js')),\n\t\t\t__memo(() => import('./nodes/3.js')),\n\t\t\t__memo(() => import('./nodes/4.js')),\n\t\t\t__memo(() => import('./nodes/5.js')),\n\t\t\t__memo(() => import('./nodes/6.js')),\n\t\t\t__memo(() => import('./nodes/7.js')),\n\t\t\t__memo(() => import('./nodes/8.js')),\n\t\t\t__memo(() => import('./nodes/9.js')),\n\t\t\t__memo(() => import('./nodes/10.js')),\n\t\t\t__memo(() => import('./nodes/11.js')),\n\t\t\t__memo(() => import('./nodes/12.js')),\n\t\t\t__memo(() => import('./nodes/13.js')),\n\t\t\t__memo(() => import('./nodes/14.js')),\n\t\t\t__memo(() => import('./nodes/15.js')),\n\t\t\t__memo(() => import('./nodes/16.js')),\n\t\t\t__memo(() => import('./nodes/17.js')),\n\t\t\t__memo(() => import('./nodes/18.js'))\n\t\t],\n\t\tremotes: {\n\t\t\t\n\t\t},\n\t\troutes: [\n\t\t\t{\n\t\t\t\tid: \"/\",\n\t\t\t\tpattern: /^\\/$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 5 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/edit\",\n\t\t\t\tpattern: /^\\/edit\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 6 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/edit/[agent]\",\n\t\t\t\tpattern: /^\\/edit\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"agent\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,], errors: [1,,], leaf: 7 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/edit/[agent]/configure\",\n\t\t\t\tpattern: /^\\/edit\\/([^/]+?)\\/configure\\/?$/,\n\t\t\t\tparams: [{\"name\":\"agent\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,], errors: [1,,], leaf: 8 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/edit/[agent]/roleplay\",\n\t\t\t\tpattern: /^\\/edit\\/([^/]+?)\\/roleplay\\/?$/,\n\t\t\t\tparams: [{\"name\":\"agent\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,], errors: [1,,], leaf: 9 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/edit/[agent]/tests\",\n\t\t\t\tpattern: /^\\/edit\\/([^/]+?)\\/tests\\/?$/,\n\t\t\t\tparams: [{\"name\":\"agent\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,], errors: [1,,], leaf: 10 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/roleplay\",\n\t\t\t\tpattern: /^\\/roleplay\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 11 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/tests\",\n\t\t\t\tpattern: /^\\/tests\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 12 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/tests/[agent]\",\n\t\t\t\tpattern: /^\\/tests\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"agent\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 13 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces\",\n\t\t\t\tpattern: /^\\/traces\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 14 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/api/latency/[conversationId]\",\n\t\t\t\tpattern: /^\\/traces\\/api\\/latency\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"conversationId\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/traces/api/latency/_conversationId_/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/api/latency/[conversationId]/audio\",\n\t\t\t\tpattern: /^\\/traces\\/api\\/latency\\/([^/]+?)\\/audio\\/?$/,\n\t\t\t\tparams: [{\"name\":\"conversationId\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/traces/api/latency/_conversationId_/audio/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/api/proxy/[...path]\",\n\t\t\t\tpattern: /^\\/traces\\/api\\/proxy(?:\\/([^]*))?\\/?$/,\n\t\t\t\tparams: [{\"name\":\"path\",\"optional\":false,\"rest\":true,\"chained\":true}],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/traces/api/proxy/_...path_/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/api/sources\",\n\t\t\t\tpattern: /^\\/traces\\/api\\/sources\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/traces/api/sources/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/conversations\",\n\t\t\t\tpattern: /^\\/traces\\/conversations\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,3,], errors: [1,,], leaf: 15 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/conversations/[conversationId]\",\n\t\t\t\tpattern: /^\\/traces\\/conversations\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"conversationId\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,3,4,], errors: [1,,,], leaf: 16 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/conversations/[conversationId]/latency\",\n\t\t\t\tpattern: /^\\/traces\\/conversations\\/([^/]+?)\\/latency\\/?$/,\n\t\t\t\tparams: [{\"name\":\"conversationId\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,3,4,], errors: [1,,,], leaf: 17 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/conversations/[conversationId]/traces\",\n\t\t\t\tpattern: /^\\/traces\\/conversations\\/([^/]+?)\\/traces\\/?$/,\n\t\t\t\tparams: [{\"name\":\"conversationId\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,3,4,], errors: [1,,,], leaf: 18 },\n\t\t\t\tendpoint: null\n\t\t\t}\n\t\t],\n\t\tprerendered_routes: new Set([]),\n\t\tmatchers: async () => {\n\t\t\t\n\t\t\treturn { };\n\t\t},\n\t\tserver_assets: {}\n\t}\n}\n})();\n\nexport const prerendered = new Set([]);\n\nexport const base = \"\";"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"favicon.png\",\"fonts/DarkerGrotesque-Black.ttf\",\"fonts/DarkerGrotesque-Bold.ttf\",\"fonts/DarkerGrotesque-Light.ttf\",\"fonts/DarkerGrotesque-Medium.ttf\",\"fonts/DarkerGrotesque-Regular.ttf\",\"fonts/DarkerGrotesque-SemiBold.ttf\",\"fonts.css\",\"recombine.svg\",\"telescope-icon.svg\",\"ui/arrow_tests.svg\",\"ui/paperclip.svg\",\"ui/send.svg\"]),\n\tmimeTypes: {\".png\":\"image/png\",\".ttf\":\"font/ttf\",\".css\":\"text/css\",\".svg\":\"image/svg+xml\"},\n\t_: {\n\t\tclient: {start:\"_app/immutable/entry/start.u3sAF1g1.js\",app:\"_app/immutable/entry/app.Dsozg03K.js\",imports:[\"_app/immutable/entry/start.u3sAF1g1.js\",\"_app/immutable/chunks/DpnRcXcI.js\",\"_app/immutable/chunks/CxLomzuE.js\",\"_app/immutable/chunks/uLGP0py1.js\",\"_app/immutable/chunks/OA8UcISh.js\",\"_app/immutable/chunks/C39ai1md.js\",\"_app/immutable/entry/app.Dsozg03K.js\",\"_app/immutable/chunks/C1FmrZbK.js\",\"_app/immutable/chunks/CxLomzuE.js\",\"_app/immutable/chunks/DJriQKD9.js\",\"_app/immutable/chunks/Ca197UDq.js\",\"_app/immutable/chunks/xC2C8d09.js\",\"_app/immutable/chunks/C39ai1md.js\",\"_app/immutable/chunks/Buo-57fF.js\",\"_app/immutable/chunks/CJYOmGlC.js\",\"_app/immutable/chunks/Cyai3SOj.js\",\"_app/immutable/chunks/BLu86SbA.js\",\"_app/immutable/chunks/CPXdAKdv.js\",\"_app/immutable/chunks/uLGP0py1.js\"],stylesheets:[],fonts:[],uses_env_dynamic_public:true},\n\t\tnodes: [\n\t\t\t__memo(() => import('./nodes/0.js')),\n\t\t\t__memo(() => import('./nodes/1.js')),\n\t\t\t__memo(() => import('./nodes/2.js')),\n\t\t\t__memo(() => import('./nodes/3.js')),\n\t\t\t__memo(() => import('./nodes/4.js')),\n\t\t\t__memo(() => import('./nodes/5.js')),\n\t\t\t__memo(() => import('./nodes/6.js')),\n\t\t\t__memo(() => import('./nodes/7.js')),\n\t\t\t__memo(() => import('./nodes/8.js')),\n\t\t\t__memo(() => import('./nodes/9.js')),\n\t\t\t__memo(() => import('./nodes/10.js')),\n\t\t\t__memo(() => import('./nodes/11.js')),\n\t\t\t__memo(() => import('./nodes/12.js')),\n\t\t\t__memo(() => import('./nodes/13.js')),\n\t\t\t__memo(() => import('./nodes/14.js')),\n\t\t\t__memo(() => import('./nodes/15.js')),\n\t\t\t__memo(() => import('./nodes/16.js')),\n\t\t\t__memo(() => import('./nodes/17.js')),\n\t\t\t__memo(() => import('./nodes/18.js'))\n\t\t],\n\t\tremotes: {\n\t\t\t\n\t\t},\n\t\troutes: [\n\t\t\t{\n\t\t\t\tid: \"/\",\n\t\t\t\tpattern: /^\\/$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 5 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/edit\",\n\t\t\t\tpattern: /^\\/edit\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 6 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/edit/[agent]\",\n\t\t\t\tpattern: /^\\/edit\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"agent\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,], errors: [1,,], leaf: 7 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/edit/[agent]/configure\",\n\t\t\t\tpattern: /^\\/edit\\/([^/]+?)\\/configure\\/?$/,\n\t\t\t\tparams: [{\"name\":\"agent\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,], errors: [1,,], leaf: 8 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/edit/[agent]/roleplay\",\n\t\t\t\tpattern: /^\\/edit\\/([^/]+?)\\/roleplay\\/?$/,\n\t\t\t\tparams: [{\"name\":\"agent\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,], errors: [1,,], leaf: 9 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/edit/[agent]/tests\",\n\t\t\t\tpattern: /^\\/edit\\/([^/]+?)\\/tests\\/?$/,\n\t\t\t\tparams: [{\"name\":\"agent\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,], errors: [1,,], leaf: 10 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/roleplay\",\n\t\t\t\tpattern: /^\\/roleplay\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 11 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/tests\",\n\t\t\t\tpattern: /^\\/tests\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 12 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/tests/[agent]\",\n\t\t\t\tpattern: /^\\/tests\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"agent\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 13 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces\",\n\t\t\t\tpattern: /^\\/traces\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 14 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/api/latency/[conversationId]\",\n\t\t\t\tpattern: /^\\/traces\\/api\\/latency\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"conversationId\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/traces/api/latency/_conversationId_/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/api/latency/[conversationId]/audio\",\n\t\t\t\tpattern: /^\\/traces\\/api\\/latency\\/([^/]+?)\\/audio\\/?$/,\n\t\t\t\tparams: [{\"name\":\"conversationId\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/traces/api/latency/_conversationId_/audio/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/api/proxy/[...path]\",\n\t\t\t\tpattern: /^\\/traces\\/api\\/proxy(?:\\/([^]*))?\\/?$/,\n\t\t\t\tparams: [{\"name\":\"path\",\"optional\":false,\"rest\":true,\"chained\":true}],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/traces/api/proxy/_...path_/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/api/sources\",\n\t\t\t\tpattern: /^\\/traces\\/api\\/sources\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/traces/api/sources/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/conversations\",\n\t\t\t\tpattern: /^\\/traces\\/conversations\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,3,], errors: [1,,], leaf: 15 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/conversations/[conversationId]\",\n\t\t\t\tpattern: /^\\/traces\\/conversations\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"conversationId\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,3,4,], errors: [1,,,], leaf: 16 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/conversations/[conversationId]/latency\",\n\t\t\t\tpattern: /^\\/traces\\/conversations\\/([^/]+?)\\/latency\\/?$/,\n\t\t\t\tparams: [{\"name\":\"conversationId\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,3,4,], errors: [1,,,], leaf: 17 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/traces/conversations/[conversationId]/traces\",\n\t\t\t\tpattern: /^\\/traces\\/conversations\\/([^/]+?)\\/traces\\/?$/,\n\t\t\t\tparams: [{\"name\":\"conversationId\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,3,4,], errors: [1,,,], leaf: 18 },\n\t\t\t\tendpoint: null\n\t\t\t}\n\t\t],\n\t\tprerendered_routes: new Set([]),\n\t\tmatchers: async () => {\n\t\t\t\n\t\t\treturn { };\n\t\t},\n\t\tserver_assets: {}\n\t}\n}\n})();\n\nexport const prerendered = new Set([]);\n\nexport const base = \"\";"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@recombine-ai/bosun",
3
3
  "author": "recombine.ai",
4
- "version": "0.12.2",
4
+ "version": "0.14.0",
5
5
  "license": "EULA",
6
6
  "bin": {
7
7
  "bosun": "./bin/bosun.js"
@@ -83,7 +83,7 @@
83
83
  "dependencies": {
84
84
  "@iconify/svelte": "^5.0.2",
85
85
  "@popperjs/core": "^2.11.8",
86
- "@recombine-ai/bosun-lib": "0.2.0",
86
+ "@recombine-ai/bosun-lib": "0.2.1",
87
87
  "@recombine-ai/engine": "1.0.0",
88
88
  "@recombine-ai/telescope": "0.2.0",
89
89
  "@tailwindcss/forms": "^0.5.9",
@@ -0,0 +1,65 @@
1
+ import { describe, expect, it } from 'vitest'
2
+
3
+ import { gradeJsonExpectedFields } from './json-field-match'
4
+
5
+ describe('gradeJsonExpectedFields', () => {
6
+ it('ignores object key order and formatting', () => {
7
+ expect(
8
+ gradeJsonExpectedFields(
9
+ '{"type":"morning","date":"2027-01-14"}',
10
+ '{\n "date": "2027-01-14",\n "type": "morning"\n}'
11
+ )
12
+ ).toMatchObject({ pass: true, score: 1 })
13
+ })
14
+
15
+ it('preserves array order', () => {
16
+ expect(gradeJsonExpectedFields('{"slots":[1,2]}', '{"slots":[2,1]}')).toMatchObject({
17
+ pass: false,
18
+ score: 0
19
+ })
20
+ })
21
+
22
+ it('reports invalid actual JSON as a failed comparison', () => {
23
+ expect(gradeJsonExpectedFields('not json', '{}')).toMatchObject({
24
+ pass: false,
25
+ reason: expect.stringContaining('Actual step output is not valid JSON')
26
+ })
27
+ })
28
+
29
+ it('ignores object fields that are omitted from the expected output', () => {
30
+ expect(
31
+ gradeJsonExpectedFields(
32
+ JSON.stringify({
33
+ result: {
34
+ outcome: 'NO_ANSWER',
35
+ notes: 'Reached voicemail; no message was left.',
36
+ callback: null
37
+ },
38
+ analysis: 'Free-form explanation'
39
+ }),
40
+ JSON.stringify({ result: { outcome: 'NO_ANSWER', callback: null } })
41
+ )
42
+ ).toMatchObject({ pass: true, score: 1 })
43
+ })
44
+
45
+ it('still requires every expected field to match', () => {
46
+ expect(
47
+ gradeJsonExpectedFields(
48
+ '{"result":{"outcome":"QUALIFIED","callback":null}}',
49
+ '{"result":{"outcome":"NO_ANSWER"}}'
50
+ )
51
+ ).toMatchObject({
52
+ pass: false,
53
+ reason: expect.stringContaining('$.result.outcome')
54
+ })
55
+ })
56
+
57
+ it('matches expected fields recursively inside arrays', () => {
58
+ expect(
59
+ gradeJsonExpectedFields(
60
+ '{"slots":[{"date":"2027-01-14","internalId":"123"}]}',
61
+ '{"slots":[{"date":"2027-01-14"}]}'
62
+ )
63
+ ).toMatchObject({ pass: true })
64
+ })
65
+ })
@@ -22,6 +22,7 @@ import { getRootPath } from '../lib/get-root-path'
22
22
  import { ActiveTestRuns } from './active-test-runs'
23
23
  import { createBestEffortLogWriter, type BestEffortLogWriter } from './best-effort-log-writer'
24
24
  import { makeContext } from './context-utils'
25
+ import { gradeJsonExpectedFields } from './json-field-match'
25
26
  import { queueReportCompression, REPORT_JSON_SUFFIX } from './report-files'
26
27
 
27
28
  // ----------------- Type aliases & helpers -----------------
@@ -35,12 +36,13 @@ interface CsvRow {
35
36
  assertion_value: string
36
37
  conversation: string
37
38
  expected_output: string
39
+ evaluation_mode?: string
40
+ context_mode?: string
38
41
  similarity_threshold: number | string
39
42
  pinned: 'TRUE' | 'FALSE'
40
43
  context: string | Record<string, unknown>
41
44
  mocks?: string | Record<string, unknown>
42
45
  timeout: string
43
- capture_mode?: string
44
46
  scenario?: string
45
47
  step?: string
46
48
  author?: string
@@ -95,8 +97,7 @@ export interface WrittenRunReport {
95
97
 
96
98
  type PromptTestsScope = 'all' | 'pinned'
97
99
 
98
- type PromptTestsSelection = { scope: PromptTestsScope } | { testId: string }
99
- type CaptureMode = 'immediate' | 'final'
100
+ type PromptTestsSelection = { scope: PromptTestsScope; step?: string } | { testId: string }
100
101
 
101
102
  export interface PromptTestsProgress {
102
103
  plannedTestIds: string[]
@@ -218,34 +219,50 @@ function toTestInputs(
218
219
  return rows
219
220
  .filter((r) => {
220
221
  if ('testId' in selection) return String(r.id ?? '') === String(selection.testId)
222
+ if (selection.step && String(r.step || 'main') !== selection.step) return false
221
223
  return selection.scope === 'all' ? true : r.pinned === 'TRUE'
222
224
  })
223
225
  .map((row) => {
226
+ const step = String(row.step || 'main')
224
227
  let conversation: Conversation = []
225
228
  let conversationParseError: string | undefined
226
- try {
227
- conversation = parseConversationFromText(row.conversation)
228
- } catch (err) {
229
- conversation = []
230
- conversationParseError = err instanceof Error ? err.message : String(err)
229
+ if (step === 'main') {
230
+ try {
231
+ conversation = parseConversationFromText(row.conversation)
232
+ } catch (err) {
233
+ conversation = []
234
+ conversationParseError = err instanceof Error ? err.message : String(err)
235
+ }
231
236
  }
232
237
 
238
+ const assertions: PFAssertion[] =
239
+ row.evaluation_mode === 'json-deep-equal'
240
+ ? [
241
+ {
242
+ type: 'javascript',
243
+ value: (output: string) => gradeJsonExpectedFields(output, row.expected_output)
244
+ }
245
+ ]
246
+ : [
247
+ {
248
+ type: row.assertion_type as PFAssertion['type'],
249
+ value: row.assertion_value
250
+ }
251
+ ]
252
+
233
253
  return {
234
254
  id: row.id,
235
255
  scenario: row.scenario,
256
+ step,
236
257
  conversation,
258
+ stringifiedConversation: String(row.conversation || ''),
237
259
  conversationParseError,
238
- assertions: [
239
- {
240
- type: row.assertion_type as PFAssertion['type'],
241
- value: row.assertion_value
242
- }
243
- ],
260
+ assertions,
244
261
  context: (() => {
245
262
  const testCtx = makeContext(row.context)
263
+ if (row.context_mode === 'replace') return testCtx
246
264
  return defaultContext ? mergeContexts(defaultContext, testCtx) : testCtx
247
265
  })(),
248
- captureMode: row.capture_mode === 'final' ? 'final' : 'immediate',
249
266
  mocks: typeof row.mocks === 'undefined' ? undefined : makeContext(row.mocks)
250
267
  }
251
268
  })
@@ -281,10 +298,11 @@ export class RecombineAgentProvider implements ApiProvider {
281
298
  testId: string
282
299
  region?: string
283
300
  conversation: Conversation
301
+ stringifiedConversation?: string
284
302
  conversationParseError?: string
285
303
  context: Context
286
304
  mocks?: Context
287
- captureMode?: CaptureMode | string
305
+ step?: string
288
306
  }
289
307
  const testId = String(vars.testId ?? '')
290
308
  if (testId) this.onTestStarted?.(testId)
@@ -293,10 +311,10 @@ export class RecombineAgentProvider implements ApiProvider {
293
311
  return { output: '', error: vars.conversationParseError }
294
312
  }
295
313
 
296
- const captureMode: CaptureMode = vars.captureMode === 'final' ? 'final' : 'immediate'
314
+ const targetStep = String(vars.step || 'main')
297
315
  let captured: string = ''
298
316
  let captureEnabled = false
299
- const finalCaptureErrors: string[] = []
317
+ let targetStepMatched = false
300
318
  const capturedLogs: string[] = []
301
319
  const capturedStepTraces: StepTrace[] = []
302
320
 
@@ -323,6 +341,16 @@ export class RecombineAgentProvider implements ApiProvider {
323
341
  addStepTrace: (stepTrace: StepTrace) => {
324
342
  try {
325
343
  capturedStepTraces.push(stepTrace)
344
+ if (
345
+ captureEnabled &&
346
+ targetStep !== 'main' &&
347
+ !targetStepMatched &&
348
+ stepTrace.name === targetStep
349
+ ) {
350
+ targetStepMatched = true
351
+ captured = toStringSafe(stepTrace.response ?? '')
352
+ logger.log(`Step ${targetStep} captured:`, captured)
353
+ }
326
354
  } catch {
327
355
  // best-effort capture; ignore serialization issues
328
356
  }
@@ -348,9 +376,6 @@ export class RecombineAgentProvider implements ApiProvider {
348
376
  line = line.slice(0, 5000) + '... [TRUNCATED]'
349
377
  }
350
378
  capturedLogs.push(line)
351
- if (captureMode === 'final' && captureEnabled && level === 'error') {
352
- finalCaptureErrors.push(line)
353
- }
354
379
  logWriter?.write(line + '\n')
355
380
  } catch {
356
381
  // best-effort capture
@@ -371,9 +396,9 @@ export class RecombineAgentProvider implements ApiProvider {
371
396
  getMessages: () => conv,
372
397
  sendMessage: async (message: Message | string) => {
373
398
  const m = typeof message === 'string' ? { sender: 'agent', text: message } : message
374
- if (captureEnabled && m.sender === 'agent') {
399
+ if (captureEnabled && targetStep === 'main' && m.sender === 'agent') {
375
400
  const text = typeof m.text === 'string' ? m.text : JSON.stringify(m)
376
- if (captureMode === 'final' || !captured) {
401
+ if (!captured) {
377
402
  captured = text
378
403
  logger.log('Agent message captured:', captured)
379
404
  } else {
@@ -383,13 +408,23 @@ export class RecombineAgentProvider implements ApiProvider {
383
408
  },
384
409
  onBeforeTestResponse: () => {
385
410
  captured = ''
411
+ targetStepMatched = false
386
412
  captureEnabled = true
387
413
  },
388
414
  stepTracer,
389
415
  logger,
390
416
  context: vars.context || {},
391
417
  mocks: vars.mocks,
392
- abortSignal: this.abortSignal
418
+ abortSignal: this.abortSignal,
419
+ ...(targetStep === 'main'
420
+ ? {}
421
+ : {
422
+ testStep: {
423
+ name: targetStep,
424
+ context: vars.context || {},
425
+ stringifiedConversation: vars.stringifiedConversation || ''
426
+ }
427
+ })
393
428
  })
394
429
 
395
430
  const logsDir = path.join(projectRoot, 'data', 'logs')
@@ -428,12 +463,11 @@ export class RecombineAgentProvider implements ApiProvider {
428
463
  ? capturedStepTraces.map(sanitizeTrace)
429
464
  : []
430
465
 
431
- if (captureMode === 'final' && finalCaptureErrors.length > 0) {
432
- const detail = finalCaptureErrors.at(-1) ?? 'Unknown final capture error'
466
+ if (targetStep !== 'main' && targetStepMatched) {
433
467
  return {
434
468
  output: captured,
435
- error: `Final capture failed because a subsequent step emitted an error: ${detail}`,
436
469
  metadata: {
470
+ targetStep,
437
471
  logs: capturedLogs,
438
472
  stepTraces: sanitizedStepTraces,
439
473
  rawStepTraces: capturedStepTraces
@@ -445,6 +479,7 @@ export class RecombineAgentProvider implements ApiProvider {
445
479
  return {
446
480
  output: captured,
447
481
  metadata: {
482
+ targetStep,
448
483
  logs: capturedLogs,
449
484
  stepTraces: sanitizedStepTraces,
450
485
  rawStepTraces: capturedStepTraces
@@ -454,8 +489,12 @@ export class RecombineAgentProvider implements ApiProvider {
454
489
 
455
490
  return {
456
491
  output: '',
457
- error: 'No agent reply captured',
492
+ error:
493
+ targetStep === 'main'
494
+ ? 'No agent reply captured'
495
+ : `Step "${targetStep}" did not execute after the test boundary`,
458
496
  metadata: {
497
+ targetStep,
459
498
  logs: capturedLogs,
460
499
  stepTraces: sanitizedStepTraces,
461
500
  rawStepTraces: capturedStepTraces
@@ -469,7 +508,7 @@ export class RecombineAgentProvider implements ApiProvider {
469
508
  return {
470
509
  output: '',
471
510
  error: msg,
472
- metadata: { logs: capturedLogs, stepTraces: capturedStepTraces }
511
+ metadata: { targetStep, logs: capturedLogs, stepTraces: capturedStepTraces }
473
512
  }
474
513
  } finally {
475
514
  // Ensure the stream flushes all data
@@ -498,29 +537,26 @@ function toResultEntry(r: any): ResultEntry {
498
537
  : Array.isArray(r.metadata?.stepTraces)
499
538
  ? r.metadata?.stepTraces
500
539
  : []
501
- // Pick the last trace whose name === 'main'
502
- const lastMain = (() => {
503
- for (let i = rawTraces.length - 1; i >= 0; i--) {
504
- const t = rawTraces[i]
505
- if (t && t.name === 'main') return t
506
- }
507
- return undefined
508
- })()
540
+ const targetStep = String(r.metadata?.targetStep || 'main')
541
+ const sourceTrace =
542
+ targetStep === 'main'
543
+ ? [...rawTraces].reverse().find((trace: any) => trace?.name === 'main')
544
+ : rawTraces.find((trace: any) => trace?.name === targetStep)
509
545
  const rendered_prompt =
510
- lastMain && typeof lastMain.renderedPrompt !== 'undefined'
511
- ? toStringSafe(lastMain.renderedPrompt)
546
+ sourceTrace && typeof sourceTrace.renderedPrompt !== 'undefined'
547
+ ? toStringSafe(sourceTrace.renderedPrompt)
512
548
  : 'NO RENDERED PROMPT'
513
549
  const received_prompt =
514
- lastMain && typeof lastMain.receivedPrompt !== 'undefined'
515
- ? toStringSafe(lastMain.receivedPrompt)
550
+ sourceTrace && typeof sourceTrace.receivedPrompt !== 'undefined'
551
+ ? toStringSafe(sourceTrace.receivedPrompt)
516
552
  : 'NO RECEIVED PROMPT'
517
553
  const stringified_conversation =
518
- lastMain && typeof lastMain.stringifiedConversation !== 'undefined'
519
- ? toStringSafe(lastMain.stringifiedConversation)
554
+ sourceTrace && typeof sourceTrace.stringifiedConversation !== 'undefined'
555
+ ? toStringSafe(sourceTrace.stringifiedConversation)
520
556
  : 'NO STRINGIFIED CONVERSATION'
521
557
  const received_context =
522
- lastMain && typeof lastMain.receivedContext !== 'undefined'
523
- ? toStringSafe(lastMain.receivedContext)
558
+ sourceTrace && typeof sourceTrace.receivedContext !== 'undefined'
559
+ ? toStringSafe(sourceTrace.receivedContext)
524
560
  : 'NO RECEIVED CONTEXT'
525
561
 
526
562
  const logs = Array.isArray(r.metadata?.logs) ? (r.metadata?.logs as string[]) : []
@@ -648,9 +684,10 @@ export async function runPromptTests(
648
684
  testId: String(test.id ?? ''),
649
685
  ...(suite.region ? { region: suite.region } : {}),
650
686
  context: test.context,
687
+ step: test.step,
651
688
  ...(typeof test.mocks !== 'undefined' ? { mocks: test.mocks } : {}),
652
- captureMode: test.captureMode,
653
689
  conversation: test.conversation,
690
+ stringifiedConversation: test.stringifiedConversation,
654
691
  ...(test.conversationParseError
655
692
  ? { conversationParseError: test.conversationParseError }
656
693
  : {})
@@ -108,6 +108,9 @@ const defaultTestRow: Omit<TestRow, 'id'> = {
108
108
  scenario: 'New scenario',
109
109
  author: '',
110
110
  category: '',
111
+ step: 'main',
112
+ evaluation_mode: 'assertion',
113
+ context_mode: 'merge',
111
114
  assertion_type: 'llm-rubric',
112
115
  assertion_value: '',
113
116
  conversation: 'user: ...',
@@ -149,7 +152,8 @@ export async function loadTests(agent: string): Promise<TestTable> {
149
152
  'assertion_value',
150
153
  'conversation',
151
154
  'expected_output',
152
- 'capture_mode',
155
+ 'evaluation_mode',
156
+ 'context_mode',
153
157
  'timeout',
154
158
  'similarity_threshold',
155
159
  'context',
@@ -278,7 +282,7 @@ async function loadSuiteOrEmpty(agent: string): Promise<TestSuite> {
278
282
  if (await exists(jsonlPath)) return readSuite(agent)
279
283
  if (await exists(legacyPath)) return readSuite(agent)
280
284
 
281
- return { version: 1, meta: {}, tests: [] }
285
+ return { version: 2, meta: {}, tests: [] }
282
286
  }
283
287
 
284
288
  export async function deleteTest(agent: string, id: string): Promise<boolean> {
@@ -1,5 +1,10 @@
1
1
  import { createContext, type Message, type Logger, type Scheduler } from '@recombine-ai/engine'
2
- import { type TestAgent, type TestVoiceAgent } from '@recombine-ai/bosun-lib'
2
+ import {
3
+ type RegisteredTestStep,
4
+ type TestAgent,
5
+ type TestStepRegistry,
6
+ type TestVoiceAgent
7
+ } from '@recombine-ai/bosun-lib'
3
8
  import { type StepTracer } from '@recombine-ai/telescope'
4
9
  import { getAgentFactories } from '../lib/get-agent-factories'
5
10
  import { getImportNonce } from '../lib/import-nonce'
@@ -18,6 +23,11 @@ export async function loadAgents(props: {
18
23
  mocks?: Record<string, unknown>
19
24
  abortSignal?: AbortSignal
20
25
  onBeforeTestResponse?: () => void
26
+ testStep?: {
27
+ name: string
28
+ context: Record<string, unknown>
29
+ stringifiedConversation: string
30
+ }
21
31
  }): Promise<void> {
22
32
  const {
23
33
  agentId,
@@ -29,7 +39,8 @@ export async function loadAgents(props: {
29
39
  context,
30
40
  mocks,
31
41
  abortSignal,
32
- onBeforeTestResponse
42
+ onBeforeTestResponse,
43
+ testStep
33
44
  } = props
34
45
  const importNonce = getImportNonce()
35
46
  const { factories } = await getAgentFactories(await getRootPath(), importNonce)
@@ -48,8 +59,14 @@ export async function loadAgents(props: {
48
59
  registerAction: () => async () => {}
49
60
  }
50
61
 
51
- const stepRegistry = {
52
- addStep: () => {}
62
+ const testSteps = new Map<string, RegisteredTestStep>()
63
+ const stepRegistry: TestStepRegistry = {
64
+ addStep: () => {},
65
+ addTestStep(step: RegisteredTestStep) {
66
+ // Step names are the current test identity. Preserve the first registration until
67
+ // workflow IDs become part of the persisted target.
68
+ if (!testSteps.has(step.name)) testSteps.set(step.name, step)
69
+ }
53
70
  }
54
71
 
55
72
  const hasSplitContext =
@@ -99,6 +116,24 @@ export async function loadAgents(props: {
99
116
 
100
117
  try {
101
118
  await withTestPromptCacheBust(async () => {
119
+ if (testStep) {
120
+ const registered = testSteps.get(testStep.name)
121
+ if (!registered) {
122
+ throw new Error(
123
+ `Step "${testStep.name}" is not registered for isolated testing. ` +
124
+ "Update the project's Bosun adapter to register its real AI steps."
125
+ )
126
+ }
127
+ onBeforeTestResponse?.()
128
+ await withAbort(
129
+ registered.runForTest({
130
+ context: testStep.context,
131
+ stringifiedConversation: testStep.stringifiedConversation
132
+ })
133
+ )
134
+ return
135
+ }
136
+
102
137
  if (isVoiceAgent(agent)) {
103
138
  // preparation
104
139
  history = []
@@ -121,6 +156,7 @@ export async function loadAgents(props: {
121
156
  } catch (err) {
122
157
  const error = err instanceof Error ? err : new Error(String(err))
123
158
  if (abortSignal?.aborted) throw error
159
+ if (testStep) throw error
124
160
  try {
125
161
  logger.error('Error in agent.respondToMessage():', error.message)
126
162
  if (error.stack) logger.error(error.stack)