@chrisjowen/wheelhouse 0.2.0 → 0.2.1

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 (836) hide show
  1. package/README.md +0 -5
  2. package/build/client/_app/immutable/assets/0.CF4I5T-G.css +1 -0
  3. package/build/client/_app/immutable/assets/0.CF4I5T-G.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.CF4I5T-G.css.gz +0 -0
  5. package/build/client/_app/immutable/chunks/-F7frqRp.js +1 -0
  6. package/build/client/_app/immutable/chunks/-F7frqRp.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/-F7frqRp.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/127nenIp.js +1 -0
  9. package/build/client/_app/immutable/chunks/127nenIp.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/127nenIp.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/2Frsddx8.js +1 -0
  12. package/build/client/_app/immutable/chunks/2Frsddx8.js.br +2 -0
  13. package/build/client/_app/immutable/chunks/2Frsddx8.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/4nLjU3dc.js +1 -0
  15. package/build/client/_app/immutable/chunks/4nLjU3dc.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/4nLjU3dc.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/6IjAKxKZ.js +1 -0
  18. package/build/client/_app/immutable/chunks/6IjAKxKZ.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/6IjAKxKZ.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/6JIb870c.js +1 -0
  21. package/build/client/_app/immutable/chunks/6JIb870c.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/6JIb870c.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/B8szyIrI.js +1 -0
  24. package/build/client/_app/immutable/chunks/B8szyIrI.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/B8szyIrI.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/BDL2L18I.js +1 -0
  27. package/build/client/_app/immutable/chunks/BDL2L18I.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/BDL2L18I.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/BJ_boZ6o.js +1 -0
  30. package/build/client/_app/immutable/chunks/BJ_boZ6o.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/BJ_boZ6o.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/BMOWf_e5.js +1 -0
  33. package/build/client/_app/immutable/chunks/BMOWf_e5.js.br +0 -0
  34. package/build/client/_app/immutable/chunks/BMOWf_e5.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/BOOJ9_kJ.js +6 -0
  36. package/build/client/_app/immutable/chunks/BOOJ9_kJ.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/BOOJ9_kJ.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/BPEcp4vD.js +1 -0
  39. package/build/client/_app/immutable/chunks/BPEcp4vD.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/BPEcp4vD.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/BTcSoYfa.js +1 -0
  42. package/build/client/_app/immutable/chunks/BTcSoYfa.js.br +2 -0
  43. package/build/client/_app/immutable/chunks/BTcSoYfa.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/BV_Ro843.js +1 -0
  45. package/build/client/_app/immutable/chunks/BV_Ro843.js.br +0 -0
  46. package/build/client/_app/immutable/chunks/BV_Ro843.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/BboI5NX2.js +1 -0
  48. package/build/client/_app/immutable/chunks/BboI5NX2.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/BboI5NX2.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/BnqQNG8I.js +1 -0
  51. package/build/client/_app/immutable/chunks/BnqQNG8I.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/BnqQNG8I.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/Bo3sLJjL.js +3 -0
  54. package/build/client/_app/immutable/chunks/Bo3sLJjL.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/Bo3sLJjL.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/Bpgn0RyM.js +1 -0
  57. package/build/client/_app/immutable/chunks/Bpgn0RyM.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/Bpgn0RyM.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/BrGclueo.js +1 -0
  60. package/build/client/_app/immutable/chunks/BrGclueo.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/BrGclueo.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/C-Ka3szt.js +1 -0
  63. package/build/client/_app/immutable/chunks/C-Ka3szt.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/C-Ka3szt.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/C-YySHlv.js +1 -0
  66. package/build/client/_app/immutable/chunks/C-YySHlv.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/C-YySHlv.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/C27rbWKB.js +1 -0
  69. package/build/client/_app/immutable/chunks/C27rbWKB.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/C27rbWKB.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/CA1hL-S6.js +1 -0
  72. package/build/client/_app/immutable/chunks/CA1hL-S6.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/CA1hL-S6.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/CFdPbSqS.js +1 -0
  75. package/build/client/_app/immutable/chunks/CFdPbSqS.js.br +1 -0
  76. package/build/client/_app/immutable/chunks/CFdPbSqS.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/CJGygju8.js +1 -0
  78. package/build/client/_app/immutable/chunks/CJGygju8.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/CJGygju8.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/CLdaRjQZ.js +1 -0
  81. package/build/client/_app/immutable/chunks/CLdaRjQZ.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/CLdaRjQZ.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/CS3TvEHF.js +1 -0
  84. package/build/client/_app/immutable/chunks/CS3TvEHF.js.br +0 -0
  85. package/build/client/_app/immutable/chunks/CS3TvEHF.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/CSfYMiqF.js +8 -0
  87. package/build/client/_app/immutable/chunks/CSfYMiqF.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/CSfYMiqF.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/CW_pu1E1.js +1 -0
  90. package/build/client/_app/immutable/chunks/CW_pu1E1.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/CW_pu1E1.js.gz +0 -0
  92. package/build/client/_app/immutable/chunks/CZYAayp0.js +2 -0
  93. package/build/client/_app/immutable/chunks/CZYAayp0.js.br +0 -0
  94. package/build/client/_app/immutable/chunks/CZYAayp0.js.gz +0 -0
  95. package/build/client/_app/immutable/chunks/Cap_NU8Z.js +1 -0
  96. package/build/client/_app/immutable/chunks/Cap_NU8Z.js.br +0 -0
  97. package/build/client/_app/immutable/chunks/Cap_NU8Z.js.gz +0 -0
  98. package/build/client/_app/immutable/chunks/Cf6ZwSDE.js +1 -0
  99. package/build/client/_app/immutable/chunks/Cf6ZwSDE.js.br +0 -0
  100. package/build/client/_app/immutable/chunks/Cf6ZwSDE.js.gz +0 -0
  101. package/build/client/_app/immutable/chunks/Ch8_zhFw.js +1 -0
  102. package/build/client/_app/immutable/chunks/Ch8_zhFw.js.br +0 -0
  103. package/build/client/_app/immutable/chunks/Ch8_zhFw.js.gz +0 -0
  104. package/build/client/_app/immutable/chunks/Cjji8YKo.js +1 -0
  105. package/build/client/_app/immutable/chunks/Cjji8YKo.js.br +0 -0
  106. package/build/client/_app/immutable/chunks/Cjji8YKo.js.gz +0 -0
  107. package/build/client/_app/immutable/chunks/Ckfspn2s.js +1 -0
  108. package/build/client/_app/immutable/chunks/Ckfspn2s.js.br +0 -0
  109. package/build/client/_app/immutable/chunks/Ckfspn2s.js.gz +0 -0
  110. package/build/client/_app/immutable/chunks/CpkLqQ7l.js +1 -0
  111. package/build/client/_app/immutable/chunks/CpkLqQ7l.js.br +0 -0
  112. package/build/client/_app/immutable/chunks/CpkLqQ7l.js.gz +0 -0
  113. package/build/client/_app/immutable/chunks/Crzhp-x5.js +5 -0
  114. package/build/client/_app/immutable/chunks/Crzhp-x5.js.br +0 -0
  115. package/build/client/_app/immutable/chunks/Crzhp-x5.js.gz +0 -0
  116. package/build/client/_app/immutable/chunks/Cwah_dMw.js +1 -0
  117. package/build/client/_app/immutable/chunks/Cwah_dMw.js.br +0 -0
  118. package/build/client/_app/immutable/chunks/Cwah_dMw.js.gz +0 -0
  119. package/build/client/_app/immutable/chunks/CzsfD4hc.js +1 -0
  120. package/build/client/_app/immutable/chunks/CzsfD4hc.js.br +2 -0
  121. package/build/client/_app/immutable/chunks/CzsfD4hc.js.gz +0 -0
  122. package/build/client/_app/immutable/chunks/D32oVJ_N.js +1 -0
  123. package/build/client/_app/immutable/chunks/D32oVJ_N.js.br +1 -0
  124. package/build/client/_app/immutable/chunks/D32oVJ_N.js.gz +0 -0
  125. package/build/client/_app/immutable/chunks/D4sWXBG7.js +1 -0
  126. package/build/client/_app/immutable/chunks/D4sWXBG7.js.br +0 -0
  127. package/build/client/_app/immutable/chunks/D4sWXBG7.js.gz +0 -0
  128. package/build/client/_app/immutable/chunks/DBs-gHlm.js +2 -0
  129. package/build/client/_app/immutable/chunks/DBs-gHlm.js.br +0 -0
  130. package/build/client/_app/immutable/chunks/DBs-gHlm.js.gz +0 -0
  131. package/build/client/_app/immutable/chunks/DEFXAgPm.js +1 -0
  132. package/build/client/_app/immutable/chunks/DEFXAgPm.js.br +0 -0
  133. package/build/client/_app/immutable/chunks/DEFXAgPm.js.gz +0 -0
  134. package/build/client/_app/immutable/chunks/DHbme8uq.js +1 -0
  135. package/build/client/_app/immutable/chunks/DHbme8uq.js.br +0 -0
  136. package/build/client/_app/immutable/chunks/DHbme8uq.js.gz +0 -0
  137. package/build/client/_app/immutable/chunks/DMkU8x7K.js +1 -0
  138. package/build/client/_app/immutable/chunks/DMkU8x7K.js.br +0 -0
  139. package/build/client/_app/immutable/chunks/DMkU8x7K.js.gz +0 -0
  140. package/build/client/_app/immutable/chunks/DRIYWZlo.js +1 -0
  141. package/build/client/_app/immutable/chunks/DRIYWZlo.js.br +1 -0
  142. package/build/client/_app/immutable/chunks/DRIYWZlo.js.gz +0 -0
  143. package/build/client/_app/immutable/chunks/DUCO61Nb.js +1 -0
  144. package/build/client/_app/immutable/chunks/DUCO61Nb.js.br +0 -0
  145. package/build/client/_app/immutable/chunks/DUCO61Nb.js.gz +0 -0
  146. package/build/client/_app/immutable/chunks/DXz8WA1c.js +1 -0
  147. package/build/client/_app/immutable/chunks/DXz8WA1c.js.br +0 -0
  148. package/build/client/_app/immutable/chunks/DXz8WA1c.js.gz +0 -0
  149. package/build/client/_app/immutable/chunks/D_4WLGwX.js +1 -0
  150. package/build/client/_app/immutable/chunks/D_4WLGwX.js.br +0 -0
  151. package/build/client/_app/immutable/chunks/D_4WLGwX.js.gz +0 -0
  152. package/build/client/_app/immutable/chunks/D_5WjoQx.js +1 -0
  153. package/build/client/_app/immutable/chunks/D_5WjoQx.js.br +0 -0
  154. package/build/client/_app/immutable/chunks/D_5WjoQx.js.gz +0 -0
  155. package/build/client/_app/immutable/chunks/D_C2ZtkZ.js +1 -0
  156. package/build/client/_app/immutable/chunks/D_C2ZtkZ.js.br +0 -0
  157. package/build/client/_app/immutable/chunks/D_C2ZtkZ.js.gz +0 -0
  158. package/build/client/_app/immutable/chunks/De5PDvrQ.js +1 -0
  159. package/build/client/_app/immutable/chunks/De5PDvrQ.js.br +0 -0
  160. package/build/client/_app/immutable/chunks/De5PDvrQ.js.gz +0 -0
  161. package/build/client/_app/immutable/chunks/DhWdMQ8J.js +1 -0
  162. package/build/client/_app/immutable/chunks/DhWdMQ8J.js.br +0 -0
  163. package/build/client/_app/immutable/chunks/DhWdMQ8J.js.gz +0 -0
  164. package/build/client/_app/immutable/chunks/DiCw6gM6.js +1 -0
  165. package/build/client/_app/immutable/chunks/DiCw6gM6.js.br +0 -0
  166. package/build/client/_app/immutable/chunks/DiCw6gM6.js.gz +0 -0
  167. package/build/client/_app/immutable/chunks/JhgT3vN-.js +1 -0
  168. package/build/client/_app/immutable/chunks/JhgT3vN-.js.br +0 -0
  169. package/build/client/_app/immutable/chunks/JhgT3vN-.js.gz +0 -0
  170. package/build/client/_app/immutable/chunks/KA4C2mxd.js +1 -0
  171. package/build/client/_app/immutable/chunks/KA4C2mxd.js.br +0 -0
  172. package/build/client/_app/immutable/chunks/KA4C2mxd.js.gz +0 -0
  173. package/build/client/_app/immutable/chunks/MoZXz26A.js +2 -0
  174. package/build/client/_app/immutable/chunks/MoZXz26A.js.br +0 -0
  175. package/build/client/_app/immutable/chunks/MoZXz26A.js.gz +0 -0
  176. package/build/client/_app/immutable/chunks/PMi1c_Z5.js +2 -0
  177. package/build/client/_app/immutable/chunks/PMi1c_Z5.js.br +0 -0
  178. package/build/client/_app/immutable/chunks/PMi1c_Z5.js.gz +0 -0
  179. package/build/client/_app/immutable/chunks/Pd3Oo-LF.js +1 -0
  180. package/build/client/_app/immutable/chunks/Pd3Oo-LF.js.br +0 -0
  181. package/build/client/_app/immutable/chunks/Pd3Oo-LF.js.gz +0 -0
  182. package/build/client/_app/immutable/chunks/RXXzt1fg.js +1 -0
  183. package/build/client/_app/immutable/chunks/RXXzt1fg.js.br +0 -0
  184. package/build/client/_app/immutable/chunks/RXXzt1fg.js.gz +0 -0
  185. package/build/client/_app/immutable/chunks/WfixpLtG.js +1 -0
  186. package/build/client/_app/immutable/chunks/WfixpLtG.js.br +2 -0
  187. package/build/client/_app/immutable/chunks/WfixpLtG.js.gz +0 -0
  188. package/build/client/_app/immutable/chunks/YB3ysJRI.js +1 -0
  189. package/build/client/_app/immutable/chunks/YB3ysJRI.js.br +0 -0
  190. package/build/client/_app/immutable/chunks/YB3ysJRI.js.gz +0 -0
  191. package/build/client/_app/immutable/chunks/YUajk67G.js +1 -0
  192. package/build/client/_app/immutable/chunks/YUajk67G.js.br +0 -0
  193. package/build/client/_app/immutable/chunks/YUajk67G.js.gz +0 -0
  194. package/build/client/_app/immutable/chunks/a2ZeDrXd.js +1 -0
  195. package/build/client/_app/immutable/chunks/a2ZeDrXd.js.br +0 -0
  196. package/build/client/_app/immutable/chunks/a2ZeDrXd.js.gz +0 -0
  197. package/build/client/_app/immutable/chunks/is3b6W5i.js +1 -0
  198. package/build/client/_app/immutable/chunks/is3b6W5i.js.br +0 -0
  199. package/build/client/_app/immutable/chunks/is3b6W5i.js.gz +0 -0
  200. package/build/client/_app/immutable/chunks/kM8ObZQs.js +62 -0
  201. package/build/client/_app/immutable/chunks/kM8ObZQs.js.br +0 -0
  202. package/build/client/_app/immutable/chunks/kM8ObZQs.js.gz +0 -0
  203. package/build/client/_app/immutable/chunks/qep4C0YL.js +2 -0
  204. package/build/client/_app/immutable/chunks/qep4C0YL.js.br +0 -0
  205. package/build/client/_app/immutable/chunks/qep4C0YL.js.gz +0 -0
  206. package/build/client/_app/immutable/chunks/sSJbwAI9.js +1 -0
  207. package/build/client/_app/immutable/chunks/sSJbwAI9.js.br +0 -0
  208. package/build/client/_app/immutable/chunks/sSJbwAI9.js.gz +0 -0
  209. package/build/client/_app/immutable/chunks/vAxbu4w9.js +1 -0
  210. package/build/client/_app/immutable/chunks/vAxbu4w9.js.br +0 -0
  211. package/build/client/_app/immutable/chunks/vAxbu4w9.js.gz +0 -0
  212. package/build/client/_app/immutable/chunks/zfjlAER1.js +1 -0
  213. package/build/client/_app/immutable/chunks/zfjlAER1.js.br +0 -0
  214. package/build/client/_app/immutable/chunks/zfjlAER1.js.gz +0 -0
  215. package/build/client/_app/immutable/chunks/zrknQfzW.js +1 -0
  216. package/build/client/_app/immutable/chunks/zrknQfzW.js.br +0 -0
  217. package/build/client/_app/immutable/chunks/zrknQfzW.js.gz +0 -0
  218. package/build/client/_app/immutable/entry/app.BVW8a1Lc.js +2 -0
  219. package/build/client/_app/immutable/entry/app.BVW8a1Lc.js.br +0 -0
  220. package/build/client/_app/immutable/entry/app.BVW8a1Lc.js.gz +0 -0
  221. package/build/client/_app/immutable/entry/start.DfAhzzBh.js +1 -0
  222. package/build/client/_app/immutable/entry/start.DfAhzzBh.js.br +0 -0
  223. package/build/client/_app/immutable/entry/start.DfAhzzBh.js.gz +0 -0
  224. package/build/client/_app/immutable/nodes/0.CByWY48H.js +8 -0
  225. package/build/client/_app/immutable/nodes/0.CByWY48H.js.br +0 -0
  226. package/build/client/_app/immutable/nodes/0.CByWY48H.js.gz +0 -0
  227. package/build/client/_app/immutable/nodes/1.BQxkVmZR.js +1 -0
  228. package/build/client/_app/immutable/nodes/1.BQxkVmZR.js.br +0 -0
  229. package/build/client/_app/immutable/nodes/1.BQxkVmZR.js.gz +0 -0
  230. package/build/client/_app/immutable/nodes/10.DF_JvWer.js +3 -0
  231. package/build/client/_app/immutable/nodes/10.DF_JvWer.js.br +0 -0
  232. package/build/client/_app/immutable/nodes/10.DF_JvWer.js.gz +0 -0
  233. package/build/client/_app/immutable/nodes/11.Da20qmQ1.js +1 -0
  234. package/build/client/_app/immutable/nodes/11.Da20qmQ1.js.br +0 -0
  235. package/build/client/_app/immutable/nodes/11.Da20qmQ1.js.gz +0 -0
  236. package/build/client/_app/immutable/nodes/12.DeNfg3Jn.js +14 -0
  237. package/build/client/_app/immutable/nodes/12.DeNfg3Jn.js.br +0 -0
  238. package/build/client/_app/immutable/nodes/12.DeNfg3Jn.js.gz +0 -0
  239. package/build/client/_app/immutable/nodes/13.Vg3b6KJ-.js +150 -0
  240. package/build/client/_app/immutable/nodes/13.Vg3b6KJ-.js.br +0 -0
  241. package/build/client/_app/immutable/nodes/13.Vg3b6KJ-.js.gz +0 -0
  242. package/build/client/_app/immutable/nodes/15.DNQBbVNt.js +11 -0
  243. package/build/client/_app/immutable/nodes/15.DNQBbVNt.js.br +0 -0
  244. package/build/client/_app/immutable/nodes/15.DNQBbVNt.js.gz +0 -0
  245. package/build/client/_app/immutable/nodes/16.PXR5gryE.js +9 -0
  246. package/build/client/_app/immutable/nodes/16.PXR5gryE.js.br +0 -0
  247. package/build/client/_app/immutable/nodes/16.PXR5gryE.js.gz +0 -0
  248. package/build/client/_app/immutable/nodes/17.D6wwTzw0.js +2 -0
  249. package/build/client/_app/immutable/nodes/17.D6wwTzw0.js.br +0 -0
  250. package/build/client/_app/immutable/nodes/17.D6wwTzw0.js.gz +0 -0
  251. package/build/client/_app/immutable/nodes/18.BYPKt-Zj.js +6 -0
  252. package/build/client/_app/immutable/nodes/18.BYPKt-Zj.js.br +0 -0
  253. package/build/client/_app/immutable/nodes/18.BYPKt-Zj.js.gz +0 -0
  254. package/build/client/_app/immutable/nodes/19.eOj7WL-z.js +1 -0
  255. package/build/client/_app/immutable/nodes/19.eOj7WL-z.js.br +0 -0
  256. package/build/client/_app/immutable/nodes/19.eOj7WL-z.js.gz +0 -0
  257. package/build/client/_app/immutable/nodes/2.iGkQWI53.js +14 -0
  258. package/build/client/_app/immutable/nodes/2.iGkQWI53.js.br +0 -0
  259. package/build/client/_app/immutable/nodes/2.iGkQWI53.js.gz +0 -0
  260. package/build/client/_app/immutable/nodes/20.COEvYhSn.js +6 -0
  261. package/build/client/_app/immutable/nodes/20.COEvYhSn.js.br +0 -0
  262. package/build/client/_app/immutable/nodes/20.COEvYhSn.js.gz +0 -0
  263. package/build/client/_app/immutable/nodes/3.DgV1VyBd.js +5 -0
  264. package/build/client/_app/immutable/nodes/3.DgV1VyBd.js.br +0 -0
  265. package/build/client/_app/immutable/nodes/3.DgV1VyBd.js.gz +0 -0
  266. package/build/client/_app/immutable/nodes/4.BFV94RXa.js +1 -0
  267. package/build/client/_app/immutable/nodes/4.BFV94RXa.js.br +0 -0
  268. package/build/client/_app/immutable/nodes/4.BFV94RXa.js.gz +0 -0
  269. package/build/client/_app/immutable/nodes/5.DXQSdCv2.js +1 -0
  270. package/build/client/_app/immutable/nodes/5.DXQSdCv2.js.br +0 -0
  271. package/build/client/_app/immutable/nodes/5.DXQSdCv2.js.gz +0 -0
  272. package/build/client/_app/immutable/nodes/6.BVvx9mug.js +7 -0
  273. package/build/client/_app/immutable/nodes/6.BVvx9mug.js.br +0 -0
  274. package/build/client/_app/immutable/nodes/6.BVvx9mug.js.gz +0 -0
  275. package/build/client/_app/immutable/nodes/7.bgzyRDkn.js +4 -0
  276. package/build/client/_app/immutable/nodes/7.bgzyRDkn.js.br +0 -0
  277. package/build/client/_app/immutable/nodes/7.bgzyRDkn.js.gz +0 -0
  278. package/build/client/_app/immutable/nodes/9.BjRlvbf0.js +1 -0
  279. package/build/client/_app/immutable/nodes/9.BjRlvbf0.js.br +0 -0
  280. package/build/client/_app/immutable/nodes/9.BjRlvbf0.js.gz +0 -0
  281. package/build/client/_app/version.json +1 -1
  282. package/build/client/_app/version.json.br +0 -0
  283. package/build/client/_app/version.json.gz +0 -0
  284. package/build/handler.js +4 -4
  285. package/build/index.js +4 -4
  286. package/build/server/chunks/chunks/DecisionCard.js-CvR7ULLC.js +461 -0
  287. package/build/server/chunks/chunks/EtaLine.js-CtcOSLzV.js +79 -0
  288. package/build/server/chunks/chunks/EveryProjectSwitch.js-DWet6DU1.js +200 -0
  289. package/build/server/chunks/chunks/ProjectBanner.js-19PQF0LD.js +111 -0
  290. package/build/server/chunks/chunks/ResizableRail.js-BmMh1aVL.js +801 -0
  291. package/build/server/chunks/chunks/chat.svelte.js-b0uQXOge.js +545 -0
  292. package/build/server/chunks/chunks/detail.js-9VHqIqfd.js +121 -0
  293. package/build/server/chunks/chunks/internal.js-CxWYnS4m.js +146 -0
  294. package/build/server/chunks/chunks/keys.js-iHygUPeb.js +20 -0
  295. package/build/server/chunks/chunks/live.svelte.js-DavJCZVs.js +238 -0
  296. package/build/server/chunks/chunks/pullrequests.js-CWGxTy8C.js +68 -0
  297. package/build/server/chunks/chunks/pullrequests2.js-CCzk2sqm.js +12 -0
  298. package/build/server/chunks/chunks/repo.js-DU-pK5Nw.js +33 -0
  299. package/build/server/chunks/chunks/runtime.js-4msnOWzY.js +15335 -0
  300. package/build/server/chunks/chunks/service.js-DZR6CoEI.js +914 -0
  301. package/build/server/chunks/chunks/slots.svelte.js-CLIV5nwM.js +34 -0
  302. package/build/server/chunks/chunks/store.js-ByNV-OHV.js +323 -0
  303. package/build/server/chunks/chunks/uploads.js-4OZ09onz.js +107 -0
  304. package/build/server/chunks/chunks/view.js-BPycofxX.js +76 -0
  305. package/build/server/chunks/entries/endpoints/api/apps/_op_/_server.ts.js-DqDt7aNN.js +90 -0
  306. package/build/server/chunks/entries/endpoints/api/events/_server.ts.js-D-mwPJ4E.js +100 -0
  307. package/build/server/chunks/entries/endpoints/api/files/_server.ts.js-DTl4eBah.js +49 -0
  308. package/build/server/chunks/entries/endpoints/api/firstmate/chat/_server.ts.js-HFyCRRIx.js +83 -0
  309. package/build/server/chunks/entries/endpoints/api/firstmate/commands/_server.ts.js-CO7kITUs.js +119 -0
  310. package/build/server/chunks/entries/endpoints/api/firstmate/dismiss/_server.ts.js-CTdaQTFX.js +45 -0
  311. package/build/server/chunks/entries/endpoints/api/firstmate/input/_server.ts.js-DKxlZSX3.js +51 -0
  312. package/build/server/chunks/entries/endpoints/api/firstmate/interrupt/_server.ts.js-Bp4CsZQ9.js +44 -0
  313. package/build/server/chunks/entries/endpoints/api/firstmate/messages/_server.ts.js--Ti6GfKf.js +66 -0
  314. package/build/server/chunks/entries/endpoints/api/firstmate/pick/_server.ts.js-DudckFen.js +54 -0
  315. package/build/server/chunks/entries/endpoints/api/firstmate/start/_server.ts.js-H09D-uaY.js +44 -0
  316. package/build/server/chunks/entries/endpoints/api/firstmate/uploads/_day_/_id_/_name_/_server.ts.js-B1jFlBJC.js +31 -0
  317. package/build/server/chunks/entries/endpoints/api/firstmate/uploads/_server.ts.js-B2h2nWSK.js +39 -0
  318. package/build/server/chunks/entries/endpoints/api/fleet/_server.ts.js-BMcNM7_1.js +36 -0
  319. package/build/server/chunks/entries/endpoints/api/gateway/_server.ts.js-CVc8gLps.js +100 -0
  320. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-BcVLJq4f.js +36 -0
  321. package/build/server/chunks/entries/endpoints/api/inbox/_server.ts.js-DKqY2sWJ.js +60 -0
  322. package/build/server/chunks/entries/endpoints/api/inbox/report/_server.ts.js-a4l41m0P.js +51 -0
  323. package/build/server/chunks/entries/endpoints/api/insights/_server.ts.js-Cr_YrS6N.js +36 -0
  324. package/build/server/chunks/entries/endpoints/api/plugins/_plugin_/config/_server.ts.js-CZUfk-OY.js +71 -0
  325. package/build/server/chunks/entries/endpoints/api/plugins/_plugin_/load/_server.ts.js-CPBW7xEV.js +23 -0
  326. package/build/server/chunks/entries/endpoints/api/plugins/_plugin_/ui/_...path_/_server.ts.js-Dg2Sbcgq.js +59 -0
  327. package/build/server/chunks/entries/endpoints/api/plugins/_plugin_/update/_server.ts.js-C9LXRfKc.js +35 -0
  328. package/build/server/chunks/entries/endpoints/api/plugins/_server.ts.js-C7RCx22P.js +36 -0
  329. package/build/server/chunks/entries/endpoints/api/plugins/inspect/_server.ts.js-CSPS_3gF.js +35 -0
  330. package/build/server/chunks/entries/endpoints/api/plugins/install/_server.ts.js-DWxejv3K.js +38 -0
  331. package/build/server/chunks/entries/endpoints/api/plugins/updates/_server.ts.js-BYYXspMy.js +23 -0
  332. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/_server.ts.js-BAPnLV-3.js +41 -0
  333. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/commands/_server.ts.js-OYV-kJGk.js +50 -0
  334. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/consent/_server.ts.js-DovNLcSw.js +62 -0
  335. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/draft/_server.ts.js-CYU1VGUf.js +49 -0
  336. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/file/_server.ts.js-CgCzXBIB.js +72 -0
  337. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/test/_server.ts.js-BZ2S7d9x.js +55 -0
  338. package/build/server/chunks/entries/endpoints/api/services/_server.ts.js-CMVRpWqZ.js +55 -0
  339. package/build/server/chunks/entries/endpoints/api/slots/_server.ts.js-BhhLjW17.js +44 -0
  340. package/build/server/chunks/entries/endpoints/api/tasks/_id_/_server.ts.js-Bukv4dSq.js +41 -0
  341. package/build/server/chunks/entries/endpoints/api/tasks/_id_/artifacts/_...name_/_server.ts.js-BsHRnnS7.js +60 -0
  342. package/build/server/chunks/entries/endpoints/api/tasks/_id_/diff/_server.ts.js-B9eygpXJ.js +48 -0
  343. package/build/server/chunks/entries/endpoints/api/tasks/_id_/output/_server.ts.js-o7w8BRpJ.js +93 -0
  344. package/build/server/chunks/entries/endpoints/api/tasks/_id_/preview/_server.ts.js-BaXho4qD.js +110 -0
  345. package/build/server/chunks/entries/endpoints/api/vault/_server.ts.js-CagOXKfp.js +54 -0
  346. package/build/server/chunks/entries/endpoints/api/wheelhouse/update/_server.ts.js-CAcsCtS9.js +23 -0
  347. package/build/server/chunks/entries/endpoints/api/wheelhouse/upgrade/_server.ts.js-CSlKdXcw.js +23 -0
  348. package/build/server/chunks/entries/endpoints/tasks/_id_/review/_server.ts.js-OEWlGF9d.js +40 -0
  349. package/build/server/chunks/entries/hooks.server.js-BeVVnKyB.js +54 -0
  350. package/build/server/chunks/entries/pages/_layout.server.ts.js-CFzh0bb7.js +24 -0
  351. package/build/server/chunks/entries/pages/_layout.svelte.js-BQyvY_vc.js +8746 -0
  352. package/build/server/chunks/entries/pages/_page.server.ts.js-DqT-OIkV.js +16 -0
  353. package/build/server/chunks/entries/pages/_page.svelte.js-DMDSI7Tw.js +2220 -0
  354. package/build/server/chunks/entries/pages/decisions/_page.server.ts.js-CGjy1S4B.js +11 -0
  355. package/build/server/chunks/entries/pages/files/_page.server.ts.js-D6VF_7EK.js +17 -0
  356. package/build/server/chunks/entries/pages/harbour/_page.server.ts.js-Cbei7bFp.js +46 -0
  357. package/build/server/chunks/entries/pages/harbour/_page.svelte.js-D8RsASWB.js +580 -0
  358. package/build/server/chunks/entries/pages/headroom/_page.server.ts.js-DtFxpkIR.js +11 -0
  359. package/build/server/chunks/entries/pages/inbox/_page.svelte.js-Bn5pWt__.js +185 -0
  360. package/build/server/chunks/entries/pages/plugins/_plugin_/_page_/_page.server.ts.js-CybSuVD4.js +16 -0
  361. package/build/server/chunks/entries/pages/plugins/_plugin_/_page_/_page.svelte.js-DMPiRdLN.js +52 -0
  362. package/build/server/chunks/entries/pages/projects/_id_/_page.server.ts.js-CroKCV4u.js +23 -0
  363. package/build/server/chunks/entries/pages/projects/_id_/_page.svelte.js-_DNqdqJc.js +976 -0
  364. package/build/server/chunks/entries/pages/projects/_id_/_plugin_/_tab_/_page.server.ts.js-Vb8907y2.js +21 -0
  365. package/build/server/chunks/entries/pages/projects/_id_/_plugin_/_tab_/_page.svelte.js-BLTTCa_O.js +74 -0
  366. package/build/server/chunks/entries/pages/projects/_id_/passage/_page.server.ts.js-Cor2JYpv.js +27 -0
  367. package/build/server/chunks/entries/pages/projects/_id_/passage/_page.svelte.js-BTgNmS_4.js +433 -0
  368. package/build/server/chunks/entries/pages/projects/_id_/passage/edit/_page.server.ts.js-Dtvwihv0.js +15 -0
  369. package/build/server/chunks/entries/pages/projects/_id_/passage/edit/_page.svelte.js-DuitNXlV.js +1880 -0
  370. package/build/server/chunks/entries/pages/settings/gateway/_page.server.ts.js-BqNGCjSG.js +11 -0
  371. package/build/server/chunks/entries/pages/settings/plugins/_page.server.ts.js-CQ9DVI4s.js +19 -0
  372. package/build/server/chunks/entries/pages/settings/plugins/_page.svelte.js-U1GPMY59.js +1847 -0
  373. package/build/server/chunks/entries/pages/settings/plugins/_plugin_/_page.server.ts.js-C_YGnjmx.js +17 -0
  374. package/build/server/chunks/entries/pages/settings/plugins/_plugin_/_page.svelte.js-C_gSykyo.js +220 -0
  375. package/build/server/chunks/entries/pages/tasks/_id_/_page.server.ts.js-C-lePqYN.js +25 -0
  376. package/build/server/chunks/entries/pages/tasks/_id_/_page.svelte.js-Ds1ivkgU.js +2142 -0
  377. package/build/server/chunks/entries/pages/tasks/_id_/doc/_page.server.ts.js-DH7nAB6U.js +24 -0
  378. package/build/server/chunks/entries/pages/time/_page.server.ts.js-Bfe-SSUC.js +11 -0
  379. package/build/server/chunks/handler-CViJcHBG.js +1474 -0
  380. package/build/server/chunks/index.js-DO8YdJ_5.js +4296 -0
  381. package/build/server/chunks/manifest.js-DJYckUS-.js +501 -0
  382. package/build/server/chunks/nodes/0.js-DZ4kFPNe.js +41 -0
  383. package/build/server/chunks/nodes/1.js-CLGjQTlS.js +9 -0
  384. package/build/server/chunks/nodes/10.js-BN4Clcbg.js +43 -0
  385. package/build/server/chunks/nodes/11.js-DWB1yiJ6.js +42 -0
  386. package/build/server/chunks/nodes/12.js-CA99401F.js +43 -0
  387. package/build/server/chunks/nodes/13.js-YsHE2JFx.js +42 -0
  388. package/build/server/chunks/nodes/15.js-CLdnAt4r.js +41 -0
  389. package/build/server/chunks/nodes/16.js-B-2Iq3Ye.js +41 -0
  390. package/build/server/chunks/nodes/17.js-BTM2TsmR.js +44 -0
  391. package/build/server/chunks/nodes/18.js-D3m0ATU2.js +42 -0
  392. package/build/server/chunks/nodes/19.js-C3dO33LH.js +42 -0
  393. package/build/server/chunks/nodes/2.js-51wjL-91.js +41 -0
  394. package/build/server/chunks/nodes/20.js-e41qDeY7.js +41 -0
  395. package/build/server/chunks/nodes/3.js-3JUV-tiI.js +41 -0
  396. package/build/server/chunks/nodes/4.js-CI6WGOXE.js +41 -0
  397. package/build/server/chunks/nodes/5.js-tZ-lWwlu.js +45 -0
  398. package/build/server/chunks/nodes/6.js-BgQesykU.js +41 -0
  399. package/build/server/chunks/nodes/7.js-CFXzqkNQ.js +9 -0
  400. package/build/server/chunks/nodes/9.js-CUQI6T4W.js +41 -0
  401. package/dist/cli.js +2 -12
  402. package/dist/wh-vault.js +1 -1
  403. package/package.json +1 -1
  404. package/build/client/_app/immutable/assets/0.CKUND0qa.css +0 -1
  405. package/build/client/_app/immutable/assets/0.CKUND0qa.css.br +0 -0
  406. package/build/client/_app/immutable/assets/0.CKUND0qa.css.gz +0 -0
  407. package/build/client/_app/immutable/assets/20.KLSHp5Yu.css +0 -1
  408. package/build/client/_app/immutable/assets/20.KLSHp5Yu.css.br +0 -0
  409. package/build/client/_app/immutable/assets/20.KLSHp5Yu.css.gz +0 -0
  410. package/build/client/_app/immutable/chunks/08Q01-Mc.js +0 -1
  411. package/build/client/_app/immutable/chunks/08Q01-Mc.js.br +0 -0
  412. package/build/client/_app/immutable/chunks/08Q01-Mc.js.gz +0 -0
  413. package/build/client/_app/immutable/chunks/0TvUxbRv.js +0 -1
  414. package/build/client/_app/immutable/chunks/0TvUxbRv.js.br +0 -2
  415. package/build/client/_app/immutable/chunks/0TvUxbRv.js.gz +0 -0
  416. package/build/client/_app/immutable/chunks/3Of2kn6M.js +0 -5
  417. package/build/client/_app/immutable/chunks/3Of2kn6M.js.br +0 -0
  418. package/build/client/_app/immutable/chunks/3Of2kn6M.js.gz +0 -0
  419. package/build/client/_app/immutable/chunks/5fVeMNeJ.js +0 -1
  420. package/build/client/_app/immutable/chunks/5fVeMNeJ.js.br +0 -0
  421. package/build/client/_app/immutable/chunks/5fVeMNeJ.js.gz +0 -0
  422. package/build/client/_app/immutable/chunks/A8GZ5Uuc.js +0 -1
  423. package/build/client/_app/immutable/chunks/A8GZ5Uuc.js.br +0 -0
  424. package/build/client/_app/immutable/chunks/A8GZ5Uuc.js.gz +0 -0
  425. package/build/client/_app/immutable/chunks/AHy1Hzhf.js +0 -1
  426. package/build/client/_app/immutable/chunks/AHy1Hzhf.js.br +0 -0
  427. package/build/client/_app/immutable/chunks/AHy1Hzhf.js.gz +0 -0
  428. package/build/client/_app/immutable/chunks/B3jXa2LJ.js +0 -1
  429. package/build/client/_app/immutable/chunks/B3jXa2LJ.js.br +0 -0
  430. package/build/client/_app/immutable/chunks/B3jXa2LJ.js.gz +0 -0
  431. package/build/client/_app/immutable/chunks/BEDHe9fo.js +0 -1
  432. package/build/client/_app/immutable/chunks/BEDHe9fo.js.br +0 -0
  433. package/build/client/_app/immutable/chunks/BEDHe9fo.js.gz +0 -0
  434. package/build/client/_app/immutable/chunks/BJ_s8GdZ.js +0 -2
  435. package/build/client/_app/immutable/chunks/BJ_s8GdZ.js.br +0 -0
  436. package/build/client/_app/immutable/chunks/BJ_s8GdZ.js.gz +0 -0
  437. package/build/client/_app/immutable/chunks/BKd0HUNP.js +0 -1
  438. package/build/client/_app/immutable/chunks/BKd0HUNP.js.br +0 -1
  439. package/build/client/_app/immutable/chunks/BKd0HUNP.js.gz +0 -0
  440. package/build/client/_app/immutable/chunks/BLL4xbEj.js +0 -1
  441. package/build/client/_app/immutable/chunks/BLL4xbEj.js.br +0 -0
  442. package/build/client/_app/immutable/chunks/BLL4xbEj.js.gz +0 -0
  443. package/build/client/_app/immutable/chunks/BUUcNufp.js +0 -1
  444. package/build/client/_app/immutable/chunks/BUUcNufp.js.br +0 -0
  445. package/build/client/_app/immutable/chunks/BUUcNufp.js.gz +0 -0
  446. package/build/client/_app/immutable/chunks/BY5XjwMm.js +0 -1
  447. package/build/client/_app/immutable/chunks/BY5XjwMm.js.br +0 -0
  448. package/build/client/_app/immutable/chunks/BY5XjwMm.js.gz +0 -0
  449. package/build/client/_app/immutable/chunks/BdZ-2OIO.js +0 -1
  450. package/build/client/_app/immutable/chunks/BdZ-2OIO.js.br +0 -0
  451. package/build/client/_app/immutable/chunks/BdZ-2OIO.js.gz +0 -0
  452. package/build/client/_app/immutable/chunks/BdvB_H6l.js +0 -1
  453. package/build/client/_app/immutable/chunks/BdvB_H6l.js.br +0 -0
  454. package/build/client/_app/immutable/chunks/BdvB_H6l.js.gz +0 -0
  455. package/build/client/_app/immutable/chunks/Bm8huziG.js +0 -1
  456. package/build/client/_app/immutable/chunks/Bm8huziG.js.br +0 -0
  457. package/build/client/_app/immutable/chunks/Bm8huziG.js.gz +0 -0
  458. package/build/client/_app/immutable/chunks/BnMEvq-8.js +0 -1
  459. package/build/client/_app/immutable/chunks/BnMEvq-8.js.br +0 -0
  460. package/build/client/_app/immutable/chunks/BnMEvq-8.js.gz +0 -0
  461. package/build/client/_app/immutable/chunks/BngQrigD.js +0 -1
  462. package/build/client/_app/immutable/chunks/BngQrigD.js.br +0 -0
  463. package/build/client/_app/immutable/chunks/BngQrigD.js.gz +0 -0
  464. package/build/client/_app/immutable/chunks/BqQtpLRF.js +0 -5
  465. package/build/client/_app/immutable/chunks/BqQtpLRF.js.br +0 -0
  466. package/build/client/_app/immutable/chunks/BqQtpLRF.js.gz +0 -0
  467. package/build/client/_app/immutable/chunks/Bx2K4OII.js +0 -1
  468. package/build/client/_app/immutable/chunks/Bx2K4OII.js.br +0 -0
  469. package/build/client/_app/immutable/chunks/Bx2K4OII.js.gz +0 -0
  470. package/build/client/_app/immutable/chunks/Bypc6r1_.js +0 -1
  471. package/build/client/_app/immutable/chunks/Bypc6r1_.js.br +0 -0
  472. package/build/client/_app/immutable/chunks/Bypc6r1_.js.gz +0 -0
  473. package/build/client/_app/immutable/chunks/C16DfZ5a.js +0 -1
  474. package/build/client/_app/immutable/chunks/C16DfZ5a.js.br +0 -1
  475. package/build/client/_app/immutable/chunks/C16DfZ5a.js.gz +0 -0
  476. package/build/client/_app/immutable/chunks/C3Yi7wCu.js +0 -1
  477. package/build/client/_app/immutable/chunks/C3Yi7wCu.js.br +0 -0
  478. package/build/client/_app/immutable/chunks/C3Yi7wCu.js.gz +0 -0
  479. package/build/client/_app/immutable/chunks/C3e5IrpE.js +0 -1
  480. package/build/client/_app/immutable/chunks/C3e5IrpE.js.br +0 -0
  481. package/build/client/_app/immutable/chunks/C3e5IrpE.js.gz +0 -0
  482. package/build/client/_app/immutable/chunks/C3o9xHsB.js +0 -1
  483. package/build/client/_app/immutable/chunks/C3o9xHsB.js.br +0 -0
  484. package/build/client/_app/immutable/chunks/C3o9xHsB.js.gz +0 -0
  485. package/build/client/_app/immutable/chunks/C6q0X9xa.js +0 -1
  486. package/build/client/_app/immutable/chunks/C6q0X9xa.js.br +0 -0
  487. package/build/client/_app/immutable/chunks/C6q0X9xa.js.gz +0 -0
  488. package/build/client/_app/immutable/chunks/C74jQQYs.js +0 -1
  489. package/build/client/_app/immutable/chunks/C74jQQYs.js.br +0 -0
  490. package/build/client/_app/immutable/chunks/C74jQQYs.js.gz +0 -0
  491. package/build/client/_app/immutable/chunks/CBHYGBBU.js +0 -4
  492. package/build/client/_app/immutable/chunks/CBHYGBBU.js.br +0 -0
  493. package/build/client/_app/immutable/chunks/CBHYGBBU.js.gz +0 -0
  494. package/build/client/_app/immutable/chunks/CD3hbDYc.js +0 -1
  495. package/build/client/_app/immutable/chunks/CD3hbDYc.js.br +0 -0
  496. package/build/client/_app/immutable/chunks/CD3hbDYc.js.gz +0 -0
  497. package/build/client/_app/immutable/chunks/CE3Ue5FU.js +0 -1
  498. package/build/client/_app/immutable/chunks/CE3Ue5FU.js.br +0 -0
  499. package/build/client/_app/immutable/chunks/CE3Ue5FU.js.gz +0 -0
  500. package/build/client/_app/immutable/chunks/CGGuNYjO.js +0 -1
  501. package/build/client/_app/immutable/chunks/CGGuNYjO.js.br +0 -0
  502. package/build/client/_app/immutable/chunks/CGGuNYjO.js.gz +0 -0
  503. package/build/client/_app/immutable/chunks/CH_9Gtej.js +0 -1
  504. package/build/client/_app/immutable/chunks/CH_9Gtej.js.br +0 -0
  505. package/build/client/_app/immutable/chunks/CH_9Gtej.js.gz +0 -0
  506. package/build/client/_app/immutable/chunks/CIj4gWfs.js +0 -1
  507. package/build/client/_app/immutable/chunks/CIj4gWfs.js.br +0 -0
  508. package/build/client/_app/immutable/chunks/CIj4gWfs.js.gz +0 -0
  509. package/build/client/_app/immutable/chunks/CJ3NIasv.js +0 -1
  510. package/build/client/_app/immutable/chunks/CJ3NIasv.js.br +0 -0
  511. package/build/client/_app/immutable/chunks/CJ3NIasv.js.gz +0 -0
  512. package/build/client/_app/immutable/chunks/CKEJURpk.js +0 -1
  513. package/build/client/_app/immutable/chunks/CKEJURpk.js.br +0 -0
  514. package/build/client/_app/immutable/chunks/CKEJURpk.js.gz +0 -0
  515. package/build/client/_app/immutable/chunks/CPmGhju_.js +0 -1
  516. package/build/client/_app/immutable/chunks/CPmGhju_.js.br +0 -1
  517. package/build/client/_app/immutable/chunks/CPmGhju_.js.gz +0 -0
  518. package/build/client/_app/immutable/chunks/CXcL7cOb.js +0 -1
  519. package/build/client/_app/immutable/chunks/CXcL7cOb.js.br +0 -0
  520. package/build/client/_app/immutable/chunks/CXcL7cOb.js.gz +0 -0
  521. package/build/client/_app/immutable/chunks/CXgAyvD-.js +0 -1
  522. package/build/client/_app/immutable/chunks/CXgAyvD-.js.br +0 -0
  523. package/build/client/_app/immutable/chunks/CXgAyvD-.js.gz +0 -0
  524. package/build/client/_app/immutable/chunks/CZBcpBnY.js +0 -1
  525. package/build/client/_app/immutable/chunks/CZBcpBnY.js.br +0 -0
  526. package/build/client/_app/immutable/chunks/CZBcpBnY.js.gz +0 -0
  527. package/build/client/_app/immutable/chunks/Cb-gOV5k.js +0 -1
  528. package/build/client/_app/immutable/chunks/Cb-gOV5k.js.br +0 -0
  529. package/build/client/_app/immutable/chunks/Cb-gOV5k.js.gz +0 -0
  530. package/build/client/_app/immutable/chunks/Cl7r7DFs.js +0 -1
  531. package/build/client/_app/immutable/chunks/Cl7r7DFs.js.br +0 -0
  532. package/build/client/_app/immutable/chunks/Cl7r7DFs.js.gz +0 -0
  533. package/build/client/_app/immutable/chunks/Cm8CSK8p.js +0 -1
  534. package/build/client/_app/immutable/chunks/Cm8CSK8p.js.br +0 -0
  535. package/build/client/_app/immutable/chunks/Cm8CSK8p.js.gz +0 -0
  536. package/build/client/_app/immutable/chunks/Cng04DK0.js +0 -1
  537. package/build/client/_app/immutable/chunks/Cng04DK0.js.br +0 -0
  538. package/build/client/_app/immutable/chunks/Cng04DK0.js.gz +0 -0
  539. package/build/client/_app/immutable/chunks/CqOnPLsz.js +0 -1
  540. package/build/client/_app/immutable/chunks/CqOnPLsz.js.br +0 -0
  541. package/build/client/_app/immutable/chunks/CqOnPLsz.js.gz +0 -0
  542. package/build/client/_app/immutable/chunks/Cqy1lT7e.js +0 -1
  543. package/build/client/_app/immutable/chunks/Cqy1lT7e.js.br +0 -0
  544. package/build/client/_app/immutable/chunks/Cqy1lT7e.js.gz +0 -0
  545. package/build/client/_app/immutable/chunks/CrjvgIhR.js +0 -1
  546. package/build/client/_app/immutable/chunks/CrjvgIhR.js.br +0 -0
  547. package/build/client/_app/immutable/chunks/CrjvgIhR.js.gz +0 -0
  548. package/build/client/_app/immutable/chunks/CsRBDrRN.js +0 -1
  549. package/build/client/_app/immutable/chunks/CsRBDrRN.js.br +0 -0
  550. package/build/client/_app/immutable/chunks/CsRBDrRN.js.gz +0 -0
  551. package/build/client/_app/immutable/chunks/CwwFbl61.js +0 -62
  552. package/build/client/_app/immutable/chunks/CwwFbl61.js.br +0 -0
  553. package/build/client/_app/immutable/chunks/CwwFbl61.js.gz +0 -0
  554. package/build/client/_app/immutable/chunks/D0JSbOCt.js +0 -1
  555. package/build/client/_app/immutable/chunks/D0JSbOCt.js.br +0 -0
  556. package/build/client/_app/immutable/chunks/D0JSbOCt.js.gz +0 -0
  557. package/build/client/_app/immutable/chunks/D25j-NnT.js +0 -1
  558. package/build/client/_app/immutable/chunks/D25j-NnT.js.br +0 -0
  559. package/build/client/_app/immutable/chunks/D25j-NnT.js.gz +0 -0
  560. package/build/client/_app/immutable/chunks/D5hwKKRv.js +0 -1
  561. package/build/client/_app/immutable/chunks/D5hwKKRv.js.br +0 -0
  562. package/build/client/_app/immutable/chunks/D5hwKKRv.js.gz +0 -0
  563. package/build/client/_app/immutable/chunks/DBxUIz0k.js +0 -1
  564. package/build/client/_app/immutable/chunks/DBxUIz0k.js.br +0 -0
  565. package/build/client/_app/immutable/chunks/DBxUIz0k.js.gz +0 -0
  566. package/build/client/_app/immutable/chunks/DH7t4M9x.js +0 -1
  567. package/build/client/_app/immutable/chunks/DH7t4M9x.js.br +0 -0
  568. package/build/client/_app/immutable/chunks/DH7t4M9x.js.gz +0 -0
  569. package/build/client/_app/immutable/chunks/DIsXG5DF.js +0 -1
  570. package/build/client/_app/immutable/chunks/DIsXG5DF.js.br +0 -0
  571. package/build/client/_app/immutable/chunks/DIsXG5DF.js.gz +0 -0
  572. package/build/client/_app/immutable/chunks/DNgh8jh8.js +0 -1
  573. package/build/client/_app/immutable/chunks/DNgh8jh8.js.br +0 -0
  574. package/build/client/_app/immutable/chunks/DNgh8jh8.js.gz +0 -0
  575. package/build/client/_app/immutable/chunks/DOWSzKHL.js +0 -1
  576. package/build/client/_app/immutable/chunks/DOWSzKHL.js.br +0 -0
  577. package/build/client/_app/immutable/chunks/DOWSzKHL.js.gz +0 -0
  578. package/build/client/_app/immutable/chunks/DSbOoIPC.js +0 -1
  579. package/build/client/_app/immutable/chunks/DSbOoIPC.js.br +0 -0
  580. package/build/client/_app/immutable/chunks/DSbOoIPC.js.gz +0 -0
  581. package/build/client/_app/immutable/chunks/DUYBhCSA.js +0 -1
  582. package/build/client/_app/immutable/chunks/DUYBhCSA.js.br +0 -0
  583. package/build/client/_app/immutable/chunks/DUYBhCSA.js.gz +0 -0
  584. package/build/client/_app/immutable/chunks/DfDxKk91.js +0 -2
  585. package/build/client/_app/immutable/chunks/DfDxKk91.js.br +0 -0
  586. package/build/client/_app/immutable/chunks/DfDxKk91.js.gz +0 -0
  587. package/build/client/_app/immutable/chunks/DhfQd5fc.js +0 -1
  588. package/build/client/_app/immutable/chunks/DhfQd5fc.js.br +0 -0
  589. package/build/client/_app/immutable/chunks/DhfQd5fc.js.gz +0 -0
  590. package/build/client/_app/immutable/chunks/DmYFgZ4g.js +0 -6
  591. package/build/client/_app/immutable/chunks/DmYFgZ4g.js.br +0 -0
  592. package/build/client/_app/immutable/chunks/DmYFgZ4g.js.gz +0 -0
  593. package/build/client/_app/immutable/chunks/Dn-83VwV.js +0 -1
  594. package/build/client/_app/immutable/chunks/Dn-83VwV.js.br +0 -1
  595. package/build/client/_app/immutable/chunks/Dn-83VwV.js.gz +0 -0
  596. package/build/client/_app/immutable/chunks/Dnnuh6qK.js +0 -1
  597. package/build/client/_app/immutable/chunks/Dnnuh6qK.js.br +0 -0
  598. package/build/client/_app/immutable/chunks/Dnnuh6qK.js.gz +0 -0
  599. package/build/client/_app/immutable/chunks/DocaGLjv.js +0 -1
  600. package/build/client/_app/immutable/chunks/DocaGLjv.js.br +0 -0
  601. package/build/client/_app/immutable/chunks/DocaGLjv.js.gz +0 -0
  602. package/build/client/_app/immutable/chunks/Dqlbq2bD.js +0 -2
  603. package/build/client/_app/immutable/chunks/Dqlbq2bD.js.br +0 -0
  604. package/build/client/_app/immutable/chunks/Dqlbq2bD.js.gz +0 -0
  605. package/build/client/_app/immutable/chunks/Dy07EIjs.js +0 -1
  606. package/build/client/_app/immutable/chunks/Dy07EIjs.js.br +0 -0
  607. package/build/client/_app/immutable/chunks/Dy07EIjs.js.gz +0 -0
  608. package/build/client/_app/immutable/chunks/Dy_X9Fgu.js +0 -1
  609. package/build/client/_app/immutable/chunks/Dy_X9Fgu.js.br +0 -0
  610. package/build/client/_app/immutable/chunks/Dy_X9Fgu.js.gz +0 -0
  611. package/build/client/_app/immutable/chunks/I26VQaTs.js +0 -2
  612. package/build/client/_app/immutable/chunks/I26VQaTs.js.br +0 -0
  613. package/build/client/_app/immutable/chunks/I26VQaTs.js.gz +0 -0
  614. package/build/client/_app/immutable/chunks/IsTbwoyV.js +0 -1
  615. package/build/client/_app/immutable/chunks/IsTbwoyV.js.br +0 -0
  616. package/build/client/_app/immutable/chunks/IsTbwoyV.js.gz +0 -0
  617. package/build/client/_app/immutable/chunks/Km1CymxJ.js +0 -1
  618. package/build/client/_app/immutable/chunks/Km1CymxJ.js.br +0 -0
  619. package/build/client/_app/immutable/chunks/Km1CymxJ.js.gz +0 -0
  620. package/build/client/_app/immutable/chunks/Me06-nC7.js +0 -1
  621. package/build/client/_app/immutable/chunks/Me06-nC7.js.br +0 -0
  622. package/build/client/_app/immutable/chunks/Me06-nC7.js.gz +0 -0
  623. package/build/client/_app/immutable/chunks/PQApLOOr.js +0 -1
  624. package/build/client/_app/immutable/chunks/PQApLOOr.js.br +0 -0
  625. package/build/client/_app/immutable/chunks/PQApLOOr.js.gz +0 -0
  626. package/build/client/_app/immutable/chunks/WcvPAxq7.js +0 -1
  627. package/build/client/_app/immutable/chunks/WcvPAxq7.js.br +0 -0
  628. package/build/client/_app/immutable/chunks/WcvPAxq7.js.gz +0 -0
  629. package/build/client/_app/immutable/chunks/ZoG8qKMx.js +0 -1
  630. package/build/client/_app/immutable/chunks/ZoG8qKMx.js.br +0 -0
  631. package/build/client/_app/immutable/chunks/ZoG8qKMx.js.gz +0 -0
  632. package/build/client/_app/immutable/chunks/qb_JS6rP.js +0 -1
  633. package/build/client/_app/immutable/chunks/qb_JS6rP.js.br +0 -0
  634. package/build/client/_app/immutable/chunks/qb_JS6rP.js.gz +0 -0
  635. package/build/client/_app/immutable/chunks/riwaJFkb.js +0 -3
  636. package/build/client/_app/immutable/chunks/riwaJFkb.js.br +0 -0
  637. package/build/client/_app/immutable/chunks/riwaJFkb.js.gz +0 -0
  638. package/build/client/_app/immutable/chunks/wDLVOANX.js +0 -2
  639. package/build/client/_app/immutable/chunks/wDLVOANX.js.br +0 -0
  640. package/build/client/_app/immutable/chunks/wDLVOANX.js.gz +0 -0
  641. package/build/client/_app/immutable/entry/app.CNnpPQtw.js +0 -2
  642. package/build/client/_app/immutable/entry/app.CNnpPQtw.js.br +0 -0
  643. package/build/client/_app/immutable/entry/app.CNnpPQtw.js.gz +0 -0
  644. package/build/client/_app/immutable/entry/start.BGpEqKH0.js +0 -1
  645. package/build/client/_app/immutable/entry/start.BGpEqKH0.js.br +0 -0
  646. package/build/client/_app/immutable/entry/start.BGpEqKH0.js.gz +0 -0
  647. package/build/client/_app/immutable/nodes/0.CGlGdRWB.js +0 -8
  648. package/build/client/_app/immutable/nodes/0.CGlGdRWB.js.br +0 -0
  649. package/build/client/_app/immutable/nodes/0.CGlGdRWB.js.gz +0 -0
  650. package/build/client/_app/immutable/nodes/1.B4M0q1v4.js +0 -1
  651. package/build/client/_app/immutable/nodes/1.B4M0q1v4.js.br +0 -0
  652. package/build/client/_app/immutable/nodes/1.B4M0q1v4.js.gz +0 -0
  653. package/build/client/_app/immutable/nodes/10.LJhhE6c8.js +0 -3
  654. package/build/client/_app/immutable/nodes/10.LJhhE6c8.js.br +0 -0
  655. package/build/client/_app/immutable/nodes/10.LJhhE6c8.js.gz +0 -0
  656. package/build/client/_app/immutable/nodes/11.CM_xAozz.js +0 -1
  657. package/build/client/_app/immutable/nodes/11.CM_xAozz.js.br +0 -0
  658. package/build/client/_app/immutable/nodes/11.CM_xAozz.js.gz +0 -0
  659. package/build/client/_app/immutable/nodes/12.UENbuJYy.js +0 -14
  660. package/build/client/_app/immutable/nodes/12.UENbuJYy.js.br +0 -0
  661. package/build/client/_app/immutable/nodes/12.UENbuJYy.js.gz +0 -0
  662. package/build/client/_app/immutable/nodes/13.NbAfy9an.js +0 -150
  663. package/build/client/_app/immutable/nodes/13.NbAfy9an.js.br +0 -0
  664. package/build/client/_app/immutable/nodes/13.NbAfy9an.js.gz +0 -0
  665. package/build/client/_app/immutable/nodes/15.BgyPK-jf.js +0 -11
  666. package/build/client/_app/immutable/nodes/15.BgyPK-jf.js.br +0 -0
  667. package/build/client/_app/immutable/nodes/15.BgyPK-jf.js.gz +0 -0
  668. package/build/client/_app/immutable/nodes/16.DcgniGJK.js +0 -9
  669. package/build/client/_app/immutable/nodes/16.DcgniGJK.js.br +0 -0
  670. package/build/client/_app/immutable/nodes/16.DcgniGJK.js.gz +0 -0
  671. package/build/client/_app/immutable/nodes/17.CB9DXHxS.js +0 -2
  672. package/build/client/_app/immutable/nodes/17.CB9DXHxS.js.br +0 -0
  673. package/build/client/_app/immutable/nodes/17.CB9DXHxS.js.gz +0 -0
  674. package/build/client/_app/immutable/nodes/18.BHa-KoGE.js +0 -6
  675. package/build/client/_app/immutable/nodes/18.BHa-KoGE.js.br +0 -0
  676. package/build/client/_app/immutable/nodes/18.BHa-KoGE.js.gz +0 -0
  677. package/build/client/_app/immutable/nodes/19._VaGaWBD.js +0 -1
  678. package/build/client/_app/immutable/nodes/19._VaGaWBD.js.br +0 -0
  679. package/build/client/_app/immutable/nodes/19._VaGaWBD.js.gz +0 -0
  680. package/build/client/_app/immutable/nodes/2.DKxd0T79.js +0 -14
  681. package/build/client/_app/immutable/nodes/2.DKxd0T79.js.br +0 -0
  682. package/build/client/_app/immutable/nodes/2.DKxd0T79.js.gz +0 -0
  683. package/build/client/_app/immutable/nodes/20.C10FVhEw.js +0 -10
  684. package/build/client/_app/immutable/nodes/20.C10FVhEw.js.br +0 -0
  685. package/build/client/_app/immutable/nodes/20.C10FVhEw.js.gz +0 -0
  686. package/build/client/_app/immutable/nodes/21.BhyJIr3P.js +0 -6
  687. package/build/client/_app/immutable/nodes/21.BhyJIr3P.js.br +0 -0
  688. package/build/client/_app/immutable/nodes/21.BhyJIr3P.js.gz +0 -0
  689. package/build/client/_app/immutable/nodes/3.CcRoRYc-.js +0 -5
  690. package/build/client/_app/immutable/nodes/3.CcRoRYc-.js.br +0 -0
  691. package/build/client/_app/immutable/nodes/3.CcRoRYc-.js.gz +0 -0
  692. package/build/client/_app/immutable/nodes/4.BulJqGnt.js +0 -1
  693. package/build/client/_app/immutable/nodes/4.BulJqGnt.js.br +0 -0
  694. package/build/client/_app/immutable/nodes/4.BulJqGnt.js.gz +0 -0
  695. package/build/client/_app/immutable/nodes/5.BT3hraTU.js +0 -1
  696. package/build/client/_app/immutable/nodes/5.BT3hraTU.js.br +0 -0
  697. package/build/client/_app/immutable/nodes/5.BT3hraTU.js.gz +0 -0
  698. package/build/client/_app/immutable/nodes/6.DtNMha3Y.js +0 -7
  699. package/build/client/_app/immutable/nodes/6.DtNMha3Y.js.br +0 -0
  700. package/build/client/_app/immutable/nodes/6.DtNMha3Y.js.gz +0 -0
  701. package/build/client/_app/immutable/nodes/7.Bv6Vn8eC.js +0 -4
  702. package/build/client/_app/immutable/nodes/7.Bv6Vn8eC.js.br +0 -0
  703. package/build/client/_app/immutable/nodes/7.Bv6Vn8eC.js.gz +0 -0
  704. package/build/client/_app/immutable/nodes/9.DgQz7-Cb.js +0 -1
  705. package/build/client/_app/immutable/nodes/9.DgQz7-Cb.js.br +0 -0
  706. package/build/client/_app/immutable/nodes/9.DgQz7-Cb.js.gz +0 -0
  707. package/build/server/chunks/chunks/DecisionCard.js-B1YgF5EF.js +0 -446
  708. package/build/server/chunks/chunks/DictateTextarea.js-CbkGsd1h.js +0 -415
  709. package/build/server/chunks/chunks/EtaLine.js-5SCP9O1f.js +0 -79
  710. package/build/server/chunks/chunks/EveryProjectSwitch.js-DzcwkHh4.js +0 -200
  711. package/build/server/chunks/chunks/ProjectBanner.js-ByPp7Y_e.js +0 -111
  712. package/build/server/chunks/chunks/ResizableRail.js-BS8hRLV0.js +0 -395
  713. package/build/server/chunks/chunks/chat.svelte.js--pRzj_Xo.js +0 -545
  714. package/build/server/chunks/chunks/compass.js-k2sRSGWn.js +0 -23
  715. package/build/server/chunks/chunks/detail.js-DDoqeh1A.js +0 -144
  716. package/build/server/chunks/chunks/git-pull-request.js-BMzktlcs.js +0 -20
  717. package/build/server/chunks/chunks/http2.js-fIdVBJaD.js +0 -26
  718. package/build/server/chunks/chunks/internal.js-BlgsFxfY.js +0 -146
  719. package/build/server/chunks/chunks/keys.js-CdtCzv-v.js +0 -20
  720. package/build/server/chunks/chunks/live.svelte.js-By2dseJB.js +0 -253
  721. package/build/server/chunks/chunks/message-square-text.js-CyRiNGB8.js +0 -25
  722. package/build/server/chunks/chunks/monitor-play.js-4ed3ghDf.js +0 -28
  723. package/build/server/chunks/chunks/prreview.js-Cg9LDxJp.js +0 -92
  724. package/build/server/chunks/chunks/repo.js-CuWUNKbP.js +0 -33
  725. package/build/server/chunks/chunks/runtime.js-BuGWYyZZ.js +0 -16470
  726. package/build/server/chunks/chunks/service.js-DQK1kj-4.js +0 -914
  727. package/build/server/chunks/chunks/slots.svelte.js-0Ejhe-hS.js +0 -34
  728. package/build/server/chunks/chunks/store.js-XXOawxPN.js +0 -317
  729. package/build/server/chunks/chunks/uploads.js-D45pIvPk.js +0 -107
  730. package/build/server/chunks/chunks/view.js-CrOFjYk4.js +0 -76
  731. package/build/server/chunks/entries/endpoints/api/apps/_op_/_server.ts.js-DSkVUNdc.js +0 -90
  732. package/build/server/chunks/entries/endpoints/api/events/_server.ts.js-CYnLRjOH.js +0 -106
  733. package/build/server/chunks/entries/endpoints/api/files/_server.ts.js-CG8IGmSp.js +0 -49
  734. package/build/server/chunks/entries/endpoints/api/firstmate/chat/_server.ts.js-fmzKkrXb.js +0 -83
  735. package/build/server/chunks/entries/endpoints/api/firstmate/commands/_server.ts.js-BgIU3add.js +0 -119
  736. package/build/server/chunks/entries/endpoints/api/firstmate/dismiss/_server.ts.js-Ba9E_53E.js +0 -45
  737. package/build/server/chunks/entries/endpoints/api/firstmate/input/_server.ts.js-BQZBERsR.js +0 -51
  738. package/build/server/chunks/entries/endpoints/api/firstmate/interrupt/_server.ts.js-BnT3VHSx.js +0 -44
  739. package/build/server/chunks/entries/endpoints/api/firstmate/messages/_server.ts.js-DRYHwJ7R.js +0 -66
  740. package/build/server/chunks/entries/endpoints/api/firstmate/pick/_server.ts.js-BD2B1ByG.js +0 -54
  741. package/build/server/chunks/entries/endpoints/api/firstmate/start/_server.ts.js-DB-m2WWH.js +0 -44
  742. package/build/server/chunks/entries/endpoints/api/firstmate/uploads/_day_/_id_/_name_/_server.ts.js-CK3swjFX.js +0 -32
  743. package/build/server/chunks/entries/endpoints/api/firstmate/uploads/_server.ts.js-WCE63uer.js +0 -40
  744. package/build/server/chunks/entries/endpoints/api/fleet/_server.ts.js-D5-3acjK.js +0 -36
  745. package/build/server/chunks/entries/endpoints/api/gateway/_server.ts.js-B2I7jHdc.js +0 -100
  746. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-BFSqEG5B.js +0 -36
  747. package/build/server/chunks/entries/endpoints/api/inbox/_server.ts.js-BpUaHfsf.js +0 -60
  748. package/build/server/chunks/entries/endpoints/api/inbox/report/_server.ts.js-BNRD4HyF.js +0 -51
  749. package/build/server/chunks/entries/endpoints/api/insights/_server.ts.js-7808SNDM.js +0 -36
  750. package/build/server/chunks/entries/endpoints/api/plugins/_plugin_/config/_server.ts.js-B-cQTShG.js +0 -71
  751. package/build/server/chunks/entries/endpoints/api/plugins/_plugin_/load/_server.ts.js-CPAHSih2.js +0 -23
  752. package/build/server/chunks/entries/endpoints/api/plugins/_plugin_/ui/_...path_/_server.ts.js-DW3M1pzH.js +0 -59
  753. package/build/server/chunks/entries/endpoints/api/plugins/_plugin_/update/_server.ts.js-DDTSw0pX.js +0 -35
  754. package/build/server/chunks/entries/endpoints/api/plugins/_server.ts.js-BlD-1l6V.js +0 -36
  755. package/build/server/chunks/entries/endpoints/api/plugins/inspect/_server.ts.js-IT-jeApI.js +0 -35
  756. package/build/server/chunks/entries/endpoints/api/plugins/install/_server.ts.js-DQqKN2MF.js +0 -38
  757. package/build/server/chunks/entries/endpoints/api/plugins/updates/_server.ts.js-D7rx-bwI.js +0 -23
  758. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/_server.ts.js-BC0HjK9M.js +0 -41
  759. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/commands/_server.ts.js-aVmcjStV.js +0 -50
  760. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/consent/_server.ts.js-BuHN_WYU.js +0 -62
  761. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/draft/_server.ts.js-Dx0x7sws.js +0 -49
  762. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/file/_server.ts.js-CcCDMmmF.js +0 -72
  763. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/test/_server.ts.js-BsOOyTNM.js +0 -55
  764. package/build/server/chunks/entries/endpoints/api/services/_server.ts.js-DGyU8Zmu.js +0 -55
  765. package/build/server/chunks/entries/endpoints/api/slots/_server.ts.js-1B8fEiat.js +0 -44
  766. package/build/server/chunks/entries/endpoints/api/tasks/_id_/_server.ts.js-D4CKazw-.js +0 -41
  767. package/build/server/chunks/entries/endpoints/api/tasks/_id_/artifacts/_...name_/_server.ts.js-CUKo26Ia.js +0 -60
  768. package/build/server/chunks/entries/endpoints/api/tasks/_id_/diff/_server.ts.js-BOa2lgvP.js +0 -48
  769. package/build/server/chunks/entries/endpoints/api/tasks/_id_/output/_server.ts.js-BmI8Ofms.js +0 -93
  770. package/build/server/chunks/entries/endpoints/api/tasks/_id_/preview/_server.ts.js-C2mJi22c.js +0 -110
  771. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/_server.ts.js-8pN6fHl8.js +0 -43
  772. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/ask/_server.ts.js-D6D9O8Su.js +0 -49
  773. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/check/_server.ts.js-BAaCwzOf.js +0 -48
  774. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/guide/_server.ts.js-DfP2iNta.js +0 -48
  775. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/runs/_run_/stop/_server.ts.js-DZDaSSYT.js +0 -41
  776. package/build/server/chunks/entries/endpoints/api/vault/_server.ts.js-CJNUplXf.js +0 -54
  777. package/build/server/chunks/entries/endpoints/api/wheelhouse/update/_server.ts.js-CVqjWsw8.js +0 -23
  778. package/build/server/chunks/entries/endpoints/api/wheelhouse/upgrade/_server.ts.js-CE2zzWtC.js +0 -23
  779. package/build/server/chunks/entries/hooks.server.js-FjSdw_QS.js +0 -54
  780. package/build/server/chunks/entries/pages/_layout.server.ts.js-BkWAC802.js +0 -22
  781. package/build/server/chunks/entries/pages/_layout.svelte.js-DstinFjN.js +0 -8746
  782. package/build/server/chunks/entries/pages/_page.server.ts.js-BXkuWJh7.js +0 -16
  783. package/build/server/chunks/entries/pages/_page.svelte.js-ehBbQlco.js +0 -2194
  784. package/build/server/chunks/entries/pages/decisions/_page.server.ts.js-B2YZfjBk.js +0 -11
  785. package/build/server/chunks/entries/pages/files/_page.server.ts.js-CT3pm5a6.js +0 -17
  786. package/build/server/chunks/entries/pages/harbour/_page.server.ts.js-CcLkegHq.js +0 -46
  787. package/build/server/chunks/entries/pages/harbour/_page.svelte.js-hBC6QUHZ.js +0 -580
  788. package/build/server/chunks/entries/pages/headroom/_page.server.ts.js-BazCFIuz.js +0 -11
  789. package/build/server/chunks/entries/pages/inbox/_page.svelte.js-rjm303kf.js +0 -185
  790. package/build/server/chunks/entries/pages/plugins/_plugin_/_page_/_page.server.ts.js-BRQpg3kQ.js +0 -16
  791. package/build/server/chunks/entries/pages/plugins/_plugin_/_page_/_page.svelte.js-DazeLLT8.js +0 -52
  792. package/build/server/chunks/entries/pages/projects/_id_/_page.server.ts.js-BIypd_XU.js +0 -23
  793. package/build/server/chunks/entries/pages/projects/_id_/_page.svelte.js-DJajtLup.js +0 -945
  794. package/build/server/chunks/entries/pages/projects/_id_/_plugin_/_tab_/_page.server.ts.js-BwAOIwUv.js +0 -21
  795. package/build/server/chunks/entries/pages/projects/_id_/_plugin_/_tab_/_page.svelte.js-Cm8mxt61.js +0 -74
  796. package/build/server/chunks/entries/pages/projects/_id_/passage/_page.server.ts.js-CnfqlJgl.js +0 -27
  797. package/build/server/chunks/entries/pages/projects/_id_/passage/_page.svelte.js-CuMA-rCM.js +0 -433
  798. package/build/server/chunks/entries/pages/projects/_id_/passage/edit/_page.server.ts.js-CG14M19O.js +0 -15
  799. package/build/server/chunks/entries/pages/projects/_id_/passage/edit/_page.svelte.js-mtGQO-dJ.js +0 -1880
  800. package/build/server/chunks/entries/pages/settings/gateway/_page.server.ts.js-Zgfe-LX9.js +0 -11
  801. package/build/server/chunks/entries/pages/settings/plugins/_page.server.ts.js-DZ4oJmnj.js +0 -19
  802. package/build/server/chunks/entries/pages/settings/plugins/_page.svelte.js-gBZCjZlg.js +0 -1847
  803. package/build/server/chunks/entries/pages/settings/plugins/_plugin_/_page.server.ts.js-Dm-tgyir.js +0 -17
  804. package/build/server/chunks/entries/pages/settings/plugins/_plugin_/_page.svelte.js-BFGxdrrb.js +0 -220
  805. package/build/server/chunks/entries/pages/tasks/_id_/_page.server.ts.js-Llp3a0Fb.js +0 -25
  806. package/build/server/chunks/entries/pages/tasks/_id_/_page.svelte.js-LgJMZ2RE.js +0 -2107
  807. package/build/server/chunks/entries/pages/tasks/_id_/doc/_page.server.ts.js-DuWuEdZ2.js +0 -24
  808. package/build/server/chunks/entries/pages/tasks/_id_/review/_page.server.ts.js-BMQF9I9c.js +0 -15
  809. package/build/server/chunks/entries/pages/tasks/_id_/review/_page.svelte.js-k659tqiw.js +0 -657
  810. package/build/server/chunks/entries/pages/time/_page.server.ts.js-DstGu3ji.js +0 -11
  811. package/build/server/chunks/handler-BRidfBIY.js +0 -1474
  812. package/build/server/chunks/index.js-Dhoi5wa_.js +0 -4296
  813. package/build/server/chunks/manifest.js-CF4aVg77.js +0 -537
  814. package/build/server/chunks/nodes/0.js-B2yTHeOL.js +0 -41
  815. package/build/server/chunks/nodes/1.js-BoD2_1or.js +0 -9
  816. package/build/server/chunks/nodes/10.js-C2XmTW8j.js +0 -43
  817. package/build/server/chunks/nodes/11.js-CAJnQkWH.js +0 -42
  818. package/build/server/chunks/nodes/12.js-Cu57dOUj.js +0 -43
  819. package/build/server/chunks/nodes/13.js-1g1BRnk_.js +0 -42
  820. package/build/server/chunks/nodes/15.js-BqL5jpLU.js +0 -41
  821. package/build/server/chunks/nodes/16.js-DibdTAKZ.js +0 -41
  822. package/build/server/chunks/nodes/17.js-BUFA5Avk.js +0 -44
  823. package/build/server/chunks/nodes/18.js-cxLrKmMx.js +0 -42
  824. package/build/server/chunks/nodes/19.js-DMbI3mDp.js +0 -42
  825. package/build/server/chunks/nodes/2.js-8QSIq2KZ.js +0 -41
  826. package/build/server/chunks/nodes/20.js-BNXpftag.js +0 -42
  827. package/build/server/chunks/nodes/21.js-DdJK6h7p.js +0 -41
  828. package/build/server/chunks/nodes/3.js-DHT7fiTy.js +0 -41
  829. package/build/server/chunks/nodes/4.js-DvjrLz8n.js +0 -41
  830. package/build/server/chunks/nodes/5.js-CvUGUQbi.js +0 -45
  831. package/build/server/chunks/nodes/6.js-ptKHsAn6.js +0 -41
  832. package/build/server/chunks/nodes/7.js-BigF9SYG.js +0 -9
  833. package/build/server/chunks/nodes/9.js-DkS4HHqV.js +0 -41
  834. /package/build/client/_app/immutable/assets/{DictateTextarea.Dga9zAug.css → checks.Dga9zAug.css} +0 -0
  835. /package/build/client/_app/immutable/assets/{DictateTextarea.Dga9zAug.css.br → checks.Dga9zAug.css.br} +0 -0
  836. /package/build/client/_app/immutable/assets/{DictateTextarea.Dga9zAug.css.gz → checks.Dga9zAug.css.gz} +0 -0
@@ -1,2194 +0,0 @@
1
- import { aj as head, ak as attr_class, al as escape_html, am as attr, an as stringify, a8 as ensure_array_like, _ as derived, ac as spread_props } from '../../chunks/index.js-B0NFhRTN.js';
2
- import { p as page } from '../../chunks/index2.js-Bxt1T6_K.js';
3
- import { l as live, a as currentFleet, c as currentHealth } from '../../chunks/live.svelte.js-By2dseJB.js';
4
- import { s as slots } from '../../chunks/slots.svelte.js-0Ejhe-hS.js';
5
- import { s as slotKey } from '../../chunks/keys.js-CdtCzv-v.js';
6
- import { h as harbour, b as headline } from '../../chunks/harbour.js-PHLHOFea.js';
7
- import { p as parseAttachments, a as UPLOAD_MAX_BYTES, k as kindLabel, f as fileSize, i as isImage, b as pastedName, N as NAME_HEADER, T as TYPE_HEADER, t as thumbUrl } from '../../chunks/attachments.js-BAnnqpd-.js';
8
- import { M as Maximize_2, L as Lightbox, S as StageTrack } from '../../chunks/StageTrack.js-DHvZX7Bl.js';
9
- import { F as File_text } from '../../chunks/file-text.js-CnuVvHlB.js';
10
- import { f as choiceLabel } from '../../chunks/inbox.js-Dv8a1ecX.js';
11
- import { f as firstmateChat, d as duration, p as pendingLabel, a as activitySummary } from '../../chunks/chat.svelte.js--pRzj_Xo.js';
12
- import { m as markdown } from '../../chunks/markdown.js-CApgGpeX.js';
13
- import { i as inbox } from '../../chunks/inbox.svelte.js-n7K3YnGB.js';
14
- import { a as ago } from '../../chunks/format.js-D3lWEg6U.js';
15
- import { m as matchBridgeCards } from '../../chunks/vault.js-CTaWe09z.js';
16
- import { B as Blocks, S as SlotContent } from '../../chunks/SlotContent.js-B4p1QLQN.js';
17
- import { L as LinkedText } from '../../chunks/LinkedText.js-COjHV297.js';
18
- import { L as Loader_circle } from '../../chunks/loader-circle.js-rQHvIWN7.js';
19
- import { C as Chevron_right } from '../../chunks/chevron-right.js-DCBAqAae.js';
20
- import '../../chunks/exports.js-BZBK1HC9.js';
21
- import '../../chunks/utils2.js-BQzn9ikS.js';
22
- import '../../chunks/utils.js-BJgm9WbO.js';
23
- import '../../chunks/root.js-60iebdW4.js';
24
- import '../../chunks/button.js-BF2PsvWw.js';
25
- import { I as Icon } from '../../chunks/Icon.js-CVZZ-yuB.js';
26
- import { R as ResizableRail, C as Circle_check, L as LivePreview, O as OpenDecision, P as PreviewStudio } from '../../chunks/ResizableRail.js-BS8hRLV0.js';
27
- import { R as Rotate_cw } from '../../chunks/rotate-cw.js-M4SHOpYI.js';
28
- import { A as Arrow_up } from '../../chunks/arrow-up.js-DHbXk79z.js';
29
- import { M as Messages_square } from '../../chunks/messages-square.js-BXH8BHfd.js';
30
- import { h as html } from '../../chunks/html.js-FW6Ia4bL.js';
31
- import { M as Monitor_play } from '../../chunks/monitor-play.js-4ed3ghDf.js';
32
- import { G as Git_pull_request } from '../../chunks/git-pull-request.js-BMzktlcs.js';
33
- import { E as External_link } from '../../chunks/external-link.js-BQs1euhR.js';
34
- import { C as Circle_dashed } from '../../chunks/circle-dashed.js-fXv_bIo-.js';
35
- import { S as SESSION_HEADER } from '../../chunks/messages.js-CFyGKoqq.js';
36
- import { C as Circle_alert } from '../../chunks/circle-alert.js-XTuAj7ZH.js';
37
- import { X } from '../../chunks/x.js-YxaUOlq9.js';
38
- import { M as MicButton, S as Square, e as editableTarget } from '../../chunks/DictateTextarea.js-CbkGsd1h.js';
39
- import { S as Square_terminal } from '../../chunks/square-terminal.js-D9D9_9_V.js';
40
- import { M as Message_circle_question_mark } from '../../chunks/message-circle-question-mark.js-DbmaS9k_.js';
41
- import { C as Check } from '../../chunks/check.js-32sYHVxG.js';
42
- import { B as Bell, G as Gauge } from '../../chunks/gauge.js-Cbb1aqE7.js';
43
- import { T as Triangle_alert } from '../../chunks/triangle-alert.js-ClLszsZE.js';
44
- import { H as Hand } from '../../chunks/hand.js-BA9yKAan.js';
45
- import { a as showsChecks, r as runStep } from '../../chunks/checks.js-DR3fVVpO.js';
46
- import { d as duration$1, t as total, s as sumSplits } from '../../chunks/insights.js-CzzfyHGp.js';
47
- import { C as ChecksStrip, E as EtaLine } from '../../chunks/EtaLine.js-5SCP9O1f.js';
48
- import { A as AllowanceMeter } from '../../chunks/AllowanceMeter.js-DBpmESX6.js';
49
- import { T as TimeBar } from '../../chunks/TimeBar.js-CUFKEJW9.js';
50
- import { A as Arrow_right } from '../../chunks/arrow-right.js-CNYqcx0M.js';
51
- import { A as Anchor, p as projectLabels, a as aliases } from '../../chunks/aliases.svelte.js-C_vCoKdk.js';
52
- import { S as Scale } from '../../chunks/scale.js-S5g8YUqL.js';
53
- import { M as Message_square } from '../../chunks/message-square.js-XK15WVZq.js';
54
- import { O as Octagon_alert } from '../../chunks/DecisionCard.js-B1YgF5EF.js';
55
- import { M as Message_square_text } from '../../chunks/message-square-text.js-CyRiNGB8.js';
56
- import '../../chunks/chevron-left.js-D5RHY-kD.js';
57
- import '../../chunks/tone.js-Dxsl-adt.js';
58
- import '../../chunks/docpath.js-D27w_pf9.js';
59
- import '../../chunks/urls.js-BrlC6XZ8.js';
60
- import '../../chunks/preview.js-hrimfbCG.js';
61
- import '../../chunks/index-server2.js-Fb2GE8KQ.js';
62
- import '../../chunks/clock.js-CHhHTWK_.js';
63
- import '../../chunks/chevron-down.js-CH53s_me.js';
64
-
65
- function App_window($$renderer, $$props) {
66
- let { $$slots, $$events, ...props } = $$props;
67
- const iconData = {
68
- "name": "app-window",
69
- "size": 24,
70
- "node": [
71
- [
72
- "rect",
73
- { "x": "2", "y": "4", "width": "20", "height": "16", "rx": "2" }
74
- ],
75
- ["path", { "d": "M10 4v4" }],
76
- ["path", { "d": "M2 8h20" }],
77
- ["path", { "d": "M6 4v4" }]
78
- ]
79
- };
80
- Icon($$renderer, spread_props([props, { icon: iconData }]));
81
- }
82
- function Arrow_left_right($$renderer, $$props) {
83
- let { $$slots, $$events, ...props } = $$props;
84
- const iconData = {
85
- "name": "arrow-left-right",
86
- "size": 24,
87
- "node": [
88
- ["path", { "d": "M8 3 4 7l4 4" }],
89
- ["path", { "d": "M4 7h16" }],
90
- ["path", { "d": "m16 21 4-4-4-4" }],
91
- ["path", { "d": "M20 17H4" }]
92
- ]
93
- };
94
- Icon($$renderer, spread_props([props, { icon: iconData }]));
95
- }
96
- function Arrow_up_right($$renderer, $$props) {
97
- let { $$slots, $$events, ...props } = $$props;
98
- const iconData = {
99
- "name": "arrow-up-right",
100
- "size": 24,
101
- "node": [
102
- ["path", { "d": "M7 7h10v10" }],
103
- ["path", { "d": "M7 17 17 7" }]
104
- ]
105
- };
106
- Icon($$renderer, spread_props([props, { icon: iconData }]));
107
- }
108
- function Circle_x($$renderer, $$props) {
109
- let { $$slots, $$events, ...props } = $$props;
110
- const iconData = {
111
- "name": "circle-x",
112
- "size": 24,
113
- "node": [
114
- ["circle", { "cx": "12", "cy": "12", "r": "10" }],
115
- ["path", { "d": "m15 9-6 6" }],
116
- ["path", { "d": "m9 9 6 6" }]
117
- ],
118
- "aliases": ["x-circle"]
119
- };
120
- Icon($$renderer, spread_props([props, { icon: iconData }]));
121
- }
122
- function Git_merge($$renderer, $$props) {
123
- let { $$slots, $$events, ...props } = $$props;
124
- const iconData = {
125
- "name": "git-merge",
126
- "size": 24,
127
- "node": [
128
- ["circle", { "cx": "18", "cy": "18", "r": "3" }],
129
- ["circle", { "cx": "6", "cy": "6", "r": "3" }],
130
- ["path", { "d": "M6 21V9a9 9 0 0 0 9 9" }]
131
- ]
132
- };
133
- Icon($$renderer, spread_props([props, { icon: iconData }]));
134
- }
135
- function Panel_left($$renderer, $$props) {
136
- let { $$slots, $$events, ...props } = $$props;
137
- const iconData = {
138
- "name": "panel-left",
139
- "size": 24,
140
- "node": [
141
- [
142
- "rect",
143
- { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }
144
- ],
145
- ["path", { "d": "M9 3v18" }]
146
- ],
147
- "aliases": ["sidebar"]
148
- };
149
- Icon($$renderer, spread_props([props, { icon: iconData }]));
150
- }
151
- function Panel_right($$renderer, $$props) {
152
- let { $$slots, $$events, ...props } = $$props;
153
- const iconData = {
154
- "name": "panel-right",
155
- "size": 24,
156
- "node": [
157
- [
158
- "rect",
159
- { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }
160
- ],
161
- ["path", { "d": "M15 3v18" }]
162
- ]
163
- };
164
- Icon($$renderer, spread_props([props, { icon: iconData }]));
165
- }
166
- function Paperclip($$renderer, $$props) {
167
- let { $$slots, $$events, ...props } = $$props;
168
- const iconData = {
169
- "name": "paperclip",
170
- "size": 24,
171
- "node": [
172
- [
173
- "path",
174
- {
175
- "d": "m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551"
176
- }
177
- ]
178
- ]
179
- };
180
- Icon($$renderer, spread_props([props, { icon: iconData }]));
181
- }
182
- function Reply($$renderer, $$props) {
183
- let { $$slots, $$events, ...props } = $$props;
184
- const iconData = {
185
- "name": "reply",
186
- "size": 24,
187
- "node": [
188
- ["path", { "d": "M20 18v-2a4 4 0 0 0-4-4H4" }],
189
- ["path", { "d": "m9 17-5-5 5-5" }]
190
- ]
191
- };
192
- Icon($$renderer, spread_props([props, { icon: iconData }]));
193
- }
194
- function Unplug($$renderer, $$props) {
195
- let { $$slots, $$events, ...props } = $$props;
196
- const iconData = {
197
- "name": "unplug",
198
- "size": 24,
199
- "node": [
200
- ["path", { "d": "m19 5 3-3" }],
201
- ["path", { "d": "m2 22 3-3" }],
202
- [
203
- "path",
204
- {
205
- "d": "M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z"
206
- }
207
- ],
208
- ["path", { "d": "M7.5 13.5 10 11" }],
209
- ["path", { "d": "M10.5 16.5 13 14" }],
210
- [
211
- "path",
212
- {
213
- "d": "m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z"
214
- }
215
- ]
216
- ]
217
- };
218
- Icon($$renderer, spread_props([props, { icon: iconData }]));
219
- }
220
- function Users($$renderer, $$props) {
221
- let { $$slots, $$events, ...props } = $$props;
222
- const iconData = {
223
- "name": "users",
224
- "size": 24,
225
- "node": [
226
- ["path", { "d": "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }],
227
- ["path", { "d": "M16 3.128a4 4 0 0 1 0 7.744" }],
228
- ["path", { "d": "M22 21v-2a4 4 0 0 0-3-3.87" }],
229
- ["circle", { "cx": "9", "cy": "7", "r": "4" }]
230
- ]
231
- };
232
- Icon($$renderer, spread_props([props, { icon: iconData }]));
233
- }
234
- function shipHealth(h) {
235
- if (h.stepFailed.length || h.trouble.some((t) => t.status === "failed")) {
236
- return { label: "Something failed", tone: "danger" };
237
- }
238
- const n = h.needsYou.length;
239
- if (n) return { label: `${n} need${n === 1 ? "s" : ""} you`, tone: "sea" };
240
- if (h.trouble.length) return { label: "Keeping an eye on a problem", tone: "warning" };
241
- return { label: "All well", tone: "success" };
242
- }
243
- const TOO_LARGE = `Too large · ${UPLOAD_MAX_BYTES / (1024 * 1024)} MB at most`;
244
- class Attachments {
245
- drafts = [];
246
- /** Files dropped on the chat, for the composer to take. */
247
- dropped = [];
248
- inflight = /* @__PURE__ */ new Map();
249
- /** Add files and start uploading them. `pasted`: from the clipboard, so an image under the browser's generic name gets a readable one. */
250
- add(files, token, pasted = false) {
251
- for (const f of files) {
252
- const generic = pasted && isImage(f.type) && /^image\.\w+$/.test(f.name);
253
- const name = generic || !f.name ? pastedName(f.type) : f.name;
254
- this.drafts.push({
255
- id: crypto.randomUUID(),
256
- name,
257
- size: f.size,
258
- type: f.type,
259
- preview: isImage(f.type) ? URL.createObjectURL(f) : null,
260
- state: "uploading",
261
- progress: 0,
262
- error: null,
263
- upload: null
264
- });
265
- const d = this.drafts[this.drafts.length - 1];
266
- if (f.size > UPLOAD_MAX_BYTES) this.fail(d, TOO_LARGE);
267
- else if (f.size === 0) this.fail(d, "Empty file");
268
- else this.send(d, f, token);
269
- }
270
- }
271
- remove(id) {
272
- this.inflight.get(id)?.abort();
273
- this.inflight.delete(id);
274
- const d = this.drafts.find((x) => x.id === id);
275
- if (d?.preview) URL.revokeObjectURL(d.preview);
276
- this.drafts = this.drafts.filter((x) => x.id !== id);
277
- }
278
- /** The uploaded files, handed to the message; failed ones stay listed. */
279
- take() {
280
- const ready = this.drafts.filter((d) => d.state === "ready" && d.upload);
281
- for (const d of ready) if (d.preview) URL.revokeObjectURL(d.preview);
282
- this.drafts = this.drafts.filter((d) => !ready.includes(d));
283
- return ready.map((d) => d.upload);
284
- }
285
- get uploading() {
286
- return this.drafts.some((d) => d.state === "uploading");
287
- }
288
- get ready() {
289
- return this.drafts.some((d) => d.state === "ready");
290
- }
291
- fail(d, error) {
292
- d.state = "failed";
293
- d.error = error;
294
- }
295
- send(d, file, token) {
296
- const xhr = new XMLHttpRequest();
297
- this.inflight.set(d.id, xhr);
298
- xhr.open("POST", "/api/firstmate/uploads");
299
- xhr.setRequestHeader(SESSION_HEADER, token);
300
- xhr.setRequestHeader(NAME_HEADER, encodeURIComponent(d.name));
301
- xhr.setRequestHeader(TYPE_HEADER, file.type);
302
- xhr.setRequestHeader("content-type", "application/octet-stream");
303
- xhr.upload.onprogress = (e) => {
304
- if (e.lengthComputable) d.progress = e.loaded / e.total;
305
- };
306
- xhr.onload = () => {
307
- this.inflight.delete(d.id);
308
- let body = {};
309
- try {
310
- body = JSON.parse(xhr.responseText);
311
- } catch {
312
- }
313
- if (xhr.status === 201 && typeof body.path === "string") {
314
- d.upload = {
315
- path: body.path,
316
- name: body.name ?? d.name,
317
- size: body.size ?? d.size,
318
- type: body.type ?? ""
319
- };
320
- d.progress = 1;
321
- d.state = "ready";
322
- } else if (xhr.status === 413) this.fail(d, TOO_LARGE);
323
- else this.fail(d, body.message ?? `Not uploaded · Wheelhouse answered ${xhr.status}`);
324
- };
325
- xhr.onerror = () => {
326
- this.inflight.delete(d.id);
327
- this.fail(d, "Could not reach the Wheelhouse server");
328
- };
329
- xhr.send(file);
330
- }
331
- }
332
- const attachments = new Attachments();
333
- function SentFiles($$renderer, $$props) {
334
- $$renderer.component(($$renderer2) => {
335
- let { files, pending = false } = $$props;
336
- let broken = {};
337
- const thumb = (a) => broken[a.path] ? null : thumbUrl(a);
338
- const images = derived(() => files.filter((a) => thumb(a)));
339
- let open = null;
340
- let $$settled = true;
341
- let $$inner_renderer;
342
- function $$render_inner($$renderer3) {
343
- $$renderer3.push(`<div${attr_class(`mt-1.5 w-full max-w-[min(85%,62ch)] min-w-0 rounded-lg border border-hair bg-card px-3 py-2 sm:min-w-72 ${pending ? "border-dashed opacity-60" : ""}`)} data-sent-files=""><p class="mb-0.5 text-[0.8rem] font-semibold tracking-[0.08em] text-muted-foreground" style="font-variant-caps: all-small-caps">${escape_html(files.length === 1 ? "1 file attached" : `${files.length} files attached`)}</p> <ul class="flex flex-col divide-y divide-hair"><!--[-->`);
344
- const each_array = ensure_array_like(files);
345
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
346
- let a = each_array[$$index];
347
- const src = thumb(a);
348
- $$renderer3.push(`<li class="flex items-center gap-2.5 py-1.5 text-sm">`);
349
- if (src) {
350
- $$renderer3.push(`<!--[0--><button type="button" class="shrink-0 cursor-zoom-in rounded"${attr("aria-label", `Enlarge ${stringify(a.name)}`)}><img${attr("src", src)} alt="" loading="lazy" class="size-10 rounded border border-hair bg-muted object-cover" onerror="this.__e=event"/></button>`);
351
- } else {
352
- $$renderer3.push(`<!--[-1--><span class="flex size-10 shrink-0 items-center justify-center rounded bg-sea/10 text-sea" aria-hidden="true">`);
353
- File_text($$renderer3, { class: "size-4" });
354
- $$renderer3.push(`<!----></span>`);
355
- }
356
- $$renderer3.push(`<!--]--> <span class="min-w-0 truncate font-medium"${attr("title", a.name)}>${escape_html(a.name)}</span> <span class="ml-auto shrink-0 pl-2 text-xs text-muted-foreground">${escape_html(kindLabel(a))} · ${escape_html(fileSize(a.size))}</span></li>`);
357
- }
358
- $$renderer3.push(`<!--]--></ul></div> `);
359
- if (images().length) {
360
- $$renderer3.push("<!--[0-->");
361
- Lightbox($$renderer3, {
362
- shots: images().map((a) => ({ name: a.name, url: thumb(a) ?? "" })),
363
- get index() {
364
- return open;
365
- },
366
- set index($$value) {
367
- open = $$value;
368
- $$settled = false;
369
- }
370
- });
371
- } else {
372
- $$renderer3.push("<!--[-1-->");
373
- }
374
- $$renderer3.push(`<!--]-->`);
375
- }
376
- do {
377
- $$settled = true;
378
- $$inner_renderer = $$renderer2.copy();
379
- $$render_inner($$inner_renderer);
380
- } while (!$$settled);
381
- $$renderer2.subsume($$inner_renderer);
382
- });
383
- }
384
- const headOf = (c) => ({
385
- cardId: c.id,
386
- taskId: c.taskId,
387
- taskTitle: c.taskTitle,
388
- projectId: c.projectId,
389
- kind: c.kind,
390
- key: c.key,
391
- question: c.choices?.intro || c.question,
392
- askedAt: c.askedAt
393
- });
394
- function chatDecisions(cards, answered, local) {
395
- const out = [];
396
- const shown = /* @__PURE__ */ new Set();
397
- for (const c of cards) {
398
- const head2 = headOf(c);
399
- const mine = local[c.id]?.question === c.question ? local[c.id] : null;
400
- const taken = c.sent && c.sent.delivery !== "failed" ? c.sent : null;
401
- if (mine && !(mine.posted && taken)) {
402
- out.push({
403
- id: c.id,
404
- head: head2,
405
- card: c,
406
- answer: {
407
- choice: mine.choice,
408
- label: choiceLabel(c, mine.choice),
409
- picks: mine.picks,
410
- note: mine.note,
411
- at: null,
412
- delivery: mine.posted ? null : "sending"
413
- }
414
- });
415
- } else if (taken) {
416
- shown.add(taken.requestId);
417
- out.push({
418
- id: c.id,
419
- head: head2,
420
- card: c,
421
- answer: {
422
- choice: taken.choice,
423
- label: choiceLabel(c, taken.choice),
424
- picks: taken.picks,
425
- note: taken.note,
426
- at: taken.at,
427
- delivery: taken.delivery
428
- }
429
- });
430
- } else {
431
- out.push({ id: c.id, head: head2, card: c, answer: null });
432
- }
433
- }
434
- const open = new Map(out.map((d) => [d.id, d]));
435
- for (const a of answered) {
436
- if (shown.has(a.requestId) || a.delivery === "failed") continue;
437
- if (open.get(a.cardId)?.head.question === a.question) continue;
438
- out.push({
439
- id: `answer:${a.requestId}`,
440
- head: {
441
- cardId: a.cardId,
442
- taskId: a.taskId,
443
- taskTitle: a.taskTitle,
444
- projectId: a.projectId,
445
- kind: a.kind,
446
- key: a.key,
447
- question: a.question,
448
- askedAt: a.askedAt
449
- },
450
- card: null,
451
- answer: {
452
- choice: a.choice,
453
- label: a.label,
454
- picks: a.picks,
455
- note: a.note,
456
- at: a.answeredAt,
457
- delivery: a.delivery
458
- }
459
- });
460
- }
461
- return out;
462
- }
463
- const time$1 = (s) => {
464
- const t = s ? Date.parse(s) : NaN;
465
- return Number.isNaN(t) ? null : t;
466
- };
467
- const placeAt = (d) => time$1(d.head.askedAt) ?? time$1(d.answer?.at);
468
- function placeDecisions(items, decisions) {
469
- const before = /* @__PURE__ */ new Map();
470
- const end = [];
471
- const times = items.map((it) => time$1(it.at));
472
- const first = times.find((t) => t !== null) ?? null;
473
- const sorted = decisions.map((d) => ({ d, at: placeAt(d) })).sort((a, b) => (a.at ?? Infinity) - (b.at ?? Infinity) || a.d.id.localeCompare(b.d.id));
474
- for (const { d, at } of sorted) {
475
- if (at === null) {
476
- end.push(d);
477
- continue;
478
- }
479
- if (d.answer && !d.card && (first === null || at < first)) continue;
480
- const i = times.findIndex((t) => t !== null && t > at);
481
- if (i < 0) end.push(d);
482
- else before.set(i, [...before.get(i) ?? [], d]);
483
- }
484
- return { before, end };
485
- }
486
- function chipLabel(r, max = 34) {
487
- const title = r.title.length > max ? `${r.title.slice(0, max - 1)}…` : r.title;
488
- const num = r.url?.match(/\/pull\/(\d+)/)?.[1];
489
- return r.kind === "pr" ? `PR${num ? ` #${num}` : ""} ${title}` : `# ${title}`;
490
- }
491
- const EXPANDED = /\[(?:PR (https?:\/\/\S+) — )?task ([A-Za-z0-9][A-Za-z0-9._-]*): ([^\]\n]+)\]/g;
492
- function parseRefs(text) {
493
- const out = [];
494
- let at = 0;
495
- for (const m of text.matchAll(EXPANDED)) {
496
- if (m.index > at) out.push(text.slice(at, m.index));
497
- out.push({
498
- kind: m[1] ? "pr" : "task",
499
- id: m[2],
500
- title: m[3].trim(),
501
- project: null,
502
- url: m[1] ?? null
503
- });
504
- at = m.index + m[0].length;
505
- }
506
- if (at < text.length) out.push(text.slice(at));
507
- return out;
508
- }
509
- function plain(text) {
510
- const md = text.replace(/```[^\n]*\n([\s\S]*?)```/g, "$1").replace(/!\[([^\]]*)\]\([^)]*\)/g, "$1").replace(/\[([^\]]+)\]\([^)]*\)/g, "$1").replace(/^\s{0,3}(?:#{1,6}\s+|>\s?|[-*+]\s+|\d+[.)]\s+)/gm, "").replace(/(\*\*|__|~~|`)/g, "").replace(/(^|[\s(])[*_]([^*_\n]+)[*_](?=[\s).,!?:;]|$)/g, "$1$2");
511
- return parseRefs(md).map((p) => typeof p === "string" ? p : chipLabel(p, 60)).join("").replace(/\s+/g, " ").trim();
512
- }
513
- const QUOTED$1 = /^> Replying to (Firstmate|my message): “(.*)”\n\n([\s\S]+)$/;
514
- function parseReply(text) {
515
- const m = text.replace(/\r\n?/g, "\n").match(QUOTED$1);
516
- if (!m || !m[3].trim()) return { to: null, body: text };
517
- return {
518
- to: { who: m[1] === "Firstmate" ? "firstmate" : "captain", snippet: m[2] },
519
- body: m[3]
520
- };
521
- }
522
- function quotes(to, text) {
523
- const line = plain(text);
524
- if (!line) return false;
525
- const s = to.snippet.endsWith("…") ? to.snippet.slice(0, -1) : to.snippet;
526
- return to.snippet.endsWith("…") ? line.startsWith(s) : line === s;
527
- }
528
- const SLUG = /^[^\s()]+$/;
529
- const QUOTED = /^> About the decision on ([^\s()]+) \(key ([^\s()]+)\), not an answer yet: “(.*)”\n\n([\s\S]+)$/;
530
- const cardIdOf = (ref) => `${ref.taskId}:${ref.key}`;
531
- const canDiscuss = (ref) => SLUG.test(ref.taskId) && SLUG.test(ref.key);
532
- function parseDiscuss(text) {
533
- const m = text.replace(/\r\n?/g, "\n").match(QUOTED);
534
- if (!m || !m[4].trim()) return null;
535
- return { cardId: cardIdOf({ taskId: m[1], key: m[2] }), body: m[4].trim() };
536
- }
537
- function threads(items, cards) {
538
- const byCard = /* @__PURE__ */ new Map();
539
- const hidden = /* @__PURE__ */ new Set();
540
- for (let i = 0; i < items.length; i++) {
541
- const it = items[i];
542
- if (it.kind !== "user") continue;
543
- const d = parseDiscuss(it.text);
544
- if (!d || !cards.has(d.cardId)) continue;
545
- const thread = byCard.get(d.cardId) ?? { messages: [], answering: false };
546
- byCard.set(d.cardId, thread);
547
- thread.messages.push({ id: it.id, who: "captain", text: d.body, at: it.at });
548
- thread.answering = false;
549
- hidden.add(it.id);
550
- const next = items[i + 1];
551
- if (next?.kind !== "turn" || next.trigger !== "captain") continue;
552
- if (next.parts.some((p) => p.kind === "question")) continue;
553
- hidden.add(next.id);
554
- for (const p of next.parts) {
555
- if (p.kind === "text")
556
- thread.messages.push({ id: p.id, who: "firstmate", text: p.text, at: next.at });
557
- }
558
- thread.answering = !next.done && !next.interrupted;
559
- i++;
560
- }
561
- return { byCard, hidden };
562
- }
563
- function pendingThreads(pending) {
564
- const out = /* @__PURE__ */ new Map();
565
- for (const p of pending) {
566
- const d = parseDiscuss(p.text);
567
- if (!d) continue;
568
- out.set(d.cardId, [...out.get(d.cardId) ?? [], { pending: p, body: d.body }]);
569
- }
570
- return out;
571
- }
572
- const SLACK_MS = 2 * 6e4;
573
- const escape = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
574
- function mentions(text, task) {
575
- if (new RegExp(`(?<![\\w-])${escape(task.id)}(?![\\w-])`).test(text)) return true;
576
- const urls = [task.pr?.url, task.preview?.url].filter((u) => !!u).map((u) => u.replace(/\/+$/, ""));
577
- return urls.some((u) => new RegExp(`${escape(u)}(?![\\w-])`).test(text));
578
- }
579
- const time = (s) => {
580
- const t = s ? Date.parse(s) : NaN;
581
- return Number.isNaN(t) ? null : t;
582
- };
583
- function previewCards(items, tasks) {
584
- const out = /* @__PURE__ */ new Map();
585
- for (const task of tasks) {
586
- if (!task.preview) continue;
587
- const reported = time(task.preview.reportedAt);
588
- const landed = task.status === "landed";
589
- const merged = landed ? time(task.mergedAt) : null;
590
- let first = null;
591
- let since = null;
592
- for (const it of items) {
593
- if (it.kind !== "turn") continue;
594
- const at = time(it.at);
595
- if (reported !== null && (at === null || at < reported - SLACK_MS)) continue;
596
- const part = it.parts.find((p) => p.kind === "text" && mentions(p.text, task));
597
- if (!part) continue;
598
- first ??= part.id;
599
- if (landed && (merged === null || at !== null && at >= merged - SLACK_MS)) {
600
- since = part.id;
601
- break;
602
- }
603
- }
604
- const anchor = since ?? first;
605
- if (!anchor) continue;
606
- out.set(anchor, [...out.get(anchor) ?? [], { task, landed }]);
607
- }
608
- return out;
609
- }
610
- function Activity($$renderer, $$props) {
611
- $$renderer.component(($$renderer2) => {
612
- let { steps, live: live2 = false } = $$props;
613
- let open = false;
614
- function label(s) {
615
- if (s.kind === "thinking") {
616
- return {
617
- verb: s.ms != null && s.ms >= 1e3 ? `Thought for ${duration(s.ms)}` : "Thought",
618
- summary: ""
619
- };
620
- }
621
- if (s.kind === "context") return { verb: s.label, summary: "" };
622
- return { verb: s.verb, summary: s.summary };
623
- }
624
- const latest = derived(() => label(steps[steps.length - 1]));
625
- $$renderer2.push(`<div><button class="flex max-w-full cursor-pointer items-center gap-2 rounded-md border border-hair bg-muted/50 px-2.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"${attr("aria-expanded", open)}>`);
626
- if (live2) {
627
- $$renderer2.push("<!--[0-->");
628
- Loader_circle($$renderer2, {
629
- class: "size-3.5 shrink-0 animate-spin text-sea",
630
- "aria-hidden": "true"
631
- });
632
- $$renderer2.push(`<!----> <span class="truncate">${escape_html(latest().verb)} ${escape_html(latest().summary)}</span>`);
633
- } else {
634
- $$renderer2.push(`<!--[-1--><span class="truncate">${escape_html(activitySummary(steps))}</span>`);
635
- }
636
- $$renderer2.push(`<!--]--> `);
637
- Chevron_right($$renderer2, {
638
- class: `size-3.5 shrink-0 transition-transform ${""}`,
639
- "aria-hidden": "true"
640
- });
641
- $$renderer2.push(`<!----></button> `);
642
- {
643
- $$renderer2.push("<!--[-1-->");
644
- }
645
- $$renderer2.push(`<!--]--></div>`);
646
- });
647
- }
648
- function Avatar($$renderer, $$props) {
649
- let { class: className = "" } = $$props;
650
- const SPOKES = [0, 45, 90, 135, 180, 225, 270, 315];
651
- $$renderer.push(`<svg viewBox="0 0 32 32"${attr_class(`shrink-0 ${stringify(className)}`)} role="img" aria-label="Firstmate" xmlns="http://www.w3.org/2000/svg"><circle cx="16" cy="16" r="15.25" class="fill-primary stroke-brass" stroke-width="1.5"></circle><g class="fill-none stroke-primary-foreground" stroke-linecap="round"><circle cx="16" cy="16" r="7" stroke-width="1.6"></circle><!--[-->`);
652
- const each_array = ensure_array_like(SPOKES);
653
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
654
- let a = each_array[$$index];
655
- $$renderer.push(`<line x1="16" y1="12.4" x2="16" y2="5.6" stroke-width="1.3"${attr("transform", `rotate(${stringify(a)} 16 16)`)}></line>`);
656
- }
657
- $$renderer.push(`<!--]--></g><circle cx="16" cy="16" r="2.4" class="fill-primary-foreground"></circle><!--[-->`);
658
- const each_array_1 = ensure_array_like(SPOKES);
659
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
660
- let a = each_array_1[$$index_1];
661
- $$renderer.push(`<circle cx="16" cy="5.2" r="1.3" class="fill-primary-foreground"${attr("transform", `rotate(${stringify(a)} 16 16)`)}></circle>`);
662
- }
663
- $$renderer.push(`<!--]--></svg>`);
664
- }
665
- function ChatApp($$renderer, $$props) {
666
- $$renderer.component(($$renderer2) => {
667
- let { id, app } = $$props;
668
- let open = false;
669
- $$renderer2.push(`<div class="max-w-[80ch] rounded-xl border bg-card"${attr("data-chat-app", id)}><button class="flex w-full min-w-0 cursor-pointer items-center gap-2 rounded-xl px-4 py-2.5 text-left text-sm transition-colors hover:bg-muted/60"${attr("aria-expanded", open)}>`);
670
- App_window($$renderer2, {
671
- class: "size-4 shrink-0 text-muted-foreground",
672
- "aria-hidden": "true"
673
- });
674
- $$renderer2.push(`<!----> <span class="shrink-0 font-medium">${escape_html(app.title)}</span> <span class="min-w-0 truncate text-muted-foreground">· an app from ${escape_html(app.server.title)}</span> <span class="ml-auto shrink-0 text-xs text-muted-foreground">${escape_html("Open")}</span> `);
675
- Chevron_right($$renderer2, {
676
- class: `size-3.5 shrink-0 text-muted-foreground transition-transform ${""}`,
677
- "aria-hidden": "true"
678
- });
679
- $$renderer2.push(`<!----></button> `);
680
- {
681
- $$renderer2.push("<!--[-1-->");
682
- }
683
- $$renderer2.push(`<!--]--></div>`);
684
- });
685
- }
686
- function ChatDecision($$renderer, $$props) {
687
- $$renderer.component(($$renderer2) => {
688
- let {
689
- decision,
690
- project = null,
691
- now,
692
- thread = null,
693
- pending = [],
694
- canAsk
695
- } = $$props;
696
- const KIND = {
697
- review: "Review question",
698
- decision: "Decision",
699
- blocked: "Stuck",
700
- hold: "Your call",
701
- merge: "Merge call",
702
- preview: "Preview sign-off"
703
- };
704
- const SUGGEST = [
705
- "What’s the risk?",
706
- "What would you pick?",
707
- "What if I leave it?"
708
- ];
709
- const head2 = derived(() => decision.head);
710
- const answer = derived(() => decision.answer);
711
- const count = derived(() => (thread?.messages.length ?? 0) + pending.length);
712
- const referable = derived(() => canDiscuss(head2()));
713
- const askable = derived(() => canAsk && referable());
714
- const open = derived(() => !answer() && count() > 0);
715
- let draft = "";
716
- const time2 = (at) => at ? new Date(at).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) : "";
717
- const delivered = derived(() => !answer() ? "" : answer().delivery === "sending" ? "Sending to Firstmate…" : answer().delivery === "delivered" ? "Firstmate has your answer" : answer().delivery === "failed" ? "Firstmate did not take it" : answer().delivery === "uncertain" ? "Sent; Firstmate has not confirmed it yet" : "Sent to Firstmate");
718
- function discuss($$renderer3) {
719
- $$renderer3.push(`<button${attr_class(`inline-flex min-h-10 cursor-pointer items-center gap-1.5 rounded-md px-2.5 text-sm text-muted-foreground hover:bg-accent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50 sm:min-h-9 ${open() ? "bg-accent text-foreground" : ""}`)}${attr("aria-expanded", open())}${attr("disabled", !referable() || !canAsk && !count(), true)}${attr("title", !referable() ? "This question’s task or key has spaces or brackets, so Firstmate cannot be asked about it here" : canAsk ? "Ask Firstmate about this question; it answers nothing" : "Firstmate cannot be messaged from here right now")} data-discuss="">`);
720
- Messages_square($$renderer3, { class: "size-3.5", "aria-hidden": "true" });
721
- $$renderer3.push(`<!---->Discuss`);
722
- if (count()) {
723
- $$renderer3.push(`<!--[0--><span class="text-xs tabular-nums">· ${escape_html(count())}</span>`);
724
- } else {
725
- $$renderer3.push("<!--[-1-->");
726
- }
727
- $$renderer3.push(`<!--]--></button>`);
728
- }
729
- $$renderer2.push(`<div class="flex w-full max-w-[min(100%,40rem)] flex-col"${attr("data-chat-decision", decision.id)}>`);
730
- if (decision.card && !answer()) {
731
- $$renderer2.push("<!--[0-->");
732
- OpenDecision($$renderer2, { card: decision.card, project, now, extra: discuss });
733
- } else if (answer()) {
734
- $$renderer2.push(`<!--[1--><article class="rounded-lg border border-l-[3px] border-l-success/70 bg-card px-4 pt-3 pb-2 sm:px-5" data-answered=""><header class="flex flex-wrap items-center gap-x-2 gap-y-1">`);
735
- if (project) {
736
- $$renderer2.push(`<!--[0--><span class="rounded-sm border px-1.5 text-[0.95rem] leading-[1.15rem] font-semibold tracking-[0.08em] text-muted-foreground [font-variant-caps:all-small-caps]">${escape_html(project)}</span>`);
737
- } else {
738
- $$renderer2.push("<!--[-1-->");
739
- }
740
- $$renderer2.push(`<!--]--> <span class="rounded bg-muted px-1.5 text-xs leading-[1.15rem] font-medium text-foreground/80">${escape_html(KIND[head2().kind])}</span> <span class="flex items-center gap-1 text-xs text-success">`);
741
- Circle_check($$renderer2, { class: "size-3.5", "aria-hidden": "true" });
742
- $$renderer2.push(`<!---->Answered</span> `);
743
- if (answer().at) {
744
- $$renderer2.push(`<!--[0--><span class="ml-auto text-xs text-muted-foreground tabular-nums">${escape_html(ago(answer().at, now))}</span>`);
745
- } else {
746
- $$renderer2.push("<!--[-1-->");
747
- }
748
- $$renderer2.push(`<!--]--></header> <p class="mt-1.5 text-sm leading-snug text-muted-foreground">${escape_html(head2().question)}</p> <a${attr("href", `/tasks/${stringify(encodeURIComponent(head2().taskId))}`)} class="block text-xs text-muted-foreground hover:text-foreground hover:underline">${escape_html(head2().taskTitle)}</a> <p class="mt-1.5 text-sm leading-snug">`);
749
- if (answer().choice === "close") {
750
- $$renderer2.push(`<!--[0-->You closed it without an answer`);
751
- } else if (answer().picks) {
752
- $$renderer2.push(`<!--[1-->You
753
- picked <span class="font-semibold">${escape_html(answer().picks)}</span>`);
754
- } else {
755
- $$renderer2.push(`<!--[-1-->You answered <span class="font-semibold">${escape_html(answer().label)}</span>`);
756
- }
757
- $$renderer2.push(`<!--]--></p> `);
758
- if (answer().note) {
759
- $$renderer2.push(`<!--[0--><p class="mt-1 border-l-2 border-hair pl-2.5 text-sm whitespace-pre-line text-muted-foreground">${escape_html(answer().note)}</p>`);
760
- } else {
761
- $$renderer2.push("<!--[-1-->");
762
- }
763
- $$renderer2.push(`<!--]--> <div class="mt-1 flex flex-wrap items-center gap-2 text-xs text-muted-foreground"><span role="status" class="inline-flex items-center gap-1">`);
764
- if (answer().delivery === "sending") {
765
- $$renderer2.push("<!--[0-->");
766
- Loader_circle($$renderer2, { class: "size-3 animate-spin", "aria-hidden": "true" });
767
- } else {
768
- $$renderer2.push("<!--[-1-->");
769
- }
770
- $$renderer2.push(`<!--]-->${escape_html(delivered())}${escape_html(answer().at ? ` · ${time2(answer().at)}` : "")}</span> <span class="ml-auto">`);
771
- discuss($$renderer2);
772
- $$renderer2.push(`<!----></span></div></article>`);
773
- } else {
774
- $$renderer2.push("<!--[-1-->");
775
- }
776
- $$renderer2.push(`<!--]--> `);
777
- if (open()) {
778
- $$renderer2.push(`<!--[0--><div class="mt-1 ml-4 border-l-2 border-hair pt-2 pl-4" role="region" aria-label="Discussion with Firstmate about this question" data-discussion="">`);
779
- if (thread?.messages.length || pending.length) {
780
- $$renderer2.push(`<!--[0--><ul class="flex flex-col gap-3 pb-1"><!--[-->`);
781
- const each_array = ensure_array_like(thread?.messages ?? []);
782
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
783
- let m = each_array[$$index];
784
- $$renderer2.push(`<li class="flex gap-2.5">`);
785
- if (m.who === "firstmate") {
786
- $$renderer2.push("<!--[0-->");
787
- Avatar($$renderer2, { class: "mt-0.5 size-5" });
788
- } else {
789
- $$renderer2.push(`<!--[-1--><span class="captain-avatar mt-0.5 !size-5 !text-[0.7rem]">C</span>`);
790
- }
791
- $$renderer2.push(`<!--]--> <div class="min-w-0 flex-1"><p class="text-xs text-muted-foreground"><span class="font-medium text-foreground">${escape_html(m.who === "firstmate" ? "Firstmate" : "You")}</span>`);
792
- if (m.at) {
793
- $$renderer2.push(`<!--[0-->· ${escape_html(time2(m.at))}`);
794
- } else {
795
- $$renderer2.push("<!--[-1-->");
796
- }
797
- $$renderer2.push(`<!--]--></p> `);
798
- if (m.who === "firstmate") {
799
- $$renderer2.push(`<!--[0--><div class="chat-md mt-0.5 text-sm">${html(markdown(m.text, { docLinks: true }))}</div>`);
800
- } else {
801
- $$renderer2.push(`<!--[-1--><p class="mt-0.5 text-sm leading-relaxed whitespace-pre-line">${escape_html(m.text)}</p>`);
802
- }
803
- $$renderer2.push(`<!--]--></div></li>`);
804
- }
805
- $$renderer2.push(`<!--]--> <!--[-->`);
806
- const each_array_1 = ensure_array_like(pending);
807
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
808
- let p = each_array_1[$$index_1];
809
- $$renderer2.push(`<li class="flex gap-2.5"${attr("data-pending", p.pending.state)}><span class="captain-avatar mt-0.5 !size-5 !text-[0.7rem]">C</span> <div class="min-w-0 flex-1"><p class="text-sm leading-relaxed whitespace-pre-line opacity-60">${escape_html(p.body)}</p> <p${attr_class(`mt-0.5 flex flex-wrap items-center gap-1.5 text-xs ${p.pending.state === "failed" ? "text-danger" : "text-muted-foreground"}`)} role="status">`);
810
- if (p.pending.state === "failed") {
811
- $$renderer2.push("<!--[0-->");
812
- Circle_x($$renderer2, { class: "size-3.5", "aria-hidden": "true" });
813
- $$renderer2.push(`<!---->${escape_html(pendingLabel(p.pending))} <button class="ml-1 inline-flex cursor-pointer items-center gap-1 rounded px-1.5 py-0.5 font-medium text-foreground hover:bg-muted">`);
814
- Rotate_cw($$renderer2, { class: "size-3", "aria-hidden": "true" });
815
- $$renderer2.push(`<!---->Retry</button> <button class="cursor-pointer rounded px-1.5 py-0.5 text-muted-foreground hover:bg-muted">Discard</button>`);
816
- } else {
817
- $$renderer2.push("<!--[-1-->");
818
- Loader_circle($$renderer2, { class: "size-3 animate-spin", "aria-hidden": "true" });
819
- $$renderer2.push(`<!---->${escape_html(pendingLabel(p.pending))}`);
820
- }
821
- $$renderer2.push(`<!--]--></p></div></li>`);
822
- }
823
- $$renderer2.push(`<!--]--></ul>`);
824
- } else {
825
- $$renderer2.push(`<!--[-1--><p class="text-xs text-muted-foreground">Ask Firstmate anything about this question. Asking answers nothing; the answer stays yours
826
- to give.</p>`);
827
- }
828
- $$renderer2.push(`<!--]--> `);
829
- if (thread?.answering) {
830
- $$renderer2.push(`<!--[0--><div class="flex gap-1 py-2 pl-7" role="status" aria-label="Firstmate is answering"><span class="size-1.5 animate-bounce rounded-full bg-muted-foreground [animation-delay:-0.3s]"></span> <span class="size-1.5 animate-bounce rounded-full bg-muted-foreground [animation-delay:-0.15s]"></span> <span class="size-1.5 animate-bounce rounded-full bg-muted-foreground"></span></div>`);
831
- } else {
832
- $$renderer2.push("<!--[-1-->");
833
- }
834
- $$renderer2.push(`<!--]--> `);
835
- if (askable()) {
836
- $$renderer2.push("<!--[0-->");
837
- if (!count() && !answer()) {
838
- $$renderer2.push(`<!--[0--><div class="mt-2 flex flex-wrap gap-1.5"><!--[-->`);
839
- const each_array_2 = ensure_array_like(SUGGEST);
840
- for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {
841
- let s = each_array_2[$$index_2];
842
- $$renderer2.push(`<button class="cursor-pointer rounded-full border border-hair bg-card px-2.5 py-0.5 text-xs text-muted-foreground hover:bg-accent hover:text-foreground">${escape_html(s)}</button>`);
843
- }
844
- $$renderer2.push(`<!--]--></div>`);
845
- } else {
846
- $$renderer2.push("<!--[-1-->");
847
- }
848
- $$renderer2.push(`<!--]--> <form class="mt-2 flex items-end gap-2 rounded-lg border border-input bg-background px-2.5 py-1.5 focus-within:ring-2 focus-within:ring-ring"><textarea rows="1" maxlength="2000" placeholder="Ask about this question…" aria-label="Ask Firstmate about this question" class="field-sizing-content max-h-32 min-h-7 flex-1 resize-none bg-transparent py-0.5 text-sm placeholder:text-muted-foreground focus:outline-none">`);
849
- const $$body = escape_html(draft);
850
- if ($$body) {
851
- $$renderer2.push(`${$$body}`);
852
- }
853
- $$renderer2.push(`</textarea> <button type="submit" class="flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-md bg-sea text-white disabled:cursor-not-allowed disabled:opacity-40 dark:text-slate-950" aria-label="Ask"${attr("disabled", !draft.trim(), true)}>`);
854
- Arrow_up($$renderer2, { class: "size-4" });
855
- $$renderer2.push(`<!----></button></form>`);
856
- } else {
857
- $$renderer2.push("<!--[-1-->");
858
- }
859
- $$renderer2.push(`<!--]--></div>`);
860
- } else {
861
- $$renderer2.push("<!--[-1-->");
862
- }
863
- $$renderer2.push(`<!--]--></div>`);
864
- });
865
- }
866
- function ChatPreview($$renderer, $$props) {
867
- $$renderer.component(($$renderer2) => {
868
- let { preview, project = null, now } = $$props;
869
- const task = derived(() => preview.task);
870
- const url = derived(() => task().preview?.url ?? null);
871
- let full = false;
872
- const CHECKS = {
873
- green: {
874
- icon: Circle_check,
875
- text: "Checks passed",
876
- tone: "text-success"
877
- },
878
- pending: {
879
- icon: Circle_dashed,
880
- text: "Checks running",
881
- tone: "text-muted-foreground"
882
- },
883
- red: { icon: Circle_x, text: "Checks failed", tone: "text-danger" }
884
- };
885
- const checks = derived(() => task().pipeline?.ci ? CHECKS[task().pipeline.ci] : null);
886
- const at = derived(() => preview.landed ? task().mergedAt ?? task().preview?.reportedAt : task().preview?.reportedAt);
887
- $$renderer2.push(`<div class="w-full max-w-[min(100%,40rem)] overflow-hidden rounded-xl border border-hair bg-card"${attr("data-chat-preview", preview.landed ? "landed" : "live")}><header class="flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1 px-4 pt-2.5 pb-2 text-sm"><span${attr_class(`flex shrink-0 items-center gap-1 rounded px-1.5 text-xs leading-[1.15rem] font-medium ${preview.landed ? "bg-success/10 text-success" : "bg-sea/10 text-sea"}`)}>`);
888
- if (preview.landed) {
889
- $$renderer2.push("<!--[0-->");
890
- Git_merge($$renderer2, { class: "size-3", "aria-hidden": "true" });
891
- $$renderer2.push(`<!---->Landed`);
892
- } else {
893
- $$renderer2.push("<!--[-1-->");
894
- Monitor_play($$renderer2, { class: "size-3", "aria-hidden": "true" });
895
- $$renderer2.push(`<!---->Live preview`);
896
- }
897
- $$renderer2.push(`<!--]--></span> `);
898
- if (project) {
899
- $$renderer2.push(`<!--[0--><span class="shrink-0 rounded-sm border px-1.5 text-[0.95rem] leading-[1.15rem] font-semibold tracking-[0.08em] text-muted-foreground [font-variant-caps:all-small-caps]">${escape_html(project)}</span>`);
900
- } else {
901
- $$renderer2.push("<!--[-1-->");
902
- }
903
- $$renderer2.push(`<!--]--> <a${attr("href", `/tasks/${stringify(encodeURIComponent(task().id))}`)} class="order-last min-w-0 basis-full truncate font-medium hover:underline sm:order-none sm:basis-auto">${escape_html(task().shortTitle)}</a> `);
904
- if (at()) {
905
- $$renderer2.push(`<!--[0--><span class="ml-auto shrink-0 text-xs text-muted-foreground tabular-nums">${escape_html(ago(at(), now))}</span>`);
906
- } else {
907
- $$renderer2.push("<!--[-1-->");
908
- }
909
- $$renderer2.push(`<!--]--></header> <div class="border-y border-hair">`);
910
- LivePreview($$renderer2, {
911
- taskId: task().id,
912
- compact: true,
913
- toolbar: false,
914
- feedback: false,
915
- onopen: () => full = true
916
- });
917
- $$renderer2.push(`<!----></div> <footer class="flex flex-wrap items-center gap-x-3 gap-y-1 px-4 py-2 text-xs">`);
918
- if (task().pr) {
919
- $$renderer2.push(`<!--[0--><a${attr("href", task().pr.url)} target="_blank" rel="noreferrer" class="inline-flex min-w-0 items-center gap-1 text-sea hover:underline">`);
920
- if (preview.landed) {
921
- $$renderer2.push("<!--[0-->");
922
- Git_merge($$renderer2, { class: "size-3.5 shrink-0", "aria-hidden": "true" });
923
- } else {
924
- $$renderer2.push("<!--[-1-->");
925
- Git_pull_request($$renderer2, { class: "size-3.5 shrink-0", "aria-hidden": "true" });
926
- }
927
- $$renderer2.push(`<!--]--><span class="truncate">${escape_html(task().pr.number ? `Pull request #${task().pr.number}` : "Pull request")}</span></a>`);
928
- } else {
929
- $$renderer2.push("<!--[-1-->");
930
- }
931
- $$renderer2.push(`<!--]--> `);
932
- if (checks()) {
933
- $$renderer2.push(`<!--[0--><span${attr_class(`inline-flex items-center gap-1 ${stringify(checks().tone)}`)}>`);
934
- if (checks().icon) {
935
- $$renderer2.push("<!--[-->");
936
- checks().icon($$renderer2, { class: "size-3.5", "aria-hidden": "true" });
937
- $$renderer2.push("<!--]-->");
938
- } else {
939
- $$renderer2.push("<!--[!-->");
940
- $$renderer2.push("<!--]-->");
941
- }
942
- $$renderer2.push(`${escape_html(checks().text)}</span>`);
943
- } else {
944
- $$renderer2.push("<!--[-1-->");
945
- }
946
- $$renderer2.push(`<!--]--> <span class="ml-auto flex items-center gap-1"><button type="button" class="inline-flex cursor-pointer items-center gap-1 rounded px-1.5 py-0.5 font-medium hover:bg-accent">`);
947
- Maximize_2($$renderer2, { class: "size-3.5", "aria-hidden": "true" });
948
- $$renderer2.push(`<!---->Full size</button> `);
949
- if (url()) {
950
- $$renderer2.push(`<!--[0--><a${attr("href", url())} target="_blank" rel="noreferrer" class="inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-muted-foreground hover:bg-accent hover:text-foreground"${attr("title", url())}>New tab`);
951
- External_link($$renderer2, { class: "size-3.5", "aria-hidden": "true" });
952
- $$renderer2.push(`<!----></a>`);
953
- } else {
954
- $$renderer2.push("<!--[-1-->");
955
- }
956
- $$renderer2.push(`<!--]--></span></footer></div> `);
957
- if (full && url()) {
958
- $$renderer2.push("<!--[0-->");
959
- PreviewStudio($$renderer2, {
960
- taskId: task().id,
961
- title: task().shortTitle,
962
- url: url(),
963
- feedback: !preview.landed,
964
- onclose: () => full = false
965
- });
966
- } else {
967
- $$renderer2.push("<!--[-1-->");
968
- }
969
- $$renderer2.push(`<!--]-->`);
970
- });
971
- }
972
- function AttachedFiles($$renderer, $$props) {
973
- $$renderer.component(($$renderer2) => {
974
- if (
975
- /**
976
- * The files waiting to go with the message, under the text in the composer:
977
- * one hairline-ruled row each, with a thumbnail for an image, its kind and
978
- * size (or how far it has uploaded, or why it failed) and a way to remove it.
979
- */
980
- attachments.drafts.length
981
- ) {
982
- $$renderer2.push(`<!--[0--><ul class="mx-2 mb-1 flex flex-col divide-y divide-hair border-t border-hair" aria-label="Attached files"><!--[-->`);
983
- const each_array = ensure_array_like(attachments.drafts);
984
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
985
- let d = each_array[$$index];
986
- $$renderer2.push(`<li class="flex items-center gap-2.5 px-1.5 py-1.5 text-sm"${attr("data-attachment", d.state)}>`);
987
- if (d.preview) {
988
- $$renderer2.push(`<!--[0--><img${attr("src", d.preview)} alt="" class="size-7 shrink-0 rounded border border-hair object-cover"/>`);
989
- } else {
990
- $$renderer2.push(`<!--[-1--><span class="flex size-7 shrink-0 items-center justify-center rounded bg-sea/10 text-sea" aria-hidden="true">`);
991
- File_text($$renderer2, { class: "size-3.5" });
992
- $$renderer2.push(`<!----></span>`);
993
- }
994
- $$renderer2.push(`<!--]--> <span class="min-w-0 truncate font-medium"${attr("title", d.name)}>${escape_html(d.name)}</span> <span${attr_class(`flex shrink-0 items-center gap-1 text-xs ${d.state === "failed" ? "text-danger" : "text-muted-foreground"}`)}${attr("role", d.state === "failed" ? "alert" : void 0)}>`);
995
- if (d.state === "uploading") {
996
- $$renderer2.push("<!--[0-->");
997
- Loader_circle($$renderer2, { class: "size-3 animate-spin", "aria-hidden": "true" });
998
- $$renderer2.push(`<!---->Uploading ${escape_html(Math.round(d.progress * 100))}%`);
999
- } else if (d.state === "failed") {
1000
- $$renderer2.push("<!--[1-->");
1001
- Circle_alert($$renderer2, { class: "size-3", "aria-hidden": "true" });
1002
- $$renderer2.push(`<!---->${escape_html(d.error)}`);
1003
- } else {
1004
- $$renderer2.push(`<!--[-1-->${escape_html(kindLabel(d))} · ${escape_html(fileSize(d.size))}`);
1005
- }
1006
- $$renderer2.push(`<!--]--></span> <button type="button" class="ml-auto flex size-7 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"${attr("aria-label", `Remove ${stringify(d.name)}`)} title="Remove">`);
1007
- X($$renderer2, { class: "size-3.5" });
1008
- $$renderer2.push(`<!----></button></li>`);
1009
- }
1010
- $$renderer2.push(`<!--]--></ul>`);
1011
- } else {
1012
- $$renderer2.push("<!--[-1-->");
1013
- }
1014
- $$renderer2.push(`<!--]-->`);
1015
- });
1016
- }
1017
- function Composer($$renderer, $$props) {
1018
- $$renderer.component(($$renderer2) => {
1019
- let {
1020
- via,
1021
- reason,
1022
- working,
1023
- held = null,
1024
- reply = null
1025
- } = $$props;
1026
- const canSend = derived(() => via !== null);
1027
- let editor = void 0;
1028
- let empty = true;
1029
- let stopping = false;
1030
- const placeholder = derived(() => via === "session" ? "Message Firstmate · / for commands · # to mention a task" : via === "inbox" ? "Message Firstmate’s inbox · # to mention a task" : reason ?? "Firstmate is not running here.");
1031
- $$renderer2.push(`<div class="relative">`);
1032
- {
1033
- $$renderer2.push("<!--[-1-->");
1034
- }
1035
- $$renderer2.push(`<!--]--> `);
1036
- if (reply) {
1037
- $$renderer2.push(`<!--[0--><div class="reply-draft" role="group" aria-label="Replying to a message">`);
1038
- Reply($$renderer2, { class: "size-4 shrink-0 text-sea", "aria-hidden": "true" });
1039
- $$renderer2.push(`<!----> <div class="min-w-0 flex-1"><p class="text-xs font-medium text-sea">Replying to ${escape_html(reply.who === "firstmate" ? "Firstmate" : "yourself")}</p> <p class="truncate text-sm text-muted-foreground">${escape_html(reply.snippet)}</p></div> <button class="flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground" aria-label="Cancel the reply" title="Cancel the reply (Esc)">`);
1040
- X($$renderer2, { class: "size-4" });
1041
- $$renderer2.push(`<!----></button></div>`);
1042
- } else {
1043
- $$renderer2.push("<!--[-1-->");
1044
- }
1045
- $$renderer2.push(`<!--]--> <div${attr_class(`rounded-lg border border-input bg-card shadow-sm focus-within:ring-2 focus-within:ring-ring/30 ${canSend() ? "" : "opacity-70"} ${reply ? "rounded-t-none" : ""}`)}><div class="flex items-end gap-2 p-2 pl-1.5"><input type="file" multiple="" class="hidden" tabindex="-1" aria-hidden="true"/> <button type="button" aria-label="Attach files"${attr("title", `Attach files (or drop them on the chat, or paste an image), up to ${stringify(UPLOAD_MAX_BYTES / (1024 * 1024))} MB each`)}${attr("disabled", !canSend(), true)} class="flex size-9 shrink-0 cursor-pointer items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40">`);
1046
- Paperclip($$renderer2, { class: "size-4" });
1047
- $$renderer2.push(`<!----></button> <div${attr("contenteditable", canSend() ? "true" : "false")} role="textbox"${attr("tabindex", canSend() ? 0 : -1)} aria-multiline="true" aria-label="Message Firstmate"${attr("aria-disabled", !canSend())}${attr("data-placeholder", placeholder())}${attr_class(`editor no-scrollbar max-h-48 min-h-10 flex-1 overflow-y-auto py-2 text-base leading-relaxed whitespace-pre-wrap outline-none ${"is-empty"} ${canSend() ? "" : "cursor-not-allowed"}`, "svelte-w61w6e")}></div> `);
1048
- MicButton($$renderer2, {
1049
- field: editor,
1050
- target: () => editableTarget(editor),
1051
- label: "Dictate a message",
1052
- disabled: !canSend()
1053
- });
1054
- $$renderer2.push(`<!----> `);
1055
- if (working && empty && !attachments.drafts.length && via === "session") {
1056
- $$renderer2.push(`<!--[0--><button aria-label="Stop Firstmate" title="Stop what Firstmate is doing (Escape)"${attr("disabled", stopping, true)} class="flex size-9 shrink-0 cursor-pointer items-center justify-center rounded-full bg-foreground text-background transition-opacity disabled:opacity-40">`);
1057
- {
1058
- $$renderer2.push("<!--[-1-->");
1059
- Square($$renderer2, { class: "size-3.5 fill-current" });
1060
- }
1061
- $$renderer2.push(`<!--]--></button>`);
1062
- } else {
1063
- $$renderer2.push(`<!--[-1--><button aria-label="Send"${attr("disabled", !attachments.ready || !canSend() || !!held || attachments.uploading, true)} class="flex size-9 shrink-0 cursor-pointer items-center justify-center rounded-full bg-foreground text-background transition-opacity disabled:cursor-not-allowed disabled:opacity-30">`);
1064
- Arrow_up($$renderer2, { class: "size-4" });
1065
- $$renderer2.push(`<!----></button>`);
1066
- }
1067
- $$renderer2.push(`<!--]--></div> `);
1068
- AttachedFiles($$renderer2);
1069
- $$renderer2.push(`<!----></div> `);
1070
- if (held) {
1071
- $$renderer2.push(`<!--[1--><p class="mt-2 text-xs text-muted-foreground" data-held="">${escape_html(held)}</p>`);
1072
- } else if (attachments.uploading) {
1073
- $$renderer2.push(`<!--[2--><p class="mt-2 text-xs text-muted-foreground">Send waits until the files finish uploading.</p>`);
1074
- } else if (via === "inbox") {
1075
- $$renderer2.push(`<!--[3--><p class="mt-2 text-xs text-muted-foreground">${escape_html("Firstmate runs in another terminal, so messages go to its inbox.")}</p>`);
1076
- } else {
1077
- $$renderer2.push("<!--[-1-->");
1078
- }
1079
- $$renderer2.push(`<!--]--></div>`);
1080
- });
1081
- }
1082
- function MenuCard($$renderer, $$props) {
1083
- $$renderer.component(($$renderer2) => {
1084
- let { menu } = $$props;
1085
- let busy = false;
1086
- $$renderer2.push(`<div class="max-w-[80ch] rounded-lg border border-t-2 border-t-sea bg-card p-4" role="group" aria-label="A Claude Code menu is open"><p class="mb-2 flex items-center gap-2 font-display text-[1.15rem] font-medium">`);
1087
- App_window($$renderer2, { class: "size-4 text-sea", "aria-hidden": "true" });
1088
- $$renderer2.push(`<!---->A Claude Code menu is open</p> <p class="mb-3 text-sm text-muted-foreground">`);
1089
- if (menu.title) {
1090
- $$renderer2.push(`<!--[0--><span class="font-medium text-foreground">${escape_html(menu.title)}</span>`);
1091
- } else {
1092
- $$renderer2.push(`<!--[-1-->A menu`);
1093
- }
1094
- $$renderer2.push(`<!--]--> is open in Firstmate’s session, and the chat can’t use it. Close it to carry on chatting, or use it
1095
- in Firstmate’s terminal.</p> <div class="flex flex-wrap items-center gap-3 text-sm"><button class="flex cursor-pointer items-center gap-1.5 rounded-lg bg-foreground px-3 py-1.5 font-medium text-background disabled:opacity-40"${attr("disabled", busy, true)}>`);
1096
- {
1097
- $$renderer2.push("<!--[-1-->");
1098
- X($$renderer2, { class: "size-4", "aria-hidden": "true" });
1099
- }
1100
- $$renderer2.push(`<!--]-->Close menu</button> <button class="flex cursor-pointer items-center gap-1.5 text-muted-foreground hover:text-foreground">`);
1101
- Square_terminal($$renderer2, { class: "size-4", "aria-hidden": "true" });
1102
- $$renderer2.push(`<!---->Use it in the terminal</button> `);
1103
- {
1104
- $$renderer2.push("<!--[-1-->");
1105
- }
1106
- $$renderer2.push(`<!--]--></div></div>`);
1107
- });
1108
- }
1109
- function PickerCard($$renderer, $$props) {
1110
- $$renderer.component(($$renderer2) => {
1111
- let { picker } = $$props;
1112
- let busy = false;
1113
- $$renderer2.push(`<div class="max-w-[80ch] rounded-lg border border-t-2 border-t-sea bg-card p-4" role="group" aria-label="Firstmate is asking you"><p class="mb-2 flex items-center gap-2 font-display text-[1.15rem] font-medium">`);
1114
- Message_circle_question_mark($$renderer2, { class: "size-4 text-sea", "aria-hidden": "true" });
1115
- $$renderer2.push(`<!---->Firstmate is asking you `);
1116
- {
1117
- $$renderer2.push("<!--[-1-->");
1118
- }
1119
- $$renderer2.push(`<!--]--></p> `);
1120
- if (picker.tabs.length > 1) {
1121
- $$renderer2.push(`<!--[0--><div class="mb-3 flex flex-wrap gap-1.5 text-xs"><!--[-->`);
1122
- const each_array = ensure_array_like(picker.tabs);
1123
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1124
- let tab = each_array[$$index];
1125
- $$renderer2.push(`<span${attr_class(`flex items-center gap-1 rounded border px-1.5 py-0.5 ${tab.done ? "text-muted-foreground" : "border-sea/50 text-foreground"}`)}>`);
1126
- if (tab.done) {
1127
- $$renderer2.push("<!--[0-->");
1128
- Check($$renderer2, { class: "size-3", "aria-label": "Answered" });
1129
- } else {
1130
- $$renderer2.push("<!--[-1-->");
1131
- }
1132
- $$renderer2.push(`<!--]-->${escape_html(tab.label)}</span>`);
1133
- }
1134
- $$renderer2.push(`<!--]--></div>`);
1135
- } else {
1136
- $$renderer2.push("<!--[-1-->");
1137
- }
1138
- $$renderer2.push(`<!--]--> `);
1139
- if (picker.title) {
1140
- $$renderer2.push(`<!--[0--><p class="mb-3 text-base whitespace-pre-line">${escape_html(picker.title)}</p>`);
1141
- } else {
1142
- $$renderer2.push("<!--[-1-->");
1143
- }
1144
- $$renderer2.push(`<!--]--> <div class="flex flex-col gap-1.5"><!--[-->`);
1145
- const each_array_1 = ensure_array_like(picker.options);
1146
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
1147
- let o = each_array_1[$$index_1];
1148
- if (o.freeText) {
1149
- $$renderer2.push(`<!--[0--><button class="flex w-full cursor-pointer items-center gap-3 rounded-lg border border-dashed bg-background px-3 py-2 text-left text-sm text-muted-foreground hover:border-sea/60">`);
1150
- Square_terminal($$renderer2, { class: "size-4 shrink-0", "aria-hidden": "true" });
1151
- $$renderer2.push(`<!----> <span>Type an answer in Firstmate’s terminal</span></button>`);
1152
- } else {
1153
- $$renderer2.push(`<!--[-1--><button${attr_class(`flex w-full cursor-pointer items-start gap-3 rounded-lg border px-3 py-2 text-left text-sm transition-colors disabled:cursor-default ${o.checked ? "border-sea bg-sea/10" : "bg-background hover:border-sea/60"}`)}${attr("disabled", busy, true)}${attr("aria-pressed", o.checked === null ? void 0 : o.checked)}><span class="tabular w-4 shrink-0 text-muted-foreground">`);
1154
- if (o.checked) {
1155
- $$renderer2.push("<!--[0-->");
1156
- Check($$renderer2, { class: "size-4 text-sea", "aria-label": "Chosen" });
1157
- } else {
1158
- $$renderer2.push(`<!--[-1-->${escape_html(o.n)}`);
1159
- }
1160
- $$renderer2.push(`<!--]--></span> <span class="min-w-0"><span class="font-medium">${escape_html(o.label)}</span> `);
1161
- if (o.description) {
1162
- $$renderer2.push(`<!--[0--><span class="block text-xs text-muted-foreground">${escape_html(o.description)}</span>`);
1163
- } else {
1164
- $$renderer2.push("<!--[-1-->");
1165
- }
1166
- $$renderer2.push(`<!--]--></span></button>`);
1167
- }
1168
- $$renderer2.push(`<!--]-->`);
1169
- }
1170
- $$renderer2.push(`<!--]--></div> <div class="mt-3 flex flex-wrap items-center gap-3 text-sm">`);
1171
- if (picker.multiSelect && picker.submitMoves !== null) {
1172
- $$renderer2.push(`<!--[0--><button class="cursor-pointer rounded-lg bg-foreground px-3 py-1.5 font-medium text-background disabled:opacity-40"${attr("disabled", !picker.options.some((o) => o.checked), true)}>Done</button>`);
1173
- } else {
1174
- $$renderer2.push("<!--[-1-->");
1175
- }
1176
- $$renderer2.push(`<!--]--> <button class="flex cursor-pointer items-center gap-1.5 text-muted-foreground hover:text-foreground">`);
1177
- Square_terminal($$renderer2, { class: "size-4", "aria-hidden": "true" });
1178
- $$renderer2.push(`<!---->Answer in the terminal instead</button> `);
1179
- {
1180
- $$renderer2.push("<!--[-1-->");
1181
- }
1182
- $$renderer2.push(`<!--]--></div></div>`);
1183
- });
1184
- }
1185
- function QuestionCard($$renderer, $$props) {
1186
- $$renderer.component(($$renderer2) => {
1187
- let { part } = $$props;
1188
- if (part.answers) {
1189
- $$renderer2.push(`<!--[0--><div class="flex max-w-[80ch] flex-col gap-1 text-sm text-muted-foreground"><!--[-->`);
1190
- const each_array = ensure_array_like(part.questions);
1191
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1192
- let q = each_array[$$index];
1193
- $$renderer2.push(`<p class="flex items-start gap-2">`);
1194
- Circle_check($$renderer2, {
1195
- class: "mt-0.5 size-4 shrink-0 text-success",
1196
- "aria-hidden": "true"
1197
- });
1198
- $$renderer2.push(`<!----> <span>${escape_html(q.question)} <span class="font-medium text-foreground">${escape_html(part.answers[q.question] ?? "No answer")}</span></span></p>`);
1199
- }
1200
- $$renderer2.push(`<!--]--></div>`);
1201
- } else {
1202
- $$renderer2.push("<!--[-1-->");
1203
- }
1204
- $$renderer2.push(`<!--]-->`);
1205
- });
1206
- }
1207
- function captainText($$renderer, text, linked) {
1208
- $$renderer.push(`<!--[-->`);
1209
- const each_array = ensure_array_like(parseRefs(text));
1210
- for (let pi = 0, $$length = each_array.length; pi < $$length; pi++) {
1211
- let piece = each_array[pi];
1212
- if (typeof piece === "string") {
1213
- $$renderer.push(`<!--[0-->${escape_html(piece)}`);
1214
- } else if (linked) {
1215
- $$renderer.push(`<!--[1--><a${attr("href", `/tasks/${stringify(encodeURIComponent(piece.id))}`)} class="mx-px inline-block rounded-md bg-sea/15 px-1.5 text-[0.875em] font-medium whitespace-nowrap text-sea no-underline hover:bg-sea/25"${attr("title", piece.url ?? piece.title)}>${escape_html(chipLabel(piece))}</a>`);
1216
- } else {
1217
- $$renderer.push(`<!--[-1--><span class="mx-px inline-block rounded-md bg-sea/15 px-1.5 text-[0.875em] font-medium whitespace-nowrap text-sea">${escape_html(chipLabel(piece))}</span>`);
1218
- }
1219
- $$renderer.push(`<!--]-->`);
1220
- }
1221
- $$renderer.push(`<!--]-->`);
1222
- }
1223
- function Chat($$renderer, $$props) {
1224
- $$renderer.component(($$renderer2) => {
1225
- let {
1226
- railOpen,
1227
- railSide = "right",
1228
- onSwapRail,
1229
- waiting = 0,
1230
- health,
1231
- now,
1232
- pluginEntries = [],
1233
- tasks = [],
1234
- projects = []
1235
- /** Which side of the chat the On deck rail docks to. */
1236
- /** Moves the rail to the chat's other side; without it there is no button. */
1237
- /** Items waiting on the captain, for the rail button's dot. */
1238
- /** Plugin entries for the fleet, whose bridge.card cards follow replies that link them. */
1239
- /** The fleet's tasks, whose live previews follow the replies about them. */
1240
- /** The fleet's projects, for the cards' project names. */
1241
- } = $$props;
1242
- const HEALTH_ICON = {
1243
- success: Circle_check,
1244
- sea: Hand,
1245
- warning: Triangle_alert,
1246
- danger: Circle_x
1247
- };
1248
- const HEALTH_TEXT = {
1249
- success: "text-success",
1250
- sea: "text-sea",
1251
- warning: "text-warning",
1252
- danger: "text-danger"
1253
- };
1254
- const session = derived(() => firstmateChat.session);
1255
- const chat = derived(() => firstmateChat.chat);
1256
- const items = derived(() => chat().items);
1257
- const lastItem = derived(() => items()[items().length - 1]);
1258
- const working = derived(() => session()?.busy === true || lastItem()?.kind === "turn" && !lastItem().done && !lastItem().interrupted);
1259
- const picker = derived(() => session()?.canSend ? session().picker : null);
1260
- const menu = derived(() => session()?.canSend ? session().menu : null);
1261
- const waitingOnAnswer = derived(() => !!picker() || !!menu());
1262
- const held = derived(() => picker() ? "Answer the question above to send your message." : menu() ? "Close the Claude Code menu above to send your message." : null);
1263
- const lastCheck = derived(() => chat().checks[chat().checks.length - 1]);
1264
- const checking = derived(() => !!lastCheck() && !lastCheck().done);
1265
- const HIcon = derived(() => HEALTH_ICON[health.tone]);
1266
- const canSend = derived(() => session()?.canSend === true);
1267
- const via = derived(() => canSend() ? "session" : session()?.state === "external" && currentHealth()?.messaging.available ? "inbox" : null);
1268
- const inboxView = derived(() => inbox.view(page.data.inbox));
1269
- const decisions = derived(() => inboxView()?.available ? chatDecisions(inboxView().cards, inboxView().answered ?? [], inbox.pending) : []);
1270
- const placed = derived(() => placeDecisions(items(), decisions()));
1271
- const shown = derived(() => [...[...placed().before.values()].flat(), ...placed().end]);
1272
- const decisionIds = derived(() => new Set(shown().map((d) => d.head.cardId)));
1273
- const discussed = derived(() => threads(items(), decisionIds()));
1274
- const asking = derived(() => pendingThreads(firstmateChat.pending));
1275
- const threadOwner = derived(() => {
1276
- const owner = /* @__PURE__ */ new Map();
1277
- for (const d of shown()) {
1278
- const held2 = owner.get(d.head.cardId);
1279
- if (!held2 || !shown().find((x) => x.id === held2)?.card) owner.set(d.head.cardId, d.id);
1280
- }
1281
- return owner;
1282
- });
1283
- const chatPending = derived(() => firstmateChat.pending.filter((p) => {
1284
- const d = parseDiscuss(p.text);
1285
- return !d || !decisionIds().has(d.cardId);
1286
- }));
1287
- const previews = derived(() => previewCards(items(), tasks));
1288
- const projectName = (id) => !id || id === "unassigned" ? null : projects.find((p) => p.id === id)?.name ?? id;
1289
- let showChecks = false;
1290
- let terminalOpen = false;
1291
- let apps = {};
1292
- let openNotice = {};
1293
- let starting = false;
1294
- const GROUP_MS = 5 * 6e4;
1295
- function groupedWithPrevious(i) {
1296
- let j = i - 1;
1297
- while (j >= 0 && discussed().hidden.has(items()[j].id)) j--;
1298
- for (let k = j + 1; k <= i; k++) if (placed().before.has(k)) return false;
1299
- const a = items()[j];
1300
- const b = items()[i];
1301
- if (!a || !b || a.kind !== b.kind || b.kind !== "user" && b.kind !== "turn") return false;
1302
- return Date.parse(b.at) - Date.parse(a.at) <= GROUP_MS;
1303
- }
1304
- const time2 = (at) => new Date(at).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
1305
- const status = derived(() => {
1306
- if (firstmateChat.connection === "lost") return { dot: "bg-danger", label: "Reconnecting" };
1307
- if (!session()) return { dot: "bg-muted-foreground", label: "Connecting" };
1308
- if (session().state === "external") return { dot: "bg-muted-foreground", label: "Read-only" };
1309
- if (session().state === "starting") return { dot: "animate-pulse bg-sea", label: "Starting" };
1310
- if (session().state !== "ours") return { dot: "bg-muted-foreground", label: "Not running" };
1311
- if (picker()) return { dot: "bg-sea", label: "Asking you" };
1312
- if (menu()) return { dot: "bg-sea", label: "Menu open" };
1313
- return working() ? { dot: "animate-pulse bg-sea", label: "Working" } : { dot: "bg-success", label: "Waiting for you" };
1314
- });
1315
- let replyTo = null;
1316
- const captainWords = (text) => parseAttachments(parseReply(text).body).text;
1317
- function original(to, before = items().length) {
1318
- for (let i = Math.min(before, items().length) - 1; i >= 0; i--) {
1319
- const it = items()[i];
1320
- if (to.who === "captain" && it.kind === "user" && quotes(to, captainWords(it.text))) return it.id;
1321
- if (to.who === "firstmate" && it.kind === "turn") for (let pi = it.parts.length - 1; pi >= 0; pi--) {
1322
- const part = it.parts[pi];
1323
- if (part.kind === "text" && quotes(to, part.text)) return part.id;
1324
- }
1325
- }
1326
- return null;
1327
- }
1328
- let revealed = null;
1329
- const isLive = (item, pi) => working() && item === lastItem() && item.kind === "turn" && pi === item.parts.length - 1;
1330
- function replyButton($$renderer3, key, who, text) {
1331
- $$renderer3.push(`<button${attr_class(`reply-btn ${revealed === key ? "is-revealed" : ""}`)}${attr("aria-label", who === "firstmate" ? "Reply to this message from Firstmate" : "Reply to your message")} title="Reply">`);
1332
- Reply($$renderer3, { class: "size-4", "aria-hidden": "true" });
1333
- $$renderer3.push(`<!----></button>`);
1334
- }
1335
- function quote($$renderer3, to, target) {
1336
- $$renderer3.push(`<button${attr_class(`reply-quote reply-quote-${stringify(to.who)}`)}${attr("disabled", !target, true)}${attr("title", target ? "Show the message this replies to" : "That message is no longer in the chat")}><span class="reply-quote-who">${escape_html(to.who === "firstmate" ? "Firstmate" : "You")}</span> <span class="reply-quote-text">${escape_html(to.snippet)}</span></button>`);
1337
- }
1338
- function decisionRow($$renderer3, d) {
1339
- $$renderer3.push(`<div class="msg msg-firstmate msg-grouped"><span class="msg-gutter" aria-hidden="true"></span> <div class="min-w-0 flex-1">`);
1340
- ChatDecision($$renderer3, {
1341
- decision: d,
1342
- project: projectName(d.head.projectId),
1343
- now,
1344
- thread: threadOwner().get(d.head.cardId) === d.id ? discussed().byCard.get(d.head.cardId) ?? null : null,
1345
- pending: threadOwner().get(d.head.cardId) === d.id ? asking().get(d.head.cardId) ?? [] : [],
1346
- canAsk: !!via()
1347
- });
1348
- $$renderer3.push(`<!----></div></div>`);
1349
- }
1350
- $$renderer2.push(`<section class="chat-grid relative flex min-h-0 min-w-0 flex-1 flex-col bg-panel" aria-label="Firstmate">`);
1351
- {
1352
- $$renderer2.push("<!--[-1-->");
1353
- }
1354
- $$renderer2.push(`<!--]--> <div class="border-b"><div class="flex h-11 items-center gap-3 px-4 text-sm sm:px-6 lg:px-10"><span class="font-medium">Firstmate</span> `);
1355
- if (chat().title) {
1356
- $$renderer2.push(`<!--[0--><span class="hidden truncate text-muted-foreground sm:inline">${escape_html(chat().title)}</span>`);
1357
- } else {
1358
- $$renderer2.push("<!--[-1-->");
1359
- }
1360
- $$renderer2.push(`<!--]--> <div class="relative ml-auto shrink-0"><button class="flex cursor-pointer items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs transition-colors hover:bg-muted"${attr("aria-expanded", showChecks)} aria-haspopup="dialog">`);
1361
- if (HIcon()) {
1362
- $$renderer2.push("<!--[-->");
1363
- HIcon()($$renderer2, {
1364
- class: `size-3.5 ${stringify(HEALTH_TEXT[health.tone])}`,
1365
- "aria-hidden": "true"
1366
- });
1367
- $$renderer2.push("<!--]-->");
1368
- } else {
1369
- $$renderer2.push("<!--[!-->");
1370
- $$renderer2.push("<!--]-->");
1371
- }
1372
- $$renderer2.push(` <span class="font-medium">${escape_html(health.label)}</span> <span class="hidden text-muted-foreground md:inline">· `);
1373
- if (checking()) {
1374
- $$renderer2.push(`<!--[0--><span class="inline-flex items-center gap-1">`);
1375
- Loader_circle($$renderer2, { class: "size-3 animate-spin", "aria-hidden": "true" });
1376
- $$renderer2.push(`<!---->checking now</span>`);
1377
- } else if (lastCheck()) {
1378
- $$renderer2.push(`<!--[1-->checked ${escape_html(ago(lastCheck().at, now))}`);
1379
- } else {
1380
- $$renderer2.push(`<!--[-1-->no checks yet`);
1381
- }
1382
- $$renderer2.push(`<!--]--></span></button> `);
1383
- {
1384
- $$renderer2.push("<!--[-1-->");
1385
- }
1386
- $$renderer2.push(`<!--]--></div> <span class="hidden shrink-0 items-center gap-2 text-muted-foreground md:flex"><span${attr_class(`size-2 rounded-full ${stringify(status().dot)}`)} aria-hidden="true"></span>${escape_html(status().label)}</span> `);
1387
- if (canSend()) {
1388
- $$renderer2.push(`<!--[0--><button${attr_class(`flex size-9 shrink-0 cursor-pointer items-center justify-center rounded-md transition-colors hover:bg-muted ${"text-muted-foreground"}`)}${attr("aria-label", "Show Firstmate’s terminal")}${attr("aria-pressed", terminalOpen)} title="Firstmate’s own terminal, for anything the chat cannot show">`);
1389
- Square_terminal($$renderer2, { class: "size-4" });
1390
- $$renderer2.push(`<!----></button>`);
1391
- } else {
1392
- $$renderer2.push("<!--[-1-->");
1393
- }
1394
- $$renderer2.push(`<!--]--> `);
1395
- if (onSwapRail && railOpen) {
1396
- $$renderer2.push(`<!--[0--><button class="hidden size-9 shrink-0 cursor-pointer items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground lg:flex"${attr("aria-label", railSide === "left" ? "Move On deck to the right" : "Move On deck to the left")}${attr("title", railSide === "left" ? "Move On deck to the right" : "Move On deck to the left")}>`);
1397
- Arrow_left_right($$renderer2, { class: "size-4" });
1398
- $$renderer2.push(`<!----></button>`);
1399
- } else {
1400
- $$renderer2.push("<!--[-1-->");
1401
- }
1402
- $$renderer2.push(`<!--]--> <button class="relative -mr-2 flex size-9 shrink-0 cursor-pointer items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"${attr("aria-label", railOpen ? "Hide tasks and decisions" : "Show tasks and decisions")}${attr("aria-pressed", railOpen)}>`);
1403
- if (railSide === "left") {
1404
- $$renderer2.push("<!--[0-->");
1405
- Panel_left($$renderer2, { class: "size-4" });
1406
- } else {
1407
- $$renderer2.push("<!--[-1-->");
1408
- Panel_right($$renderer2, { class: "size-4" });
1409
- }
1410
- $$renderer2.push(`<!--]--> `);
1411
- if (waiting && !railOpen) {
1412
- $$renderer2.push(`<!--[0--><span class="absolute top-1.5 right-1.5 size-2 rounded-full bg-sea"${attr("aria-label", `${stringify(waiting)} waiting on you`)}></span>`);
1413
- } else {
1414
- $$renderer2.push("<!--[-1-->");
1415
- }
1416
- $$renderer2.push(`<!--]--></button></div></div> <div class="relative min-h-0 flex-1"><div class="no-scrollbar h-full overflow-y-auto"><div class="flex flex-col gap-6 px-4 pt-8 pb-10 sm:px-6 lg:px-10">`);
1417
- if (firstmateChat.source?.truncated) {
1418
- $$renderer2.push(`<!--[0--><p class="text-xs text-muted-foreground">Earlier messages are not shown here; the full conversation is in Firstmate’s terminal.</p>`);
1419
- } else {
1420
- $$renderer2.push("<!--[-1-->");
1421
- }
1422
- $$renderer2.push(`<!--]--> `);
1423
- if (session() && session().state !== "ours" && session().state !== "external") {
1424
- $$renderer2.push(`<!--[0--><div class="my-8 flex max-w-md flex-col items-start gap-3"><p class="font-medium">${escape_html(session().state === "starting" ? "Starting Firstmate…" : "Firstmate is not running")}</p> `);
1425
- if (session().reason && session().state !== "starting") {
1426
- $$renderer2.push(`<!--[0--><p class="text-sm text-muted-foreground">${escape_html(session().reason)}</p>`);
1427
- } else {
1428
- $$renderer2.push("<!--[-1-->");
1429
- }
1430
- $$renderer2.push(`<!--]--> `);
1431
- if (session().state === "none") {
1432
- $$renderer2.push(`<!--[0--><button class="flex cursor-pointer items-center gap-2 rounded-lg bg-foreground px-4 py-2 text-sm font-medium text-background disabled:opacity-50"${attr("disabled", starting, true)}>`);
1433
- {
1434
- $$renderer2.push("<!--[-1-->");
1435
- }
1436
- $$renderer2.push(`<!--]-->Start Firstmate here</button> <p class="text-xs text-muted-foreground">It runs in Firstmate’s checkout${escape_html(session().skipPermissions ? " with --dangerously-skip-permissions" : "")}, inside a tmux session that keeps going when you close Wheelhouse.</p> `);
1437
- {
1438
- $$renderer2.push("<!--[-1-->");
1439
- }
1440
- $$renderer2.push(`<!--]-->`);
1441
- } else {
1442
- $$renderer2.push("<!--[-1-->");
1443
- }
1444
- $$renderer2.push(`<!--]--></div>`);
1445
- } else if (!items().length) {
1446
- $$renderer2.push(`<!--[1--><p class="py-20 text-sm text-muted-foreground">${escape_html(session() ? "No messages yet. Say hello to Firstmate." : "Reading the conversation…")}</p>`);
1447
- } else {
1448
- $$renderer2.push("<!--[-1-->");
1449
- }
1450
- $$renderer2.push(`<!--]--> <!--[-->`);
1451
- const each_array_2 = ensure_array_like(items());
1452
- for (let i = 0, $$length = each_array_2.length; i < $$length; i++) {
1453
- let item = each_array_2[i];
1454
- const grouped = groupedWithPrevious(i);
1455
- $$renderer2.push(`<!--[-->`);
1456
- const each_array_3 = ensure_array_like(placed().before.get(i) ?? []);
1457
- for (let $$index_2 = 0, $$length2 = each_array_3.length; $$index_2 < $$length2; $$index_2++) {
1458
- let d = each_array_3[$$index_2];
1459
- decisionRow($$renderer2, d);
1460
- }
1461
- $$renderer2.push(`<!--]--> `);
1462
- if (discussed().hidden.has(item.id)) {
1463
- $$renderer2.push("<!--[0-->");
1464
- } else if (item.kind === "user") {
1465
- $$renderer2.push("<!--[1-->");
1466
- const reply = parseReply(item.text);
1467
- const sent = parseAttachments(reply.body);
1468
- $$renderer2.push(`<article${attr_class(`msg msg-captain ${grouped ? "msg-grouped" : ""}`)}${attr("aria-label", `You, ${stringify(time2(item.at))}`)}>`);
1469
- if (grouped) {
1470
- $$renderer2.push(`<!--[0--><span class="msg-gutter" aria-hidden="true"></span>`);
1471
- } else {
1472
- $$renderer2.push(`<!--[-1--><span class="captain-avatar">C</span>`);
1473
- }
1474
- $$renderer2.push(`<!--]--> <div class="min-w-0 flex-1">`);
1475
- if (!grouped) {
1476
- $$renderer2.push(`<!--[0--><header class="msg-head"><span class="msg-name">You</span><time${attr("datetime", item.at)}>${escape_html(time2(item.at))}</time> `);
1477
- if (item.queued) {
1478
- $$renderer2.push(`<!--[0--><span>· sent while Firstmate was working</span>`);
1479
- } else {
1480
- $$renderer2.push("<!--[-1-->");
1481
- }
1482
- $$renderer2.push(`<!--]--></header>`);
1483
- } else {
1484
- $$renderer2.push("<!--[-1-->");
1485
- }
1486
- $$renderer2.push(`<!--]--> `);
1487
- if (reply.to || sent.text) {
1488
- $$renderer2.push(`<!--[0--><div class="bubble-row"><div${attr_class(`bubble bubble-captain ${item.command ? "font-mono text-sm" : ""}`)}${attr("data-bubble", item.id)}>`);
1489
- if (reply.to) {
1490
- $$renderer2.push("<!--[0-->");
1491
- quote($$renderer2, reply.to, original(reply.to, i));
1492
- } else {
1493
- $$renderer2.push("<!--[-1-->");
1494
- }
1495
- $$renderer2.push(`<!--]-->`);
1496
- captainText($$renderer2, sent.text, true);
1497
- $$renderer2.push(`<!----></div> `);
1498
- if (via() && !item.command) {
1499
- $$renderer2.push("<!--[0-->");
1500
- replyButton($$renderer2, item.id, "captain", item.text);
1501
- } else {
1502
- $$renderer2.push("<!--[-1-->");
1503
- }
1504
- $$renderer2.push(`<!--]--></div>`);
1505
- } else {
1506
- $$renderer2.push("<!--[-1-->");
1507
- }
1508
- $$renderer2.push(`<!--]--> `);
1509
- if (sent.files.length) {
1510
- $$renderer2.push("<!--[0-->");
1511
- SentFiles($$renderer2, { files: sent.files });
1512
- } else {
1513
- $$renderer2.push("<!--[-1-->");
1514
- }
1515
- $$renderer2.push(`<!--]--></div></article>`);
1516
- } else if (item.kind === "output") {
1517
- $$renderer2.push(`<!--[2--><pre class="no-scrollbar max-h-80 max-w-[80ch] overflow-auto rounded-lg bg-muted/60 p-3 font-mono text-xs whitespace-pre-wrap text-muted-foreground">${escape_html(item.text)}</pre>`);
1518
- } else if (item.kind === "notice") {
1519
- $$renderer2.push(`<!--[3--><div class="flex flex-col items-start"><button class="-ml-3 flex max-w-full cursor-pointer items-center gap-2 rounded-full px-3 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"${attr("aria-expanded", !!openNotice[item.id])}>`);
1520
- Bell($$renderer2, { class: "size-3.5 shrink-0", "aria-hidden": "true" });
1521
- $$renderer2.push(`<!----> <span class="truncate">${escape_html(item.title)} · ${escape_html(time2(item.at))}</span> `);
1522
- Chevron_right($$renderer2, {
1523
- class: `size-3.5 shrink-0 transition-transform ${openNotice[item.id] ? "rotate-90" : ""}`,
1524
- "aria-hidden": "true"
1525
- });
1526
- $$renderer2.push(`<!----></button> `);
1527
- if (openNotice[item.id]) {
1528
- $$renderer2.push(`<!--[0--><div class="mt-2 w-full max-w-[80ch] rounded-lg border bg-card px-4 py-3 text-sm whitespace-pre-wrap text-muted-foreground">`);
1529
- LinkedText($$renderer2, { text: item.detail });
1530
- $$renderer2.push(`<!----></div>`);
1531
- } else {
1532
- $$renderer2.push("<!--[-1-->");
1533
- }
1534
- $$renderer2.push(`<!--]--></div>`);
1535
- } else {
1536
- $$renderer2.push(`<!--[-1--><article${attr_class(`msg msg-firstmate ${grouped ? "msg-grouped" : ""}`)}${attr("aria-label", `Firstmate, ${stringify(time2(item.at))}`)}>`);
1537
- if (grouped) {
1538
- $$renderer2.push(`<!--[0--><span class="msg-gutter" aria-hidden="true"></span>`);
1539
- } else {
1540
- $$renderer2.push("<!--[-1-->");
1541
- Avatar($$renderer2, { class: "size-8" });
1542
- }
1543
- $$renderer2.push(`<!--]--> <div class="flex min-w-0 flex-1 flex-col gap-2">`);
1544
- if (!grouped) {
1545
- $$renderer2.push(`<!--[0--><header class="msg-head"><span class="msg-name">Firstmate</span><time${attr("datetime", item.at)}>${escape_html(time2(item.at))}</time></header>`);
1546
- } else {
1547
- $$renderer2.push("<!--[-1-->");
1548
- }
1549
- $$renderer2.push(`<!--]--> <!--[-->`);
1550
- const each_array_4 = ensure_array_like(item.parts);
1551
- for (let pi = 0, $$length2 = each_array_4.length; pi < $$length2; pi++) {
1552
- let part = each_array_4[pi];
1553
- if (part.kind === "text") {
1554
- $$renderer2.push(`<!--[0--><div class="bubble-row"><div class="chat-md bubble bubble-firstmate"${attr("data-bubble", part.id)}>${html(markdown(part.text, { docLinks: true }))}</div> `);
1555
- if (via()) {
1556
- $$renderer2.push("<!--[0-->");
1557
- replyButton($$renderer2, part.id, "firstmate", part.text);
1558
- } else {
1559
- $$renderer2.push("<!--[-1-->");
1560
- }
1561
- $$renderer2.push(`<!--]--></div> <!--[-->`);
1562
- const each_array_5 = ensure_array_like(matchBridgeCards(part.text, pluginEntries));
1563
- for (let $$index_3 = 0, $$length3 = each_array_5.length; $$index_3 < $$length3; $$index_3++) {
1564
- let { entry, card } = each_array_5[$$index_3];
1565
- $$renderer2.push(`<div class="max-w-[80ch] rounded-xl border bg-card p-4" data-slot="bridge.card"><p class="font-medium">${escape_html(card.title)}</p> <div class="mt-2">`);
1566
- Blocks($$renderer2, { blocks: card.blocks });
1567
- $$renderer2.push(`<!----></div></div>`);
1568
- }
1569
- $$renderer2.push(`<!--]--> <!--[-->`);
1570
- const each_array_6 = ensure_array_like(previews().get(part.id) ?? []);
1571
- for (let $$index_4 = 0, $$length3 = each_array_6.length; $$index_4 < $$length3; $$index_4++) {
1572
- let pv = each_array_6[$$index_4];
1573
- ChatPreview($$renderer2, { preview: pv, project: projectName(pv.task.projectId), now });
1574
- }
1575
- $$renderer2.push(`<!--]-->`);
1576
- } else if (part.kind === "question") {
1577
- $$renderer2.push("<!--[1-->");
1578
- QuestionCard($$renderer2, { part });
1579
- } else {
1580
- $$renderer2.push("<!--[-1-->");
1581
- Activity($$renderer2, { steps: part.steps, live: isLive(item, pi) });
1582
- $$renderer2.push(`<!----> <!--[-->`);
1583
- const each_array_7 = ensure_array_like(part.steps);
1584
- for (let $$index_5 = 0, $$length3 = each_array_7.length; $$index_5 < $$length3; $$index_5++) {
1585
- let step = each_array_7[$$index_5];
1586
- if (apps[step.id]) {
1587
- $$renderer2.push("<!--[0-->");
1588
- ChatApp($$renderer2, { id: step.id, app: apps[step.id] });
1589
- } else {
1590
- $$renderer2.push("<!--[-1-->");
1591
- }
1592
- $$renderer2.push(`<!--]-->`);
1593
- }
1594
- $$renderer2.push(`<!--]-->`);
1595
- }
1596
- $$renderer2.push(`<!--]-->`);
1597
- }
1598
- $$renderer2.push(`<!--]--> `);
1599
- if (item.interrupted) {
1600
- $$renderer2.push(`<!--[0--><span class="text-xs text-muted-foreground">Stopped</span>`);
1601
- } else if (item.done && item.durationMs) {
1602
- $$renderer2.push(`<!--[1--><span class="text-xs text-muted-foreground">Worked for ${escape_html(duration(item.durationMs))}</span>`);
1603
- } else {
1604
- $$renderer2.push("<!--[-1-->");
1605
- }
1606
- $$renderer2.push(`<!--]--></div></article>`);
1607
- }
1608
- $$renderer2.push(`<!--]-->`);
1609
- }
1610
- $$renderer2.push(`<!--]--> <!--[-->`);
1611
- const each_array_8 = ensure_array_like(placed().end);
1612
- for (let $$index_8 = 0, $$length = each_array_8.length; $$index_8 < $$length; $$index_8++) {
1613
- let d = each_array_8[$$index_8];
1614
- decisionRow($$renderer2, d);
1615
- }
1616
- $$renderer2.push(`<!--]--> <!--[-->`);
1617
- const each_array_9 = ensure_array_like(chatPending());
1618
- for (let pi = 0, $$length = each_array_9.length; pi < $$length; pi++) {
1619
- let p = each_array_9[pi];
1620
- const grouped = pi > 0 || lastItem()?.kind === "user";
1621
- const reply = parseReply(p.text);
1622
- const sent = parseAttachments(reply.body);
1623
- $$renderer2.push(`<article${attr_class(`msg msg-captain ${grouped ? "msg-grouped" : ""}`)}${attr("data-pending", p.state)}${attr("aria-label", `You, ${stringify(pendingLabel(p))}`)}>`);
1624
- if (grouped) {
1625
- $$renderer2.push(`<!--[0--><span class="msg-gutter" aria-hidden="true"></span>`);
1626
- } else {
1627
- $$renderer2.push(`<!--[-1--><span class="captain-avatar">C</span>`);
1628
- }
1629
- $$renderer2.push(`<!--]--> <div class="min-w-0 flex-1">`);
1630
- if (!grouped) {
1631
- $$renderer2.push(`<!--[0--><header class="msg-head"><span class="msg-name">You</span></header>`);
1632
- } else {
1633
- $$renderer2.push("<!--[-1-->");
1634
- }
1635
- $$renderer2.push(`<!--]--> `);
1636
- if (reply.to || sent.text) {
1637
- $$renderer2.push(`<!--[0--><div${attr_class(`bubble bubble-captain border-dashed ${p.state === "failed" ? "border-danger/60" : "opacity-60"}`)}>`);
1638
- if (reply.to) {
1639
- $$renderer2.push("<!--[0-->");
1640
- quote($$renderer2, reply.to, original(reply.to));
1641
- } else {
1642
- $$renderer2.push("<!--[-1-->");
1643
- }
1644
- $$renderer2.push(`<!--]-->`);
1645
- captainText($$renderer2, sent.text, false);
1646
- $$renderer2.push(`<!----></div>`);
1647
- } else {
1648
- $$renderer2.push("<!--[-1-->");
1649
- }
1650
- $$renderer2.push(`<!--]--> `);
1651
- if (sent.files.length) {
1652
- $$renderer2.push("<!--[0-->");
1653
- SentFiles($$renderer2, { files: sent.files, pending: true });
1654
- } else {
1655
- $$renderer2.push("<!--[-1-->");
1656
- }
1657
- $$renderer2.push(`<!--]--> <p${attr_class(`mt-1.5 flex flex-wrap items-center gap-1.5 text-xs ${p.state === "failed" ? "text-danger" : "text-muted-foreground"}`)} role="status">`);
1658
- if (p.state === "failed") {
1659
- $$renderer2.push("<!--[0-->");
1660
- Circle_x($$renderer2, { class: "size-3.5", "aria-hidden": "true" });
1661
- $$renderer2.push(`<!---->${escape_html(pendingLabel(p))} <button class="ml-1 inline-flex cursor-pointer items-center gap-1 rounded px-1.5 py-0.5 font-medium text-foreground hover:bg-muted">`);
1662
- Rotate_cw($$renderer2, { class: "size-3", "aria-hidden": "true" });
1663
- $$renderer2.push(`<!---->Retry</button> <button class="cursor-pointer rounded px-1.5 py-0.5 text-muted-foreground hover:bg-muted">Discard</button>`);
1664
- } else {
1665
- $$renderer2.push("<!--[-1-->");
1666
- Loader_circle($$renderer2, { class: "size-3 animate-spin", "aria-hidden": "true" });
1667
- $$renderer2.push(`<!---->${escape_html(pendingLabel(p))}`);
1668
- }
1669
- $$renderer2.push(`<!--]--></p></div></article>`);
1670
- }
1671
- $$renderer2.push(`<!--]--> `);
1672
- if (picker()) {
1673
- $$renderer2.push("<!--[0-->");
1674
- PickerCard($$renderer2, {
1675
- picker: picker()
1676
- });
1677
- } else if (menu()) {
1678
- $$renderer2.push("<!--[1-->");
1679
- MenuCard($$renderer2, { menu: menu() });
1680
- } else if (working()) {
1681
- $$renderer2.push(`<!--[2--><div class="flex gap-1 py-1" aria-label="Firstmate is working" role="status"><span class="size-1.5 animate-bounce rounded-full bg-muted-foreground [animation-delay:-0.3s]"></span> <span class="size-1.5 animate-bounce rounded-full bg-muted-foreground [animation-delay:-0.15s]"></span> <span class="size-1.5 animate-bounce rounded-full bg-muted-foreground"></span></div>`);
1682
- } else {
1683
- $$renderer2.push("<!--[-1-->");
1684
- }
1685
- $$renderer2.push(`<!--]--></div></div> `);
1686
- {
1687
- $$renderer2.push("<!--[-1-->");
1688
- }
1689
- $$renderer2.push(`<!--]--> `);
1690
- {
1691
- $$renderer2.push("<!--[-1-->");
1692
- }
1693
- $$renderer2.push(`<!--]--></div> <div class="bg-panel px-4 pb-4 sm:px-6 lg:px-10">`);
1694
- Composer($$renderer2, {
1695
- via: via(),
1696
- reason: session()?.reason ?? null,
1697
- working: working() && !waitingOnAnswer(),
1698
- held: held(),
1699
- commands: firstmateChat.commands,
1700
- reply: replyTo
1701
- });
1702
- $$renderer2.push(`<!----></div></section>`);
1703
- });
1704
- }
1705
- function DecisionStack($$renderer, $$props) {
1706
- $$renderer.component(($$renderer2) => {
1707
- let { projects, now, scope = null, limit = 3 } = $$props;
1708
- const seed = derived(() => page.data.inbox);
1709
- const view = derived(() => inbox.view(seed()));
1710
- const waiting = derived(() => inbox.shown(now, seed()).shown.filter((c) => !scope || c.projectId === scope));
1711
- const stack = derived(() => waiting().slice(0, limit));
1712
- const projectName = (id) => !id || id === "unassigned" ? null : projects.find((p) => p.id === id)?.name ?? id;
1713
- if (view()?.available && stack().length) {
1714
- $$renderer2.push(`<!--[0--><div class="mb-2 flex items-baseline justify-between gap-2"><h2 class="section-label flex-1">Decisions</h2> <a href="/inbox" class="text-xs text-muted-foreground hover:text-foreground">${escape_html(waiting().length > stack().length ? `All ${waiting().length}` : "Open")}</a></div> <ul class="mb-6 flex flex-col gap-2"><!--[-->`);
1715
- const each_array = ensure_array_like(stack());
1716
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1717
- let c = each_array[$$index];
1718
- $$renderer2.push(`<li>`);
1719
- OpenDecision($$renderer2, {
1720
- card: c,
1721
- project: projectName(c.projectId),
1722
- now,
1723
- onLater: () => inbox.later(c.id)
1724
- });
1725
- $$renderer2.push(`<!----></li>`);
1726
- }
1727
- $$renderer2.push(`<!--]--></ul> `);
1728
- if (waiting().length > stack().length) {
1729
- $$renderer2.push(`<!--[0--><a href="/inbox" class="-mt-4 mb-6 flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground">${escape_html(waiting().length - stack().length)} more in Decisions `);
1730
- Arrow_right($$renderer2, { class: "size-3.5" });
1731
- $$renderer2.push(`<!----></a>`);
1732
- } else {
1733
- $$renderer2.push("<!--[-1-->");
1734
- }
1735
- $$renderer2.push(`<!--]-->`);
1736
- } else {
1737
- $$renderer2.push("<!--[-1-->");
1738
- }
1739
- $$renderer2.push(`<!--]-->`);
1740
- });
1741
- }
1742
- function Rail($$renderer, $$props) {
1743
- $$renderer.component(($$renderer2) => {
1744
- let {
1745
- tasks,
1746
- projects,
1747
- now,
1748
- insights = null,
1749
- scope = null,
1750
- cards = [],
1751
- onClose
1752
- } = $$props;
1753
- const inScope = (projectId) => !scope || projectId === scope;
1754
- const decided = derived(() => (insights?.decisions ?? []).filter((d) => inScope(d.projectId)));
1755
- const midnight = derived(() => new Date(new Date(now).toDateString()).getTime());
1756
- const decidedToday = derived(() => decided().filter((d) => Date.parse(d.decidedAt) >= midnight()).length);
1757
- const today = derived(() => sumSplits((insights?.today ?? []).filter((t) => inScope(t.projectId))));
1758
- const todayTotal = derived(() => total(today()));
1759
- const todayTasks = derived(() => (insights?.today ?? []).filter((t) => inScope(t.projectId)).length);
1760
- const share = (k) => todayTotal() ? Math.round(today()[k] / todayTotal() * 100) : 0;
1761
- const allowance = derived(() => insights?.allowance ?? null);
1762
- const h = derived(() => harbour(tasks, now));
1763
- const failedIds = derived(() => new Set(h().stepFailed.map((t) => t.id)));
1764
- const failed = derived(() => h().stepFailed.filter((t) => !h().needsYou.includes(t)));
1765
- const underWay = derived(() => [
1766
- ...h().waitingOnFirstmate,
1767
- ...h().waitingOnReviewers,
1768
- ...h().underWay
1769
- ].filter((t) => !failedIds().has(t.id)));
1770
- let showQueued = false;
1771
- const STACK = 3;
1772
- const seed = derived(() => page.data.inbox);
1773
- const inboxView = derived(() => inbox.view(seed()));
1774
- const decisions = derived(() => inboxView()?.available ? inbox.shown(now, seed()).shown.filter((c) => inScope(c.projectId)) : []);
1775
- const holdsOf = (cards2) => new Set(cards2.filter((c) => c.kind === "hold").map((c) => c.taskId));
1776
- const holds = derived(() => holdsOf(inboxView()?.available ? inboxView().cards : []));
1777
- const unstacked = derived(() => holdsOf(decisions().slice(STACK)));
1778
- const needsYou = derived(() => h().needsYou.filter((t) => !(t.attention?.kind === "decision" && holds().has(t.id) && !unstacked().has(t.id))));
1779
- const heldOpen = derived(() => decisions().slice(0, STACK).filter((c) => c.kind === "hold").length);
1780
- const tabs = derived(() => [
1781
- {
1782
- id: "under",
1783
- label: "Under way",
1784
- count: underWay().length,
1785
- strong: false
1786
- },
1787
- {
1788
- id: "needs",
1789
- label: "Needs you",
1790
- count: failed().length + needsYou().length + heldOpen(),
1791
- strong: true
1792
- },
1793
- {
1794
- id: "landed",
1795
- label: "Landed",
1796
- count: h().landedRecent.length,
1797
- strong: false
1798
- },
1799
- ...cards.map((e) => ({
1800
- id: e.key,
1801
- label: e.title,
1802
- count: e.badge ?? 0,
1803
- strong: false
1804
- }))
1805
- ]);
1806
- let picked = "under";
1807
- const tab = derived(() => tabs().some((t) => t.id === picked) ? picked : "under");
1808
- const plugin = derived(() => cards.find((e) => e.key === tab()) ?? null);
1809
- const projectName = (t) => projects.find((p) => p.id === t.projectId)?.name ?? (t.projectId === "unassigned" ? null : t.projectId);
1810
- const labels = derived(() => projectLabels(projects, aliases.names));
1811
- const tagName = (t) => labels().get(t.projectId)?.label ?? projectName(t);
1812
- const href = (t) => `/tasks/${encodeURIComponent(t.id)}`;
1813
- const nowText = (t) => t.activity?.text || t.summary || t.statusLabel;
1814
- const prOf = (t) => t.attention?.url ?? t.pr?.url ?? null;
1815
- function problem(t) {
1816
- const step = t.passage.steps[t.passage.current];
1817
- if (step?.failed) return { label: `${step.label} failed`, icon: Circle_x, tone: "danger" };
1818
- if (t.status === "failed") return { label: "Failed", icon: Circle_x, tone: "danger" };
1819
- if (t.status === "blocked") return { label: "Stuck", icon: Octagon_alert, tone: "danger" };
1820
- if (t.status === "lost" || t.status === "unknown") return { label: "Not responding", icon: Unplug, tone: "warning" };
1821
- if (t.attention?.owner === "captain") return t.attention.kind === "review" ? {
1822
- label: t.attention.approved ? "Your merge" : "Your review",
1823
- icon: Git_pull_request,
1824
- tone: "sea"
1825
- } : { label: "Your call", icon: Hand, tone: "sea" };
1826
- if (t.attention?.owner === "reviewers") return { label: "With reviewers", icon: Users, tone: "muted" };
1827
- if (t.addressingReview) return {
1828
- label: runStep(t) ?? "Changes requested",
1829
- icon: Message_square_text,
1830
- tone: "muted"
1831
- };
1832
- if (t.status === "with-firstmate") return { label: "Firstmate deciding", icon: Anchor, tone: "muted" };
1833
- return null;
1834
- }
1835
- const TONE = {
1836
- danger: "bg-danger/10 text-danger",
1837
- warning: "bg-warning/10 text-warning",
1838
- sea: "bg-sea/10 text-sea",
1839
- muted: "bg-muted text-muted-foreground"
1840
- };
1841
- const EDGE = {
1842
- danger: "border-l-danger",
1843
- warning: "border-l-warning",
1844
- sea: "border-l-sea",
1845
- muted: "border-l-border"
1846
- };
1847
- function card($$renderer3, t, ask) {
1848
- const p = problem(t);
1849
- const pr = prOf(t);
1850
- const Icon2 = p?.icon;
1851
- $$renderer3.push(`<li${attr_class(`rounded-lg border border-l-[3px] bg-card px-3 pt-2.5 pb-1.5 ${stringify(p ? EDGE[p.tone] : "border-l-border")}`)}><div class="flex flex-wrap items-center gap-1.5">`);
1852
- if (projectName(t)) {
1853
- $$renderer3.push(`<!--[0--><span class="rounded-sm border px-1.5 text-[0.95rem] leading-[1.15rem] font-semibold tracking-[0.08em] text-muted-foreground [font-variant-caps:all-small-caps]"${attr("title", projectName(t))}>${escape_html(tagName(t))}</span>`);
1854
- } else {
1855
- $$renderer3.push("<!--[-1-->");
1856
- }
1857
- $$renderer3.push(`<!--]--> `);
1858
- if (p && Icon2) {
1859
- $$renderer3.push(`<!--[0--><span${attr_class(`flex items-center gap-1 rounded px-1.5 text-xs leading-[1.15rem] font-medium ${stringify(TONE[p.tone])}`)}>`);
1860
- if (Icon2) {
1861
- $$renderer3.push("<!--[-->");
1862
- Icon2($$renderer3, { class: "size-3", "aria-hidden": "true" });
1863
- $$renderer3.push("<!--]-->");
1864
- } else {
1865
- $$renderer3.push("<!--[!-->");
1866
- $$renderer3.push("<!--]-->");
1867
- }
1868
- $$renderer3.push(`${escape_html(p.label)}</span>`);
1869
- } else if (t.busy) {
1870
- $$renderer3.push(`<!--[1--><span class="flex items-center gap-1.5 text-xs text-muted-foreground"><span class="size-1.5 animate-pulse rounded-full bg-sea" aria-hidden="true"></span>Working</span>`);
1871
- } else {
1872
- $$renderer3.push("<!--[-1-->");
1873
- }
1874
- $$renderer3.push(`<!--]--></div> <a${attr("href", href(t))} class="mt-1.5 line-clamp-2 block text-sm leading-snug font-medium hover:underline">${escape_html(ask ?? t.shortTitle)}</a> `);
1875
- if (ask) {
1876
- $$renderer3.push(`<!--[0--><p class="mt-0.5 line-clamp-2 text-xs leading-snug text-muted-foreground">${escape_html(t.shortTitle)}</p>`);
1877
- } else {
1878
- $$renderer3.push("<!--[-1-->");
1879
- }
1880
- $$renderer3.push(`<!--]--> `);
1881
- if (showsChecks(t)) {
1882
- $$renderer3.push(`<!--[0--><div class="mt-1.5">`);
1883
- ChecksStrip($$renderer3, { pipeline: t.pipeline, busy: t.busy, size: "rail" });
1884
- $$renderer3.push(`<!----></div>`);
1885
- } else if (!ask) {
1886
- $$renderer3.push(`<!--[1--><p class="mt-0.5 line-clamp-2 text-xs leading-snug text-muted-foreground">${escape_html(nowText(t))}</p>`);
1887
- } else {
1888
- $$renderer3.push("<!--[-1-->");
1889
- }
1890
- $$renderer3.push(`<!--]--> `);
1891
- if (pr) {
1892
- $$renderer3.push(`<!--[0--><a${attr("href", pr)} target="_blank" rel="noreferrer" class="mt-1 block text-xs break-all text-sea hover:underline">${escape_html(pr)}</a>`);
1893
- } else {
1894
- $$renderer3.push("<!--[-1-->");
1895
- }
1896
- $$renderer3.push(`<!--]--> `);
1897
- if (t.passage.steps.length > 1) {
1898
- $$renderer3.push(`<!--[0--><div class="mt-2.5">`);
1899
- StageTrack($$renderer3, { task: t });
1900
- $$renderer3.push(`<!----></div>`);
1901
- } else {
1902
- $$renderer3.push("<!--[-1-->");
1903
- }
1904
- $$renderer3.push(`<!--]--> `);
1905
- if (t.eta) {
1906
- $$renderer3.push(`<!--[0--><div class="mt-2">`);
1907
- EtaLine($$renderer3, { eta: t.eta });
1908
- $$renderer3.push(`<!----></div>`);
1909
- } else {
1910
- $$renderer3.push("<!--[-1-->");
1911
- }
1912
- $$renderer3.push(`<!--]--> <div class="mt-1.5 -mr-1.5 flex justify-end gap-0.5"><a${attr("href", href(t))} class="flex items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground">`);
1913
- Arrow_up_right($$renderer3, { class: "size-3.5" });
1914
- $$renderer3.push(`<!---->Open</a> <button class="flex cursor-pointer items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground">`);
1915
- Message_square($$renderer3, { class: "size-3.5" });
1916
- $$renderer3.push(`<!---->Chat about this</button></div></li>`);
1917
- }
1918
- $$renderer2.push(`<aside class="flex h-full min-h-0 flex-col" aria-label="Tasks and decisions"><div class="flex h-11 shrink-0 items-center gap-2 border-b px-4 text-sm"><span class="font-display text-[1.15rem] font-medium">On deck</span> `);
1919
- if (onClose) {
1920
- $$renderer2.push(`<!--[0--><button class="-mr-2 ml-auto flex size-9 cursor-pointer items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground" aria-label="Close">`);
1921
- X($$renderer2, { class: "size-4" });
1922
- $$renderer2.push(`<!----></button>`);
1923
- } else {
1924
- $$renderer2.push("<!--[-1-->");
1925
- }
1926
- $$renderer2.push(`<!--]--></div> <div class="no-scrollbar min-h-0 flex-1 overflow-y-auto px-4 py-4"><p class="mb-5 text-sm leading-relaxed text-muted-foreground">${escape_html(headline(h()))}</p> `);
1927
- if (allowance()?.state === "ok" && allowance().windows.length) {
1928
- $$renderer2.push(`<!--[0--><a href="/headroom" class="mb-6 block rounded-lg border bg-card px-3 py-2.5 hover:border-foreground/20"><span class="flex items-center gap-1.5 text-xs font-medium">`);
1929
- Gauge($$renderer2, {
1930
- class: "size-3.5 text-muted-foreground",
1931
- "aria-hidden": "true"
1932
- });
1933
- $$renderer2.push(`<!---->Claude headroom</span> <span class="mt-2 flex flex-col gap-1"><!--[-->`);
1934
- const each_array = ensure_array_like(allowance().windows.slice(0, 2));
1935
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1936
- let w = each_array[$$index];
1937
- AllowanceMeter($$renderer2, { w, now, compact: true });
1938
- }
1939
- $$renderer2.push(`<!--]--></span> `);
1940
- if (insights?.atRisk) {
1941
- $$renderer2.push(`<!--[0--><span class="mt-1.5 block text-xs text-warning">${escape_html(insights.atRisk.label)} may run out before it resets.</span>`);
1942
- } else {
1943
- $$renderer2.push("<!--[-1-->");
1944
- }
1945
- $$renderer2.push(`<!--]--></a>`);
1946
- } else if (allowance()?.state === "connect") {
1947
- $$renderer2.push(`<!--[1--><a href="/headroom" class="mb-6 flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground">`);
1948
- Gauge($$renderer2, { class: "size-3.5", "aria-hidden": "true" });
1949
- $$renderer2.push(`<!---->Connect your Claude usage to see what is left</a>`);
1950
- } else {
1951
- $$renderer2.push("<!--[-1-->");
1952
- }
1953
- $$renderer2.push(`<!--]--> <div class="sticky -top-4 z-10 -mx-4 mb-4 no-scrollbar flex justify-between gap-0.5 overflow-x-auto border-b bg-panel px-2.5" role="tablist" aria-label="On deck" tabindex="-1"><!--[-->`);
1954
- const each_array_1 = ensure_array_like(tabs());
1955
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
1956
- let t = each_array_1[$$index_1];
1957
- $$renderer2.push(`<button${attr("id", `rail-tab-${stringify(t.id)}`)} role="tab"${attr("aria-selected", tab() === t.id)} aria-controls="rail-panel"${attr("tabindex", tab() === t.id ? 0 : -1)}${attr_class(`-mb-px flex shrink-0 cursor-pointer items-center gap-1 border-b-2 px-1.5 py-2 text-[0.85rem] whitespace-nowrap transition-colors duration-200 focus-visible:outline-2 focus-visible:outline-ring ${tab() === t.id ? "border-brass font-medium text-foreground" : "border-transparent text-muted-foreground hover:text-foreground"}`)}>${escape_html(t.label)}`);
1958
- if (t.count) {
1959
- $$renderer2.push(`<!--[0--><span${attr_class(`tabular rounded-full px-1.5 text-xs leading-4 font-semibold ${t.strong ? "bg-sea text-white dark:text-slate-950" : "bg-muted text-muted-foreground"}`)}>${escape_html(t.count)}</span>`);
1960
- } else {
1961
- $$renderer2.push("<!--[-1-->");
1962
- }
1963
- $$renderer2.push(`<!--]--></button>`);
1964
- }
1965
- $$renderer2.push(`<!--]--></div> <div id="rail-panel" role="tabpanel"${attr("aria-labelledby", `rail-tab-${stringify(tab())}`)}>`);
1966
- if (tab() === "needs") {
1967
- $$renderer2.push("<!--[0-->");
1968
- DecisionStack($$renderer2, { projects, now, scope, limit: STACK });
1969
- $$renderer2.push(`<!----> `);
1970
- if (failed().length || needsYou().length) {
1971
- $$renderer2.push(`<!--[0--><ul class="mb-6 flex flex-col gap-2"><!--[-->`);
1972
- const each_array_2 = ensure_array_like(failed());
1973
- for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {
1974
- let t = each_array_2[$$index_2];
1975
- card($$renderer2, t, `${t.passage.steps[t.passage.current].label} failed: ${t.shortTitle}`);
1976
- }
1977
- $$renderer2.push(`<!--]--> <!--[-->`);
1978
- const each_array_3 = ensure_array_like(needsYou());
1979
- for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
1980
- let t = each_array_3[$$index_3];
1981
- card($$renderer2, t, t.attention?.text || null);
1982
- }
1983
- $$renderer2.push(`<!--]--></ul>`);
1984
- } else if (!decisions().length) {
1985
- $$renderer2.push(`<!--[1--><p class="mb-6 flex items-center gap-2 text-sm text-muted-foreground">`);
1986
- Check($$renderer2, { class: "size-4 text-success" });
1987
- $$renderer2.push(`<!---->Nothing needs you right now.</p>`);
1988
- } else {
1989
- $$renderer2.push("<!--[-1-->");
1990
- }
1991
- $$renderer2.push(`<!--]--> `);
1992
- if (decided().length) {
1993
- $$renderer2.push(`<!--[0--><div class="mb-2 flex items-baseline justify-between gap-2"><h2 class="section-label flex-1">Decided for you</h2> <a href="/decisions" class="text-xs text-muted-foreground hover:text-foreground">See all</a></div> `);
1994
- if (decidedToday()) {
1995
- $$renderer2.push(`<!--[0--><p class="mb-2 text-xs text-muted-foreground">Firstmate settled ${escape_html(decidedToday())} review ${escape_html(decidedToday() === 1 ? "question" : "questions")} for you today.</p>`);
1996
- } else {
1997
- $$renderer2.push("<!--[-1-->");
1998
- }
1999
- $$renderer2.push(`<!--]--> <ul class="mb-6 divide-y rounded-lg border bg-card"><!--[-->`);
2000
- const each_array_4 = ensure_array_like(decided().slice(0, 3));
2001
- for (let $$index_4 = 0, $$length = each_array_4.length; $$index_4 < $$length; $$index_4++) {
2002
- let d = each_array_4[$$index_4];
2003
- $$renderer2.push(`<li><a${attr("href", `/decisions#${stringify(d.id)}`)} class="block px-3 py-2.5 hover:bg-muted/60"><span class="flex items-center gap-2 text-xs">`);
2004
- Scale($$renderer2, {
2005
- class: "size-3.5 shrink-0 text-muted-foreground",
2006
- "aria-hidden": "true"
2007
- });
2008
- $$renderer2.push(`<!----> <span class="shrink-0 font-medium whitespace-nowrap">${escape_html(d.verdict)}</span> <span class="min-w-0 truncate text-muted-foreground">· ${escape_html(d.taskTitle)}</span> <span class="ml-auto shrink-0 text-muted-foreground">${escape_html(ago(d.decidedAt, now))}</span></span> <span class="mt-1 line-clamp-2 block text-xs text-muted-foreground">${escape_html(d.question)}</span></a></li>`);
2009
- }
2010
- $$renderer2.push(`<!--]--></ul>`);
2011
- } else {
2012
- $$renderer2.push("<!--[-1-->");
2013
- }
2014
- $$renderer2.push(`<!--]-->`);
2015
- } else if (tab() === "under") {
2016
- $$renderer2.push("<!--[1-->");
2017
- if (underWay().length) {
2018
- $$renderer2.push(`<!--[0--><ul class="mb-6 flex flex-col gap-2"><!--[-->`);
2019
- const each_array_5 = ensure_array_like(underWay());
2020
- for (let $$index_5 = 0, $$length = each_array_5.length; $$index_5 < $$length; $$index_5++) {
2021
- let t = each_array_5[$$index_5];
2022
- card($$renderer2, t, null);
2023
- }
2024
- $$renderer2.push(`<!--]--></ul>`);
2025
- } else {
2026
- $$renderer2.push(`<!--[-1--><p class="mb-6 text-sm text-muted-foreground">Nothing under way.</p>`);
2027
- }
2028
- $$renderer2.push(`<!--]--> `);
2029
- if (h().queued.length) {
2030
- $$renderer2.push(`<!--[0--><button class="mb-2 flex w-full cursor-pointer items-center gap-1.5 text-xs font-medium text-muted-foreground hover:text-foreground"${attr("aria-expanded", showQueued)}>Up next · ${escape_html(h().queued.length)} `);
2031
- Chevron_right($$renderer2, {
2032
- class: `size-3.5 transition-transform ${""}`
2033
- });
2034
- $$renderer2.push(`<!----></button> `);
2035
- {
2036
- $$renderer2.push("<!--[-1-->");
2037
- }
2038
- $$renderer2.push(`<!--]-->`);
2039
- } else {
2040
- $$renderer2.push("<!--[-1-->");
2041
- }
2042
- $$renderer2.push(`<!--]-->`);
2043
- } else if (tab() === "landed") {
2044
- $$renderer2.push("<!--[2-->");
2045
- if (h().landedRecent.length) {
2046
- $$renderer2.push(`<!--[0--><ul class="mb-6 flex flex-col"><!--[-->`);
2047
- const each_array_7 = ensure_array_like(h().landedRecent);
2048
- for (let $$index_7 = 0, $$length = each_array_7.length; $$index_7 < $$length; $$index_7++) {
2049
- let t = each_array_7[$$index_7];
2050
- $$renderer2.push(`<li><a${attr("href", href(t))} class="flex items-center gap-2 rounded-md px-2 py-1.5 text-sm text-muted-foreground hover:bg-muted hover:text-foreground">`);
2051
- Check($$renderer2, {
2052
- class: "size-3.5 shrink-0 text-success",
2053
- "aria-label": "Landed"
2054
- });
2055
- $$renderer2.push(`<!---->`);
2056
- if (projectName(t)) {
2057
- $$renderer2.push(`<!--[0--><span class="shrink-0 rounded border px-1 font-mono text-xs leading-4"${attr("title", projectName(t))}>${escape_html(tagName(t))}</span>`);
2058
- } else {
2059
- $$renderer2.push("<!--[-1-->");
2060
- }
2061
- $$renderer2.push(`<!--]--><span class="truncate">${escape_html(t.shortTitle)}</span></a></li>`);
2062
- }
2063
- $$renderer2.push(`<!--]--></ul>`);
2064
- } else {
2065
- $$renderer2.push(`<!--[-1--><p class="mb-6 text-sm text-muted-foreground">Nothing landed in the last day.</p>`);
2066
- }
2067
- $$renderer2.push(`<!--]--> `);
2068
- if (todayTotal() > 0) {
2069
- $$renderer2.push(`<!--[0--><div class="mb-2 flex items-baseline justify-between gap-2"><h2 class="section-label flex-1">Where time went today</h2> <a href="/time" class="text-xs text-muted-foreground hover:text-foreground">Details</a></div> <a href="/time" class="block rounded-lg border bg-card p-3 hover:border-foreground/20"><span class="block text-sm"><span class="font-medium">${escape_html(duration$1(todayTotal()))}</span> <span class="text-muted-foreground">of crew time on ${escape_html(todayTasks())}
2070
- ${escape_html(todayTasks() === 1 ? "task" : "tasks")}</span></span> <span class="mt-2 block">`);
2071
- TimeBar($$renderer2, { seconds: today(), label: "Today" });
2072
- $$renderer2.push(`<!----></span> <span class="mt-2 block text-xs text-muted-foreground">${escape_html(share("build"))}% building · ${escape_html(share("review"))}% automated review · ${escape_html(share("captain"))}% waiting on you</span></a>`);
2073
- } else {
2074
- $$renderer2.push("<!--[-1-->");
2075
- }
2076
- $$renderer2.push(`<!--]-->`);
2077
- } else if (plugin()) {
2078
- $$renderer2.push(`<!--[3--><div data-slot="home.card">`);
2079
- SlotContent($$renderer2, { entry: plugin(), now });
2080
- $$renderer2.push(`<!----></div>`);
2081
- } else {
2082
- $$renderer2.push("<!--[-1-->");
2083
- }
2084
- $$renderer2.push(`<!--]--></div> <a${attr("href", scope ? `/projects/${encodeURIComponent(scope)}` : "/harbour")} class="mt-4 flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground">${escape_html(scope ? "Open the project’s page" : "Open every project in Harbour")} `);
2085
- Arrow_right($$renderer2, { class: "size-3.5" });
2086
- $$renderer2.push(`<!----></a></div></aside>`);
2087
- });
2088
- }
2089
- const RAIL_SIDE_KEY = "wheelhouse-ondeck-side";
2090
- function parseRailSide(raw) {
2091
- return raw === "right" ? "right" : "left";
2092
- }
2093
- class HomeLayout {
2094
- side = "left";
2095
- load() {
2096
- try {
2097
- this.side = parseRailSide(localStorage.getItem(RAIL_SIDE_KEY));
2098
- } catch {
2099
- }
2100
- }
2101
- swap() {
2102
- this.side = this.side === "left" ? "right" : "left";
2103
- try {
2104
- localStorage.setItem(RAIL_SIDE_KEY, this.side);
2105
- } catch {
2106
- }
2107
- }
2108
- }
2109
- const homeLayout = new HomeLayout();
2110
- const REFRESH_MS = 6e4;
2111
- class Insights {
2112
- value = null;
2113
- seed(v) {
2114
- if (v) this.value = v;
2115
- }
2116
- connect() {
2117
- let stopped = false;
2118
- const read = async () => {
2119
- try {
2120
- const r = await fetch("/api/insights");
2121
- if (r.ok && !stopped) this.value = await r.json();
2122
- } catch {
2123
- }
2124
- };
2125
- const timer = setInterval(read, REFRESH_MS);
2126
- return () => {
2127
- stopped = true;
2128
- clearInterval(timer);
2129
- };
2130
- }
2131
- }
2132
- const railInsights = new Insights();
2133
- function _page($$renderer, $$props) {
2134
- $$renderer.component(($$renderer2) => {
2135
- let { data } = $$props;
2136
- const fleet = derived(currentFleet);
2137
- const scope = derived(() => page.url.searchParams.get("project"));
2138
- const tasks = derived(() => (fleet()?.tasks ?? []).filter((t) => !scope() || t.projectId === scope()));
2139
- const h = derived(() => harbour(tasks(), live.now));
2140
- const health = derived(() => shipHealth(h()));
2141
- const waiting = derived(() => h().needsYou.length + h().stepFailed.length);
2142
- const pluginEntries = derived(() => slots.entries(slotKey.fleet, data.slots, data.slotsAt));
2143
- const cards = derived(() => pluginEntries().filter((e) => e.slot === "home.card"));
2144
- const insights = derived(() => railInsights.value ?? data.insights);
2145
- let railOpen = true;
2146
- head("1uha8ag", $$renderer2, ($$renderer3) => {
2147
- $$renderer3.title(($$renderer4) => {
2148
- $$renderer4.push(`<title>Firstmate · Wheelhouse</title>`);
2149
- });
2150
- });
2151
- $$renderer2.push(`<main${attr_class(`flex min-h-0 flex-1 ${homeLayout.side === "left" ? "flex-row-reverse" : ""}`)}>`);
2152
- Chat($$renderer2, {
2153
- token: data.sessionToken,
2154
- railOpen,
2155
- waiting: waiting(),
2156
- health: health(),
2157
- now: live.now,
2158
- pluginEntries: pluginEntries(),
2159
- tasks: fleet()?.tasks ?? [],
2160
- projects: fleet()?.projects ?? [],
2161
- railSide: homeLayout.side,
2162
- onSwapRail: () => homeLayout.swap()
2163
- });
2164
- $$renderer2.push(`<!----> `);
2165
- {
2166
- $$renderer2.push("<!--[0-->");
2167
- ResizableRail($$renderer2, {
2168
- storageKey: "wheelhouse-rail-width",
2169
- label: "Resize the rail",
2170
- defaultWidth: 460,
2171
- side: homeLayout.side,
2172
- class: "bg-panel",
2173
- children: ($$renderer3) => {
2174
- Rail($$renderer3, {
2175
- tasks: tasks(),
2176
- projects: fleet()?.projects ?? [],
2177
- now: live.now,
2178
- insights: insights(),
2179
- scope: scope(),
2180
- cards: cards()
2181
- });
2182
- }
2183
- });
2184
- }
2185
- $$renderer2.push(`<!--]--></main> `);
2186
- {
2187
- $$renderer2.push("<!--[-1-->");
2188
- }
2189
- $$renderer2.push(`<!--]-->`);
2190
- });
2191
- }
2192
-
2193
- export { _page as default };
2194
- //# sourceMappingURL=_page.svelte.js-ehBbQlco.js.map