@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,80 @@
1
+ import { type AgentState } from './agents'
2
+ import fs from 'fs'
3
+ import path from 'path'
4
+
5
+ export interface StatePersistence {
6
+ load: (agentId: string) => Promise<AgentState[]>
7
+ save: (agentId: string, states: AgentState[]) => Promise<void>
8
+ }
9
+
10
+ export type Context = Record<string, any>
11
+
12
+ export interface ContextPersistence {
13
+ load: (agentId: string, contextName: string) => Promise<Context>
14
+ save: (agentId: string, contextName: string, context: Context) => Promise<void>
15
+ }
16
+
17
+ export const fsStatePersistence: StatePersistence = {
18
+ load: async (agentId: string) => {
19
+ const filePath = path.join('.', 'data', 'history', `${agentId}.json`)
20
+ return fsPersistence.load(filePath)
21
+ },
22
+ save: async (agentId: string, states: AgentState[]) => {
23
+ const filePath = path.join('.', 'data', 'history', `${agentId}.json`)
24
+ return fsPersistence.save(filePath, states)
25
+ }
26
+ }
27
+
28
+ export const fsContextPersistence: ContextPersistence = {
29
+ load: async (agentId: string, contextName: string) => {
30
+ const filePath = path.join('.', 'data', 'contexts', contextName, `${agentId}.json`)
31
+ return fsPersistence.load(filePath)
32
+ },
33
+ save: async (agentId: string, contextName: string, context: Context) => {
34
+ const filePath = path.join('.', 'data', 'contexts', contextName, `${agentId}.json`)
35
+ return fsPersistence.save(filePath, context)
36
+ }
37
+ }
38
+
39
+ const fsPersistence = {
40
+ load: async (filePath: string) => {
41
+ try {
42
+ const data = String(await fs.promises.readFile(filePath))
43
+ return data ? JSON.parse(data) : ''
44
+ } catch (error) {
45
+ if ((error as any).code === 'ENOENT') {
46
+ await createFileIfNotExists(filePath)
47
+ return ''
48
+ }
49
+ console.error('error loading: ', filePath, String(await fs.promises.readFile(filePath)))
50
+ throw error
51
+ }
52
+ },
53
+ // TODO replace with JSONObject | JSONArray
54
+ save: async (filePath: string, toSave: Object) => {
55
+ await createFileIfNotExists(filePath)
56
+ await fs.promises.writeFile(filePath, JSON.stringify(toSave, null, 2))
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Ensures that a file exists by creating any necessary parent directories and the file itself
62
+ * @param filePath Path to the file, may include nested directories
63
+ */
64
+ async function createFileIfNotExists(filePath: string) {
65
+ const directory = path.dirname(filePath)
66
+
67
+ try {
68
+ await fs.promises.access(directory)
69
+ } catch (error) {
70
+ // Directory doesn't exist, create it recursively
71
+ await fs.promises.mkdir(directory, { recursive: true })
72
+ }
73
+
74
+ try {
75
+ await fs.promises.access(filePath)
76
+ } catch (error) {
77
+ // File doesn't exist, create an empty file
78
+ await fs.promises.writeFile(filePath, '')
79
+ }
80
+ }
@@ -0,0 +1,30 @@
1
+ import { inspect } from 'util'
2
+ import type { LogEntry } from '../lib/ws-message'
3
+
4
+ export function createLogger(sendMessage: (msg: LogEntry) => void) {
5
+ const enableConsole = !!process.env.PRINT_CONSOLE
6
+ return {
7
+ log: (...args: any[]) => {
8
+ if (enableConsole) console.log(...args)
9
+ sendMessage({ message: prettyArgs(args), severity: 'INFO' })
10
+ },
11
+ debug: (...args: any[]) => {
12
+ if (enableConsole) console.debug(...args)
13
+ sendMessage({ message: prettyArgs(args), severity: 'DEBUG' })
14
+ },
15
+ error: (...args: any[]) => {
16
+ if (enableConsole) console.error(...args)
17
+ sendMessage({ message: prettyArgs(args), severity: 'ERROR' })
18
+ },
19
+ warn: (...args: any[]) => {
20
+ if (enableConsole) console.warn(...args)
21
+ sendMessage({ message: prettyArgs(args), severity: 'WARNING' })
22
+ }
23
+ }
24
+ }
25
+
26
+ function prettyArgs(args: any[]) {
27
+ return args
28
+ .map((arg) => (typeof arg === 'object' ? inspect(arg, { depth: null }) : arg))
29
+ .join(' ')
30
+ }
@@ -0,0 +1,76 @@
1
+ import type {
2
+ DelayedActions,
3
+ LogEntry,
4
+ AgentPayload,
5
+ AgentSateHeader,
6
+ WsMessage
7
+ } from '../lib/ws-message'
8
+ import { type Action, type Message } from '@recombine-ai/engine'
9
+ import { WebSocket } from 'ws'
10
+
11
+ export class MessageDispatcher {
12
+ constructor(private ws: WebSocket) {}
13
+
14
+ private sendWsMessage(message: WsMessage) {
15
+ if (message.channel === 'app-events') {
16
+ console.log('<-- ', message.channel, message.event.type)
17
+ } else if (message.channel === 'chat') {
18
+ console.log('<-- ', message.channel, message.message)
19
+ }
20
+ this.ws.send(JSON.stringify(message))
21
+ }
22
+
23
+ sendAction = (action: Action) => {
24
+ this.sendWsMessage({ channel: 'actions', action })
25
+ }
26
+
27
+ sendMessage = async (message: Message) => {
28
+ this.sendWsMessage({ channel: 'chat', message })
29
+ }
30
+
31
+ sendLog = async (message: LogEntry) => {
32
+ this.sendWsMessage({ channel: 'log', message })
33
+ }
34
+
35
+ sendSchedule = async (actions: DelayedActions) => {
36
+ this.sendWsMessage({
37
+ channel: 'app-events',
38
+ event: { type: 'delayed-actions-updated', actions }
39
+ })
40
+ }
41
+
42
+ sendAgentSelected = async (agent: AgentPayload) => {
43
+ this.sendWsMessage({
44
+ channel: 'app-events',
45
+ event: { type: 'agent-selected', agent }
46
+ })
47
+ }
48
+
49
+ sendContext = async (context: Record<string, any>) => {
50
+ this.sendWsMessage({
51
+ channel: 'app-events',
52
+ event: { type: 'context-updated', context }
53
+ })
54
+ }
55
+
56
+ sendPrompt = async (prompt: string) => {
57
+ this.sendWsMessage({
58
+ channel: 'app-events',
59
+ event: { type: 'prompt-updated', prompt }
60
+ })
61
+ }
62
+
63
+ sendLoaded = async (agents: string[]) => {
64
+ this.sendWsMessage({
65
+ channel: 'app-events',
66
+ event: { type: 'agents-loaded', agents }
67
+ })
68
+ }
69
+
70
+ sendUpdateStates = async (states: AgentSateHeader[]) => {
71
+ this.sendWsMessage({
72
+ channel: 'app-events',
73
+ event: { type: 'update-states', states }
74
+ })
75
+ }
76
+ }
@@ -0,0 +1,58 @@
1
+ import type { TestAgentFactory } from '@recombine-ai/engine'
2
+ import { glob } from 'glob'
3
+ import path from 'node:path'
4
+ import { pathToFileURL } from 'node:url'
5
+ import { readFile } from 'node:fs/promises'
6
+
7
+ export interface Project {
8
+ factories: Record<string, TestAgentFactory>
9
+ project: string
10
+ basePath: string
11
+ }
12
+
13
+ // TODO Drop this when all agents have bosun root
14
+ const legacyPath = 'src/bosun/workflows.ts'
15
+
16
+ export async function loadProjects() {
17
+ const projectRoot = process.env.BOSUN_NPX_RUN === 'true' ? process.cwd() : 'projects/*/'
18
+ const projectFiles = await glob(`${projectRoot}/package.json`, { absolute: true })
19
+ console.log('loadProjects, projectFiles: ', projectFiles)
20
+
21
+ const agentFactories: Project[] = []
22
+
23
+ for (const file of projectFiles) {
24
+ let pkg: any
25
+ try {
26
+ const raw = await readFile(file, 'utf8')
27
+ pkg = JSON.parse(raw)
28
+ } catch (e) {
29
+ console.error('Failed to read package.json:', file, e)
30
+ continue
31
+ }
32
+
33
+ const agentsRoot = pkg?.bosun?.root ?? legacyPath
34
+ const projectName = path.basename(path.dirname(file))
35
+ const agentsRootPath = path.resolve(path.dirname(file), agentsRoot)
36
+ const modUrl = pathToFileURL(agentsRootPath).href
37
+
38
+ let mod: any
39
+ try {
40
+ mod = await import(modUrl)
41
+ } catch (e) {
42
+ console.error('Failed to import agents module:', modUrl, e)
43
+ continue
44
+ }
45
+
46
+ const basePath = mod?.basePath ?? path.dirname(agentsRootPath)
47
+
48
+ if (projectName && mod?.default) {
49
+ agentFactories.push({
50
+ basePath,
51
+ project: projectName,
52
+ factories: mod.default as Record<string, TestAgentFactory>
53
+ })
54
+ }
55
+ }
56
+
57
+ return agentFactories
58
+ }
@@ -0,0 +1,89 @@
1
+ import type { Logger, Scheduler, SendAction } from '@recombine-ai/engine'
2
+ import type { DelayedActions } from '../lib/ws-message'
3
+
4
+ export type DelayedActionRegistry<T> = Record<
5
+ string,
6
+ { at: string | null; handler: (data: T) => Promise<unknown>; data: T | null }
7
+ >
8
+
9
+ export interface BosunScheduler extends Scheduler {
10
+ triggerAction: (actionName: string) => Promise<void>
11
+ serialize: () => DelayedActions
12
+ setState(state: DelayedActions): void
13
+ }
14
+
15
+ interface Props {
16
+ logger: Logger
17
+ sendAction: SendAction
18
+ onUpdate: (actions: DelayedActions) => void
19
+ }
20
+ export function createScheduler(
21
+ { logger, sendAction, onUpdate }: Props,
22
+ delayedActions: DelayedActionRegistry<string> = {}
23
+ ) {
24
+ const scheduler: BosunScheduler = {
25
+ clearAllPendingActions: async () => {
26
+ sendAction({
27
+ id: Math.random().toString(),
28
+ type: 'Scheduler',
29
+ state: 'completed',
30
+ message: 'Clear all pending actions'
31
+ })
32
+ Object.keys(delayedActions).forEach((actionName) => {
33
+ delayedActions[actionName] = {
34
+ at: null,
35
+ handler: delayedActions[actionName].handler,
36
+ data: null
37
+ }
38
+ })
39
+ console.log('clearAllPendingActions')
40
+ onUpdate(delayedActions)
41
+ },
42
+ registerAction(actionName, handler) {
43
+ delayedActions[actionName] = { at: null, handler, data: null }
44
+ // console.log('registerAction', actionName)
45
+ onUpdate(delayedActions)
46
+ // TODO should be generic data instead of string phone
47
+ return async (delay, phone) => {
48
+ const msg = `Scheduled action "${actionName}" at ${delay.toLocaleString()}`
49
+ delayedActions[actionName] = { at: delay.toLocaleString(), data: phone, handler }
50
+ // console.log('registerAction', actionName, delay)
51
+ onUpdate(delayedActions)
52
+ logger.log(msg)
53
+ sendAction({
54
+ id: Math.random().toString(),
55
+ type: 'Scheduler',
56
+ state: 'completed',
57
+ message: msg
58
+ })
59
+ }
60
+ },
61
+ triggerAction: async (actionName: string) => {
62
+ const action = delayedActions[actionName]
63
+ if (!action) {
64
+ logger.error(`Action "${actionName}" not found`)
65
+ return
66
+ }
67
+ const msg = `Triggered action "${actionName}" at ${new Date().toLocaleString()}`
68
+ logger.log(msg)
69
+ delayedActions[actionName] = { at: null, handler: action.handler, data: null }
70
+ console.log('triggerAction', actionName)
71
+ onUpdate(delayedActions)
72
+ if (!action.data) {
73
+ throw new Error('Action data is missing')
74
+ }
75
+ await action.handler(action.data)
76
+ },
77
+ serialize: () => delayedActions,
78
+ setState: (state) => {
79
+ for (const key in state) {
80
+ const oldSchedule = delayedActions[key]
81
+ if (oldSchedule) {
82
+ delayedActions[key] = { ...oldSchedule, ...state[key] }
83
+ }
84
+ }
85
+ onUpdate(delayedActions)
86
+ }
87
+ }
88
+ return scheduler
89
+ }
@@ -0,0 +1,77 @@
1
+ import 'dotenv/config'
2
+ import { WebSocketServer } from 'ws'
3
+ import type { WsMessage } from '../lib/ws-message'
4
+ import { createAgents } from './agents'
5
+ import { fsContextPersistence, fsStatePersistence } from './fs-persistence'
6
+ import { MessageDispatcher } from './message-dispatcher'
7
+ import type { StepTracer } from '@recombine-ai/engine'
8
+
9
+ const wss = new WebSocketServer({ port: 8080 })
10
+
11
+ wss.on('connection', async (ws) => {
12
+ console.log('----------------- Client connected -----------------')
13
+
14
+ const stepTracer: StepTracer = {
15
+ addStepTrace: (stepTrace) => {
16
+ // TODO: client doesn't react to step traces yet - but should
17
+ ws.send(
18
+ JSON.stringify({
19
+ channel: 'app-events',
20
+ event: { type: 'step-trace', stepTrace }
21
+ })
22
+ )
23
+ }
24
+ }
25
+ const agents = createAgents(
26
+ new MessageDispatcher(ws),
27
+ stepTracer,
28
+ fsStatePersistence,
29
+ fsContextPersistence
30
+ )
31
+
32
+ agents.load()
33
+
34
+ ws.on('message', async (event) => {
35
+ const msg = JSON.parse(event.toString()) as WsMessage
36
+ // @ts-ignore
37
+ console.log('--> ', msg.channel, msg.event?.type || '')
38
+ try {
39
+ switch (msg.channel) {
40
+ case 'app-events':
41
+ switch (msg.event.type) {
42
+ case 'select-agent':
43
+ await agents.select(msg.event.agent, msg.event.state)
44
+ break
45
+ case 'context-updated':
46
+ agents.updateContext(msg.event.context)
47
+ break
48
+ case 'prompt-updated':
49
+ agents.updatePrompt(msg.event.prompt)
50
+ break
51
+ case 'trigger-action':
52
+ agents.triggerAction(msg.event.action)
53
+ break
54
+ case 'step-selected':
55
+ agents.selectStep(msg.event.step)
56
+ break
57
+
58
+ default:
59
+ console.error(`Unknown event type: ${msg.event.type}`)
60
+ }
61
+ break
62
+ case 'chat':
63
+ await agents.handleMessage(msg.message)
64
+ break
65
+ default:
66
+ console.error(`Unknown channel: ${msg.channel}`)
67
+ }
68
+ } catch (error) {
69
+ console.error('Error handling message', error)
70
+ ws.send(JSON.stringify({ channel: 'error', message: String(error) }))
71
+ }
72
+ })
73
+ })
74
+
75
+ console.log('---------------------------------------')
76
+ console.log('WebSocket server started on ws://localhost:8080')
77
+ console.log('---------------------------------------')
@@ -0,0 +1,11 @@
1
+ import type { Logger, StepTraceDef } from '@recombine-ai/engine'
2
+
3
+ export function createTracer(logger: Logger) {
4
+ const steps: StepTraceDef[] = []
5
+ return {
6
+ addStep(def: StepTraceDef) {
7
+ steps.push(def)
8
+ },
9
+ getSteps: () => steps
10
+ }
11
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "extends": "./.svelte-kit/tsconfig.json",
3
+ "compilerOptions": {
4
+ "allowJs": true,
5
+ "checkJs": true,
6
+ "esModuleInterop": true,
7
+ "forceConsistentCasingInFileNames": true,
8
+ "resolveJsonModule": true,
9
+ "skipLibCheck": true,
10
+ "sourceMap": true,
11
+ "strict": true,
12
+ "moduleResolution": "bundler",
13
+ "types": ["svelte"],
14
+ "allowArbitraryExtensions": true
15
+ },
16
+ // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
17
+ // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
18
+ //
19
+ // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
20
+ // from the referenced tsconfig.json - TypeScript does not merge them in
21
+ }