@dylanpiercey/work 0.0.122 → 0.0.123

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 (252) hide show
  1. package/bin/work.mjs +61 -17
  2. package/dist/_8GaDFTzQ.js +2 -0
  3. package/dist/{_DJyHc1w-.js → _930ti7l4.js} +4 -4
  4. package/dist/{_BdBrOaZF.js → _AItLA3Th.js} +27 -27
  5. package/dist/{_CfwTkTbL.js → _BJcBOXUi.js} +2 -2
  6. package/dist/_CrVv317N.js +2 -0
  7. package/dist/{_Cr71Xd0d.js → _DOBRRnfU.js} +13 -3
  8. package/dist/{_BPX2_wNT.js → _Dxspyv-X.js} +2 -2
  9. package/dist/_iX5oUHA_.js +2 -0
  10. package/dist/index.mjs +83 -82
  11. package/dist/public/assets/{_Z4spekbX.js → _1C01L6H8.js} +1 -1
  12. package/dist/public/assets/_1C01L6H8.js.br +0 -0
  13. package/dist/public/assets/{_BvJHLrwP2.js → _1KTQ10Sa2.js} +1 -1
  14. package/dist/public/assets/_1KTQ10Sa2.js.br +0 -0
  15. package/dist/public/assets/{_BxfzYLyp.js → _9ugZ8sFU.js} +1 -1
  16. package/dist/public/assets/_9ugZ8sFU.js.br +0 -0
  17. package/dist/public/assets/{_DZXcx3AV2.js → _B2oquPMV2.js} +1 -1
  18. package/dist/public/assets/_B2oquPMV2.js.br +0 -0
  19. package/dist/public/assets/{_8ixfpSLV.js → _B3u522i6.js} +1 -1
  20. package/dist/public/assets/_B3u522i6.js.br +0 -0
  21. package/dist/public/assets/{_xvmiPi6J2.js → _B79q4Iep2.js} +1 -1
  22. package/dist/public/assets/_B79q4Iep2.js.br +0 -0
  23. package/dist/public/assets/{_C0Wcm1DA.js → _B7yMQpNb.js} +1 -1
  24. package/dist/public/assets/_B7yMQpNb.js.br +0 -0
  25. package/dist/public/assets/{_Tpid4lIw.js → _B8-2v5ah.js} +1 -1
  26. package/dist/public/assets/_B8-2v5ah.js.br +0 -0
  27. package/dist/public/assets/{_a18bdHwu2.js → _B9J4D40T2.js} +1 -1
  28. package/dist/public/assets/_B9J4D40T2.js.br +0 -0
  29. package/dist/public/assets/{_CW70CETb.js → _BBdXq0au.js} +1 -1
  30. package/dist/public/assets/_BBdXq0au.js.br +0 -0
  31. package/dist/public/assets/{_C5fkGs032.js → _BFXVaaZZ2.js} +1 -1
  32. package/dist/public/assets/_BFXVaaZZ2.js.br +0 -0
  33. package/dist/public/assets/{_BO_carFG.js → _BIniTggd.js} +1 -1
  34. package/dist/public/assets/_BIniTggd.js.br +5 -0
  35. package/dist/public/assets/{_CWU_IJjz2.js → _BLKYt0dH2.js} +1 -1
  36. package/dist/public/assets/_BLKYt0dH2.js.br +0 -0
  37. package/dist/public/assets/{_lo4uGYhv.js → _BNQK17cx.js} +1 -1
  38. package/dist/public/assets/_BNQK17cx.js.br +0 -0
  39. package/dist/public/assets/{_DWZLw9u5.js → _BPacLsJZ.js} +1 -1
  40. package/dist/public/assets/_BPacLsJZ.js.br +0 -0
  41. package/dist/public/assets/{_DyZPE8LD2.js → _BQvL7p-H2.js} +1 -1
  42. package/dist/public/assets/_BQvL7p-H2.js.br +0 -0
  43. package/dist/public/assets/{_5waGGcsH2.js → _BTyLW7g22.js} +1 -1
  44. package/dist/public/assets/_BTyLW7g22.js.br +0 -0
  45. package/dist/public/assets/{_Bhf_wksG.js → _BV3wnaUQ.js} +1 -1
  46. package/dist/public/assets/_BV3wnaUQ.js.br +0 -0
  47. package/dist/public/assets/{_DOa36sDf2.js → _BW0vrnJ02.js} +1 -1
  48. package/dist/public/assets/_BW0vrnJ02.js.br +0 -0
  49. package/dist/public/assets/{_Bz61WBUI.js → _B_zXuzSk.js} +1 -1
  50. package/dist/public/assets/_B_zXuzSk.js.br +0 -0
  51. package/dist/public/assets/{_CqEc7KwE.js → _BeTQOqQK.js} +1 -1
  52. package/dist/public/assets/_BeTQOqQK.js.br +0 -0
  53. package/dist/public/assets/{_BO6TG3u42.js → _Bf-zNqvW2.js} +1 -1
  54. package/dist/public/assets/_Bf-zNqvW2.js.br +0 -0
  55. package/dist/public/assets/{_ih_22Lwc.js → _Bh10nSHk.js} +1 -1
  56. package/dist/public/assets/_Bh10nSHk.js.br +0 -0
  57. package/dist/public/assets/{_CKAWtCKg2.js → _Bhx2xsqn2.js} +1 -1
  58. package/dist/public/assets/_Bhx2xsqn2.js.br +0 -0
  59. package/dist/public/assets/{_BPjnrd1A.js → _BozRJAkt.js} +1 -1
  60. package/dist/public/assets/_BozRJAkt.js.br +0 -0
  61. package/dist/public/assets/{_D1zxC16I2.js → _Bp422VRU2.js} +1 -1
  62. package/dist/public/assets/_Bp422VRU2.js.br +0 -0
  63. package/dist/public/assets/{_kQ849tt6.js → _Buph4MaC.js} +1 -1
  64. package/dist/public/assets/_Buph4MaC.js.br +0 -0
  65. package/dist/public/assets/{_DfLxwQXd.js → _BvsESXeS.js} +1 -1
  66. package/dist/public/assets/_BvsESXeS.js.br +0 -0
  67. package/dist/public/assets/{_W9aOkr2v.js → _BwWPg2fR.js} +1 -1
  68. package/dist/public/assets/_BwWPg2fR.js.br +0 -0
  69. package/dist/public/assets/{_Y8lHXkX62.js → _C0ILV08N2.js} +1 -1
  70. package/dist/public/assets/_C0ILV08N2.js.br +0 -0
  71. package/dist/public/assets/{_D2SIC9vH2.js → _C3-LfntB2.js} +1 -1
  72. package/dist/public/assets/_C3-LfntB2.js.br +0 -0
  73. package/dist/public/assets/{_CNBki2Aq.js → _C3WvBCQb.js} +1 -1
  74. package/dist/public/assets/_C3WvBCQb.js.br +0 -0
  75. package/dist/public/assets/{_DDNq8klN.js → _C6G2Teqe.js} +1 -1
  76. package/dist/public/assets/_C6G2Teqe.js.br +0 -0
  77. package/dist/public/assets/{_Buu8_cyc.js → _C9ik2q2w.js} +1 -1
  78. package/dist/public/assets/_C9ik2q2w.js.br +0 -0
  79. package/dist/public/assets/{_Bkd9T8qO2.js → _C9pGaByT2.js} +1 -1
  80. package/dist/public/assets/_C9pGaByT2.js.br +0 -0
  81. package/dist/public/assets/{_D9QYQO8L.js → _CAVwrN0f.js} +1 -1
  82. package/dist/public/assets/_CAVwrN0f.js.br +0 -0
  83. package/dist/public/assets/{_DegNdi0y2.js → _CBd4k6AZ2.js} +1 -1
  84. package/dist/public/assets/_CBd4k6AZ2.js.br +0 -0
  85. package/dist/public/assets/{_CPCFHsPT2.js → _CJMg3VoD2.js} +1 -1
  86. package/dist/public/assets/_CJMg3VoD2.js.br +0 -0
  87. package/dist/public/assets/{_DLbcflUX2.js → _CKapyBeI2.js} +1 -1
  88. package/dist/public/assets/_CKapyBeI2.js.br +0 -0
  89. package/dist/public/assets/{_DMzElmqz.js → _COt541Xf.js} +1 -1
  90. package/dist/public/assets/_COt541Xf.js.br +0 -0
  91. package/dist/public/assets/{_Bgq0Djxf.js → _CRLl3VEd.js} +1 -1
  92. package/dist/public/assets/_CRLl3VEd.js.br +0 -0
  93. package/dist/public/assets/{_CqgcFjOQ.js → _CTbIxoLY.js} +1 -1
  94. package/dist/public/assets/_CTbIxoLY.js.br +0 -0
  95. package/dist/public/assets/{_BYOrCsb12.js → _CYK6bapW2.js} +1 -1
  96. package/dist/public/assets/_CYK6bapW2.js.br +0 -0
  97. package/dist/public/assets/{_sWtKlZZ5.js → _CZ1guNTV.js} +5 -5
  98. package/dist/public/assets/_CZ1guNTV.js.br +0 -0
  99. package/dist/public/assets/{_22Wep3Qj2.js → _C_6NOEKJ2.js} +1 -1
  100. package/dist/public/assets/{_BvTWp2QQ.js → _CdjreNlJ.js} +1 -1
  101. package/dist/public/assets/_CdjreNlJ.js.br +0 -0
  102. package/dist/public/assets/{_6yLwnUth.js → _Cf5Zrdti.js} +1 -1
  103. package/dist/public/assets/_Cf5Zrdti.js.br +0 -0
  104. package/dist/public/assets/{_BcA9iBrt.js → _CfJLLMWV.js} +1 -1
  105. package/dist/public/assets/_CfJLLMWV.js.br +0 -0
  106. package/dist/public/assets/{_9wp1Weya.js → _CzvfWhEh.js} +1 -1
  107. package/dist/public/assets/_CzvfWhEh.js.br +0 -0
  108. package/dist/public/assets/{_DbEs3COY.js → _D1A7jI1p.js} +1 -1
  109. package/dist/public/assets/_D1A7jI1p.js.br +0 -0
  110. package/dist/public/assets/{_BQfrm6Hv.js → _D9nKEBYM.js} +1 -1
  111. package/dist/public/assets/_D9nKEBYM.js.br +0 -0
  112. package/dist/public/assets/{_BfzwZXGo.js → _DAv1qyFD.js} +1 -1
  113. package/dist/public/assets/_DAv1qyFD.js.br +0 -0
  114. package/dist/public/assets/{_MEclBKIH.js → _DG27SXxk.js} +1 -1
  115. package/dist/public/assets/_DG27SXxk.js.br +0 -0
  116. package/dist/public/assets/{_CNVk64eD.js → _DI5lrPqF.js} +1 -1
  117. package/dist/public/assets/_DI5lrPqF.js.br +0 -0
  118. package/dist/public/assets/{_DL2HExUi2.js → _DNc251EH2.js} +1 -1
  119. package/dist/public/assets/_DNc251EH2.js.br +0 -0
  120. package/dist/public/assets/{_DY5MuJqh.js → _D_abiz6o.js} +1 -1
  121. package/dist/public/assets/_D_abiz6o.js.br +0 -0
  122. package/dist/public/assets/{_CLM87vGj.js → _DbqqEUGU.js} +1 -1
  123. package/dist/public/assets/_DbqqEUGU.js.br +0 -0
  124. package/dist/public/assets/{_BllRu2dt.js → _DfVlmKjB.js} +1 -1
  125. package/dist/public/assets/_DfVlmKjB.js.br +0 -0
  126. package/dist/public/assets/{_CrlXwiFN2.js → _DiXam-cI2.js} +1 -1
  127. package/dist/public/assets/_DiXam-cI2.js.br +0 -0
  128. package/dist/public/assets/{_CpByFq0N.js → _DjPFzYrA.js} +1 -1
  129. package/dist/public/assets/_DjPFzYrA.js.br +0 -0
  130. package/dist/public/assets/{_9NNG2Bg-.js → _DlLV3Ljr.js} +1 -1
  131. package/dist/public/assets/_DlLV3Ljr.js.br +0 -0
  132. package/dist/public/assets/{_DwTIenq9.js → _DlUUGQZG.js} +1 -1
  133. package/dist/public/assets/_DlUUGQZG.js.br +0 -0
  134. package/dist/public/assets/{_BcnKn75V.js → _DnFHO_Dn.js} +4 -4
  135. package/dist/public/assets/_DnFHO_Dn.js.br +0 -0
  136. package/dist/public/assets/{_hO1aV02w2.js → _Dyi2Gxao2.js} +1 -1
  137. package/dist/public/assets/{_CM8zmLXB.js → _E9rgzIvo.js} +1 -1
  138. package/dist/public/assets/_E9rgzIvo.js.br +0 -0
  139. package/dist/public/assets/{_4C4ZKftZ.js → _ReVTweDC.js} +1 -1
  140. package/dist/public/assets/_ReVTweDC.js.br +0 -0
  141. package/dist/public/assets/{_BO5eXuo12.js → _TnqcMVKx2.js} +1 -1
  142. package/dist/public/assets/_TnqcMVKx2.js.br +0 -0
  143. package/dist/public/assets/{_Dwsfrcqr.js → _Upul3Ofo.js} +1 -1
  144. package/dist/public/assets/_Upul3Ofo.js.br +0 -0
  145. package/dist/public/assets/{_BgxHsV2q.js → _ZrGaJYJ6.js} +1 -1
  146. package/dist/public/assets/_ZrGaJYJ6.js.br +0 -0
  147. package/dist/public/assets/{_CtuCeJaB.js → _jH6dnn_a.js} +1 -1
  148. package/dist/public/assets/_jH6dnn_a.js.br +0 -0
  149. package/dist/public/assets/{_BeYy7LJv.js → _k9hFY1PH.js} +1 -1
  150. package/dist/public/assets/_k9hFY1PH.js.br +0 -0
  151. package/dist/public/assets/{_D_5rjG0o.js → _ssYg2Lbg.js} +1 -1
  152. package/dist/public/assets/_ssYg2Lbg.js.br +0 -0
  153. package/dist/public/assets/{_B80Me7dX.js → _stxqF0YI.js} +1 -1
  154. package/dist/public/assets/{_ClA-9QLW.js → _uwlWIup9.js} +1 -1
  155. package/dist/public/assets/_uwlWIup9.js.br +0 -0
  156. package/dist/public/assets/{_BJVUTWAN.js → _wD1I5kuG.js} +1 -1
  157. package/dist/public/assets/_wD1I5kuG.js.br +0 -0
  158. package/dist/public/assets/{_CorgOnjQ.js → _x-8ESFAf.js} +1 -1
  159. package/dist/public/assets/_x-8ESFAf.js.br +0 -0
  160. package/dist/public/assets/{app-page-9ukuDxSW.css → app-page-DXg75Hl7.css} +1 -1
  161. package/dist/public/assets/app-page-DXg75Hl7.css.br +0 -0
  162. package/dist/public/assets/{diff-view-BmyKvz_f.css → diff-view-Bi6n2ybW.css} +1 -1
  163. package/dist/public/assets/diff-view-Bi6n2ybW.css.br +0 -0
  164. package/dist/public/assets/new-CHONaddH.js +1 -0
  165. package/dist/public/assets/settings-CHONaddH.js +1 -0
  166. package/dist/public/assets/w-CHONaddH.js +1 -0
  167. package/dist/public/assets/w._-BqbvDTGg.js +1 -0
  168. package/dist/public/assets/w._-CHONaddH.js +1 -0
  169. package/package.json +1 -1
  170. package/dist/_B1lVb01g.js +0 -2
  171. package/dist/_Bjh5JEm7.js +0 -2
  172. package/dist/_Dpa8WFuv.js +0 -2
  173. package/dist/public/assets/_4C4ZKftZ.js.br +0 -0
  174. package/dist/public/assets/_5waGGcsH2.js.br +0 -0
  175. package/dist/public/assets/_6yLwnUth.js.br +0 -0
  176. package/dist/public/assets/_8ixfpSLV.js.br +0 -0
  177. package/dist/public/assets/_9NNG2Bg-.js.br +0 -0
  178. package/dist/public/assets/_9wp1Weya.js.br +0 -0
  179. package/dist/public/assets/_BJVUTWAN.js.br +0 -0
  180. package/dist/public/assets/_BO5eXuo12.js.br +0 -0
  181. package/dist/public/assets/_BO6TG3u42.js.br +0 -0
  182. package/dist/public/assets/_BO_carFG.js.br +0 -0
  183. package/dist/public/assets/_BPjnrd1A.js.br +0 -0
  184. package/dist/public/assets/_BQfrm6Hv.js.br +0 -0
  185. package/dist/public/assets/_BYOrCsb12.js.br +0 -0
  186. package/dist/public/assets/_BcA9iBrt.js.br +0 -0
  187. package/dist/public/assets/_BcnKn75V.js.br +0 -0
  188. package/dist/public/assets/_BeYy7LJv.js.br +0 -0
  189. package/dist/public/assets/_BfzwZXGo.js.br +0 -0
  190. package/dist/public/assets/_Bgq0Djxf.js.br +0 -0
  191. package/dist/public/assets/_BgxHsV2q.js.br +0 -0
  192. package/dist/public/assets/_Bhf_wksG.js.br +0 -0
  193. package/dist/public/assets/_Bkd9T8qO2.js.br +0 -0
  194. package/dist/public/assets/_BllRu2dt.js.br +0 -0
  195. package/dist/public/assets/_Buu8_cyc.js.br +0 -0
  196. package/dist/public/assets/_BvJHLrwP2.js.br +0 -0
  197. package/dist/public/assets/_BvTWp2QQ.js.br +0 -0
  198. package/dist/public/assets/_BxfzYLyp.js.br +0 -0
  199. package/dist/public/assets/_Bz61WBUI.js.br +0 -0
  200. package/dist/public/assets/_C0Wcm1DA.js.br +0 -0
  201. package/dist/public/assets/_C5fkGs032.js.br +0 -0
  202. package/dist/public/assets/_CKAWtCKg2.js.br +0 -0
  203. package/dist/public/assets/_CLM87vGj.js.br +0 -0
  204. package/dist/public/assets/_CM8zmLXB.js.br +0 -0
  205. package/dist/public/assets/_CNBki2Aq.js.br +0 -0
  206. package/dist/public/assets/_CNVk64eD.js.br +0 -0
  207. package/dist/public/assets/_CPCFHsPT2.js.br +0 -0
  208. package/dist/public/assets/_CW70CETb.js.br +0 -0
  209. package/dist/public/assets/_CWU_IJjz2.js.br +0 -0
  210. package/dist/public/assets/_ClA-9QLW.js.br +0 -0
  211. package/dist/public/assets/_CorgOnjQ.js.br +0 -0
  212. package/dist/public/assets/_CpByFq0N.js.br +0 -0
  213. package/dist/public/assets/_CqEc7KwE.js.br +0 -0
  214. package/dist/public/assets/_CqgcFjOQ.js.br +0 -0
  215. package/dist/public/assets/_CrlXwiFN2.js.br +0 -0
  216. package/dist/public/assets/_CtuCeJaB.js.br +0 -0
  217. package/dist/public/assets/_D1zxC16I2.js.br +0 -0
  218. package/dist/public/assets/_D2SIC9vH2.js.br +0 -0
  219. package/dist/public/assets/_D9QYQO8L.js.br +0 -0
  220. package/dist/public/assets/_DDNq8klN.js.br +0 -0
  221. package/dist/public/assets/_DL2HExUi2.js.br +0 -0
  222. package/dist/public/assets/_DLbcflUX2.js.br +0 -0
  223. package/dist/public/assets/_DMzElmqz.js.br +0 -0
  224. package/dist/public/assets/_DOa36sDf2.js.br +0 -0
  225. package/dist/public/assets/_DWZLw9u5.js.br +0 -0
  226. package/dist/public/assets/_DY5MuJqh.js.br +0 -0
  227. package/dist/public/assets/_DZXcx3AV2.js.br +0 -0
  228. package/dist/public/assets/_D_5rjG0o.js.br +0 -0
  229. package/dist/public/assets/_DbEs3COY.js.br +0 -0
  230. package/dist/public/assets/_DegNdi0y2.js.br +0 -0
  231. package/dist/public/assets/_DfLxwQXd.js.br +0 -0
  232. package/dist/public/assets/_DwTIenq9.js.br +0 -0
  233. package/dist/public/assets/_Dwsfrcqr.js.br +0 -0
  234. package/dist/public/assets/_DyZPE8LD2.js.br +0 -0
  235. package/dist/public/assets/_MEclBKIH.js.br +0 -0
  236. package/dist/public/assets/_Tpid4lIw.js.br +0 -0
  237. package/dist/public/assets/_W9aOkr2v.js.br +0 -0
  238. package/dist/public/assets/_Y8lHXkX62.js.br +0 -0
  239. package/dist/public/assets/_Z4spekbX.js.br +0 -0
  240. package/dist/public/assets/_a18bdHwu2.js.br +0 -0
  241. package/dist/public/assets/_ih_22Lwc.js.br +0 -0
  242. package/dist/public/assets/_kQ849tt6.js.br +0 -0
  243. package/dist/public/assets/_lo4uGYhv.js.br +0 -0
  244. package/dist/public/assets/_sWtKlZZ5.js.br +0 -0
  245. package/dist/public/assets/_xvmiPi6J2.js.br +0 -0
  246. package/dist/public/assets/app-page-9ukuDxSW.css.br +0 -0
  247. package/dist/public/assets/diff-view-BmyKvz_f.css.br +0 -0
  248. package/dist/public/assets/new-PmY_tc2O.js +0 -1
  249. package/dist/public/assets/settings-PmY_tc2O.js +0 -1
  250. package/dist/public/assets/w-PmY_tc2O.js +0 -1
  251. package/dist/public/assets/w._-DL1tdfaH.js +0 -1
  252. package/dist/public/assets/w._-PmY_tc2O.js +0 -1
package/bin/work.mjs CHANGED
@@ -657,25 +657,70 @@ function servicePath() {
657
657
  return setupPath(path.dirname(process.execPath));
658
658
  }
659
659
 
660
- /** Argv prefix that keeps the host awake while the server runs. A suspended
661
- * host is a dead host: agents keep running in tmux, but the machine stops
662
- * answering, so remote sessions look hung until someone wakes it by hand. The
663
- * inhibitor needs no privileges and lifts when the service stops — masking
664
- * sleep.target is the stronger machine-wide version, but that wants sudo. */
665
- function awakePrefix() {
660
+ /** Argv prefixes that keep the host awake while the server runs, best first.
661
+ * A suspended host is a dead host: agents keep running in tmux, but the
662
+ * machine stops answering, so remote sessions look hung until someone wakes
663
+ * it by hand. The inhibitor lifts when the service stops.
664
+ *
665
+ * Linux offers two, because polkit gates them differently:
666
+ *
667
+ * sleep:idle also vetoes an explicit suspend, but
668
+ * org.freedesktop.login1.inhibit-block-sleep is
669
+ * allow_any=auth_admin_keep — permitted from a session, refused
670
+ * for a caller that has none. That is the lingering user
671
+ * manager at boot, so the service cannot rely on it.
672
+ * idle org.freedesktop.login1.inhibit-block-idle is allow_any=yes,
673
+ * so this always works. It holds the system non-idle, which is
674
+ * what stops logind's IdleAction (and a desktop's idle-suspend)
675
+ * from ever firing.
676
+ *
677
+ * Idle alone is the honest target anyway — it matches `caffeinate -s`, and
678
+ * declining to veto a suspend the user deliberately asked for is correct.
679
+ * Taking the stronger one when it is allowed costs nothing, so try both. */
680
+ function awakePrefixes() {
666
681
  if (process.platform === "darwin")
667
- return have("caffeinate") ? ["/usr/bin/caffeinate", "-s"] : [];
682
+ return have("caffeinate") ? [["/usr/bin/caffeinate", "-s"]] : [];
668
683
  if (process.platform === "linux" && have("systemd-inhibit"))
669
- return [
684
+ return ["sleep:idle", "idle"].map((what) => [
670
685
  "systemd-inhibit",
671
- "--what=sleep:idle",
686
+ `--what=${what}`,
672
687
  "--who=work",
673
688
  "--why=work server is running",
674
689
  "--mode=block",
675
- ];
690
+ ]);
676
691
  return [];
677
692
  }
678
693
 
694
+ /** systemd's ExecStart for the linux unit, as one line.
695
+ *
696
+ * With no inhibitor this is just the argv. Otherwise it is a shell that tries
697
+ * each candidate in turn and execs under the first one allowed, because
698
+ * `systemd-inhibit` exits non-zero when polkit refuses — and since it is the
699
+ * unit's ExecStart, that failure takes the whole service down with it. A
700
+ * lingering manager at boot has no session, so the sleep block is refused
701
+ * every time and `Restart=always` retries forever; the server would only come
702
+ * up once someone logged in, defeating the unattended start
703
+ * `loginctl enable-linger` exists to guarantee. Falling through to the
704
+ * ungated idle block keeps the machine awake anyway, and running bare is
705
+ * still better than not running. */
706
+ function serviceExecStart(candidates, argv) {
707
+ // systemd splits on whitespace, so quote any argument containing it.
708
+ const unit = (parts) =>
709
+ parts.map((a) => (a.includes(" ") ? `"${a}"` : a)).join(" ");
710
+ if (!candidates.length) return unit(argv);
711
+ const shq = (a) => `'${a.replace(/'/g, `'\\''`)}'`;
712
+ const cmd = argv.map(shq).join(" ");
713
+ // Each probe takes and drops an inhibitor around `true`; if that is allowed
714
+ // the real one will be too.
715
+ const script = candidates
716
+ .map((c) => {
717
+ const inh = c.map(shq).join(" ");
718
+ return `if ${inh} true 2>/dev/null; then exec ${inh} ${cmd}; fi; `;
719
+ })
720
+ .join("");
721
+ return `/bin/sh -c "${script}exec ${cmd}"`;
722
+ }
723
+
679
724
  /** Where installService() writes the service definition — also the store we
680
725
  * read settings back out of, so there is no second config file to keep. */
681
726
  function serviceFile() {
@@ -887,9 +932,11 @@ function installService() {
887
932
  // instead of the CLI — that script carries its own sleep inhibitor and
888
933
  // PORT handling, so no awake prefix is layered on top.
889
934
  const execOverride = process.env.WORK_SERVICE_EXEC;
890
- const startArgs = execOverride
891
- ? [execOverride]
892
- : [...awakePrefix(), cliPath, "start"];
935
+ const target = execOverride ? [execOverride] : [cliPath, "start"];
936
+ const awake = execOverride ? [] : awakePrefixes();
937
+ // launchd takes an argv, not a shell: caffeinate needs no authorisation, so
938
+ // the first candidate is simply used.
939
+ const startArgs = [...(awake[0] || []), ...target];
893
940
  if (process.platform === "darwin") {
894
941
  const plist = serviceFile();
895
942
  fs.mkdirSync(path.dirname(plist), { recursive: true });
@@ -958,10 +1005,7 @@ ${envXml}
958
1005
  const envLines = Object.entries(serviceEnv())
959
1006
  .map(([k, v]) => `Environment=${k}=${v}`)
960
1007
  .join("\n");
961
- // systemd splits ExecStart on whitespace, so quote the inhibitor's --why.
962
- const execStart = startArgs
963
- .map((a) => (a.includes(" ") ? `"${a}"` : a))
964
- .join(" ");
1008
+ const execStart = serviceExecStart(awake, target);
965
1009
  fs.writeFileSync(
966
1010
  unitFile,
967
1011
  `[Unit]
@@ -0,0 +1,2 @@
1
+ import { n as pokeStatusWatch } from "./_BJcBOXUi.js";
2
+ export { pokeStatusWatch };
@@ -1,4 +1,4 @@
1
- import { $ as setSetting, V as publish, Y as getSetting, _t as git, bt as config, c as killWorkspaceSessions, dt as all, ft as db, gt as gh, i as disposeSessions, l as listSessions, nt as ghKnownHosts, ot as DEFAULT_GITHUB_HOST, p as panePids, pt as get, vt as run } from "./_Cr71Xd0d.js";
1
+ import { $ as setSetting, V as publish, Y as getSetting, _t as git, bt as config, c as killWorkspaceSessions, dt as all, ft as db, gt as gh, i as disposeSessions, l as listSessions, nt as ghKnownHosts, ot as DEFAULT_GITHUB_HOST, p as panePids, pt as get, vt as run } from "./_DOBRRnfU.js";
2
2
  import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -1005,7 +1005,7 @@ async function materializeWorkspace(id) {
1005
1005
  repo.default_branch = defaultBranch;
1006
1006
  db.prepare("UPDATE repos SET base_branch = ?, default_branch = ? WHERE workspace_id = ? AND full_name = ?").run(repo.base_branch, defaultBranch, id, repo.full_name);
1007
1007
  }
1008
- (await import("./_Dpa8WFuv.js")).muteAutoPush(repo.full_name, ws.branch);
1008
+ (await import("./_CrVv317N.js")).muteAutoPush(repo.full_name, ws.branch);
1009
1009
  await addWorkspaceWorktree(bare, path.join(ws.path, repo.worktree), ws.branch, repo.base_branch);
1010
1010
  added.push(repo);
1011
1011
  });
@@ -1639,7 +1639,7 @@ async function noteRemoteRef(fullName, branch, oid) {
1639
1639
  if (await revParse(barePath(fullName), `refs/heads/${branch}`) !== oid) return;
1640
1640
  rememberPushed(k, oid);
1641
1641
  if (failures.delete(k)) {
1642
- const { pokeStatusWatch } = await import("./_Bjh5JEm7.js");
1642
+ const { pokeStatusWatch } = await import("./_8GaDFTzQ.js");
1643
1643
  pokeStatusWatch();
1644
1644
  }
1645
1645
  }
@@ -1704,7 +1704,7 @@ async function pushOnce(fullName, branch, bases) {
1704
1704
  }
1705
1705
  async function fail(k, why) {
1706
1706
  failures.set(k, why);
1707
- const { pokeStatusWatch } = await import("./_Bjh5JEm7.js");
1707
+ const { pokeStatusWatch } = await import("./_8GaDFTzQ.js");
1708
1708
  pokeStatusWatch();
1709
1709
  return why;
1710
1710
  }
@@ -1,4 +1,4 @@
1
- import { $ as _attr_style, At as _subscribe, Ct as _scope_reason, D as toast_default, Dt as _serialize_guard, Et as _sep, G as _attr_class, H as tone, I as iconBtnLg, J as _attr_input_value, K as _attr_details_or_dialog_open, L as iconBtnRow, O as icon_xmark_default, Ot as _serialize_if, Q as _attr_select_value, R as iconBtnXs, Rt as writeScope, St as _scope_id, Tt as _script, W as _attr, X as _attr_option_value, _ as diffScope, a as fuzzy, b as setDiffPos, bt as _resume, c as icon_arrow_up_default, ct as _el_resume, d as icon_refresh_default, dt as _existing_scope, g as diffPos, gt as _html, h as diffFilter, i as icon_sidebar_default, it as _content_resume, j as repoLabel, jt as _template, k as icon_base_default, kt as _set_serialize_reason, l as icon_chevron_right_default, lt as _escape, n as findIconBtn, ot as _el, pt as _for_of, r as findInput, s as icon_search_default, st as _el_read_error, t as icon_arrow_down_default, u as icon_back_default, v as diffTreeOpen, vt as _if, wt as _scope_with_id, x as setDiffScope, xt as _resume_branch, yt as _peek_scope_id } from "./_BPX2_wNT.js";
1
+ import { $ as _attr_style, At as _subscribe, Ct as _scope_reason, D as toast_default, Dt as _serialize_guard, Et as _sep, G as _attr_class, H as tone, I as iconBtnLg, J as _attr_input_value, K as _attr_details_or_dialog_open, L as iconBtnRow, O as icon_xmark_default, Ot as _serialize_if, Q as _attr_select_value, R as iconBtnXs, Rt as writeScope, St as _scope_id, Tt as _script, W as _attr, X as _attr_option_value, _ as diffScope, a as fuzzy, b as setDiffPos, bt as _resume, c as icon_arrow_up_default, ct as _el_resume, d as icon_refresh_default, dt as _existing_scope, g as diffPos, gt as _html, h as diffFilter, i as icon_sidebar_default, it as _content_resume, j as repoLabel, jt as _template, k as icon_base_default, kt as _set_serialize_reason, l as icon_chevron_right_default, lt as _escape, n as findIconBtn, ot as _el, pt as _for_of, r as findInput, s as icon_search_default, st as _el_read_error, t as icon_arrow_down_default, u as icon_back_default, v as diffTreeOpen, vt as _if, wt as _scope_with_id, x as setDiffScope, xt as _resume_branch, yt as _peek_scope_id } from "./_Dxspyv-X.js";
2
2
  //#region src/client/router.ts
3
3
  function urlFor(r) {
4
4
  if (r.view === "settings") return "/settings";
@@ -1849,9 +1849,9 @@ var diff_find_default = _template("i", (input) => {
1849
1849
  el.select();
1850
1850
  }, 0);
1851
1851
  }, "i5", $scope0_id);
1852
- _html(`<div${_attr_class(["_gb", !open && "_ga"])} aria-hidden=${open ? "false" : "true"}><input${_attr_input_value($scope0_id, "b", query || "", _resume(function(v) {
1852
+ _html(`<div${_attr_class(["_gt", !open && "_gs"])} aria-hidden=${open ? "false" : "true"}><input${_attr_input_value($scope0_id, "b", query || "", _resume(function(v) {
1853
1853
  type(v);
1854
- }, "i0", $scope0_id))}${_attr_class(findInput)} type=search enterkeyhint=search autocomplete=off tabindex=${open ? "0" : "-1"} placeholder="Find in review" aria-label="Find in review">${_el_resume($scope0_id, "b")}<span${_attr_class("_ge")}>${open && (query || "").trim() ? hits.length ? `${_escape(`${at + 1}`)}/${_escape(`${hits.length}`)}` : "0/0" : ""}${_el_resume($scope0_id, "d")}</span><button type=button${_attr_class(findIconBtn)} title="Previous match"${_attr("disabled", !hits.length || !open)} tabindex=${open ? "0" : "-1"}>`);
1854
+ }, "i0", $scope0_id))}${_attr_class(findInput)} type=search enterkeyhint=search autocomplete=off tabindex=${open ? "0" : "-1"} placeholder="Find in review" aria-label="Find in review">${_el_resume($scope0_id, "b")}<span${_attr_class("_gw")}>${open && (query || "").trim() ? hits.length ? `${_escape(`${at + 1}`)}/${_escape(`${hits.length}`)}` : "0/0" : ""}${_el_resume($scope0_id, "d")}</span><button type=button${_attr_class(findIconBtn)} title="Previous match"${_attr("disabled", !hits.length || !open)} tabindex=${open ? "0" : "-1"}>`);
1855
1855
  icon_arrow_up_default({ size: 14 });
1856
1856
  _html(`</button>${_el_resume($scope0_id, "e")}<button type=button${_attr_class(findIconBtn)} title="Next match"${_attr("disabled", !hits.length || !open)} tabindex=${open ? "0" : "-1"}>`);
1857
1857
  icon_arrow_down_default({ size: 14 });
@@ -2027,7 +2027,7 @@ var diff_file_default = _template("h", (input) => {
2027
2027
  _scope_reason();
2028
2028
  const $scope0_id = _scope_id();
2029
2029
  _el($scope0_id, "h0");
2030
- _html(`<div${_attr_class(["_h1", input.class])}></div>${_el_resume($scope0_id, "a")}`);
2030
+ _html(`<div${_attr_class(["_h3", input.class])}></div>${_el_resume($scope0_id, "a")}`);
2031
2031
  _script($scope0_id, "h1");
2032
2032
  writeScope($scope0_id, {
2033
2033
  e: input.file,
@@ -2434,7 +2434,7 @@ var review_section_default = _template("v", (input) => {
2434
2434
  });
2435
2435
  _resume_branch($scope0_id);
2436
2436
  });
2437
- var fileFilter = "_h3 _l";
2437
+ var fileFilter = "_h2 _l";
2438
2438
  //#endregion
2439
2439
  //#region src/tags/file-filter.marko
2440
2440
  var file_filter_default = _template("n", (input) => {
@@ -2464,7 +2464,7 @@ var file_filter_default = _template("n", (input) => {
2464
2464
  pending = v;
2465
2465
  box.timer = setTimeout(flush, 150);
2466
2466
  }, "n2", $scope0_id);
2467
- _html(`<div${_attr_class("_h2")}><input${_attr_input_value($scope0_id, "b", draft, _resume(function(v) {
2467
+ _html(`<div${_attr_class("_h1")}><input${_attr_input_value($scope0_id, "b", draft, _resume(function(v) {
2468
2468
  type(v);
2469
2469
  }, "n0", $scope0_id))}${_attr_class(fileFilter)} type=search placeholder="Filter files…" aria-label="Filter files">${_el_resume($scope0_id, "b")}</div>`);
2470
2470
  _script($scope0_id, "n3");
@@ -2497,7 +2497,7 @@ var $content = (input) => {
2497
2497
  _for_of(dir.dirs, (child) => {
2498
2498
  const $scope1_id = _scope_id();
2499
2499
  const shut = input.collapsed.has(input.collapsedKey(child.path));
2500
- _html(`<div${_attr_class("_g3")}><button type=button${_attr_class(["_g4", { ["_gV"]: shut }])}${_attr("title", child.path)}${_attr_style(`--depth:${child.depth}`)}><span${_attr_class("_ha")}>`);
2500
+ _html(`<div${_attr_class("_gN")}><button type=button${_attr_class(["_gO", { ["_gF"]: shut }])}${_attr("title", child.path)}${_attr_style(`--depth:${child.depth}`)}><span${_attr_class("_gV")}>`);
2501
2501
  _if(() => {
2502
2502
  if (shut) {
2503
2503
  const $scope4_id = _scope_id();
@@ -2511,7 +2511,7 @@ var $content = (input) => {
2511
2511
  return 1;
2512
2512
  }
2513
2513
  }, $scope1_id, "c", $sg__input, $sg__input, $sg__input, "</span>", 1);
2514
- _html(`<span${_attr_class("_g5")}>${_escape(child.label)}${_el_resume($scope1_id, "e", $sg__input_dir)}/</span></button>${_el_resume($scope1_id, "b")}`);
2514
+ _html(`<span${_attr_class("_gP")}>${_escape(child.label)}${_el_resume($scope1_id, "e", $sg__input_dir)}/</span></button>${_el_resume($scope1_id, "b")}`);
2515
2515
  _if(() => {
2516
2516
  if (!shut) {
2517
2517
  const $scope2_id = _scope_id();
@@ -2558,11 +2558,11 @@ var $content = (input) => {
2558
2558
  }, "path", $scope0_id, "a", $sg__input, $sg__input_dir, $sg__input_dir, 0, 1);
2559
2559
  _for_of(dir.files, ({ file, name }) => {
2560
2560
  const $scope3_id = _scope_id();
2561
- _html(`<a${_attr("href", input.hrefFor(file.key))}${_attr_class(["_g7", { ["_g6"]: input.collapsedFiles?.has(file.key) }])}${input.collapsedFiles?.has(file.key) ? _attr("title", `${file.path} (folded — click to open)`) : _attr("title", file.path)}${_attr_style(`--depth:${dir.depth + 1}`)}><span${_attr_class("_hb")}${_attr("data-status", file.status)}>${_escape(file.status)}${_el_resume($scope3_id, "c", $sg__input_dir)}</span>${_el_resume($scope3_id, "b", $sg__input_dir)}<span${_attr_class("_g8")}>${_escape(name)}${_el_resume($scope3_id, "e", $sg__input_dir)}</span>`);
2561
+ _html(`<a${_attr("href", input.hrefFor(file.key))}${_attr_class(["_gR", { ["_gQ"]: input.collapsedFiles?.has(file.key) }])}${input.collapsedFiles?.has(file.key) ? _attr("title", `${file.path} (folded — click to open)`) : _attr("title", file.path)}${_attr_style(`--depth:${dir.depth + 1}`)}><span${_attr_class("_gW")}${_attr("data-status", file.status)}>${_escape(file.status)}${_el_resume($scope3_id, "c", $sg__input_dir)}</span>${_el_resume($scope3_id, "b", $sg__input_dir)}<span${_attr_class("_gS")}>${_escape(name)}${_el_resume($scope3_id, "e", $sg__input_dir)}</span>`);
2562
2562
  _if(() => {
2563
2563
  if (input.newKeys.has(file.key)) {
2564
2564
  const $scope6_id = _scope_id();
2565
- _html(`<span${_attr_class(["_y", "_g9"])} title="Changed since your last visit"></span>`);
2565
+ _html(`<span${_attr_class(["_y", "_gT"])} title="Changed since your last visit"></span>`);
2566
2566
  _serialize_if($scope0_reason, 1) && writeScope($scope6_id, {});
2567
2567
  return 0;
2568
2568
  }
@@ -2570,7 +2570,7 @@ var $content = (input) => {
2570
2570
  _if(() => {
2571
2571
  if (input.commentKeys.has(file.key)) {
2572
2572
  const $scope7_id = _scope_id();
2573
- _html(`<span${_attr_class("_g_")}>`);
2573
+ _html(`<span${_attr_class("_gU")}>`);
2574
2574
  icon_comment_default({ size: 12 });
2575
2575
  _html("</span>");
2576
2576
  _serialize_if($scope0_reason, 0) && writeScope($scope7_id, {});
@@ -2628,7 +2628,7 @@ var diff_tree_default = _template("l", (input) => {
2628
2628
  scope: input.scope ?? null,
2629
2629
  file: key
2630
2630
  }), "l0", $scope0_id);
2631
- _html(`<aside${_attr_class(["_gW", { ["_gV"]: input.open === false }])}><div${_attr_class("_gX")}>`);
2631
+ _html(`<aside${_attr_class(["_gG", { ["_gF"]: input.open === false }])}><div${_attr_class("_gH")}>`);
2632
2632
  _set_serialize_reason(2);
2633
2633
  const $childScope = _peek_scope_id();
2634
2634
  file_filter_default({
@@ -2637,18 +2637,18 @@ var diff_tree_default = _template("l", (input) => {
2637
2637
  filter = _new_filter;
2638
2638
  }, "l1", $scope0_id)
2639
2639
  });
2640
- _html(`</div><div${_attr_class("_gY")}>`);
2640
+ _html(`</div><div${_attr_class("_gI")}>`);
2641
2641
  _if(() => {
2642
2642
  if (!input.sections.length && filter) {
2643
2643
  const $scope3_id = _scope_id();
2644
- _html(`<p${_attr_class("_gZ")}>No files match.</p>`);
2644
+ _html(`<p${_attr_class("_gJ")}>No files match.</p>`);
2645
2645
  writeScope($scope3_id, {});
2646
2646
  return 0;
2647
2647
  }
2648
2648
  }, $scope0_id, "e", 1, 1, 1, 0, 1);
2649
2649
  _for_of(input.sections, (section) => {
2650
2650
  const $scope1_id = _scope_id();
2651
- _html(`<div${_attr_class("_g0")}><button type=button${_attr_class(["_g1", { ["_gV"]: collapsedRepos.has(section.id) }])}><span${_attr_class("_ha")}>`);
2651
+ _html(`<div${_attr_class("_gK")}><button type=button${_attr_class(["_gL", { ["_gF"]: collapsedRepos.has(section.id) }])}><span${_attr_class("_gV")}>`);
2652
2652
  _if(() => {
2653
2653
  if (collapsedRepos.has(section.id)) {
2654
2654
  const $scope4_id = _scope_id();
@@ -2662,12 +2662,12 @@ var diff_tree_default = _template("l", (input) => {
2662
2662
  return 1;
2663
2663
  }
2664
2664
  }, $scope1_id, "c", 1, 1, 1, "</span>", 1);
2665
- _html(`<span${_attr_class("_g5")}>${_escape(section.label)}${_el_resume($scope1_id, "e", $sg__input_sections)}</span></button>${_el_resume($scope1_id, "b")}`);
2665
+ _html(`<span${_attr_class("_gP")}>${_escape(section.label)}${_el_resume($scope1_id, "e", $sg__input_sections)}</span></button>${_el_resume($scope1_id, "b")}`);
2666
2666
  _if(() => {
2667
2667
  if (!collapsedRepos.has(section.id) || openedRepos.has(section.id)) {
2668
2668
  const $scope2_id = _scope_id();
2669
2669
  const root = treeDirs(section.files);
2670
- _html(`<div${_attr_class("_g2")}${_attr("hidden", collapsedRepos.has(section.id))}>`);
2670
+ _html(`<div${_attr_class("_gM")}${_attr("hidden", collapsedRepos.has(section.id))}>`);
2671
2671
  _set_serialize_reason(1);
2672
2672
  const $childScope2 = _peek_scope_id();
2673
2673
  diff_tree_dir_default({
@@ -2792,9 +2792,9 @@ var diff_file_sheet_default = _template("g", (input) => {
2792
2792
  _if(() => {
2793
2793
  if (open) {
2794
2794
  const $scope1_id = _scope_id();
2795
- _html(`<div${_attr_class("_he")}></div>${_el_resume($scope1_id, "a")}<div${_attr_class("_hf")} role=dialog aria-label="Jump to file"><div${_attr_class("_hg")}><strong${_attr_class("_hd")}>Files</strong><span${_attr_class("_hh")}>${_escape(input.files.length)}${_el_resume($scope1_id, "f", $sg__input_files_length)}${_sep($sg__input_total__OR__input_files_length)}${input.files.length !== total ? ` / ${_escape(`${total}`)}` : ""}${_el_resume($scope1_id, "g", $sg__input_total__OR__input_files_length)}</span><button type=button${_attr_class([iconBtnLg, "_hc"])} title=Close aria-label=Close>`);
2795
+ _html(`<div${_attr_class("_gc")}></div>${_el_resume($scope1_id, "a")}<div${_attr_class("_gd")} role=dialog aria-label="Jump to file"><div${_attr_class("_ge")}><strong${_attr_class("_gb")}>Files</strong><span${_attr_class("_gf")}>${_escape(input.files.length)}${_el_resume($scope1_id, "f", $sg__input_files_length)}${_sep($sg__input_total__OR__input_files_length)}${input.files.length !== total ? ` / ${_escape(`${total}`)}` : ""}${_el_resume($scope1_id, "g", $sg__input_total__OR__input_files_length)}</span><button type=button${_attr_class([iconBtnLg, "_ga"])} title=Close aria-label=Close>`);
2796
2796
  icon_xmark_default({ size: 16 });
2797
- _html(`</button>${_el_resume($scope1_id, "h")}</div><div${_attr_class("_hp")}>`);
2797
+ _html(`</button>${_el_resume($scope1_id, "h")}</div><div${_attr_class("_gn")}>`);
2798
2798
  _set_serialize_reason(2);
2799
2799
  const $childScope = _peek_scope_id();
2800
2800
  file_filter_default({
@@ -2803,28 +2803,28 @@ var diff_file_sheet_default = _template("g", (input) => {
2803
2803
  filter = _new_filter;
2804
2804
  }, "g1", $scope1_id)
2805
2805
  });
2806
- _html(`</div><div${_attr_class("_hi")}>`);
2806
+ _html(`</div><div${_attr_class("_gg")}>`);
2807
2807
  _for_of(groups, (group) => {
2808
2808
  const $scope2_id = _scope_id();
2809
- _html(`<div${_attr_class("_hj")}><div${_attr_class("_hk")}>${_escape(group.repo)}${_el_resume($scope2_id, "c", $sg__input_files)}</div>`);
2809
+ _html(`<div${_attr_class("_gh")}><div${_attr_class("_gi")}>${_escape(group.repo)}${_el_resume($scope2_id, "c", $sg__input_files)}</div>`);
2810
2810
  _for_of(group.dirs, ({ dir, files }) => {
2811
2811
  const $scope3_id = _scope_id();
2812
- _html(`<div${_attr_class("_hl")}>`);
2812
+ _html(`<div${_attr_class("_gj")}>`);
2813
2813
  _if(() => {
2814
2814
  if (dir) {
2815
2815
  const $scope5_id = _scope_id();
2816
- _html(`<div${_attr_class("_hn")}${_attr("title", dir)}><bdi>${_escape(dir)}${_el_resume($scope5_id, "b", $sg__input_files)}/</bdi></div>${_el_resume($scope5_id, "a", $sg__input_files)}`);
2816
+ _html(`<div${_attr_class("_gl")}${_attr("title", dir)}><bdi>${_escape(dir)}${_el_resume($scope5_id, "b", $sg__input_files)}/</bdi></div>${_el_resume($scope5_id, "a", $sg__input_files)}`);
2817
2817
  $si__input_files && writeScope($scope5_id, { _: _scope_with_id($scope3_id) });
2818
2818
  return 0;
2819
2819
  }
2820
2820
  }, $scope3_id, "b", $sg__input_files, $sg__input_files, $sg__input_files, 0, 1);
2821
2821
  _for_of(files, ({ file, name }) => {
2822
2822
  const $scope4_id = _scope_id();
2823
- _html(`<a${_attr("href", hrefFor(file.key))}${_attr_class(["_hm", "_w"])}><span${_attr_class("_ht")}${_attr("data-status", file.status)}>${_escape(file.status)}${_el_resume($scope4_id, "c", $sg__input_files)}</span>${_el_resume($scope4_id, "b", $sg__input_files)}<span${_attr_class("_ho")}><bdi>${_escape(name)}${_el_resume($scope4_id, "e", $sg__input_files)}</bdi></span>`);
2823
+ _html(`<a${_attr("href", hrefFor(file.key))}${_attr_class(["_gk", "_w"])}><span${_attr_class("_gr")}${_attr("data-status", file.status)}>${_escape(file.status)}${_el_resume($scope4_id, "c", $sg__input_files)}</span>${_el_resume($scope4_id, "b", $sg__input_files)}<span${_attr_class("_gm")}><bdi>${_escape(name)}${_el_resume($scope4_id, "e", $sg__input_files)}</bdi></span>`);
2824
2824
  _if(() => {
2825
2825
  if (newKeys.has(file.key)) {
2826
2826
  const $scope6_id = _scope_id();
2827
- _html(`<span${_attr_class(["_y", "_hr"])} title="Changed since your last visit"></span>`);
2827
+ _html(`<span${_attr_class(["_y", "_gp"])} title="Changed since your last visit"></span>`);
2828
2828
  _serialize_if($scope0_reason, 1) && writeScope($scope6_id, {});
2829
2829
  return 0;
2830
2830
  }
@@ -2834,7 +2834,7 @@ var diff_file_sheet_default = _template("g", (input) => {
2834
2834
  const $scope7_id = _scope_id();
2835
2835
  icon_comment_default({
2836
2836
  size: 12,
2837
- class: "_hs"
2837
+ class: "_gq"
2838
2838
  });
2839
2839
  _serialize_if($scope0_reason, 0) && writeScope($scope7_id, {});
2840
2840
  return 0;
@@ -2859,7 +2859,7 @@ var diff_file_sheet_default = _template("g", (input) => {
2859
2859
  _if(() => {
2860
2860
  if (!input.files.length) {
2861
2861
  const $scope8_id = _scope_id();
2862
- _html(`<p${_attr_class("_hq")}>No files match.</p>`);
2862
+ _html(`<p${_attr_class("_go")}>No files match.</p>`);
2863
2863
  $si__input_files_length && writeScope($scope8_id, {});
2864
2864
  return 0;
2865
2865
  }
@@ -1,5 +1,5 @@
1
- import { U as subscriberCount, V as publish, W as subscriberJoins, dt as all, ft as db, g as sessionStates, l as listSessions } from "./_Cr71Xd0d.js";
2
- import { A as portsByWorkspace, J as hostToken, K as forgetToken, M as headOid, Q as ownsBranch, R as repoParent, V as DEFAULT_HOST, Y as joinRepo, Z as splitRepo, h as listWorkspaces, o as pushFailureFor, q as graphqlUrl, z as swr } from "./_DJyHc1w-.js";
1
+ import { U as subscriberCount, V as publish, W as subscriberJoins, dt as all, ft as db, g as sessionStates, l as listSessions } from "./_DOBRRnfU.js";
2
+ import { A as portsByWorkspace, J as hostToken, K as forgetToken, M as headOid, Q as ownsBranch, R as repoParent, V as DEFAULT_HOST, Y as joinRepo, Z as splitRepo, h as listWorkspaces, o as pushFailureFor, q as graphqlUrl, z as swr } from "./_930ti7l4.js";
3
3
  import path from "node:path";
4
4
  //#region src/server/github-api.ts
5
5
  /** Run a GraphQL query against one host.
@@ -0,0 +1,2 @@
1
+ import { n as muteAutoPush } from "./_930ti7l4.js";
2
+ export { muteAutoPush };
@@ -6556,7 +6556,7 @@ function publishChange(sessionId) {
6556
6556
  const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
6557
6557
  if (row?.workspace_id) {
6558
6558
  const workspaceId = row.workspace_id;
6559
- import("./_B1lVb01g.js").then((m) => m.notifySessionsChanged(workspaceId));
6559
+ import("./_iX5oUHA_.js").then((m) => m.notifySessionsChanged(workspaceId));
6560
6560
  return;
6561
6561
  }
6562
6562
  publish("sessions.changed");
@@ -8194,10 +8194,20 @@ var AGENT_BOOT_MS = 1500;
8194
8194
  var PASTE_SETTLE_MS = 150;
8195
8195
  /** Command for a session kind: the instance's binary (`claude2`,
8196
8196
  * `cursor-agent`), nothing for `shell`; `command.<agent>` in settings still
8197
- * overrides for one-off wrappers. */
8197
+ * overrides for one-off wrappers.
8198
+ *
8199
+ * An override that names nothing on PATH is ignored rather than launched:
8200
+ * restores written before overrides stopped being exported carry the old
8201
+ * machine's wrapper, and honouring it fails every session of that family
8202
+ * with a bare "command not found" in the pane. An override holding args
8203
+ * (`claude --foo`) is checked on its first word only; a relative or absolute
8204
+ * path is left alone, since `which` only answers for PATH lookups. */
8198
8205
  function sessionCommand(agent) {
8199
8206
  const override = getSetting(`command.${agent}`);
8200
- if (override) return override.split(/\s+/);
8207
+ if (override) {
8208
+ const argv = override.split(/\s+/);
8209
+ if (argv[0].includes("/") || which(argv[0])) return argv;
8210
+ }
8201
8211
  const command = agentCommand(agent);
8202
8212
  return command ? [command] : [];
8203
8213
  }
@@ -2320,8 +2320,8 @@ var icon_sidebar_default = _template("jb", (input) => {
2320
2320
  });
2321
2321
  _serialize_if($scope0_reason, 0) && writeScope($scope0_id, { a: _existing_scope($childScope) });
2322
2322
  });
2323
- var findInput = "_gc _l";
2324
- var findIconBtn = "_gf _j";
2323
+ var findInput = "_gu _l";
2324
+ var findIconBtn = "_gx _j";
2325
2325
  //#endregion
2326
2326
  //#region src/tags/icons/icon-arrow-down.marko
2327
2327
  var icon_arrow_down_default = _template("I", (input) => {
@@ -0,0 +1,2 @@
1
+ import { f as notifySessionsChanged } from "./_DOBRRnfU.js";
2
+ export { notifySessionsChanged };