@recombine-ai/bosun 0.1.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 (376) hide show
  1. package/.svelte-kit/tsconfig.json +52 -0
  2. package/README.md +38 -0
  3. package/bin/bosun.js +90 -0
  4. package/build/client/_app/immutable/assets/0.CGZoSC08.css +1 -0
  5. package/build/client/_app/immutable/assets/0.CGZoSC08.css.br +0 -0
  6. package/build/client/_app/immutable/assets/0.CGZoSC08.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/3.ZYCb8BZl.css +1 -0
  8. package/build/client/_app/immutable/assets/3.ZYCb8BZl.css.br +3 -0
  9. package/build/client/_app/immutable/assets/3.ZYCb8BZl.css.gz +0 -0
  10. package/build/client/_app/immutable/assets/4.f3T7i0UW.css +1 -0
  11. package/build/client/_app/immutable/assets/4.f3T7i0UW.css.br +0 -0
  12. package/build/client/_app/immutable/assets/4.f3T7i0UW.css.gz +0 -0
  13. package/build/client/_app/immutable/assets/Link.COHc7T1l.css +1 -0
  14. package/build/client/_app/immutable/assets/Link.COHc7T1l.css.br +0 -0
  15. package/build/client/_app/immutable/assets/Link.COHc7T1l.css.gz +0 -0
  16. package/build/client/_app/immutable/assets/codicon.DCmgc-ay.ttf +0 -0
  17. package/build/client/_app/immutable/assets/editor.BMIWPGx3.css +1 -0
  18. package/build/client/_app/immutable/assets/editor.BMIWPGx3.css.br +0 -0
  19. package/build/client/_app/immutable/assets/editor.BMIWPGx3.css.gz +0 -0
  20. package/build/client/_app/immutable/chunks/0cvrggvQ.js +6 -0
  21. package/build/client/_app/immutable/chunks/0cvrggvQ.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/0cvrggvQ.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/25W9uPmb.js +6 -0
  24. package/build/client/_app/immutable/chunks/25W9uPmb.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/25W9uPmb.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/4Ik7cdeQ.js +8 -0
  27. package/build/client/_app/immutable/chunks/4Ik7cdeQ.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/4Ik7cdeQ.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/5Rap-vPy.js +6 -0
  30. package/build/client/_app/immutable/chunks/5Rap-vPy.js.br +3 -0
  31. package/build/client/_app/immutable/chunks/5Rap-vPy.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/9Nygv5WR.js +9 -0
  33. package/build/client/_app/immutable/chunks/9Nygv5WR.js.br +0 -0
  34. package/build/client/_app/immutable/chunks/9Nygv5WR.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/B03wrqEc.js +6 -0
  36. package/build/client/_app/immutable/chunks/B03wrqEc.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/B03wrqEc.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/B5zXfXm9.js +6 -0
  39. package/build/client/_app/immutable/chunks/B5zXfXm9.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/B5zXfXm9.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/B9Xyijhd.js +6 -0
  42. package/build/client/_app/immutable/chunks/B9Xyijhd.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/B9Xyijhd.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/BFG1Mk7z.js +6 -0
  45. package/build/client/_app/immutable/chunks/BFG1Mk7z.js.br +0 -0
  46. package/build/client/_app/immutable/chunks/BFG1Mk7z.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/BIv9DU6q.js +303 -0
  48. package/build/client/_app/immutable/chunks/BIv9DU6q.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/BIv9DU6q.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/BKlk5iyT.js +6 -0
  51. package/build/client/_app/immutable/chunks/BKlk5iyT.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/BKlk5iyT.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/BSkB5QuD.js +6 -0
  54. package/build/client/_app/immutable/chunks/BSkB5QuD.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/BSkB5QuD.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/BZvw7aKD.js +751 -0
  57. package/build/client/_app/immutable/chunks/BZvw7aKD.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/BZvw7aKD.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/B_c3zf-v.js +6 -0
  60. package/build/client/_app/immutable/chunks/B_c3zf-v.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/B_c3zf-v.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/B_fMsGYe.js +6 -0
  63. package/build/client/_app/immutable/chunks/B_fMsGYe.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/B_fMsGYe.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/BaJupSGV.js +6 -0
  66. package/build/client/_app/immutable/chunks/BaJupSGV.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/BaJupSGV.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/BaLxmfj-.js +6 -0
  69. package/build/client/_app/immutable/chunks/BaLxmfj-.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/BaLxmfj-.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/Bc-ZgV77.js +6 -0
  72. package/build/client/_app/immutable/chunks/Bc-ZgV77.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/Bc-ZgV77.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/Beal4i3M.js +6 -0
  75. package/build/client/_app/immutable/chunks/Beal4i3M.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/Beal4i3M.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/BfEKNvv3.js +7 -0
  78. package/build/client/_app/immutable/chunks/BfEKNvv3.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/BfEKNvv3.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/Bhzvs7bI.js +6 -0
  81. package/build/client/_app/immutable/chunks/Bhzvs7bI.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/Bhzvs7bI.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/Bio4gycK.js +6 -0
  84. package/build/client/_app/immutable/chunks/Bio4gycK.js.br +0 -0
  85. package/build/client/_app/immutable/chunks/Bio4gycK.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/BoFRg7Ot.js +6 -0
  87. package/build/client/_app/immutable/chunks/BoFRg7Ot.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/BoFRg7Ot.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/BppKCDc7.js +2 -0
  90. package/build/client/_app/immutable/chunks/BppKCDc7.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/BppKCDc7.js.gz +0 -0
  92. package/build/client/_app/immutable/chunks/Bqgm2twL.js +6 -0
  93. package/build/client/_app/immutable/chunks/Bqgm2twL.js.br +0 -0
  94. package/build/client/_app/immutable/chunks/Bqgm2twL.js.gz +0 -0
  95. package/build/client/_app/immutable/chunks/BrgZPUOV.js +6 -0
  96. package/build/client/_app/immutable/chunks/BrgZPUOV.js.br +0 -0
  97. package/build/client/_app/immutable/chunks/BrgZPUOV.js.gz +0 -0
  98. package/build/client/_app/immutable/chunks/BsTHnhdd.js +7 -0
  99. package/build/client/_app/immutable/chunks/BsTHnhdd.js.br +0 -0
  100. package/build/client/_app/immutable/chunks/BsTHnhdd.js.gz +0 -0
  101. package/build/client/_app/immutable/chunks/BwHKvje2.js +1 -0
  102. package/build/client/_app/immutable/chunks/BwHKvje2.js.br +0 -0
  103. package/build/client/_app/immutable/chunks/BwHKvje2.js.gz +0 -0
  104. package/build/client/_app/immutable/chunks/BzepE-td.js +6 -0
  105. package/build/client/_app/immutable/chunks/BzepE-td.js.br +0 -0
  106. package/build/client/_app/immutable/chunks/BzepE-td.js.gz +0 -0
  107. package/build/client/_app/immutable/chunks/C5WLch3f.js +6 -0
  108. package/build/client/_app/immutable/chunks/C5WLch3f.js.br +0 -0
  109. package/build/client/_app/immutable/chunks/C5WLch3f.js.gz +0 -0
  110. package/build/client/_app/immutable/chunks/CCSDG5nI.js +6 -0
  111. package/build/client/_app/immutable/chunks/CCSDG5nI.js.br +0 -0
  112. package/build/client/_app/immutable/chunks/CCSDG5nI.js.gz +0 -0
  113. package/build/client/_app/immutable/chunks/CDGzqUPQ.js +6 -0
  114. package/build/client/_app/immutable/chunks/CDGzqUPQ.js.br +0 -0
  115. package/build/client/_app/immutable/chunks/CDGzqUPQ.js.gz +0 -0
  116. package/build/client/_app/immutable/chunks/CDntyWJ8.js +6 -0
  117. package/build/client/_app/immutable/chunks/CDntyWJ8.js.br +0 -0
  118. package/build/client/_app/immutable/chunks/CDntyWJ8.js.gz +0 -0
  119. package/build/client/_app/immutable/chunks/CFKIUWau.js +6 -0
  120. package/build/client/_app/immutable/chunks/CFKIUWau.js.br +0 -0
  121. package/build/client/_app/immutable/chunks/CFKIUWau.js.gz +0 -0
  122. package/build/client/_app/immutable/chunks/CFOPXBzS.js +6 -0
  123. package/build/client/_app/immutable/chunks/CFOPXBzS.js.br +0 -0
  124. package/build/client/_app/immutable/chunks/CFOPXBzS.js.gz +0 -0
  125. package/build/client/_app/immutable/chunks/CLLBncYj.js +6 -0
  126. package/build/client/_app/immutable/chunks/CLLBncYj.js.br +0 -0
  127. package/build/client/_app/immutable/chunks/CLLBncYj.js.gz +0 -0
  128. package/build/client/_app/immutable/chunks/COyEY5Pt.js +7 -0
  129. package/build/client/_app/immutable/chunks/COyEY5Pt.js.br +0 -0
  130. package/build/client/_app/immutable/chunks/COyEY5Pt.js.gz +0 -0
  131. package/build/client/_app/immutable/chunks/CPajHgWi.js +6 -0
  132. package/build/client/_app/immutable/chunks/CPajHgWi.js.br +0 -0
  133. package/build/client/_app/immutable/chunks/CPajHgWi.js.gz +0 -0
  134. package/build/client/_app/immutable/chunks/CVwtpugi.js +6 -0
  135. package/build/client/_app/immutable/chunks/CVwtpugi.js.br +0 -0
  136. package/build/client/_app/immutable/chunks/CVwtpugi.js.gz +0 -0
  137. package/build/client/_app/immutable/chunks/CWP1LX-6.js +16 -0
  138. package/build/client/_app/immutable/chunks/CWP1LX-6.js.br +0 -0
  139. package/build/client/_app/immutable/chunks/CWP1LX-6.js.gz +0 -0
  140. package/build/client/_app/immutable/chunks/CWj6FrbW.js +1 -0
  141. package/build/client/_app/immutable/chunks/CWj6FrbW.js.br +0 -0
  142. package/build/client/_app/immutable/chunks/CWj6FrbW.js.gz +0 -0
  143. package/build/client/_app/immutable/chunks/CX-rkNHf.js +6 -0
  144. package/build/client/_app/immutable/chunks/CX-rkNHf.js.br +0 -0
  145. package/build/client/_app/immutable/chunks/CX-rkNHf.js.gz +0 -0
  146. package/build/client/_app/immutable/chunks/CX7tZMmh.js +8 -0
  147. package/build/client/_app/immutable/chunks/CX7tZMmh.js.br +0 -0
  148. package/build/client/_app/immutable/chunks/CX7tZMmh.js.gz +0 -0
  149. package/build/client/_app/immutable/chunks/CXOwvkN_.js +6 -0
  150. package/build/client/_app/immutable/chunks/CXOwvkN_.js.br +0 -0
  151. package/build/client/_app/immutable/chunks/CXOwvkN_.js.gz +0 -0
  152. package/build/client/_app/immutable/chunks/CaCSYZEr.js +6 -0
  153. package/build/client/_app/immutable/chunks/CaCSYZEr.js.br +0 -0
  154. package/build/client/_app/immutable/chunks/CaCSYZEr.js.gz +0 -0
  155. package/build/client/_app/immutable/chunks/CdQndTaG.js +6 -0
  156. package/build/client/_app/immutable/chunks/CdQndTaG.js.br +0 -0
  157. package/build/client/_app/immutable/chunks/CdQndTaG.js.gz +0 -0
  158. package/build/client/_app/immutable/chunks/Ce3n6wWz.js +6 -0
  159. package/build/client/_app/immutable/chunks/Ce3n6wWz.js.br +0 -0
  160. package/build/client/_app/immutable/chunks/Ce3n6wWz.js.gz +0 -0
  161. package/build/client/_app/immutable/chunks/Cg7bfA9N.js +6 -0
  162. package/build/client/_app/immutable/chunks/Cg7bfA9N.js.br +0 -0
  163. package/build/client/_app/immutable/chunks/Cg7bfA9N.js.gz +0 -0
  164. package/build/client/_app/immutable/chunks/Cp1zYvxS.js +6 -0
  165. package/build/client/_app/immutable/chunks/Cp1zYvxS.js.br +0 -0
  166. package/build/client/_app/immutable/chunks/Cp1zYvxS.js.gz +0 -0
  167. package/build/client/_app/immutable/chunks/CpIb_Oan.js +6 -0
  168. package/build/client/_app/immutable/chunks/CpIb_Oan.js.br +0 -0
  169. package/build/client/_app/immutable/chunks/CpIb_Oan.js.gz +0 -0
  170. package/build/client/_app/immutable/chunks/Cpb6xl2v.js +6 -0
  171. package/build/client/_app/immutable/chunks/Cpb6xl2v.js.br +0 -0
  172. package/build/client/_app/immutable/chunks/Cpb6xl2v.js.gz +0 -0
  173. package/build/client/_app/immutable/chunks/Cphgjts3.js +6 -0
  174. package/build/client/_app/immutable/chunks/Cphgjts3.js.br +0 -0
  175. package/build/client/_app/immutable/chunks/Cphgjts3.js.gz +0 -0
  176. package/build/client/_app/immutable/chunks/CwNk8-XU.js +6 -0
  177. package/build/client/_app/immutable/chunks/CwNk8-XU.js.br +0 -0
  178. package/build/client/_app/immutable/chunks/CwNk8-XU.js.gz +0 -0
  179. package/build/client/_app/immutable/chunks/CyDODH-U.js +6 -0
  180. package/build/client/_app/immutable/chunks/CyDODH-U.js.br +0 -0
  181. package/build/client/_app/immutable/chunks/CyDODH-U.js.gz +0 -0
  182. package/build/client/_app/immutable/chunks/CzKuDChf.js +6 -0
  183. package/build/client/_app/immutable/chunks/CzKuDChf.js.br +0 -0
  184. package/build/client/_app/immutable/chunks/CzKuDChf.js.gz +0 -0
  185. package/build/client/_app/immutable/chunks/D-MeaMDU.js +6 -0
  186. package/build/client/_app/immutable/chunks/D-MeaMDU.js.br +0 -0
  187. package/build/client/_app/immutable/chunks/D-MeaMDU.js.gz +0 -0
  188. package/build/client/_app/immutable/chunks/D3h14YRZ.js +8 -0
  189. package/build/client/_app/immutable/chunks/D3h14YRZ.js.br +0 -0
  190. package/build/client/_app/immutable/chunks/D3h14YRZ.js.gz +0 -0
  191. package/build/client/_app/immutable/chunks/D5C2fndG.js +6 -0
  192. package/build/client/_app/immutable/chunks/D5C2fndG.js.br +0 -0
  193. package/build/client/_app/immutable/chunks/D5C2fndG.js.gz +0 -0
  194. package/build/client/_app/immutable/chunks/DDwshQtU.js +6 -0
  195. package/build/client/_app/immutable/chunks/DDwshQtU.js.br +0 -0
  196. package/build/client/_app/immutable/chunks/DDwshQtU.js.gz +0 -0
  197. package/build/client/_app/immutable/chunks/DHaeiCBh.js +6 -0
  198. package/build/client/_app/immutable/chunks/DHaeiCBh.js.br +0 -0
  199. package/build/client/_app/immutable/chunks/DHaeiCBh.js.gz +0 -0
  200. package/build/client/_app/immutable/chunks/DJ94EQYm.js +1 -0
  201. package/build/client/_app/immutable/chunks/DJ94EQYm.js.br +0 -0
  202. package/build/client/_app/immutable/chunks/DJ94EQYm.js.gz +0 -0
  203. package/build/client/_app/immutable/chunks/DKBhwAQS.js +6 -0
  204. package/build/client/_app/immutable/chunks/DKBhwAQS.js.br +0 -0
  205. package/build/client/_app/immutable/chunks/DKBhwAQS.js.gz +0 -0
  206. package/build/client/_app/immutable/chunks/DSZPf7rp.js +6 -0
  207. package/build/client/_app/immutable/chunks/DSZPf7rp.js.br +0 -0
  208. package/build/client/_app/immutable/chunks/DSZPf7rp.js.gz +0 -0
  209. package/build/client/_app/immutable/chunks/DSnIFjhj.js +9 -0
  210. package/build/client/_app/immutable/chunks/DSnIFjhj.js.br +0 -0
  211. package/build/client/_app/immutable/chunks/DSnIFjhj.js.gz +0 -0
  212. package/build/client/_app/immutable/chunks/DTECt2xU.js +6 -0
  213. package/build/client/_app/immutable/chunks/DTECt2xU.js.br +0 -0
  214. package/build/client/_app/immutable/chunks/DTECt2xU.js.gz +0 -0
  215. package/build/client/_app/immutable/chunks/DXyYeYxl.js +6 -0
  216. package/build/client/_app/immutable/chunks/DXyYeYxl.js.br +0 -0
  217. package/build/client/_app/immutable/chunks/DXyYeYxl.js.gz +0 -0
  218. package/build/client/_app/immutable/chunks/Dd3NCNK9.js +6 -0
  219. package/build/client/_app/immutable/chunks/Dd3NCNK9.js.br +0 -0
  220. package/build/client/_app/immutable/chunks/Dd3NCNK9.js.gz +0 -0
  221. package/build/client/_app/immutable/chunks/DfzH4Xui.js +6 -0
  222. package/build/client/_app/immutable/chunks/DfzH4Xui.js.br +0 -0
  223. package/build/client/_app/immutable/chunks/DfzH4Xui.js.gz +0 -0
  224. package/build/client/_app/immutable/chunks/DgyLZaXg.js +6 -0
  225. package/build/client/_app/immutable/chunks/DgyLZaXg.js.br +0 -0
  226. package/build/client/_app/immutable/chunks/DgyLZaXg.js.gz +0 -0
  227. package/build/client/_app/immutable/chunks/Di1E5kHZ.js +6 -0
  228. package/build/client/_app/immutable/chunks/Di1E5kHZ.js.br +0 -0
  229. package/build/client/_app/immutable/chunks/Di1E5kHZ.js.gz +0 -0
  230. package/build/client/_app/immutable/chunks/DkXc3qEp.js +6 -0
  231. package/build/client/_app/immutable/chunks/DkXc3qEp.js.br +0 -0
  232. package/build/client/_app/immutable/chunks/DkXc3qEp.js.gz +0 -0
  233. package/build/client/_app/immutable/chunks/DnHyzjbg.js +6 -0
  234. package/build/client/_app/immutable/chunks/DnHyzjbg.js.br +0 -0
  235. package/build/client/_app/immutable/chunks/DnHyzjbg.js.gz +0 -0
  236. package/build/client/_app/immutable/chunks/DoKYQW6_.js +6 -0
  237. package/build/client/_app/immutable/chunks/DoKYQW6_.js.br +0 -0
  238. package/build/client/_app/immutable/chunks/DoKYQW6_.js.gz +0 -0
  239. package/build/client/_app/immutable/chunks/DrQuvNYM.js +6 -0
  240. package/build/client/_app/immutable/chunks/DrQuvNYM.js.br +0 -0
  241. package/build/client/_app/immutable/chunks/DrQuvNYM.js.gz +0 -0
  242. package/build/client/_app/immutable/chunks/Drc7WvVn.js +6 -0
  243. package/build/client/_app/immutable/chunks/Drc7WvVn.js.br +0 -0
  244. package/build/client/_app/immutable/chunks/Drc7WvVn.js.gz +0 -0
  245. package/build/client/_app/immutable/chunks/DwJ7jVG9.js +8 -0
  246. package/build/client/_app/immutable/chunks/DwJ7jVG9.js.br +0 -0
  247. package/build/client/_app/immutable/chunks/DwJ7jVG9.js.gz +0 -0
  248. package/build/client/_app/immutable/chunks/DyP6w7ZV.js +6 -0
  249. package/build/client/_app/immutable/chunks/DyP6w7ZV.js.br +0 -0
  250. package/build/client/_app/immutable/chunks/DyP6w7ZV.js.gz +0 -0
  251. package/build/client/_app/immutable/chunks/LXAHj1IR.js +6 -0
  252. package/build/client/_app/immutable/chunks/LXAHj1IR.js.br +0 -0
  253. package/build/client/_app/immutable/chunks/LXAHj1IR.js.gz +0 -0
  254. package/build/client/_app/immutable/chunks/Tw7wswEv.js +6 -0
  255. package/build/client/_app/immutable/chunks/Tw7wswEv.js.br +0 -0
  256. package/build/client/_app/immutable/chunks/Tw7wswEv.js.gz +0 -0
  257. package/build/client/_app/immutable/chunks/YWi4-JPR.js +6 -0
  258. package/build/client/_app/immutable/chunks/YWi4-JPR.js.br +0 -0
  259. package/build/client/_app/immutable/chunks/YWi4-JPR.js.gz +0 -0
  260. package/build/client/_app/immutable/chunks/Zznr-cwX.js +6 -0
  261. package/build/client/_app/immutable/chunks/Zznr-cwX.js.br +0 -0
  262. package/build/client/_app/immutable/chunks/Zznr-cwX.js.gz +0 -0
  263. package/build/client/_app/immutable/chunks/biVXCNdV.js +9 -0
  264. package/build/client/_app/immutable/chunks/biVXCNdV.js.br +0 -0
  265. package/build/client/_app/immutable/chunks/biVXCNdV.js.gz +0 -0
  266. package/build/client/_app/immutable/chunks/dUCx_-0o.js +6 -0
  267. package/build/client/_app/immutable/chunks/dUCx_-0o.js.br +0 -0
  268. package/build/client/_app/immutable/chunks/dUCx_-0o.js.gz +0 -0
  269. package/build/client/_app/immutable/chunks/deUWdS0T.js +6 -0
  270. package/build/client/_app/immutable/chunks/deUWdS0T.js.br +0 -0
  271. package/build/client/_app/immutable/chunks/deUWdS0T.js.gz +0 -0
  272. package/build/client/_app/immutable/chunks/evsPIoF1.js +15 -0
  273. package/build/client/_app/immutable/chunks/evsPIoF1.js.br +0 -0
  274. package/build/client/_app/immutable/chunks/evsPIoF1.js.gz +0 -0
  275. package/build/client/_app/immutable/chunks/i9-g7ZhI.js +6 -0
  276. package/build/client/_app/immutable/chunks/i9-g7ZhI.js.br +0 -0
  277. package/build/client/_app/immutable/chunks/i9-g7ZhI.js.gz +0 -0
  278. package/build/client/_app/immutable/chunks/iYdxUtet.js +6 -0
  279. package/build/client/_app/immutable/chunks/iYdxUtet.js.br +0 -0
  280. package/build/client/_app/immutable/chunks/iYdxUtet.js.gz +0 -0
  281. package/build/client/_app/immutable/chunks/jKjWACjA.js +1 -0
  282. package/build/client/_app/immutable/chunks/jKjWACjA.js.br +0 -0
  283. package/build/client/_app/immutable/chunks/jKjWACjA.js.gz +0 -0
  284. package/build/client/_app/immutable/chunks/nJIPv2kB.js +3 -0
  285. package/build/client/_app/immutable/chunks/nJIPv2kB.js.br +0 -0
  286. package/build/client/_app/immutable/chunks/nJIPv2kB.js.gz +0 -0
  287. package/build/client/_app/immutable/chunks/nf6ki56Z.js +6 -0
  288. package/build/client/_app/immutable/chunks/nf6ki56Z.js.br +0 -0
  289. package/build/client/_app/immutable/chunks/nf6ki56Z.js.gz +0 -0
  290. package/build/client/_app/immutable/chunks/pnP8ivHi.js +6 -0
  291. package/build/client/_app/immutable/chunks/pnP8ivHi.js.br +0 -0
  292. package/build/client/_app/immutable/chunks/pnP8ivHi.js.gz +0 -0
  293. package/build/client/_app/immutable/chunks/rUNN04Wq.js +6 -0
  294. package/build/client/_app/immutable/chunks/rUNN04Wq.js.br +0 -0
  295. package/build/client/_app/immutable/chunks/rUNN04Wq.js.gz +0 -0
  296. package/build/client/_app/immutable/chunks/tGk8EFnU.js +6 -0
  297. package/build/client/_app/immutable/chunks/tGk8EFnU.js.br +0 -0
  298. package/build/client/_app/immutable/chunks/tGk8EFnU.js.gz +0 -0
  299. package/build/client/_app/immutable/entry/app.CHZkrV6L.js +2 -0
  300. package/build/client/_app/immutable/entry/app.CHZkrV6L.js.br +0 -0
  301. package/build/client/_app/immutable/entry/app.CHZkrV6L.js.gz +0 -0
  302. package/build/client/_app/immutable/entry/start.HrUHLO1x.js +1 -0
  303. package/build/client/_app/immutable/entry/start.HrUHLO1x.js.br +0 -0
  304. package/build/client/_app/immutable/entry/start.HrUHLO1x.js.gz +0 -0
  305. package/build/client/_app/immutable/nodes/0.CKOyFIgZ.js +1 -0
  306. package/build/client/_app/immutable/nodes/0.CKOyFIgZ.js.br +0 -0
  307. package/build/client/_app/immutable/nodes/0.CKOyFIgZ.js.gz +0 -0
  308. package/build/client/_app/immutable/nodes/1.KWaXKMWz.js +1 -0
  309. package/build/client/_app/immutable/nodes/1.KWaXKMWz.js.br +2 -0
  310. package/build/client/_app/immutable/nodes/1.KWaXKMWz.js.gz +0 -0
  311. package/build/client/_app/immutable/nodes/3.CrnoJCHB.js +37 -0
  312. package/build/client/_app/immutable/nodes/3.CrnoJCHB.js.br +0 -0
  313. package/build/client/_app/immutable/nodes/3.CrnoJCHB.js.gz +0 -0
  314. package/build/client/_app/immutable/nodes/4.CQAHhHcW.js +1 -0
  315. package/build/client/_app/immutable/nodes/4.CQAHhHcW.js.br +0 -0
  316. package/build/client/_app/immutable/nodes/4.CQAHhHcW.js.gz +0 -0
  317. package/build/client/_app/version.json +1 -0
  318. package/build/client/_app/version.json.br +0 -0
  319. package/build/client/_app/version.json.gz +0 -0
  320. package/build/client/favicon.png +0 -0
  321. package/build/client/fonts/DarkerGrotesque-Black.ttf +0 -0
  322. package/build/client/fonts/DarkerGrotesque-Bold.ttf +0 -0
  323. package/build/client/fonts/DarkerGrotesque-Light.ttf +0 -0
  324. package/build/client/fonts/DarkerGrotesque-Medium.ttf +0 -0
  325. package/build/client/fonts/DarkerGrotesque-Regular.ttf +0 -0
  326. package/build/client/fonts/DarkerGrotesque-SemiBold.ttf +0 -0
  327. package/build/client/fonts.css +42 -0
  328. package/build/client/fonts.css.br +0 -0
  329. package/build/client/fonts.css.gz +0 -0
  330. package/build/client/recombine.svg +11 -0
  331. package/build/client/recombine.svg.br +0 -0
  332. package/build/client/recombine.svg.gz +0 -0
  333. package/build/env.js +45 -0
  334. package/build/handler.js +1376 -0
  335. package/build/index.js +334 -0
  336. package/build/server/chunks/0-mYGjPqz5.js +9 -0
  337. package/build/server/chunks/0-mYGjPqz5.js.map +1 -0
  338. package/build/server/chunks/1-C2hOLQew.js +9 -0
  339. package/build/server/chunks/1-C2hOLQew.js.map +1 -0
  340. package/build/server/chunks/2-DvM8Rx7F.js +19 -0
  341. package/build/server/chunks/2-DvM8Rx7F.js.map +1 -0
  342. package/build/server/chunks/3-DzYy6NR4.js +9 -0
  343. package/build/server/chunks/3-DzYy6NR4.js.map +1 -0
  344. package/build/server/chunks/4-CKj2VFF9.js +9 -0
  345. package/build/server/chunks/4-CKj2VFF9.js.map +1 -0
  346. package/build/server/chunks/Link--GZl5SPN.js +173 -0
  347. package/build/server/chunks/Link--GZl5SPN.js.map +1 -0
  348. package/build/server/chunks/_layout.svelte-Djb8kzRL.js +9 -0
  349. package/build/server/chunks/_layout.svelte-Djb8kzRL.js.map +1 -0
  350. package/build/server/chunks/_page.svelte--F_wcrBT.js +270 -0
  351. package/build/server/chunks/_page.svelte--F_wcrBT.js.map +1 -0
  352. package/build/server/chunks/_page.svelte-BTrMVKBN.js +323 -0
  353. package/build/server/chunks/_page.svelte-BTrMVKBN.js.map +1 -0
  354. package/build/server/chunks/error.svelte-CdLF6LnB.js +45 -0
  355. package/build/server/chunks/error.svelte-CdLF6LnB.js.map +1 -0
  356. package/build/server/chunks/index-Djsj11qr.js +214 -0
  357. package/build/server/chunks/index-Djsj11qr.js.map +1 -0
  358. package/build/server/chunks/index-o5QjKPCU.js +318 -0
  359. package/build/server/chunks/index-o5QjKPCU.js.map +1 -0
  360. package/build/server/chunks/utils-D9U67AWL.js +327 -0
  361. package/build/server/chunks/utils-D9U67AWL.js.map +1 -0
  362. package/build/server/index.js +7595 -0
  363. package/build/server/index.js.map +1 -0
  364. package/build/server/manifest.js +62 -0
  365. package/build/server/manifest.js.map +1 -0
  366. package/build/shims.js +32 -0
  367. package/package.json +75 -0
  368. package/src/ws-server/agents.ts +459 -0
  369. package/src/ws-server/fs-persistence.ts +80 -0
  370. package/src/ws-server/logger.ts +30 -0
  371. package/src/ws-server/message-dispatcher.ts +76 -0
  372. package/src/ws-server/projects.ts +58 -0
  373. package/src/ws-server/scheduler.ts +89 -0
  374. package/src/ws-server/server.ts +77 -0
  375. package/src/ws-server/tracer.ts +11 -0
  376. package/tsconfig.json +21 -0
@@ -0,0 +1,62 @@
1
+ const manifest = (() => {
2
+ function __memo(fn) {
3
+ let value;
4
+ return () => value ??= (value = fn());
5
+ }
6
+
7
+ return {
8
+ appDir: "_app",
9
+ appPath: "_app",
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"]),
11
+ mimeTypes: {".png":"image/png",".ttf":"font/ttf",".css":"text/css",".svg":"image/svg+xml"},
12
+ _: {
13
+ client: {start:"_app/immutable/entry/start.HrUHLO1x.js",app:"_app/immutable/entry/app.CHZkrV6L.js",imports:["_app/immutable/entry/start.HrUHLO1x.js","_app/immutable/chunks/nJIPv2kB.js","_app/immutable/chunks/BppKCDc7.js","_app/immutable/chunks/DJ94EQYm.js","_app/immutable/entry/app.CHZkrV6L.js","_app/immutable/chunks/jKjWACjA.js","_app/immutable/chunks/DJ94EQYm.js","_app/immutable/chunks/BppKCDc7.js","_app/immutable/chunks/CWj6FrbW.js","_app/immutable/chunks/BwHKvje2.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
14
+ nodes: [
15
+ __memo(() => import('./chunks/0-mYGjPqz5.js')),
16
+ __memo(() => import('./chunks/1-C2hOLQew.js')),
17
+ __memo(() => import('./chunks/2-DvM8Rx7F.js')),
18
+ __memo(() => import('./chunks/3-DzYy6NR4.js')),
19
+ __memo(() => import('./chunks/4-CKj2VFF9.js'))
20
+ ],
21
+ remotes: {
22
+
23
+ },
24
+ routes: [
25
+ {
26
+ id: "/",
27
+ pattern: /^\/$/,
28
+ params: [],
29
+ page: { layouts: [0,], errors: [1,], leaf: 2 },
30
+ endpoint: null
31
+ },
32
+ {
33
+ id: "/chat",
34
+ pattern: /^\/chat\/?$/,
35
+ params: [],
36
+ page: { layouts: [0,], errors: [1,], leaf: 3 },
37
+ endpoint: null
38
+ },
39
+ {
40
+ id: "/tests",
41
+ pattern: /^\/tests\/?$/,
42
+ params: [],
43
+ page: { layouts: [0,], errors: [1,], leaf: 4 },
44
+ endpoint: null
45
+ }
46
+ ],
47
+ prerendered_routes: new Set([]),
48
+ matchers: async () => {
49
+
50
+ return { };
51
+ },
52
+ server_assets: {}
53
+ }
54
+ }
55
+ })();
56
+
57
+ const prerendered = new Set([]);
58
+
59
+ const base = "";
60
+
61
+ export { base, manifest, prerendered };
62
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +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\"]),\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.HrUHLO1x.js\",app:\"_app/immutable/entry/app.CHZkrV6L.js\",imports:[\"_app/immutable/entry/start.HrUHLO1x.js\",\"_app/immutable/chunks/nJIPv2kB.js\",\"_app/immutable/chunks/BppKCDc7.js\",\"_app/immutable/chunks/DJ94EQYm.js\",\"_app/immutable/entry/app.CHZkrV6L.js\",\"_app/immutable/chunks/jKjWACjA.js\",\"_app/immutable/chunks/DJ94EQYm.js\",\"_app/immutable/chunks/BppKCDc7.js\",\"_app/immutable/chunks/CWj6FrbW.js\",\"_app/immutable/chunks/BwHKvje2.js\"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},\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],\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: 2 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/chat\",\n\t\t\t\tpattern: /^\\/chat\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 3 },\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: 4 },\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":"AAAY,MAAC,QAAQ,GAAG,CAAC,MAAM;AAC/B,SAAS,MAAM,CAAC,EAAE,EAAE;AACpB,CAAC,IAAI,KAAK;AACV,CAAC,OAAO,MAAM,KAAK,MAAM,KAAK,GAAG,EAAE,EAAE,CAAC;AACtC;;AAEA,OAAO;AACP,CAAC,MAAM,EAAE,MAAM;AACf,CAAC,OAAO,EAAE,MAAM;AAChB,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,iCAAiC,CAAC,gCAAgC,CAAC,iCAAiC,CAAC,kCAAkC,CAAC,mCAAmC,CAAC,oCAAoC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AAC9Q,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC;AAC3F,CAAC,CAAC,EAAE;AACJ,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,wCAAwC,CAAC,GAAG,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAC,wCAAwC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,sCAAsC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACrhB,EAAE,KAAK,EAAE;AACT,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC;AACtC,GAAG;AACH,EAAE,OAAO,EAAE;AACX;AACA,GAAG;AACH,EAAE,MAAM,EAAE;AACV,GAAG;AACH,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,OAAO,EAAE,MAAM;AACnB,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AAClD,IAAI,QAAQ,EAAE;AACd,IAAI;AACJ,GAAG;AACH,IAAI,EAAE,EAAE,OAAO;AACf,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AAClD,IAAI,QAAQ,EAAE;AACd,IAAI;AACJ,GAAG;AACH,IAAI,EAAE,EAAE,QAAQ;AAChB,IAAI,OAAO,EAAE,cAAc;AAC3B,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AAClD,IAAI,QAAQ,EAAE;AACd;AACA,GAAG;AACH,EAAE,kBAAkB,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;AACjC,EAAE,QAAQ,EAAE,YAAY;AACxB;AACA,GAAG,OAAO,IAAI;AACd,EAAE,CAAC;AACH,EAAE,aAAa,EAAE;AACjB;AACA;AACA,CAAC;;AAEW,MAAC,WAAW,GAAG,IAAI,GAAG,CAAC,EAAE;;AAEzB,MAAC,IAAI,GAAG;;;;"}
package/build/shims.js ADDED
@@ -0,0 +1,32 @@
1
+ import buffer from 'node:buffer';
2
+ import { webcrypto } from 'node:crypto';
3
+
4
+ // `buffer.File` was added in Node 18.13.0 while the `File` global was added in Node 20.0.0
5
+ const File = /** @type {import('node:buffer') & { File?: File}} */ (buffer).File;
6
+
7
+ /** @type {Record<string, any>} */
8
+ const globals = {
9
+ crypto: webcrypto,
10
+ File
11
+ };
12
+
13
+ // exported for dev/preview and node environments
14
+ /**
15
+ * Make various web APIs available as globals:
16
+ * - `crypto`
17
+ * - `File`
18
+ */
19
+ function installPolyfills() {
20
+ for (const name in globals) {
21
+ if (name in globalThis) continue;
22
+
23
+ Object.defineProperty(globalThis, name, {
24
+ enumerable: true,
25
+ configurable: true,
26
+ writable: true,
27
+ value: globals[name]
28
+ });
29
+ }
30
+ }
31
+
32
+ installPolyfills();
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "@recombine-ai/bosun",
3
+ "version": "0.1.0",
4
+ "license": "EULA",
5
+ "type": "module",
6
+ "files": [
7
+ "build",
8
+ "bin",
9
+ "src/ws-server",
10
+ "src/lib/ws-messages.ts",
11
+ ".svelte-kit/tsconfig.json",
12
+ "tsconfig.json",
13
+ "README.md"
14
+ ],
15
+ "scripts": {
16
+ "dev": "concurrently -n front,back 'yarn dev:vite' 'yarn dev:ws'",
17
+ "dev:vite": "vite dev",
18
+ "dev:ws": "tsx --watch src/ws-server/server.ts",
19
+ "build": "vite build",
20
+ "prepublishOnly": "npm run build",
21
+ "preview": "vite preview",
22
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
23
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
24
+ "format": "prettier --write .",
25
+ "lint": "prettier --check .",
26
+ "test:unit": "vitest",
27
+ "test": "yarn test:unit -- --run && yarn test:e2e",
28
+ "test:e2e": "playwright test",
29
+ "deploy": "cd deploy && yarn cdk deploy && cd ..",
30
+ "start": "concurrently -n front,back 'vite preview --host' 'tsx src/ws-server/server.ts'",
31
+ "academy:run-prompt-tests": "tsx src/lib/academy/runPromptTests.cli.ts",
32
+ "eslint": "eslint --quiet",
33
+ "eslint:fix": "eslint --fix"
34
+ },
35
+ "devDependencies": {
36
+ "@eslint/js": "^9.26.0",
37
+ "@sveltejs/adapter-auto": "^3.0.0",
38
+ "@sveltejs/adapter-node": "^5.2.9",
39
+ "@sveltejs/kit": "^2.0.0",
40
+ "@sveltejs/vite-plugin-svelte": "^4.0.0",
41
+ "@types/js-yaml": "^4.0.9",
42
+ "@types/ws": "^8.5.14",
43
+ "@typescript-eslint/eslint-plugin": "^8.32.0",
44
+ "autoprefixer": "^10.4.20",
45
+ "concurrently": "^9.1.2",
46
+ "eslint": "^9.26.0",
47
+ "prettier": "^3.3.2",
48
+ "prettier-plugin-svelte": "^3.2.6",
49
+ "prettier-plugin-tailwindcss": "^0.6.5",
50
+ "svelte": "^5.0.0",
51
+ "svelte-check": "^4.0.0",
52
+ "tailwindcss": "^3.4.9",
53
+ "typescript": "^5.0.0",
54
+ "typescript-eslint": "^8.32.0",
55
+ "vite": "^5.4.11",
56
+ "vitest": "^2.0.4"
57
+ },
58
+ "dependencies": {
59
+ "@popperjs/core": "^2.11.8",
60
+ "@recombine-ai/engine": "0.7.1",
61
+ "@tailwindcss/forms": "^0.5.9",
62
+ "@tailwindcss/typography": "^0.5.15",
63
+ "@types/papaparse": "^5.3.16",
64
+ "deepmerge": "^4.3.1",
65
+ "dotenv": "^17.2.2",
66
+ "googleapis": "^159.0.0",
67
+ "js-yaml": "^4.1.0",
68
+ "monaco-editor": "^0.52.2",
69
+ "openai": "^4.78.1",
70
+ "papaparse": "^5.5.3",
71
+ "promptfoo": "0.112.3",
72
+ "tsx": "^4.20.6",
73
+ "ws": "^8.18.0"
74
+ }
75
+ }
@@ -0,0 +1,459 @@
1
+ import {
2
+ createContext,
3
+ makeAction,
4
+ type Action,
5
+ type Message,
6
+ type TestAgent,
7
+ type TestAgentFactory,
8
+ type TestVoiceAgent,
9
+ type StepTracer
10
+ } from '@recombine-ai/engine'
11
+ import type { DelayedActions, LogEntry } from '../lib/ws-message'
12
+ import fs from 'fs'
13
+ import path, { join } from 'path'
14
+ import type { Context, ContextPersistence, StatePersistence } from './fs-persistence'
15
+ import { createLogger } from './logger'
16
+ import type { MessageDispatcher } from './message-dispatcher'
17
+ import { loadProjects } from './projects'
18
+ import { createScheduler, type BosunScheduler } from './scheduler'
19
+ import { createTracer } from './tracer'
20
+
21
+ interface MessageEntry {
22
+ type: 'message'
23
+ payload: Message
24
+ }
25
+ interface ActionEntry {
26
+ type: 'action'
27
+ payload: Action
28
+ }
29
+
30
+ interface HistoryLogEntry {
31
+ type: 'log'
32
+ payload: LogEntry
33
+ }
34
+
35
+ type HistoryEntry = MessageEntry | ActionEntry | HistoryLogEntry
36
+
37
+ export interface AgentState {
38
+ id: string
39
+ name: string
40
+ history: HistoryEntry[]
41
+ schedule: DelayedActions
42
+ prev: string | null
43
+ next: string | null
44
+ }
45
+
46
+ type AgentWithState = Awaited<ReturnType<typeof loadAgent>>
47
+
48
+ export function createAgents(
49
+ dispatcher: MessageDispatcher,
50
+ stepTracer: StepTracer,
51
+ statePersistence: StatePersistence,
52
+ contextPersistence: ContextPersistence
53
+ ) {
54
+ const agentStates: Record<string, AgentState[]> = {}
55
+ const agents: Record<string, AgentWithState> = {}
56
+ let currentAgent = ''
57
+
58
+ function getCurrentAgent() {
59
+ if (!currentAgent) {
60
+ throw new Error('No agent selected')
61
+ }
62
+ const agent = agents[currentAgent]
63
+ if (!agent) {
64
+ throw new Error(`Agent not found ${currentAgent}`)
65
+ }
66
+ return agent
67
+ }
68
+
69
+ return {
70
+ load: async () => {
71
+ const projects = await loadProjects()
72
+ console.log(
73
+ 'createAgents, load; loaded projects: ',
74
+ projects.map((p) => `${p.project}: (${Object.keys(p.factories)})`)
75
+ )
76
+ for (let { project, basePath, factories } of projects) {
77
+ for (let agentName in factories) {
78
+ const agentId = `${project}/${agentName}`
79
+ const factory = factories[agentName]
80
+ async function saveStates(states: AgentState[]) {
81
+ await statePersistence.save(agentId, states)
82
+ agentStates[agentId] = states
83
+ console.log('------------- save states ---------------')
84
+ states.forEach((state) => {
85
+ console.log('State:', state.name, state.prev, state.next)
86
+ })
87
+ console.log('-----------------------------------------')
88
+
89
+ await dispatcher.sendUpdateStates(
90
+ states.map((state) => ({
91
+ id: state.id,
92
+ name: state.name,
93
+ userMessage: userMessage(state)
94
+ }))
95
+ )
96
+ }
97
+ const loadedStates = await statePersistence.load(agentId)
98
+ agentStates[agentId] = loadedStates
99
+ agents[agentId] = await loadAgent({
100
+ agentId,
101
+ contextPersistence,
102
+ ...dispatcher,
103
+ factory,
104
+ basePath,
105
+ saveStates,
106
+ stepTracer
107
+ })
108
+ }
109
+ }
110
+ await dispatcher.sendLoaded(Object.keys(agents))
111
+ },
112
+ select: async (agentId: string, stateId?: string | null) => {
113
+ console.log('createAgents, select; agents: ', Object.keys(agents), 'selected: ', agentId)
114
+ currentAgent = agentId
115
+ const agent = getCurrentAgent()
116
+
117
+ dispatcher.sendAgentSelected({
118
+ id: agentId,
119
+ steps: await Promise.all(
120
+ agent.tracer.getSteps().map(async (s) => ({
121
+ name: s.name,
122
+ prompt: await s.prompt.content(),
123
+ type: s.type,
124
+ schema:
125
+ s.prompt.type === 'file' && s.schema
126
+ ? await loadSchemaFile(agent.basePath, s.prompt.path)
127
+ : undefined
128
+ }))
129
+ )
130
+ })
131
+ if (agent.ctx.get()) {
132
+ dispatcher.sendContext(agent.ctx.get())
133
+ }
134
+
135
+ const states = agentStates[agentId] || []
136
+ let isInitialLoad = false
137
+ if (stateId === undefined && states.length > 0) {
138
+ stateId = states[states.length - 1].id
139
+ isInitialLoad = true
140
+ }
141
+ dispatcher.sendUpdateStates(
142
+ states.map((state) => ({
143
+ id: state.id,
144
+ name: state.name,
145
+ userMessage: userMessage(state)
146
+ }))
147
+ )
148
+ await agent.selectState(states, stateId, isInitialLoad)
149
+ },
150
+ selectStep: async (step: string) => {
151
+ await getCurrentAgent().selectStep(step)
152
+ },
153
+ updateContext: async (context: Context) => {
154
+ await getCurrentAgent().updateContext(context)
155
+ },
156
+ updatePrompt: async (prompt: string) => {
157
+ await getCurrentAgent().updatePrompt(prompt)
158
+ },
159
+ triggerAction: async (action: string) => {
160
+ await getCurrentAgent().triggerAction(action)
161
+ },
162
+ handleMessage: async (message: Message) => {
163
+ await dispatcher.sendMessage(message) // echo message
164
+ await getCurrentAgent().handleMessage(message)
165
+ }
166
+ }
167
+ }
168
+
169
+ interface LoadProps extends Omit<MessageDispatcher, 'sendUpdateStates'> {
170
+ agentId: string
171
+ basePath: string
172
+ factory: TestAgentFactory
173
+ saveStates: (states: AgentState[]) => Promise<void>
174
+ stepTracer: StepTracer
175
+ contextPersistence: ContextPersistence
176
+ }
177
+
178
+ async function loadAgent(props: LoadProps) {
179
+ let states: Record<string, AgentState> = {}
180
+ let state = createState({}, null)
181
+ let currentStep = ''
182
+ let scheduler: BosunScheduler | null = null
183
+ let agent: TestAgent | null = null
184
+ const savedContext = await props.contextPersistence.load(props.agentId, 'default')
185
+ const ctx = createContext(savedContext)
186
+ ctx.subscribe((context) => {
187
+ console.log('------ context updated --------')
188
+ props.sendContext(context)
189
+ props.contextPersistence.save(props.agentId, 'default', context)
190
+ })
191
+ const logger = createLogger((msg) => {
192
+ state.history.push({
193
+ type: 'log',
194
+ payload: msg
195
+ })
196
+ props.sendLog(msg)
197
+ })
198
+
199
+ async function sendAction(action: Action) {
200
+ state.history.push({
201
+ type: 'action',
202
+ payload: action
203
+ })
204
+ props.sendAction(action)
205
+ }
206
+
207
+ const tracer = createTracer(logger)
208
+
209
+ scheduler = createScheduler({
210
+ logger,
211
+ sendAction,
212
+ onUpdate: async (actions) => {
213
+ await props.sendSchedule(actions)
214
+ }
215
+ })
216
+
217
+ agent = await props.factory({
218
+ stepTracer: props.stepTracer,
219
+ tracer,
220
+ logger,
221
+ scheduler,
222
+ getMessages: () => {
223
+ let messages: Array<MessageEntry['payload']> = []
224
+ let curState = state
225
+ while (true) {
226
+ curState.history
227
+ .filter((entry) => entry.type === 'message')
228
+ .reverse()
229
+ .forEach((entry) => {
230
+ messages.push(entry.payload)
231
+ })
232
+ if (!curState.prev) {
233
+ break
234
+ }
235
+ curState = states[curState.prev]
236
+ }
237
+ return messages.reverse()
238
+ },
239
+ sendMessage: async (message: string | Message) => {
240
+ if (typeof message === 'string') {
241
+ state.history.push({
242
+ type: 'message',
243
+ payload: { text: message, sender: 'agent' }
244
+ })
245
+ await props.sendMessage({ text: message, sender: 'agent' })
246
+ } else {
247
+ state.history.push({
248
+ type: 'message',
249
+ payload: message
250
+ })
251
+ await props.sendMessage({ text: message.text, sender: message.sender })
252
+ }
253
+ },
254
+ sendAction,
255
+ ctx
256
+ })
257
+
258
+ function addState() {
259
+ if (!scheduler) {
260
+ throw new Error('Cannot add state: agent is not initialized')
261
+ }
262
+ console.log('!! add state')
263
+ const newState = createState(scheduler.serialize(), state.id)
264
+ state.next = newState.id
265
+ states[state.id] = clone({ ...state, schedule: scheduler.serialize() })
266
+ props.saveStates(Object.values(states))
267
+ state = newState
268
+ }
269
+
270
+ return {
271
+ agent,
272
+ tracer,
273
+ basePath: props.basePath,
274
+ ctx,
275
+ selectState: async (
276
+ stateHistory: AgentState[],
277
+ stateId?: string | null,
278
+ isInitialLoad?: boolean
279
+ ) => {
280
+ states = {}
281
+ stateHistory.forEach((state) => {
282
+ states[state.id] = state
283
+ })
284
+ console.log('states: ' + stateHistory.length, stateId)
285
+ if (stateHistory.length === 0 || !stateId) {
286
+ // this agent loaded for the first time
287
+ console.log(' --- init agent ---')
288
+ state = createState({}, null)
289
+ if (agent) {
290
+ await (isVoiceAgent(agent) ? agent.onCallStart() : agent.start())
291
+ }
292
+ return
293
+ }
294
+ let loadedState = states[stateId]
295
+ if (!loadedState) {
296
+ return
297
+ }
298
+ console.log(' --- loaded state history: ', loadedState.history.length, '---')
299
+ state = loadedState
300
+ const replay: AgentState[] = []
301
+ replay.push(loadedState)
302
+ while (loadedState.prev) {
303
+ loadedState = states[loadedState.prev]
304
+ replay.push(loadedState)
305
+ }
306
+ console.log('replay: ' + replay.length)
307
+ replay.reverse().forEach((state) => {
308
+ state.history.forEach((entry) => {
309
+ switch (entry.type) {
310
+ case 'message':
311
+ props.sendMessage(entry.payload)
312
+ break
313
+ case 'action':
314
+ props.sendAction(entry.payload)
315
+ break
316
+ case 'log':
317
+ props.sendLog(entry.payload)
318
+ break
319
+ }
320
+ })
321
+ })
322
+ scheduler?.setState(state.schedule)
323
+ if (!isInitialLoad) {
324
+ addState()
325
+ }
326
+ },
327
+ selectStep: async (step: string) => {
328
+ currentStep = step
329
+ const selectedStep = tracer.getSteps().find((s) => s.name === step)
330
+ const prompt = await selectedStep?.prompt.content()
331
+ if (prompt) {
332
+ await props.sendPrompt(prompt)
333
+ }
334
+ },
335
+ updateContext: async (context: Context) => {
336
+ console.log('--- update context ---')
337
+ ctx.swap(context)
338
+ props.contextPersistence.save(props.agentId, 'default', context)
339
+ },
340
+ updatePrompt: async (prompt: string) => {
341
+ console.log('--- update prompt ---')
342
+ const selectedStep = tracer.getSteps().find((s) => s.name === currentStep)
343
+ if (selectedStep?.prompt.type !== 'file') {
344
+ return
345
+ }
346
+ const promptPath = selectedStep?.prompt.path
347
+ // TODO replace with persistence
348
+ const path = join(props.basePath, selectedStep?.prompt.path)
349
+ fs.promises
350
+ .writeFile(path, prompt, 'utf-8')
351
+ .then(() => {
352
+ console.debug('FS: saved prompt:', promptPath)
353
+ })
354
+ .catch((error) => {
355
+ console.error('FS: failed to save prompt:', error)
356
+ })
357
+ },
358
+ triggerAction: async (action: string) => {
359
+ if (!agent) {
360
+ throw new Error('Cannot trigger action: agent is not initialized')
361
+ }
362
+ if (!scheduler) {
363
+ throw new Error('Cannot trigger action: scheduler is not initialized')
364
+ }
365
+ if ('isAssigned' in agent && (await agent.isAssigned())) {
366
+ try {
367
+ await scheduler.triggerAction(action)
368
+ } catch (e) {
369
+ await agent.onFatalError(e as any)
370
+ }
371
+ state.schedule = scheduler.serialize()
372
+ }
373
+ },
374
+ handleMessage: async (message: Message) => {
375
+ if (!agent) {
376
+ throw new Error('Cannot handle message: agent is not initialized')
377
+ }
378
+ console.log(' --- handle message --- ')
379
+ state.history.push({
380
+ type: 'message',
381
+ payload: message
382
+ })
383
+ if (isVoiceAgent(agent)) {
384
+ const reactAct = makeAction(sendAction, 'Agent', 'Streaming response')
385
+ await reactAct('started')
386
+ await agent.streamResponse()
387
+ await reactAct('completed')
388
+ } else {
389
+ // text agent
390
+ if (await agent.isAssigned()) {
391
+ try {
392
+ const reactAct = makeAction(sendAction, 'Agent', 'React on message')
393
+ await reactAct('started')
394
+ await agent.reactOnMessage()
395
+ await reactAct('completed')
396
+
397
+ const respondAct = makeAction(sendAction, 'Agent', 'Compose reply')
398
+ await respondAct('started')
399
+ await agent.respondToMessage()
400
+ await respondAct('completed')
401
+ } catch (e) {
402
+ await agent.onFatalError(e as any)
403
+ }
404
+ }
405
+ }
406
+ addState()
407
+ }
408
+ }
409
+ }
410
+
411
+ function isVoiceAgent(agent: TestAgent): agent is TestVoiceAgent {
412
+ return 'streamResponse' in agent
413
+ }
414
+
415
+ function createState(schedule: DelayedActions, prev: string | null) {
416
+ const state: AgentState = {
417
+ id: new Date().toISOString(),
418
+ name: new Date().toLocaleString(),
419
+ history: [],
420
+ schedule,
421
+ prev,
422
+ next: null
423
+ }
424
+
425
+ return state
426
+ }
427
+
428
+ function clone(obj: any) {
429
+ return JSON.parse(JSON.stringify(obj))
430
+ }
431
+
432
+ function userMessage(st: AgentState): string | undefined {
433
+ for (const entry of st.history) {
434
+ if (entry.type === 'message') {
435
+ const m = entry.payload as Message
436
+ if (m.sender === 'user') {
437
+ if (typeof (m as any).text === 'string' && (m as any).text.trim()) {
438
+ return (m as any).text
439
+ }
440
+ if (typeof (m as any).imageUrl === 'string' && (m as any).imageUrl.trim()) {
441
+ return `[image] ${(m as any).imageUrl}`
442
+ }
443
+ return JSON.stringify(m)
444
+ }
445
+ }
446
+ }
447
+ return undefined
448
+ }
449
+
450
+ async function loadSchemaFile(basePath: string, promptPath: string) {
451
+ const dir = path.dirname(promptPath)
452
+ const schemaPath = join(basePath, dir, 'schema.ts')
453
+ console.log('loadSchemaFile', schemaPath)
454
+ try {
455
+ return await fs.promises.readFile(schemaPath, 'utf-8')
456
+ } catch (e) {
457
+ console.error(e)
458
+ }
459
+ }