@chrisjowen/wheelhouse 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +112 -2
  3. package/build/client/_app/immutable/assets/0.DaQhCSel.css +1 -0
  4. package/build/client/_app/immutable/assets/0.DaQhCSel.css.br +0 -0
  5. package/build/client/_app/immutable/assets/0.DaQhCSel.css.gz +0 -0
  6. package/build/client/_app/immutable/assets/12.DT1C9nmd.css +1 -0
  7. package/build/client/_app/immutable/assets/12.DT1C9nmd.css.br +0 -0
  8. package/build/client/_app/immutable/assets/12.DT1C9nmd.css.gz +0 -0
  9. package/build/client/_app/immutable/assets/14.CjNfSPQ6.css +1 -0
  10. package/build/client/_app/immutable/assets/14.CjNfSPQ6.css.br +0 -0
  11. package/build/client/_app/immutable/assets/14.CjNfSPQ6.css.gz +0 -0
  12. package/build/client/_app/immutable/assets/15.KLSHp5Yu.css +1 -0
  13. package/build/client/_app/immutable/assets/15.KLSHp5Yu.css.br +0 -0
  14. package/build/client/_app/immutable/assets/15.KLSHp5Yu.css.gz +0 -0
  15. package/build/client/_app/immutable/assets/2.DvyEOdRq.css +1 -0
  16. package/build/client/_app/immutable/assets/2.DvyEOdRq.css.br +0 -0
  17. package/build/client/_app/immutable/assets/2.DvyEOdRq.css.gz +0 -0
  18. package/build/client/_app/immutable/assets/4.5dJKCkOT.css +1 -0
  19. package/build/client/_app/immutable/assets/4.5dJKCkOT.css.br +0 -0
  20. package/build/client/_app/immutable/assets/4.5dJKCkOT.css.gz +0 -0
  21. package/build/client/_app/immutable/assets/MicButton.Dga9zAug.css +1 -0
  22. package/build/client/_app/immutable/assets/MicButton.Dga9zAug.css.br +2 -0
  23. package/build/client/_app/immutable/assets/MicButton.Dga9zAug.css.gz +0 -0
  24. package/build/client/_app/immutable/assets/inter-cyrillic-ext-wght-italic.B5xAaiFk.woff2 +0 -0
  25. package/build/client/_app/immutable/assets/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2 +0 -0
  26. package/build/client/_app/immutable/assets/inter-cyrillic-wght-italic.DzZdc28x.woff2 +0 -0
  27. package/build/client/_app/immutable/assets/inter-cyrillic-wght-normal.DqGufNeO.woff2 +0 -0
  28. package/build/client/_app/immutable/assets/inter-greek-ext-wght-italic.DcOpz6Lw.woff2 +0 -0
  29. package/build/client/_app/immutable/assets/inter-greek-ext-wght-normal.DlzME5K_.woff2 +0 -0
  30. package/build/client/_app/immutable/assets/inter-greek-wght-italic.CILZdfAp.woff2 +0 -0
  31. package/build/client/_app/immutable/assets/inter-greek-wght-normal.CkhJZR-_.woff2 +0 -0
  32. package/build/client/_app/immutable/assets/inter-latin-ext-wght-italic.0pjOp8NU.woff2 +0 -0
  33. package/build/client/_app/immutable/assets/inter-latin-ext-wght-normal.DO1Apj_S.woff2 +0 -0
  34. package/build/client/_app/immutable/assets/inter-latin-wght-italic.DpCbqKDY.woff2 +0 -0
  35. package/build/client/_app/immutable/assets/inter-latin-wght-normal.Dx4kXJAl.woff2 +0 -0
  36. package/build/client/_app/immutable/assets/inter-vietnamese-wght-italic.K3WlGtc8.woff2 +0 -0
  37. package/build/client/_app/immutable/assets/inter-vietnamese-wght-normal.CBcvBZtf.woff2 +0 -0
  38. package/build/client/_app/immutable/assets/jetbrains-mono-cyrillic-wght-normal.D73BlboJ.woff2 +0 -0
  39. package/build/client/_app/immutable/assets/jetbrains-mono-greek-wght-normal.Bw9x6K1M.woff2 +0 -0
  40. package/build/client/_app/immutable/assets/jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.woff2 +0 -0
  41. package/build/client/_app/immutable/assets/jetbrains-mono-latin-wght-normal.B9CIFXIH.woff2 +0 -0
  42. package/build/client/_app/immutable/assets/jetbrains-mono-vietnamese-wght-normal.Bt-aOZkq.woff2 +0 -0
  43. package/build/client/_app/immutable/assets/newsreader-latin-ext-wght-italic.DFS986qL.woff2 +0 -0
  44. package/build/client/_app/immutable/assets/newsreader-latin-ext-wght-normal.C-3rgBeH.woff2 +0 -0
  45. package/build/client/_app/immutable/assets/newsreader-latin-wght-italic.Bxi8ein9.woff2 +0 -0
  46. package/build/client/_app/immutable/assets/newsreader-latin-wght-normal.CCVVNp6i.woff2 +0 -0
  47. package/build/client/_app/immutable/assets/newsreader-vietnamese-wght-italic.xAqemagA.woff2 +0 -0
  48. package/build/client/_app/immutable/assets/newsreader-vietnamese-wght-normal.Czsa-EzN.woff2 +0 -0
  49. package/build/client/_app/immutable/chunks/36FDwM1G.js +1 -0
  50. package/build/client/_app/immutable/chunks/36FDwM1G.js.br +0 -0
  51. package/build/client/_app/immutable/chunks/36FDwM1G.js.gz +0 -0
  52. package/build/client/_app/immutable/chunks/B-qIQCd3.js +16 -0
  53. package/build/client/_app/immutable/chunks/B-qIQCd3.js.br +0 -0
  54. package/build/client/_app/immutable/chunks/B-qIQCd3.js.gz +0 -0
  55. package/build/client/_app/immutable/chunks/B1XxiJam.js +1 -0
  56. package/build/client/_app/immutable/chunks/B1XxiJam.js.br +0 -0
  57. package/build/client/_app/immutable/chunks/B1XxiJam.js.gz +0 -0
  58. package/build/client/_app/immutable/chunks/B2wEHue2.js +1 -0
  59. package/build/client/_app/immutable/chunks/B2wEHue2.js.br +0 -0
  60. package/build/client/_app/immutable/chunks/B2wEHue2.js.gz +0 -0
  61. package/build/client/_app/immutable/chunks/BAurN1n6.js +2 -0
  62. package/build/client/_app/immutable/chunks/BAurN1n6.js.br +0 -0
  63. package/build/client/_app/immutable/chunks/BAurN1n6.js.gz +0 -0
  64. package/build/client/_app/immutable/chunks/BEAYWcbT.js +1 -0
  65. package/build/client/_app/immutable/chunks/BEAYWcbT.js.br +0 -0
  66. package/build/client/_app/immutable/chunks/BEAYWcbT.js.gz +0 -0
  67. package/build/client/_app/immutable/chunks/BGINfGsV.js +1 -0
  68. package/build/client/_app/immutable/chunks/BGINfGsV.js.br +4 -0
  69. package/build/client/_app/immutable/chunks/BGINfGsV.js.gz +0 -0
  70. package/build/client/_app/immutable/chunks/BHsdHLbF.js +1 -0
  71. package/build/client/_app/immutable/chunks/BHsdHLbF.js.br +0 -0
  72. package/build/client/_app/immutable/chunks/BHsdHLbF.js.gz +0 -0
  73. package/build/client/_app/immutable/chunks/BR5v76-T.js +1 -0
  74. package/build/client/_app/immutable/chunks/BR5v76-T.js.br +0 -0
  75. package/build/client/_app/immutable/chunks/BR5v76-T.js.gz +0 -0
  76. package/build/client/_app/immutable/chunks/BUo4hMcM.js +1 -0
  77. package/build/client/_app/immutable/chunks/BUo4hMcM.js.br +0 -0
  78. package/build/client/_app/immutable/chunks/BUo4hMcM.js.gz +0 -0
  79. package/build/client/_app/immutable/chunks/BVVO3JPx.js +1 -0
  80. package/build/client/_app/immutable/chunks/BVVO3JPx.js.br +0 -0
  81. package/build/client/_app/immutable/chunks/BVVO3JPx.js.gz +0 -0
  82. package/build/client/_app/immutable/chunks/BXN538J3.js +1 -0
  83. package/build/client/_app/immutable/chunks/BXN538J3.js.br +2 -0
  84. package/build/client/_app/immutable/chunks/BXN538J3.js.gz +0 -0
  85. package/build/client/_app/immutable/chunks/BZm5e4fE.js +1 -0
  86. package/build/client/_app/immutable/chunks/BZm5e4fE.js.br +0 -0
  87. package/build/client/_app/immutable/chunks/BZm5e4fE.js.gz +0 -0
  88. package/build/client/_app/immutable/chunks/Bfi4vm-w.js +1 -0
  89. package/build/client/_app/immutable/chunks/Bfi4vm-w.js.br +0 -0
  90. package/build/client/_app/immutable/chunks/Bfi4vm-w.js.gz +0 -0
  91. package/build/client/_app/immutable/chunks/BiTivU7x.js +1 -0
  92. package/build/client/_app/immutable/chunks/BiTivU7x.js.br +0 -0
  93. package/build/client/_app/immutable/chunks/BiTivU7x.js.gz +0 -0
  94. package/build/client/_app/immutable/chunks/BiuLIp4b.js +1 -0
  95. package/build/client/_app/immutable/chunks/BiuLIp4b.js.br +0 -0
  96. package/build/client/_app/immutable/chunks/BiuLIp4b.js.gz +0 -0
  97. package/build/client/_app/immutable/chunks/Bns_F-QV.js +1 -0
  98. package/build/client/_app/immutable/chunks/Bns_F-QV.js.br +0 -0
  99. package/build/client/_app/immutable/chunks/Bns_F-QV.js.gz +0 -0
  100. package/build/client/_app/immutable/chunks/Brlpgp90.js +1 -0
  101. package/build/client/_app/immutable/chunks/Brlpgp90.js.br +0 -0
  102. package/build/client/_app/immutable/chunks/Brlpgp90.js.gz +0 -0
  103. package/build/client/_app/immutable/chunks/BunkbzFG.js +1 -0
  104. package/build/client/_app/immutable/chunks/BunkbzFG.js.br +0 -0
  105. package/build/client/_app/immutable/chunks/BunkbzFG.js.gz +0 -0
  106. package/build/client/_app/immutable/chunks/BwOfqJw9.js +1 -0
  107. package/build/client/_app/immutable/chunks/BwOfqJw9.js.br +0 -0
  108. package/build/client/_app/immutable/chunks/BwOfqJw9.js.gz +0 -0
  109. package/build/client/_app/immutable/chunks/C-xrRA1Y.js +1 -0
  110. package/build/client/_app/immutable/chunks/C-xrRA1Y.js.br +0 -0
  111. package/build/client/_app/immutable/chunks/C-xrRA1Y.js.gz +0 -0
  112. package/build/client/_app/immutable/chunks/C2_XZrIO.js +7 -0
  113. package/build/client/_app/immutable/chunks/C2_XZrIO.js.br +0 -0
  114. package/build/client/_app/immutable/chunks/C2_XZrIO.js.gz +0 -0
  115. package/build/client/_app/immutable/chunks/C2d4bDYU.js +1 -0
  116. package/build/client/_app/immutable/chunks/C2d4bDYU.js.br +0 -0
  117. package/build/client/_app/immutable/chunks/C2d4bDYU.js.gz +0 -0
  118. package/build/client/_app/immutable/chunks/C6BQPSOs.js +62 -0
  119. package/build/client/_app/immutable/chunks/C6BQPSOs.js.br +0 -0
  120. package/build/client/_app/immutable/chunks/C6BQPSOs.js.gz +0 -0
  121. package/build/client/_app/immutable/chunks/CDphfOBv.js +1 -0
  122. package/build/client/_app/immutable/chunks/CDphfOBv.js.br +0 -0
  123. package/build/client/_app/immutable/chunks/CDphfOBv.js.gz +0 -0
  124. package/build/client/_app/immutable/chunks/CHoQMvOZ.js +1 -0
  125. package/build/client/_app/immutable/chunks/CHoQMvOZ.js.br +0 -0
  126. package/build/client/_app/immutable/chunks/CHoQMvOZ.js.gz +0 -0
  127. package/build/client/_app/immutable/chunks/CIE0U5Ih.js +1 -0
  128. package/build/client/_app/immutable/chunks/CIE0U5Ih.js.br +0 -0
  129. package/build/client/_app/immutable/chunks/CIE0U5Ih.js.gz +0 -0
  130. package/build/client/_app/immutable/chunks/CLs9Rkbg.js +1 -0
  131. package/build/client/_app/immutable/chunks/CLs9Rkbg.js.br +0 -0
  132. package/build/client/_app/immutable/chunks/CLs9Rkbg.js.gz +0 -0
  133. package/build/client/_app/immutable/chunks/COQ3aAYj.js +1 -0
  134. package/build/client/_app/immutable/chunks/COQ3aAYj.js.br +0 -0
  135. package/build/client/_app/immutable/chunks/COQ3aAYj.js.gz +0 -0
  136. package/build/client/_app/immutable/chunks/COiIt96y.js +1 -0
  137. package/build/client/_app/immutable/chunks/COiIt96y.js.br +0 -0
  138. package/build/client/_app/immutable/chunks/COiIt96y.js.gz +0 -0
  139. package/build/client/_app/immutable/chunks/CQ7gIAH8.js +1 -0
  140. package/build/client/_app/immutable/chunks/CQ7gIAH8.js.br +2 -0
  141. package/build/client/_app/immutable/chunks/CQ7gIAH8.js.gz +0 -0
  142. package/build/client/_app/immutable/chunks/CQlHU-Rx.js +1 -0
  143. package/build/client/_app/immutable/chunks/CQlHU-Rx.js.br +0 -0
  144. package/build/client/_app/immutable/chunks/CQlHU-Rx.js.gz +0 -0
  145. package/build/client/_app/immutable/chunks/CR7y1ULG.js +1 -0
  146. package/build/client/_app/immutable/chunks/CR7y1ULG.js.br +0 -0
  147. package/build/client/_app/immutable/chunks/CR7y1ULG.js.gz +0 -0
  148. package/build/client/_app/immutable/chunks/CXfdgbLv.js +1 -0
  149. package/build/client/_app/immutable/chunks/CXfdgbLv.js.br +0 -0
  150. package/build/client/_app/immutable/chunks/CXfdgbLv.js.gz +0 -0
  151. package/build/client/_app/immutable/chunks/CeYIQAXD.js +1 -0
  152. package/build/client/_app/immutable/chunks/CeYIQAXD.js.br +0 -0
  153. package/build/client/_app/immutable/chunks/CeYIQAXD.js.gz +0 -0
  154. package/build/client/_app/immutable/chunks/CewXGI4o.js +14 -0
  155. package/build/client/_app/immutable/chunks/CewXGI4o.js.br +0 -0
  156. package/build/client/_app/immutable/chunks/CewXGI4o.js.gz +0 -0
  157. package/build/client/_app/immutable/chunks/CfdzAfq2.js +1 -0
  158. package/build/client/_app/immutable/chunks/CfdzAfq2.js.br +0 -0
  159. package/build/client/_app/immutable/chunks/CfdzAfq2.js.gz +0 -0
  160. package/build/client/_app/immutable/chunks/CkFDaaNz.js +1 -0
  161. package/build/client/_app/immutable/chunks/CkFDaaNz.js.br +0 -0
  162. package/build/client/_app/immutable/chunks/CkFDaaNz.js.gz +0 -0
  163. package/build/client/_app/immutable/chunks/CkLriSVx.js +1 -0
  164. package/build/client/_app/immutable/chunks/CkLriSVx.js.br +0 -0
  165. package/build/client/_app/immutable/chunks/CkLriSVx.js.gz +0 -0
  166. package/build/client/_app/immutable/chunks/Clzs_eXS.js +5 -0
  167. package/build/client/_app/immutable/chunks/Clzs_eXS.js.br +0 -0
  168. package/build/client/_app/immutable/chunks/Clzs_eXS.js.gz +0 -0
  169. package/build/client/_app/immutable/chunks/CrCQ2NNA.js +1 -0
  170. package/build/client/_app/immutable/chunks/CrCQ2NNA.js.br +0 -0
  171. package/build/client/_app/immutable/chunks/CrCQ2NNA.js.gz +0 -0
  172. package/build/client/_app/immutable/chunks/CrgqcyB_.js +1 -0
  173. package/build/client/_app/immutable/chunks/CrgqcyB_.js.br +0 -0
  174. package/build/client/_app/immutable/chunks/CrgqcyB_.js.gz +0 -0
  175. package/build/client/_app/immutable/chunks/CtlVBKf-.js +1 -0
  176. package/build/client/_app/immutable/chunks/CtlVBKf-.js.br +0 -0
  177. package/build/client/_app/immutable/chunks/CtlVBKf-.js.gz +0 -0
  178. package/build/client/_app/immutable/chunks/D4aeBIhU.js +1 -0
  179. package/build/client/_app/immutable/chunks/D4aeBIhU.js.br +0 -0
  180. package/build/client/_app/immutable/chunks/D4aeBIhU.js.gz +0 -0
  181. package/build/client/_app/immutable/chunks/D7IP_ZEm.js +1 -0
  182. package/build/client/_app/immutable/chunks/D7IP_ZEm.js.br +0 -0
  183. package/build/client/_app/immutable/chunks/D7IP_ZEm.js.gz +0 -0
  184. package/build/client/_app/immutable/chunks/D8Hx-_mj.js +1 -0
  185. package/build/client/_app/immutable/chunks/D8Hx-_mj.js.br +3 -0
  186. package/build/client/_app/immutable/chunks/D8Hx-_mj.js.gz +0 -0
  187. package/build/client/_app/immutable/chunks/DC8T2WRZ.js +1 -0
  188. package/build/client/_app/immutable/chunks/DC8T2WRZ.js.br +0 -0
  189. package/build/client/_app/immutable/chunks/DC8T2WRZ.js.gz +0 -0
  190. package/build/client/_app/immutable/chunks/DGy76IbW.js +2 -0
  191. package/build/client/_app/immutable/chunks/DGy76IbW.js.br +0 -0
  192. package/build/client/_app/immutable/chunks/DGy76IbW.js.gz +0 -0
  193. package/build/client/_app/immutable/chunks/DIABVMrA.js +1 -0
  194. package/build/client/_app/immutable/chunks/DIABVMrA.js.br +0 -0
  195. package/build/client/_app/immutable/chunks/DIABVMrA.js.gz +0 -0
  196. package/build/client/_app/immutable/chunks/DKQe4Tss.js +1 -0
  197. package/build/client/_app/immutable/chunks/DKQe4Tss.js.br +0 -0
  198. package/build/client/_app/immutable/chunks/DKQe4Tss.js.gz +0 -0
  199. package/build/client/_app/immutable/chunks/DLith9Yi.js +1 -0
  200. package/build/client/_app/immutable/chunks/DLith9Yi.js.br +0 -0
  201. package/build/client/_app/immutable/chunks/DLith9Yi.js.gz +0 -0
  202. package/build/client/_app/immutable/chunks/DPTtvukI.js +1 -0
  203. package/build/client/_app/immutable/chunks/DPTtvukI.js.br +0 -0
  204. package/build/client/_app/immutable/chunks/DPTtvukI.js.gz +0 -0
  205. package/build/client/_app/immutable/chunks/DX4qG4td.js +1 -0
  206. package/build/client/_app/immutable/chunks/DX4qG4td.js.br +1 -0
  207. package/build/client/_app/immutable/chunks/DX4qG4td.js.gz +0 -0
  208. package/build/client/_app/immutable/chunks/Da92_52d.js +1 -0
  209. package/build/client/_app/immutable/chunks/Da92_52d.js.br +0 -0
  210. package/build/client/_app/immutable/chunks/Da92_52d.js.gz +0 -0
  211. package/build/client/_app/immutable/chunks/Db0WMrvR.js +1 -0
  212. package/build/client/_app/immutable/chunks/Db0WMrvR.js.br +0 -0
  213. package/build/client/_app/immutable/chunks/Db0WMrvR.js.gz +0 -0
  214. package/build/client/_app/immutable/chunks/Dlb_KqyS.js +2 -0
  215. package/build/client/_app/immutable/chunks/Dlb_KqyS.js.br +0 -0
  216. package/build/client/_app/immutable/chunks/Dlb_KqyS.js.gz +0 -0
  217. package/build/client/_app/immutable/chunks/DmcreR7o.js +1 -0
  218. package/build/client/_app/immutable/chunks/DmcreR7o.js.br +0 -0
  219. package/build/client/_app/immutable/chunks/DmcreR7o.js.gz +0 -0
  220. package/build/client/_app/immutable/chunks/Dq9kJk5R.js +1 -0
  221. package/build/client/_app/immutable/chunks/Dq9kJk5R.js.br +0 -0
  222. package/build/client/_app/immutable/chunks/Dq9kJk5R.js.gz +0 -0
  223. package/build/client/_app/immutable/chunks/DsnmJJEf.js +1 -0
  224. package/build/client/_app/immutable/chunks/DsnmJJEf.js.br +2 -0
  225. package/build/client/_app/immutable/chunks/DsnmJJEf.js.gz +0 -0
  226. package/build/client/_app/immutable/chunks/DxGQT-Hz.js +1 -0
  227. package/build/client/_app/immutable/chunks/DxGQT-Hz.js.br +0 -0
  228. package/build/client/_app/immutable/chunks/DxGQT-Hz.js.gz +0 -0
  229. package/build/client/_app/immutable/chunks/ET-O1REu.js +1 -0
  230. package/build/client/_app/immutable/chunks/ET-O1REu.js.br +0 -0
  231. package/build/client/_app/immutable/chunks/ET-O1REu.js.gz +0 -0
  232. package/build/client/_app/immutable/chunks/Ewrw42Vq.js +1 -0
  233. package/build/client/_app/immutable/chunks/Ewrw42Vq.js.br +0 -0
  234. package/build/client/_app/immutable/chunks/Ewrw42Vq.js.gz +0 -0
  235. package/build/client/_app/immutable/chunks/FQ69txbU.js +1 -0
  236. package/build/client/_app/immutable/chunks/FQ69txbU.js.br +0 -0
  237. package/build/client/_app/immutable/chunks/FQ69txbU.js.gz +0 -0
  238. package/build/client/_app/immutable/chunks/L-6wuY5f.js +2 -0
  239. package/build/client/_app/immutable/chunks/L-6wuY5f.js.br +0 -0
  240. package/build/client/_app/immutable/chunks/L-6wuY5f.js.gz +0 -0
  241. package/build/client/_app/immutable/chunks/M201SoVK.js +1 -0
  242. package/build/client/_app/immutable/chunks/M201SoVK.js.br +1 -0
  243. package/build/client/_app/immutable/chunks/M201SoVK.js.gz +0 -0
  244. package/build/client/_app/immutable/chunks/OeqXO44y.js +1 -0
  245. package/build/client/_app/immutable/chunks/OeqXO44y.js.br +0 -0
  246. package/build/client/_app/immutable/chunks/OeqXO44y.js.gz +0 -0
  247. package/build/client/_app/immutable/chunks/PPVm8Dsz.js +1 -0
  248. package/build/client/_app/immutable/chunks/PPVm8Dsz.js.br +0 -0
  249. package/build/client/_app/immutable/chunks/PPVm8Dsz.js.gz +0 -0
  250. package/build/client/_app/immutable/chunks/QAFSHLn2.js +1 -0
  251. package/build/client/_app/immutable/chunks/QAFSHLn2.js.br +0 -0
  252. package/build/client/_app/immutable/chunks/QAFSHLn2.js.gz +0 -0
  253. package/build/client/_app/immutable/chunks/Tm9AblHs.js +1 -0
  254. package/build/client/_app/immutable/chunks/Tm9AblHs.js.br +0 -0
  255. package/build/client/_app/immutable/chunks/Tm9AblHs.js.gz +0 -0
  256. package/build/client/_app/immutable/chunks/bvY4yrzM.js +4 -0
  257. package/build/client/_app/immutable/chunks/bvY4yrzM.js.br +0 -0
  258. package/build/client/_app/immutable/chunks/bvY4yrzM.js.gz +0 -0
  259. package/build/client/_app/immutable/chunks/cAfuCUf-.js +1 -0
  260. package/build/client/_app/immutable/chunks/cAfuCUf-.js.br +0 -0
  261. package/build/client/_app/immutable/chunks/cAfuCUf-.js.gz +0 -0
  262. package/build/client/_app/immutable/chunks/eMSiEzFi.js +1 -0
  263. package/build/client/_app/immutable/chunks/eMSiEzFi.js.br +0 -0
  264. package/build/client/_app/immutable/chunks/eMSiEzFi.js.gz +0 -0
  265. package/build/client/_app/immutable/chunks/iVpzjqp1.js +1 -0
  266. package/build/client/_app/immutable/chunks/iVpzjqp1.js.br +0 -0
  267. package/build/client/_app/immutable/chunks/iVpzjqp1.js.gz +0 -0
  268. package/build/client/_app/immutable/chunks/m3YfhLk1.js +1 -0
  269. package/build/client/_app/immutable/chunks/m3YfhLk1.js.br +0 -0
  270. package/build/client/_app/immutable/chunks/m3YfhLk1.js.gz +0 -0
  271. package/build/client/_app/immutable/chunks/p7x6PRF0.js +1 -0
  272. package/build/client/_app/immutable/chunks/p7x6PRF0.js.br +0 -0
  273. package/build/client/_app/immutable/chunks/p7x6PRF0.js.gz +0 -0
  274. package/build/client/_app/immutable/chunks/t4rxsdjl.js +74 -0
  275. package/build/client/_app/immutable/chunks/t4rxsdjl.js.br +0 -0
  276. package/build/client/_app/immutable/chunks/t4rxsdjl.js.gz +0 -0
  277. package/build/client/_app/immutable/chunks/uD7-7yV9.js +1 -0
  278. package/build/client/_app/immutable/chunks/uD7-7yV9.js.br +4 -0
  279. package/build/client/_app/immutable/chunks/uD7-7yV9.js.gz +0 -0
  280. package/build/client/_app/immutable/chunks/wbPk3Yxo.js +81 -0
  281. package/build/client/_app/immutable/chunks/wbPk3Yxo.js.br +0 -0
  282. package/build/client/_app/immutable/chunks/wbPk3Yxo.js.gz +0 -0
  283. package/build/client/_app/immutable/entry/app.D22_AlD8.js +2 -0
  284. package/build/client/_app/immutable/entry/app.D22_AlD8.js.br +0 -0
  285. package/build/client/_app/immutable/entry/app.D22_AlD8.js.gz +0 -0
  286. package/build/client/_app/immutable/entry/start.xwa7znED.js +1 -0
  287. package/build/client/_app/immutable/entry/start.xwa7znED.js.br +0 -0
  288. package/build/client/_app/immutable/entry/start.xwa7znED.js.gz +0 -0
  289. package/build/client/_app/immutable/nodes/0.DsfUbybd.js +5 -0
  290. package/build/client/_app/immutable/nodes/0.DsfUbybd.js.br +0 -0
  291. package/build/client/_app/immutable/nodes/0.DsfUbybd.js.gz +0 -0
  292. package/build/client/_app/immutable/nodes/1.9tnApS8T.js +1 -0
  293. package/build/client/_app/immutable/nodes/1.9tnApS8T.js.br +0 -0
  294. package/build/client/_app/immutable/nodes/1.9tnApS8T.js.gz +0 -0
  295. package/build/client/_app/immutable/nodes/10.CbyVViLq.js +14 -0
  296. package/build/client/_app/immutable/nodes/10.CbyVViLq.js.br +0 -0
  297. package/build/client/_app/immutable/nodes/10.CbyVViLq.js.gz +0 -0
  298. package/build/client/_app/immutable/nodes/11.xg5UTCOx.js +77 -0
  299. package/build/client/_app/immutable/nodes/11.xg5UTCOx.js.br +0 -0
  300. package/build/client/_app/immutable/nodes/11.xg5UTCOx.js.gz +0 -0
  301. package/build/client/_app/immutable/nodes/12.C6hLGaov.js +32 -0
  302. package/build/client/_app/immutable/nodes/12.C6hLGaov.js.br +0 -0
  303. package/build/client/_app/immutable/nodes/12.C6hLGaov.js.gz +0 -0
  304. package/build/client/_app/immutable/nodes/13.DHbTeLkm.js +5 -0
  305. package/build/client/_app/immutable/nodes/13.DHbTeLkm.js.br +0 -0
  306. package/build/client/_app/immutable/nodes/13.DHbTeLkm.js.gz +0 -0
  307. package/build/client/_app/immutable/nodes/14.BMIOGjF-.js +1 -0
  308. package/build/client/_app/immutable/nodes/14.BMIOGjF-.js.br +0 -0
  309. package/build/client/_app/immutable/nodes/14.BMIOGjF-.js.gz +0 -0
  310. package/build/client/_app/immutable/nodes/15.DYSMqa5A.js +10 -0
  311. package/build/client/_app/immutable/nodes/15.DYSMqa5A.js.br +0 -0
  312. package/build/client/_app/immutable/nodes/15.DYSMqa5A.js.gz +0 -0
  313. package/build/client/_app/immutable/nodes/16.B0mX0t_j.js +6 -0
  314. package/build/client/_app/immutable/nodes/16.B0mX0t_j.js.br +0 -0
  315. package/build/client/_app/immutable/nodes/16.B0mX0t_j.js.gz +0 -0
  316. package/build/client/_app/immutable/nodes/2.CSYV0jmk.js +4 -0
  317. package/build/client/_app/immutable/nodes/2.CSYV0jmk.js.br +0 -0
  318. package/build/client/_app/immutable/nodes/2.CSYV0jmk.js.gz +0 -0
  319. package/build/client/_app/immutable/nodes/3.X5qqsIUa.js +5 -0
  320. package/build/client/_app/immutable/nodes/3.X5qqsIUa.js.br +0 -0
  321. package/build/client/_app/immutable/nodes/3.X5qqsIUa.js.gz +0 -0
  322. package/build/client/_app/immutable/nodes/4.Di4k8SR2.js +3 -0
  323. package/build/client/_app/immutable/nodes/4.Di4k8SR2.js.br +0 -0
  324. package/build/client/_app/immutable/nodes/4.Di4k8SR2.js.gz +0 -0
  325. package/build/client/_app/immutable/nodes/5.DMFYTxVa.js +7 -0
  326. package/build/client/_app/immutable/nodes/5.DMFYTxVa.js.br +0 -0
  327. package/build/client/_app/immutable/nodes/5.DMFYTxVa.js.gz +0 -0
  328. package/build/client/_app/immutable/nodes/6.6yDAURLV.js +4 -0
  329. package/build/client/_app/immutable/nodes/6.6yDAURLV.js.br +0 -0
  330. package/build/client/_app/immutable/nodes/6.6yDAURLV.js.gz +0 -0
  331. package/build/client/_app/immutable/nodes/7.xxvMU05c.js +1 -0
  332. package/build/client/_app/immutable/nodes/7.xxvMU05c.js.br +0 -0
  333. package/build/client/_app/immutable/nodes/7.xxvMU05c.js.gz +0 -0
  334. package/build/client/_app/immutable/nodes/8.GSaWotW8.js +1 -0
  335. package/build/client/_app/immutable/nodes/8.GSaWotW8.js.br +0 -0
  336. package/build/client/_app/immutable/nodes/8.GSaWotW8.js.gz +0 -0
  337. package/build/client/_app/immutable/nodes/9.CEiUwDDg.js +1 -0
  338. package/build/client/_app/immutable/nodes/9.CEiUwDDg.js.br +0 -0
  339. package/build/client/_app/immutable/nodes/9.CEiUwDDg.js.gz +0 -0
  340. package/build/client/_app/version.json +1 -0
  341. package/build/client/_app/version.json.br +0 -0
  342. package/build/client/_app/version.json.gz +0 -0
  343. package/build/client/favicon.svg +1 -0
  344. package/build/client/favicon.svg.br +0 -0
  345. package/build/client/favicon.svg.gz +0 -0
  346. package/build/env.js +70 -0
  347. package/build/handler.js +23 -0
  348. package/build/index.js +146 -0
  349. package/build/server/chunks/chunks/AllowanceMeter.js-C9jRsAGU.js +42 -0
  350. package/build/server/chunks/chunks/DecisionCard.js-u1VQ9s_v.js +350 -0
  351. package/build/server/chunks/chunks/DictateTextarea.js-BlEnOzcN.js +85 -0
  352. package/build/server/chunks/chunks/EtaLine.js-Pa4_VV6V.js +79 -0
  353. package/build/server/chunks/chunks/Icon.js-D7CY3joB.js +129 -0
  354. package/build/server/chunks/chunks/InsightsNav.js-BlxFBJfj.js +22 -0
  355. package/build/server/chunks/chunks/MicButton.js-BZSQAyuM.js +336 -0
  356. package/build/server/chunks/chunks/QuestionList.js-DglKezUe.js +259 -0
  357. package/build/server/chunks/chunks/SlotContent.js-YqZXXtRz.js +1977 -0
  358. package/build/server/chunks/chunks/StageTrack.js-BaorW-yk.js +59 -0
  359. package/build/server/chunks/chunks/TimeBar.js-k38rc7ZI.js +32 -0
  360. package/build/server/chunks/chunks/TimeLegend.js-BQVvgsvs.js +29 -0
  361. package/build/server/chunks/chunks/access.js-CS2pJasF.js +816 -0
  362. package/build/server/chunks/chunks/anchor.js-ByXDBfbi.js +20 -0
  363. package/build/server/chunks/chunks/arrow-down.js-DXDJc9EE.js +18 -0
  364. package/build/server/chunks/chunks/arrow-left.js-6Yey35CE.js +18 -0
  365. package/build/server/chunks/chunks/arrow-right.js-CfbPWRqu.js +18 -0
  366. package/build/server/chunks/chunks/arrow-up.js-AhghNbhW.js +18 -0
  367. package/build/server/chunks/chunks/bell.js-CAlv92RY.js +143 -0
  368. package/build/server/chunks/chunks/blocks.js-BL9jLCe-.js +710 -0
  369. package/build/server/chunks/chunks/buildlog.js-BCKtSKOt.js +55 -0
  370. package/build/server/chunks/chunks/bus.svelte.js-DRTptEhF.js +9 -0
  371. package/build/server/chunks/chunks/button.js-HeBqLheH.js +7311 -0
  372. package/build/server/chunks/chunks/chat.svelte.js-Cgdbtjbw.js +537 -0
  373. package/build/server/chunks/chunks/check.js-bmUhmMEz.js +15 -0
  374. package/build/server/chunks/chunks/checks.js-BnIxIaus.js +175 -0
  375. package/build/server/chunks/chunks/chevron-down.js-D75hVSIe.js +15 -0
  376. package/build/server/chunks/chunks/chevron-right.js-yhLg_GaH.js +15 -0
  377. package/build/server/chunks/chunks/circle-dashed.js-Bm3gZCXK.js +24 -0
  378. package/build/server/chunks/chunks/client.js-BUNengrw.js +24 -0
  379. package/build/server/chunks/chunks/clock.js-D7JTvRbC.js +18 -0
  380. package/build/server/chunks/chunks/compass.js-Tq6uiG8I.js +23 -0
  381. package/build/server/chunks/chunks/detail.js-CSjOmiVi.js +133 -0
  382. package/build/server/chunks/chunks/exports.js-BZBK1HC9.js +161 -0
  383. package/build/server/chunks/chunks/external-link.js-WxVF0xXO.js +24 -0
  384. package/build/server/chunks/chunks/file-text.js-CAo3vdqd.js +26 -0
  385. package/build/server/chunks/chunks/format.js-D3lWEg6U.js +70 -0
  386. package/build/server/chunks/chunks/gauge.js-Dw9bgE72.js +35 -0
  387. package/build/server/chunks/chunks/git-pull-request.js-Cx1w8BQr.js +20 -0
  388. package/build/server/chunks/chunks/hammer.js-fp_Kidfj.js +24 -0
  389. package/build/server/chunks/chunks/hand.js-xkYPYJZj.js +37 -0
  390. package/build/server/chunks/chunks/harbour.js-xu7EfIHk.js +113 -0
  391. package/build/server/chunks/chunks/http.js-TzZuOtxn.js +25 -0
  392. package/build/server/chunks/chunks/http2.js-Cr9xuMRL.js +26 -0
  393. package/build/server/chunks/chunks/inbox.js-CW2sFmx9.js +114 -0
  394. package/build/server/chunks/chunks/inbox.svelte.js-OoKhjjWM.js +134 -0
  395. package/build/server/chunks/chunks/index-server.js-CtyUzIGY.js +17 -0
  396. package/build/server/chunks/chunks/index-server2.js-DMc-UvjC.js +19 -0
  397. package/build/server/chunks/chunks/index.js-Bn6j9diM.js +1524 -0
  398. package/build/server/chunks/chunks/index2.js-CXaRTuov.js +46 -0
  399. package/build/server/chunks/chunks/insights.js-CzzfyHGp.js +100 -0
  400. package/build/server/chunks/chunks/internal.js-Co-6PAQm.js +146 -0
  401. package/build/server/chunks/chunks/keys.js-CdtCzv-v.js +20 -0
  402. package/build/server/chunks/chunks/live.svelte.js-BRUTNc9D.js +196 -0
  403. package/build/server/chunks/chunks/loader-circle.js-IYRaUYWq.js +16 -0
  404. package/build/server/chunks/chunks/message-circle-question-mark.js-DwrMi0ty.js +25 -0
  405. package/build/server/chunks/chunks/message-square-text.js-N5uEmy8L.js +25 -0
  406. package/build/server/chunks/chunks/message-square.js-Hp-6BHgG.js +22 -0
  407. package/build/server/chunks/chunks/messages.js-CFyGKoqq.js +4 -0
  408. package/build/server/chunks/chunks/minus.js-bsfnwE-h.js +15 -0
  409. package/build/server/chunks/chunks/monitor-play.js-B7qbbPH6.js +28 -0
  410. package/build/server/chunks/chunks/passage-meta.js-uvNUyJkg.js +232 -0
  411. package/build/server/chunks/chunks/plain.js-Dc97sYaJ.js +101 -0
  412. package/build/server/chunks/chunks/preview.js-CVD-Kwks.js +68 -0
  413. package/build/server/chunks/chunks/prreview.js-C5XxDIu2.js +85 -0
  414. package/build/server/chunks/chunks/root.js-CQzYN4Pu.js +3105 -0
  415. package/build/server/chunks/chunks/runtime.js-C0n924wq.js +13280 -0
  416. package/build/server/chunks/chunks/scale.js-vP4G0lZM.js +21 -0
  417. package/build/server/chunks/chunks/server.js-Bf8x1V_n.js +16 -0
  418. package/build/server/chunks/chunks/shield-check.js-PJLnCKD9.js +23 -0
  419. package/build/server/chunks/chunks/slots.svelte.js-0Ejhe-hS.js +34 -0
  420. package/build/server/chunks/chunks/spec.js-B0yI1XqG.js +307 -0
  421. package/build/server/chunks/chunks/split.js-BsCU24rQ.js +20 -0
  422. package/build/server/chunks/chunks/square-terminal.js-D5Z4Sl2-.js +47 -0
  423. package/build/server/chunks/chunks/tone.js-r2qFVrZC.js +30 -0
  424. package/build/server/chunks/chunks/trash.js-DYFbRevY.js +46 -0
  425. package/build/server/chunks/chunks/triangle-alert.js-DuE40HSU.js +38 -0
  426. package/build/server/chunks/chunks/utils.js-DTSGDHlH.js +2956 -0
  427. package/build/server/chunks/chunks/utils2.js-BQzn9ikS.js +38 -0
  428. package/build/server/chunks/chunks/view.js-BtcLmKUY.js +76 -0
  429. package/build/server/chunks/chunks/view2.js-BdUXqNlY.js +87 -0
  430. package/build/server/chunks/chunks/views.js-B0wP-tuB.js +137 -0
  431. package/build/server/chunks/chunks/waypoints.js-D3HN7bje.js +67 -0
  432. package/build/server/chunks/chunks/x.js-tlds9Ooz.js +18 -0
  433. package/build/server/chunks/entries/endpoints/api/events/_server.ts.js-DNHG661Q.js +93 -0
  434. package/build/server/chunks/entries/endpoints/api/firstmate/chat/_server.ts.js-XBUQePMq.js +74 -0
  435. package/build/server/chunks/entries/endpoints/api/firstmate/commands/_server.ts.js-D1tzpRWy.js +110 -0
  436. package/build/server/chunks/entries/endpoints/api/firstmate/input/_server.ts.js-DqhQUZUA.js +42 -0
  437. package/build/server/chunks/entries/endpoints/api/firstmate/interrupt/_server.ts.js-LsZer0Bi.js +35 -0
  438. package/build/server/chunks/entries/endpoints/api/firstmate/messages/_server.ts.js-DQob0XkJ.js +57 -0
  439. package/build/server/chunks/entries/endpoints/api/firstmate/pick/_server.ts.js-DgFjtYYL.js +45 -0
  440. package/build/server/chunks/entries/endpoints/api/firstmate/start/_server.ts.js-DOoA4rRW.js +35 -0
  441. package/build/server/chunks/entries/endpoints/api/fleet/_server.ts.js-DZQsFY87.js +27 -0
  442. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-DuSzTlq5.js +27 -0
  443. package/build/server/chunks/entries/endpoints/api/inbox/_server.ts.js-C15XwPXH.js +51 -0
  444. package/build/server/chunks/entries/endpoints/api/insights/_server.ts.js--gavJO4f.js +27 -0
  445. package/build/server/chunks/entries/endpoints/api/plugins/_server.ts.js-CsTy_jT6.js +27 -0
  446. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/_server.ts.js-BWOcGtOU.js +32 -0
  447. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/commands/_server.ts.js-Kjwbc2wm.js +41 -0
  448. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/consent/_server.ts.js-BTIb8CUb.js +53 -0
  449. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/draft/_server.ts.js-Vh52yDJ9.js +40 -0
  450. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/file/_server.ts.js-LJDJLrpB.js +63 -0
  451. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/test/_server.ts.js-CdDBYH6K.js +46 -0
  452. package/build/server/chunks/entries/endpoints/api/services/_server.ts.js-DoElFmWK.js +46 -0
  453. package/build/server/chunks/entries/endpoints/api/slots/_server.ts.js-KiiPnPLF.js +35 -0
  454. package/build/server/chunks/entries/endpoints/api/specs/_id_/_server.ts.js-LMXTPr04.js +59 -0
  455. package/build/server/chunks/entries/endpoints/api/specs/_id_/build-request/_server.ts.js-bqjJGIjt.js +47 -0
  456. package/build/server/chunks/entries/endpoints/api/specs/_id_/comments/_comment_/_server.ts.js-DD1qQE9w.js +36 -0
  457. package/build/server/chunks/entries/endpoints/api/specs/_id_/comments/_server.ts.js-Bby1xkpH.js +57 -0
  458. package/build/server/chunks/entries/endpoints/api/specs/_id_/images/_name_/_server.ts.js-CPX8OLQa.js +49 -0
  459. package/build/server/chunks/entries/endpoints/api/specs/_id_/images/_server.ts.js-BjBV4SVl.js +55 -0
  460. package/build/server/chunks/entries/endpoints/api/specs/_id_/sent/_server.ts.js-BAqm0IW0.js +36 -0
  461. package/build/server/chunks/entries/endpoints/api/specs/_id_/turn/_server.ts.js-CNFIHA70.js +82 -0
  462. package/build/server/chunks/entries/endpoints/api/specs/_server.ts.js-Bix9PKKr.js +40 -0
  463. package/build/server/chunks/entries/endpoints/api/tasks/_id_/_server.ts.js-CT7cLDQU.js +32 -0
  464. package/build/server/chunks/entries/endpoints/api/tasks/_id_/artifacts/_...name_/_server.ts.js-zCsm8UJT.js +51 -0
  465. package/build/server/chunks/entries/endpoints/api/tasks/_id_/diff/_server.ts.js-ccyEPbua.js +39 -0
  466. package/build/server/chunks/entries/endpoints/api/tasks/_id_/output/_server.ts.js-eZPQtK6T.js +84 -0
  467. package/build/server/chunks/entries/endpoints/api/tasks/_id_/preview/_server.ts.js-CW76hSLW.js +102 -0
  468. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/_server.ts.js-Cjuig1dr.js +34 -0
  469. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/ask/_server.ts.js-C04r1OFS.js +40 -0
  470. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/check/_server.ts.js-Ca5VNJtJ.js +39 -0
  471. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/guide/_server.ts.js-BKLIKSUM.js +39 -0
  472. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/runs/_run_/stop/_server.ts.js-C-D9zXgK.js +32 -0
  473. package/build/server/chunks/entries/fallbacks/error.svelte.js-DlN_tCrh.js +15 -0
  474. package/build/server/chunks/entries/hooks.server.js-Cgq1_RNe.js +40 -0
  475. package/build/server/chunks/entries/pages/_layout.server.ts.js-B7EWMhm1.js +20 -0
  476. package/build/server/chunks/entries/pages/_layout.svelte.js-BJuZaosz.js +10454 -0
  477. package/build/server/chunks/entries/pages/_page.server.ts.js-CrjekE3C.js +16 -0
  478. package/build/server/chunks/entries/pages/_page.svelte.js-BI4c5H0n.js +3699 -0
  479. package/build/server/chunks/entries/pages/decisions/_page.server.ts.js-Olm_zS-k.js +11 -0
  480. package/build/server/chunks/entries/pages/decisions/_page.svelte.js-ClTz3O_K.js +167 -0
  481. package/build/server/chunks/entries/pages/harbour/_page.server.ts.js-CVhhNUGy.js +20 -0
  482. package/build/server/chunks/entries/pages/harbour/_page.svelte.js-43FRNSVK.js +1346 -0
  483. package/build/server/chunks/entries/pages/headroom/_page.server.ts.js-Bv8GukD1.js +11 -0
  484. package/build/server/chunks/entries/pages/headroom/_page.svelte.js-zmKQdAwy.js +135 -0
  485. package/build/server/chunks/entries/pages/inbox/_page.svelte.js-wTvAFPNM.js +175 -0
  486. package/build/server/chunks/entries/pages/plugins/_plugin_/_page_/_page.server.ts.js-BJRmRxez.js +15 -0
  487. package/build/server/chunks/entries/pages/plugins/_plugin_/_page_/_page.svelte.js-DfAqJJ3i.js +55 -0
  488. package/build/server/chunks/entries/pages/projects/_id_/_plugin_/_tab_/_page.server.ts.js-DawJ61h-.js +15 -0
  489. package/build/server/chunks/entries/pages/projects/_id_/_plugin_/_tab_/_page.svelte.js-B472Pugu.js +66 -0
  490. package/build/server/chunks/entries/pages/projects/_id_/passage/_page.server.ts.js-Cm-4qkeb.js +14 -0
  491. package/build/server/chunks/entries/pages/projects/_id_/passage/_page.svelte.js-CWjEArXY.js +394 -0
  492. package/build/server/chunks/entries/pages/projects/_id_/passage/edit/_page.server.ts.js-DWNW8L5o.js +15 -0
  493. package/build/server/chunks/entries/pages/projects/_id_/passage/edit/_page.svelte.js-iHacn81K.js +1859 -0
  494. package/build/server/chunks/entries/pages/projects/_page.server.ts.js-BVDM5Frg.js +37 -0
  495. package/build/server/chunks/entries/pages/projects/_page.svelte.js-B_NQ-Wg3.js +270 -0
  496. package/build/server/chunks/entries/pages/spec/_page.server.ts.js-B3atEUDm.js +31 -0
  497. package/build/server/chunks/entries/pages/spec/_page.svelte.js-BJjweG9u.js +1561 -0
  498. package/build/server/chunks/entries/pages/tasks/_id_/_page.server.ts.js-BDQIO7Ft.js +25 -0
  499. package/build/server/chunks/entries/pages/tasks/_id_/_page.svelte.js-Dr2wwDJG.js +2063 -0
  500. package/build/server/chunks/entries/pages/tasks/_id_/doc/_page.server.ts.js-Bw-3fcQ6.js +24 -0
  501. package/build/server/chunks/entries/pages/tasks/_id_/doc/_page.svelte.js-DOyZ1QzI.js +145 -0
  502. package/build/server/chunks/entries/pages/tasks/_id_/review/_page.server.ts.js-CJek9uLa.js +15 -0
  503. package/build/server/chunks/entries/pages/tasks/_id_/review/_page.svelte.js-BDaRELgE.js +692 -0
  504. package/build/server/chunks/entries/pages/time/_page.server.ts.js-An6F-Ydg.js +11 -0
  505. package/build/server/chunks/entries/pages/time/_page.svelte.js-CSXGxvVs.js +107 -0
  506. package/build/server/chunks/handler-BnRz5A8m.js +1474 -0
  507. package/build/server/chunks/index.js-C8djlQGs.js +4296 -0
  508. package/build/server/chunks/manifest.js-YAglwkb0.js +434 -0
  509. package/build/server/chunks/nodes/0.js-lkzICUiD.js +32 -0
  510. package/build/server/chunks/nodes/1.js-BJHI215Q.js +9 -0
  511. package/build/server/chunks/nodes/10.js-BWB-fD67.js +33 -0
  512. package/build/server/chunks/nodes/11.js-DWkXu85W.js +33 -0
  513. package/build/server/chunks/nodes/12.js-CKTx5eRx.js +37 -0
  514. package/build/server/chunks/nodes/13.js-C9YUj8Wf.js +33 -0
  515. package/build/server/chunks/nodes/14.js-CvfRHrCy.js +33 -0
  516. package/build/server/chunks/nodes/15.js-D_eEoMQb.js +33 -0
  517. package/build/server/chunks/nodes/16.js-BQhgpvij.js +32 -0
  518. package/build/server/chunks/nodes/2.js-C-3t-e-a.js +32 -0
  519. package/build/server/chunks/nodes/3.js-DgwKYi6C.js +32 -0
  520. package/build/server/chunks/nodes/4.js-DRDQ1cZ6.js +34 -0
  521. package/build/server/chunks/nodes/5.js-Bn5aoN6C.js +32 -0
  522. package/build/server/chunks/nodes/6.js-lazTWxVv.js +9 -0
  523. package/build/server/chunks/nodes/7.js-PUjlFfxr.js +32 -0
  524. package/build/server/chunks/nodes/8.js-DYPhaWV-.js +34 -0
  525. package/build/server/chunks/nodes/9.js-C2q_Jaiu.js +32 -0
  526. package/build/shims.js +33 -0
  527. package/dist/cli.js +534 -0
  528. package/package.json +96 -5
@@ -0,0 +1,2063 @@
1
+ import { af as head, aj as escape_html, ai as attr, aa as ensure_array_like, ak as stringify, ah as attr_class, _ as derived, a5 as clsx, a6 as bind_props, ae as spread_props, al as props_id, ap as attr_style } from '../../../../chunks/index.js-Bn6j9diM.js';
2
+ import { p as page } from '../../../../chunks/index2.js-CXaRTuov.js';
3
+ import { r as replaceState } from '../../../../chunks/client.js-BUNengrw.js';
4
+ import { l as live, a as currentFleet } from '../../../../chunks/live.svelte.js-BRUTNc9D.js';
5
+ import { s as slots } from '../../../../chunks/slots.svelte.js-0Ejhe-hS.js';
6
+ import { s as slotKey } from '../../../../chunks/keys.js-CdtCzv-v.js';
7
+ import { S as SlotContent, a as Book_open } from '../../../../chunks/SlotContent.js-YqZXXtRz.js';
8
+ import { d as consoleInImage, b as agentLine, a as ago, c as clock } from '../../../../chunks/format.js-D3lWEg6U.js';
9
+ import { p as plainStatus } from '../../../../chunks/plain.js-Dc97sYaJ.js';
10
+ import { a as showsChecks, s as segmentTone, c as checksLine, b as stepSummary, d as duration$1, e as ciChecksLine } from '../../../../chunks/checks.js-BnIxIaus.js';
11
+ import { C as Check } from '../../../../chunks/check.js-bmUhmMEz.js';
12
+ import { X } from '../../../../chunks/x.js-tlds9Ooz.js';
13
+ import { I as Icon } from '../../../../chunks/Icon.js-D7CY3joB.js';
14
+ import { M as Minus } from '../../../../chunks/minus.js-bsfnwE-h.js';
15
+ import { L as Loader_circle } from '../../../../chunks/loader-circle.js-IYRaUYWq.js';
16
+ import { C as Circle_dashed } from '../../../../chunks/circle-dashed.js-Bm3gZCXK.js';
17
+ import { B as Button } from '../../../../chunks/button.js-HeBqLheH.js';
18
+ import { S as StageTrack, B as BusyRing } from '../../../../chunks/StageTrack.js-BaorW-yk.js';
19
+ import { C as ConsoleWindow, L as Lightbox, a as awaitingReview, M as Messages_square, Q as QuestionList, b as ConsoleFullscreen, r as reviewView } from '../../../../chunks/QuestionList.js-DglKezUe.js';
20
+ import '../../../../chunks/exports.js-BZBK1HC9.js';
21
+ import '../../../../chunks/utils2.js-BQzn9ikS.js';
22
+ import '../../../../chunks/utils.js-DTSGDHlH.js';
23
+ import '../../../../chunks/root.js-CQzYN4Pu.js';
24
+ import { D as DictateTextarea } from '../../../../chunks/DictateTextarea.js-BlEnOzcN.js';
25
+ import { s as sendToInbox } from '../../../../chunks/chat.svelte.js-Cgdbtjbw.js';
26
+ import { a as feedbackNote } from '../../../../chunks/preview.js-CVD-Kwks.js';
27
+ import { C as Chevron_right } from '../../../../chunks/chevron-right.js-yhLg_GaH.js';
28
+ import { M as Message_square } from '../../../../chunks/message-square.js-Hp-6BHgG.js';
29
+ import { E as External_link } from '../../../../chunks/external-link.js-WxVF0xXO.js';
30
+ import { C as Compass } from '../../../../chunks/compass.js-Tq6uiG8I.js';
31
+ import { e as etaLine, C as CONFIDENCE, P as PHASE_LABEL, d as duration } from '../../../../chunks/insights.js-CzzfyHGp.js';
32
+ import { F as File_text } from '../../../../chunks/file-text.js-CAo3vdqd.js';
33
+ import { P as PARTY_LABEL, D as DOC_KIND_LABEL } from '../../../../chunks/buildlog.js-BCKtSKOt.js';
34
+ import { S as Scale } from '../../../../chunks/scale.js-vP4G0lZM.js';
35
+ import { T as TimeBar } from '../../../../chunks/TimeBar.js-k38rc7ZI.js';
36
+ import { T as TimeLegend } from '../../../../chunks/TimeLegend.js-BQVvgsvs.js';
37
+ import { t as textClass, b as tone } from '../../../../chunks/tone.js-r2qFVrZC.js';
38
+ import { t as tick } from '../../../../chunks/index-server.js-CtyUzIGY.js';
39
+ import { A as Arrow_left } from '../../../../chunks/arrow-left.js-6Yey35CE.js';
40
+ import { M as Monitor_play } from '../../../../chunks/monitor-play.js-B7qbbPH6.js';
41
+ import '../../../../chunks/blocks.js-BL9jLCe-.js';
42
+ import 'yaml';
43
+ import '../../../../chunks/git-pull-request.js-Cx1w8BQr.js';
44
+ import '../../../../chunks/index-server2.js-DMc-UvjC.js';
45
+ import '../../../../chunks/anchor.js-ByXDBfbi.js';
46
+ import '../../../../chunks/triangle-alert.js-DuE40HSU.js';
47
+ import '../../../../chunks/square-terminal.js-D5Z4Sl2-.js';
48
+ import '../../../../chunks/split.js-BsCU24rQ.js';
49
+ import '../../../../chunks/message-square-text.js-N5uEmy8L.js';
50
+ import '../../../../chunks/hand.js-xkYPYJZj.js';
51
+ import '../../../../chunks/arrow-right.js-CfbPWRqu.js';
52
+ import '../../../../chunks/chevron-down.js-D75hVSIe.js';
53
+ import '../../../../chunks/MicButton.js-BZSQAyuM.js';
54
+ import '../../../../chunks/messages.js-CFyGKoqq.js';
55
+
56
+ function Circle_pause($$renderer, $$props) {
57
+ let { $$slots, $$events, ...props } = $$props;
58
+ const iconData = {
59
+ "name": "circle-pause",
60
+ "size": 24,
61
+ "node": [
62
+ ["circle", { "cx": "12", "cy": "12", "r": "10" }],
63
+ ["line", { "x1": "10", "x2": "10", "y1": "15", "y2": "9" }],
64
+ ["line", { "x1": "14", "x2": "14", "y1": "15", "y2": "9" }]
65
+ ],
66
+ "aliases": ["pause-circle"]
67
+ };
68
+ Icon($$renderer, spread_props([props, { icon: iconData }]));
69
+ }
70
+ function Image_off($$renderer, $$props) {
71
+ let { $$slots, $$events, ...props } = $$props;
72
+ const iconData = {
73
+ "name": "image-off",
74
+ "size": 24,
75
+ "node": [
76
+ ["line", { "x1": "2", "x2": "22", "y1": "2", "y2": "22" }],
77
+ ["path", { "d": "M10.41 10.41a2 2 0 1 1-2.83-2.83" }],
78
+ [
79
+ "line",
80
+ { "x1": "13.5", "x2": "6", "y1": "13.5", "y2": "21" }
81
+ ],
82
+ ["line", { "x1": "18", "x2": "21", "y1": "12", "y2": "15" }],
83
+ [
84
+ "path",
85
+ {
86
+ "d": "M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59"
87
+ }
88
+ ],
89
+ ["path", { "d": "M21 15V5a2 2 0 0 0-2-2H9" }]
90
+ ]
91
+ };
92
+ Icon($$renderer, spread_props([props, { icon: iconData }]));
93
+ }
94
+ function Panel_right_close($$renderer, $$props) {
95
+ let { $$slots, $$events, ...props } = $$props;
96
+ const iconData = {
97
+ "name": "panel-right-close",
98
+ "size": 24,
99
+ "node": [
100
+ [
101
+ "rect",
102
+ { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }
103
+ ],
104
+ ["path", { "d": "M15 3v18" }],
105
+ ["path", { "d": "m8 9 3 3-3 3" }]
106
+ ]
107
+ };
108
+ Icon($$renderer, spread_props([props, { icon: iconData }]));
109
+ }
110
+ function Send($$renderer, $$props) {
111
+ let { $$slots, $$events, ...props } = $$props;
112
+ const iconData = {
113
+ "name": "send",
114
+ "size": 24,
115
+ "node": [
116
+ [
117
+ "path",
118
+ {
119
+ "d": "M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"
120
+ }
121
+ ],
122
+ ["path", { "d": "m21.854 2.147-10.94 10.939" }]
123
+ ]
124
+ };
125
+ Icon($$renderer, spread_props([props, { icon: iconData }]));
126
+ }
127
+ function Timer($$renderer, $$props) {
128
+ let { $$slots, $$events, ...props } = $$props;
129
+ const iconData = {
130
+ "name": "timer",
131
+ "size": 24,
132
+ "node": [
133
+ ["line", { "x1": "10", "x2": "14", "y1": "2", "y2": "2" }],
134
+ ["line", { "x1": "12", "x2": "15", "y1": "14", "y2": "11" }],
135
+ ["circle", { "cx": "12", "cy": "14", "r": "8" }]
136
+ ]
137
+ };
138
+ Icon($$renderer, spread_props([props, { icon: iconData }]));
139
+ }
140
+ function PreviewFeedback($$renderer, $$props) {
141
+ $$renderer.component(($$renderer2) => {
142
+ const id = props_id($$renderer2);
143
+ let { taskId, url, rows = 2, onsent } = $$props;
144
+ let text = "";
145
+ let sending = false;
146
+ let error = null;
147
+ let sent = null;
148
+ async function send() {
149
+ if (!text.trim() || sending) return;
150
+ sending = true;
151
+ error = null;
152
+ const r = await sendToInbox(feedbackNote(url, text), page.data.sessionToken, taskId);
153
+ sending = false;
154
+ if (!r.ok) {
155
+ error = r.error;
156
+ return;
157
+ }
158
+ sent = { at: (/* @__PURE__ */ new Date()).toISOString(), pending: !!r.pending };
159
+ text = "";
160
+ onsent?.();
161
+ }
162
+ function onkeydown(e) {
163
+ if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
164
+ e.preventDefault();
165
+ void send();
166
+ }
167
+ }
168
+ let $$settled = true;
169
+ let $$inner_renderer;
170
+ function $$render_inner($$renderer3) {
171
+ $$renderer3.push(`<form class="mt-3" data-preview-feedback=""><label class="text-xs font-medium text-muted-foreground"${attr("for", `feedback-${id}`)}>Feedback on this preview</label> `);
172
+ DictateTextarea($$renderer3, {
173
+ id: `feedback-${id}`,
174
+ onkeydown,
175
+ rows,
176
+ maxlength: 8e3,
177
+ placeholder: "What should change? It goes to the worker through Firstmate.",
178
+ class: "mt-1 min-h-14 text-sm",
179
+ get value() {
180
+ return text;
181
+ },
182
+ set value($$value) {
183
+ text = $$value;
184
+ $$settled = false;
185
+ }
186
+ });
187
+ $$renderer3.push(`<!----> <div class="mt-2 flex flex-wrap items-center gap-x-3 gap-y-1">`);
188
+ Button($$renderer3, {
189
+ type: "submit",
190
+ size: "sm",
191
+ disabled: !text.trim() || sending,
192
+ children: ($$renderer4) => {
193
+ Send($$renderer4, {});
194
+ $$renderer4.push(`<!---->${escape_html(sending ? "Sending…" : "Send feedback")}`);
195
+ },
196
+ $$slots: { default: true }
197
+ });
198
+ $$renderer3.push(`<!----> `);
199
+ if (error) {
200
+ $$renderer3.push(`<!--[0--><p class="text-xs text-danger" role="alert">${escape_html(error)}</p>`);
201
+ } else if (sent) {
202
+ $$renderer3.push(`<!--[1--><p class="text-xs text-muted-foreground" role="status" data-feedback-sent="">${escape_html(sent.pending ? `Saved at ${clock(sent.at)}; Wheelhouse is confirming Firstmate has it.` : `Sent at ${clock(sent.at)}. Firstmate passes it to the worker.`)}</p>`);
203
+ } else {
204
+ $$renderer3.push(`<!--[-1--><p class="text-xs text-muted-foreground">⌘/Ctrl+Enter sends; the mic dictates.</p>`);
205
+ }
206
+ $$renderer3.push(`<!--]--></div></form>`);
207
+ }
208
+ do {
209
+ $$settled = true;
210
+ $$inner_renderer = $$renderer2.copy();
211
+ $$render_inner($$inner_renderer);
212
+ } while (!$$settled);
213
+ $$renderer2.subsume($$inner_renderer);
214
+ });
215
+ }
216
+ function LivePreview($$renderer, $$props) {
217
+ $$renderer.component(($$renderer2) => {
218
+ let {
219
+ taskId,
220
+ compact = false,
221
+ fill = false,
222
+ feedback = true,
223
+ onfullscreen
224
+ } = $$props;
225
+ const url = derived(() => null);
226
+ $$renderer2.push(`<div${attr_class(`min-w-0 ${fill ? "flex h-full flex-col" : ""}`)}${attr("data-live-preview", "checking")}><div class="flex items-center gap-2 text-xs text-muted-foreground"><span class="min-w-0 flex-1 truncate font-mono"${attr("title", url() ?? void 0)}>${escape_html(url() ?? "Live preview")}</span> `);
227
+ {
228
+ $$renderer2.push("<!--[-1-->");
229
+ }
230
+ $$renderer2.push(`<!--]--> `);
231
+ {
232
+ $$renderer2.push("<!--[-1-->");
233
+ }
234
+ $$renderer2.push(`<!--]--></div> <div${attr_class(`relative mt-1.5 w-full overflow-hidden rounded-lg border bg-muted/40 ${compact ? "aspect-[16/10]" : fill ? "min-h-0 flex-1" : "h-40"}`)}>`);
235
+ {
236
+ $$renderer2.push(`<!--[-1--><div class="grid size-full place-items-center p-4 text-center text-muted-foreground"><div>`);
237
+ {
238
+ $$renderer2.push(`<!--[0--><p class="text-sm">Checking the preview…</p>`);
239
+ }
240
+ $$renderer2.push(`<!--]--></div></div>`);
241
+ }
242
+ $$renderer2.push(`<!--]--></div> `);
243
+ if (feedback && url()) {
244
+ $$renderer2.push("<!--[0-->");
245
+ PreviewFeedback($$renderer2, { taskId, url: url() });
246
+ } else {
247
+ $$renderer2.push("<!--[-1-->");
248
+ }
249
+ $$renderer2.push(`<!--]--></div>`);
250
+ });
251
+ }
252
+ function placeTaskSections(entries, stepKeys) {
253
+ const steps = new Set(stepKeys);
254
+ const afterStep = {};
255
+ const byOrder = [];
256
+ for (const e of entries) {
257
+ if (e.slot !== "task.section") continue;
258
+ if (e.step !== null && steps.has(e.step)) (afterStep[e.step] ??= []).push(e);
259
+ else byOrder.push(e);
260
+ }
261
+ return { afterStep, byOrder };
262
+ }
263
+ function ChecksTimeline($$renderer, $$props) {
264
+ $$renderer.component(($$renderer2) => {
265
+ let { pipeline, busy = false, prChecks = [] } = $$props;
266
+ const rows = derived(() => {
267
+ const out = [];
268
+ for (const s of pipeline.steps) {
269
+ const last = out.at(-1);
270
+ if (s.state === "upcoming") {
271
+ if (last?.kind === "later") last.labels.push(s.label);
272
+ else out.push({ kind: "later", labels: [s.label] });
273
+ } else out.push({ kind: "step", s });
274
+ }
275
+ return out;
276
+ });
277
+ const line = derived(() => checksLine(pipeline, live.now));
278
+ const ci = derived(() => ciChecksLine(prChecks));
279
+ const under = (s) => s.key === pipeline.step && pipeline.outcome === "running";
280
+ function took(s) {
281
+ if (under(s) && (s.state === "running" || s.state === "fixing")) {
282
+ const from = Date.parse(pipeline.startedAt ?? "");
283
+ if (!Number.isNaN(from)) return duration$1(live.now - from);
284
+ }
285
+ return s.durationMs != null && s.durationMs >= 1e3 ? duration$1(s.durationMs) : null;
286
+ }
287
+ function summary(s) {
288
+ const text = stepSummary(s, pipeline);
289
+ return s.key === "ci" && ci() ? `${text} · ${ci()}` : text;
290
+ }
291
+ $$renderer2.push(`<div data-checks-timeline=""><p class="tabular text-sm">${escape_html(line())}</p> <ol class="mt-3 space-y-0.5 text-sm"><!--[-->`);
292
+ const each_array = ensure_array_like(rows());
293
+ for (let i = 0, $$length = each_array.length; i < $$length; i++) {
294
+ let r = each_array[i];
295
+ if (r.kind === "step") {
296
+ $$renderer2.push("<!--[0-->");
297
+ const tone2 = segmentTone(r.s, pipeline);
298
+ $$renderer2.push(`<li class="grid grid-cols-[1.25rem_6.5rem_minmax(0,1fr)_auto] items-start gap-x-2 py-1"><span class="flex h-5 items-center">`);
299
+ if (tone2 === "done") {
300
+ $$renderer2.push("<!--[0-->");
301
+ Check($$renderer2, {
302
+ class: `size-4 ${r.s.key === "ci" ? "text-success" : "text-muted-foreground"}`,
303
+ "aria-label": "Done"
304
+ });
305
+ } else if (tone2 === "failed") {
306
+ $$renderer2.push("<!--[1-->");
307
+ X($$renderer2, { class: "size-4 text-danger", "aria-label": "Failed" });
308
+ } else if (tone2 === "waiting") {
309
+ $$renderer2.push("<!--[2-->");
310
+ Circle_pause($$renderer2, {
311
+ class: "size-4 text-warning",
312
+ "aria-label": "Waiting on Firstmate"
313
+ });
314
+ } else if (tone2 === "skipped") {
315
+ $$renderer2.push("<!--[3-->");
316
+ Minus($$renderer2, {
317
+ class: "size-4 text-muted-foreground",
318
+ "aria-label": "Skipped"
319
+ });
320
+ } else {
321
+ $$renderer2.push("<!--[-1-->");
322
+ Loader_circle($$renderer2, {
323
+ class: `size-4 text-foreground ${busy ? "motion-safe:animate-spin" : ""}`,
324
+ "aria-label": tone2 === "fixing" ? "Fixing" : "Under way"
325
+ });
326
+ }
327
+ $$renderer2.push(`<!--]--></span> <span${attr_class(`truncate leading-5 ${under(r.s) ? "font-medium" : ""}`)}>${escape_html(r.s.label)}</span> <span${attr_class(`leading-5 ${tone2 === "failed" ? "text-danger" : tone2 === "waiting" ? "text-warning" : "text-muted-foreground"}`)}>${escape_html(summary(r.s))}</span> <span class="tabular text-right text-xs leading-5 text-muted-foreground">${escape_html(took(r.s) ?? "")}</span></li>`);
328
+ } else {
329
+ $$renderer2.push(`<!--[-1--><li class="grid grid-cols-[1.25rem_minmax(0,1fr)] items-start gap-x-2 py-1 text-muted-foreground"><span class="flex h-5 items-center">`);
330
+ Circle_dashed($$renderer2, {
331
+ class: "size-4 text-muted-foreground/60",
332
+ "aria-hidden": "true"
333
+ });
334
+ $$renderer2.push(`<!----></span> <span class="leading-5">Still to come: ${escape_html(r.labels.join(", "))}</span></li>`);
335
+ }
336
+ $$renderer2.push(`<!--]-->`);
337
+ }
338
+ $$renderer2.push(`<!--]--></ol></div>`);
339
+ });
340
+ }
341
+ function DiffDialog($$renderer, $$props) {
342
+ $$renderer.component(($$renderer2) => {
343
+ let { taskId, file = null } = $$props;
344
+ $$renderer2.push(`<dialog class="m-auto h-[88vh] w-[min(94vw,1100px)] max-w-none overflow-hidden rounded-xl border bg-background p-0 text-foreground shadow-xl backdrop:bg-black/60"${attr("aria-label", file ? `Changes to ${file}` : "Changes")}>`);
345
+ if (file) {
346
+ $$renderer2.push(`<!--[0--><div class="flex h-full flex-col"><div class="flex items-center gap-3 border-b px-4 py-2.5 text-sm"><span class="min-w-0 flex-1 truncate font-mono text-xs"${attr("title", file)}>${escape_html(file)}</span> `);
347
+ {
348
+ $$renderer2.push("<!--[-1-->");
349
+ }
350
+ $$renderer2.push(`<!--]--> <span class="text-xs text-muted-foreground">read-only</span> <button type="button" class="rounded p-1 hover:bg-accent" aria-label="Close">`);
351
+ X($$renderer2, { class: "size-4" });
352
+ $$renderer2.push(`<!----></button></div> <div class="min-h-0 flex-1 overflow-auto">`);
353
+ {
354
+ $$renderer2.push(`<!--[1--><p class="p-4 text-sm text-muted-foreground">Reading the diff…</p>`);
355
+ }
356
+ $$renderer2.push(`<!--]--></div> `);
357
+ {
358
+ $$renderer2.push("<!--[-1-->");
359
+ }
360
+ $$renderer2.push(`<!--]--></div>`);
361
+ } else {
362
+ $$renderer2.push("<!--[-1-->");
363
+ }
364
+ $$renderer2.push(`<!--]--></dialog>`);
365
+ bind_props($$props, { file });
366
+ });
367
+ }
368
+ function OutputInspector($$renderer, $$props) {
369
+ $$renderer.component(($$renderer2) => {
370
+ let { task } = $$props;
371
+ let open = false;
372
+ let full = false;
373
+ let $$settled = true;
374
+ let $$inner_renderer;
375
+ function $$render_inner($$renderer3) {
376
+ $$renderer3.push(`<details class="group rounded-xl border"${attr("open", open, true)}><summary class="flex list-none items-center gap-2 px-4 py-3 text-sm [&amp;::-webkit-details-marker]:hidden">`);
377
+ Chevron_right($$renderer3, {
378
+ class: "size-4 text-muted-foreground transition-transform group-open:rotate-90",
379
+ "aria-hidden": "true"
380
+ });
381
+ $$renderer3.push(`<!----> <span class="font-medium">Raw terminal output</span> <span class="text-muted-foreground">read-only sample of the last 40 lines</span></summary> <div class="border-t p-4">`);
382
+ if (!task.outputAvailable) {
383
+ $$renderer3.push(`<!--[0--><p class="text-sm text-muted-foreground">Not available. ${escape_html(task.outputNote)}</p>`);
384
+ } else {
385
+ $$renderer3.push(`<!--[2--><p class="text-sm text-muted-foreground">Reading the worker’s terminal…</p>`);
386
+ }
387
+ $$renderer3.push(`<!--]--></div></details> `);
388
+ ConsoleFullscreen($$renderer3, {
389
+ task,
390
+ get open() {
391
+ return full;
392
+ },
393
+ set open($$value) {
394
+ full = $$value;
395
+ $$settled = false;
396
+ }
397
+ });
398
+ $$renderer3.push(`<!---->`);
399
+ }
400
+ do {
401
+ $$settled = true;
402
+ $$inner_renderer = $$renderer2.copy();
403
+ $$render_inner($$inner_renderer);
404
+ } while (!$$settled);
405
+ $$renderer2.subsume($$inner_renderer);
406
+ });
407
+ }
408
+ const DEFAULT_TAB = "stages";
409
+ function taskTabs(o) {
410
+ const counted = (n) => n ? { count: n } : {};
411
+ return [
412
+ { id: "stages", label: "Stages" },
413
+ ...o.preview ? [{ id: "preview", label: "Live preview" }] : [],
414
+ ...o.build ? [
415
+ { id: "talk", label: "Conversation", ...counted(o.build.talk) },
416
+ { id: "checks", label: "Checks" },
417
+ { id: "docs", label: "Docs", ...counted(o.build.docs) }
418
+ ] : [],
419
+ { id: "screenshots", label: "Screenshots", ...counted(o.shots) },
420
+ ...o.plugins.map((p) => ({ id: `plugin:${p.key}`, label: p.title })),
421
+ { id: "log", label: "Log" }
422
+ ];
423
+ }
424
+ const pickTab = (want, tabs) => want && tabs.some((t) => t.id === want) ? want : DEFAULT_TAB;
425
+ const openByDefault = (s) => s.state === "current";
426
+ const hasDetail = (s) => s.state === "done" || s.state === "current" || !!s.note;
427
+ const plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
428
+ function stepGist(s, task, ev) {
429
+ if (s.state === "skipped") return s.note;
430
+ if (s.state === "upcoming") return null;
431
+ const parts = [];
432
+ for (const id of s.evidence) {
433
+ if (id === "files" && ev?.files.available) {
434
+ const n = ev.files.value.total;
435
+ parts.push(n ? `${plural(n, "file")} changed` : "No changes yet");
436
+ } else if (id === "pr" && (ev?.pr.available || task.pr)) {
437
+ const pr = ev?.pr.available ? ev.pr.value : null;
438
+ const n = pr?.number ?? task.pr?.number ?? null;
439
+ const state = pr ? pr.draft ? "draft" : pr.state : null;
440
+ parts.push(`Pull request${n ? ` #${n}` : ""}${state ? ` ${state}` : ""}`);
441
+ } else if (id === "screenshots" && ev?.screenshots.available && ev.screenshots.value.length) {
442
+ parts.push(plural(ev.screenshots.value.length, "screenshot"));
443
+ } else if (id === "report" && ev?.report.available) {
444
+ parts.push("Report written");
445
+ } else if (id === "validation" && s.state === "done") {
446
+ parts.push("Checks passed");
447
+ }
448
+ }
449
+ return parts.length ? parts.join(" · ") : s.note;
450
+ }
451
+ const PREFIX = /^Review feedback on the live preview \([^)\n]*\):\n/;
452
+ const STATUS = {
453
+ sending: "Sending…",
454
+ uncertain: "Confirming Firstmate has it…",
455
+ "saved-unannounced": "Saved; Firstmate reads it at its next check",
456
+ delivered: "Sent to Firstmate",
457
+ failed: "Not delivered"
458
+ };
459
+ function previewThread(messages, taskId) {
460
+ return messages.filter((m) => m.taskId === taskId && PREFIX.test(m.text)).map((m) => ({
461
+ id: m.requestId,
462
+ text: m.text.replace(PREFIX, ""),
463
+ at: m.submittedAt,
464
+ status: m.delivery === "delivered" && m.acknowledged ? "Firstmate has it" : STATUS[m.delivery],
465
+ failed: m.delivery === "failed",
466
+ reply: m.reply?.body ?? null
467
+ }));
468
+ }
469
+ function PreviewStudio($$renderer, $$props) {
470
+ $$renderer.component(($$renderer2) => {
471
+ let { taskId, title, url, feedback = true } = $$props;
472
+ let panel = true;
473
+ let thread = [];
474
+ let threadError = null;
475
+ let list = null;
476
+ async function loadThread() {
477
+ try {
478
+ const r = await fetch("/api/firstmate/messages");
479
+ if (!r.ok) throw new Error(String(r.status));
480
+ const v = await r.json();
481
+ const next = previewThread(v.messages, taskId);
482
+ const grew = next.length > thread.length;
483
+ thread = next;
484
+ threadError = v.available ? null : v.reason;
485
+ if (grew) requestAnimationFrame(() => list?.scrollTo({ top: list.scrollHeight }));
486
+ } catch {
487
+ threadError = "Could not read what was sent; Wheelhouse will try again.";
488
+ }
489
+ }
490
+ $$renderer2.push(`<div class="fixed inset-0 z-50 flex flex-col bg-background outline-none" role="dialog" aria-modal="true"${attr("aria-label", `Live preview of ${stringify(title)}, full screen`)} tabindex="-1" data-preview-studio=""><div class="flex h-12 shrink-0 items-center gap-3 border-b px-3 sm:px-4"><p class="min-w-0 flex-1 truncate text-sm"><span class="font-medium">${escape_html(title)}</span> <span class="text-muted-foreground">· Live preview</span></p> `);
491
+ if (feedback) {
492
+ $$renderer2.push("<!--[0-->");
493
+ {
494
+ $$renderer2.push(`<!--[0--><button type="button" class="inline-flex items-center gap-1.5 rounded-md px-2 py-1 text-xs text-muted-foreground hover:bg-accent hover:text-foreground">`);
495
+ Panel_right_close($$renderer2, { class: "size-4", "aria-hidden": "true" });
496
+ $$renderer2.push(`<!---->Hide comments</button>`);
497
+ }
498
+ $$renderer2.push(`<!--]-->`);
499
+ } else {
500
+ $$renderer2.push("<!--[-1-->");
501
+ }
502
+ $$renderer2.push(`<!--]--> <button type="button" class="inline-flex items-center gap-1.5 rounded-md px-2 py-1 text-xs hover:bg-accent" aria-label="Close full screen (Esc)" title="Close (Esc)">`);
503
+ X($$renderer2, { class: "size-4", "aria-hidden": "true" });
504
+ $$renderer2.push(`<!---->Close</button></div> <div class="relative flex min-h-0 flex-1"><div class="min-w-0 flex-1 p-3">`);
505
+ LivePreview($$renderer2, { taskId, fill: true, feedback: false });
506
+ $$renderer2.push(`<!----></div> `);
507
+ if (feedback && panel) {
508
+ $$renderer2.push(`<!--[0--><aside class="flex min-h-0 w-[22rem] shrink-0 flex-col border-l bg-panel xl:w-96" aria-label="Feedback on this preview"><div class="border-b px-4 py-3"><h2 class="flex items-center gap-2 text-sm font-medium">`);
509
+ Message_square($$renderer2, { class: "size-4 text-muted-foreground", "aria-hidden": "true" });
510
+ $$renderer2.push(`<!---->Feedback</h2> <p class="mt-0.5 text-xs text-muted-foreground">Goes to the worker through Firstmate.</p></div> <ol class="no-scrollbar min-h-0 flex-1 space-y-4 overflow-y-auto px-4 py-4" aria-label="Sent from this preview" data-preview-thread="">`);
511
+ const each_array = ensure_array_like(thread);
512
+ if (each_array.length !== 0) {
513
+ $$renderer2.push("<!--[-->");
514
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
515
+ let c = each_array[$$index];
516
+ $$renderer2.push(`<li><p class="text-sm leading-relaxed whitespace-pre-line">${escape_html(c.text)}</p> <p${attr_class(`mt-1 text-xs ${c.failed ? "text-danger" : "text-muted-foreground"}`)}>${escape_html(clock(c.at))} · ${escape_html(c.status)}</p> `);
517
+ if (c.reply) {
518
+ $$renderer2.push(`<!--[0--><p class="mt-2 rounded-lg bg-muted px-3 py-2 text-sm leading-relaxed whitespace-pre-line"><span class="font-medium">Firstmate:</span> ${escape_html(c.reply)}</p>`);
519
+ } else {
520
+ $$renderer2.push("<!--[-1-->");
521
+ }
522
+ $$renderer2.push(`<!--]--></li>`);
523
+ }
524
+ } else {
525
+ $$renderer2.push(`<!--[!--><li class="pt-6 text-sm text-muted-foreground">Nothing sent from this preview yet.<br/>Say what should change, as you look.</li>`);
526
+ }
527
+ $$renderer2.push(`<!--]--> `);
528
+ if (threadError) {
529
+ $$renderer2.push(`<!--[0--><li class="text-xs text-warning">${escape_html(threadError)}</li>`);
530
+ } else {
531
+ $$renderer2.push("<!--[-1-->");
532
+ }
533
+ $$renderer2.push(`<!--]--></ol> <div class="border-t px-4 pt-1 pb-4">`);
534
+ PreviewFeedback($$renderer2, { taskId, url, rows: 3, onsent: loadThread });
535
+ $$renderer2.push(`<!----></div></aside>`);
536
+ } else if (feedback) {
537
+ $$renderer2.push(`<!--[1--><button type="button" class="absolute right-5 bottom-5 inline-flex items-center gap-2 rounded-full border bg-background px-4 py-2 text-sm font-medium shadow-lg hover:bg-accent">`);
538
+ Message_square($$renderer2, { class: "size-4", "aria-hidden": "true" });
539
+ $$renderer2.push(`<!---->Comments${escape_html(thread.length ? ` (${thread.length})` : "")}</button>`);
540
+ } else {
541
+ $$renderer2.push("<!--[-1-->");
542
+ }
543
+ $$renderer2.push(`<!--]--></div></div>`);
544
+ });
545
+ }
546
+ function RawDetails($$renderer, $$props) {
547
+ $$renderer.component(($$renderer2) => {
548
+ let { raw, plain = null } = $$props;
549
+ const show = derived(() => !!raw?.trim() && raw.trim() !== plain?.trim());
550
+ if (show()) {
551
+ $$renderer2.push(`<!--[0--><details class="group mt-1 text-xs text-muted-foreground"><summary class="inline select-none hover:text-foreground">details</summary> <p class="mt-1 font-mono break-words whitespace-pre-wrap">${escape_html(raw)}</p></details>`);
552
+ } else {
553
+ $$renderer2.push("<!--[-1-->");
554
+ }
555
+ $$renderer2.push(`<!--]-->`);
556
+ });
557
+ }
558
+ function ReviewPanel($$renderer, $$props) {
559
+ $$renderer.component(($$renderer2) => {
560
+ let { task, shots } = $$props;
561
+ const rv = derived(() => reviewView(task, shots));
562
+ let enlarged = null;
563
+ let $$settled = true;
564
+ let $$inner_renderer;
565
+ function $$render_inner($$renderer3) {
566
+ $$renderer3.push(`<section class="rounded-2xl border border-sea/40 p-3" aria-labelledby="review-evidence"><h2 id="review-evidence" class="px-1 pt-1 text-sm font-medium text-sea">Review evidence</h2> `);
567
+ if (rv().shots.length) {
568
+ $$renderer3.push(`<!--[0--><button type="button" class="mt-3 block w-full cursor-zoom-in"${attr("aria-label", `Enlarge ${stringify(rv().shots[0].name)}`)}><img${attr("src", rv().shots[0].url)}${attr("alt", rv().shots[0].name)} class="aspect-[16/10] w-full rounded-xl border object-cover object-top"/></button> `);
569
+ if (rv().shots.length > 1) {
570
+ $$renderer3.push(`<!--[0--><div class="mt-3 flex flex-wrap gap-2"><!--[-->`);
571
+ const each_array = ensure_array_like(rv().shots.slice(1));
572
+ for (let i = 0, $$length = each_array.length; i < $$length; i++) {
573
+ let s = each_array[i];
574
+ $$renderer3.push(`<button type="button" class="w-20 shrink-0 cursor-zoom-in"${attr("aria-label", `Enlarge ${stringify(s.name)}`)}><img${attr("src", s.url)}${attr("alt", s.name)} loading="lazy" class="aspect-[16/10] w-full rounded-md border object-cover object-top"/></button>`);
575
+ }
576
+ $$renderer3.push(`<!--]--></div>`);
577
+ } else {
578
+ $$renderer3.push("<!--[-1-->");
579
+ }
580
+ $$renderer3.push(`<!--]--> <p class="mt-2 px-1 text-xs text-muted-foreground" data-review="screenshots">${escape_html(rv().shotsText)}; select one to enlarge.</p>`);
581
+ } else {
582
+ $$renderer3.push(`<!--[-1--><div class="mt-3 grid aspect-[16/10] w-full place-items-center rounded-xl border border-dashed bg-muted/40 text-center" data-review="screenshots"><div class="text-muted-foreground">`);
583
+ Image_off($$renderer3, { class: "mx-auto size-6", "aria-hidden": "true" });
584
+ $$renderer3.push(`<!----> <p class="mt-2 text-sm font-medium">${escape_html(rv().shotsText)}</p> <p class="mt-1 text-xs">The worker has not saved any screenshots for this task.</p></div></div>`);
585
+ }
586
+ $$renderer3.push(`<!--]--> <div class="mt-3 flex flex-wrap items-center gap-2 px-1 pb-1">`);
587
+ if (rv().preview) {
588
+ $$renderer3.push("<!--[0-->");
589
+ Button($$renderer3, {
590
+ href: rv().preview.url,
591
+ target: "_blank",
592
+ rel: "noreferrer",
593
+ children: ($$renderer4) => {
594
+ $$renderer4.push(`<!---->Open preview`);
595
+ External_link($$renderer4, {});
596
+ $$renderer4.push(`<!---->`);
597
+ },
598
+ $$slots: { default: true }
599
+ });
600
+ } else {
601
+ $$renderer3.push(`<!--[-1--><span class="text-sm text-muted-foreground" data-review="preview">${escape_html(rv().previewText)}</span>`);
602
+ }
603
+ $$renderer3.push(`<!--]--> `);
604
+ if (rv().pr) {
605
+ $$renderer3.push("<!--[0-->");
606
+ Button($$renderer3, {
607
+ variant: rv().preview ? "outline" : "default",
608
+ href: rv().pr.url,
609
+ target: "_blank",
610
+ rel: "noreferrer",
611
+ children: ($$renderer4) => {
612
+ $$renderer4.push(`<!---->Review ${escape_html(rv().pr.label)}`);
613
+ External_link($$renderer4, {});
614
+ $$renderer4.push(`<!---->`);
615
+ },
616
+ $$slots: { default: true }
617
+ });
618
+ $$renderer3.push(`<!----> `);
619
+ Button($$renderer3, {
620
+ variant: "outline",
621
+ href: `/tasks/${stringify(encodeURIComponent(task.id))}/review`,
622
+ children: ($$renderer4) => {
623
+ Compass($$renderer4, {});
624
+ $$renderer4.push(`<!---->Guided review`);
625
+ },
626
+ $$slots: { default: true }
627
+ });
628
+ $$renderer3.push(`<!---->`);
629
+ } else {
630
+ $$renderer3.push(`<!--[-1--><span class="text-sm text-muted-foreground" data-review="pr">${escape_html(rv().prText)}</span>`);
631
+ }
632
+ $$renderer3.push(`<!--]--> `);
633
+ if (rv().preview) {
634
+ $$renderer3.push(`<!--[0--><a${attr("href", rv().preview.url)} target="_blank" rel="noreferrer" class="ml-auto truncate font-mono text-xs text-muted-foreground hover:underline">${escape_html(rv().preview.url)}</a>`);
635
+ } else {
636
+ $$renderer3.push("<!--[-1-->");
637
+ }
638
+ $$renderer3.push(`<!--]--></div></section> `);
639
+ Lightbox($$renderer3, {
640
+ shots: rv().shots,
641
+ get index() {
642
+ return enlarged;
643
+ },
644
+ set index($$value) {
645
+ enlarged = $$value;
646
+ $$settled = false;
647
+ }
648
+ });
649
+ $$renderer3.push(`<!---->`);
650
+ }
651
+ do {
652
+ $$settled = true;
653
+ $$inner_renderer = $$renderer2.copy();
654
+ $$render_inner($$inner_renderer);
655
+ } while (!$$settled);
656
+ $$renderer2.subsume($$inner_renderer);
657
+ });
658
+ }
659
+ function stateIcon($$renderer, s) {
660
+ if (s.state === "done") {
661
+ $$renderer.push("<!--[0-->");
662
+ Check($$renderer, { class: "size-4 shrink-0 text-success", "aria-label": "Done" });
663
+ } else if (s.state === "failed") {
664
+ $$renderer.push("<!--[1-->");
665
+ X($$renderer, { class: "size-4 shrink-0 text-danger", "aria-label": "Failed" });
666
+ } else if (s.state === "running" || s.state === "fixing") {
667
+ $$renderer.push("<!--[2-->");
668
+ Loader_circle($$renderer, {
669
+ class: "size-4 shrink-0 animate-spin text-muted-foreground",
670
+ "aria-label": s.state === "fixing" ? "Fixing" : "Running"
671
+ });
672
+ } else if (s.state === "waiting") {
673
+ $$renderer.push("<!--[3-->");
674
+ Circle_pause($$renderer, {
675
+ class: "size-4 shrink-0 text-warning",
676
+ "aria-label": "Waiting for a decision"
677
+ });
678
+ } else if (s.state === "skipped") {
679
+ $$renderer.push("<!--[4-->");
680
+ Minus($$renderer, {
681
+ class: "size-4 shrink-0 text-muted-foreground",
682
+ "aria-label": "Skipped"
683
+ });
684
+ } else {
685
+ $$renderer.push("<!--[-1-->");
686
+ Circle_dashed($$renderer, {
687
+ class: "size-4 shrink-0 text-muted-foreground",
688
+ "aria-label": "Not started"
689
+ });
690
+ }
691
+ $$renderer.push(`<!--]-->`);
692
+ }
693
+ function ChecksReport($$renderer, $$props) {
694
+ $$renderer.component(($$renderer2) => {
695
+ let { checks, taskId } = $$props;
696
+ const hasMore = (s) => s.notes.length > 0 || !!s.tests?.failures.length || !!s.tests?.scenarios.length || !!s.docs?.files.length || !!s.docs?.summary.length;
697
+ let toggled = {};
698
+ const isOpen = (s) => toggled[s.key] ?? (s.state === "failed" || !!s.tests?.failed || s.tests?.scenarios.some((x) => x.result === "fail"));
699
+ const docHref = (p) => `/tasks/${encodeURIComponent(taskId)}/doc?path=${encodeURIComponent(p)}`;
700
+ const RESULT = {
701
+ pass: "Passed",
702
+ fail: "Failed",
703
+ untested: "Not tested",
704
+ other: "Other"
705
+ };
706
+ function testName(full) {
707
+ const parts = full.split(" › ");
708
+ const last = parts.pop() ?? full;
709
+ return {
710
+ title: last.charAt(0).toUpperCase() + last.slice(1),
711
+ where: parts.length ? parts.join(" › ") : null
712
+ };
713
+ }
714
+ $$renderer2.push(`<section aria-labelledby="checks-report" class="max-w-4xl"><h2 id="checks-report" class="sr-only">What each check found</h2> `);
715
+ if (!checks.available) {
716
+ $$renderer2.push(`<!--[0--><div class="rounded-xl border border-dashed p-6 text-sm text-muted-foreground"><p class="font-medium text-foreground">No checks to show yet</p> <p class="mt-1">${escape_html(checks.reason)}</p></div>`);
717
+ } else {
718
+ $$renderer2.push("<!--[-1-->");
719
+ const v = checks.value;
720
+ $$renderer2.push(`<p class="text-sm text-muted-foreground">The automated review and tests${escape_html(v.startedAt ? `, started ${clock(v.startedAt)}` : "")}${escape_html(v.runs > 1 ? ` (the latest of ${v.runs} runs)` : "")}${escape_html(v.outcome === "passed" ? ": everything passed." : v.outcome === "failed" ? ": it failed." : v.outcome === "cancelled" ? ": it was cancelled." : ".")}</p> <ol class="mt-4 divide-y divide-hair rounded-lg border bg-card"><!--[-->`);
721
+ const each_array = ensure_array_like(v.steps);
722
+ for (let $$index_5 = 0, $$length = each_array.length; $$index_5 < $$length; $$index_5++) {
723
+ let s = each_array[$$index_5];
724
+ const more = hasMore(s);
725
+ const open = more && isOpen(s);
726
+ $$renderer2.push(`<li${attr("data-check-step", s.key)}><button type="button"${attr_class(`flex w-full items-start gap-3 px-4 py-3 text-left disabled:cursor-default ${more ? "hover:bg-accent/40" : ""}`)}${attr("disabled", !more, true)}${attr("aria-expanded", more ? open : void 0)}${attr("aria-controls", more ? `check-${s.key}` : void 0)}><span class="mt-0.5">`);
727
+ stateIcon($$renderer2, s);
728
+ $$renderer2.push(`<!----></span> <span class="min-w-0 flex-1"><span class="font-medium">${escape_html(s.label)}</span> <span${attr_class(`block text-sm ${s.state === "failed" || s.tests?.failed || s.tests?.scenarios.some((x) => x.result === "fail") ? "text-danger" : "text-muted-foreground"}`)}>${escape_html(s.summary)}</span></span> `);
729
+ if (s.durationMs) {
730
+ $$renderer2.push(`<!--[0--><span class="tabular shrink-0 pt-0.5 text-xs text-muted-foreground">${escape_html(duration(Math.round(s.durationMs / 1e3)))}</span>`);
731
+ } else {
732
+ $$renderer2.push("<!--[-1-->");
733
+ }
734
+ $$renderer2.push(`<!--]--> `);
735
+ if (more) {
736
+ $$renderer2.push("<!--[0-->");
737
+ Chevron_right($$renderer2, {
738
+ class: `mt-0.5 size-4 shrink-0 text-muted-foreground transition-transform ${open ? "rotate-90" : ""}`,
739
+ "aria-hidden": "true"
740
+ });
741
+ } else {
742
+ $$renderer2.push("<!--[-1-->");
743
+ }
744
+ $$renderer2.push(`<!--]--></button> `);
745
+ if (open) {
746
+ $$renderer2.push(`<!--[0--><div${attr("id", `check-${stringify(s.key)}`)} class="space-y-4 px-4 pb-4 pl-11 text-sm">`);
747
+ if (s.tests) {
748
+ $$renderer2.push("<!--[0-->");
749
+ const t = s.tests;
750
+ if (t.passed !== null || t.failed !== null) {
751
+ $$renderer2.push(`<!--[0--><p class="tabular flex flex-wrap gap-x-4"><span><span class="font-medium text-success">${escape_html(t.passed ?? 0)}</span> passed</span> <span><span${attr_class(`font-medium ${t.failed ? "text-danger" : ""}`)}>${escape_html(t.failed ?? 0)}</span> failed</span> `);
752
+ if (t.skipped) {
753
+ $$renderer2.push(`<!--[0--><span><span class="font-medium">${escape_html(t.skipped)}</span> skipped</span>`);
754
+ } else {
755
+ $$renderer2.push("<!--[-1-->");
756
+ }
757
+ $$renderer2.push(`<!--]--></p>`);
758
+ } else {
759
+ $$renderer2.push("<!--[-1-->");
760
+ }
761
+ $$renderer2.push(`<!--]--> `);
762
+ if (t.failures.length) {
763
+ $$renderer2.push(`<!--[0--><ul class="space-y-2"><!--[-->`);
764
+ const each_array_1 = ensure_array_like(t.failures);
765
+ for (let n = 0, $$length2 = each_array_1.length; n < $$length2; n++) {
766
+ let f = each_array_1[n];
767
+ const name = testName(f.name);
768
+ $$renderer2.push(`<li><details class="rounded-md border border-danger/30 bg-danger/5"${attr("open", n === 0, true)}><summary class="flex cursor-pointer items-start gap-2 px-3 py-2">`);
769
+ X($$renderer2, {
770
+ class: "mt-0.5 size-4 shrink-0 text-danger",
771
+ "aria-hidden": "true"
772
+ });
773
+ $$renderer2.push(`<!----> <span class="min-w-0 break-words">${escape_html(name.title)}`);
774
+ if (name.where) {
775
+ $$renderer2.push(`<!--[0--><span class="block text-xs text-muted-foreground">${escape_html(name.where)}</span>`);
776
+ } else {
777
+ $$renderer2.push("<!--[-1-->");
778
+ }
779
+ $$renderer2.push(`<!--]--></span></summary> `);
780
+ if (f.output) {
781
+ $$renderer2.push(`<!--[0--><pre class="overflow-x-auto border-t border-danger/20 px-3 py-2 font-mono text-xs whitespace-pre">${escape_html(f.output)}</pre>`);
782
+ } else {
783
+ $$renderer2.push("<!--[-1-->");
784
+ }
785
+ $$renderer2.push(`<!--]--></details></li>`);
786
+ }
787
+ $$renderer2.push(`<!--]--></ul>`);
788
+ } else {
789
+ $$renderer2.push("<!--[-1-->");
790
+ }
791
+ $$renderer2.push(`<!--]--> `);
792
+ if (t.scenarios.length) {
793
+ $$renderer2.push(`<!--[0--><ul class="divide-y divide-hair rounded-md border border-hair"><!--[-->`);
794
+ const each_array_2 = ensure_array_like(t.scenarios);
795
+ for (let i = 0, $$length2 = each_array_2.length; i < $$length2; i++) {
796
+ let sc = each_array_2[i];
797
+ $$renderer2.push(`<li class="flex items-start gap-3 px-3 py-2">`);
798
+ if (sc.result === "pass") {
799
+ $$renderer2.push("<!--[0-->");
800
+ Check($$renderer2, {
801
+ class: "mt-0.5 size-4 shrink-0 text-success",
802
+ "aria-hidden": "true"
803
+ });
804
+ } else if (sc.result === "fail") {
805
+ $$renderer2.push("<!--[1-->");
806
+ X($$renderer2, {
807
+ class: "mt-0.5 size-4 shrink-0 text-danger",
808
+ "aria-hidden": "true"
809
+ });
810
+ } else {
811
+ $$renderer2.push("<!--[-1-->");
812
+ Minus($$renderer2, {
813
+ class: "mt-0.5 size-4 shrink-0 text-muted-foreground",
814
+ "aria-hidden": "true"
815
+ });
816
+ }
817
+ $$renderer2.push(`<!--]--> <span class="min-w-0 flex-1"><span class="sr-only">${escape_html(RESULT[sc.result])}:</span>${escape_html(sc.name)} `);
818
+ if (sc.detail && sc.result !== "pass") {
819
+ $$renderer2.push(`<!--[0--><span class="mt-0.5 block text-xs text-muted-foreground">${escape_html(sc.detail)}</span>`);
820
+ } else {
821
+ $$renderer2.push("<!--[-1-->");
822
+ }
823
+ $$renderer2.push(`<!--]--></span></li>`);
824
+ }
825
+ $$renderer2.push(`<!--]--></ul>`);
826
+ } else {
827
+ $$renderer2.push("<!--[-1-->");
828
+ }
829
+ $$renderer2.push(`<!--]--> `);
830
+ if (v.testingNote) {
831
+ $$renderer2.push(`<!--[0--><p class="leading-relaxed text-muted-foreground">${escape_html(v.testingNote)}</p>`);
832
+ } else {
833
+ $$renderer2.push("<!--[-1-->");
834
+ }
835
+ $$renderer2.push(`<!--]--> <p class="text-xs text-muted-foreground">From ${escape_html(t.basis)}.</p>`);
836
+ } else {
837
+ $$renderer2.push("<!--[-1-->");
838
+ }
839
+ $$renderer2.push(`<!--]--> `);
840
+ if (s.docs) {
841
+ $$renderer2.push("<!--[0-->");
842
+ if (s.docs.summary.length) {
843
+ $$renderer2.push(`<!--[0--><ul class="list-disc space-y-1 pl-5"><!--[-->`);
844
+ const each_array_3 = ensure_array_like(s.docs.summary);
845
+ for (let i = 0, $$length2 = each_array_3.length; i < $$length2; i++) {
846
+ let line = each_array_3[i];
847
+ $$renderer2.push(`<li>${escape_html(line)}</li>`);
848
+ }
849
+ $$renderer2.push(`<!--]--></ul>`);
850
+ } else {
851
+ $$renderer2.push("<!--[-1-->");
852
+ }
853
+ $$renderer2.push(`<!--]--> `);
854
+ if (s.docs.files.length) {
855
+ $$renderer2.push(`<!--[0--><ul class="flex flex-wrap gap-2"><!--[-->`);
856
+ const each_array_4 = ensure_array_like(s.docs.files);
857
+ for (let $$index_3 = 0, $$length2 = each_array_4.length; $$index_3 < $$length2; $$index_3++) {
858
+ let d = each_array_4[$$index_3];
859
+ $$renderer2.push(`<li><a${attr("href", docHref(d.path))} class="inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 hover:bg-accent/60">`);
860
+ File_text($$renderer2, {
861
+ class: "size-3.5 text-muted-foreground",
862
+ "aria-hidden": "true"
863
+ });
864
+ $$renderer2.push(`<!---->${escape_html(d.title)}</a></li>`);
865
+ }
866
+ $$renderer2.push(`<!--]--></ul>`);
867
+ } else {
868
+ $$renderer2.push("<!--[-1-->");
869
+ }
870
+ $$renderer2.push(`<!--]-->`);
871
+ } else {
872
+ $$renderer2.push("<!--[-1-->");
873
+ }
874
+ $$renderer2.push(`<!--]--> `);
875
+ if (s.notes.length) {
876
+ $$renderer2.push(`<!--[0--><div><p class="text-xs text-muted-foreground">${escape_html(s.key === "test" || s.key === "document" ? "In its own words" : "Along the way")}</p> <ul class="mt-1 list-disc space-y-1 pl-5 text-muted-foreground"><!--[-->`);
877
+ const each_array_5 = ensure_array_like(s.notes);
878
+ for (let i = 0, $$length2 = each_array_5.length; i < $$length2; i++) {
879
+ let n = each_array_5[i];
880
+ $$renderer2.push(`<li>${escape_html(n)}</li>`);
881
+ }
882
+ $$renderer2.push(`<!--]--></ul></div>`);
883
+ } else {
884
+ $$renderer2.push("<!--[-1-->");
885
+ }
886
+ $$renderer2.push(`<!--]--></div>`);
887
+ } else {
888
+ $$renderer2.push("<!--[-1-->");
889
+ }
890
+ $$renderer2.push(`<!--]--></li>`);
891
+ }
892
+ $$renderer2.push(`<!--]--></ol> <p class="mt-2 text-xs text-muted-foreground">From ${escape_html(checks.source)}.</p>`);
893
+ }
894
+ $$renderer2.push(`<!--]--></section>`);
895
+ });
896
+ }
897
+ function ConversationPanel($$renderer, $$props) {
898
+ $$renderer.component(($$renderer2) => {
899
+ let { talk, now } = $$props;
900
+ const LONG = 280;
901
+ let opened = {};
902
+ function lead(e) {
903
+ switch (e.kind) {
904
+ case "question":
905
+ return "The worker asked Firstmate";
906
+ case "blocked":
907
+ return "The worker asked Firstmate for help";
908
+ case "review":
909
+ return "The automated review asked Firstmate";
910
+ case "steer":
911
+ return "Firstmate told the worker";
912
+ case "captain":
913
+ return e.to === "worker" ? "Your feedback reached the worker" : "You wrote to Firstmate";
914
+ }
915
+ }
916
+ const tone2 = {
917
+ open: "bg-warning/10 text-warning",
918
+ answered: "bg-success/10 text-success",
919
+ cleared: "bg-muted text-muted-foreground",
920
+ read: "bg-muted text-muted-foreground",
921
+ unread: "bg-sea/10 text-sea",
922
+ sent: "bg-muted text-muted-foreground"
923
+ };
924
+ function longText($$renderer3, id, text) {
925
+ const long = text.length > LONG;
926
+ $$renderer3.push(`<p${attr_class(`mt-1 text-sm leading-relaxed whitespace-pre-line ${long && !opened[id] ? "line-clamp-4" : ""}`)}>${escape_html(text)}</p> `);
927
+ if (long) {
928
+ $$renderer3.push(`<!--[0--><button type="button" class="mt-1 text-xs text-muted-foreground hover:text-foreground hover:underline"${attr("aria-expanded", !!opened[id])}>${escape_html(opened[id] ? "Show less" : "Show all")}</button>`);
929
+ } else {
930
+ $$renderer3.push("<!--[-1-->");
931
+ }
932
+ $$renderer3.push(`<!--]-->`);
933
+ }
934
+ $$renderer2.push(`<section aria-labelledby="conversation" class="max-w-4xl"><h2 id="conversation" class="sr-only">Conversation</h2> `);
935
+ if (!talk.available) {
936
+ $$renderer2.push(`<!--[0--><p class="text-sm text-muted-foreground">${escape_html(talk.reason)}</p>`);
937
+ } else if (!talk.value.length) {
938
+ $$renderer2.push(`<!--[1--><div class="rounded-xl border border-dashed p-6 text-muted-foreground">`);
939
+ Messages_square($$renderer2, { class: "size-5", "aria-hidden": "true" });
940
+ $$renderer2.push(`<!----> <p class="mt-2 text-sm font-medium text-foreground">Nothing has been asked yet</p> <p class="mt-1 text-sm">When the worker asks Firstmate something, or Firstmate steers the worker, it shows here.</p></div>`);
941
+ } else {
942
+ $$renderer2.push(`<!--[-1--><p class="text-sm text-muted-foreground">Between the worker and Firstmate, oldest first. Firstmate answers for you while you are away.</p> <ol class="mt-4 divide-y divide-hair rounded-lg border bg-card"><!--[-->`);
943
+ const each_array = ensure_array_like(talk.value);
944
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
945
+ let e = each_array[$$index];
946
+ $$renderer2.push(`<li class="grid gap-x-4 px-4 py-4 sm:grid-cols-[4.5rem_minmax(0,1fr)]"${attr("data-talk", e.kind)}><time class="tabular pt-0.5 text-xs text-muted-foreground"${attr("datetime", e.at)}${attr("title", ago(e.at, now))}>${escape_html(clock(e.at))}</time> <div class="min-w-0"><div class="flex flex-wrap items-baseline justify-between gap-x-3 gap-y-1"><p class="text-xs tracking-wide text-muted-foreground">${escape_html(lead(e))}</p> <span${attr_class(`rounded-full px-2 py-0.5 text-xs font-medium ${stringify(tone2[e.outcome.state])}`)}>${escape_html(e.outcome.label)}</span></div> <p class="mt-1 font-medium">${escape_html(e.title)}</p> `);
947
+ if (e.body) {
948
+ $$renderer2.push("<!--[0-->");
949
+ longText($$renderer2, `${e.id} body`, e.body);
950
+ } else {
951
+ $$renderer2.push("<!--[-1-->");
952
+ }
953
+ $$renderer2.push(`<!--]--> `);
954
+ if (e.questions.length) {
955
+ $$renderer2.push(`<!--[0--><div class="mt-3">`);
956
+ QuestionList($$renderer2, { questions: e.questions });
957
+ $$renderer2.push(`<!----></div>`);
958
+ } else {
959
+ $$renderer2.push("<!--[-1-->");
960
+ }
961
+ $$renderer2.push(`<!--]--> `);
962
+ if (e.reply) {
963
+ $$renderer2.push(`<!--[0--><div class="mt-3 border-l-2 border-brass/60 pl-3"><p class="text-xs text-muted-foreground">${escape_html(PARTY_LABEL[e.reply.from])}
964
+ ${escape_html(e.reply.from === "worker" ? "noted" : "answered")}${escape_html(e.reply.at ? ` · ${clock(e.reply.at)}` : "")}</p> `);
965
+ longText($$renderer2, `${e.id} reply`, e.reply.text);
966
+ $$renderer2.push(`<!----></div>`);
967
+ } else {
968
+ $$renderer2.push("<!--[-1-->");
969
+ }
970
+ $$renderer2.push(`<!--]--></div></li>`);
971
+ }
972
+ $$renderer2.push(`<!--]--></ol> <p class="mt-2 text-xs text-muted-foreground">From ${escape_html(talk.source)}.</p>`);
973
+ }
974
+ $$renderer2.push(`<!--]--></section>`);
975
+ });
976
+ }
977
+ function DocsPanel($$renderer, $$props) {
978
+ $$renderer.component(($$renderer2) => {
979
+ let { docs, taskId } = $$props;
980
+ const href = (d) => `/tasks/${encodeURIComponent(taskId)}/doc?path=${encodeURIComponent(d.path)}`;
981
+ const groups = derived(() => docs.available ? [
982
+ {
983
+ label: "Decision records",
984
+ items: docs.value.filter((d) => d.kind === "decision")
985
+ },
986
+ {
987
+ label: "Docs",
988
+ items: docs.value.filter((d) => d.kind !== "decision")
989
+ }
990
+ ].filter((g) => g.items.length) : []);
991
+ const how = (d) => {
992
+ if (!d.changed) return "Read by the worker";
993
+ if (d.additions === null) return "Changed in this task";
994
+ if (!d.deletions) return `${d.additions} ${d.additions === 1 ? "line" : "lines"} added`;
995
+ return `${d.additions} added, ${d.deletions} removed`;
996
+ };
997
+ $$renderer2.push(`<section aria-labelledby="task-docs" class="max-w-4xl"><h2 id="task-docs" class="sr-only">Docs and decisions</h2> `);
998
+ if (!docs.available) {
999
+ $$renderer2.push(`<!--[0--><p class="text-sm text-muted-foreground">${escape_html(docs.reason)}</p>`);
1000
+ } else if (!docs.value.length) {
1001
+ $$renderer2.push(`<!--[1--><div class="rounded-xl border border-dashed p-6 text-muted-foreground">`);
1002
+ Book_open($$renderer2, { class: "size-5", "aria-hidden": "true" });
1003
+ $$renderer2.push(`<!----> <p class="mt-2 text-sm font-medium text-foreground">No docs touched yet</p> <p class="mt-1 text-sm">Decision records and docs the worker reads or changes for this task show here.</p></div>`);
1004
+ } else {
1005
+ $$renderer2.push(`<!--[-1--><p class="text-sm text-muted-foreground">The decision records and docs this task’s work read or changed. Open one to read it here.</p> <!--[-->`);
1006
+ const each_array = ensure_array_like(groups());
1007
+ for (let $$index_1 = 0, $$length = each_array.length; $$index_1 < $$length; $$index_1++) {
1008
+ let g = each_array[$$index_1];
1009
+ $$renderer2.push(`<h3 class="section-label mt-6">${escape_html(g.label)}</h3> <ul class="mt-3 divide-y divide-hair rounded-lg border bg-card"><!--[-->`);
1010
+ const each_array_1 = ensure_array_like(g.items);
1011
+ for (let $$index = 0, $$length2 = each_array_1.length; $$index < $$length2; $$index++) {
1012
+ let d = each_array_1[$$index];
1013
+ $$renderer2.push(`<li class="flex items-start gap-3 px-4 py-3"${attr("data-doc", d.kind)}>`);
1014
+ if (d.kind === "decision") {
1015
+ $$renderer2.push("<!--[0-->");
1016
+ Scale($$renderer2, {
1017
+ class: "mt-0.5 size-4 shrink-0 text-muted-foreground",
1018
+ "aria-hidden": "true"
1019
+ });
1020
+ } else {
1021
+ $$renderer2.push("<!--[-1-->");
1022
+ File_text($$renderer2, {
1023
+ class: "mt-0.5 size-4 shrink-0 text-muted-foreground",
1024
+ "aria-hidden": "true"
1025
+ });
1026
+ }
1027
+ $$renderer2.push(`<!--]--> <div class="min-w-0 flex-1"><a${attr("href", href(d))} class="font-medium hover:underline">${escape_html(d.title)}</a> <p class="mt-0.5 text-xs text-muted-foreground">${escape_html(DOC_KIND_LABEL[d.kind])}${escape_html(d.kind === "readme" ? "" : ` · ${d.name}`)} · <span${attr_class(clsx(d.changed ? "text-foreground/80" : ""))}>${escape_html(how(d))}</span></p></div> `);
1028
+ if (d.github) {
1029
+ $$renderer2.push(`<!--[0--><a${attr("href", d.github)} target="_blank" rel="noreferrer" class="inline-flex shrink-0 items-center gap-1 text-xs text-sea hover:underline"${attr("aria-label", `Open ${stringify(d.title)} on GitHub`)}>GitHub`);
1030
+ External_link($$renderer2, { class: "size-3", "aria-hidden": "true" });
1031
+ $$renderer2.push(`<!----></a>`);
1032
+ } else {
1033
+ $$renderer2.push("<!--[-1-->");
1034
+ }
1035
+ $$renderer2.push(`<!--]--></li>`);
1036
+ }
1037
+ $$renderer2.push(`<!--]--></ul>`);
1038
+ }
1039
+ $$renderer2.push(`<!--]--> <p class="mt-2 text-xs text-muted-foreground">From ${escape_html(docs.source)}.</p>`);
1040
+ }
1041
+ $$renderer2.push(`<!--]--></section>`);
1042
+ });
1043
+ }
1044
+ function unavailable($$renderer, a) {
1045
+ if (!a.available) {
1046
+ $$renderer.push(`<!--[0--><p class="text-sm text-muted-foreground">Not available. ${escape_html(a.reason)}</p>`);
1047
+ } else {
1048
+ $$renderer.push("<!--[-1-->");
1049
+ }
1050
+ $$renderer.push(`<!--]-->`);
1051
+ }
1052
+ function source($$renderer, a) {
1053
+ if (a.available) {
1054
+ $$renderer.push(`<!--[0--><p class="mt-1.5 text-xs text-muted-foreground">From ${escape_html(a.source)}${escape_html(a.observedAt ? `, ${ago(a.observedAt, live.now)}` : "")}.</p>`);
1055
+ } else {
1056
+ $$renderer.push("<!--[-1-->");
1057
+ }
1058
+ $$renderer.push(`<!--]-->`);
1059
+ }
1060
+ function checkIcon($$renderer, c) {
1061
+ if (c.state === "pass") {
1062
+ $$renderer.push("<!--[0-->");
1063
+ Check($$renderer, {
1064
+ class: "size-4 shrink-0 text-success",
1065
+ "aria-label": "Passed"
1066
+ });
1067
+ } else if (c.state === "fail") {
1068
+ $$renderer.push("<!--[1-->");
1069
+ X($$renderer, { class: "size-4 shrink-0 text-danger", "aria-label": "Failed" });
1070
+ } else if (c.state === "running") {
1071
+ $$renderer.push("<!--[2-->");
1072
+ Loader_circle($$renderer, {
1073
+ class: "size-4 shrink-0 animate-spin text-muted-foreground",
1074
+ "aria-label": "Running"
1075
+ });
1076
+ } else if (c.state === "skipped") {
1077
+ $$renderer.push("<!--[3-->");
1078
+ Minus($$renderer, {
1079
+ class: "size-4 shrink-0 text-muted-foreground",
1080
+ "aria-label": "Skipped"
1081
+ });
1082
+ } else {
1083
+ $$renderer.push("<!--[-1-->");
1084
+ Circle_dashed($$renderer, {
1085
+ class: "size-4 shrink-0 text-muted-foreground",
1086
+ "aria-label": "Pending"
1087
+ });
1088
+ }
1089
+ $$renderer.push(`<!--]-->`);
1090
+ }
1091
+ function progressBlock($$renderer) {
1092
+ }
1093
+ function timePanel($$renderer, task, detail) {
1094
+ const e = task.eta ?? null;
1095
+ const t = detail.time;
1096
+ $$renderer.push(`<section class="space-y-6" aria-label="Work time">`);
1097
+ if (e && !e.openEnded) {
1098
+ $$renderer.push("<!--[0-->");
1099
+ const l = etaLine(e);
1100
+ $$renderer.push(`<div class="rounded-xl border bg-card p-5"><div class="flex flex-wrap items-start justify-between gap-3"><div><p class="flex items-center gap-2 text-sm text-muted-foreground">`);
1101
+ Timer($$renderer, { class: "size-4", "aria-hidden": "true" });
1102
+ $$renderer.push(`<!---->Until it is ready for your review</p> <p${attr_class(`mt-1 text-2xl font-semibold tracking-tight ${l.tone === "warning" ? "text-warning" : ""}`)}>${escape_html(l.text)}</p> `);
1103
+ if (e.minutes !== null && !e.overdue) {
1104
+ $$renderer.push(`<!--[0--><p class="mt-0.5 text-sm text-muted-foreground">Usually ${escape_html(e.low)}–${escape_html(e.high)} min, so around ${escape_html(clock(new Date(live.now + e.minutes * 6e4).toISOString()))}</p>`);
1105
+ } else if (e.overdue) {
1106
+ $$renderer.push(`<!--[1--><p class="mt-0.5 text-sm text-muted-foreground">Similar work had reached your review by this point.</p>`);
1107
+ } else {
1108
+ $$renderer.push("<!--[-1-->");
1109
+ }
1110
+ $$renderer.push(`<!--]--></div> `);
1111
+ if (e.confidence !== "none" && !e.overdue) {
1112
+ $$renderer.push(`<!--[0--><span class="rounded-full bg-muted px-2.5 py-1 text-xs font-medium">${escape_html(CONFIDENCE[e.confidence])}</span>`);
1113
+ } else {
1114
+ $$renderer.push("<!--[-1-->");
1115
+ }
1116
+ $$renderer.push(`<!--]--></div> `);
1117
+ if (e.ahead.length) {
1118
+ $$renderer.push(`<!--[0--><ol class="mt-5 space-y-2 border-t pt-4"><!--[-->`);
1119
+ const each_array_11 = ensure_array_like(e.ahead);
1120
+ for (let $$index_11 = 0, $$length = each_array_11.length; $$index_11 < $$length; $$index_11++) {
1121
+ let x = each_array_11[$$index_11];
1122
+ $$renderer.push(`<li class="flex items-baseline justify-between gap-4 text-sm"><span${attr_class(clsx(x.current ? "font-medium" : "text-muted-foreground"))}>${escape_html(PHASE_LABEL[x.phase])}`);
1123
+ if (x.current) {
1124
+ $$renderer.push(`<!--[0--><span class="font-normal text-muted-foreground">${escape_html(` · now, ${duration(x.spent)} in`)}</span>`);
1125
+ } else {
1126
+ $$renderer.push("<!--[-1-->");
1127
+ }
1128
+ $$renderer.push(`<!--]--></span> <span class="text-muted-foreground tabular-nums">${escape_html(x.usual !== null ? `usually ${duration(x.usual)}` : "no history yet")}</span></li>`);
1129
+ }
1130
+ $$renderer.push(`<!--]--></ol>`);
1131
+ } else {
1132
+ $$renderer.push("<!--[-1-->");
1133
+ }
1134
+ $$renderer.push(`<!--]--> <p class="mt-4 text-xs text-muted-foreground">Based on ${escape_html(e.basis)} similar ${escape_html(e.scope === "project" ? "tasks in this project" : "tasks across projects")}. A guide, not a promise: it counts work time only, not time
1135
+ waiting on you.</p></div>`);
1136
+ } else {
1137
+ $$renderer.push("<!--[-1-->");
1138
+ }
1139
+ $$renderer.push(`<!--]--> `);
1140
+ if (t && t.total > 0) {
1141
+ $$renderer.push(`<!--[0--><div><div class="flex flex-wrap items-baseline justify-between gap-2"><h2 class="section-label flex-1">Where its time went</h2> <p class="text-sm text-muted-foreground">${escape_html(duration(t.total))}${escape_html(t.ongoing ? " so far" : "")}${escape_html(t.readyAfter !== null ? ` · ready for you after ${duration(t.readyAfter)}` : "")}</p></div> <div class="mt-3">`);
1142
+ TimeBar($$renderer, { seconds: t.seconds, height: "h-3", label: "This task" });
1143
+ $$renderer.push(`<!----></div> <div class="mt-3">`);
1144
+ TimeLegend($$renderer, { seconds: t.seconds });
1145
+ $$renderer.push(`<!----></div> `);
1146
+ if (t.reviewSteps.length) {
1147
+ $$renderer.push(`<!--[0--><details class="mt-4 rounded-lg border px-4 py-3 text-sm"><summary class="cursor-pointer text-muted-foreground hover:text-foreground">Inside the latest automated review</summary> <ul class="mt-3 space-y-1.5"><!--[-->`);
1148
+ const each_array_12 = ensure_array_like(t.reviewSteps);
1149
+ for (let $$index_12 = 0, $$length = each_array_12.length; $$index_12 < $$length; $$index_12++) {
1150
+ let r = each_array_12[$$index_12];
1151
+ $$renderer.push(`<li class="flex justify-between gap-4"><span>${escape_html(r.label)}</span><span class="text-muted-foreground tabular-nums">${escape_html(duration(r.seconds))}</span></li>`);
1152
+ }
1153
+ $$renderer.push(`<!--]--></ul></details>`);
1154
+ } else {
1155
+ $$renderer.push("<!--[-1-->");
1156
+ }
1157
+ $$renderer.push(`<!--]--></div>`);
1158
+ } else {
1159
+ $$renderer.push("<!--[-1-->");
1160
+ }
1161
+ $$renderer.push(`<!--]--> `);
1162
+ if (detail.decided.length) {
1163
+ $$renderer.push(`<!--[0--><div><h2 class="section-label">Decided for you on this task</h2> <ul class="mt-3 divide-y rounded-lg border"><!--[-->`);
1164
+ const each_array_13 = ensure_array_like(detail.decided);
1165
+ for (let $$index_13 = 0, $$length = each_array_13.length; $$index_13 < $$length; $$index_13++) {
1166
+ let d = each_array_13[$$index_13];
1167
+ $$renderer.push(`<li><a${attr("href", `/decisions#${stringify(d.id)}`)} class="flex gap-3 px-4 py-3 hover:bg-accent/40">`);
1168
+ Scale($$renderer, {
1169
+ class: "mt-0.5 size-4 shrink-0 text-muted-foreground",
1170
+ "aria-hidden": "true"
1171
+ });
1172
+ $$renderer.push(`<!----> <span class="min-w-0 text-sm"><span class="font-medium">${escape_html(d.verdict)}</span> <span class="text-muted-foreground">· ${escape_html(d.calls[0].question)}</span></span></a></li>`);
1173
+ }
1174
+ $$renderer.push(`<!--]--></ul></div>`);
1175
+ } else {
1176
+ $$renderer.push("<!--[-1-->");
1177
+ }
1178
+ $$renderer.push(`<!--]--></section>`);
1179
+ }
1180
+ function pluginSection($$renderer, entry) {
1181
+ $$renderer.push(`<section class="rounded-xl border p-4"${attr("aria-label", entry.title)} data-slot="task.section"><h2 class="mb-3 text-sm font-medium">${escape_html(entry.title)}</h2> `);
1182
+ SlotContent($$renderer, { entry, now: live.now });
1183
+ $$renderer.push(`<!----></section>`);
1184
+ }
1185
+ function _page($$renderer, $$props) {
1186
+ $$renderer.component(($$renderer2) => {
1187
+ let { data } = $$props;
1188
+ let fetched = null;
1189
+ const FILES_PREVIEW = 12;
1190
+ let shotIndex = null;
1191
+ let diffFile = null;
1192
+ const id = derived(() => page.params.id);
1193
+ const detail = derived(() => fetched?.task.id === id() ? fetched : data.detail);
1194
+ const task = derived(() => currentFleet()?.tasks.find((t2) => t2.id === id()) ?? detail()?.task ?? null);
1195
+ const ev = derived(() => detail()?.evidence ?? null);
1196
+ const project = derived(() => currentFleet()?.projects.find((p) => p.id === task()?.projectId));
1197
+ const shots = derived(() => ev()?.screenshots.available ? ev().screenshots.value : []);
1198
+ const pluginEntries = derived(() => slots.entries(slotKey.task(id()), data.slots, data.slotsAt));
1199
+ const stepEntries = (key) => pluginEntries().filter((e) => e.slot === "step.evidence" && e.step === key);
1200
+ const t = derived(() => task() ? tone(task()) : "normal");
1201
+ const back = derived(() => task() ? `/?project=${encodeURIComponent(task().projectId)}` : "/");
1202
+ const blocks = {
1203
+ queue: queueBlock,
1204
+ progress: progressBlock,
1205
+ files: filesBlock,
1206
+ validation: validationBlock,
1207
+ pr: prBlock,
1208
+ report: reportBlock,
1209
+ screenshots: screenshotsBlock,
1210
+ preview: previewBlock,
1211
+ decision: decisionBlock,
1212
+ landed: landedBlock
1213
+ };
1214
+ const blockFor = (id2) => blocks[id2] ?? (id2.startsWith("check:") ? checkBlock : void 0);
1215
+ const PASS = [
1216
+ "success",
1217
+ "inactive",
1218
+ "included",
1219
+ "published",
1220
+ "ok",
1221
+ "yes",
1222
+ "present"
1223
+ ];
1224
+ const FAIL = ["failure", "error", "mismatch"];
1225
+ const checkTone = (c) => c.state === "off" || c.state === "gave-up" ? "skipped" : c.state !== "observed" ? "unknown" : PASS.includes(c.outcome ?? "") ? "pass" : FAIL.includes(c.outcome ?? "") ? "fail" : c.outcome === "in_progress" ? "running" : "pending";
1226
+ const taskSections = derived(() => placeTaskSections(pluginEntries(), task() ? task().passage.steps.map((s) => s.key) : []));
1227
+ const pluginTabs = derived(() => [...taskSections().byOrder].sort((a, b) => a.order - b.order));
1228
+ const hasTime = (task2, detail2) => !!(task2.eta && !task2.eta.openEnded) || !!(detail2.time && detail2.time.total > 0) || detail2.decided.length > 0;
1229
+ const tabs = derived(() => task() && detail() ? taskTabs({
1230
+ preview: !!task().preview,
1231
+ shots: shots().length,
1232
+ plugins: pluginTabs().map((e) => ({ key: e.key, title: e.title })),
1233
+ build: {
1234
+ // Only what is still waiting on an answer is counted.
1235
+ talk: detail().build.conversation.available ? detail().build.conversation.value.filter((e) => e.outcome.state === "open").length : 0,
1236
+ docs: detail().build.docs.available ? detail().build.docs.value.length : 0
1237
+ }
1238
+ }) : []);
1239
+ let chosen = null;
1240
+ const want = derived(() => chosen?.id === id() ? chosen : { tab: page.url.searchParams.get("tab"), full: false });
1241
+ const active = derived(() => pickTab(want().tab, tabs()));
1242
+ const full = derived(() => !!task()?.preview && (chosen?.id === id() ? chosen.full : page.url.searchParams.get("full") === "1"));
1243
+ function show(tab, fullScreen = false) {
1244
+ chosen = { id: id(), tab, full: fullScreen };
1245
+ const url = new URL(page.url);
1246
+ url.searchParams.set("tab", tab);
1247
+ if (fullScreen) url.searchParams.set("full", "1");
1248
+ else url.searchParams.delete("full");
1249
+ replaceState();
1250
+ }
1251
+ async function reveal(tab) {
1252
+ show(tab);
1253
+ if (matchMedia("(min-width: 64rem)").matches) return;
1254
+ await tick();
1255
+ matchMedia("(prefers-reduced-motion: reduce)").matches;
1256
+ }
1257
+ let terminalOpen = true;
1258
+ let toggled = {};
1259
+ const isOpen = (s) => toggled[`${id()} ${s.key}`] ?? openByDefault(s);
1260
+ const entryText = (e) => {
1261
+ const n = /\/pull\/(\d+)/.exec(e.text)?.[1];
1262
+ if (e.kind === "pr-ready") return `Pull request${n ? ` #${n}` : ""} ready`;
1263
+ if (e.kind === "merged") return n ? `Merged pull request #${n}` : e.text;
1264
+ return e.text;
1265
+ };
1266
+ const prState = (s, draft) => draft ? "draft" : s === "merged" ? "merged" : s === "closed" ? "closed" : s === "open" ? "open" : s ?? "state unknown";
1267
+ function filesBlock($$renderer3) {
1268
+ if (ev()?.files.available) {
1269
+ $$renderer3.push("<!--[0-->");
1270
+ const f = ev().files.value;
1271
+ const max = Math.max(1, ...f.files.map((x) => (x.additions ?? 0) + (x.deletions ?? 0)));
1272
+ $$renderer3.push(`<h4 class="mb-2 text-sm font-medium">Files changed <span class="font-normal text-muted-foreground">${escape_html(f.branch ? `on ${f.branch}` : "")} against ${escape_html(f.base)}</span></h4> `);
1273
+ if (f.files.length) {
1274
+ $$renderer3.push(`<!--[0--><ul class="divide-y rounded-lg border"><!--[-->`);
1275
+ const each_array = ensure_array_like(f.files.slice(0, FILES_PREVIEW));
1276
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1277
+ let x = each_array[$$index];
1278
+ $$renderer3.push(`<li><button type="button" class="flex w-full items-center gap-3 px-3 py-2 text-left text-xs hover:bg-accent/60"${attr("aria-label", `Show the changes to ${stringify(x.path)}`)}><span class="w-3 font-mono text-muted-foreground">${escape_html(x.status)}</span> <span class="min-w-0 flex-1 truncate font-mono"${attr("title", x.path)}>${escape_html(x.path)}</span> `);
1279
+ if (x.status === "?") {
1280
+ $$renderer3.push(`<!--[0--><span class="text-muted-foreground">new, not committed</span>`);
1281
+ } else if (x.additions === null) {
1282
+ $$renderer3.push(`<!--[1--><span class="text-muted-foreground">binary</span>`);
1283
+ } else {
1284
+ $$renderer3.push(`<!--[-1--><span class="tabular"><span class="text-success">+${escape_html(x.additions)}</span> <span class="text-danger">−${escape_html(x.deletions)}</span></span> <span class="hidden h-1.5 w-16 overflow-hidden rounded-full bg-muted sm:flex"><span class="bg-success"${attr_style(`width:${stringify((x.additions ?? 0) / max * 100)}%`)}></span> <span class="bg-danger"${attr_style(`width:${stringify((x.deletions ?? 0) / max * 100)}%`)}></span></span>`);
1285
+ }
1286
+ $$renderer3.push(`<!--]--></button></li>`);
1287
+ }
1288
+ $$renderer3.push(`<!--]--></ul> `);
1289
+ if (f.files.length > FILES_PREVIEW) {
1290
+ $$renderer3.push(`<!--[0--><button class="mt-2 text-sm text-muted-foreground hover:text-foreground hover:underline">Show all ${escape_html(f.files.length)} files</button>`);
1291
+ } else {
1292
+ $$renderer3.push("<!--[-1-->");
1293
+ }
1294
+ $$renderer3.push(`<!--]--> `);
1295
+ if (f.truncated) {
1296
+ $$renderer3.push(`<!--[0--><p class="mt-1 text-xs text-muted-foreground">Showing the first ${escape_html(f.files.length)} of ${escape_html(f.total)} files.</p>`);
1297
+ } else {
1298
+ $$renderer3.push("<!--[-1-->");
1299
+ }
1300
+ $$renderer3.push(`<!--]--> <p class="mt-1 text-xs text-muted-foreground">Select a file to see its diff.</p>`);
1301
+ } else {
1302
+ $$renderer3.push(`<!--[-1--><p class="text-sm text-muted-foreground">No changes yet.</p>`);
1303
+ }
1304
+ $$renderer3.push(`<!--]--> `);
1305
+ source($$renderer3, ev().files);
1306
+ $$renderer3.push(`<!---->`);
1307
+ } else if (ev()) {
1308
+ $$renderer3.push("<!--[1-->");
1309
+ unavailable($$renderer3, ev().files);
1310
+ } else {
1311
+ $$renderer3.push("<!--[-1-->");
1312
+ }
1313
+ $$renderer3.push(`<!--]-->`);
1314
+ }
1315
+ function checksLink($$renderer3) {
1316
+ $$renderer3.push(`<button type="button" class="mt-2 block text-sm text-sea hover:underline">What each check found</button>`);
1317
+ }
1318
+ function queueBlock($$renderer3) {
1319
+ if (task()) {
1320
+ $$renderer3.push(`<!--[0--><p class="text-sm text-muted-foreground">${escape_html(task().since ? `Filed ${task().since}.` : "Queued by Firstmate.")} `);
1321
+ if (task().blockedBy.length) {
1322
+ $$renderer3.push(`<!--[0-->Waiting on ${escape_html(task().blockedBy.join(", "))}.`);
1323
+ } else {
1324
+ $$renderer3.push("<!--[-1-->");
1325
+ }
1326
+ $$renderer3.push(`<!--]--></p>`);
1327
+ } else {
1328
+ $$renderer3.push("<!--[-1-->");
1329
+ }
1330
+ $$renderer3.push(`<!--]-->`);
1331
+ }
1332
+ function validationBlock($$renderer3) {
1333
+ if (task() && showsChecks(task())) {
1334
+ $$renderer3.push("<!--[0-->");
1335
+ ChecksTimeline($$renderer3, {
1336
+ pipeline: task().pipeline,
1337
+ busy: task().busy,
1338
+ prChecks: ev()?.pr.available ? ev().pr.value.checks : []
1339
+ });
1340
+ $$renderer3.push(`<!----> `);
1341
+ if (ev()?.validation.available) {
1342
+ $$renderer3.push("<!--[0-->");
1343
+ RawDetails($$renderer3, {
1344
+ raw: ev().validation.value.detail,
1345
+ plain: plainStatus(task().current?.state, ev().validation.value.detail)
1346
+ });
1347
+ } else {
1348
+ $$renderer3.push("<!--[-1-->");
1349
+ }
1350
+ $$renderer3.push(`<!--]--> <p class="mt-1.5 text-xs text-muted-foreground">From the validation run’s own report${escape_html(task().pipeline.observedAt ? `, ${ago(task().pipeline.observedAt, live.now)}` : "")}.</p> `);
1351
+ checksLink($$renderer3);
1352
+ $$renderer3.push(`<!---->`);
1353
+ } else if (ev()?.validation.available) {
1354
+ $$renderer3.push("<!--[1-->");
1355
+ const plain = plainStatus(task()?.current?.state, ev().validation.value.detail);
1356
+ $$renderer3.push(`<p class="text-sm">${escape_html(plain)}</p> `);
1357
+ if (task()?.pipeline && task().current?.state === "working") {
1358
+ $$renderer3.push(`<!--[0--><p class="mt-1 text-sm text-muted-foreground">${escape_html(task().pipeline.label)} step${escape_html(task().pipeline.round ? `, fix round ${task().pipeline.round}` : "")}${escape_html(task().pipeline.startedAt ? `, started ${ago(task().pipeline.startedAt, live.now)}` : "")}.</p>`);
1359
+ } else {
1360
+ $$renderer3.push("<!--[-1-->");
1361
+ }
1362
+ $$renderer3.push(`<!--]--> `);
1363
+ RawDetails($$renderer3, { raw: ev().validation.value.detail, plain });
1364
+ $$renderer3.push(`<!----> `);
1365
+ source($$renderer3, ev().validation);
1366
+ $$renderer3.push(`<!---->`);
1367
+ } else if (detail()?.build.checks.available) {
1368
+ $$renderer3.push(`<!--[2--><ul class="space-y-1 text-sm"><!--[-->`);
1369
+ const each_array_1 = ensure_array_like(detail().build.checks.value.steps.filter((x) => x.key !== "intent"));
1370
+ for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
1371
+ let c = each_array_1[$$index_1];
1372
+ $$renderer3.push(`<li><span class="font-medium">${escape_html(c.label)}</span> · ${escape_html(c.summary)}</li>`);
1373
+ }
1374
+ $$renderer3.push(`<!--]--></ul> `);
1375
+ checksLink($$renderer3);
1376
+ $$renderer3.push(`<!---->`);
1377
+ } else if (ev()) {
1378
+ $$renderer3.push("<!--[3-->");
1379
+ unavailable($$renderer3, ev().validation);
1380
+ } else {
1381
+ $$renderer3.push("<!--[-1-->");
1382
+ }
1383
+ $$renderer3.push(`<!--]-->`);
1384
+ }
1385
+ function guidedReview($$renderer3) {
1386
+ $$renderer3.push(`<a${attr("href", `/tasks/${stringify(encodeURIComponent(id()))}/review`)} class="mt-2 inline-flex items-center gap-1.5 text-sm text-sea hover:underline">`);
1387
+ Compass($$renderer3, { class: "size-3.5", "aria-hidden": "true" });
1388
+ $$renderer3.push(`<!---->Review it with the review agent’s guide</a>`);
1389
+ }
1390
+ function prBlock($$renderer3) {
1391
+ if (ev()?.pr.available) {
1392
+ $$renderer3.push("<!--[0-->");
1393
+ const pr = ev().pr.value;
1394
+ $$renderer3.push(`<p class="text-sm"><a${attr("href", pr.url)} target="_blank" rel="noreferrer" class="inline-flex items-center gap-1 text-sea hover:underline">Pull request${escape_html(pr.number ? ` #${pr.number}` : "")}`);
1395
+ External_link($$renderer3, { class: "size-3.5", "aria-hidden": "true" });
1396
+ $$renderer3.push(`<!----></a> <span class="text-muted-foreground">${escape_html(prState(pr.state, pr.draft))}${escape_html(pr.reviewDecision ? `, ${pr.reviewDecision.toLowerCase().replace(/_/g, " ")}` : "")}</span></p> `);
1397
+ if (pr.checks.length) {
1398
+ $$renderer3.push(`<!--[0--><ul class="mt-3 divide-y rounded-lg border"><!--[-->`);
1399
+ const each_array_2 = ensure_array_like(pr.checks);
1400
+ for (let i = 0, $$length = each_array_2.length; i < $$length; i++) {
1401
+ let c = each_array_2[i];
1402
+ $$renderer3.push(`<li class="flex items-center gap-3 px-3 py-2 text-sm">`);
1403
+ checkIcon($$renderer3, c);
1404
+ $$renderer3.push(`<!----><span class="truncate">${escape_html(c.name)}</span></li>`);
1405
+ }
1406
+ $$renderer3.push(`<!--]--></ul>`);
1407
+ } else {
1408
+ $$renderer3.push(`<!--[-1--><p class="mt-2 text-sm text-muted-foreground">No CI checks reported.</p>`);
1409
+ }
1410
+ $$renderer3.push(`<!--]--> `);
1411
+ source($$renderer3, ev().pr);
1412
+ $$renderer3.push(`<!----> `);
1413
+ guidedReview($$renderer3);
1414
+ $$renderer3.push(`<!---->`);
1415
+ } else if (ev() && !ev().pr.available && task()?.pr) {
1416
+ $$renderer3.push(`<!--[1--><a${attr("href", task().pr.url)} target="_blank" rel="noreferrer" class="inline-flex items-center gap-1 text-sm text-sea hover:underline">Pull request${escape_html(task().pr.number ? ` #${task().pr.number}` : "")}`);
1417
+ External_link($$renderer3, { class: "size-3.5", "aria-hidden": "true" });
1418
+ $$renderer3.push(`<!----></a> <p class="mt-1 text-sm text-muted-foreground">Its state and checks are not available. ${escape_html(ev().pr.reason)}</p>`);
1419
+ } else if (ev()) {
1420
+ $$renderer3.push("<!--[2-->");
1421
+ unavailable($$renderer3, ev().pr);
1422
+ } else {
1423
+ $$renderer3.push("<!--[-1-->");
1424
+ }
1425
+ $$renderer3.push(`<!--]-->`);
1426
+ }
1427
+ function reportBlock($$renderer3) {
1428
+ if (ev()?.report.available) {
1429
+ $$renderer3.push(`<!--[0--><div class="flex gap-3 rounded-lg border p-3">`);
1430
+ File_text($$renderer3, {
1431
+ class: "mt-0.5 size-4 shrink-0 text-muted-foreground",
1432
+ "aria-hidden": "true"
1433
+ });
1434
+ $$renderer3.push(`<!----> <div class="min-w-0"><p class="truncate font-mono text-xs text-muted-foreground">${escape_html(ev().report.value.path)}</p> <p class="mt-1 text-sm leading-relaxed">${escape_html(ev().report.value.excerpt)}</p></div></div> `);
1435
+ source($$renderer3, ev().report);
1436
+ $$renderer3.push(`<!---->`);
1437
+ } else if (ev()) {
1438
+ $$renderer3.push("<!--[1-->");
1439
+ unavailable($$renderer3, ev().report);
1440
+ } else {
1441
+ $$renderer3.push("<!--[-1-->");
1442
+ }
1443
+ $$renderer3.push(`<!--]-->`);
1444
+ }
1445
+ function screenshotsBlock($$renderer3) {
1446
+ if (ev()?.screenshots.available) {
1447
+ $$renderer3.push(`<!--[0--><div class="flex flex-wrap gap-3"><!--[-->`);
1448
+ const each_array_3 = ensure_array_like(ev().screenshots.value);
1449
+ for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
1450
+ let s = each_array_3[$$index_3];
1451
+ $$renderer3.push(`<button type="button" class="w-48 shrink-0 cursor-zoom-in text-left"${attr("aria-label", `Enlarge ${stringify(s.name)}`)}><img${attr("src", s.url)}${attr("alt", s.name)} loading="lazy" class="aspect-[16/10] w-full rounded-lg border object-cover object-top"/> <p class="mt-1.5 truncate text-xs text-muted-foreground">${escape_html(s.name)}</p></button>`);
1452
+ }
1453
+ $$renderer3.push(`<!--]--></div> `);
1454
+ source($$renderer3, ev().screenshots);
1455
+ $$renderer3.push(`<!---->`);
1456
+ } else if (ev()) {
1457
+ $$renderer3.push("<!--[1-->");
1458
+ unavailable($$renderer3, ev().screenshots);
1459
+ } else {
1460
+ $$renderer3.push("<!--[-1-->");
1461
+ }
1462
+ $$renderer3.push(`<!--]-->`);
1463
+ }
1464
+ function previewBlock($$renderer3) {
1465
+ if (ev()?.preview.available) {
1466
+ $$renderer3.push(`<!--[0--><a${attr("href", ev().preview.value.url)} target="_blank" rel="noreferrer" class="inline-flex items-center gap-1 text-sm text-sea hover:underline">Open preview`);
1467
+ External_link($$renderer3, { class: "size-3.5", "aria-hidden": "true" });
1468
+ $$renderer3.push(`<!----></a> `);
1469
+ source($$renderer3, ev().preview);
1470
+ $$renderer3.push(`<!---->`);
1471
+ } else if (ev()) {
1472
+ $$renderer3.push("<!--[1-->");
1473
+ unavailable($$renderer3, ev().preview);
1474
+ } else {
1475
+ $$renderer3.push("<!--[-1-->");
1476
+ }
1477
+ $$renderer3.push(`<!--]-->`);
1478
+ }
1479
+ function decisionBlock($$renderer3, s) {
1480
+ if (s.state === "current" && ev()?.decisions.length) {
1481
+ $$renderer3.push(`<!--[0--><ul class="list-disc space-y-1 pl-5 text-sm"><!--[-->`);
1482
+ const each_array_4 = ensure_array_like(ev().decisions);
1483
+ for (let i = 0, $$length = each_array_4.length; i < $$length; i++) {
1484
+ let d = each_array_4[i];
1485
+ const plain = plainStatus("needs-decision", d.text);
1486
+ $$renderer3.push(`<li>${escape_html(plain)}`);
1487
+ RawDetails($$renderer3, { raw: d.text, plain });
1488
+ $$renderer3.push(`<!----></li>`);
1489
+ }
1490
+ $$renderer3.push(`<!--]--></ul>`);
1491
+ } else {
1492
+ $$renderer3.push("<!--[-1-->");
1493
+ }
1494
+ $$renderer3.push(`<!--]-->`);
1495
+ }
1496
+ function checkBlock($$renderer3, _s, block) {
1497
+ const c = task()?.passage.checks.find((x) => `check:${x.id}` === block);
1498
+ if (c) {
1499
+ $$renderer3.push(`<!--[0--><div class="flex items-start gap-3 rounded-lg border px-3 py-2 text-sm"${attr("data-check", c.id)}>`);
1500
+ checkIcon($$renderer3, { name: c.label, state: checkTone(c) });
1501
+ $$renderer3.push(`<!----> <div class="min-w-0 flex-1"><p><span class="font-medium">${escape_html(c.label)}</span> <span class="text-muted-foreground">${escape_html(c.summary)}</span></p> <p class="mt-0.5 text-xs text-muted-foreground">${escape_html(c.type === "command" ? "Command" : c.type)}${escape_html(c.observedAt ? `, ${c.type === "command" ? "ran" : "checked"} ${ago(c.observedAt, live.now)}` : "")}${escape_html(c.state === "gave-up" ? ", no longer checked" : "")} `);
1502
+ if (c.url) {
1503
+ $$renderer3.push(`<!--[0-->· <a${attr("href", c.url)} target="_blank" rel="noreferrer" class="inline-flex items-center gap-1 text-sea hover:underline">Open`);
1504
+ External_link($$renderer3, { class: "size-3", "aria-hidden": "true" });
1505
+ $$renderer3.push(`<!----></a>`);
1506
+ } else {
1507
+ $$renderer3.push("<!--[-1-->");
1508
+ }
1509
+ $$renderer3.push(`<!--]--></p> `);
1510
+ if (c.command) {
1511
+ $$renderer3.push(`<!--[0--><p class="mt-1 font-mono text-xs break-all text-muted-foreground">Runs ${escape_html(c.command)}</p>`);
1512
+ } else {
1513
+ $$renderer3.push("<!--[-1-->");
1514
+ }
1515
+ $$renderer3.push(`<!--]--> `);
1516
+ if (c.output) {
1517
+ $$renderer3.push(`<!--[0--><details class="mt-1"><summary class="cursor-pointer text-xs text-sea">Output</summary> <pre class="mt-1 max-h-80 overflow-auto rounded-md bg-terminal px-3 py-2 font-mono text-xs text-terminal-foreground">${escape_html(c.output)}</pre></details>`);
1518
+ } else {
1519
+ $$renderer3.push("<!--[-1-->");
1520
+ }
1521
+ $$renderer3.push(`<!--]--></div></div>`);
1522
+ } else {
1523
+ $$renderer3.push("<!--[-1-->");
1524
+ }
1525
+ $$renderer3.push(`<!--]-->`);
1526
+ }
1527
+ function landedBlock($$renderer3) {
1528
+ if (task()) {
1529
+ $$renderer3.push(`<!--[0--><p class="text-sm text-muted-foreground">`);
1530
+ if (task().mergedAt) {
1531
+ $$renderer3.push(`<!--[0-->Merged ${escape_html(ago(task().mergedAt, live.now))} (${escape_html(clock(task().mergedAt))}).`);
1532
+ } else if (task().completedOn) {
1533
+ $$renderer3.push(`<!--[1-->Closed on ${escape_html(task().completedOn)}; the exact time was not recorded.`);
1534
+ } else if (task().status === "landed") {
1535
+ $$renderer3.push(`<!--[2-->Done.`);
1536
+ } else {
1537
+ $$renderer3.push("<!--[-1-->");
1538
+ }
1539
+ $$renderer3.push(`<!--]--></p>`);
1540
+ } else {
1541
+ $$renderer3.push("<!--[-1-->");
1542
+ }
1543
+ $$renderer3.push(`<!--]-->`);
1544
+ }
1545
+ function overview($$renderer3, task2, ev2, detail2) {
1546
+ const e = task2.eta && !task2.eta.openEnded ? task2.eta : null;
1547
+ $$renderer3.push(`<p class="mt-5 text-sm text-muted-foreground">${escape_html(project()?.name ?? task2.projectId)}${escape_html(agentLine(task2.worker) ? ` · ${agentLine(task2.worker)}` : "")}</p> <h1 class="mt-1 text-[1.9rem] leading-tight text-balance">${escape_html(task2.title)}</h1> <p${attr_class(`mt-2 text-sm font-medium ${stringify(t() === "normal" || t() === "landed" ? "text-muted-foreground" : textClass[t()])}`)}>${escape_html(task2.statusLabel)}</p> `);
1548
+ if (task2.activity && !task2.attention) {
1549
+ $$renderer3.push(`<!--[0--><p class="mt-2 leading-relaxed"${attr("data-now", task2.activity.source)}><span class="mr-1 text-muted-foreground">Now:</span>${escape_html(task2.activity.text)}`);
1550
+ if (task2.activity.at) {
1551
+ $$renderer3.push(`<!--[0--><span class="text-muted-foreground">${escape_html(` · ${task2.activity.source === "pipeline" ? "started " : ""}${ago(task2.activity.at, live.now)}`)}</span>`);
1552
+ } else {
1553
+ $$renderer3.push("<!--[-1-->");
1554
+ }
1555
+ $$renderer3.push(`<!--]--></p> `);
1556
+ RawDetails($$renderer3, { raw: task2.summaryRaw });
1557
+ $$renderer3.push(`<!---->`);
1558
+ } else if (task2.summary && !task2.attention) {
1559
+ $$renderer3.push(`<!--[1--><p class="mt-2 leading-relaxed">`);
1560
+ if (task2.summaryIsHistory) {
1561
+ $$renderer3.push(`<!--[0--><span class="mr-1 text-muted-foreground">Latest update:</span>`);
1562
+ } else {
1563
+ $$renderer3.push("<!--[-1-->");
1564
+ }
1565
+ $$renderer3.push(`<!--]-->${escape_html(task2.summary)}</p> `);
1566
+ RawDetails($$renderer3, { raw: task2.summaryRaw });
1567
+ $$renderer3.push(`<!---->`);
1568
+ } else {
1569
+ $$renderer3.push("<!--[-1-->");
1570
+ }
1571
+ $$renderer3.push(`<!--]--> `);
1572
+ if (task2.attention) {
1573
+ $$renderer3.push(`<!--[0--><div${attr_class(`mt-5 rounded-xl p-4 ${task2.attention.owner === "captain" ? "bg-sea/10" : "bg-warning/10"}`)}><p${attr_class(`text-sm font-medium ${task2.attention.owner === "captain" ? "text-sea" : "text-warning"}`)}>${escape_html(task2.attention.owner === "firstmate" ? "Waiting on Firstmate" : task2.attention.kind === "review" ? "Ready for your review" : "Your decision is needed")}</p> <p class="mt-1 text-sm leading-relaxed whitespace-pre-line">${escape_html(task2.attention.text)}</p> `);
1574
+ if (task2.attention.owner === "firstmate") {
1575
+ $$renderer3.push("<!--[0-->");
1576
+ RawDetails($$renderer3, { raw: task2.summaryRaw });
1577
+ } else {
1578
+ $$renderer3.push("<!--[-1-->");
1579
+ }
1580
+ $$renderer3.push(`<!--]--> `);
1581
+ if (detail2.evidence.decisions.length > 1) {
1582
+ $$renderer3.push(`<!--[0--><ul class="mt-2 list-disc space-y-1 pl-5 text-sm"><!--[-->`);
1583
+ const each_array_5 = ensure_array_like(detail2.evidence.decisions.slice(1));
1584
+ for (let i = 0, $$length = each_array_5.length; i < $$length; i++) {
1585
+ let d = each_array_5[i];
1586
+ const plain = plainStatus("needs-decision", d.text);
1587
+ $$renderer3.push(`<li>${escape_html(plain)}`);
1588
+ RawDetails($$renderer3, { raw: d.text, plain });
1589
+ $$renderer3.push(`<!----></li>`);
1590
+ }
1591
+ $$renderer3.push(`<!--]--></ul>`);
1592
+ } else {
1593
+ $$renderer3.push("<!--[-1-->");
1594
+ }
1595
+ $$renderer3.push(`<!--]--> `);
1596
+ if (task2.attention.kind === "decision") {
1597
+ $$renderer3.push(`<!--[0--><p class="mt-2 text-xs text-muted-foreground">Answer through Firstmate: it passes your word to the crew.</p>`);
1598
+ } else {
1599
+ $$renderer3.push("<!--[-1-->");
1600
+ }
1601
+ $$renderer3.push(`<!--]--></div>`);
1602
+ } else {
1603
+ $$renderer3.push("<!--[-1-->");
1604
+ }
1605
+ $$renderer3.push(`<!--]--> `);
1606
+ if (awaitingReview(task2)) {
1607
+ $$renderer3.push(`<!--[0--><div class="mt-5">`);
1608
+ ReviewPanel($$renderer3, { task: task2, shots: shots() });
1609
+ $$renderer3.push(`<!----></div>`);
1610
+ } else {
1611
+ $$renderer3.push("<!--[-1-->");
1612
+ }
1613
+ $$renderer3.push(`<!--]--> <div class="mt-6">`);
1614
+ StageTrack($$renderer3, { task: task2 });
1615
+ $$renderer3.push(`<!----></div> `);
1616
+ if (e) {
1617
+ $$renderer3.push("<!--[0-->");
1618
+ const l = etaLine(e);
1619
+ $$renderer3.push(`<button type="button"${attr_class(`mt-4 flex items-center gap-2 text-left text-sm hover:underline ${l.tone === "warning" ? "text-warning" : "text-muted-foreground"}`)}>`);
1620
+ Timer($$renderer3, { class: "size-4 shrink-0", "aria-hidden": "true" });
1621
+ $$renderer3.push(`<!---->${escape_html(l.text)}</button>`);
1622
+ } else {
1623
+ $$renderer3.push("<!--[-1-->");
1624
+ }
1625
+ $$renderer3.push(`<!--]--> <div class="mt-6 flex flex-wrap gap-2">`);
1626
+ if (task2.preview) {
1627
+ $$renderer3.push("<!--[0-->");
1628
+ Button($$renderer3, {
1629
+ variant: task2.attention?.owner === "captain" && !task2.pr ? "default" : "outline",
1630
+ onclick: () => reveal("preview"),
1631
+ children: ($$renderer4) => {
1632
+ Monitor_play($$renderer4, {});
1633
+ $$renderer4.push(`<!---->Live preview`);
1634
+ },
1635
+ $$slots: { default: true }
1636
+ });
1637
+ } else {
1638
+ $$renderer3.push("<!--[-1-->");
1639
+ }
1640
+ $$renderer3.push(`<!--]--> `);
1641
+ if (task2.passage.link && task2.passage.link.url !== task2.preview?.url && !awaitingReview(task2)) {
1642
+ $$renderer3.push("<!--[0-->");
1643
+ Button($$renderer3, {
1644
+ variant: "outline",
1645
+ href: task2.passage.link.url,
1646
+ target: "_blank",
1647
+ rel: "noreferrer",
1648
+ children: ($$renderer4) => {
1649
+ $$renderer4.push(`<!---->${escape_html(task2.passage.link.label)}`);
1650
+ External_link($$renderer4, {});
1651
+ $$renderer4.push(`<!---->`);
1652
+ },
1653
+ $$slots: { default: true }
1654
+ });
1655
+ } else {
1656
+ $$renderer3.push("<!--[-1-->");
1657
+ }
1658
+ $$renderer3.push(`<!--]--> `);
1659
+ if (task2.pr) {
1660
+ $$renderer3.push("<!--[0-->");
1661
+ Button($$renderer3, {
1662
+ variant: "outline",
1663
+ href: `/tasks/${stringify(encodeURIComponent(task2.id))}/review`,
1664
+ children: ($$renderer4) => {
1665
+ Compass($$renderer4, {});
1666
+ $$renderer4.push(`<!---->Review the pull request`);
1667
+ },
1668
+ $$slots: { default: true }
1669
+ });
1670
+ } else {
1671
+ $$renderer3.push("<!--[-1-->");
1672
+ }
1673
+ $$renderer3.push(`<!--]--> `);
1674
+ Button($$renderer3, {
1675
+ variant: task2.attention?.owner === "captain" && task2.attention.kind === "decision" ? "default" : "outline",
1676
+ href: `/?chat=${stringify(encodeURIComponent(task2.id))}`,
1677
+ children: ($$renderer4) => {
1678
+ Message_square($$renderer4, {});
1679
+ $$renderer4.push(`<!---->Ask Firstmate about this`);
1680
+ },
1681
+ $$slots: { default: true }
1682
+ });
1683
+ $$renderer3.push(`<!----></div> <dl class="mt-6 grid grid-cols-2 gap-x-6 gap-y-3 border-t pt-5 text-sm"><div><dt class="text-muted-foreground">Pull request</dt> <dd>`);
1684
+ if (task2.pr) {
1685
+ $$renderer3.push(`<!--[0--><a${attr("href", task2.pr.url)} target="_blank" rel="noreferrer" class="text-sea hover:underline">${escape_html(task2.pr.number ? `#${task2.pr.number}` : "Open")}</a> `);
1686
+ if (ev2.pr.available) {
1687
+ $$renderer3.push(`<!--[0--><span class="text-muted-foreground">${escape_html(prState(ev2.pr.value.state, ev2.pr.value.draft))}</span>`);
1688
+ } else {
1689
+ $$renderer3.push("<!--[-1-->");
1690
+ }
1691
+ $$renderer3.push(`<!--]-->`);
1692
+ } else {
1693
+ $$renderer3.push(`<!--[-1--><span class="text-muted-foreground">None yet</span>`);
1694
+ }
1695
+ $$renderer3.push(`<!--]--></dd></div> <div><dt class="text-muted-foreground">Preview</dt> <dd>`);
1696
+ if (task2.preview) {
1697
+ $$renderer3.push(`<!--[0--><a${attr("href", task2.preview.url)} target="_blank" rel="noreferrer" class="inline-flex items-center gap-1 text-sea hover:underline">Reported ${escape_html(ago(task2.preview.reportedAt, live.now))}`);
1698
+ External_link($$renderer3, { class: "size-3", "aria-hidden": "true" });
1699
+ $$renderer3.push(`<!----></a>`);
1700
+ } else {
1701
+ $$renderer3.push(`<!--[-1--><span class="text-muted-foreground">None reported</span>`);
1702
+ }
1703
+ $$renderer3.push(`<!--]--></dd></div> <div><dt class="text-muted-foreground">Last checked</dt> <dd${attr_class(clsx(task2.current && !task2.current.fresh ? "text-warning" : ""))}>`);
1704
+ if (task2.current?.observedAt) {
1705
+ $$renderer3.push(`<!--[0-->${escape_html(ago(task2.current.observedAt, live.now))}${escape_html(task2.current.fresh ? "" : " (cached)")}`);
1706
+ } else {
1707
+ $$renderer3.push(`<!--[-1-->${escape_html(ago(currentFleet()?.collectedAt, live.now))}`);
1708
+ }
1709
+ $$renderer3.push(`<!--]--></dd></div> `);
1710
+ if (task2.worker) {
1711
+ $$renderer3.push(`<!--[0--><div><dt class="text-muted-foreground">Delivery</dt> <dd>${escape_html(task2.worker.mode ?? "Unknown")}${escape_html(task2.worker.yolo ? `, yolo ${task2.worker.yolo}` : "")}</dd></div>`);
1712
+ } else {
1713
+ $$renderer3.push("<!--[-1-->");
1714
+ }
1715
+ $$renderer3.push(`<!--]--></dl>`);
1716
+ }
1717
+ function stagesPanel($$renderer3, task2) {
1718
+ const steps = task2.passage.steps;
1719
+ const any = steps.filter(hasDetail);
1720
+ $$renderer3.push(`<section aria-labelledby="passage"><div class="flex items-baseline justify-between gap-4"><h2 id="passage" class="sr-only">Passage</h2> <p class="text-xs text-muted-foreground">Placed from: ${escape_html(task2.passage.basis)}.</p> `);
1721
+ if (any.length > 1) {
1722
+ $$renderer3.push("<!--[0-->");
1723
+ const allOpen = any.every(isOpen);
1724
+ $$renderer3.push(`<button type="button" class="shrink-0 text-xs text-muted-foreground hover:text-foreground hover:underline">${escape_html(allOpen ? "Fold all" : "Open all")}</button>`);
1725
+ } else {
1726
+ $$renderer3.push("<!--[-1-->");
1727
+ }
1728
+ $$renderer3.push(`<!--]--></div> <ol class="mt-5"><!--[-->`);
1729
+ const each_array_6 = ensure_array_like(steps);
1730
+ for (let i = 0, $$length = each_array_6.length; i < $$length; i++) {
1731
+ let s = each_array_6[i];
1732
+ const done = s.state === "done";
1733
+ const now = s.state === "current";
1734
+ const finished = now && task2.status === "landed" && !s.failed;
1735
+ const open = hasDetail(s) && isOpen(s);
1736
+ const gist = open ? null : stepGist(s, task2, ev());
1737
+ $$renderer3.push(`<li${attr_class(`relative flex gap-4 ${open ? "pb-8" : "pb-5"}`)}${attr("data-stage", s.key)}${attr("data-open", open)}>`);
1738
+ if (i < steps.length - 1) {
1739
+ $$renderer3.push(`<!--[0--><span${attr_class(`absolute top-7 bottom-0 left-[11px] ${done ? "w-0.5 bg-foreground/40" : "w-0 border-l border-dotted border-input"}`)}></span>`);
1740
+ } else {
1741
+ $$renderer3.push("<!--[-1-->");
1742
+ }
1743
+ $$renderer3.push(`<!--]--> <span${attr_class(`relative z-10 mt-0.5 grid size-6 shrink-0 place-items-center rounded-full text-xs font-medium ${done ? "bg-foreground text-background" : now ? t() === "trouble" || s.failed ? "bg-danger text-white" : t() === "you" ? "bg-sea text-white dark:text-slate-950" : finished ? "bg-success text-white dark:text-slate-950" : "bg-foreground text-background ring-4 ring-foreground/15" : s.state === "skipped" ? "border border-dashed bg-background text-muted-foreground" : "border bg-background text-muted-foreground"}`)}>`);
1744
+ if (now && !finished && task2.busy) {
1745
+ $$renderer3.push("<!--[0-->");
1746
+ BusyRing($$renderer3, { class: "bg-foreground" });
1747
+ } else {
1748
+ $$renderer3.push("<!--[-1-->");
1749
+ }
1750
+ $$renderer3.push(`<!--]--> `);
1751
+ if (done || finished) {
1752
+ $$renderer3.push("<!--[0-->");
1753
+ Check($$renderer3, { class: "size-3.5", "aria-hidden": "true" });
1754
+ } else if (s.failed) {
1755
+ $$renderer3.push("<!--[1-->");
1756
+ X($$renderer3, { class: "size-3.5", "aria-hidden": "true" });
1757
+ } else {
1758
+ $$renderer3.push(`<!--[-1-->${escape_html(i + 1)}`);
1759
+ }
1760
+ $$renderer3.push(`<!--]--></span> <div class="min-w-0 flex-1"><button type="button" class="group flex w-full min-w-0 items-baseline gap-2 rounded-md text-left disabled:cursor-default"${attr("disabled", !hasDetail(s), true)}${attr("aria-expanded", hasDetail(s) ? open : void 0)}${attr("aria-controls", hasDetail(s) ? `stage-${s.key}` : void 0)}><span${attr_class(`shrink-0 font-display text-[1.12rem] font-medium group-enabled:group-hover:underline ${s.state === "upcoming" || s.state === "skipped" ? "text-muted-foreground italic" : ""}`)}>${escape_html(s.label)}</span> `);
1761
+ if (s.state === "skipped") {
1762
+ $$renderer3.push(`<!--[0--><span class="shrink-0 text-sm text-muted-foreground">skipped</span>`);
1763
+ } else {
1764
+ $$renderer3.push("<!--[-1-->");
1765
+ }
1766
+ $$renderer3.push(`<!--]--> `);
1767
+ if (now && s.failed) {
1768
+ $$renderer3.push(`<!--[0--><span class="shrink-0 text-sm text-danger">failed</span>`);
1769
+ } else if (now && !finished) {
1770
+ $$renderer3.push(`<!--[1--><span${attr_class(`shrink-0 text-sm ${stringify(t() === "normal" || t() === "landed" ? "text-muted-foreground" : textClass[t()])}`)}>${escape_html(t() === "trouble" ? `${task2.statusLabel.toLowerCase()} here` : t() === "you" ? "waiting on you" : t() === "firstmate" ? "waiting on Firstmate" : task2.status === "done" ? "finished, with Firstmate" : "in progress")}</span>`);
1771
+ } else {
1772
+ $$renderer3.push("<!--[-1-->");
1773
+ }
1774
+ $$renderer3.push(`<!--]--> `);
1775
+ if (gist) {
1776
+ $$renderer3.push(`<!--[0--><span class="min-w-0 truncate text-sm text-muted-foreground"${attr("title", gist)}>· ${escape_html(gist)}</span>`);
1777
+ } else {
1778
+ $$renderer3.push("<!--[-1-->");
1779
+ }
1780
+ $$renderer3.push(`<!--]--> `);
1781
+ if (hasDetail(s)) {
1782
+ $$renderer3.push("<!--[0-->");
1783
+ Chevron_right($$renderer3, {
1784
+ class: `ml-auto size-4 shrink-0 self-center text-muted-foreground transition-transform ${open ? "rotate-90" : ""}`,
1785
+ "aria-hidden": "true"
1786
+ });
1787
+ } else {
1788
+ $$renderer3.push("<!--[-1-->");
1789
+ }
1790
+ $$renderer3.push(`<!--]--></button> `);
1791
+ if (open) {
1792
+ $$renderer3.push(`<!--[0--><div${attr("id", `stage-${stringify(s.key)}`)}>`);
1793
+ if (s.note) {
1794
+ $$renderer3.push(`<!--[0--><p class="mt-1 text-xs text-muted-foreground">${escape_html(s.note)}</p>`);
1795
+ } else {
1796
+ $$renderer3.push("<!--[-1-->");
1797
+ }
1798
+ $$renderer3.push(`<!--]--> `);
1799
+ if (done || now) {
1800
+ $$renderer3.push(`<!--[0--><div class="mt-3 space-y-4"><!--[-->`);
1801
+ const each_array_7 = ensure_array_like(s.evidence);
1802
+ for (let $$index_6 = 0, $$length2 = each_array_7.length; $$index_6 < $$length2; $$index_6++) {
1803
+ let id2 = each_array_7[$$index_6];
1804
+ blockFor(id2)?.($$renderer3, s, id2);
1805
+ $$renderer3.push(`<!---->`);
1806
+ }
1807
+ $$renderer3.push(`<!--]--> <!--[-->`);
1808
+ const each_array_8 = ensure_array_like(stepEntries(s.key));
1809
+ for (let $$index_7 = 0, $$length2 = each_array_8.length; $$index_7 < $$length2; $$index_7++) {
1810
+ let e = each_array_8[$$index_7];
1811
+ $$renderer3.push(`<div data-slot="step.evidence"><h4 class="mb-2 text-sm font-medium">${escape_html(e.title)}</h4> `);
1812
+ SlotContent($$renderer3, { entry: e, now: live.now });
1813
+ $$renderer3.push(`<!----></div>`);
1814
+ }
1815
+ $$renderer3.push(`<!--]--></div>`);
1816
+ } else {
1817
+ $$renderer3.push("<!--[-1-->");
1818
+ }
1819
+ $$renderer3.push(`<!--]--></div>`);
1820
+ } else {
1821
+ $$renderer3.push("<!--[-1-->");
1822
+ }
1823
+ $$renderer3.push(`<!--]--> <!--[-->`);
1824
+ const each_array_9 = ensure_array_like(taskSections().afterStep[s.key] ?? []);
1825
+ for (let $$index_8 = 0, $$length2 = each_array_9.length; $$index_8 < $$length2; $$index_8++) {
1826
+ let e = each_array_9[$$index_8];
1827
+ $$renderer3.push(`<div class="mt-4">`);
1828
+ pluginSection($$renderer3, e);
1829
+ $$renderer3.push(`<!----></div>`);
1830
+ }
1831
+ $$renderer3.push(`<!--]--></div></li>`);
1832
+ }
1833
+ $$renderer3.push(`<!--]--></ol></section>`);
1834
+ }
1835
+ function previewPanel($$renderer3, task2) {
1836
+ if (task2.preview) {
1837
+ $$renderer3.push(`<!--[0--><section aria-labelledby="live-preview"><h2 id="live-preview" class="sr-only">Live preview</h2> `);
1838
+ if (active() === "preview" && !full()) {
1839
+ $$renderer3.push("<!--[0-->");
1840
+ LivePreview($$renderer3, {
1841
+ taskId: task2.id,
1842
+ feedback: task2.status !== "landed",
1843
+ onfullscreen: () => show("preview", true)
1844
+ });
1845
+ } else {
1846
+ $$renderer3.push("<!--[-1-->");
1847
+ }
1848
+ $$renderer3.push(`<!--]--></section>`);
1849
+ } else {
1850
+ $$renderer3.push("<!--[-1-->");
1851
+ }
1852
+ $$renderer3.push(`<!--]-->`);
1853
+ }
1854
+ function screenshotsPanel($$renderer3) {
1855
+ if (shots().length) {
1856
+ $$renderer3.push(`<!--[0--><div class="flex flex-wrap gap-4"><!--[-->`);
1857
+ const each_array_10 = ensure_array_like(shots());
1858
+ for (let i = 0, $$length = each_array_10.length; i < $$length; i++) {
1859
+ let s = each_array_10[i];
1860
+ $$renderer3.push(`<button type="button" class="w-48 shrink-0 cursor-zoom-in text-left"${attr("aria-label", `Enlarge ${stringify(s.name)}`)}><img${attr("src", s.url)}${attr("alt", s.name)} loading="lazy" class="aspect-[16/10] w-full rounded-lg border object-cover object-top"/> <p class="mt-1.5 truncate text-xs text-muted-foreground">${escape_html(s.name)}${escape_html(s.modifiedAt ? ` · ${ago(s.modifiedAt, live.now)}` : "")}</p></button>`);
1861
+ }
1862
+ $$renderer3.push(`<!--]--></div> `);
1863
+ if (ev()) {
1864
+ $$renderer3.push("<!--[0-->");
1865
+ source($$renderer3, ev().screenshots);
1866
+ } else {
1867
+ $$renderer3.push("<!--[-1-->");
1868
+ }
1869
+ $$renderer3.push(`<!--]-->`);
1870
+ } else {
1871
+ $$renderer3.push(`<!--[-1--><div class="grid min-h-60 place-items-center rounded-xl border border-dashed bg-muted/30 p-6 text-center text-muted-foreground"><div>`);
1872
+ Image_off($$renderer3, { class: "mx-auto size-6", "aria-hidden": "true" });
1873
+ $$renderer3.push(`<!----> <p class="mt-2 text-sm font-medium">No screenshots saved</p> <p class="mt-1 text-xs">${escape_html(ev() && !ev().screenshots.available ? ev().screenshots.reason : "The worker has not saved any screenshots for this task.")}</p></div></div>`);
1874
+ }
1875
+ $$renderer3.push(`<!--]-->`);
1876
+ }
1877
+ function logPanel($$renderer3, task2, detail2) {
1878
+ $$renderer3.push(`<section class="max-w-3xl space-y-4" aria-labelledby="ships-log"><div class="rounded-xl border"><div class="flex flex-wrap items-baseline gap-x-2 px-4 py-3 text-sm"><h2 id="ships-log" class="font-display text-[1.2rem] font-medium tracking-[0.1em] text-muted-foreground [font-variant-caps:all-small-caps]">Ship’s log</h2> <span class="text-muted-foreground">what the crew reported, oldest first (history, not current state)</span></div> <div class="border-t p-4">`);
1879
+ if (detail2.timeline.available) {
1880
+ $$renderer3.push(`<!--[0--><ol class="space-y-2 text-sm"><!--[-->`);
1881
+ const each_array_14 = ensure_array_like(detail2.timeline.value);
1882
+ for (let i = 0, $$length = each_array_14.length; i < $$length; i++) {
1883
+ let e = each_array_14[i];
1884
+ const plain = e.kind === "status" ? plainStatus(e.state, e.text) : null;
1885
+ $$renderer3.push(`<li class="grid grid-cols-[5.5rem_minmax(0,1fr)] gap-3"><time class="tabular text-xs text-muted-foreground"${attr("datetime", e.at)}${attr("title", e.at)}>${escape_html(clock(e.at))}</time> <div class="min-w-0 break-words">`);
1886
+ if (plain) {
1887
+ $$renderer3.push(`<!--[0--><p>${escape_html(plain)}</p> `);
1888
+ RawDetails($$renderer3, {
1889
+ raw: e.state ? `${e.state}: ${e.text.trim()}` : e.text,
1890
+ plain
1891
+ });
1892
+ $$renderer3.push(`<!---->`);
1893
+ } else {
1894
+ $$renderer3.push(`<!--[-1--><p>${escape_html(entryText(e))}</p>`);
1895
+ }
1896
+ $$renderer3.push(`<!--]--></div></li>`);
1897
+ }
1898
+ $$renderer3.push(`<!--]--></ol> `);
1899
+ source($$renderer3, detail2.timeline);
1900
+ $$renderer3.push(`<!---->`);
1901
+ } else {
1902
+ $$renderer3.push("<!--[-1-->");
1903
+ unavailable($$renderer3, detail2.timeline);
1904
+ }
1905
+ $$renderer3.push(`<!--]--></div></div> `);
1906
+ OutputInspector($$renderer3, { task: task2, live: active() === "log" });
1907
+ $$renderer3.push(`<!----> `);
1908
+ if (detail2.gaps.length) {
1909
+ $$renderer3.push(`<!--[0--><div class="rounded-xl border border-dashed p-4 text-sm"><p class="font-medium">Not available yet</p> <ul class="mt-2 list-disc space-y-1 pl-5 text-muted-foreground"><!--[-->`);
1910
+ const each_array_15 = ensure_array_like(detail2.gaps);
1911
+ for (let $$index_15 = 0, $$length = each_array_15.length; $$index_15 < $$length; $$index_15++) {
1912
+ let g = each_array_15[$$index_15];
1913
+ $$renderer3.push(`<li>${escape_html(g)}</li>`);
1914
+ }
1915
+ $$renderer3.push(`<!--]--></ul></div>`);
1916
+ } else {
1917
+ $$renderer3.push("<!--[-1-->");
1918
+ }
1919
+ $$renderer3.push(`<!--]--></section>`);
1920
+ }
1921
+ let $$settled = true;
1922
+ let $$inner_renderer;
1923
+ function $$render_inner($$renderer3) {
1924
+ head("13zy71l", $$renderer3, ($$renderer4) => {
1925
+ $$renderer4.title(($$renderer5) => {
1926
+ $$renderer5.push(`<title>${escape_html(task()?.title ?? id())} · Wheelhouse</title>`);
1927
+ });
1928
+ });
1929
+ $$renderer3.push(`<main class="px-4 pt-4 pb-20 sm:px-6 lg:px-10">`);
1930
+ if (!task() || !ev() || !detail()) {
1931
+ $$renderer3.push(`<!--[0--><a${attr("href", back())} class="inline-flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground">`);
1932
+ Arrow_left($$renderer3, { class: "size-4", "aria-hidden": "true" });
1933
+ $$renderer3.push(`<!---->Harbour</a> <p class="surface mt-6 max-w-3xl p-6 text-muted-foreground">${escape_html(data.problem ?? "Loading…")}</p>`);
1934
+ } else {
1935
+ $$renderer3.push(`<!--[-1--><div class="grid gap-8 lg:grid-cols-[minmax(19rem,25rem)_minmax(0,1fr)] xl:grid-cols-[26rem_minmax(0,1fr)] xl:gap-12"><aside class="no-scrollbar min-w-0 self-start rounded-lg border bg-panel px-6 pt-1 pb-6 lg:sticky lg:top-[4.5rem] lg:max-h-[calc(100dvh-5.5rem)] lg:overflow-y-auto lg:pb-6" aria-label="Overview"><a${attr("href", back())} class="inline-flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground">`);
1936
+ Arrow_left($$renderer3, { class: "size-4", "aria-hidden": "true" });
1937
+ $$renderer3.push(`<!---->Harbour</a> `);
1938
+ overview($$renderer3, task(), ev(), detail());
1939
+ $$renderer3.push(`<!----> `);
1940
+ if (consoleInImage(task())) {
1941
+ $$renderer3.push(`<!--[0--><section class="mt-6 border-t pt-5" aria-labelledby="live-terminal" data-terminal=""><h2 id="live-terminal" class="text-sm font-medium"><button type="button" class="group flex w-full items-center gap-2 text-left"${attr("aria-expanded", terminalOpen)} aria-controls="live-terminal-body"><span class="group-hover:underline">Live terminal</span> `);
1942
+ Chevron_right($$renderer3, {
1943
+ class: `ml-auto size-4 shrink-0 text-muted-foreground transition-transform ${"rotate-90"}`,
1944
+ "aria-hidden": "true"
1945
+ });
1946
+ $$renderer3.push(`<!----></button></h2> `);
1947
+ {
1948
+ $$renderer3.push(`<!--[0--><div id="live-terminal-body" class="mt-3">`);
1949
+ ConsoleWindow($$renderer3, { task: task(), lines: 12, class: "rounded-xl" });
1950
+ $$renderer3.push(`<!----></div>`);
1951
+ }
1952
+ $$renderer3.push(`<!--]--></section>`);
1953
+ } else {
1954
+ $$renderer3.push("<!--[-1-->");
1955
+ }
1956
+ $$renderer3.push(`<!--]--> `);
1957
+ if (hasTime(task(), detail())) {
1958
+ $$renderer3.push(`<!--[0--><div class="mt-6 scroll-mt-20 border-t pt-5" data-time="">`);
1959
+ timePanel($$renderer3, task(), detail());
1960
+ $$renderer3.push(`<!----></div>`);
1961
+ } else {
1962
+ $$renderer3.push("<!--[-1-->");
1963
+ }
1964
+ $$renderer3.push(`<!--]--></aside> <div class="surface min-w-0 scroll-mt-14 px-5 pb-8 sm:px-6"><div class="sticky top-14 z-20 -mx-5 rounded-t-lg bg-card px-5 pt-1 sm:-mx-6 sm:px-6"><div class="no-scrollbar flex items-center gap-1 overflow-x-auto border-b" role="tablist" aria-label="Task detail"><!--[-->`);
1965
+ const each_array_16 = ensure_array_like(tabs());
1966
+ for (let i = 0, $$length = each_array_16.length; i < $$length; i++) {
1967
+ let tab = each_array_16[i];
1968
+ $$renderer3.push(`<button type="button" role="tab"${attr("id", `tab-${stringify(tab.id)}`)}${attr("aria-selected", active() === tab.id)}${attr("aria-controls", `panel-${stringify(tab.id)}`)}${attr("tabindex", active() === tab.id ? 0 : -1)}${attr_class(`-mb-px inline-flex shrink-0 items-center gap-1.5 border-b-2 px-3 py-2.5 text-base font-semibold tracking-[0.1em] whitespace-nowrap transition-colors [font-variant-caps:all-small-caps] ${active() === tab.id ? "border-brass text-foreground" : "border-transparent text-muted-foreground hover:text-foreground"}`)}>${escape_html(tab.label)}`);
1969
+ if (tab.count) {
1970
+ $$renderer3.push(`<!--[0--><span class="rounded-full bg-muted px-1.5 text-xs text-muted-foreground tabular-nums">${escape_html(tab.count)}</span>`);
1971
+ } else {
1972
+ $$renderer3.push("<!--[-1-->");
1973
+ }
1974
+ $$renderer3.push(`<!--]--></button>`);
1975
+ }
1976
+ $$renderer3.push(`<!--]--></div></div> <!--[-->`);
1977
+ const each_array_17 = ensure_array_like(tabs());
1978
+ for (let $$index_17 = 0, $$length = each_array_17.length; $$index_17 < $$length; $$index_17++) {
1979
+ let tab = each_array_17[$$index_17];
1980
+ $$renderer3.push(`<div${attr("id", `panel-${stringify(tab.id)}`)} role="tabpanel"${attr("aria-labelledby", `tab-${stringify(tab.id)}`)} tabindex="0" class="pt-6 outline-none"${attr("hidden", active() !== tab.id)}>`);
1981
+ if (tab.id === "stages") {
1982
+ $$renderer3.push("<!--[0-->");
1983
+ stagesPanel($$renderer3, task());
1984
+ } else if (tab.id === "preview") {
1985
+ $$renderer3.push("<!--[1-->");
1986
+ previewPanel($$renderer3, task());
1987
+ } else if (tab.id === "screenshots") {
1988
+ $$renderer3.push("<!--[2-->");
1989
+ screenshotsPanel($$renderer3);
1990
+ } else if (tab.id === "log") {
1991
+ $$renderer3.push("<!--[3-->");
1992
+ logPanel($$renderer3, task(), detail());
1993
+ } else if (tab.id === "talk") {
1994
+ $$renderer3.push("<!--[4-->");
1995
+ ConversationPanel($$renderer3, { talk: detail().build.conversation, now: live.now });
1996
+ } else if (tab.id === "checks") {
1997
+ $$renderer3.push("<!--[5-->");
1998
+ ChecksReport($$renderer3, { checks: detail().build.checks, taskId: task().id });
1999
+ } else if (tab.id === "docs") {
2000
+ $$renderer3.push("<!--[6-->");
2001
+ DocsPanel($$renderer3, { docs: detail().build.docs, taskId: task().id });
2002
+ } else {
2003
+ $$renderer3.push("<!--[-1-->");
2004
+ const entry = pluginTabs().find((e) => `plugin:${e.key}` === tab.id);
2005
+ if (entry) {
2006
+ $$renderer3.push("<!--[0-->");
2007
+ pluginSection($$renderer3, entry);
2008
+ } else {
2009
+ $$renderer3.push("<!--[-1-->");
2010
+ }
2011
+ $$renderer3.push(`<!--]-->`);
2012
+ }
2013
+ $$renderer3.push(`<!--]--></div>`);
2014
+ }
2015
+ $$renderer3.push(`<!--]--></div></div> `);
2016
+ if (full() && task().preview) {
2017
+ $$renderer3.push("<!--[0-->");
2018
+ PreviewStudio($$renderer3, {
2019
+ taskId: task().id,
2020
+ title: task().title,
2021
+ url: task().preview.url,
2022
+ feedback: task().status !== "landed"
2023
+ });
2024
+ } else {
2025
+ $$renderer3.push("<!--[-1-->");
2026
+ }
2027
+ $$renderer3.push(`<!--]--> `);
2028
+ Lightbox($$renderer3, {
2029
+ shots: shots(),
2030
+ get index() {
2031
+ return shotIndex;
2032
+ },
2033
+ set index($$value) {
2034
+ shotIndex = $$value;
2035
+ $$settled = false;
2036
+ }
2037
+ });
2038
+ $$renderer3.push(`<!----> `);
2039
+ DiffDialog($$renderer3, {
2040
+ taskId: task().id,
2041
+ get file() {
2042
+ return diffFile;
2043
+ },
2044
+ set file($$value) {
2045
+ diffFile = $$value;
2046
+ $$settled = false;
2047
+ }
2048
+ });
2049
+ $$renderer3.push(`<!---->`);
2050
+ }
2051
+ $$renderer3.push(`<!--]--></main>`);
2052
+ }
2053
+ do {
2054
+ $$settled = true;
2055
+ $$inner_renderer = $$renderer2.copy();
2056
+ $$render_inner($$inner_renderer);
2057
+ } while (!$$settled);
2058
+ $$renderer2.subsume($$inner_renderer);
2059
+ });
2060
+ }
2061
+
2062
+ export { _page as default };
2063
+ //# sourceMappingURL=_page.svelte.js-Dr2wwDJG.js.map