claude-mux 0.30.13 → 0.30.14

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 (361) hide show
  1. package/CLAUDE.md +14 -3
  2. package/dist/fleet-places.d.ts +7 -1
  3. package/dist/fleet-places.d.ts.map +1 -1
  4. package/dist/fleet-places.js +14 -1
  5. package/dist/fleet-places.js.map +1 -1
  6. package/dist/server/dictation-marks.d.ts.map +1 -1
  7. package/dist/server/dictation-marks.js +23 -1
  8. package/dist/server/dictation-marks.js.map +1 -1
  9. package/dist/transcript/parser.d.ts +7 -0
  10. package/dist/transcript/parser.d.ts.map +1 -1
  11. package/dist/transcript/parser.js +19 -3
  12. package/dist/transcript/parser.js.map +1 -1
  13. package/dist/transcript/past-sessions.d.ts.map +1 -1
  14. package/dist/transcript/past-sessions.js +4 -1
  15. package/dist/transcript/past-sessions.js.map +1 -1
  16. package/dist/utils/version.d.ts +1 -1
  17. package/dist/utils/version.js +1 -1
  18. package/dist/web/client/_app/immutable/chunks/{sULMfRFG.js → B4FaHfAQ.js} +2 -2
  19. package/dist/web/client/_app/immutable/chunks/{sULMfRFG.js.map → B4FaHfAQ.js.map} +1 -1
  20. package/dist/web/client/_app/immutable/chunks/{W5_HMZ5E.js → B5Hkb2u5.js} +2 -2
  21. package/dist/web/client/_app/immutable/chunks/{W5_HMZ5E.js.map → B5Hkb2u5.js.map} +1 -1
  22. package/{web/.svelte-kit/output/client/_app/immutable/chunks/BQzv8cqz.js → dist/web/client/_app/immutable/chunks/BOpEbBRb.js} +2 -2
  23. package/{web/.svelte-kit/output/client/_app/immutable/chunks/BQzv8cqz.js.map → dist/web/client/_app/immutable/chunks/BOpEbBRb.js.map} +1 -1
  24. package/dist/web/client/_app/immutable/chunks/{Q5yhzux8.js → BeYjnogg.js} +2 -2
  25. package/{web/.svelte-kit/output/client/_app/immutable/chunks/Q5yhzux8.js.map → dist/web/client/_app/immutable/chunks/BeYjnogg.js.map} +1 -1
  26. package/dist/web/client/_app/immutable/chunks/{VceCNUd7.js → C00rm3mY.js} +2 -2
  27. package/{web/.svelte-kit/output/client/_app/immutable/chunks/VceCNUd7.js.map → dist/web/client/_app/immutable/chunks/C00rm3mY.js.map} +1 -1
  28. package/dist/web/client/_app/immutable/chunks/{CtjkAirr.js → CKg7gbPm.js} +9 -9
  29. package/dist/web/client/_app/immutable/chunks/CKg7gbPm.js.map +1 -0
  30. package/dist/web/client/_app/immutable/chunks/CPEphjdk.js +4 -0
  31. package/dist/web/client/_app/immutable/chunks/CPEphjdk.js.map +1 -0
  32. package/dist/web/client/_app/immutable/chunks/{BQQ3-rqs.js → CPlFo88J.js} +2 -2
  33. package/dist/web/client/_app/immutable/chunks/{BQQ3-rqs.js.map → CPlFo88J.js.map} +1 -1
  34. package/dist/web/client/_app/immutable/chunks/{BvX4FYxp.js → CtnjySwS.js} +2 -2
  35. package/dist/web/client/_app/immutable/chunks/{BvX4FYxp.js.map → CtnjySwS.js.map} +1 -1
  36. package/dist/web/client/_app/immutable/chunks/{XgSsj0QY.js → D3EW0jRH.js} +2 -2
  37. package/{web/.svelte-kit/output/client/_app/immutable/chunks/XgSsj0QY.js.map → dist/web/client/_app/immutable/chunks/D3EW0jRH.js.map} +1 -1
  38. package/dist/web/client/_app/immutable/chunks/{CtlIfY1C.js → D3umr-Qr.js} +2 -2
  39. package/{web/.svelte-kit/output/client/_app/immutable/chunks/CtlIfY1C.js.map → dist/web/client/_app/immutable/chunks/D3umr-Qr.js.map} +1 -1
  40. package/dist/web/client/_app/immutable/chunks/{CM0CI9GL.js → D8-_Y-M6.js} +3 -3
  41. package/dist/web/client/_app/immutable/chunks/{CM0CI9GL.js.map → D8-_Y-M6.js.map} +1 -1
  42. package/dist/web/client/_app/immutable/chunks/{cvsGFvDx.js → DDvK7Qo9.js} +2 -2
  43. package/{web/.svelte-kit/output/client/_app/immutable/chunks/cvsGFvDx.js.map → dist/web/client/_app/immutable/chunks/DDvK7Qo9.js.map} +1 -1
  44. package/dist/web/client/_app/immutable/chunks/{CiU8KBun.js → _VFi-7U7.js} +2 -2
  45. package/dist/web/client/_app/immutable/chunks/{CiU8KBun.js.map → _VFi-7U7.js.map} +1 -1
  46. package/dist/web/client/_app/immutable/chunks/{DlENCZqZ.js → mQ6hkLuy.js} +2 -2
  47. package/dist/web/client/_app/immutable/chunks/{DlENCZqZ.js.map → mQ6hkLuy.js.map} +1 -1
  48. package/dist/web/client/_app/immutable/entry/{app.BwTbN8wB.js → app.CTFza_OS.js} +3 -3
  49. package/{web/.svelte-kit/output/client/_app/immutable/entry/app.BwTbN8wB.js.map → dist/web/client/_app/immutable/entry/app.CTFza_OS.js.map} +1 -1
  50. package/dist/web/client/_app/immutable/entry/start.B-zlkyrt.js +2 -0
  51. package/dist/web/client/_app/immutable/entry/start.B-zlkyrt.js.map +1 -0
  52. package/{web/.svelte-kit/output/client/_app/immutable/nodes/0.BnHV-ElR.js → dist/web/client/_app/immutable/nodes/0.Cztuq8Ih.js} +2 -2
  53. package/dist/web/client/_app/immutable/nodes/{0.BnHV-ElR.js.map → 0.Cztuq8Ih.js.map} +1 -1
  54. package/dist/web/client/_app/immutable/nodes/{1.Dc3ryOCf.js → 1.BOOL0V7K.js} +2 -2
  55. package/dist/web/client/_app/immutable/nodes/{1.Dc3ryOCf.js.map → 1.BOOL0V7K.js.map} +1 -1
  56. package/dist/web/client/_app/immutable/nodes/{2.DUrpAceY.js → 2.CArUpZNe.js} +2 -2
  57. package/dist/web/client/_app/immutable/nodes/{2.DUrpAceY.js.map → 2.CArUpZNe.js.map} +1 -1
  58. package/dist/web/client/_app/immutable/nodes/{3.BaCofjAn.js → 3.DSvIWalA.js} +2 -2
  59. package/dist/web/client/_app/immutable/nodes/{3.BaCofjAn.js.map → 3.DSvIWalA.js.map} +1 -1
  60. package/dist/web/client/_app/immutable/nodes/{4.v1wYkrvS.js → 4.H6RMG_cy.js} +2 -2
  61. package/dist/web/client/_app/immutable/nodes/{4.v1wYkrvS.js.map → 4.H6RMG_cy.js.map} +1 -1
  62. package/dist/web/client/_app/immutable/nodes/{5.Bn4A77jK.js → 5.BHSt0Suo.js} +2 -2
  63. package/dist/web/client/_app/immutable/nodes/{5.Bn4A77jK.js.map → 5.BHSt0Suo.js.map} +1 -1
  64. package/dist/web/client/_app/immutable/nodes/{6.C2hEoITj.js → 6.CzLoA0w7.js} +2 -2
  65. package/dist/web/client/_app/immutable/nodes/{6.C2hEoITj.js.map → 6.CzLoA0w7.js.map} +1 -1
  66. package/dist/web/client/_app/immutable/nodes/{7.BcHOjWdp.js → 7.fqq2vVa9.js} +2 -2
  67. package/dist/web/client/_app/immutable/nodes/{7.BcHOjWdp.js.map → 7.fqq2vVa9.js.map} +1 -1
  68. package/dist/web/client/_app/immutable/nodes/{8.D7NtqIYy.js → 8.DNFFjTla.js} +2 -2
  69. package/dist/web/client/_app/immutable/nodes/{8.D7NtqIYy.js.map → 8.DNFFjTla.js.map} +1 -1
  70. package/dist/web/client/_app/immutable/nodes/{9.D-211z9-.js → 9.0kMPrp2-.js} +2 -2
  71. package/dist/web/client/_app/immutable/nodes/{9.D-211z9-.js.map → 9.0kMPrp2-.js.map} +1 -1
  72. package/dist/web/client/_app/version.json +1 -1
  73. package/dist/web/server/chunks/{0-CvglVGCY.js → 0-B_KxXX-N.js} +14 -14
  74. package/dist/web/server/chunks/{0-CvglVGCY.js.map → 0-B_KxXX-N.js.map} +1 -1
  75. package/dist/web/server/chunks/{1-D-gJDFrG.js → 1-BmEKuUDK.js} +4 -4
  76. package/dist/web/server/chunks/{1-D-gJDFrG.js.map → 1-BmEKuUDK.js.map} +1 -1
  77. package/dist/web/server/chunks/{2-BCmEU5Qq.js → 2-BJ3dzws2.js} +13 -13
  78. package/dist/web/server/chunks/{2-BCmEU5Qq.js.map → 2-BJ3dzws2.js.map} +1 -1
  79. package/dist/web/server/chunks/{3-CHn5Kw-T.js → 3-CLYKGzT3.js} +10 -10
  80. package/dist/web/server/chunks/{3-CHn5Kw-T.js.map → 3-CLYKGzT3.js.map} +1 -1
  81. package/dist/web/server/chunks/{4-Cxg7VcZ7.js → 4-CsoWHVgX.js} +12 -12
  82. package/dist/web/server/chunks/{4-Cxg7VcZ7.js.map → 4-CsoWHVgX.js.map} +1 -1
  83. package/dist/web/server/chunks/{5-DSgvnHF_.js → 5-oPM6ncgT.js} +9 -9
  84. package/dist/web/server/chunks/{5-DSgvnHF_.js.map → 5-oPM6ncgT.js.map} +1 -1
  85. package/dist/web/server/chunks/{6-B0rymWRR.js → 6-gvgju2ZN.js} +5 -5
  86. package/dist/web/server/chunks/{6-B0rymWRR.js.map → 6-gvgju2ZN.js.map} +1 -1
  87. package/dist/web/server/chunks/{7-CNomBJux.js → 7-D8hylKrz.js} +10 -10
  88. package/dist/web/server/chunks/{7-CNomBJux.js.map → 7-D8hylKrz.js.map} +1 -1
  89. package/dist/web/server/chunks/{8-TYbX-1bO.js → 8-Br4hTtby.js} +12 -12
  90. package/dist/web/server/chunks/{8-TYbX-1bO.js.map → 8-Br4hTtby.js.map} +1 -1
  91. package/dist/web/server/chunks/{9-XGQQvTLc.js → 9-9uvmfsEs.js} +9 -9
  92. package/dist/web/server/chunks/{9-XGQQvTLc.js.map → 9-9uvmfsEs.js.map} +1 -1
  93. package/dist/web/server/chunks/{_layout.svelte-yrPX5VFm.js → _layout.svelte-DamAAFpK.js} +58 -37
  94. package/dist/web/server/chunks/_layout.svelte-DamAAFpK.js.map +1 -0
  95. package/dist/web/server/chunks/{_page.svelte-C_kFA0Lq.js → _page.svelte-DFE4jmT9.js} +4 -4
  96. package/dist/web/server/chunks/{_page.svelte-C_kFA0Lq.js.map → _page.svelte-DFE4jmT9.js.map} +1 -1
  97. package/dist/web/server/chunks/{_page.svelte-DvxpwsgS.js → _page.svelte-DHPGbCS1.js} +6 -6
  98. package/dist/web/server/chunks/{_page.svelte-DvxpwsgS.js.map → _page.svelte-DHPGbCS1.js.map} +1 -1
  99. package/dist/web/server/chunks/{_server.ts-Dz01Gvhk.js → _server.ts-0RT4n9LX.js} +2 -2
  100. package/dist/web/server/chunks/{_server.ts-Dz01Gvhk.js.map → _server.ts-0RT4n9LX.js.map} +1 -1
  101. package/dist/web/server/chunks/{_server.ts-D2Tvcncu.js → _server.ts-3kbpguQ1.js} +3 -3
  102. package/dist/web/server/chunks/{_server.ts-D2Tvcncu.js.map → _server.ts-3kbpguQ1.js.map} +1 -1
  103. package/dist/web/server/chunks/{_server.ts-TN_Ka6cR.js → _server.ts-4m17ESHV.js} +2 -2
  104. package/dist/web/server/chunks/{_server.ts-TN_Ka6cR.js.map → _server.ts-4m17ESHV.js.map} +1 -1
  105. package/dist/web/server/chunks/{_server.ts-Bj1Eewby.js → _server.ts-8Bs2jUgD.js} +2 -2
  106. package/dist/web/server/chunks/{_server.ts-Bj1Eewby.js.map → _server.ts-8Bs2jUgD.js.map} +1 -1
  107. package/dist/web/server/chunks/{_server.ts-BWVtnpJh.js → _server.ts-95cbXKdT.js} +3 -3
  108. package/dist/web/server/chunks/{_server.ts-BWVtnpJh.js.map → _server.ts-95cbXKdT.js.map} +1 -1
  109. package/dist/web/server/chunks/{_server.ts-CyOA1rOq.js → _server.ts-B56-XF-Z.js} +3 -3
  110. package/dist/web/server/chunks/{_server.ts-CyOA1rOq.js.map → _server.ts-B56-XF-Z.js.map} +1 -1
  111. package/dist/web/server/chunks/{_server.ts-1ZhqL5o8.js → _server.ts-BAC_No-1.js} +2 -2
  112. package/dist/web/server/chunks/{_server.ts-1ZhqL5o8.js.map → _server.ts-BAC_No-1.js.map} +1 -1
  113. package/dist/web/server/chunks/{_server.ts-ji7L8HUR.js → _server.ts-BCpfYsYw.js} +3 -3
  114. package/dist/web/server/chunks/{_server.ts-ji7L8HUR.js.map → _server.ts-BCpfYsYw.js.map} +1 -1
  115. package/dist/web/server/chunks/{_server.ts-9iRpDv9e.js → _server.ts-BGToJuLp.js} +2 -2
  116. package/dist/web/server/chunks/{_server.ts-9iRpDv9e.js.map → _server.ts-BGToJuLp.js.map} +1 -1
  117. package/dist/web/server/chunks/{_server.ts-DQJ-tygD.js → _server.ts-BW87LYkE.js} +2 -2
  118. package/dist/web/server/chunks/{_server.ts-DQJ-tygD.js.map → _server.ts-BW87LYkE.js.map} +1 -1
  119. package/dist/web/server/chunks/{_server.ts-VgbTPrqV.js → _server.ts-BXjUy61V.js} +2 -2
  120. package/dist/web/server/chunks/{_server.ts-VgbTPrqV.js.map → _server.ts-BXjUy61V.js.map} +1 -1
  121. package/dist/web/server/chunks/{_server.ts-FoPsfjo3.js → _server.ts-BYyaN7ik.js} +2 -2
  122. package/dist/web/server/chunks/{_server.ts-FoPsfjo3.js.map → _server.ts-BYyaN7ik.js.map} +1 -1
  123. package/dist/web/server/chunks/{_server.ts-CNBy2p2U.js → _server.ts-Bjzi1JAu.js} +2 -2
  124. package/dist/web/server/chunks/{_server.ts-CNBy2p2U.js.map → _server.ts-Bjzi1JAu.js.map} +1 -1
  125. package/dist/web/server/chunks/{_server.ts-CSK1ReRS.js → _server.ts-CBU5vhD8.js} +2 -2
  126. package/dist/web/server/chunks/{_server.ts-CSK1ReRS.js.map → _server.ts-CBU5vhD8.js.map} +1 -1
  127. package/dist/web/server/chunks/{_server.ts-Cv8SUkC5.js → _server.ts-CG-7TORV.js} +3 -3
  128. package/dist/web/server/chunks/{_server.ts-Cv8SUkC5.js.map → _server.ts-CG-7TORV.js.map} +1 -1
  129. package/dist/web/server/chunks/{_server.ts-DPctaiWC.js → _server.ts-COCrEIiW.js} +2 -2
  130. package/dist/web/server/chunks/{_server.ts-DPctaiWC.js.map → _server.ts-COCrEIiW.js.map} +1 -1
  131. package/dist/web/server/chunks/{_server.ts-C7uhdF7Y.js → _server.ts-CPCsEz_B.js} +4 -4
  132. package/dist/web/server/chunks/{_server.ts-C7uhdF7Y.js.map → _server.ts-CPCsEz_B.js.map} +1 -1
  133. package/dist/web/server/chunks/{_server.ts-DsyqZudf.js → _server.ts-CPGa_LDW.js} +2 -2
  134. package/dist/web/server/chunks/{_server.ts-DsyqZudf.js.map → _server.ts-CPGa_LDW.js.map} +1 -1
  135. package/dist/web/server/chunks/{_server.ts-B9RfKfyc.js → _server.ts-CT1m86tm.js} +2 -2
  136. package/dist/web/server/chunks/{_server.ts-B9RfKfyc.js.map → _server.ts-CT1m86tm.js.map} +1 -1
  137. package/dist/web/server/chunks/{_server.ts-CwFbAWCg.js → _server.ts-CXzAFIps.js} +2 -2
  138. package/dist/web/server/chunks/{_server.ts-CwFbAWCg.js.map → _server.ts-CXzAFIps.js.map} +1 -1
  139. package/dist/web/server/chunks/{_server.ts-DHuyjZQx.js → _server.ts-C_H2gKKu.js} +2 -2
  140. package/dist/web/server/chunks/{_server.ts-DHuyjZQx.js.map → _server.ts-C_H2gKKu.js.map} +1 -1
  141. package/dist/web/server/chunks/{_server.ts-DVgdt6Zu.js → _server.ts-CjH9MxGk.js} +3 -3
  142. package/dist/web/server/chunks/{_server.ts-DVgdt6Zu.js.map → _server.ts-CjH9MxGk.js.map} +1 -1
  143. package/dist/web/server/chunks/{_server.ts-DrFiP32b.js → _server.ts-CrQk3PtI.js} +3 -3
  144. package/dist/web/server/chunks/{_server.ts-DrFiP32b.js.map → _server.ts-CrQk3PtI.js.map} +1 -1
  145. package/dist/web/server/chunks/{_server.ts-CA8nszPb.js → _server.ts-Cy5Matw4.js} +3 -3
  146. package/dist/web/server/chunks/{_server.ts-CA8nszPb.js.map → _server.ts-Cy5Matw4.js.map} +1 -1
  147. package/dist/web/server/chunks/{_server.ts-CovkmnvY.js → _server.ts-D9PPu5p4.js} +3 -3
  148. package/dist/web/server/chunks/{_server.ts-CovkmnvY.js.map → _server.ts-D9PPu5p4.js.map} +1 -1
  149. package/dist/web/server/chunks/{_server.ts-vhti5VvF.js → _server.ts-DGvNQ4Mq.js} +3 -3
  150. package/dist/web/server/chunks/{_server.ts-vhti5VvF.js.map → _server.ts-DGvNQ4Mq.js.map} +1 -1
  151. package/dist/web/server/chunks/{_server.ts-iK8ih9Bi.js → _server.ts-DJOSnwXV.js} +2 -2
  152. package/dist/web/server/chunks/{_server.ts-iK8ih9Bi.js.map → _server.ts-DJOSnwXV.js.map} +1 -1
  153. package/dist/web/server/chunks/{_server.ts-DK-6ddNq.js → _server.ts-DPoluZc6.js} +3 -3
  154. package/dist/web/server/chunks/{_server.ts-DK-6ddNq.js.map → _server.ts-DPoluZc6.js.map} +1 -1
  155. package/dist/web/server/chunks/{_server.ts-BozsVs8t.js → _server.ts-DS6kibxL.js} +2 -2
  156. package/dist/web/server/chunks/{_server.ts-BozsVs8t.js.map → _server.ts-DS6kibxL.js.map} +1 -1
  157. package/dist/web/server/chunks/{_server.ts-DozhhYwq.js → _server.ts-DUl0ucUP.js} +3 -3
  158. package/dist/web/server/chunks/{_server.ts-DozhhYwq.js.map → _server.ts-DUl0ucUP.js.map} +1 -1
  159. package/dist/web/server/chunks/{_server.ts-78nODRDJ.js → _server.ts-DWj22oj9.js} +2 -2
  160. package/dist/web/server/chunks/{_server.ts-78nODRDJ.js.map → _server.ts-DWj22oj9.js.map} +1 -1
  161. package/dist/web/server/chunks/{_server.ts-CA1j9wWk.js → _server.ts-DZrVaelC.js} +2 -2
  162. package/dist/web/server/chunks/{_server.ts-CA1j9wWk.js.map → _server.ts-DZrVaelC.js.map} +1 -1
  163. package/dist/web/server/chunks/{_server.ts-CzcknkWq.js → _server.ts-DrG3j6Ao.js} +2 -2
  164. package/dist/web/server/chunks/{_server.ts-CzcknkWq.js.map → _server.ts-DrG3j6Ao.js.map} +1 -1
  165. package/dist/web/server/chunks/{_server.ts-AAllMdwT.js → _server.ts-Dwy38J9J.js} +2 -2
  166. package/dist/web/server/chunks/{_server.ts-AAllMdwT.js.map → _server.ts-Dwy38J9J.js.map} +1 -1
  167. package/dist/web/server/chunks/{_server.ts-CgChlIKq.js → _server.ts-DxGjRezI.js} +2 -2
  168. package/dist/web/server/chunks/{_server.ts-CgChlIKq.js.map → _server.ts-DxGjRezI.js.map} +1 -1
  169. package/dist/web/server/chunks/{_server.ts-KbQyErIR.js → _server.ts-XMUjHO61.js} +2 -2
  170. package/dist/web/server/chunks/{_server.ts-KbQyErIR.js.map → _server.ts-XMUjHO61.js.map} +1 -1
  171. package/dist/web/server/chunks/{_server.ts-DGTSZoLn.js → _server.ts-dvT2bXEB.js} +2 -2
  172. package/dist/web/server/chunks/{_server.ts-DGTSZoLn.js.map → _server.ts-dvT2bXEB.js.map} +1 -1
  173. package/dist/web/server/chunks/{_server.ts-BxscGs8D.js → _server.ts-m835uDm6.js} +2 -2
  174. package/dist/web/server/chunks/{_server.ts-BxscGs8D.js.map → _server.ts-m835uDm6.js.map} +1 -1
  175. package/dist/web/server/chunks/{checkbox-DiJTAtHi.js → checkbox-BYzlWW56.js} +2 -2
  176. package/dist/web/server/chunks/{checkbox-DiJTAtHi.js.map → checkbox-BYzlWW56.js.map} +1 -1
  177. package/dist/web/server/chunks/{create-id-DpoSQWrl.js → create-id-s6T_m-1j.js} +3 -3
  178. package/dist/web/server/chunks/{create-id-DpoSQWrl.js.map → create-id-s6T_m-1j.js.map} +1 -1
  179. package/dist/web/server/chunks/{discover-DjR28OqK.js → discover-DykzHz0t.js} +2 -2
  180. package/dist/web/server/chunks/{discover-DjR28OqK.js.map → discover-DykzHz0t.js.map} +1 -1
  181. package/dist/web/server/chunks/{drafts.svelte-DsFAtH-s.js → drafts.svelte-c94J-DBB.js} +3 -3
  182. package/dist/web/server/chunks/{drafts.svelte-DsFAtH-s.js.map → drafts.svelte-c94J-DBB.js.map} +1 -1
  183. package/dist/web/server/chunks/{end-session-BbBa9yD0.js → end-session-Czy_WW42.js} +2 -2
  184. package/dist/web/server/chunks/{end-session-BbBa9yD0.js.map → end-session-Czy_WW42.js.map} +1 -1
  185. package/dist/web/server/chunks/{files-4i3igWea.js → files-DNH191y7.js} +2 -2
  186. package/dist/web/server/chunks/{files-4i3igWea.js.map → files-DNH191y7.js.map} +1 -1
  187. package/dist/web/server/chunks/{fleet-DZJSFWuH.js → fleet-CWHlZjSd.js} +4 -4
  188. package/dist/web/server/chunks/{fleet-DZJSFWuH.js.map → fleet-CWHlZjSd.js.map} +1 -1
  189. package/dist/web/server/chunks/{git-D9dLEKUF.js → git-CHO9UIOQ.js} +13 -5
  190. package/dist/web/server/chunks/git-CHO9UIOQ.js.map +1 -0
  191. package/dist/web/server/chunks/{git-history-De9t0yF-.js → git-history-CxyH4jQb.js} +2 -2
  192. package/dist/web/server/chunks/{git-history-De9t0yF-.js.map → git-history-CxyH4jQb.js.map} +1 -1
  193. package/dist/web/server/chunks/{hooks.server-C3Uglne7.js → hooks.server-DgHxEf6H.js} +6 -6
  194. package/dist/web/server/chunks/{hooks.server-C3Uglne7.js.map → hooks.server-DgHxEf6H.js.map} +1 -1
  195. package/dist/web/server/chunks/{message-queue-sFcJCRjz.js → message-queue-DhLshpoF.js} +13 -2
  196. package/dist/web/server/chunks/message-queue-DhLshpoF.js.map +1 -0
  197. package/dist/web/server/chunks/{project-CbPa8Mu7.js → project-CBPdIh2n.js} +2 -2
  198. package/dist/web/server/chunks/{project-CbPa8Mu7.js.map → project-CBPdIh2n.js.map} +1 -1
  199. package/dist/web/server/chunks/{project-icons-CSb1bfT9.js → project-icons-bWhaFSVy.js} +4 -4
  200. package/dist/web/server/chunks/{project-icons-CSb1bfT9.js.map → project-icons-bWhaFSVy.js.map} +1 -1
  201. package/dist/web/server/chunks/{push-BJ7P9DGd.js → push-LMlCp4Lc.js} +5 -5
  202. package/dist/web/server/chunks/{push-BJ7P9DGd.js.map → push-LMlCp4Lc.js.map} +1 -1
  203. package/dist/web/server/chunks/{remote-control-C1d9R3w4.js → remote-control-BvYkVDhx.js} +2 -2
  204. package/dist/web/server/chunks/{remote-control-C1d9R3w4.js.map → remote-control-BvYkVDhx.js.map} +1 -1
  205. package/dist/web/server/chunks/{start-session-CKbupnLS.js → start-session-HljgutDe.js} +3 -3
  206. package/dist/web/server/chunks/{start-session-CKbupnLS.js.map → start-session-HljgutDe.js.map} +1 -1
  207. package/dist/web/server/chunks/{version-BqEJmw2g.js → version-ox9yLZ0P.js} +2 -2
  208. package/dist/web/server/chunks/version-ox9yLZ0P.js.map +1 -0
  209. package/dist/web/server/chunks/{web-preview-Bi5fjydK.js → web-preview-H5eiWlBD.js} +2 -2
  210. package/dist/web/server/chunks/{web-preview-Bi5fjydK.js.map → web-preview-H5eiWlBD.js.map} +1 -1
  211. package/dist/web/server/chunks/{ws-handlers-zemeJ8Si.js → ws-handlers-k_sOue-0.js} +6 -5
  212. package/dist/web/server/chunks/ws-handlers-k_sOue-0.js.map +1 -0
  213. package/dist/web/server/chunks/{ws-managers-C5VXKb_r.js → ws-managers-D2qC6Gla.js} +2 -2
  214. package/dist/web/server/chunks/{ws-managers-C5VXKb_r.js.map → ws-managers-D2qC6Gla.js.map} +1 -1
  215. package/dist/web/server/chunks/{ws-messages-jOSwT1Yq.js → ws-messages-B81v2RXg.js} +7 -2
  216. package/dist/web/server/chunks/ws-messages-B81v2RXg.js.map +1 -0
  217. package/dist/web/server/index.js +2 -2
  218. package/dist/web/server/index.js.map +1 -1
  219. package/dist/web/server/manifest.js +53 -53
  220. package/dist/web/server/manifest.js.map +1 -1
  221. package/package.json +1 -1
  222. package/src/fleet-places.ts +17 -1
  223. package/src/server/dictation-marks.ts +24 -1
  224. package/src/transcript/parser.ts +20 -3
  225. package/src/transcript/past-sessions.ts +3 -1
  226. package/src/utils/version.ts +1 -1
  227. package/tests/fleet-places.test.ts +20 -0
  228. package/tests/server/dictation-marks.test.ts +16 -0
  229. package/tests/transcript/parser.test.ts +34 -0
  230. package/tests/transcript/past-sessions.test.ts +5 -0
  231. package/web/.svelte-kit/adapter-bun/chunks/git.js +13 -4
  232. package/web/.svelte-kit/adapter-bun/chunks/git.js.map +1 -1
  233. package/web/.svelte-kit/adapter-bun/chunks/internal2.js +1 -1
  234. package/web/.svelte-kit/adapter-bun/chunks/internal2.js.map +1 -1
  235. package/web/.svelte-kit/adapter-bun/chunks/message-queue.js +14 -1
  236. package/web/.svelte-kit/adapter-bun/chunks/message-queue.js.map +1 -1
  237. package/web/.svelte-kit/adapter-bun/chunks/version.js +1 -1
  238. package/web/.svelte-kit/adapter-bun/chunks/version.js.map +1 -1
  239. package/web/.svelte-kit/adapter-bun/chunks/ws-handlers.js +2 -1
  240. package/web/.svelte-kit/adapter-bun/chunks/ws-handlers.js.map +1 -1
  241. package/web/.svelte-kit/adapter-bun/chunks/ws-messages.js +6 -1
  242. package/web/.svelte-kit/adapter-bun/chunks/ws-messages.js.map +1 -1
  243. package/web/.svelte-kit/adapter-bun/entries/pages/_layout.svelte.js +72 -45
  244. package/web/.svelte-kit/adapter-bun/entries/pages/_layout.svelte.js.map +1 -1
  245. package/web/.svelte-kit/adapter-bun/manifest-full.js +1 -1
  246. package/web/.svelte-kit/adapter-bun/manifest.js +1 -1
  247. package/web/.svelte-kit/adapter-bun/nodes/0.js +1 -1
  248. package/web/.svelte-kit/adapter-bun/nodes/1.js +1 -1
  249. package/web/.svelte-kit/adapter-bun/nodes/2.js +1 -1
  250. package/web/.svelte-kit/adapter-bun/nodes/3.js +1 -1
  251. package/web/.svelte-kit/adapter-bun/nodes/4.js +1 -1
  252. package/web/.svelte-kit/adapter-bun/nodes/5.js +1 -1
  253. package/web/.svelte-kit/adapter-bun/nodes/6.js +1 -1
  254. package/web/.svelte-kit/adapter-bun/nodes/7.js +1 -1
  255. package/web/.svelte-kit/adapter-bun/nodes/8.js +1 -1
  256. package/web/.svelte-kit/adapter-bun/nodes/9.js +1 -1
  257. package/web/.svelte-kit/generated/server/internal.js +1 -1
  258. package/web/.svelte-kit/output/client/.vite/manifest.json +237 -237
  259. package/web/.svelte-kit/output/client/_app/immutable/chunks/{sULMfRFG.js → B4FaHfAQ.js} +2 -2
  260. package/web/.svelte-kit/output/client/_app/immutable/chunks/{sULMfRFG.js.map → B4FaHfAQ.js.map} +1 -1
  261. package/web/.svelte-kit/output/client/_app/immutable/chunks/{W5_HMZ5E.js → B5Hkb2u5.js} +2 -2
  262. package/web/.svelte-kit/output/client/_app/immutable/chunks/{W5_HMZ5E.js.map → B5Hkb2u5.js.map} +1 -1
  263. package/{dist/web/client/_app/immutable/chunks/BQzv8cqz.js → web/.svelte-kit/output/client/_app/immutable/chunks/BOpEbBRb.js} +2 -2
  264. package/{dist/web/client/_app/immutable/chunks/BQzv8cqz.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/BOpEbBRb.js.map} +1 -1
  265. package/web/.svelte-kit/output/client/_app/immutable/chunks/{Q5yhzux8.js → BeYjnogg.js} +2 -2
  266. package/{dist/web/client/_app/immutable/chunks/Q5yhzux8.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/BeYjnogg.js.map} +1 -1
  267. package/web/.svelte-kit/output/client/_app/immutable/chunks/{VceCNUd7.js → C00rm3mY.js} +2 -2
  268. package/{dist/web/client/_app/immutable/chunks/VceCNUd7.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/C00rm3mY.js.map} +1 -1
  269. package/web/.svelte-kit/output/client/_app/immutable/chunks/{CtjkAirr.js → CKg7gbPm.js} +9 -9
  270. package/web/.svelte-kit/output/client/_app/immutable/chunks/CKg7gbPm.js.map +1 -0
  271. package/web/.svelte-kit/output/client/_app/immutable/chunks/CPEphjdk.js +4 -0
  272. package/web/.svelte-kit/output/client/_app/immutable/chunks/CPEphjdk.js.map +1 -0
  273. package/web/.svelte-kit/output/client/_app/immutable/chunks/{BQQ3-rqs.js → CPlFo88J.js} +2 -2
  274. package/web/.svelte-kit/output/client/_app/immutable/chunks/{BQQ3-rqs.js.map → CPlFo88J.js.map} +1 -1
  275. package/web/.svelte-kit/output/client/_app/immutable/chunks/{BvX4FYxp.js → CtnjySwS.js} +2 -2
  276. package/web/.svelte-kit/output/client/_app/immutable/chunks/{BvX4FYxp.js.map → CtnjySwS.js.map} +1 -1
  277. package/web/.svelte-kit/output/client/_app/immutable/chunks/{XgSsj0QY.js → D3EW0jRH.js} +2 -2
  278. package/{dist/web/client/_app/immutable/chunks/XgSsj0QY.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/D3EW0jRH.js.map} +1 -1
  279. package/web/.svelte-kit/output/client/_app/immutable/chunks/{CtlIfY1C.js → D3umr-Qr.js} +2 -2
  280. package/{dist/web/client/_app/immutable/chunks/CtlIfY1C.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/D3umr-Qr.js.map} +1 -1
  281. package/web/.svelte-kit/output/client/_app/immutable/chunks/{CM0CI9GL.js → D8-_Y-M6.js} +3 -3
  282. package/web/.svelte-kit/output/client/_app/immutable/chunks/{CM0CI9GL.js.map → D8-_Y-M6.js.map} +1 -1
  283. package/web/.svelte-kit/output/client/_app/immutable/chunks/{cvsGFvDx.js → DDvK7Qo9.js} +2 -2
  284. package/{dist/web/client/_app/immutable/chunks/cvsGFvDx.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/DDvK7Qo9.js.map} +1 -1
  285. package/web/.svelte-kit/output/client/_app/immutable/chunks/{CiU8KBun.js → _VFi-7U7.js} +2 -2
  286. package/web/.svelte-kit/output/client/_app/immutable/chunks/{CiU8KBun.js.map → _VFi-7U7.js.map} +1 -1
  287. package/web/.svelte-kit/output/client/_app/immutable/chunks/{DlENCZqZ.js → mQ6hkLuy.js} +2 -2
  288. package/web/.svelte-kit/output/client/_app/immutable/chunks/{DlENCZqZ.js.map → mQ6hkLuy.js.map} +1 -1
  289. package/web/.svelte-kit/output/client/_app/immutable/entry/{app.BwTbN8wB.js → app.CTFza_OS.js} +3 -3
  290. package/{dist/web/client/_app/immutable/entry/app.BwTbN8wB.js.map → web/.svelte-kit/output/client/_app/immutable/entry/app.CTFza_OS.js.map} +1 -1
  291. package/web/.svelte-kit/output/client/_app/immutable/entry/start.B-zlkyrt.js +2 -0
  292. package/web/.svelte-kit/output/client/_app/immutable/entry/start.B-zlkyrt.js.map +1 -0
  293. package/{dist/web/client/_app/immutable/nodes/0.BnHV-ElR.js → web/.svelte-kit/output/client/_app/immutable/nodes/0.Cztuq8Ih.js} +2 -2
  294. package/web/.svelte-kit/output/client/_app/immutable/nodes/{0.BnHV-ElR.js.map → 0.Cztuq8Ih.js.map} +1 -1
  295. package/web/.svelte-kit/output/client/_app/immutable/nodes/{1.Dc3ryOCf.js → 1.BOOL0V7K.js} +2 -2
  296. package/web/.svelte-kit/output/client/_app/immutable/nodes/{1.Dc3ryOCf.js.map → 1.BOOL0V7K.js.map} +1 -1
  297. package/web/.svelte-kit/output/client/_app/immutable/nodes/{2.DUrpAceY.js → 2.CArUpZNe.js} +2 -2
  298. package/web/.svelte-kit/output/client/_app/immutable/nodes/{2.DUrpAceY.js.map → 2.CArUpZNe.js.map} +1 -1
  299. package/web/.svelte-kit/output/client/_app/immutable/nodes/{3.BaCofjAn.js → 3.DSvIWalA.js} +2 -2
  300. package/web/.svelte-kit/output/client/_app/immutable/nodes/{3.BaCofjAn.js.map → 3.DSvIWalA.js.map} +1 -1
  301. package/web/.svelte-kit/output/client/_app/immutable/nodes/4.H6RMG_cy.js +2 -0
  302. package/web/.svelte-kit/output/client/_app/immutable/nodes/{4.v1wYkrvS.js.map → 4.H6RMG_cy.js.map} +1 -1
  303. package/web/.svelte-kit/output/client/_app/immutable/nodes/5.BHSt0Suo.js +2 -0
  304. package/web/.svelte-kit/output/client/_app/immutable/nodes/{5.Bn4A77jK.js.map → 5.BHSt0Suo.js.map} +1 -1
  305. package/web/.svelte-kit/output/client/_app/immutable/nodes/{6.C2hEoITj.js → 6.CzLoA0w7.js} +2 -2
  306. package/web/.svelte-kit/output/client/_app/immutable/nodes/{6.C2hEoITj.js.map → 6.CzLoA0w7.js.map} +1 -1
  307. package/web/.svelte-kit/output/client/_app/immutable/nodes/{7.BcHOjWdp.js → 7.fqq2vVa9.js} +2 -2
  308. package/web/.svelte-kit/output/client/_app/immutable/nodes/{7.BcHOjWdp.js.map → 7.fqq2vVa9.js.map} +1 -1
  309. package/web/.svelte-kit/output/client/_app/immutable/nodes/8.DNFFjTla.js +2 -0
  310. package/web/.svelte-kit/output/client/_app/immutable/nodes/{8.D7NtqIYy.js.map → 8.DNFFjTla.js.map} +1 -1
  311. package/web/.svelte-kit/output/client/_app/immutable/nodes/9.0kMPrp2-.js +2 -0
  312. package/web/.svelte-kit/output/client/_app/immutable/nodes/{9.D-211z9-.js.map → 9.0kMPrp2-.js.map} +1 -1
  313. package/web/.svelte-kit/output/client/_app/version.json +1 -1
  314. package/web/.svelte-kit/output/server/chunks/git.js +13 -4
  315. package/web/.svelte-kit/output/server/chunks/git.js.map +1 -1
  316. package/web/.svelte-kit/output/server/chunks/internal2.js +1 -1
  317. package/web/.svelte-kit/output/server/chunks/internal2.js.map +1 -1
  318. package/web/.svelte-kit/output/server/chunks/message-queue.js +14 -1
  319. package/web/.svelte-kit/output/server/chunks/message-queue.js.map +1 -1
  320. package/web/.svelte-kit/output/server/chunks/version.js +1 -1
  321. package/web/.svelte-kit/output/server/chunks/version.js.map +1 -1
  322. package/web/.svelte-kit/output/server/chunks/ws-handlers.js +2 -1
  323. package/web/.svelte-kit/output/server/chunks/ws-handlers.js.map +1 -1
  324. package/web/.svelte-kit/output/server/chunks/ws-messages.js +6 -1
  325. package/web/.svelte-kit/output/server/chunks/ws-messages.js.map +1 -1
  326. package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js +72 -45
  327. package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js.map +1 -1
  328. package/web/.svelte-kit/output/server/manifest-full.js +1 -1
  329. package/web/.svelte-kit/output/server/manifest.js +1 -1
  330. package/web/.svelte-kit/output/server/nodes/0.js +1 -1
  331. package/web/.svelte-kit/output/server/nodes/1.js +1 -1
  332. package/web/.svelte-kit/output/server/nodes/2.js +1 -1
  333. package/web/.svelte-kit/output/server/nodes/3.js +1 -1
  334. package/web/.svelte-kit/output/server/nodes/4.js +1 -1
  335. package/web/.svelte-kit/output/server/nodes/5.js +1 -1
  336. package/web/.svelte-kit/output/server/nodes/6.js +1 -1
  337. package/web/.svelte-kit/output/server/nodes/7.js +1 -1
  338. package/web/.svelte-kit/output/server/nodes/8.js +1 -1
  339. package/web/.svelte-kit/output/server/nodes/9.js +1 -1
  340. package/web/src/lib/components/AllSessionsPanel.svelte +9 -1
  341. package/web/src/lib/components/FolderPicker.svelte +49 -21
  342. package/dist/web/client/_app/immutable/chunks/CtjkAirr.js.map +0 -1
  343. package/dist/web/client/_app/immutable/chunks/Dck--FBb.js +0 -4
  344. package/dist/web/client/_app/immutable/chunks/Dck--FBb.js.map +0 -1
  345. package/dist/web/client/_app/immutable/entry/start.B2ZPizAt.js +0 -2
  346. package/dist/web/client/_app/immutable/entry/start.B2ZPizAt.js.map +0 -1
  347. package/dist/web/server/chunks/_layout.svelte-yrPX5VFm.js.map +0 -1
  348. package/dist/web/server/chunks/git-D9dLEKUF.js.map +0 -1
  349. package/dist/web/server/chunks/message-queue-sFcJCRjz.js.map +0 -1
  350. package/dist/web/server/chunks/version-BqEJmw2g.js.map +0 -1
  351. package/dist/web/server/chunks/ws-handlers-zemeJ8Si.js.map +0 -1
  352. package/dist/web/server/chunks/ws-messages-jOSwT1Yq.js.map +0 -1
  353. package/web/.svelte-kit/output/client/_app/immutable/chunks/CtjkAirr.js.map +0 -1
  354. package/web/.svelte-kit/output/client/_app/immutable/chunks/Dck--FBb.js +0 -4
  355. package/web/.svelte-kit/output/client/_app/immutable/chunks/Dck--FBb.js.map +0 -1
  356. package/web/.svelte-kit/output/client/_app/immutable/entry/start.B2ZPizAt.js +0 -2
  357. package/web/.svelte-kit/output/client/_app/immutable/entry/start.B2ZPizAt.js.map +0 -1
  358. package/web/.svelte-kit/output/client/_app/immutable/nodes/4.v1wYkrvS.js +0 -2
  359. package/web/.svelte-kit/output/client/_app/immutable/nodes/5.Bn4A77jK.js +0 -2
  360. package/web/.svelte-kit/output/client/_app/immutable/nodes/8.D7NtqIYy.js +0 -2
  361. package/web/.svelte-kit/output/client/_app/immutable/nodes/9.D-211z9-.js +0 -2
@@ -1,2 +1,2 @@
1
- import"../chunks/DxJTiTth.js";import{p as n,f as h,s as c,t as l,a as u,b as v,c as _,o as a,d as s}from"../chunks/BeqCgGI7.js";import{p as e}from"../chunks/CiU8KBun.js";var d=_("<h1> </h1> <p> </p>",1);function y(o,p){n(p,!0);var t=d(),r=h(t),m=a(r,!0),f=c(r,2),i=a(f,!0);l(()=>{s(m,e.status),s(i,e.error?.message)}),u(o,t),v()}export{y as component};
2
- //# sourceMappingURL=1.Dc3ryOCf.js.map
1
+ import"../chunks/DxJTiTth.js";import{p as n,f as h,s as c,t as l,a as u,b as v,c as _,o as a,d as s}from"../chunks/BeqCgGI7.js";import{p as e}from"../chunks/_VFi-7U7.js";var d=_("<h1> </h1> <p> </p>",1);function y(o,p){n(p,!0);var t=d(),r=h(t),m=a(r,!0),f=c(r,2),i=a(f,!0);l(()=>{s(m,e.status),s(i,e.error?.message)}),u(o,t),v()}export{y as component};
2
+ //# sourceMappingURL=1.BOOL0V7K.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"1.Dc3ryOCf.js","sources":["../../../../../../../node_modules/.bun/@sveltejs+kit@2.70.3+106f9c5330cbe027/node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte"],"sourcesContent":["<svelte:options runes={true} />\n\n<script>\n\timport { page } from '$app/state';\n</script>\n\n<h1>{page.status}</h1>\n<p>{page.error?.message}</p>\n"],"names":["h1","$.first_child","fragment","p","$.set_text","text","page"],"mappings":"0NAEA,mBAICA,EAAEC,EAAAC,CAAA,MAAFF,EAAE,EAAA,EACFG,IADAH,EAAE,CAAA,MACFG,EAAC,EAAA,SADGC,EAAAC,EAAAC,EAAK,MAAM,MACZA,EAAK,OAAO,OAAO,cAHf","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"1.BOOL0V7K.js","sources":["../../../../../../../node_modules/.bun/@sveltejs+kit@2.70.3+106f9c5330cbe027/node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte"],"sourcesContent":["<svelte:options runes={true} />\n\n<script>\n\timport { page } from '$app/state';\n</script>\n\n<h1>{page.status}</h1>\n<p>{page.error?.message}</p>\n"],"names":["h1","$.first_child","fragment","p","$.set_text","text","page"],"mappings":"0NAEA,mBAICA,EAAEC,EAAAC,CAAA,MAAFF,EAAE,EAAA,EACFG,IADAH,EAAE,CAAA,MACFG,EAAC,EAAA,SADGC,EAAAC,EAAAC,EAAK,MAAM,MACZA,EAAK,OAAO,OAAO,cAHf","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- import"../chunks/DxJTiTth.js";import{p as u,w as v,x as h,f as _,a as f,b as S,y as x,i as r,j as m,$ as w,g as $,z as b,A as k,B as A,c as T}from"../chunks/BeqCgGI7.js";import{i as y}from"../chunks/Cjnj9mVX.js";import{h as E}from"../chunks/VDVYssW5.js";import{A as I}from"../chunks/Dck--FBb.js";import{g as P}from"../chunks/CM0CI9GL.js";import{a as i,S as R,b as j,f as z}from"../chunks/CtjkAirr.js";var B=T('<div class="root-page svelte-1uha8ag"><!></div>');function D(c,l){u(l,!0);const p=b(()=>j(z.answering));let a=$("waiting");v(()=>{if(r(a)==="waiting"){if(i.sessions.length>0){const e=new Set(i.sessions.map(s=>s.tmux_target).filter(s=>!!s));let t=null;try{t=localStorage.getItem(R.lastSession)}catch{}const o=t&&e.has(t)?t:i.sessions.find(s=>s.tmux_target)?.tmux_target;if(o){m(a,"redirecting"),P(`/session/${encodeURIComponent(o)}`,{replaceState:!0});return}}if(i.connected){const e=setTimeout(()=>{r(a)==="waiting"&&m(a,"fallback")},300);return()=>clearTimeout(e)}}});var n=h();E("1uha8ag",e=>{x(()=>{w.title=`${r(p)??""}claude-mux`})});var d=_(n);{var g=e=>{var t=B(),o=k(t);I(o,{}),A(t),f(e,t)};y(d,e=>{r(a)==="fallback"&&e(g)})}f(c,n),S()}export{D as component};
2
- //# sourceMappingURL=2.DUrpAceY.js.map
1
+ import"../chunks/DxJTiTth.js";import{p as u,w as v,x as h,f as _,a as f,b as S,y as x,i as r,j as m,$ as w,g as $,z as b,A as k,B as A,c as T}from"../chunks/BeqCgGI7.js";import{i as y}from"../chunks/Cjnj9mVX.js";import{h as E}from"../chunks/VDVYssW5.js";import{A as I}from"../chunks/CPEphjdk.js";import{g as P}from"../chunks/D8-_Y-M6.js";import{a as i,S as R,b as j,f as z}from"../chunks/CKg7gbPm.js";var B=T('<div class="root-page svelte-1uha8ag"><!></div>');function D(c,l){u(l,!0);const p=b(()=>j(z.answering));let a=$("waiting");v(()=>{if(r(a)==="waiting"){if(i.sessions.length>0){const e=new Set(i.sessions.map(s=>s.tmux_target).filter(s=>!!s));let t=null;try{t=localStorage.getItem(R.lastSession)}catch{}const o=t&&e.has(t)?t:i.sessions.find(s=>s.tmux_target)?.tmux_target;if(o){m(a,"redirecting"),P(`/session/${encodeURIComponent(o)}`,{replaceState:!0});return}}if(i.connected){const e=setTimeout(()=>{r(a)==="waiting"&&m(a,"fallback")},300);return()=>clearTimeout(e)}}});var n=h();E("1uha8ag",e=>{x(()=>{w.title=`${r(p)??""}claude-mux`})});var d=_(n);{var g=e=>{var t=B(),o=k(t);I(o,{}),A(t),f(e,t)};y(d,e=>{r(a)==="fallback"&&e(g)})}f(c,n),S()}export{D as component};
2
+ //# sourceMappingURL=2.CArUpZNe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"2.DUrpAceY.js","sources":["../../../../../../src/routes/+page.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport AllSessionsPanel from '$lib/components/AllSessionsPanel.svelte';\n\timport { browser } from '$app/environment';\n\timport { goto } from '$app/navigation';\n\timport { sessionStore, attentionPrefix } from '$lib/stores/sessions.svelte';\n\timport { fleetStore } from '$lib/stores/fleet.svelte';\n\timport { STORAGE_KEYS } from '$lib/constants';\n\n\t// Sessions that want a person or finished unseen, so a background tab says so.\n\tconst attention = $derived(attentionPrefix(fleetStore.answering));\n\n\ttype Phase = 'waiting' | 'redirecting' | 'fallback';\n\tlet phase = $state<Phase>('waiting');\n\n\t$effect(() => {\n\t\tif (!browser || phase !== 'waiting') return;\n\n\t\tif (sessionStore.sessions.length > 0) {\n\t\t\tconst validTargets = new Set(\n\t\t\t\tsessionStore.sessions\n\t\t\t\t\t.map((s) => s.tmux_target)\n\t\t\t\t\t.filter((t): t is string => !!t)\n\t\t\t);\n\t\t\tlet saved: string | null = null;\n\t\t\ttry {\n\t\t\t\tsaved = localStorage.getItem(STORAGE_KEYS.lastSession);\n\t\t\t} catch {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t\tconst pick =\n\t\t\t\tsaved && validTargets.has(saved)\n\t\t\t\t\t? saved\n\t\t\t\t\t: sessionStore.sessions.find((s) => s.tmux_target)?.tmux_target;\n\t\t\tif (pick) {\n\t\t\t\tphase = 'redirecting';\n\t\t\t\tvoid goto(`/session/${encodeURIComponent(pick)}`, { replaceState: true });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// No tmux-backed session to jump to (e.g. only sessions started outside tmux):\n\t\t\t// fall through and show the sessions panel instead of waiting forever.\n\t\t}\n\n\t\tif (sessionStore.connected) {\n\t\t\t// Show fallback only after first sessions message has had time to land.\n\t\t\tconst t = setTimeout(() => {\n\t\t\t\tif (phase === 'waiting') phase = 'fallback';\n\t\t\t}, 300);\n\t\t\treturn () => clearTimeout(t);\n\t\t}\n\t});\n</script>\n\n<svelte:head>\n\t<title>{attention}claude-mux</title>\n</svelte:head>\n\n{#if phase === 'fallback'}\n\t<div class=\"root-page\">\n\t\t<AllSessionsPanel />\n\t</div>\n{/if}\n\n<style>\n\t.root-page {\n\t\theight: 100dvh;\n\t\tmax-width: 800px;\n\t\tmargin: 0 auto;\n\t}\n</style>\n"],"names":["attention","$.derived","attentionPrefix","fleetStore","phase","$.state","$.user_effect","$.get","sessionStore","validTargets","t","saved","STORAGE_KEYS","pick","$.set","goto","$.head","$$anchor","$.document","div","root","AllSessionsPanel","node_1","$$render","consequent"],"mappings":"2dAAA,SASC,MAAMA,EAASC,EAAA,IAAYC,EAAgBC,EAAW,SAAS,CAAC,EAGhE,IAAIC,EAAQC,EAAc,SAAS,EAEnCC,EAAQ,IAAM,CACb,GAAgBC,GAAK,IAAK,UAE1B,IAAIC,EAAa,SAAS,OAAS,EAAG,CACrC,MAAMC,EAAe,IAAI,IACxBD,EAAa,SACX,IAAK,GAAM,EAAE,WAAW,EACxB,OAAQE,GAAmB,CAAC,CAACA,CAAC,CAAA,EAEjC,IAAIC,EAAuB,KAC3B,GAAI,CACHA,EAAQ,aAAa,QAAQC,EAAa,WAAW,CACtD,MAAQ,CAER,CACA,MAAMC,EACLF,GAASF,EAAa,IAAIE,CAAK,EAC5BA,EACAH,EAAa,SAAS,KAAM,GAAM,EAAE,WAAW,GAAG,YACtD,GAAIK,EAAM,CACTC,EAAAV,EAAQ,aAAa,EAChBW,EAAK,YAAY,mBAAmBF,CAAI,CAAC,GAAI,CAAE,aAAc,GAAM,EACxE,MACD,CAGD,CAEA,GAAIL,EAAa,UAAW,CAE3B,MAAME,EAAI,WAAW,IAAM,CACtBH,EAAAH,CAAK,IAAK,WAAWU,EAAAV,EAAQ,UAAU,CAC5C,EAAG,GAAI,EACP,MAAO,IAAM,aAAaM,CAAC,CAC5B,EACD,CAAC,YAGDM,EAAW,UAAAC,GAAA,QACVC,EAAA,WAAOlB,CAAS,GAAA,EAAA,2CAIhBmB,EAAGC,EAAA,MAAHD,CAAG,EACFE,EAAgBC,EAAA,EAAA,IADjBH,CAAG,MAAHA,CAAG,WADAZ,EAAAH,CAAK,IAAK,YAAUmB,EAAAC,CAAA,cANjB"}
1
+ {"version":3,"file":"2.CArUpZNe.js","sources":["../../../../../../src/routes/+page.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport AllSessionsPanel from '$lib/components/AllSessionsPanel.svelte';\n\timport { browser } from '$app/environment';\n\timport { goto } from '$app/navigation';\n\timport { sessionStore, attentionPrefix } from '$lib/stores/sessions.svelte';\n\timport { fleetStore } from '$lib/stores/fleet.svelte';\n\timport { STORAGE_KEYS } from '$lib/constants';\n\n\t// Sessions that want a person or finished unseen, so a background tab says so.\n\tconst attention = $derived(attentionPrefix(fleetStore.answering));\n\n\ttype Phase = 'waiting' | 'redirecting' | 'fallback';\n\tlet phase = $state<Phase>('waiting');\n\n\t$effect(() => {\n\t\tif (!browser || phase !== 'waiting') return;\n\n\t\tif (sessionStore.sessions.length > 0) {\n\t\t\tconst validTargets = new Set(\n\t\t\t\tsessionStore.sessions\n\t\t\t\t\t.map((s) => s.tmux_target)\n\t\t\t\t\t.filter((t): t is string => !!t)\n\t\t\t);\n\t\t\tlet saved: string | null = null;\n\t\t\ttry {\n\t\t\t\tsaved = localStorage.getItem(STORAGE_KEYS.lastSession);\n\t\t\t} catch {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t\tconst pick =\n\t\t\t\tsaved && validTargets.has(saved)\n\t\t\t\t\t? saved\n\t\t\t\t\t: sessionStore.sessions.find((s) => s.tmux_target)?.tmux_target;\n\t\t\tif (pick) {\n\t\t\t\tphase = 'redirecting';\n\t\t\t\tvoid goto(`/session/${encodeURIComponent(pick)}`, { replaceState: true });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// No tmux-backed session to jump to (e.g. only sessions started outside tmux):\n\t\t\t// fall through and show the sessions panel instead of waiting forever.\n\t\t}\n\n\t\tif (sessionStore.connected) {\n\t\t\t// Show fallback only after first sessions message has had time to land.\n\t\t\tconst t = setTimeout(() => {\n\t\t\t\tif (phase === 'waiting') phase = 'fallback';\n\t\t\t}, 300);\n\t\t\treturn () => clearTimeout(t);\n\t\t}\n\t});\n</script>\n\n<svelte:head>\n\t<title>{attention}claude-mux</title>\n</svelte:head>\n\n{#if phase === 'fallback'}\n\t<div class=\"root-page\">\n\t\t<AllSessionsPanel />\n\t</div>\n{/if}\n\n<style>\n\t.root-page {\n\t\theight: 100dvh;\n\t\tmax-width: 800px;\n\t\tmargin: 0 auto;\n\t}\n</style>\n"],"names":["attention","$.derived","attentionPrefix","fleetStore","phase","$.state","$.user_effect","$.get","sessionStore","validTargets","t","saved","STORAGE_KEYS","pick","$.set","goto","$.head","$$anchor","$.document","div","root","AllSessionsPanel","node_1","$$render","consequent"],"mappings":"2dAAA,SASC,MAAMA,EAASC,EAAA,IAAYC,EAAgBC,EAAW,SAAS,CAAC,EAGhE,IAAIC,EAAQC,EAAc,SAAS,EAEnCC,EAAQ,IAAM,CACb,GAAgBC,GAAK,IAAK,UAE1B,IAAIC,EAAa,SAAS,OAAS,EAAG,CACrC,MAAMC,EAAe,IAAI,IACxBD,EAAa,SACX,IAAK,GAAM,EAAE,WAAW,EACxB,OAAQE,GAAmB,CAAC,CAACA,CAAC,CAAA,EAEjC,IAAIC,EAAuB,KAC3B,GAAI,CACHA,EAAQ,aAAa,QAAQC,EAAa,WAAW,CACtD,MAAQ,CAER,CACA,MAAMC,EACLF,GAASF,EAAa,IAAIE,CAAK,EAC5BA,EACAH,EAAa,SAAS,KAAM,GAAM,EAAE,WAAW,GAAG,YACtD,GAAIK,EAAM,CACTC,EAAAV,EAAQ,aAAa,EAChBW,EAAK,YAAY,mBAAmBF,CAAI,CAAC,GAAI,CAAE,aAAc,GAAM,EACxE,MACD,CAGD,CAEA,GAAIL,EAAa,UAAW,CAE3B,MAAME,EAAI,WAAW,IAAM,CACtBH,EAAAH,CAAK,IAAK,WAAWU,EAAAV,EAAQ,UAAU,CAC5C,EAAG,GAAI,EACP,MAAO,IAAM,aAAaM,CAAC,CAC5B,EACD,CAAC,YAGDM,EAAW,UAAAC,GAAA,QACVC,EAAA,WAAOlB,CAAS,GAAA,EAAA,2CAIhBmB,EAAGC,EAAA,MAAHD,CAAG,EACFE,EAAgBC,EAAA,EAAA,IADjBH,CAAG,MAAHA,CAAG,WADAZ,EAAAH,CAAK,IAAK,YAAUmB,EAAAC,CAAA,cANjB"}
@@ -1,2 +1,2 @@
1
- import"../chunks/DxJTiTth.js";import"../chunks/C1USgZe4.js";import{_ as o}from"../chunks/CtlIfY1C.js";const t=!1,p=Object.freeze(Object.defineProperty({__proto__:null,ssr:t},Symbol.toStringTag,{value:"Module"}));function s(e){o(e,{})}export{s as component,p as universal};
2
- //# sourceMappingURL=3.BaCofjAn.js.map
1
+ import"../chunks/DxJTiTth.js";import"../chunks/C1USgZe4.js";import{_ as o}from"../chunks/D3umr-Qr.js";const t=!1,p=Object.freeze(Object.defineProperty({__proto__:null,ssr:t},Symbol.toStringTag,{value:"Module"}));function s(e){o(e,{})}export{s as component,p as universal};
2
+ //# sourceMappingURL=3.DSvIWalA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"3.BaCofjAn.js","sources":["../../../../../../src/routes/m/[machine]/past/[id]/+page.ts","../../../../../../src/routes/m/[machine]/past/[id]/+page.svelte"],"sourcesContent":["export const ssr = false;\n","<script lang=\"ts\">\n\t// A past session of another machine: the same page as this machine's.\n\timport PastPage from '../../../../past/[id]/+page.svelte';\n</script>\n\n<PastPage />\n"],"names":["ssr","PastPage","$$anchor"],"mappings":"sGAAO,MAAMA,EAAM,mHCAnB,CAKCC,EAAQC,EAAA,EAAA,CAFD"}
1
+ {"version":3,"file":"3.DSvIWalA.js","sources":["../../../../../../src/routes/m/[machine]/past/[id]/+page.ts","../../../../../../src/routes/m/[machine]/past/[id]/+page.svelte"],"sourcesContent":["export const ssr = false;\n","<script lang=\"ts\">\n\t// A past session of another machine: the same page as this machine's.\n\timport PastPage from '../../../../past/[id]/+page.svelte';\n</script>\n\n<PastPage />\n"],"names":["ssr","PastPage","$$anchor"],"mappings":"sGAAO,MAAMA,EAAM,mHCAnB,CAKCC,EAAQC,EAAA,EAAA,CAFD"}
@@ -0,0 +1,2 @@
1
+ import"../chunks/DxJTiTth.js";import"../chunks/C1USgZe4.js";import{_ as o}from"../chunks/B4FaHfAQ.js";const t=!1,p=Object.freeze(Object.defineProperty({__proto__:null,ssr:t},Symbol.toStringTag,{value:"Module"}));function s(e){o(e,{})}export{s as component,p as universal};
2
+ //# sourceMappingURL=4.H6RMG_cy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"4.v1wYkrvS.js","sources":["../../../../../../src/routes/m/[machine]/session/[target]/+page.ts","../../../../../../src/routes/m/[machine]/session/[target]/+page.svelte"],"sourcesContent":["export const ssr = false;\n","<script lang=\"ts\">\n\t// Another machine's session: the same page as this machine's, which reads\n\t// the machine off the route and reaches it through the relay.\n\timport SessionPage from '../../../../session/[target]/+page.svelte';\n</script>\n\n<SessionPage />\n"],"names":["ssr","SessionPage","$$anchor"],"mappings":"sGAAO,MAAMA,EAAM,mHCAnB,CAMCC,EAAWC,EAAA,EAAA,CAFJ"}
1
+ {"version":3,"file":"4.H6RMG_cy.js","sources":["../../../../../../src/routes/m/[machine]/session/[target]/+page.ts","../../../../../../src/routes/m/[machine]/session/[target]/+page.svelte"],"sourcesContent":["export const ssr = false;\n","<script lang=\"ts\">\n\t// Another machine's session: the same page as this machine's, which reads\n\t// the machine off the route and reaches it through the relay.\n\timport SessionPage from '../../../../session/[target]/+page.svelte';\n</script>\n\n<SessionPage />\n"],"names":["ssr","SessionPage","$$anchor"],"mappings":"sGAAO,MAAMA,EAAM,mHCAnB,CAMCC,EAAWC,EAAA,EAAA,CAFJ"}
@@ -0,0 +1,2 @@
1
+ import"../chunks/DxJTiTth.js";import"../chunks/C1USgZe4.js";import{_ as o}from"../chunks/CtnjySwS.js";const t=!1,p=Object.freeze(Object.defineProperty({__proto__:null,ssr:t},Symbol.toStringTag,{value:"Module"}));function s(e){o(e,{})}export{s as component,p as universal};
2
+ //# sourceMappingURL=5.BHSt0Suo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"5.Bn4A77jK.js","sources":["../../../../../../src/routes/m/[machine]/session/[target]/agent/[agentId]/+page.ts","../../../../../../src/routes/m/[machine]/session/[target]/agent/[agentId]/+page.svelte"],"sourcesContent":["export const ssr = false;\n","<script lang=\"ts\">\n\t// A subagent of another machine's session: the same page as this machine's.\n\timport AgentPage from '../../../../../../session/[target]/agent/[agentId]/+page.svelte';\n</script>\n\n<AgentPage />\n"],"names":["ssr","AgentPage","$$anchor"],"mappings":"sGAAO,MAAMA,EAAM,mHCAnB,CAKCC,EAASC,EAAA,EAAA,CAFF"}
1
+ {"version":3,"file":"5.BHSt0Suo.js","sources":["../../../../../../src/routes/m/[machine]/session/[target]/agent/[agentId]/+page.ts","../../../../../../src/routes/m/[machine]/session/[target]/agent/[agentId]/+page.svelte"],"sourcesContent":["export const ssr = false;\n","<script lang=\"ts\">\n\t// A subagent of another machine's session: the same page as this machine's.\n\timport AgentPage from '../../../../../../session/[target]/agent/[agentId]/+page.svelte';\n</script>\n\n<AgentPage />\n"],"names":["ssr","AgentPage","$$anchor"],"mappings":"sGAAO,MAAMA,EAAM,mHCAnB,CAKCC,EAASC,EAAA,EAAA,CAFF"}
@@ -1,5 +1,5 @@
1
- import"../chunks/DxJTiTth.js";import{V as It,p as _t,s as r,A as p,a as i,b as gt,c as l,i as e,B as u,z as h,g as He,o as b,t as _,d as f,W as Rt,j as ze,F as De,f as Me,U as Bt,h as ct,w as Nt,X as Ut,$ as Ct,I as Gt,G as Qe}from"../chunks/BeqCgGI7.js";import{i as x}from"../chunks/Cjnj9mVX.js";import{e as ue,a as I,g as Ht,b as qe,h as qt,s as Ae,i as Dt,j as Wt}from"../chunks/VDVYssW5.js";import{B as Be,l as vt,o as dt,m as ve,f as Ne,n as Ye,e as de,q as Ue,t as Vt,d as ut,u as Ft,V as Ze,v as Jt,w as Kt,x as Xt}from"../chunks/CtjkAirr.js";import{C as Qt,s as Yt}from"../chunks/BQzv8cqz.js";const Zt=3e4,en=/Already on latest|skipping restart/,tn={pollMs:1500,timeoutMs:10*6e4};function bt(S){return[...S.filter(o=>!o.origin),...S.filter(o=>o.origin)]}function et(S){return S.split(`
1
+ import"../chunks/DxJTiTth.js";import{V as It,p as _t,s as r,A as p,a as i,b as gt,c as l,i as e,B as u,z as h,g as He,o as b,t as _,d as f,W as Rt,j as ze,F as De,f as Me,U as Bt,h as ct,w as Nt,X as Ut,$ as Ct,I as Gt,G as Qe}from"../chunks/BeqCgGI7.js";import{i as x}from"../chunks/Cjnj9mVX.js";import{e as ue,a as I,g as Ht,b as qe,h as qt,s as Ae,i as Dt,j as Wt}from"../chunks/VDVYssW5.js";import{B as Be,l as vt,o as dt,m as ve,f as Ne,n as Ye,e as de,q as Ue,t as Vt,d as ut,u as Ft,V as Ze,v as Jt,w as Kt,x as Xt}from"../chunks/CKg7gbPm.js";import{C as Qt,s as Yt}from"../chunks/BOpEbBRb.js";const Zt=3e4,en=/Already on latest|skipping restart/,tn={pollMs:1500,timeoutMs:10*6e4};function bt(S){return[...S.filter(o=>!o.origin),...S.filter(o=>o.origin)]}function et(S){return S.split(`
2
2
  `).map(m=>m.trim()).filter(Boolean).at(-1)??""}function pt(S){const o=S.job;return o&&typeof o=="object"?o:null}async function nn(S,o,m,M=tn){const R=`${S}/api/update`,w=T=>(o(T),T),D=(T,N="")=>w({state:"failed",line:T,output:N,version:null}),pe=T=>m.request(R,T).catch(()=>null);w({state:"starting",line:"Starting the update…",output:"",version:null});const B=await pe("POST");if(!B)return D("Did not answer");if(B.status===404&&typeof B.body.error!="string")return D("Too old to be updated from here; run `claude-mux update` on it");const re=pt(B.body);if(B.status!==202&&B.status!==409||typeof re?.startedAt!="number")return D(typeof B.body.error=="string"?B.body.error:`Refused (${B.status})`);const me=re.startedAt,fe=m.now()+M.timeoutMs;let z="",he;for(;m.now()<fe;){await m.sleep(M.pollMs);const T=await pe("GET");if(!T||T.status>=500){w({state:"restarting",line:"Restarting…",output:z,version:null});continue}const N=pt(T.body);if(!N||N.startedAt!==me){w({state:"restarting",line:"Waiting for it to report…",output:z,version:null});continue}z=typeof N.output=="string"?N.output:z;const _e=typeof T.body.version=="string"?T.body.version:null;if(N.state==="running"){w({state:"running",line:et(z)||"Updating…",output:z,version:null});continue}if(N.state==="ok"){if(_e!==null&&_e===N.fromVersion&&!en.test(z)&&(he??=m.now()+Zt)>m.now()){w({state:"restarting",line:"Restarting…",output:z,version:null});continue}return w({state:"ok",line:et(z)||"Updated",output:z,version:_e})}const v=typeof N.exitCode=="number"?` (exit ${N.exitCode})`:"";return D(`${et(z)||"Update failed"}${v}`,z)}return D(`No result after ${Math.round(M.timeoutMs/6e4)} min`,z)}async function an(S,o){const m=[];for(const M of bt(S)){let R;try{R=await o(M)}catch(w){R={state:"failed",line:String(w),output:"",version:null}}m.push({machine:M,result:R})}return m}const Ce={async request(S,o){try{const m=await fetch(S,{method:o,cache:"no-store"}),M=await m.json().catch(()=>({}));return{status:m.status,body:M}}catch{return null}},sleep:S=>new Promise(o=>setTimeout(o,S)),now:()=>Date.now()};var sn=l('<button class="fold svelte-drktzi"> </button>'),rn=l('<p class="empty svelte-drktzi">No machine has reported its plugins yet.</p>'),ln=l('<p class="empty svelte-drktzi">Every machine has the same plugins, and every marketplace is current.</p>'),on=l('<th scope="col"> </th>'),cn=l('<span class="sub svelte-drktzi"> </span>'),mt=l('<span class="na svelte-drktzi">unknown</span>'),vn=l('<span class="flag svelte-drktzi"> </span>'),ft=l('<code class="svelte-drktzi"> </code> <!>',1),dn=l('<span class="na svelte-drktzi">not added</span>'),ht=l("<td><!></td>"),un=l('<tr class="svelte-drktzi"><th class="label svelte-drktzi" scope="row"><span class="name svelte-drktzi"> </span> <!></th><!><td class="svelte-drktzi"></td></tr>'),pn=l('<tbody class="svelte-drktzi"><tr class="group svelte-drktzi"><th scope="rowgroup" class="svelte-drktzi">Marketplaces</th></tr><!></tbody>'),mn=l('<span class="flag svelte-drktzi">off</span>'),fn=l('<span class="flag svelte-drktzi">missing</span>'),hn=l('<span class="na svelte-drktzi">—</span>'),_n=l('<tr><th class="label svelte-drktzi" scope="row"><span class="name svelte-drktzi"> </span> <span class="sub svelte-drktzi"> </span></th><!><td class="only svelte-drktzi"><!></td></tr>'),gn=l('<tbody class="svelte-drktzi"><tr class="group svelte-drktzi"><th scope="rowgroup" class="svelte-drktzi">Plugins</th></tr><!></tbody>'),bn=l('<div class="scroll svelte-drktzi"><table class="svelte-drktzi"><thead class="svelte-drktzi"><tr><th class="label svelte-drktzi" scope="col"></th><!><th class="only svelte-drktzi" scope="col">Only here</th></tr></thead><!><!></table></div>'),kn=l('<section class="plugins svelte-drktzi" aria-labelledby="plugins-h"><div class="head svelte-drktzi"><h2 id="plugins-h" class="svelte-drktzi">Plugins</h2> <!></div> <!></section>');function yn(S,o){_t(o,!0);let m=He(!1);const M=h(()=>o.machines.filter(v=>o.comparison.machines[v.id])),R=v=>{const L=e(M).map(Q=>{const te=v[Q.id];return te?JSON.stringify([te.commit,te.version,te.enabled]):""});return new Set(L).size>1},w=h(()=>o.comparison.marketplaces.filter(v=>e(m)||v.behind.length>0||R(v.on))),D=h(()=>o.comparison.plugins.filter(v=>e(m)||v.lacking.length>0||v.onlyHere||R(v.on))),pe=h(()=>o.comparison.marketplaces.length+o.comparison.plugins.length-e(w).length-e(D).length),B=v=>v?Yt(v):"?";var re=kn(),me=p(re),fe=r(p(me),2);{var z=v=>{var L=sn(),Q=b(L,!0);_(()=>f(Q,e(m)?"Show only differences":`Show ${e(pe)} that match`)),Rt("click",L,()=>ze(m,!e(m))),i(v,L)};x(fe,v=>{(e(pe)>0||e(m))&&v(z)})}u(me);var he=r(me,2);{var T=v=>{var L=rn();i(v,L)},N=v=>{var L=ln();i(v,L)},_e=v=>{var L=bn(),Q=p(L);let te;var Te=p(Q),Ee=p(Te),We=r(p(Ee));ue(We,17,()=>o.machines,U=>U.id,(U,H)=>{var Y=on();let le;var ge=b(Y,!0);_(()=>{le=I(Y,1,"svelte-drktzi",null,le,{unknown:!o.comparison.machines[e(H).id]}),f(ge,e(H).name)}),i(U,Y)}),De(),u(Ee),u(Te);var Ie=r(Te);{var Ve=U=>{var H=pn(),Y=p(H),le=b(Y),ge=r(Y);ue(ge,17,()=>e(w),J=>J.key,(J,O)=>{var Z=un(),oe=p(Z),ie=p(oe),$e=b(ie,!0),Le=r(ie,2);{var t=a=>{var s=cn(),g=b(s,!0);_(()=>f(g,e(O).repo)),i(a,s)};x(Le,a=>{e(O).repo&&a(t)})}u(oe);var n=r(oe);ue(n,17,()=>o.machines,a=>a.id,(a,s)=>{const g=h(()=>e(O).on[e(s).id]),k=h(()=>!o.comparison.machines[e(s).id]),y=h(()=>e(O).behind.includes(e(s).id));var $=ht();let W;var K=p($);{var C=j=>{var X=mt();i(j,X)},q=j=>{var X=ft(),ae=Me(X),be=b(ae,!0),A=r(ae,2);{var G=E=>{var se=vn(),ke=b(se);_(ce=>f(ke,`behind ${ce??""}`),[()=>B(e(O).latest)]),i(E,se)};x(A,E=>{e(y)&&E(G)})}_(E=>{qe(ae,"title",e(g).commit??"Commit unknown"),f(be,E)},[()=>B(e(g).commit)]),i(j,X)},ne=j=>{var X=dn();i(j,X)};x(K,j=>{e(k)?j(C):e(g)?j(q,1):j(ne,-1)})}u($),_(()=>W=I($,1,"svelte-drktzi",null,W,{behind:e(y),unknown:e(k)})),i(a,$)}),De(),u(Z),_(()=>f($e,e(O).name)),i(J,Z)}),u(H),_(()=>qe(le,"colspan",o.machines.length+2)),i(U,H)};x(Ie,U=>{e(w).length>0&&U(Ve)})}var Fe=r(Ie);{var Pe=U=>{var H=gn(),Y=p(H),le=b(Y),ge=r(Y);ue(ge,17,()=>e(D),J=>J.key,(J,O)=>{var Z=_n();let oe;var ie=p(Z),$e=p(ie),Le=b($e,!0),t=r($e,2),n=b(t,!0);u(ie);var a=r(ie);ue(a,17,()=>o.machines,k=>k.id,(k,y)=>{const $=h(()=>e(O).on[e(y).id]),W=h(()=>!o.comparison.machines[e(y).id]),K=h(()=>e(O).lacking.includes(e(y).id));var C=ht();let q;var ne=p(C);{var j=A=>{var G=mt();i(A,G)},X=A=>{var G=ft(),E=Me(G),se=b(E,!0),ke=r(E,2);{var ce=Se=>{var Je=mn();i(Se,Je)};x(ke,Se=>{e($).enabled||Se(ce)})}_(()=>f(se,e($).version??"?")),i(A,G)},ae=A=>{var G=fn();i(A,G)},be=A=>{var G=hn();i(A,G)};x(ne,A=>{e(W)?A(j):e($)?A(X,1):e(K)?A(ae,2):A(be,-1)})}u(C),_(()=>q=I(C,1,"svelte-drktzi",null,q,{lacking:e(K),unknown:e(W)})),i(k,C)});var s=r(a),g=p(s);{let k=h(()=>`Only where ${e(O).name} is installed`);Qt(g,{get checked(){return e(O).onlyHere},get"aria-label"(){return e(k)},title:"Wanted only where it is installed: its gaps stop counting",onCheckedChange:y=>o.onOnlyHere(e(O).key,!!y)})}u(s),u(Z),_(()=>{oe=I(Z,1,"svelte-drktzi",null,oe,{quiet:e(O).onlyHere}),f(Le,e(O).name),f(n,e(O).marketplace)}),i(J,Z)}),u(H),_(()=>qe(le,"colspan",o.machines.length+2)),i(U,H)};x(Fe,U=>{e(D).length>0&&U(Pe)})}u(Q),u(L),_(()=>te=Ht(Q,"",te,{"--cols":o.machines.length})),i(v,L)};x(he,v=>{e(M).length===0?v(T):e(w).length===0&&e(D).length===0?v(N,1):v(_e,-1)})}u(re),i(S,re),gt()}It(["click"]);var wn=l("<iconify-icon></iconify-icon> ",3),Ge=l("<iconify-icon></iconify-icon>",2),xn=l('<span class="note svelte-cmni6b">updated last; the page reconnects after</span>'),zn=l("<!> ",1),$n=l('<p class="progress svelte-cmni6b"> </p>'),Sn=l('<pre class="svelte-cmni6b"><b> </b> </pre>'),On=l('<details class="align-failed svelte-cmni6b" open=""><summary class="svelte-cmni6b"> </summary> <!></details>'),jn=l('<p class="refused svelte-cmni6b" role="status"> </p>'),An=l('<details class="svelte-cmni6b"><summary class="svelte-cmni6b">Output</summary> <pre class="svelte-cmni6b"> </pre></details>'),Mn=l("<p> <!></p> <!>",1),Tn=l('<li><span class="node svelte-cmni6b" aria-hidden="true"><!></span> <div class="body svelte-cmni6b"><div class="line1 svelte-cmni6b"><span class="name svelte-cmni6b"> </span> <span> </span> <span class="sessions svelte-cmni6b"> </span> <!></div> <div class="line2 svelte-cmni6b"><span></span> <span class="svelte-cmni6b"> </span> <!></div> <div><iconify-icon></iconify-icon> <span class="svelte-cmni6b"> </span> <!></div> <!> <!> <!></div></li>',2),Pn=l('<div class="reload svelte-cmni6b" role="status"> <!></div>'),Ln=l('<p class="svelte-cmni6b">Every machine updated.</p>'),En=l('<pre class="svelte-cmni6b"> </pre>'),In=l('<div class="fail svelte-cmni6b"><b> </b> <span class="svelte-cmni6b"> </span> <!></div>'),Rn=l('<h2 class="svelte-cmni6b"> </h2> <!>',1),Bn=l('<section class="summary svelte-cmni6b" aria-live="polite"><!></section>'),Nn=l('<div class="machines svelte-cmni6b"><header class="top svelte-cmni6b"><div class="title svelte-cmni6b"><h1 class="svelte-cmni6b">Machines</h1> <p class="lede svelte-cmni6b"> </p></div> <!></header> <ol></ol> <!> <!> <!></div>');function Wn(S,o){_t(o,!0),Bt(()=>Ne.start());const m=h(()=>bt(Ne.machines.map(t=>({id:t.server.id||t.server.hostname,origin:t.local,machine:t}))));let M=He(ct({})),R=He(!1),w=He(null);const D=h(()=>Object.values(e(M)).some(t=>t.state!=="ok"&&t.state!=="failed")),pe=h(()=>e(m).some(t=>{const n=e(M)[t.id];return t.origin&&n?.state==="ok"&&!!n.version&&n.version!==Ze}));function B(t){return nn(Ue(t.machine),n=>e(M)[t.id]=n,Ce)}async function re(t){ze(w,null),await B(t)}async function me(){const t=e(m).flatMap(a=>{const s=Ye(a.machine,de.now);return s?[{id:a.id,name:ve(a.machine),result:{state:"failed",line:s,output:"",version:null}}]:[]}),n=e(m).filter(a=>!Ye(a.machine,de.now));ze(w,null),ze(R,!0),ze(M,Object.fromEntries(n.map(a=>[a.id,{state:"queued",line:"Waiting its turn",output:"",version:null}])),!0);try{const a=await an(n,B);ze(w,[...a.filter(s=>s.result.state==="failed").map(s=>({id:s.machine.id,name:ve(s.machine.machine),result:s.result})),...t],!0)}finally{ze(R,!1)}}const fe=h(()=>Vt(e(m).map(t=>({id:t.id,report:t.machine.plugins})),{has:t=>vt.get(dt(t),!1)}));let z=ct({});const he=new Set,T=new Set,N=1e3,_e=10;function v(t,n){const a=z[t]??{job:null,skew:0,error:null,unreachable:[],starting:!1};z[t]={...a,...n}}function L(t,n){return typeof n.error=="string"&&t!==400?n.error:t===400||t===404||t===405?"This machine’s claude-mux is too old for this; update it first.":`HTTP ${t}`}function Q(t,n,a){if(n>=400&&n!==409)return v(t.id,{error:L(n,a),starting:!1}),!1;const s=a.job??null;return v(t.id,{job:s,skew:typeof a.now=="number"?Date.now()-a.now:0,error:null,starting:!1}),s?.state==="running"}async function te(t){if(he.has(t.id))return;he.add(t.id);const n=de.fine();try{let a=0;for(;;){await Ce.sleep(N);const s=await Ce.request(`${Ue(t.machine)}/api/plugins`,"GET").catch(()=>null);if(!s||s.status>=500){if(++a<_e)continue;v(t.id,{error:"Stopped answering while the run was under way"});return}if(a=0,!Q(t,s.status,s.body))return}}finally{he.delete(t.id),n()}}async function Te(t){const{unreachable:n,...a}=Xt(e(fe),t.id);z[t.id]={job:null,skew:0,error:null,unreachable:n,starting:!0};try{const s=await fetch(`${Ue(t.machine)}/api/plugins`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});Q(t,s.status,await s.json().catch(()=>({})))&&await te(t)}catch(s){v(t.id,{error:String(s),starting:!1})}}Nt(()=>{for(const t of e(m))T.has(t.id)||!t.machine.online||!t.machine.plugins||Gt(()=>ut(t.machine,de.now))||(T.add(t.id),Ce.request(`${Ue(t.machine)}/api/plugins`,"GET").then(n=>{const a=n?.body;n&&a?.job?.state==="running"&&!z[t.id]&&Q(t,n.status,a)&&te(t)}))});const Ee=t=>!!t&&!t.error&&(t.starting||t.job?.state==="running");function We(t){const n=t.job?.steps??[],a=n.findIndex(y=>y.state==="running");if(a<0)return n.length&&n.every(y=>y.state!=="pending")?"Reading plugins again":"Starting";const s=n[a];let g=`${s.label} (${a+1}/${n.length})`;const k=s.startedAt===null?0:de.now-t.skew-s.startedAt;return k>=5e3&&(g+=`, ${s.kind==="update"?"still fetching":"still running"} ${Wt(Math.floor(k/1e3))}`),g}function Ie(t){return[...t.unreachable.map(n=>({command:`install ${n}`,output:"Its marketplace is not on this machine and has no repo to add it from."})),...(t.job?.steps??[]).filter(n=>n.state==="failed"||n.state==="timeout").map(n=>({command:n.state==="timeout"?`${n.command} (timed out)`:n.command,output:n.output})),...t.error?[{command:"Bring in line",output:t.error}]:[]]}function Ve(t){if(!t)return"Plugins not reported";if(t.inLine)return"Plugins in line";const n=(a,s)=>a.length<=3?a.map(g=>g.name).join(", "):`${a.length} ${s}`;return[t.missing.length?`Missing ${n(t.missing,"plugins")}`:"",t.disabled.length?`Turned off: ${n(t.disabled,"plugins")}`:"",t.behind.length?`Behind: ${n(t.behind,"marketplaces")}`:""].filter(Boolean).join("; ")}function Fe(t){return t.local?"this page’s machine":t.online?"online":Kt(t,de.now)}var Pe=Nn();qt("cmni6b",t=>{Ut(()=>{Ct.title="Machines · claude-mux"})});var U=p(Pe),H=p(U),Y=r(p(H),2),le=b(Y);u(H);var ge=r(H,2);{let t=h(()=>e(D)||e(m).length===0);Be(ge,{onclick:()=>{me()},get disabled(){return e(t)},children:(n,a)=>{var s=wn(),g=Me(s);_(()=>Ae(g,"icon",e(R)?"mdi:loading":"mdi:update"));let k;var y=r(g);_(()=>{k=I(g,1,"svelte-cmni6b",null,k,{spin:e(R)}),f(y,` ${e(R)?"Updating…":"Update all"}`)}),i(n,s)},$$slots:{default:!0}})}u(U);var J=r(U,2);let O;ue(J,21,()=>e(m),t=>t.id,(t,n)=>{const a=h(()=>e(n).machine),s=h(()=>e(M)[e(n).id]),g=h(()=>ut(e(a),de.now)),k=h(()=>Ye(e(a),de.now)),y=h(()=>Jt(e(a))),$=h(()=>e(fe).machines[e(n).id]),W=h(()=>z[e(n).id]),K=h(()=>Ee(e(W))),C=h(()=>e(W)&&!e(K)?Ie(e(W)):[]);var q=Tn();let ne;var j=p(q),X=p(j);{var ae=c=>{var d=Ge();Ae(d,"icon","mdi:check"),I(d,1,"svelte-cmni6b"),i(c,d)},be=c=>{var d=Ge();Ae(d,"icon","mdi:close"),I(d,1,"svelte-cmni6b"),i(c,d)},A=c=>{var d=Ge();Ae(d,"icon","mdi:loading"),I(d,1,"spin svelte-cmni6b"),i(c,d)};x(X,c=>{e(s)?.state==="ok"?c(ae):e(s)?.state==="failed"?c(be,1):e(s)&&e(s).state!=="queued"&&c(A,2)})}u(j);var G=r(j,2),E=p(G),se=p(E),ke=b(se,!0),ce=r(se,2);let Se;var Je=b(ce,!0),tt=r(ce,2),kt=b(tt),yt=r(tt,2);{let c=h(()=>e(D)||!!e(k)),d=h(()=>e(k)??`Run claude-mux update on ${ve(e(a))}`);Be(yt,{variant:"outline",size:"sm",class:"upd",get disabled(){return e(c)},get title(){return e(d)},onclick:()=>{re(e(n))},children:(P,ee)=>{De();var ye=Qe("Update");i(P,ye)},$$slots:{default:!0}})}u(E);var Ke=r(E,2),nt=p(Ke);let at;var st=r(nt,2),wt=b(st,!0),xt=r(st,2);{var zt=c=>{var d=xn();i(c,d)};x(xt,c=>{e(n).origin&&c(zt)})}u(Ke);var Re=r(Ke,2);let it;var Xe=p(Re);_(()=>Ae(Xe,"icon",e($)?e($).inLine?"mdi:puzzle-check-outline":"mdi:puzzle-remove-outline":"mdi:help-circle-outline")),I(Xe,1,"svelte-cmni6b");var rt=r(Xe,2),$t=b(rt,!0),St=r(rt,2);{var Ot=c=>{{let d=h(()=>e(K)||!!e(g)),P=h(()=>e(g)??`Update ${ve(e(a))}’s marketplaces and install or enable what it lacks`);Be(c,{variant:"outline",size:"sm",class:"align",get disabled(){return e(d)},get title(){return e(P)},onclick:()=>{Te(e(n))},children:(ee,ye)=>{var Oe=zn(),we=Me(Oe);{var xe=V=>{var F=Ge();Ae(F,"icon","mdi:loading"),I(F,1,"spin svelte-cmni6b"),i(V,F)};x(we,V=>{e(K)&&V(xe)})}var je=r(we);_(()=>f(je,` ${e(K)?"Bringing in line…":"Bring in line"}`)),i(ee,Oe)},$$slots:{default:!0}})}};x(St,c=>{e($)&&!e($).inLine&&c(Ot)})}u(Re);var lt=r(Re,2);{var jt=c=>{var d=$n(),P=b(d,!0);_(ee=>f(P,ee),[()=>We(e(W))]),i(c,d)},At=c=>{var d=On(),P=p(d),ee=b(P,!0),ye=r(P,2);ue(ye,17,()=>e(C),Dt,(Oe,we)=>{var xe=Sn(),je=p(xe),V=b(je,!0),F=r(je);u(xe),_(()=>{f(V,e(we).command),f(F,`
3
3
  ${e(we).output??""}`)}),i(Oe,xe)}),u(d),_(()=>f(ee,e(C).length===1?"One step failed":`${e(C).length} steps failed`)),i(c,d)};x(lt,c=>{e(W)&&e(K)?c(jt):e(C).length>0&&c(At,1)})}var ot=r(lt,2);{var Mt=c=>{var d=jn(),P=b(d,!0);_(()=>f(P,e(g))),i(c,d)};x(ot,c=>{e(g)&&e(a).online&&c(Mt)})}var Tt=r(ot,2);{var Pt=c=>{var d=Mn(),P=Me(d);let ee;var ye=p(P,!0),Oe=r(ye);{var we=V=>{var F=Qe();_(()=>f(F,`— now ${e(s).version??""}`)),i(V,F)};x(Oe,V=>{e(s).state==="ok"&&e(s).version&&V(we)})}u(P);var xe=r(P,2);{var je=V=>{var F=An(),Lt=r(p(F),2),Et=b(Lt,!0);u(F),_(()=>{F.open=e(s).state==="failed",f(Et,e(s).output)}),i(V,F)};x(xe,V=>{e(s).output&&(e(s).state==="failed"||e(s).state==="running")&&V(je)})}_(()=>{ee=I(P,1,"progress svelte-cmni6b",null,ee,{failed:e(s).state==="failed"}),f(ye,e(s).line)}),i(c,d)};x(Tt,c=>{e(s)&&c(Pt)})}u(G),u(q),_((c,d,P,ee)=>{ne=I(q,1,`station ${e(s)?.state??"idle"??""}`,"svelte-cmni6b",ne,{off:!e(a).online}),f(ke,c),Se=I(ce,1,"ver svelte-cmni6b",null,Se,{drift:e(y)}),qe(ce,"title",e(y)?`Differs from this page’s ${Ze}`:"Same as this page"),f(Je,e(a).version??"version unknown"),f(kt,`${d??""} live`),at=I(nt,1,"dot svelte-cmni6b",null,at,{on:e(a).online}),f(wt,P),it=I(Re,1,"line2 plugins-line svelte-cmni6b",null,it,{drift:!!e($)&&!e($).inLine}),f($t,ee)},[()=>ve(e(a)),()=>Ft(e(a)),()=>Fe(e(a)),()=>Ve(e($))]),i(t,q)}),u(J);var Z=r(J,2);{var oe=t=>{var n=Pn(),a=p(n),s=r(a);Be(s,{size:"sm",variant:"outline",onclick:()=>location.reload(),children:(g,k)=>{De();var y=Qe("Reload the page");i(g,y)},$$slots:{default:!0}}),u(n),_(g=>f(a,`${g??""} runs a new version now. `),[()=>ve(Ne.machines[0])]),i(t,n)};x(Z,t=>{e(pe)&&t(oe)})}var ie=r(Z,2);{let t=h(()=>e(m).map(n=>({id:n.id,name:ve(n.machine)})));yn(ie,{get comparison(){return e(fe)},get machines(){return e(t)},onOnlyHere:(n,a)=>{vt.set(dt(n),a)}})}var $e=r(ie,2);{var Le=t=>{var n=Bn(),a=p(n);{var s=k=>{var y=Ln();i(k,y)},g=k=>{var y=Rn(),$=Me(y),W=b($),K=r($,2);ue(K,17,()=>e(w),C=>C.id,(C,q)=>{var ne=In(),j=p(ne),X=b(j,!0),ae=r(j,2),be=b(ae,!0),A=r(ae,2);{var G=E=>{var se=En(),ke=b(se,!0);_(()=>f(ke,e(q).result.output)),i(E,se)};x(A,E=>{e(q).result.output&&E(G)})}u(ne),_(()=>{f(X,e(q).name),f(be,e(q).result.line)}),i(C,ne)}),_(()=>f(W,`${e(w).length===1?"One machine":`${e(w).length} machines`} did not update`)),i(k,y)};x(a,k=>{e(w).length===0?k(s):k(g,-1)})}u(n),i(t,n)};x($e,t=>{e(w)&&t(Le)})}u(Pe),_(t=>{f(le,`This page runs on ${t??""}, claude-mux ${Ze}. Updates go one machine at a time,
4
4
  this one last.`),O=I(J,1,"track svelte-cmni6b",null,O,{running:e(R)})},[()=>ve(Ne.machines[0])]),i(S,Pe),gt()}export{Wn as component};
5
- //# sourceMappingURL=6.C2hEoITj.js.map
5
+ //# sourceMappingURL=6.CzLoA0w7.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"6.C2hEoITj.js","sources":["../../../../../../src/lib/fleet-update.ts","../../../../../../src/lib/components/PluginMatrix.svelte","../../../../../../src/routes/machines/+page.svelte"],"sourcesContent":["/**\n * Updating machines from the Machines view: one at a time, the origin last.\n *\n * Each machine runs its own `claude-mux update` (`POST <base>/api/update`,\n * `src/server/self-update.ts`) and is then read until the job it started says\n * how it ended. The update restarts that machine's server, so a read that\n * finds nobody answering means it is coming back, not that it failed. The\n * origin goes last because its restart takes this page's server with it.\n * Nothing here touches the DOM; the requests and the clock are handed in.\n */\n\nexport type StepState = 'queued' | 'starting' | 'running' | 'restarting' | 'ok' | 'failed';\n\nexport interface StepProgress {\n\tstate: StepState;\n\t/** One line saying where it is: the update's last line, or why it failed. */\n\tline: string;\n\t/** What the update printed, as far as the machine has said. */\n\toutput: string;\n\t/** The version the machine answered with at the end. */\n\tversion: string | null;\n}\n\n/** An answer from a machine: its status and JSON body, or null when it did not answer. */\nexport type Answer = { status: number; body: Record<string, unknown> } | null;\n\nexport interface UpdateIO {\n\trequest(url: string, method: 'GET' | 'POST'): Promise<Answer>;\n\tsleep(ms: number): Promise<void>;\n\tnow(): number;\n}\n\nexport interface UpdateTiming {\n\tpollMs: number;\n\t/** How long a machine has from the start to report a result. */\n\ttimeoutMs: number;\n}\n\n/** How long a machine that finished its update may keep answering with the old version. */\nconst RESTART_GRACE_MS = 30_000;\n/** What `claude-mux update` prints when it installs nothing and restarts nothing. */\nconst NOTHING_TO_DO = /Already on latest|skipping restart/;\n\nexport const DEFAULT_TIMING: UpdateTiming = { pollMs: 1_500, timeoutMs: 10 * 60_000 };\n\n/** The machines in the order they are updated: as given, with the origin moved last. */\nexport function updateOrder<T extends { origin: boolean }>(machines: readonly T[]): T[] {\n\treturn [...machines.filter((m) => !m.origin), ...machines.filter((m) => m.origin)];\n}\n\n/** The last line of an update's output that says anything. */\nexport function lastLine(output: string): string {\n\tconst lines = output.split('\\n').map((l) => l.trim());\n\treturn lines.filter(Boolean).at(-1) ?? '';\n}\n\ninterface JobAnswer {\n\tfromVersion?: unknown;\n\tstate?: unknown;\n\tstartedAt?: unknown;\n\toutput?: unknown;\n\texitCode?: unknown;\n}\n\nfunction jobOf(body: Record<string, unknown>): JobAnswer | null {\n\tconst job = body.job;\n\treturn job && typeof job === 'object' ? (job as JobAnswer) : null;\n}\n\n/**\n * Update the machine whose API is at `base` ('' for the origin, `/fleet/<id>`\n * for another) and resolve with how it ended. Never rejects.\n */\nexport async function updateMachine(\n\tbase: string,\n\tonProgress: (p: StepProgress) => void,\n\tio: UpdateIO,\n\ttiming: UpdateTiming = DEFAULT_TIMING\n): Promise<StepProgress> {\n\tconst url = `${base}/api/update`;\n\tconst report = (p: StepProgress) => {\n\t\tonProgress(p);\n\t\treturn p;\n\t};\n\tconst fail = (line: string, output = '') => report({ state: 'failed', line, output, version: null });\n\tconst ask = (method: 'GET' | 'POST') => io.request(url, method).catch((): Answer => null);\n\n\treport({ state: 'starting', line: 'Starting the update…', output: '', version: null });\n\tconst started = await ask('POST');\n\tif (!started) return fail('Did not answer');\n\t// The relay's own 404 (a machine it does not know) carries an `error`; a machine without the route does not.\n\tif (started.status === 404 && typeof started.body.error !== 'string') {\n\t\treturn fail('Too old to be updated from here; run `claude-mux update` on it');\n\t}\n\tconst startJob = jobOf(started.body);\n\tif ((started.status !== 202 && started.status !== 409) || typeof startJob?.startedAt !== 'number') {\n\t\treturn fail(typeof started.body.error === 'string' ? started.body.error : `Refused (${started.status})`);\n\t}\n\tconst startedAt = startJob.startedAt;\n\tconst deadline = io.now() + timing.timeoutMs;\n\tlet output = '';\n\tlet restartWait: number | undefined;\n\n\twhile (io.now() < deadline) {\n\t\tawait io.sleep(timing.pollMs);\n\t\tconst answer = await ask('GET');\n\t\t// Nobody answering, or the relay's 502 for a machine it cannot reach: a restart in progress.\n\t\tif (!answer || answer.status >= 500) {\n\t\t\treport({ state: 'restarting', line: 'Restarting…', output, version: null });\n\t\t\tcontinue;\n\t\t}\n\t\tconst job = jobOf(answer.body);\n\t\tif (!job || job.startedAt !== startedAt) {\n\t\t\treport({ state: 'restarting', line: 'Waiting for it to report…', output, version: null });\n\t\t\tcontinue;\n\t\t}\n\t\toutput = typeof job.output === 'string' ? job.output : output;\n\t\tconst version = typeof answer.body.version === 'string' ? answer.body.version : null;\n\t\tif (job.state === 'running') {\n\t\t\treport({ state: 'running', line: lastLine(output) || 'Updating…', output, version: null });\n\t\t\tcontinue;\n\t\t}\n\t\tif (job.state === 'ok') {\n\t\t\t// The update exits as soon as it has asked for the restart, so the old\n\t\t\t// server may still be the one answering; it is given a while to go.\n\t\t\tconst stale = version !== null && version === job.fromVersion && !NOTHING_TO_DO.test(output);\n\t\t\tif (stale && (restartWait ??= io.now() + RESTART_GRACE_MS) > io.now()) {\n\t\t\t\treport({ state: 'restarting', line: 'Restarting…', output, version: null });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn report({ state: 'ok', line: lastLine(output) || 'Updated', output, version });\n\t\t}\n\t\tconst code = typeof job.exitCode === 'number' ? ` (exit ${job.exitCode})` : '';\n\t\treturn fail(`${lastLine(output) || 'Update failed'}${code}`, output);\n\t}\n\treturn fail(`No result after ${Math.round(timing.timeoutMs / 60_000)} min`, output);\n}\n\n/**\n * Update every machine in turn, origin last, carrying on past a failure.\n * `run` updates one machine and reports its progress under its id; the\n * results come back in the order the machines were updated.\n */\nexport async function updateAll<T extends { id: string; origin: boolean }>(\n\tmachines: readonly T[],\n\trun: (machine: T) => Promise<StepProgress>\n): Promise<{ machine: T; result: StepProgress }[]> {\n\tconst results: { machine: T; result: StepProgress }[] = [];\n\tfor (const machine of updateOrder(machines)) {\n\t\tlet result: StepProgress;\n\t\ttry {\n\t\t\tresult = await run(machine);\n\t\t} catch (err) {\n\t\t\tresult = { state: 'failed', line: String(err), output: '', version: null };\n\t\t}\n\t\tresults.push({ machine, result });\n\t}\n\treturn results;\n}\n\n/** The browser's way of asking a machine: `fetch`, with anything but a JSON answer counted as no answer. */\nexport const browserIO: UpdateIO = {\n\tasync request(url, method) {\n\t\ttry {\n\t\t\tconst res = await fetch(url, { method, cache: 'no-store' });\n\t\t\tconst body = (await res.json().catch(() => ({}))) as Record<string, unknown>;\n\t\t\treturn { status: res.status, body };\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t},\n\tsleep: (ms) => new Promise((r) => setTimeout(r, ms)),\n\tnow: () => Date.now()\n};\n","<script lang=\"ts\">\n\timport { Checkbox } from '$lib/components/ui/checkbox';\n\timport type { PluginComparison } from '$shared/fleet-plugins.js';\n\timport { shortHash } from '$lib/side-panel/history';\n\n\t/**\n\t * The fleet's plugins side by side (`comparePlugins()` in\n\t * `src/fleet-plugins.ts`): a column per machine, the marketplaces with the\n\t * commit each machine is at and the plugins with the version each has.\n\t * A cell a machine should fill and does not is drawn as a gap; a plugin can\n\t * be marked \"only here\", a fleet preference, so its gaps stop counting.\n\t * Rows where the machines agree are folded away until asked for.\n\t */\n\tinterface Props {\n\t\tcomparison: PluginComparison;\n\t\t/** The columns, in the Machines view's order; a machine with no report shows as unknown. */\n\t\tmachines: { id: string; name: string }[];\n\t\tonOnlyHere: (key: string, value: boolean) => void;\n\t}\n\n\tlet { comparison, machines, onOnlyHere }: Props = $props();\n\n\tlet showAll = $state(false);\n\n\tconst known = $derived(machines.filter((m) => comparison.machines[m.id]));\n\t/** Whether the machines' cells differ in what they show: the name each machine gives a marketplace or plugin is its own. */\n\tconst differs = (on: Record<string, { commit?: string | null; version?: string | null; enabled?: boolean } | null>) => {\n\t\tconst values = known.map((m) => {\n\t\t\tconst c = on[m.id];\n\t\t\treturn c ? JSON.stringify([c.commit, c.version, c.enabled]) : '';\n\t\t});\n\t\treturn new Set(values).size > 1;\n\t};\n\tconst marketplaces = $derived(\n\t\tcomparison.marketplaces.filter((r) => showAll || r.behind.length > 0 || differs(r.on))\n\t);\n\tconst plugins = $derived(\n\t\tcomparison.plugins.filter((r) => showAll || r.lacking.length > 0 || r.onlyHere || differs(r.on))\n\t);\n\tconst hidden = $derived(\n\t\tcomparison.marketplaces.length + comparison.plugins.length - marketplaces.length - plugins.length\n\t);\n\n\tconst short = (sha: string | null) => (sha ? shortHash(sha) : '?');\n</script>\n\n<section class=\"plugins\" aria-labelledby=\"plugins-h\">\n\t<div class=\"head\">\n\t\t<h2 id=\"plugins-h\">Plugins</h2>\n\t\t{#if hidden > 0 || showAll}\n\t\t\t<button class=\"fold\" onclick={() => (showAll = !showAll)}>\n\t\t\t\t{showAll ? 'Show only differences' : `Show ${hidden} that match`}\n\t\t\t</button>\n\t\t{/if}\n\t</div>\n\n\t{#if known.length === 0}\n\t\t<p class=\"empty\">No machine has reported its plugins yet.</p>\n\t{:else if marketplaces.length === 0 && plugins.length === 0}\n\t\t<p class=\"empty\">Every machine has the same plugins, and every marketplace is current.</p>\n\t{:else}\n\t\t<div class=\"scroll\">\n\t\t\t<table style:--cols={machines.length}>\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th class=\"label\" scope=\"col\"></th>\n\t\t\t\t\t\t{#each machines as m (m.id)}\n\t\t\t\t\t\t\t<th scope=\"col\" class:unknown={!comparison.machines[m.id]}>{m.name}</th>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t<th class=\"only\" scope=\"col\">Only here</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t{#if marketplaces.length > 0}\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr class=\"group\"><th colspan={machines.length + 2} scope=\"rowgroup\">Marketplaces</th></tr>\n\t\t\t\t\t\t{#each marketplaces as r (r.key)}\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<th class=\"label\" scope=\"row\">\n\t\t\t\t\t\t\t\t\t<span class=\"name\">{r.name}</span>\n\t\t\t\t\t\t\t\t\t{#if r.repo}<span class=\"sub\">{r.repo}</span>{/if}\n\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t{#each machines as m (m.id)}\n\t\t\t\t\t\t\t\t\t{@const at = r.on[m.id]}\n\t\t\t\t\t\t\t\t\t{@const unknown = !comparison.machines[m.id]}\n\t\t\t\t\t\t\t\t\t{@const behind = r.behind.includes(m.id)}\n\t\t\t\t\t\t\t\t\t<td class:behind class:unknown>\n\t\t\t\t\t\t\t\t\t\t{#if unknown}\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"na\">unknown</span>\n\t\t\t\t\t\t\t\t\t\t{:else if at}\n\t\t\t\t\t\t\t\t\t\t\t<code title={at.commit ?? 'Commit unknown'}>{short(at.commit)}</code>\n\t\t\t\t\t\t\t\t\t\t\t{#if behind}<span class=\"flag\">behind {short(r.latest)}</span>{/if}\n\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"na\">not added</span>\n\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</tbody>\n\t\t\t\t{/if}\n\t\t\t\t{#if plugins.length > 0}\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr class=\"group\"><th colspan={machines.length + 2} scope=\"rowgroup\">Plugins</th></tr>\n\t\t\t\t\t\t{#each plugins as r (r.key)}\n\t\t\t\t\t\t\t<tr class:quiet={r.onlyHere}>\n\t\t\t\t\t\t\t\t<th class=\"label\" scope=\"row\">\n\t\t\t\t\t\t\t\t\t<span class=\"name\">{r.name}</span>\n\t\t\t\t\t\t\t\t\t<span class=\"sub\">{r.marketplace}</span>\n\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t{#each machines as m (m.id)}\n\t\t\t\t\t\t\t\t\t{@const have = r.on[m.id]}\n\t\t\t\t\t\t\t\t\t{@const unknown = !comparison.machines[m.id]}\n\t\t\t\t\t\t\t\t\t{@const lacking = r.lacking.includes(m.id)}\n\t\t\t\t\t\t\t\t\t<td class:lacking class:unknown>\n\t\t\t\t\t\t\t\t\t\t{#if unknown}\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"na\">unknown</span>\n\t\t\t\t\t\t\t\t\t\t{:else if have}\n\t\t\t\t\t\t\t\t\t\t\t<code>{have.version ?? '?'}</code>\n\t\t\t\t\t\t\t\t\t\t\t{#if !have.enabled}<span class=\"flag\">off</span>{/if}\n\t\t\t\t\t\t\t\t\t\t{:else if lacking}\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"flag\">missing</span>\n\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"na\">—</span>\n\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t<td class=\"only\">\n\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\tchecked={r.onlyHere}\n\t\t\t\t\t\t\t\t\t\taria-label={`Only where ${r.name} is installed`}\n\t\t\t\t\t\t\t\t\t\ttitle=\"Wanted only where it is installed: its gaps stop counting\"\n\t\t\t\t\t\t\t\t\t\tonCheckedChange={(v) => onOnlyHere(r.key, !!v)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</tbody>\n\t\t\t\t{/if}\n\t\t\t</table>\n\t\t</div>\n\t{/if}\n</section>\n\n<style>\n\t.plugins {\n\t\tmargin-top: 28px;\n\t\tpadding-top: 16px;\n\t\tborder-top: 1px solid var(--rail);\n\t}\n\t.head {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 12px;\n\t\tmargin-bottom: 10px;\n\t}\n\th2 {\n\t\tmargin: 0;\n\t\tfont-size: 15px;\n\t\tfont-weight: 600;\n\t}\n\t.fold {\n\t\tmargin-left: auto;\n\t\tbackground: none;\n\t\tborder: 0;\n\t\tpadding: 0;\n\t\tcolor: var(--ink-muted);\n\t\tfont-size: 12px;\n\t\tcursor: pointer;\n\t\ttext-decoration: underline;\n\t\ttext-underline-offset: 3px;\n\t}\n\t.fold:hover {\n\t\tcolor: var(--ink);\n\t}\n\t.empty {\n\t\tmargin: 0;\n\t\tcolor: var(--ink-muted);\n\t}\n\t.scroll {\n\t\toverflow-x: auto;\n\t\tmargin: 0 -4px;\n\t}\n\ttable {\n\t\tborder-collapse: collapse;\n\t\tmin-width: 100%;\n\t\tfont-size: 12.5px;\n\t}\n\tth,\n\ttd {\n\t\tpadding: 6px 10px;\n\t\ttext-align: left;\n\t\tvertical-align: top;\n\t\twhite-space: nowrap;\n\t}\n\tthead th {\n\t\tcolor: var(--ink-muted);\n\t\tfont-weight: 500;\n\t\tborder-bottom: 1px solid var(--rail);\n\t}\n\tthead th.unknown {\n\t\tcolor: var(--ink-dim);\n\t}\n\t.group th {\n\t\tpadding-top: 14px;\n\t\tcolor: var(--ink-dim);\n\t\tfont-weight: 500;\n\t\tfont-size: 12px;\n\t}\n\t.label {\n\t\tmin-width: 150px;\n\t}\n\t.label .name {\n\t\tdisplay: block;\n\t\tcolor: var(--ink);\n\t\tfont-weight: 500;\n\t}\n\t.label .sub {\n\t\tdisplay: block;\n\t\tcolor: var(--ink-dim);\n\t\tfont-size: 11.5px;\n\t}\n\ttbody tr:not(.group) {\n\t\tborder-top: 1px solid color-mix(in oklch, var(--rail) 60%, transparent);\n\t}\n\tcode {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 12px;\n\t\tcolor: var(--ink-muted);\n\t}\n\t.na {\n\t\tcolor: var(--ink-dim);\n\t}\n\t/* A gap the fleet wants filled: the cell itself is drawn hollow, so the\n\t differences read across the table without reading every value. */\n\ttd.lacking,\n\ttd.behind {\n\t\tbox-shadow: inset 0 0 0 1px color-mix(in oklch, var(--bad) 55%, transparent);\n\t\tborder-radius: 5px;\n\t}\n\t.flag {\n\t\tdisplay: block;\n\t\tcolor: var(--bad);\n\t\tfont-size: 11.5px;\n\t}\n\ttd.lacking .flag:only-child {\n\t\tdisplay: inline;\n\t}\n\ttr.quiet .label .name,\n\ttr.quiet code {\n\t\tcolor: var(--ink-dim);\n\t}\n\t.only {\n\t\ttext-align: center;\n\t\tcolor: var(--ink-dim);\n\t\tfont-weight: 400;\n\t}\n</style>\n","<script lang=\"ts\">\n\timport { onMount, untrack } from 'svelte';\n\timport { Button } from '$lib/components/ui/button';\n\timport { clock } from '$lib/stores/clock.svelte';\n\timport { apiBase, blockedReason, fleetStore, liveCount, machineName, offlineLabel, offlineReason, versionDrifts, type Machine } from '$lib/stores/fleet.svelte';\n\timport { browserIO, updateAll, updateMachine, updateOrder, type StepProgress } from '$lib/fleet-update';\n\timport { VERSION } from '$shared/utils/version.js';\n\timport PluginMatrix from '$lib/components/PluginMatrix.svelte';\n\timport { fleetPrefsStore } from '$lib/stores/fleet-prefs.svelte';\n\timport { alignPlan, comparePlugins, type AlignAnswer, type AlignJob, type MachineStanding } from '$shared/fleet-plugins.js';\n\timport { onlyHereKey } from '$shared/fleet-prefs.js';\n\timport { formatSpinnerElapsed } from '$lib/format';\n\n\t/**\n\t * The Machines view: every machine in the fleet with its version, whether\n\t * it answers, its live sessions, and an update button; \"Update all\" runs\n\t * them in turn with this page's own machine last, since its restart takes\n\t * the page's server with it (`$lib/fleet-update`). Each machine's plugins\n\t * are compared with the rest (`comparePlugins()`), and \"Bring in line\"\n\t * updates its marketplaces and installs or enables what it lacks.\n\t */\n\n\tonMount(() => fleetStore.start());\n\n\ttype Row = { id: string; origin: boolean; machine: Machine };\n\n\t/** In the order \"Update all\" takes them, so the list reads as the run. */\n\tconst rows: Row[] = $derived(\n\t\tupdateOrder(fleetStore.machines.map((m) => ({ id: m.server.id || m.server.hostname, origin: m.local, machine: m })))\n\t);\n\n\tlet progress = $state<Record<string, StepProgress>>({});\n\tlet runningAll = $state(false);\n\t/** Set when \"Update all\" finishes: what failed, in order. */\n\tlet summary = $state<{ id: string; name: string; result: StepProgress }[] | null>(null);\n\t/** An update is under way, or queued behind one. */\n\tconst busy = $derived(Object.values(progress).some((p) => p.state !== 'ok' && p.state !== 'failed'));\n\t/** This page's own machine came back on another version, so the page is stale. */\n\tconst originUpdated = $derived(\n\t\trows.some((r) => {\n\t\t\tconst p = progress[r.id];\n\t\t\treturn r.origin && p?.state === 'ok' && !!p.version && p.version !== VERSION;\n\t\t})\n\t);\n\n\tfunction runOne(row: Row): Promise<StepProgress> {\n\t\treturn updateMachine(apiBase(row.machine), (p) => (progress[row.id] = p), browserIO);\n\t}\n\n\tasync function updateOne(row: Row) {\n\t\tsummary = null;\n\t\tawait runOne(row);\n\t}\n\n\tasync function updateEverything() {\n\t\t// An offline machine cannot be reached to update; it is reported with the failures.\n\t\tconst skipped = rows.flatMap((r) => {\n\t\t\tconst why = offlineReason(r.machine, clock.now);\n\t\t\treturn why ? [{ id: r.id, name: machineName(r.machine), result: { state: 'failed', line: why, output: '', version: null } as StepProgress }] : [];\n\t\t});\n\t\tconst todo = rows.filter((r) => !offlineReason(r.machine, clock.now));\n\t\tsummary = null;\n\t\trunningAll = true;\n\t\tprogress = Object.fromEntries(todo.map((r) => [r.id, { state: 'queued', line: 'Waiting its turn', output: '', version: null }]));\n\t\ttry {\n\t\t\tconst results = await updateAll(todo, runOne);\n\t\t\tsummary = [\n\t\t\t\t...results.filter((r) => r.result.state === 'failed').map((r) => ({ id: r.machine.id, name: machineName(r.machine.machine), result: r.result })),\n\t\t\t\t...skipped\n\t\t\t];\n\t\t} finally {\n\t\t\trunningAll = false;\n\t\t}\n\t}\n\n\tconst comparison = $derived(\n\t\tcomparePlugins(\n\t\t\trows.map((r) => ({ id: r.id, report: r.machine.plugins })),\n\t\t\t{ has: (key) => fleetPrefsStore.get(onlyHereKey(key), false) }\n\t\t)\n\t);\n\n\t/**\n\t * \"Bring in line\" on one machine, as this page last read it: the job the\n\t * machine runs, how far its clock is from this one (`skew`, so a step's\n\t * elapsed time reads right), and what failed before or around it.\n\t */\n\ttype Aligning = { job: AlignJob | null; skew: number; error: string | null; unreachable: string[]; starting: boolean };\n\tlet aligning = $state<Record<string, Aligning>>({});\n\t/** Machines whose job this page is reading, so one is never read twice over. */\n\tconst watching = new Set<string>();\n\t/** Machines asked once whether a job runs there, so a reload picks it up. */\n\tconst asked = new Set<string>();\n\n\tconst ALIGN_POLL_MS = 1_000;\n\t/** Reads in a row that may go unanswered (the relay's 502, a network blip) before the run counts as lost. */\n\tconst ALIGN_MISSES = 10;\n\n\t/** Change what this page holds on a machine's run, keeping the rest. */\n\tfunction setAligning(id: string, change: Partial<Aligning>) {\n\t\tconst prev = aligning[id] ?? { job: null, skew: 0, error: null, unreachable: [], starting: false };\n\t\taligning[id] = { ...prev, ...change };\n\t}\n\n\t/** Why a machine's answer is not a job. */\n\tfunction alignError(status: number, body: { error?: unknown }): string {\n\t\t// The relay's own 404 (a machine it does not know) carries an `error`; a machine without the route does not.\n\t\tif (typeof body.error === 'string' && status !== 400) return body.error;\n\t\t// 400: a machine that reads the plan's older shape.\n\t\treturn status === 400 || status === 404 || status === 405 ? 'This machine’s claude-mux is too old for this; update it first.' : `HTTP ${status}`;\n\t}\n\n\t/** Take in a machine's answer; false when there is nothing more to read. */\n\tfunction takeAnswer(row: Row, status: number, body: Partial<AlignAnswer> & { error?: unknown }): boolean {\n\t\tif (status >= 400 && status !== 409) {\n\t\t\tsetAligning(row.id, { error: alignError(status, body), starting: false });\n\t\t\treturn false;\n\t\t}\n\t\tconst job = body.job ?? null;\n\t\tsetAligning(row.id, { job, skew: typeof body.now === 'number' ? Date.now() - body.now : 0, error: null, starting: false });\n\t\treturn job?.state === 'running';\n\t}\n\n\t/** Read a machine's job until it ends. The machine runs it whether or not anyone reads. */\n\tasync function watchAlign(row: Row) {\n\t\tif (watching.has(row.id)) return;\n\t\twatching.add(row.id);\n\t\tconst release = clock.fine();\n\t\ttry {\n\t\t\tlet misses = 0;\n\t\t\tfor (;;) {\n\t\t\t\tawait browserIO.sleep(ALIGN_POLL_MS);\n\t\t\t\tconst answer = await browserIO.request(`${apiBase(row.machine)}/api/plugins`, 'GET').catch(() => null);\n\t\t\t\tif (!answer || answer.status >= 500) {\n\t\t\t\t\tif (++misses < ALIGN_MISSES) continue;\n\t\t\t\t\tsetAligning(row.id, { error: 'Stopped answering while the run was under way' });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmisses = 0;\n\t\t\t\tif (!takeAnswer(row, answer.status, answer.body)) return;\n\t\t\t}\n\t\t} finally {\n\t\t\twatching.delete(row.id);\n\t\t\trelease();\n\t\t}\n\t}\n\n\t/**\n\t * \"Bring in line\": the plan worked out from the whole fleet, handed to the\n\t * machine in one request (`POST /api/plugins`). The machine runs it as a job\n\t * of its own and answers at once, since a marketplace update can take\n\t * minutes; this page reads the job until it ends. A job already running\n\t * there is joined instead.\n\t */\n\tasync function bringInLine(row: Row) {\n\t\tconst { unreachable, ...plan } = alignPlan(comparison, row.id);\n\t\taligning[row.id] = { job: null, skew: 0, error: null, unreachable, starting: true };\n\t\ttry {\n\t\t\tconst res = await fetch(`${apiBase(row.machine)}/api/plugins`, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify(plan)\n\t\t\t});\n\t\t\tif (takeAnswer(row, res.status, await res.json().catch(() => ({})))) await watchAlign(row);\n\t\t} catch (err) {\n\t\t\tsetAligning(row.id, { error: String(err), starting: false });\n\t\t}\n\t}\n\n\t// A job started before this page loaded (or from another page) is read too.\n\t$effect(() => {\n\t\tfor (const row of rows) {\n\t\t\tif (asked.has(row.id) || !row.machine.online || !row.machine.plugins || untrack(() => blockedReason(row.machine, clock.now))) continue;\n\t\t\tasked.add(row.id);\n\t\t\tvoid browserIO.request(`${apiBase(row.machine)}/api/plugins`, 'GET').then((answer) => {\n\t\t\t\tconst body = answer?.body as Partial<AlignAnswer> | undefined;\n\t\t\t\tif (answer && body?.job?.state === 'running' && !aligning[row.id] && takeAnswer(row, answer.status, body)) void watchAlign(row);\n\t\t\t});\n\t\t}\n\t});\n\n\tconst running = (a: Aligning | undefined) => !!a && !a.error && (a.starting || a.job?.state === 'running');\n\n\t/** Where a running job is: its step, its place in the plan, and how long a fetch has run. */\n\tfunction alignLine(a: Aligning): string {\n\t\tconst steps = a.job?.steps ?? [];\n\t\tconst i = steps.findIndex((s) => s.state === 'running');\n\t\tif (i < 0) return steps.length && steps.every((s) => s.state !== 'pending') ? 'Reading plugins again' : 'Starting';\n\t\tconst step = steps[i];\n\t\tlet line = `${step.label} (${i + 1}/${steps.length})`;\n\t\tconst elapsed = step.startedAt === null ? 0 : clock.now - a.skew - step.startedAt;\n\t\tif (elapsed >= 5_000) line += `, ${step.kind === 'update' ? 'still fetching' : 'still running'} ${formatSpinnerElapsed(Math.floor(elapsed / 1000))}`;\n\t\treturn line;\n\t}\n\n\t/** What went wrong in a run: the steps that failed or timed out, plus what could not be planned or asked. */\n\tfunction alignFailures(a: Aligning): { command: string; output: string }[] {\n\t\treturn [\n\t\t\t...a.unreachable.map((id) => ({ command: `install ${id}`, output: 'Its marketplace is not on this machine and has no repo to add it from.' })),\n\t\t\t...(a.job?.steps ?? [])\n\t\t\t\t.filter((s) => s.state === 'failed' || s.state === 'timeout')\n\t\t\t\t.map((s) => ({ command: s.state === 'timeout' ? `${s.command} (timed out)` : s.command, output: s.output })),\n\t\t\t...(a.error ? [{ command: 'Bring in line', output: a.error }] : [])\n\t\t];\n\t}\n\n\t/** One line on how a machine's plugins stand against the fleet's. */\n\tfunction pluginLine(s: MachineStanding | undefined): string {\n\t\tif (!s) return 'Plugins not reported';\n\t\tif (s.inLine) return 'Plugins in line';\n\t\tconst names = (list: { name: string }[], noun: string) =>\n\t\t\tlist.length <= 3 ? list.map((p) => p.name).join(', ') : `${list.length} ${noun}`;\n\t\treturn [\n\t\t\ts.missing.length ? `Missing ${names(s.missing, 'plugins')}` : '',\n\t\t\ts.disabled.length ? `Turned off: ${names(s.disabled, 'plugins')}` : '',\n\t\t\ts.behind.length ? `Behind: ${names(s.behind, 'marketplaces')}` : ''\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join('; ');\n\t}\n\n\tfunction stateLabel(m: Machine): string {\n\t\tif (m.local) return 'this page’s machine';\n\t\treturn m.online ? 'online' : offlineLabel(m, clock.now);\n\t}\n</script>\n\n<svelte:head><title>Machines · claude-mux</title></svelte:head>\n\n<div class=\"machines\">\n\t<header class=\"top\">\n\t\t<div class=\"title\">\n\t\t\t<h1>Machines</h1>\n\t\t\t<p class=\"lede\">\n\t\t\t\tThis page runs on {machineName(fleetStore.machines[0])}, claude-mux {VERSION}. Updates go one machine at a time,\n\t\t\t\tthis one last.\n\t\t\t</p>\n\t\t</div>\n\t\t<Button onclick={() => void updateEverything()} disabled={busy || rows.length === 0}>\n\t\t\t<iconify-icon icon={runningAll ? 'mdi:loading' : 'mdi:update'} class:spin={runningAll}></iconify-icon>\n\t\t\t{runningAll ? 'Updating…' : 'Update all'}\n\t\t</Button>\n\t</header>\n\n\t<ol class=\"track\" class:running={runningAll}>\n\t\t{#each rows as row (row.id)}\n\t\t\t{@const m = row.machine}\n\t\t\t{@const p = progress[row.id]}\n\t\t\t{@const blocked = blockedReason(m, clock.now)}\n\t\t\t{@const offline = offlineReason(m, clock.now)}\n\t\t\t{@const drift = versionDrifts(m)}\n\t\t\t{@const standing = comparison.machines[row.id]}\n\t\t\t{@const align = aligning[row.id]}\n\t\t\t{@const alignBusy = running(align)}\n\t\t\t{@const failures = align && !alignBusy ? alignFailures(align) : []}\n\t\t\t<li class=\"station {p?.state ?? 'idle'}\" class:off={!m.online}>\n\t\t\t\t<span class=\"node\" aria-hidden=\"true\">\n\t\t\t\t\t{#if p?.state === 'ok'}<iconify-icon icon=\"mdi:check\"></iconify-icon>\n\t\t\t\t\t{:else if p?.state === 'failed'}<iconify-icon icon=\"mdi:close\"></iconify-icon>\n\t\t\t\t\t{:else if p && p.state !== 'queued'}<iconify-icon icon=\"mdi:loading\" class=\"spin\"></iconify-icon>{/if}\n\t\t\t\t</span>\n\t\t\t\t<div class=\"body\">\n\t\t\t\t\t<div class=\"line1\">\n\t\t\t\t\t\t<span class=\"name\">{machineName(m)}</span>\n\t\t\t\t\t\t<span class=\"ver\" class:drift title={drift ? `Differs from this page’s ${VERSION}` : 'Same as this page'}>\n\t\t\t\t\t\t\t{m.version ?? 'version unknown'}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span class=\"sessions\">{liveCount(m)} live</span>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tclass=\"upd\"\n\t\t\t\t\t\t\tdisabled={busy || !!offline}\n\t\t\t\t\t\t\ttitle={offline ?? `Run claude-mux update on ${machineName(m)}`}\n\t\t\t\t\t\t\tonclick={() => void updateOne(row)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tUpdate\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"line2\">\n\t\t\t\t\t\t<span class=\"dot\" class:on={m.online}></span>\n\t\t\t\t\t\t<span>{stateLabel(m)}</span>\n\t\t\t\t\t\t{#if row.origin}<span class=\"note\">updated last; the page reconnects after</span>{/if}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"line2 plugins-line\" class:drift={!!standing && !standing.inLine}>\n\t\t\t\t\t\t<iconify-icon\n\t\t\t\t\t\t\ticon={!standing ? 'mdi:help-circle-outline' : standing.inLine ? 'mdi:puzzle-check-outline' : 'mdi:puzzle-remove-outline'}\n\t\t\t\t\t\t></iconify-icon>\n\t\t\t\t\t\t<span>{pluginLine(standing)}</span>\n\t\t\t\t\t\t{#if standing && !standing.inLine}\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tclass=\"align\"\n\t\t\t\t\t\t\t\tdisabled={alignBusy || !!blocked}\n\t\t\t\t\t\t\t\ttitle={blocked ?? `Update ${machineName(m)}’s marketplaces and install or enable what it lacks`}\n\t\t\t\t\t\t\t\tonclick={() => void bringInLine(row)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{#if alignBusy}<iconify-icon icon=\"mdi:loading\" class=\"spin\"></iconify-icon>{/if}\n\t\t\t\t\t\t\t\t{alignBusy ? 'Bringing in line…' : 'Bring in line'}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t\t{#if align && alignBusy}\n\t\t\t\t\t\t<p class=\"progress\">{alignLine(align)}</p>\n\t\t\t\t\t{:else if failures.length > 0}\n\t\t\t\t\t\t<details class=\"align-failed\" open>\n\t\t\t\t\t\t\t<summary>{failures.length === 1 ? 'One step failed' : `${failures.length} steps failed`}</summary>\n\t\t\t\t\t\t\t{#each failures as f, i (i)}\n\t\t\t\t\t\t\t\t<pre><b>{f.command}</b>{'\\n'}{f.output}</pre>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</details>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if blocked && m.online}\n\t\t\t\t\t\t<p class=\"refused\" role=\"status\">{blocked}</p>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if p}\n\t\t\t\t\t\t<p class=\"progress\" class:failed={p.state === 'failed'}>\n\t\t\t\t\t\t\t{p.line}{#if p.state === 'ok' && p.version} — now {p.version}{/if}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{#if p.output && (p.state === 'failed' || p.state === 'running')}\n\t\t\t\t\t\t\t<details open={p.state === 'failed'}>\n\t\t\t\t\t\t\t\t<summary>Output</summary>\n\t\t\t\t\t\t\t\t<pre>{p.output}</pre>\n\t\t\t\t\t\t\t</details>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t{/each}\n\t</ol>\n\n\t{#if originUpdated}\n\t\t<div class=\"reload\" role=\"status\">\n\t\t\t{machineName(fleetStore.machines[0])} runs a new version now.\n\t\t\t<Button size=\"sm\" variant=\"outline\" onclick={() => location.reload()}>Reload the page</Button>\n\t\t</div>\n\t{/if}\n\n\t<PluginMatrix\n\t\t{comparison}\n\t\tmachines={rows.map((r) => ({ id: r.id, name: machineName(r.machine) }))}\n\t\tonOnlyHere={(key, value) => void fleetPrefsStore.set(onlyHereKey(key), value)}\n\t/>\n\n\t{#if summary}\n\t\t<section class=\"summary\" aria-live=\"polite\">\n\t\t\t{#if summary.length === 0}\n\t\t\t\t<p>Every machine updated.</p>\n\t\t\t{:else}\n\t\t\t\t<h2>{summary.length === 1 ? 'One machine' : `${summary.length} machines`} did not update</h2>\n\t\t\t\t{#each summary as f (f.id)}\n\t\t\t\t\t<div class=\"fail\">\n\t\t\t\t\t\t<b>{f.name}</b>\n\t\t\t\t\t\t<span>{f.result.line}</span>\n\t\t\t\t\t\t{#if f.result.output}<pre>{f.result.output}</pre>{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{/each}\n\t\t\t{/if}\n\t\t</section>\n\t{/if}\n</div>\n\n<style>\n\t.machines {\n\t\t--ink: #f5f5f4;\n\t\t--ink-muted: #a8a29e;\n\t\t--ink-dim: #78716c;\n\t\t--rail: #2e2c2a;\n\t\t--ok: #34d399;\n\t\t--bad: #f87171;\n\t\tmax-width: 760px;\n\t\tmargin: 0 auto;\n\t\tpadding: 20px 16px 48px;\n\t\tcolor: var(--ink);\n\t\tfont-size: 13px;\n\t}\n\t.top {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tgap: 16px;\n\t\tmargin-bottom: 24px;\n\t}\n\t.title {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\th1 {\n\t\tmargin: 0 0 4px;\n\t\tfont-size: 18px;\n\t\tfont-weight: 600;\n\t}\n\t.lede {\n\t\tmargin: 0;\n\t\tmax-width: 60ch;\n\t\tcolor: var(--ink-muted);\n\t\tline-height: 1.5;\n\t}\n\n\t/* The run as a track: each machine a station, in the order Update all\n\t takes them, filled in as each one finishes. */\n\t.track {\n\t\tlist-style: none;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\t.station {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tgap: 14px;\n\t\tpadding-bottom: 18px;\n\t}\n\t.station::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 8px;\n\t\ttop: 20px;\n\t\tbottom: 0;\n\t\twidth: 2px;\n\t\tbackground: var(--rail);\n\t}\n\t.station:last-child::before {\n\t\tdisplay: none;\n\t}\n\t.station.ok::before {\n\t\tbackground: color-mix(in oklch, var(--ok) 55%, var(--rail));\n\t}\n\t.station.failed::before {\n\t\tbackground: color-mix(in oklch, var(--bad) 45%, var(--rail));\n\t}\n\t.node {\n\t\tposition: relative;\n\t\tflex: none;\n\t\tdisplay: grid;\n\t\tplace-items: center;\n\t\twidth: 18px;\n\t\theight: 18px;\n\t\tmargin-top: 1px;\n\t\tborder-radius: 50%;\n\t\tborder: 2px solid var(--rail);\n\t\tbackground: #1c1b1a;\n\t\tfont-size: 12px;\n\t}\n\t.station.ok .node {\n\t\tborder-color: var(--ok);\n\t\tcolor: var(--ok);\n\t}\n\t.station.failed .node {\n\t\tborder-color: var(--bad);\n\t\tcolor: var(--bad);\n\t}\n\t.station.starting .node,\n\t.station.running .node,\n\t.station.restarting .node {\n\t\tborder-color: var(--ink-muted);\n\t\tcolor: var(--ink);\n\t}\n\t.body {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.line1 {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 10px;\n\t\tflex-wrap: wrap;\n\t}\n\t.name {\n\t\tfont-size: 15px;\n\t\tfont-weight: 600;\n\t}\n\t.station.off .name {\n\t\tcolor: var(--ink-muted);\n\t}\n\t.ver {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 12px;\n\t\tcolor: var(--ink-dim);\n\t}\n\t/* A version that differs from the page's is the one thing worth noticing. */\n\t.ver.drift {\n\t\tcolor: var(--ink);\n\t\tpadding: 0 6px;\n\t\tborder-radius: 5px;\n\t\tbox-shadow: inset 0 0 0 1px #57534e;\n\t}\n\t.sessions {\n\t\tcolor: var(--ink-dim);\n\t}\n\t.line1 :global(.upd) {\n\t\tmargin-left: auto;\n\t\talign-self: center;\n\t}\n\t.line2 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 7px;\n\t\tmargin-top: 3px;\n\t\tcolor: var(--ink-muted);\n\t\tfont-size: 12px;\n\t}\n\t.plugins-line iconify-icon {\n\t\tfont-size: 14px;\n\t\tcolor: var(--ink-dim);\n\t}\n\t.plugins-line.drift,\n\t.plugins-line.drift iconify-icon {\n\t\tcolor: var(--bad);\n\t}\n\t.plugins-line :global(.align) {\n\t\tmargin-left: auto;\n\t\theight: 26px;\n\t}\n\t.align-failed summary {\n\t\tcolor: var(--bad);\n\t}\n\t.dot {\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: #3a3836;\n\t}\n\t.dot.on {\n\t\tbackground: var(--ok);\n\t}\n\t.note {\n\t\tcolor: var(--ink-dim);\n\t}\n\t.refused,\n\t.progress {\n\t\tmargin: 6px 0 0;\n\t\tline-height: 1.45;\n\t\tcolor: var(--ink-muted);\n\t\toverflow-wrap: anywhere;\n\t}\n\t.refused {\n\t\tcolor: var(--ink);\n\t}\n\t.progress.failed {\n\t\tcolor: var(--bad);\n\t}\n\tdetails {\n\t\tmargin-top: 6px;\n\t}\n\tsummary {\n\t\tcursor: pointer;\n\t\tcolor: var(--ink-dim);\n\t\tfont-size: 12px;\n\t}\n\tpre {\n\t\tmargin: 6px 0 0;\n\t\tmax-height: 220px;\n\t\toverflow: auto;\n\t\tpadding: 8px 10px;\n\t\tborder-radius: 6px;\n\t\tbackground: #141413;\n\t\tcolor: #d6d3d1;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11.5px;\n\t\tline-height: 1.45;\n\t\twhite-space: pre-wrap;\n\t\toverflow-wrap: anywhere;\n\t}\n\t.reload {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tmargin-top: 8px;\n\t\tcolor: var(--ink-muted);\n\t}\n\t.summary {\n\t\tmargin-top: 20px;\n\t\tpadding-top: 14px;\n\t\tborder-top: 1px solid var(--rail);\n\t}\n\t.summary p {\n\t\tmargin: 0;\n\t\tcolor: var(--ok);\n\t}\n\th2 {\n\t\tmargin: 0 0 10px;\n\t\tfont-size: 14px;\n\t\tfont-weight: 600;\n\t\tcolor: var(--bad);\n\t}\n\t.fail {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t\tmargin-bottom: 12px;\n\t}\n\t.fail span {\n\t\tcolor: var(--ink-muted);\n\t}\n\t.spin {\n\t\tanimation: spin 1s linear infinite;\n\t}\n\t@keyframes spin {\n\t\tto {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.spin {\n\t\t\tanimation: none;\n\t\t}\n\t}\n\t@media (max-width: 520px) {\n\t\t.top {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n"],"names":["RESTART_GRACE_MS","NOTHING_TO_DO","DEFAULT_TIMING","updateOrder","machines","m","lastLine","output","l","jobOf","body","job","updateMachine","base","onProgress","io","timing","url","report","p","fail","line","ask","method","started","startJob","startedAt","deadline","restartWait","answer","version","code","updateAll","run","results","machine","result","err","browserIO","res","ms","r","showAll","$.state","known","$.derived","$$props","differs","on","values","$.get","c","marketplaces","plugins","hidden","short","sha","shortHash","section","root_18","div","button","root","$.delegated","$.set","$$render","consequent","root_1","p_1","root_2","$.append","$$anchor","div_1","root_17","table","$.child","thead","tr","$.each","node_2","th","root_3","classes","$.set_text","text_1","tbody","root_11","tr_1","th_1","$.only_child","node_4","$.sibling","tr_2","root_10","th_2","span","span_1","root_4","text_3","$.template_effect","consequent_3","$.reset","node_6","at","unknown","behind","td","root_9","span_2","root_5","$.first_child","fragment","span_3","root_6","text_5","$0","consequent_5","$.set_attribute","span_4","root_8","consequent_6","alternate","classes_1","text_2","consequent_7","tbody_1","root_16","tr_3","th_3","node_10","tr_4","root_15","th_4","span_5","text_6","span_6","text_7","node_11","have","lacking","td_1","node_12","span_7","code_1","fragment_1","text_8","node_13","span_8","root_12","consequent_9","span_9","root_13","span_10","root_14","consequent_8","consequent_10","consequent_11","alternate_1","classes_3","$.set_class","td_2","node_14","Checkbox","v","classes_2","consequent_12","styles","consequent_2","alternate_2","onMount","fleetStore","rows","progress","$.proxy","runningAll","summary","busy","originUpdated","VERSION","runOne","row","apiBase","updateOne","updateEverything","skipped","why","offlineReason","clock","machineName","todo","comparison","comparePlugins","key","fleetPrefsStore","onlyHereKey","aligning","watching","asked","ALIGN_POLL_MS","ALIGN_MISSES","setAligning","id","change","prev","alignError","status","takeAnswer","watchAlign","release","misses","bringInLine","unreachable","plan","alignPlan","$.user_effect","untrack","blockedReason","running","a","alignLine","steps","i","s","step","elapsed","formatSpinnerElapsed","alignFailures","pluginLine","names","list","noun","stateLabel","offlineLabel","$.head","header","text","node","Button","iconify_icon","$.set_custom_element_data","ol","blocked","offline","drift","versionDrifts","standing","align","alignBusy","failures","li","iconify_icon_1","iconify_icon_2","iconify_icon_3","div_2","div_3","text_4","$1","div_4","node_3","div_5","iconify_icon_4","iconify_icon_5","consequent_4","p_2","text_9","details","summary_1","text_10","node_7","f","pre","b","text_11","p_3","root_7","text_13","p_4","fragment_3","text_14","text_15","details_1","pre_1","text_16","classes_6","classes_4","liveCount","div_6","text_17","PluginMatrix","value","p_5","h2","fragment_5","node_17","div_7","b_1","text_20","text_21","node_18","pre_2","text_22","consequent_14","consequent_13","consequent_15"],"mappings":"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"}
1
+ {"version":3,"file":"6.CzLoA0w7.js","sources":["../../../../../../src/lib/fleet-update.ts","../../../../../../src/lib/components/PluginMatrix.svelte","../../../../../../src/routes/machines/+page.svelte"],"sourcesContent":["/**\n * Updating machines from the Machines view: one at a time, the origin last.\n *\n * Each machine runs its own `claude-mux update` (`POST <base>/api/update`,\n * `src/server/self-update.ts`) and is then read until the job it started says\n * how it ended. The update restarts that machine's server, so a read that\n * finds nobody answering means it is coming back, not that it failed. The\n * origin goes last because its restart takes this page's server with it.\n * Nothing here touches the DOM; the requests and the clock are handed in.\n */\n\nexport type StepState = 'queued' | 'starting' | 'running' | 'restarting' | 'ok' | 'failed';\n\nexport interface StepProgress {\n\tstate: StepState;\n\t/** One line saying where it is: the update's last line, or why it failed. */\n\tline: string;\n\t/** What the update printed, as far as the machine has said. */\n\toutput: string;\n\t/** The version the machine answered with at the end. */\n\tversion: string | null;\n}\n\n/** An answer from a machine: its status and JSON body, or null when it did not answer. */\nexport type Answer = { status: number; body: Record<string, unknown> } | null;\n\nexport interface UpdateIO {\n\trequest(url: string, method: 'GET' | 'POST'): Promise<Answer>;\n\tsleep(ms: number): Promise<void>;\n\tnow(): number;\n}\n\nexport interface UpdateTiming {\n\tpollMs: number;\n\t/** How long a machine has from the start to report a result. */\n\ttimeoutMs: number;\n}\n\n/** How long a machine that finished its update may keep answering with the old version. */\nconst RESTART_GRACE_MS = 30_000;\n/** What `claude-mux update` prints when it installs nothing and restarts nothing. */\nconst NOTHING_TO_DO = /Already on latest|skipping restart/;\n\nexport const DEFAULT_TIMING: UpdateTiming = { pollMs: 1_500, timeoutMs: 10 * 60_000 };\n\n/** The machines in the order they are updated: as given, with the origin moved last. */\nexport function updateOrder<T extends { origin: boolean }>(machines: readonly T[]): T[] {\n\treturn [...machines.filter((m) => !m.origin), ...machines.filter((m) => m.origin)];\n}\n\n/** The last line of an update's output that says anything. */\nexport function lastLine(output: string): string {\n\tconst lines = output.split('\\n').map((l) => l.trim());\n\treturn lines.filter(Boolean).at(-1) ?? '';\n}\n\ninterface JobAnswer {\n\tfromVersion?: unknown;\n\tstate?: unknown;\n\tstartedAt?: unknown;\n\toutput?: unknown;\n\texitCode?: unknown;\n}\n\nfunction jobOf(body: Record<string, unknown>): JobAnswer | null {\n\tconst job = body.job;\n\treturn job && typeof job === 'object' ? (job as JobAnswer) : null;\n}\n\n/**\n * Update the machine whose API is at `base` ('' for the origin, `/fleet/<id>`\n * for another) and resolve with how it ended. Never rejects.\n */\nexport async function updateMachine(\n\tbase: string,\n\tonProgress: (p: StepProgress) => void,\n\tio: UpdateIO,\n\ttiming: UpdateTiming = DEFAULT_TIMING\n): Promise<StepProgress> {\n\tconst url = `${base}/api/update`;\n\tconst report = (p: StepProgress) => {\n\t\tonProgress(p);\n\t\treturn p;\n\t};\n\tconst fail = (line: string, output = '') => report({ state: 'failed', line, output, version: null });\n\tconst ask = (method: 'GET' | 'POST') => io.request(url, method).catch((): Answer => null);\n\n\treport({ state: 'starting', line: 'Starting the update…', output: '', version: null });\n\tconst started = await ask('POST');\n\tif (!started) return fail('Did not answer');\n\t// The relay's own 404 (a machine it does not know) carries an `error`; a machine without the route does not.\n\tif (started.status === 404 && typeof started.body.error !== 'string') {\n\t\treturn fail('Too old to be updated from here; run `claude-mux update` on it');\n\t}\n\tconst startJob = jobOf(started.body);\n\tif ((started.status !== 202 && started.status !== 409) || typeof startJob?.startedAt !== 'number') {\n\t\treturn fail(typeof started.body.error === 'string' ? started.body.error : `Refused (${started.status})`);\n\t}\n\tconst startedAt = startJob.startedAt;\n\tconst deadline = io.now() + timing.timeoutMs;\n\tlet output = '';\n\tlet restartWait: number | undefined;\n\n\twhile (io.now() < deadline) {\n\t\tawait io.sleep(timing.pollMs);\n\t\tconst answer = await ask('GET');\n\t\t// Nobody answering, or the relay's 502 for a machine it cannot reach: a restart in progress.\n\t\tif (!answer || answer.status >= 500) {\n\t\t\treport({ state: 'restarting', line: 'Restarting…', output, version: null });\n\t\t\tcontinue;\n\t\t}\n\t\tconst job = jobOf(answer.body);\n\t\tif (!job || job.startedAt !== startedAt) {\n\t\t\treport({ state: 'restarting', line: 'Waiting for it to report…', output, version: null });\n\t\t\tcontinue;\n\t\t}\n\t\toutput = typeof job.output === 'string' ? job.output : output;\n\t\tconst version = typeof answer.body.version === 'string' ? answer.body.version : null;\n\t\tif (job.state === 'running') {\n\t\t\treport({ state: 'running', line: lastLine(output) || 'Updating…', output, version: null });\n\t\t\tcontinue;\n\t\t}\n\t\tif (job.state === 'ok') {\n\t\t\t// The update exits as soon as it has asked for the restart, so the old\n\t\t\t// server may still be the one answering; it is given a while to go.\n\t\t\tconst stale = version !== null && version === job.fromVersion && !NOTHING_TO_DO.test(output);\n\t\t\tif (stale && (restartWait ??= io.now() + RESTART_GRACE_MS) > io.now()) {\n\t\t\t\treport({ state: 'restarting', line: 'Restarting…', output, version: null });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn report({ state: 'ok', line: lastLine(output) || 'Updated', output, version });\n\t\t}\n\t\tconst code = typeof job.exitCode === 'number' ? ` (exit ${job.exitCode})` : '';\n\t\treturn fail(`${lastLine(output) || 'Update failed'}${code}`, output);\n\t}\n\treturn fail(`No result after ${Math.round(timing.timeoutMs / 60_000)} min`, output);\n}\n\n/**\n * Update every machine in turn, origin last, carrying on past a failure.\n * `run` updates one machine and reports its progress under its id; the\n * results come back in the order the machines were updated.\n */\nexport async function updateAll<T extends { id: string; origin: boolean }>(\n\tmachines: readonly T[],\n\trun: (machine: T) => Promise<StepProgress>\n): Promise<{ machine: T; result: StepProgress }[]> {\n\tconst results: { machine: T; result: StepProgress }[] = [];\n\tfor (const machine of updateOrder(machines)) {\n\t\tlet result: StepProgress;\n\t\ttry {\n\t\t\tresult = await run(machine);\n\t\t} catch (err) {\n\t\t\tresult = { state: 'failed', line: String(err), output: '', version: null };\n\t\t}\n\t\tresults.push({ machine, result });\n\t}\n\treturn results;\n}\n\n/** The browser's way of asking a machine: `fetch`, with anything but a JSON answer counted as no answer. */\nexport const browserIO: UpdateIO = {\n\tasync request(url, method) {\n\t\ttry {\n\t\t\tconst res = await fetch(url, { method, cache: 'no-store' });\n\t\t\tconst body = (await res.json().catch(() => ({}))) as Record<string, unknown>;\n\t\t\treturn { status: res.status, body };\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t},\n\tsleep: (ms) => new Promise((r) => setTimeout(r, ms)),\n\tnow: () => Date.now()\n};\n","<script lang=\"ts\">\n\timport { Checkbox } from '$lib/components/ui/checkbox';\n\timport type { PluginComparison } from '$shared/fleet-plugins.js';\n\timport { shortHash } from '$lib/side-panel/history';\n\n\t/**\n\t * The fleet's plugins side by side (`comparePlugins()` in\n\t * `src/fleet-plugins.ts`): a column per machine, the marketplaces with the\n\t * commit each machine is at and the plugins with the version each has.\n\t * A cell a machine should fill and does not is drawn as a gap; a plugin can\n\t * be marked \"only here\", a fleet preference, so its gaps stop counting.\n\t * Rows where the machines agree are folded away until asked for.\n\t */\n\tinterface Props {\n\t\tcomparison: PluginComparison;\n\t\t/** The columns, in the Machines view's order; a machine with no report shows as unknown. */\n\t\tmachines: { id: string; name: string }[];\n\t\tonOnlyHere: (key: string, value: boolean) => void;\n\t}\n\n\tlet { comparison, machines, onOnlyHere }: Props = $props();\n\n\tlet showAll = $state(false);\n\n\tconst known = $derived(machines.filter((m) => comparison.machines[m.id]));\n\t/** Whether the machines' cells differ in what they show: the name each machine gives a marketplace or plugin is its own. */\n\tconst differs = (on: Record<string, { commit?: string | null; version?: string | null; enabled?: boolean } | null>) => {\n\t\tconst values = known.map((m) => {\n\t\t\tconst c = on[m.id];\n\t\t\treturn c ? JSON.stringify([c.commit, c.version, c.enabled]) : '';\n\t\t});\n\t\treturn new Set(values).size > 1;\n\t};\n\tconst marketplaces = $derived(\n\t\tcomparison.marketplaces.filter((r) => showAll || r.behind.length > 0 || differs(r.on))\n\t);\n\tconst plugins = $derived(\n\t\tcomparison.plugins.filter((r) => showAll || r.lacking.length > 0 || r.onlyHere || differs(r.on))\n\t);\n\tconst hidden = $derived(\n\t\tcomparison.marketplaces.length + comparison.plugins.length - marketplaces.length - plugins.length\n\t);\n\n\tconst short = (sha: string | null) => (sha ? shortHash(sha) : '?');\n</script>\n\n<section class=\"plugins\" aria-labelledby=\"plugins-h\">\n\t<div class=\"head\">\n\t\t<h2 id=\"plugins-h\">Plugins</h2>\n\t\t{#if hidden > 0 || showAll}\n\t\t\t<button class=\"fold\" onclick={() => (showAll = !showAll)}>\n\t\t\t\t{showAll ? 'Show only differences' : `Show ${hidden} that match`}\n\t\t\t</button>\n\t\t{/if}\n\t</div>\n\n\t{#if known.length === 0}\n\t\t<p class=\"empty\">No machine has reported its plugins yet.</p>\n\t{:else if marketplaces.length === 0 && plugins.length === 0}\n\t\t<p class=\"empty\">Every machine has the same plugins, and every marketplace is current.</p>\n\t{:else}\n\t\t<div class=\"scroll\">\n\t\t\t<table style:--cols={machines.length}>\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th class=\"label\" scope=\"col\"></th>\n\t\t\t\t\t\t{#each machines as m (m.id)}\n\t\t\t\t\t\t\t<th scope=\"col\" class:unknown={!comparison.machines[m.id]}>{m.name}</th>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t<th class=\"only\" scope=\"col\">Only here</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t{#if marketplaces.length > 0}\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr class=\"group\"><th colspan={machines.length + 2} scope=\"rowgroup\">Marketplaces</th></tr>\n\t\t\t\t\t\t{#each marketplaces as r (r.key)}\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<th class=\"label\" scope=\"row\">\n\t\t\t\t\t\t\t\t\t<span class=\"name\">{r.name}</span>\n\t\t\t\t\t\t\t\t\t{#if r.repo}<span class=\"sub\">{r.repo}</span>{/if}\n\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t{#each machines as m (m.id)}\n\t\t\t\t\t\t\t\t\t{@const at = r.on[m.id]}\n\t\t\t\t\t\t\t\t\t{@const unknown = !comparison.machines[m.id]}\n\t\t\t\t\t\t\t\t\t{@const behind = r.behind.includes(m.id)}\n\t\t\t\t\t\t\t\t\t<td class:behind class:unknown>\n\t\t\t\t\t\t\t\t\t\t{#if unknown}\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"na\">unknown</span>\n\t\t\t\t\t\t\t\t\t\t{:else if at}\n\t\t\t\t\t\t\t\t\t\t\t<code title={at.commit ?? 'Commit unknown'}>{short(at.commit)}</code>\n\t\t\t\t\t\t\t\t\t\t\t{#if behind}<span class=\"flag\">behind {short(r.latest)}</span>{/if}\n\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"na\">not added</span>\n\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</tbody>\n\t\t\t\t{/if}\n\t\t\t\t{#if plugins.length > 0}\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr class=\"group\"><th colspan={machines.length + 2} scope=\"rowgroup\">Plugins</th></tr>\n\t\t\t\t\t\t{#each plugins as r (r.key)}\n\t\t\t\t\t\t\t<tr class:quiet={r.onlyHere}>\n\t\t\t\t\t\t\t\t<th class=\"label\" scope=\"row\">\n\t\t\t\t\t\t\t\t\t<span class=\"name\">{r.name}</span>\n\t\t\t\t\t\t\t\t\t<span class=\"sub\">{r.marketplace}</span>\n\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t{#each machines as m (m.id)}\n\t\t\t\t\t\t\t\t\t{@const have = r.on[m.id]}\n\t\t\t\t\t\t\t\t\t{@const unknown = !comparison.machines[m.id]}\n\t\t\t\t\t\t\t\t\t{@const lacking = r.lacking.includes(m.id)}\n\t\t\t\t\t\t\t\t\t<td class:lacking class:unknown>\n\t\t\t\t\t\t\t\t\t\t{#if unknown}\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"na\">unknown</span>\n\t\t\t\t\t\t\t\t\t\t{:else if have}\n\t\t\t\t\t\t\t\t\t\t\t<code>{have.version ?? '?'}</code>\n\t\t\t\t\t\t\t\t\t\t\t{#if !have.enabled}<span class=\"flag\">off</span>{/if}\n\t\t\t\t\t\t\t\t\t\t{:else if lacking}\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"flag\">missing</span>\n\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"na\">—</span>\n\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t<td class=\"only\">\n\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\tchecked={r.onlyHere}\n\t\t\t\t\t\t\t\t\t\taria-label={`Only where ${r.name} is installed`}\n\t\t\t\t\t\t\t\t\t\ttitle=\"Wanted only where it is installed: its gaps stop counting\"\n\t\t\t\t\t\t\t\t\t\tonCheckedChange={(v) => onOnlyHere(r.key, !!v)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</tbody>\n\t\t\t\t{/if}\n\t\t\t</table>\n\t\t</div>\n\t{/if}\n</section>\n\n<style>\n\t.plugins {\n\t\tmargin-top: 28px;\n\t\tpadding-top: 16px;\n\t\tborder-top: 1px solid var(--rail);\n\t}\n\t.head {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 12px;\n\t\tmargin-bottom: 10px;\n\t}\n\th2 {\n\t\tmargin: 0;\n\t\tfont-size: 15px;\n\t\tfont-weight: 600;\n\t}\n\t.fold {\n\t\tmargin-left: auto;\n\t\tbackground: none;\n\t\tborder: 0;\n\t\tpadding: 0;\n\t\tcolor: var(--ink-muted);\n\t\tfont-size: 12px;\n\t\tcursor: pointer;\n\t\ttext-decoration: underline;\n\t\ttext-underline-offset: 3px;\n\t}\n\t.fold:hover {\n\t\tcolor: var(--ink);\n\t}\n\t.empty {\n\t\tmargin: 0;\n\t\tcolor: var(--ink-muted);\n\t}\n\t.scroll {\n\t\toverflow-x: auto;\n\t\tmargin: 0 -4px;\n\t}\n\ttable {\n\t\tborder-collapse: collapse;\n\t\tmin-width: 100%;\n\t\tfont-size: 12.5px;\n\t}\n\tth,\n\ttd {\n\t\tpadding: 6px 10px;\n\t\ttext-align: left;\n\t\tvertical-align: top;\n\t\twhite-space: nowrap;\n\t}\n\tthead th {\n\t\tcolor: var(--ink-muted);\n\t\tfont-weight: 500;\n\t\tborder-bottom: 1px solid var(--rail);\n\t}\n\tthead th.unknown {\n\t\tcolor: var(--ink-dim);\n\t}\n\t.group th {\n\t\tpadding-top: 14px;\n\t\tcolor: var(--ink-dim);\n\t\tfont-weight: 500;\n\t\tfont-size: 12px;\n\t}\n\t.label {\n\t\tmin-width: 150px;\n\t}\n\t.label .name {\n\t\tdisplay: block;\n\t\tcolor: var(--ink);\n\t\tfont-weight: 500;\n\t}\n\t.label .sub {\n\t\tdisplay: block;\n\t\tcolor: var(--ink-dim);\n\t\tfont-size: 11.5px;\n\t}\n\ttbody tr:not(.group) {\n\t\tborder-top: 1px solid color-mix(in oklch, var(--rail) 60%, transparent);\n\t}\n\tcode {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 12px;\n\t\tcolor: var(--ink-muted);\n\t}\n\t.na {\n\t\tcolor: var(--ink-dim);\n\t}\n\t/* A gap the fleet wants filled: the cell itself is drawn hollow, so the\n\t differences read across the table without reading every value. */\n\ttd.lacking,\n\ttd.behind {\n\t\tbox-shadow: inset 0 0 0 1px color-mix(in oklch, var(--bad) 55%, transparent);\n\t\tborder-radius: 5px;\n\t}\n\t.flag {\n\t\tdisplay: block;\n\t\tcolor: var(--bad);\n\t\tfont-size: 11.5px;\n\t}\n\ttd.lacking .flag:only-child {\n\t\tdisplay: inline;\n\t}\n\ttr.quiet .label .name,\n\ttr.quiet code {\n\t\tcolor: var(--ink-dim);\n\t}\n\t.only {\n\t\ttext-align: center;\n\t\tcolor: var(--ink-dim);\n\t\tfont-weight: 400;\n\t}\n</style>\n","<script lang=\"ts\">\n\timport { onMount, untrack } from 'svelte';\n\timport { Button } from '$lib/components/ui/button';\n\timport { clock } from '$lib/stores/clock.svelte';\n\timport { apiBase, blockedReason, fleetStore, liveCount, machineName, offlineLabel, offlineReason, versionDrifts, type Machine } from '$lib/stores/fleet.svelte';\n\timport { browserIO, updateAll, updateMachine, updateOrder, type StepProgress } from '$lib/fleet-update';\n\timport { VERSION } from '$shared/utils/version.js';\n\timport PluginMatrix from '$lib/components/PluginMatrix.svelte';\n\timport { fleetPrefsStore } from '$lib/stores/fleet-prefs.svelte';\n\timport { alignPlan, comparePlugins, type AlignAnswer, type AlignJob, type MachineStanding } from '$shared/fleet-plugins.js';\n\timport { onlyHereKey } from '$shared/fleet-prefs.js';\n\timport { formatSpinnerElapsed } from '$lib/format';\n\n\t/**\n\t * The Machines view: every machine in the fleet with its version, whether\n\t * it answers, its live sessions, and an update button; \"Update all\" runs\n\t * them in turn with this page's own machine last, since its restart takes\n\t * the page's server with it (`$lib/fleet-update`). Each machine's plugins\n\t * are compared with the rest (`comparePlugins()`), and \"Bring in line\"\n\t * updates its marketplaces and installs or enables what it lacks.\n\t */\n\n\tonMount(() => fleetStore.start());\n\n\ttype Row = { id: string; origin: boolean; machine: Machine };\n\n\t/** In the order \"Update all\" takes them, so the list reads as the run. */\n\tconst rows: Row[] = $derived(\n\t\tupdateOrder(fleetStore.machines.map((m) => ({ id: m.server.id || m.server.hostname, origin: m.local, machine: m })))\n\t);\n\n\tlet progress = $state<Record<string, StepProgress>>({});\n\tlet runningAll = $state(false);\n\t/** Set when \"Update all\" finishes: what failed, in order. */\n\tlet summary = $state<{ id: string; name: string; result: StepProgress }[] | null>(null);\n\t/** An update is under way, or queued behind one. */\n\tconst busy = $derived(Object.values(progress).some((p) => p.state !== 'ok' && p.state !== 'failed'));\n\t/** This page's own machine came back on another version, so the page is stale. */\n\tconst originUpdated = $derived(\n\t\trows.some((r) => {\n\t\t\tconst p = progress[r.id];\n\t\t\treturn r.origin && p?.state === 'ok' && !!p.version && p.version !== VERSION;\n\t\t})\n\t);\n\n\tfunction runOne(row: Row): Promise<StepProgress> {\n\t\treturn updateMachine(apiBase(row.machine), (p) => (progress[row.id] = p), browserIO);\n\t}\n\n\tasync function updateOne(row: Row) {\n\t\tsummary = null;\n\t\tawait runOne(row);\n\t}\n\n\tasync function updateEverything() {\n\t\t// An offline machine cannot be reached to update; it is reported with the failures.\n\t\tconst skipped = rows.flatMap((r) => {\n\t\t\tconst why = offlineReason(r.machine, clock.now);\n\t\t\treturn why ? [{ id: r.id, name: machineName(r.machine), result: { state: 'failed', line: why, output: '', version: null } as StepProgress }] : [];\n\t\t});\n\t\tconst todo = rows.filter((r) => !offlineReason(r.machine, clock.now));\n\t\tsummary = null;\n\t\trunningAll = true;\n\t\tprogress = Object.fromEntries(todo.map((r) => [r.id, { state: 'queued', line: 'Waiting its turn', output: '', version: null }]));\n\t\ttry {\n\t\t\tconst results = await updateAll(todo, runOne);\n\t\t\tsummary = [\n\t\t\t\t...results.filter((r) => r.result.state === 'failed').map((r) => ({ id: r.machine.id, name: machineName(r.machine.machine), result: r.result })),\n\t\t\t\t...skipped\n\t\t\t];\n\t\t} finally {\n\t\t\trunningAll = false;\n\t\t}\n\t}\n\n\tconst comparison = $derived(\n\t\tcomparePlugins(\n\t\t\trows.map((r) => ({ id: r.id, report: r.machine.plugins })),\n\t\t\t{ has: (key) => fleetPrefsStore.get(onlyHereKey(key), false) }\n\t\t)\n\t);\n\n\t/**\n\t * \"Bring in line\" on one machine, as this page last read it: the job the\n\t * machine runs, how far its clock is from this one (`skew`, so a step's\n\t * elapsed time reads right), and what failed before or around it.\n\t */\n\ttype Aligning = { job: AlignJob | null; skew: number; error: string | null; unreachable: string[]; starting: boolean };\n\tlet aligning = $state<Record<string, Aligning>>({});\n\t/** Machines whose job this page is reading, so one is never read twice over. */\n\tconst watching = new Set<string>();\n\t/** Machines asked once whether a job runs there, so a reload picks it up. */\n\tconst asked = new Set<string>();\n\n\tconst ALIGN_POLL_MS = 1_000;\n\t/** Reads in a row that may go unanswered (the relay's 502, a network blip) before the run counts as lost. */\n\tconst ALIGN_MISSES = 10;\n\n\t/** Change what this page holds on a machine's run, keeping the rest. */\n\tfunction setAligning(id: string, change: Partial<Aligning>) {\n\t\tconst prev = aligning[id] ?? { job: null, skew: 0, error: null, unreachable: [], starting: false };\n\t\taligning[id] = { ...prev, ...change };\n\t}\n\n\t/** Why a machine's answer is not a job. */\n\tfunction alignError(status: number, body: { error?: unknown }): string {\n\t\t// The relay's own 404 (a machine it does not know) carries an `error`; a machine without the route does not.\n\t\tif (typeof body.error === 'string' && status !== 400) return body.error;\n\t\t// 400: a machine that reads the plan's older shape.\n\t\treturn status === 400 || status === 404 || status === 405 ? 'This machine’s claude-mux is too old for this; update it first.' : `HTTP ${status}`;\n\t}\n\n\t/** Take in a machine's answer; false when there is nothing more to read. */\n\tfunction takeAnswer(row: Row, status: number, body: Partial<AlignAnswer> & { error?: unknown }): boolean {\n\t\tif (status >= 400 && status !== 409) {\n\t\t\tsetAligning(row.id, { error: alignError(status, body), starting: false });\n\t\t\treturn false;\n\t\t}\n\t\tconst job = body.job ?? null;\n\t\tsetAligning(row.id, { job, skew: typeof body.now === 'number' ? Date.now() - body.now : 0, error: null, starting: false });\n\t\treturn job?.state === 'running';\n\t}\n\n\t/** Read a machine's job until it ends. The machine runs it whether or not anyone reads. */\n\tasync function watchAlign(row: Row) {\n\t\tif (watching.has(row.id)) return;\n\t\twatching.add(row.id);\n\t\tconst release = clock.fine();\n\t\ttry {\n\t\t\tlet misses = 0;\n\t\t\tfor (;;) {\n\t\t\t\tawait browserIO.sleep(ALIGN_POLL_MS);\n\t\t\t\tconst answer = await browserIO.request(`${apiBase(row.machine)}/api/plugins`, 'GET').catch(() => null);\n\t\t\t\tif (!answer || answer.status >= 500) {\n\t\t\t\t\tif (++misses < ALIGN_MISSES) continue;\n\t\t\t\t\tsetAligning(row.id, { error: 'Stopped answering while the run was under way' });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmisses = 0;\n\t\t\t\tif (!takeAnswer(row, answer.status, answer.body)) return;\n\t\t\t}\n\t\t} finally {\n\t\t\twatching.delete(row.id);\n\t\t\trelease();\n\t\t}\n\t}\n\n\t/**\n\t * \"Bring in line\": the plan worked out from the whole fleet, handed to the\n\t * machine in one request (`POST /api/plugins`). The machine runs it as a job\n\t * of its own and answers at once, since a marketplace update can take\n\t * minutes; this page reads the job until it ends. A job already running\n\t * there is joined instead.\n\t */\n\tasync function bringInLine(row: Row) {\n\t\tconst { unreachable, ...plan } = alignPlan(comparison, row.id);\n\t\taligning[row.id] = { job: null, skew: 0, error: null, unreachable, starting: true };\n\t\ttry {\n\t\t\tconst res = await fetch(`${apiBase(row.machine)}/api/plugins`, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify(plan)\n\t\t\t});\n\t\t\tif (takeAnswer(row, res.status, await res.json().catch(() => ({})))) await watchAlign(row);\n\t\t} catch (err) {\n\t\t\tsetAligning(row.id, { error: String(err), starting: false });\n\t\t}\n\t}\n\n\t// A job started before this page loaded (or from another page) is read too.\n\t$effect(() => {\n\t\tfor (const row of rows) {\n\t\t\tif (asked.has(row.id) || !row.machine.online || !row.machine.plugins || untrack(() => blockedReason(row.machine, clock.now))) continue;\n\t\t\tasked.add(row.id);\n\t\t\tvoid browserIO.request(`${apiBase(row.machine)}/api/plugins`, 'GET').then((answer) => {\n\t\t\t\tconst body = answer?.body as Partial<AlignAnswer> | undefined;\n\t\t\t\tif (answer && body?.job?.state === 'running' && !aligning[row.id] && takeAnswer(row, answer.status, body)) void watchAlign(row);\n\t\t\t});\n\t\t}\n\t});\n\n\tconst running = (a: Aligning | undefined) => !!a && !a.error && (a.starting || a.job?.state === 'running');\n\n\t/** Where a running job is: its step, its place in the plan, and how long a fetch has run. */\n\tfunction alignLine(a: Aligning): string {\n\t\tconst steps = a.job?.steps ?? [];\n\t\tconst i = steps.findIndex((s) => s.state === 'running');\n\t\tif (i < 0) return steps.length && steps.every((s) => s.state !== 'pending') ? 'Reading plugins again' : 'Starting';\n\t\tconst step = steps[i];\n\t\tlet line = `${step.label} (${i + 1}/${steps.length})`;\n\t\tconst elapsed = step.startedAt === null ? 0 : clock.now - a.skew - step.startedAt;\n\t\tif (elapsed >= 5_000) line += `, ${step.kind === 'update' ? 'still fetching' : 'still running'} ${formatSpinnerElapsed(Math.floor(elapsed / 1000))}`;\n\t\treturn line;\n\t}\n\n\t/** What went wrong in a run: the steps that failed or timed out, plus what could not be planned or asked. */\n\tfunction alignFailures(a: Aligning): { command: string; output: string }[] {\n\t\treturn [\n\t\t\t...a.unreachable.map((id) => ({ command: `install ${id}`, output: 'Its marketplace is not on this machine and has no repo to add it from.' })),\n\t\t\t...(a.job?.steps ?? [])\n\t\t\t\t.filter((s) => s.state === 'failed' || s.state === 'timeout')\n\t\t\t\t.map((s) => ({ command: s.state === 'timeout' ? `${s.command} (timed out)` : s.command, output: s.output })),\n\t\t\t...(a.error ? [{ command: 'Bring in line', output: a.error }] : [])\n\t\t];\n\t}\n\n\t/** One line on how a machine's plugins stand against the fleet's. */\n\tfunction pluginLine(s: MachineStanding | undefined): string {\n\t\tif (!s) return 'Plugins not reported';\n\t\tif (s.inLine) return 'Plugins in line';\n\t\tconst names = (list: { name: string }[], noun: string) =>\n\t\t\tlist.length <= 3 ? list.map((p) => p.name).join(', ') : `${list.length} ${noun}`;\n\t\treturn [\n\t\t\ts.missing.length ? `Missing ${names(s.missing, 'plugins')}` : '',\n\t\t\ts.disabled.length ? `Turned off: ${names(s.disabled, 'plugins')}` : '',\n\t\t\ts.behind.length ? `Behind: ${names(s.behind, 'marketplaces')}` : ''\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join('; ');\n\t}\n\n\tfunction stateLabel(m: Machine): string {\n\t\tif (m.local) return 'this page’s machine';\n\t\treturn m.online ? 'online' : offlineLabel(m, clock.now);\n\t}\n</script>\n\n<svelte:head><title>Machines · claude-mux</title></svelte:head>\n\n<div class=\"machines\">\n\t<header class=\"top\">\n\t\t<div class=\"title\">\n\t\t\t<h1>Machines</h1>\n\t\t\t<p class=\"lede\">\n\t\t\t\tThis page runs on {machineName(fleetStore.machines[0])}, claude-mux {VERSION}. Updates go one machine at a time,\n\t\t\t\tthis one last.\n\t\t\t</p>\n\t\t</div>\n\t\t<Button onclick={() => void updateEverything()} disabled={busy || rows.length === 0}>\n\t\t\t<iconify-icon icon={runningAll ? 'mdi:loading' : 'mdi:update'} class:spin={runningAll}></iconify-icon>\n\t\t\t{runningAll ? 'Updating…' : 'Update all'}\n\t\t</Button>\n\t</header>\n\n\t<ol class=\"track\" class:running={runningAll}>\n\t\t{#each rows as row (row.id)}\n\t\t\t{@const m = row.machine}\n\t\t\t{@const p = progress[row.id]}\n\t\t\t{@const blocked = blockedReason(m, clock.now)}\n\t\t\t{@const offline = offlineReason(m, clock.now)}\n\t\t\t{@const drift = versionDrifts(m)}\n\t\t\t{@const standing = comparison.machines[row.id]}\n\t\t\t{@const align = aligning[row.id]}\n\t\t\t{@const alignBusy = running(align)}\n\t\t\t{@const failures = align && !alignBusy ? alignFailures(align) : []}\n\t\t\t<li class=\"station {p?.state ?? 'idle'}\" class:off={!m.online}>\n\t\t\t\t<span class=\"node\" aria-hidden=\"true\">\n\t\t\t\t\t{#if p?.state === 'ok'}<iconify-icon icon=\"mdi:check\"></iconify-icon>\n\t\t\t\t\t{:else if p?.state === 'failed'}<iconify-icon icon=\"mdi:close\"></iconify-icon>\n\t\t\t\t\t{:else if p && p.state !== 'queued'}<iconify-icon icon=\"mdi:loading\" class=\"spin\"></iconify-icon>{/if}\n\t\t\t\t</span>\n\t\t\t\t<div class=\"body\">\n\t\t\t\t\t<div class=\"line1\">\n\t\t\t\t\t\t<span class=\"name\">{machineName(m)}</span>\n\t\t\t\t\t\t<span class=\"ver\" class:drift title={drift ? `Differs from this page’s ${VERSION}` : 'Same as this page'}>\n\t\t\t\t\t\t\t{m.version ?? 'version unknown'}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span class=\"sessions\">{liveCount(m)} live</span>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tclass=\"upd\"\n\t\t\t\t\t\t\tdisabled={busy || !!offline}\n\t\t\t\t\t\t\ttitle={offline ?? `Run claude-mux update on ${machineName(m)}`}\n\t\t\t\t\t\t\tonclick={() => void updateOne(row)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tUpdate\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"line2\">\n\t\t\t\t\t\t<span class=\"dot\" class:on={m.online}></span>\n\t\t\t\t\t\t<span>{stateLabel(m)}</span>\n\t\t\t\t\t\t{#if row.origin}<span class=\"note\">updated last; the page reconnects after</span>{/if}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"line2 plugins-line\" class:drift={!!standing && !standing.inLine}>\n\t\t\t\t\t\t<iconify-icon\n\t\t\t\t\t\t\ticon={!standing ? 'mdi:help-circle-outline' : standing.inLine ? 'mdi:puzzle-check-outline' : 'mdi:puzzle-remove-outline'}\n\t\t\t\t\t\t></iconify-icon>\n\t\t\t\t\t\t<span>{pluginLine(standing)}</span>\n\t\t\t\t\t\t{#if standing && !standing.inLine}\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tclass=\"align\"\n\t\t\t\t\t\t\t\tdisabled={alignBusy || !!blocked}\n\t\t\t\t\t\t\t\ttitle={blocked ?? `Update ${machineName(m)}’s marketplaces and install or enable what it lacks`}\n\t\t\t\t\t\t\t\tonclick={() => void bringInLine(row)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{#if alignBusy}<iconify-icon icon=\"mdi:loading\" class=\"spin\"></iconify-icon>{/if}\n\t\t\t\t\t\t\t\t{alignBusy ? 'Bringing in line…' : 'Bring in line'}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t\t{#if align && alignBusy}\n\t\t\t\t\t\t<p class=\"progress\">{alignLine(align)}</p>\n\t\t\t\t\t{:else if failures.length > 0}\n\t\t\t\t\t\t<details class=\"align-failed\" open>\n\t\t\t\t\t\t\t<summary>{failures.length === 1 ? 'One step failed' : `${failures.length} steps failed`}</summary>\n\t\t\t\t\t\t\t{#each failures as f, i (i)}\n\t\t\t\t\t\t\t\t<pre><b>{f.command}</b>{'\\n'}{f.output}</pre>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</details>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if blocked && m.online}\n\t\t\t\t\t\t<p class=\"refused\" role=\"status\">{blocked}</p>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if p}\n\t\t\t\t\t\t<p class=\"progress\" class:failed={p.state === 'failed'}>\n\t\t\t\t\t\t\t{p.line}{#if p.state === 'ok' && p.version} — now {p.version}{/if}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{#if p.output && (p.state === 'failed' || p.state === 'running')}\n\t\t\t\t\t\t\t<details open={p.state === 'failed'}>\n\t\t\t\t\t\t\t\t<summary>Output</summary>\n\t\t\t\t\t\t\t\t<pre>{p.output}</pre>\n\t\t\t\t\t\t\t</details>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t{/each}\n\t</ol>\n\n\t{#if originUpdated}\n\t\t<div class=\"reload\" role=\"status\">\n\t\t\t{machineName(fleetStore.machines[0])} runs a new version now.\n\t\t\t<Button size=\"sm\" variant=\"outline\" onclick={() => location.reload()}>Reload the page</Button>\n\t\t</div>\n\t{/if}\n\n\t<PluginMatrix\n\t\t{comparison}\n\t\tmachines={rows.map((r) => ({ id: r.id, name: machineName(r.machine) }))}\n\t\tonOnlyHere={(key, value) => void fleetPrefsStore.set(onlyHereKey(key), value)}\n\t/>\n\n\t{#if summary}\n\t\t<section class=\"summary\" aria-live=\"polite\">\n\t\t\t{#if summary.length === 0}\n\t\t\t\t<p>Every machine updated.</p>\n\t\t\t{:else}\n\t\t\t\t<h2>{summary.length === 1 ? 'One machine' : `${summary.length} machines`} did not update</h2>\n\t\t\t\t{#each summary as f (f.id)}\n\t\t\t\t\t<div class=\"fail\">\n\t\t\t\t\t\t<b>{f.name}</b>\n\t\t\t\t\t\t<span>{f.result.line}</span>\n\t\t\t\t\t\t{#if f.result.output}<pre>{f.result.output}</pre>{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{/each}\n\t\t\t{/if}\n\t\t</section>\n\t{/if}\n</div>\n\n<style>\n\t.machines {\n\t\t--ink: #f5f5f4;\n\t\t--ink-muted: #a8a29e;\n\t\t--ink-dim: #78716c;\n\t\t--rail: #2e2c2a;\n\t\t--ok: #34d399;\n\t\t--bad: #f87171;\n\t\tmax-width: 760px;\n\t\tmargin: 0 auto;\n\t\tpadding: 20px 16px 48px;\n\t\tcolor: var(--ink);\n\t\tfont-size: 13px;\n\t}\n\t.top {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tgap: 16px;\n\t\tmargin-bottom: 24px;\n\t}\n\t.title {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\th1 {\n\t\tmargin: 0 0 4px;\n\t\tfont-size: 18px;\n\t\tfont-weight: 600;\n\t}\n\t.lede {\n\t\tmargin: 0;\n\t\tmax-width: 60ch;\n\t\tcolor: var(--ink-muted);\n\t\tline-height: 1.5;\n\t}\n\n\t/* The run as a track: each machine a station, in the order Update all\n\t takes them, filled in as each one finishes. */\n\t.track {\n\t\tlist-style: none;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\t.station {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tgap: 14px;\n\t\tpadding-bottom: 18px;\n\t}\n\t.station::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 8px;\n\t\ttop: 20px;\n\t\tbottom: 0;\n\t\twidth: 2px;\n\t\tbackground: var(--rail);\n\t}\n\t.station:last-child::before {\n\t\tdisplay: none;\n\t}\n\t.station.ok::before {\n\t\tbackground: color-mix(in oklch, var(--ok) 55%, var(--rail));\n\t}\n\t.station.failed::before {\n\t\tbackground: color-mix(in oklch, var(--bad) 45%, var(--rail));\n\t}\n\t.node {\n\t\tposition: relative;\n\t\tflex: none;\n\t\tdisplay: grid;\n\t\tplace-items: center;\n\t\twidth: 18px;\n\t\theight: 18px;\n\t\tmargin-top: 1px;\n\t\tborder-radius: 50%;\n\t\tborder: 2px solid var(--rail);\n\t\tbackground: #1c1b1a;\n\t\tfont-size: 12px;\n\t}\n\t.station.ok .node {\n\t\tborder-color: var(--ok);\n\t\tcolor: var(--ok);\n\t}\n\t.station.failed .node {\n\t\tborder-color: var(--bad);\n\t\tcolor: var(--bad);\n\t}\n\t.station.starting .node,\n\t.station.running .node,\n\t.station.restarting .node {\n\t\tborder-color: var(--ink-muted);\n\t\tcolor: var(--ink);\n\t}\n\t.body {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.line1 {\n\t\tdisplay: flex;\n\t\talign-items: baseline;\n\t\tgap: 10px;\n\t\tflex-wrap: wrap;\n\t}\n\t.name {\n\t\tfont-size: 15px;\n\t\tfont-weight: 600;\n\t}\n\t.station.off .name {\n\t\tcolor: var(--ink-muted);\n\t}\n\t.ver {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 12px;\n\t\tcolor: var(--ink-dim);\n\t}\n\t/* A version that differs from the page's is the one thing worth noticing. */\n\t.ver.drift {\n\t\tcolor: var(--ink);\n\t\tpadding: 0 6px;\n\t\tborder-radius: 5px;\n\t\tbox-shadow: inset 0 0 0 1px #57534e;\n\t}\n\t.sessions {\n\t\tcolor: var(--ink-dim);\n\t}\n\t.line1 :global(.upd) {\n\t\tmargin-left: auto;\n\t\talign-self: center;\n\t}\n\t.line2 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 7px;\n\t\tmargin-top: 3px;\n\t\tcolor: var(--ink-muted);\n\t\tfont-size: 12px;\n\t}\n\t.plugins-line iconify-icon {\n\t\tfont-size: 14px;\n\t\tcolor: var(--ink-dim);\n\t}\n\t.plugins-line.drift,\n\t.plugins-line.drift iconify-icon {\n\t\tcolor: var(--bad);\n\t}\n\t.plugins-line :global(.align) {\n\t\tmargin-left: auto;\n\t\theight: 26px;\n\t}\n\t.align-failed summary {\n\t\tcolor: var(--bad);\n\t}\n\t.dot {\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: #3a3836;\n\t}\n\t.dot.on {\n\t\tbackground: var(--ok);\n\t}\n\t.note {\n\t\tcolor: var(--ink-dim);\n\t}\n\t.refused,\n\t.progress {\n\t\tmargin: 6px 0 0;\n\t\tline-height: 1.45;\n\t\tcolor: var(--ink-muted);\n\t\toverflow-wrap: anywhere;\n\t}\n\t.refused {\n\t\tcolor: var(--ink);\n\t}\n\t.progress.failed {\n\t\tcolor: var(--bad);\n\t}\n\tdetails {\n\t\tmargin-top: 6px;\n\t}\n\tsummary {\n\t\tcursor: pointer;\n\t\tcolor: var(--ink-dim);\n\t\tfont-size: 12px;\n\t}\n\tpre {\n\t\tmargin: 6px 0 0;\n\t\tmax-height: 220px;\n\t\toverflow: auto;\n\t\tpadding: 8px 10px;\n\t\tborder-radius: 6px;\n\t\tbackground: #141413;\n\t\tcolor: #d6d3d1;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11.5px;\n\t\tline-height: 1.45;\n\t\twhite-space: pre-wrap;\n\t\toverflow-wrap: anywhere;\n\t}\n\t.reload {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tmargin-top: 8px;\n\t\tcolor: var(--ink-muted);\n\t}\n\t.summary {\n\t\tmargin-top: 20px;\n\t\tpadding-top: 14px;\n\t\tborder-top: 1px solid var(--rail);\n\t}\n\t.summary p {\n\t\tmargin: 0;\n\t\tcolor: var(--ok);\n\t}\n\th2 {\n\t\tmargin: 0 0 10px;\n\t\tfont-size: 14px;\n\t\tfont-weight: 600;\n\t\tcolor: var(--bad);\n\t}\n\t.fail {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t\tmargin-bottom: 12px;\n\t}\n\t.fail span {\n\t\tcolor: var(--ink-muted);\n\t}\n\t.spin {\n\t\tanimation: spin 1s linear infinite;\n\t}\n\t@keyframes spin {\n\t\tto {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.spin {\n\t\t\tanimation: none;\n\t\t}\n\t}\n\t@media (max-width: 520px) {\n\t\t.top {\n\t\t\tflex-direction: column;\n\t\t}\n\t}\n</style>\n"],"names":["RESTART_GRACE_MS","NOTHING_TO_DO","DEFAULT_TIMING","updateOrder","machines","m","lastLine","output","l","jobOf","body","job","updateMachine","base","onProgress","io","timing","url","report","p","fail","line","ask","method","started","startJob","startedAt","deadline","restartWait","answer","version","code","updateAll","run","results","machine","result","err","browserIO","res","ms","r","showAll","$.state","known","$.derived","$$props","differs","on","values","$.get","c","marketplaces","plugins","hidden","short","sha","shortHash","section","root_18","div","button","root","$.delegated","$.set","$$render","consequent","root_1","p_1","root_2","$.append","$$anchor","div_1","root_17","table","$.child","thead","tr","$.each","node_2","th","root_3","classes","$.set_text","text_1","tbody","root_11","tr_1","th_1","$.only_child","node_4","$.sibling","tr_2","root_10","th_2","span","span_1","root_4","text_3","$.template_effect","consequent_3","$.reset","node_6","at","unknown","behind","td","root_9","span_2","root_5","$.first_child","fragment","span_3","root_6","text_5","$0","consequent_5","$.set_attribute","span_4","root_8","consequent_6","alternate","classes_1","text_2","consequent_7","tbody_1","root_16","tr_3","th_3","node_10","tr_4","root_15","th_4","span_5","text_6","span_6","text_7","node_11","have","lacking","td_1","node_12","span_7","code_1","fragment_1","text_8","node_13","span_8","root_12","consequent_9","span_9","root_13","span_10","root_14","consequent_8","consequent_10","consequent_11","alternate_1","classes_3","$.set_class","td_2","node_14","Checkbox","v","classes_2","consequent_12","styles","consequent_2","alternate_2","onMount","fleetStore","rows","progress","$.proxy","runningAll","summary","busy","originUpdated","VERSION","runOne","row","apiBase","updateOne","updateEverything","skipped","why","offlineReason","clock","machineName","todo","comparison","comparePlugins","key","fleetPrefsStore","onlyHereKey","aligning","watching","asked","ALIGN_POLL_MS","ALIGN_MISSES","setAligning","id","change","prev","alignError","status","takeAnswer","watchAlign","release","misses","bringInLine","unreachable","plan","alignPlan","$.user_effect","untrack","blockedReason","running","a","alignLine","steps","i","s","step","elapsed","formatSpinnerElapsed","alignFailures","pluginLine","names","list","noun","stateLabel","offlineLabel","$.head","header","text","node","Button","iconify_icon","$.set_custom_element_data","ol","blocked","offline","drift","versionDrifts","standing","align","alignBusy","failures","li","iconify_icon_1","iconify_icon_2","iconify_icon_3","div_2","div_3","text_4","$1","div_4","node_3","div_5","iconify_icon_4","iconify_icon_5","consequent_4","p_2","text_9","details","summary_1","text_10","node_7","f","pre","b","text_11","p_3","root_7","text_13","p_4","fragment_3","text_14","text_15","details_1","pre_1","text_16","classes_6","classes_4","liveCount","div_6","text_17","PluginMatrix","value","p_5","h2","fragment_5","node_17","div_7","b_1","text_20","text_21","node_18","pre_2","text_22","consequent_14","consequent_13","consequent_15"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{_ as n}from"../chunks/CtlIfY1C.js";const e=!1,o=Object.freeze(Object.defineProperty({__proto__:null,ssr:e},Symbol.toStringTag,{value:"Module"}));export{n as component,o as universal};
2
- //# sourceMappingURL=7.BcHOjWdp.js.map
1
+ import{_ as n}from"../chunks/D3umr-Qr.js";const e=!1,o=Object.freeze(Object.defineProperty({__proto__:null,ssr:e},Symbol.toStringTag,{value:"Module"}));export{n as component,o as universal};
2
+ //# sourceMappingURL=7.fqq2vVa9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"7.BcHOjWdp.js","sources":["../../../../../../src/routes/past/[id]/+page.ts"],"sourcesContent":["export const ssr = false;\n"],"names":["ssr"],"mappings":"0CAAO,MAAMA,EAAM"}
1
+ {"version":3,"file":"7.fqq2vVa9.js","sources":["../../../../../../src/routes/past/[id]/+page.ts"],"sourcesContent":["export const ssr = false;\n"],"names":["ssr"],"mappings":"0CAAO,MAAMA,EAAM"}
@@ -0,0 +1,2 @@
1
+ import{_ as n}from"../chunks/B4FaHfAQ.js";const e=!1,o=Object.freeze(Object.defineProperty({__proto__:null,ssr:e},Symbol.toStringTag,{value:"Module"}));export{n as component,o as universal};
2
+ //# sourceMappingURL=8.DNFFjTla.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"8.D7NtqIYy.js","sources":["../../../../../../src/routes/session/[target]/+page.ts"],"sourcesContent":["export const ssr = false;\n"],"names":["ssr"],"mappings":"0CAAO,MAAMA,EAAM"}
1
+ {"version":3,"file":"8.DNFFjTla.js","sources":["../../../../../../src/routes/session/[target]/+page.ts"],"sourcesContent":["export const ssr = false;\n"],"names":["ssr"],"mappings":"0CAAO,MAAMA,EAAM"}
@@ -0,0 +1,2 @@
1
+ import{_ as n}from"../chunks/CtnjySwS.js";const e=!1,o=Object.freeze(Object.defineProperty({__proto__:null,ssr:e},Symbol.toStringTag,{value:"Module"}));export{n as component,o as universal};
2
+ //# sourceMappingURL=9.0kMPrp2-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"9.D-211z9-.js","sources":["../../../../../../src/routes/session/[target]/agent/[agentId]/+page.ts"],"sourcesContent":["export const ssr = false;\n"],"names":["ssr"],"mappings":"0CAAO,MAAMA,EAAM"}
1
+ {"version":3,"file":"9.0kMPrp2-.js","sources":["../../../../../../src/routes/session/[target]/agent/[agentId]/+page.ts"],"sourcesContent":["export const ssr = false;\n"],"names":["ssr"],"mappings":"0CAAO,MAAMA,EAAM"}
@@ -1 +1 @@
1
- {"version":"1793193428870"}
1
+ {"version":"1793194743583"}
@@ -40,6 +40,12 @@ ${text}` : text);
40
40
  if (chunks.length === 0 && !LOCAL_OUTPUT_TAG.test(trimmed)) return null;
41
41
  return chunks.join("\n");
42
42
  }
43
+ const PASTED_OPEN = /<pasted_content id="[^"]*">\n?/g;
44
+ const PASTED_CLOSE = /\n?<\/pasted_content id="[^"]*">\n?/g;
45
+ function unwrapPasted(text) {
46
+ if (!text.includes("<pasted_content id=")) return text;
47
+ return text.replace(PASTED_OPEN, "").replace(PASTED_CLOSE, "\n").trim();
48
+ }
43
49
  function parseAskQuestions(input) {
44
50
  const raw = input.questions;
45
51
  if (!Array.isArray(raw)) return [];
@@ -305,7 +311,8 @@ class TranscriptBuilder {
305
311
  const attachment = asRecord(record.attachment);
306
312
  if (!attachment || attachment.type !== "queued_command") return [];
307
313
  if (asRecord(attachment.origin)?.kind !== "human") return [];
308
- const prompt = readString(attachment.prompt);
314
+ const raw = readString(attachment.prompt);
315
+ const prompt = raw === null ? null : unwrapPasted(raw);
309
316
  if (!prompt || prompt.trim().length === 0) return [];
310
317
  const uuid = readString(record.uuid) ?? `queued-${this.entries.length}`;
311
318
  const ts = parseTimestamp(record.timestamp ?? attachment.timestamp);
@@ -378,7 +385,7 @@ class TranscriptBuilder {
378
385
  if (!message) return [];
379
386
  const uuid = readString(record.uuid) ?? `user-${this.entries.length}`;
380
387
  const ts = parseTimestamp(record.timestamp);
381
- const content = message.content;
388
+ const content = typeof message.content === "string" ? unwrapPasted(message.content) : message.content;
382
389
  const origin = asRecord(record.origin);
383
390
  if (origin?.kind === "peer") {
384
391
  const body = readString(origin.body) ?? (typeof content === "string" ? content : null);
@@ -493,7 +500,8 @@ class TranscriptBuilder {
493
500
  })
494
501
  );
495
502
  } else if (rec.type === "text") {
496
- const text = readString(rec.text);
503
+ const raw = readString(rec.text);
504
+ const text = raw === null ? null : unwrapPasted(raw);
497
505
  if (text && text.trim().length > 0) promptTexts.push(text);
498
506
  }
499
507
  }
@@ -1176,6 +1184,7 @@ export {
1176
1184
  parseUnifiedDiff as l,
1177
1185
  parseSlashCommand as p,
1178
1186
  repoRoot as r,
1179
- sessionWatcher as s
1187
+ sessionWatcher as s,
1188
+ unwrapPasted as u
1180
1189
  };
1181
1190
  //# sourceMappingURL=git.js.map