@recombine-ai/bosun 0.12.1 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/build/client/_app/immutable/assets/0.B-Br6U4N.css +1 -0
  2. package/build/client/_app/immutable/assets/0.B-Br6U4N.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.B-Br6U4N.css.gz +0 -0
  4. package/build/client/_app/immutable/chunks/{D0wo6ydM.js → BOuo-4gP.js} +1 -1
  5. package/build/client/_app/immutable/chunks/BOuo-4gP.js.br +0 -0
  6. package/build/client/_app/immutable/chunks/BOuo-4gP.js.gz +0 -0
  7. package/build/client/_app/immutable/chunks/Cyj62X2W.js +2 -0
  8. package/build/client/_app/immutable/chunks/Cyj62X2W.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/Cyj62X2W.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/{DThbydRF.js → DSDSeO7L.js} +1 -1
  11. package/build/client/_app/immutable/chunks/DSDSeO7L.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/DSDSeO7L.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/{BsXicvii.js → De8YgKS3.js} +1 -1
  14. package/build/client/_app/immutable/chunks/De8YgKS3.js.br +1 -0
  15. package/build/client/_app/immutable/chunks/De8YgKS3.js.gz +0 -0
  16. package/build/client/_app/immutable/entry/{app.CXVcy7KZ.js → app.DK_wVDeR.js} +2 -2
  17. package/build/client/_app/immutable/entry/app.DK_wVDeR.js.br +0 -0
  18. package/build/client/_app/immutable/entry/app.DK_wVDeR.js.gz +0 -0
  19. package/build/client/_app/immutable/entry/start.xQy-2aGo.js +1 -0
  20. package/build/client/_app/immutable/entry/start.xQy-2aGo.js.br +2 -0
  21. package/build/client/_app/immutable/entry/start.xQy-2aGo.js.gz +0 -0
  22. package/build/client/_app/immutable/nodes/{0.Bw5H_3Yi.js → 0.5fEbn14Q.js} +1 -1
  23. package/build/client/_app/immutable/nodes/0.5fEbn14Q.js.br +0 -0
  24. package/build/client/_app/immutable/nodes/0.5fEbn14Q.js.gz +0 -0
  25. package/build/client/_app/immutable/nodes/{1.I6bcxSHO.js → 1.CJrSN8zL.js} +1 -1
  26. package/build/client/_app/immutable/nodes/1.CJrSN8zL.js.br +0 -0
  27. package/build/client/_app/immutable/nodes/1.CJrSN8zL.js.gz +0 -0
  28. package/build/client/_app/immutable/nodes/10.SZwTlOEA.js +12 -0
  29. package/build/client/_app/immutable/nodes/10.SZwTlOEA.js.br +0 -0
  30. package/build/client/_app/immutable/nodes/10.SZwTlOEA.js.gz +0 -0
  31. package/build/client/_app/immutable/nodes/{17.CKhOYbTb.js → 17.D-KFl7Vk.js} +1 -1
  32. package/build/client/_app/immutable/nodes/17.D-KFl7Vk.js.br +0 -0
  33. package/build/client/_app/immutable/nodes/17.D-KFl7Vk.js.gz +0 -0
  34. package/build/client/_app/immutable/nodes/18.DqRdJY9A.js +11 -0
  35. package/build/client/_app/immutable/nodes/18.DqRdJY9A.js.br +0 -0
  36. package/build/client/_app/immutable/nodes/18.DqRdJY9A.js.gz +0 -0
  37. package/build/client/_app/immutable/nodes/{2.DvX0h28l.js → 2.B3Uuk25v.js} +1 -1
  38. package/build/client/_app/immutable/nodes/2.B3Uuk25v.js.br +0 -0
  39. package/build/client/_app/immutable/nodes/2.B3Uuk25v.js.gz +0 -0
  40. package/build/client/_app/immutable/nodes/{3.CGA5hdam.js → 3.B1RGTOJ8.js} +1 -1
  41. package/build/client/_app/immutable/nodes/3.B1RGTOJ8.js.br +0 -0
  42. package/build/client/_app/immutable/nodes/3.B1RGTOJ8.js.gz +0 -0
  43. package/build/client/_app/immutable/nodes/{4.DRd9UCon.js → 4.D2jcIUpD.js} +1 -1
  44. package/build/client/_app/immutable/nodes/4.D2jcIUpD.js.br +0 -0
  45. package/build/client/_app/immutable/nodes/4.D2jcIUpD.js.gz +0 -0
  46. package/build/client/_app/immutable/nodes/{5.QJyyKWtD.js → 5.CUyCIyRd.js} +1 -1
  47. package/build/client/_app/immutable/nodes/5.CUyCIyRd.js.br +0 -0
  48. package/build/client/_app/immutable/nodes/5.CUyCIyRd.js.gz +0 -0
  49. package/build/client/_app/immutable/nodes/{6.DBbtH8p6.js → 6.B8HsGA2V.js} +1 -1
  50. package/build/client/_app/immutable/nodes/6.B8HsGA2V.js.br +0 -0
  51. package/build/client/_app/immutable/nodes/6.B8HsGA2V.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/{8._Ge9D6mw.js → 8.jY56-_OU.js} +1 -1
  53. package/build/client/_app/immutable/nodes/8.jY56-_OU.js.br +0 -0
  54. package/build/client/_app/immutable/nodes/8.jY56-_OU.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/9.v5dX6L9n.js +2 -0
  56. package/build/client/_app/immutable/nodes/9.v5dX6L9n.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/9.v5dX6L9n.js.gz +0 -0
  58. package/build/client/_app/version.json +1 -1
  59. package/build/client/_app/version.json.br +0 -0
  60. package/build/client/_app/version.json.gz +0 -0
  61. package/build/server/chunks/{0-B8IphDS9.js → 0-4QCErf9j.js} +4 -4
  62. package/build/server/chunks/{0-B8IphDS9.js.map → 0-4QCErf9j.js.map} +1 -1
  63. package/build/server/chunks/{1-BoV_CoNT.js → 1-Dsjy8Hzc.js} +3 -3
  64. package/build/server/chunks/{1-BoV_CoNT.js.map → 1-Dsjy8Hzc.js.map} +1 -1
  65. package/build/server/chunks/{10-WFJ6JJF8.js → 10-8061c8ui.js} +3 -3
  66. package/build/server/chunks/{10-WFJ6JJF8.js.map → 10-8061c8ui.js.map} +1 -1
  67. package/build/server/chunks/{15-BMEAVslz.js → 15-BRw8wtLp.js} +2 -2
  68. package/build/server/chunks/{15-BMEAVslz.js.map → 15-BRw8wtLp.js.map} +1 -1
  69. package/build/server/chunks/{17-aUXWTAiC.js → 17-3_5wsIEX.js} +3 -3
  70. package/build/server/chunks/{17-aUXWTAiC.js.map → 17-3_5wsIEX.js.map} +1 -1
  71. package/build/server/chunks/{18-BNN3EZNX.js → 18-D73Mw140.js} +3 -3
  72. package/build/server/chunks/{18-BNN3EZNX.js.map → 18-D73Mw140.js.map} +1 -1
  73. package/build/server/chunks/{2-DBakpxTW.js → 2-DM0VjzFi.js} +3 -3
  74. package/build/server/chunks/{2-DBakpxTW.js.map → 2-DM0VjzFi.js.map} +1 -1
  75. package/build/server/chunks/{3-BUt-0hHy.js → 3-B3zlFGkL.js} +3 -3
  76. package/build/server/chunks/{3-BUt-0hHy.js.map → 3-B3zlFGkL.js.map} +1 -1
  77. package/build/server/chunks/{4-MPLwROF1.js → 4-tESdMZpI.js} +3 -3
  78. package/build/server/chunks/{4-MPLwROF1.js.map → 4-tESdMZpI.js.map} +1 -1
  79. package/build/server/chunks/{5-CIV1pPT6.js → 5-BJMTlq4U.js} +3 -3
  80. package/build/server/chunks/{5-CIV1pPT6.js.map → 5-BJMTlq4U.js.map} +1 -1
  81. package/build/server/chunks/{6-DGec6RWd.js → 6-CDK2Aia6.js} +3 -3
  82. package/build/server/chunks/{6-DGec6RWd.js.map → 6-CDK2Aia6.js.map} +1 -1
  83. package/build/server/chunks/{8-F6UXMyct.js → 8-BJbDytoU.js} +3 -3
  84. package/build/server/chunks/{8-F6UXMyct.js.map → 8-BJbDytoU.js.map} +1 -1
  85. package/build/server/chunks/{9-DtsG_8TJ.js → 9-BNfIeSqk.js} +3 -3
  86. package/build/server/chunks/{9-DtsG_8TJ.js.map → 9-BNfIeSqk.js.map} +1 -1
  87. package/build/server/chunks/{AgentSidebar-DvIlda-E.js → AgentSidebar-C--dGIV5.js} +4 -4
  88. package/build/server/chunks/{AgentSidebar-DvIlda-E.js.map → AgentSidebar-C--dGIV5.js.map} +1 -1
  89. package/build/server/chunks/{Button-BLigKkGG.js → Button-oIUr2LUP.js} +2 -2
  90. package/build/server/chunks/{Button-BLigKkGG.js.map → Button-oIUr2LUP.js.map} +1 -1
  91. package/build/server/chunks/{ChatStepTrace-CqqIjRLU.js → ChatStepTrace-DQL3qlna.js} +84 -13
  92. package/build/server/chunks/ChatStepTrace-DQL3qlna.js.map +1 -0
  93. package/build/server/chunks/{ContextEditor-D5B2mO8Z.js → ContextEditor-ngRBOJVc.js} +4 -4
  94. package/build/server/chunks/{ContextEditor-D5B2mO8Z.js.map → ContextEditor-ngRBOJVc.js.map} +1 -1
  95. package/build/server/chunks/{Dropdown-7dp1qEYv.js → Dropdown-DfCyYHqi.js} +2 -2
  96. package/build/server/chunks/{Dropdown-7dp1qEYv.js.map → Dropdown-DfCyYHqi.js.map} +1 -1
  97. package/build/server/chunks/{Icon-CXFHkSIr.js → Icon-DadJPtVP.js} +2 -2
  98. package/build/server/chunks/{Icon-CXFHkSIr.js.map → Icon-DadJPtVP.js.map} +1 -1
  99. package/build/server/chunks/{Input-OdQKNdS6.js → Input-R74u4cO5.js} +2 -2
  100. package/build/server/chunks/{Input-OdQKNdS6.js.map → Input-R74u4cO5.js.map} +1 -1
  101. package/build/server/chunks/{Modal-DtVsRmmO.js → Modal-CAzVFw5x.js} +4 -4
  102. package/build/server/chunks/Modal-CAzVFw5x.js.map +1 -0
  103. package/build/server/chunks/{Tab-CD1H0E3P.js → Tab-D13L_Up5.js} +4 -4
  104. package/build/server/chunks/{Tab-CD1H0E3P.js.map → Tab-D13L_Up5.js.map} +1 -1
  105. package/build/server/chunks/{_layout.svelte-B-CkD4a0.js → _layout.svelte-BIMexfnk.js} +128 -15
  106. package/build/server/chunks/_layout.svelte-BIMexfnk.js.map +1 -0
  107. package/build/server/chunks/{_layout.svelte-C5eqrEen.js → _layout.svelte-D4EOIHJJ.js} +8 -8
  108. package/build/server/chunks/_layout.svelte-D4EOIHJJ.js.map +1 -0
  109. package/build/server/chunks/{_layout.svelte-BBFCF-xw.js → _layout.svelte-DK7yl8vI.js} +17 -17
  110. package/build/server/chunks/_layout.svelte-DK7yl8vI.js.map +1 -0
  111. package/build/server/chunks/{_layout.svelte-cPhmW5bZ.js → _layout.svelte-Dk-9LkfL.js} +10 -10
  112. package/build/server/chunks/_layout.svelte-Dk-9LkfL.js.map +1 -0
  113. package/build/server/chunks/{_page.svelte-_sXVlB3C.js → _page.svelte-BTKQMuSz.js} +88 -37
  114. package/build/server/chunks/_page.svelte-BTKQMuSz.js.map +1 -0
  115. package/build/server/chunks/{_page.svelte-DbV3HGn5.js → _page.svelte-CeO_ScC8.js} +2 -2
  116. package/build/server/chunks/{_page.svelte-DbV3HGn5.js.map → _page.svelte-CeO_ScC8.js.map} +1 -1
  117. package/build/server/chunks/{_page.svelte-BYVcy49A.js → _page.svelte-Cu8a_kUO.js} +4 -4
  118. package/build/server/chunks/{_page.svelte-BYVcy49A.js.map → _page.svelte-Cu8a_kUO.js.map} +1 -1
  119. package/build/server/chunks/{_page.svelte-BgoX8Y6N.js → _page.svelte-D5S0QjlI.js} +12 -12
  120. package/build/server/chunks/_page.svelte-D5S0QjlI.js.map +1 -0
  121. package/build/server/chunks/{_page.svelte-0J2xaeyC.js → _page.svelte-D6bSXGHX.js} +21 -172
  122. package/build/server/chunks/_page.svelte-D6bSXGHX.js.map +1 -0
  123. package/build/server/chunks/{_page.svelte-CqGOvPRO.js → _page.svelte-YoDx7gDL.js} +6 -6
  124. package/build/server/chunks/{_page.svelte-CqGOvPRO.js.map → _page.svelte-YoDx7gDL.js.map} +1 -1
  125. package/build/server/chunks/{_page.svelte-Cxh9_vUl.js → _page.svelte-ZWNBigwS.js} +15 -12
  126. package/build/server/chunks/_page.svelte-ZWNBigwS.js.map +1 -0
  127. package/build/server/chunks/{_page.svelte-C_S_qUgZ.js → _page.svelte-ej3vdYeF.js} +10 -10
  128. package/build/server/chunks/{_page.svelte-C_S_qUgZ.js.map → _page.svelte-ej3vdYeF.js.map} +1 -1
  129. package/build/server/chunks/{agents-context-rV2narXG.js → agents-context-w03Lz_6n.js} +2 -2
  130. package/build/server/chunks/{agents-context-rV2narXG.js.map → agents-context-w03Lz_6n.js.map} +1 -1
  131. package/build/server/chunks/client-WFEvX_be.js +33 -0
  132. package/build/server/chunks/client-WFEvX_be.js.map +1 -0
  133. package/build/server/chunks/{conversation-view-memory-BZguFlTt.js → conversation-view-memory-B0PllWRL.js} +2 -2
  134. package/build/server/chunks/{conversation-view-memory-BZguFlTt.js.map → conversation-view-memory-B0PllWRL.js.map} +1 -1
  135. package/build/server/chunks/{edit-workspace-context-B1nYQ5hD.js → edit-workspace-context-BEioXKWB.js} +2 -2
  136. package/build/server/chunks/{edit-workspace-context-B1nYQ5hD.js.map → edit-workspace-context-BEioXKWB.js.map} +1 -1
  137. package/build/server/chunks/error.svelte-BjIDhioc.js +15 -0
  138. package/build/server/chunks/{error.svelte-DA-yulF5.js.map → error.svelte-BjIDhioc.js.map} +1 -1
  139. package/build/server/chunks/{index-CSpGrMM2.js → index-rHCWxLFZ.js} +5 -5
  140. package/build/server/chunks/{index-CSpGrMM2.js.map → index-rHCWxLFZ.js.map} +1 -1
  141. package/build/server/chunks/{index-server-DsYEXu5n.js → index-server-BMxlf3ZC.js} +2 -2
  142. package/build/server/chunks/{index-server-DsYEXu5n.js.map → index-server-BMxlf3ZC.js.map} +1 -1
  143. package/build/server/chunks/index2-DdOgqE2_.js +24 -0
  144. package/build/server/chunks/index2-DdOgqE2_.js.map +1 -0
  145. package/build/server/chunks/{index3-qVi61CNf.js → index3-DC4GTqD1.js} +2 -2
  146. package/build/server/chunks/{index3-qVi61CNf.js.map → index3-DC4GTqD1.js.map} +1 -1
  147. package/build/server/chunks/{root-CDJwhpIB.js → root-UeqiktJA.js} +118 -4
  148. package/build/server/chunks/root-UeqiktJA.js.map +1 -0
  149. package/build/server/chunks/{state.svelte-DT7cgvTK.js → state.svelte-CLOYXiU6.js} +3 -3
  150. package/build/server/chunks/{state.svelte-DT7cgvTK.js.map → state.svelte-CLOYXiU6.js.map} +1 -1
  151. package/build/server/index.js +10 -11
  152. package/build/server/index.js.map +1 -1
  153. package/build/server/manifest.js +14 -14
  154. package/build/server/manifest.js.map +1 -1
  155. package/package.json +2 -2
  156. package/src/backend/tests/academy-json.spec.ts +65 -0
  157. package/src/backend/tests/academy.ts +83 -46
  158. package/src/backend/tests/data.ts +6 -2
  159. package/src/backend/tests/emulate-agents.ts +40 -4
  160. package/src/backend/tests/json-field-match.ts +73 -0
  161. package/src/backend/tests/router.ts +5 -1
  162. package/src/backend/tests/suite.spec.ts +54 -0
  163. package/src/backend/tests/suite.ts +20 -11
  164. package/build/client/_app/immutable/assets/0.CH-WU4JN.css +0 -1
  165. package/build/client/_app/immutable/assets/0.CH-WU4JN.css.br +0 -0
  166. package/build/client/_app/immutable/assets/0.CH-WU4JN.css.gz +0 -0
  167. package/build/client/_app/immutable/chunks/Bq2S1bnB.js +0 -3
  168. package/build/client/_app/immutable/chunks/Bq2S1bnB.js.br +0 -0
  169. package/build/client/_app/immutable/chunks/Bq2S1bnB.js.gz +0 -0
  170. package/build/client/_app/immutable/chunks/BsXicvii.js.br +0 -0
  171. package/build/client/_app/immutable/chunks/BsXicvii.js.gz +0 -0
  172. package/build/client/_app/immutable/chunks/D0wo6ydM.js.br +0 -0
  173. package/build/client/_app/immutable/chunks/D0wo6ydM.js.gz +0 -0
  174. package/build/client/_app/immutable/chunks/DThbydRF.js.br +0 -0
  175. package/build/client/_app/immutable/chunks/DThbydRF.js.gz +0 -0
  176. package/build/client/_app/immutable/entry/app.CXVcy7KZ.js.br +0 -0
  177. package/build/client/_app/immutable/entry/app.CXVcy7KZ.js.gz +0 -0
  178. package/build/client/_app/immutable/entry/start.D7WtvWtc.js +0 -1
  179. package/build/client/_app/immutable/entry/start.D7WtvWtc.js.br +0 -2
  180. package/build/client/_app/immutable/entry/start.D7WtvWtc.js.gz +0 -0
  181. package/build/client/_app/immutable/nodes/0.Bw5H_3Yi.js.br +0 -0
  182. package/build/client/_app/immutable/nodes/0.Bw5H_3Yi.js.gz +0 -0
  183. package/build/client/_app/immutable/nodes/1.I6bcxSHO.js.br +0 -0
  184. package/build/client/_app/immutable/nodes/1.I6bcxSHO.js.gz +0 -0
  185. package/build/client/_app/immutable/nodes/10.DTobYgy4.js +0 -7
  186. package/build/client/_app/immutable/nodes/10.DTobYgy4.js.br +0 -0
  187. package/build/client/_app/immutable/nodes/10.DTobYgy4.js.gz +0 -0
  188. package/build/client/_app/immutable/nodes/17.CKhOYbTb.js.br +0 -0
  189. package/build/client/_app/immutable/nodes/17.CKhOYbTb.js.gz +0 -0
  190. package/build/client/_app/immutable/nodes/18.DWPgk8Ie.js +0 -11
  191. package/build/client/_app/immutable/nodes/18.DWPgk8Ie.js.br +0 -0
  192. package/build/client/_app/immutable/nodes/18.DWPgk8Ie.js.gz +0 -0
  193. package/build/client/_app/immutable/nodes/2.DvX0h28l.js.br +0 -0
  194. package/build/client/_app/immutable/nodes/2.DvX0h28l.js.gz +0 -0
  195. package/build/client/_app/immutable/nodes/3.CGA5hdam.js.br +0 -0
  196. package/build/client/_app/immutable/nodes/3.CGA5hdam.js.gz +0 -0
  197. package/build/client/_app/immutable/nodes/4.DRd9UCon.js.br +0 -0
  198. package/build/client/_app/immutable/nodes/4.DRd9UCon.js.gz +0 -0
  199. package/build/client/_app/immutable/nodes/5.QJyyKWtD.js.br +0 -0
  200. package/build/client/_app/immutable/nodes/5.QJyyKWtD.js.gz +0 -0
  201. package/build/client/_app/immutable/nodes/6.DBbtH8p6.js.br +0 -0
  202. package/build/client/_app/immutable/nodes/6.DBbtH8p6.js.gz +0 -0
  203. package/build/client/_app/immutable/nodes/8._Ge9D6mw.js.br +0 -0
  204. package/build/client/_app/immutable/nodes/8._Ge9D6mw.js.gz +0 -0
  205. package/build/client/_app/immutable/nodes/9.LIqPsMWp.js +0 -2
  206. package/build/client/_app/immutable/nodes/9.LIqPsMWp.js.br +0 -0
  207. package/build/client/_app/immutable/nodes/9.LIqPsMWp.js.gz +0 -0
  208. package/build/server/chunks/ChatStepTrace-CqqIjRLU.js.map +0 -1
  209. package/build/server/chunks/MockGenerator-GEpXTgX0.js +0 -117
  210. package/build/server/chunks/MockGenerator-GEpXTgX0.js.map +0 -1
  211. package/build/server/chunks/Modal-DtVsRmmO.js.map +0 -1
  212. package/build/server/chunks/_layout.svelte-B-CkD4a0.js.map +0 -1
  213. package/build/server/chunks/_layout.svelte-BBFCF-xw.js.map +0 -1
  214. package/build/server/chunks/_layout.svelte-C5eqrEen.js.map +0 -1
  215. package/build/server/chunks/_layout.svelte-cPhmW5bZ.js.map +0 -1
  216. package/build/server/chunks/_page.svelte-0J2xaeyC.js.map +0 -1
  217. package/build/server/chunks/_page.svelte-BgoX8Y6N.js.map +0 -1
  218. package/build/server/chunks/_page.svelte-Cxh9_vUl.js.map +0 -1
  219. package/build/server/chunks/_page.svelte-_sXVlB3C.js.map +0 -1
  220. package/build/server/chunks/error.svelte-DA-yulF5.js +0 -15
  221. package/build/server/chunks/events-BQ65tUJo.js +0 -120
  222. package/build/server/chunks/events-BQ65tUJo.js.map +0 -1
  223. package/build/server/chunks/index2-DO4B3D-P.js +0 -52
  224. package/build/server/chunks/index2-DO4B3D-P.js.map +0 -1
  225. package/build/server/chunks/root-CDJwhpIB.js.map +0 -1
@@ -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.D7WtvWtc.js",app:"_app/immutable/entry/app.CXVcy7KZ.js",imports:["_app/immutable/entry/start.D7WtvWtc.js","_app/immutable/chunks/DThbydRF.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.CXVcy7KZ.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.xQy-2aGo.js",app:"_app/immutable/entry/app.DK_wVDeR.js",imports:["_app/immutable/entry/start.xQy-2aGo.js","_app/immutable/chunks/DSDSeO7L.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.DK_wVDeR.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-B8IphDS9.js')),
16
- __memo(() => import('./chunks/1-BoV_CoNT.js')),
17
- __memo(() => import('./chunks/2-DBakpxTW.js')),
18
- __memo(() => import('./chunks/3-BUt-0hHy.js')),
19
- __memo(() => import('./chunks/4-MPLwROF1.js')),
20
- __memo(() => import('./chunks/5-CIV1pPT6.js')),
21
- __memo(() => import('./chunks/6-DGec6RWd.js')),
15
+ __memo(() => import('./chunks/0-4QCErf9j.js')),
16
+ __memo(() => import('./chunks/1-Dsjy8Hzc.js')),
17
+ __memo(() => import('./chunks/2-DM0VjzFi.js')),
18
+ __memo(() => import('./chunks/3-B3zlFGkL.js')),
19
+ __memo(() => import('./chunks/4-tESdMZpI.js')),
20
+ __memo(() => import('./chunks/5-BJMTlq4U.js')),
21
+ __memo(() => import('./chunks/6-CDK2Aia6.js')),
22
22
  __memo(() => import('./chunks/7-olXOjo4r.js')),
23
- __memo(() => import('./chunks/8-F6UXMyct.js')),
24
- __memo(() => import('./chunks/9-DtsG_8TJ.js')),
25
- __memo(() => import('./chunks/10-WFJ6JJF8.js')),
23
+ __memo(() => import('./chunks/8-BJbDytoU.js')),
24
+ __memo(() => import('./chunks/9-BNfIeSqk.js')),
25
+ __memo(() => import('./chunks/10-8061c8ui.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-aUXWTAiC.js')),
33
- __memo(() => import('./chunks/18-BNN3EZNX.js'))
32
+ __memo(() => import('./chunks/17-3_5wsIEX.js')),
33
+ __memo(() => import('./chunks/18-D73Mw140.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.D7WtvWtc.js\",app:\"_app/immutable/entry/app.CXVcy7KZ.js\",imports:[\"_app/immutable/entry/start.D7WtvWtc.js\",\"_app/immutable/chunks/DThbydRF.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.CXVcy7KZ.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.xQy-2aGo.js\",app:\"_app/immutable/entry/app.DK_wVDeR.js\",imports:[\"_app/immutable/entry/start.xQy-2aGo.js\",\"_app/immutable/chunks/DSDSeO7L.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.DK_wVDeR.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.1",
4
+ "version": "0.13.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 ctx = createContext({})
@@ -107,6 +124,24 @@ export async function loadAgents(props: {
107
124
 
108
125
  try {
109
126
  await withTestPromptCacheBust(async () => {
127
+ if (testStep) {
128
+ const registered = testSteps.get(testStep.name)
129
+ if (!registered) {
130
+ throw new Error(
131
+ `Step "${testStep.name}" is not registered for isolated testing. ` +
132
+ "Update the project's Bosun adapter to register its real AI steps."
133
+ )
134
+ }
135
+ onBeforeTestResponse?.()
136
+ await withAbort(
137
+ registered.runForTest({
138
+ context: testStep.context,
139
+ stringifiedConversation: testStep.stringifiedConversation
140
+ })
141
+ )
142
+ return
143
+ }
144
+
110
145
  if (isVoiceAgent(agent)) {
111
146
  // preparation
112
147
  history = []
@@ -129,6 +164,7 @@ export async function loadAgents(props: {
129
164
  } catch (err) {
130
165
  const error = err instanceof Error ? err : new Error(String(err))
131
166
  if (abortSignal?.aborted) throw error
167
+ if (testStep) throw error
132
168
  try {
133
169
  logger.error('Error in agent.respondToMessage():', error.message)
134
170
  if (error.stack) logger.error(error.stack)