@dylanpiercey/work 0.0.121 → 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/{_DnaZVHJ7.js → _AItLA3Th.js} +29 -29
  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/{_CivNK9fo.js → _Dxspyv-X.js} +4 -4
  9. package/dist/_iX5oUHA_.js +2 -0
  10. package/dist/index.mjs +195 -190
  11. package/dist/public/assets/{_QMVFINxi.js → _1C01L6H8.js} +1 -1
  12. package/dist/public/assets/_1C01L6H8.js.br +0 -0
  13. package/dist/public/assets/{_B_dMglA92.js → _1KTQ10Sa2.js} +1 -1
  14. package/dist/public/assets/_1KTQ10Sa2.js.br +0 -0
  15. package/dist/public/assets/{_DgDEdxEu.js → _9ugZ8sFU.js} +1 -1
  16. package/dist/public/assets/_9ugZ8sFU.js.br +0 -0
  17. package/dist/public/assets/{_J6xlcydH2.js → _B2oquPMV2.js} +1 -1
  18. package/dist/public/assets/_B2oquPMV2.js.br +0 -0
  19. package/dist/public/assets/{_XCJLLGxV.js → _B3u522i6.js} +1 -1
  20. package/dist/public/assets/_B3u522i6.js.br +0 -0
  21. package/dist/public/assets/{_CJHqzl--2.js → _B79q4Iep2.js} +1 -1
  22. package/dist/public/assets/_B79q4Iep2.js.br +0 -0
  23. package/dist/public/assets/{_BlLuOKRT.js → _B7yMQpNb.js} +1 -1
  24. package/dist/public/assets/_B7yMQpNb.js.br +0 -0
  25. package/dist/public/assets/{_B9e51G1K.js → _B8-2v5ah.js} +1 -1
  26. package/dist/public/assets/_B8-2v5ah.js.br +0 -0
  27. package/dist/public/assets/{_YmJopjX92.js → _B9J4D40T2.js} +1 -1
  28. package/dist/public/assets/_B9J4D40T2.js.br +0 -0
  29. package/dist/public/assets/{_B0dZ7_qK.js → _BBdXq0au.js} +1 -1
  30. package/dist/public/assets/_BBdXq0au.js.br +0 -0
  31. package/dist/public/assets/{_BjIMoOV-2.js → _BFXVaaZZ2.js} +1 -1
  32. package/dist/public/assets/_BFXVaaZZ2.js.br +0 -0
  33. package/dist/public/assets/{_sSWgnHeU.js → _BIniTggd.js} +1 -1
  34. package/dist/public/assets/_BIniTggd.js.br +5 -0
  35. package/dist/public/assets/{_D7cQLLGK2.js → _BLKYt0dH2.js} +1 -1
  36. package/dist/public/assets/_BLKYt0dH2.js.br +0 -0
  37. package/dist/public/assets/{_BZWlvMSJ.js → _BNQK17cx.js} +1 -1
  38. package/dist/public/assets/_BNQK17cx.js.br +0 -0
  39. package/dist/public/assets/{_DBoABI85.js → _BPacLsJZ.js} +1 -1
  40. package/dist/public/assets/_BPacLsJZ.js.br +0 -0
  41. package/dist/public/assets/{_BsNKabYu2.js → _BQvL7p-H2.js} +1 -1
  42. package/dist/public/assets/_BQvL7p-H2.js.br +0 -0
  43. package/dist/public/assets/{_BH015W2i2.js → _BTyLW7g22.js} +1 -1
  44. package/dist/public/assets/_BTyLW7g22.js.br +0 -0
  45. package/dist/public/assets/{_CUOao_Hj.js → _BV3wnaUQ.js} +1 -1
  46. package/dist/public/assets/_BV3wnaUQ.js.br +0 -0
  47. package/dist/public/assets/{_DXHf4WHs2.js → _BW0vrnJ02.js} +1 -1
  48. package/dist/public/assets/_BW0vrnJ02.js.br +0 -0
  49. package/dist/public/assets/{_CPX0D-my.js → _B_zXuzSk.js} +1 -1
  50. package/dist/public/assets/_B_zXuzSk.js.br +0 -0
  51. package/dist/public/assets/{_Ds0Qa0YX.js → _BeTQOqQK.js} +1 -1
  52. package/dist/public/assets/_BeTQOqQK.js.br +0 -0
  53. package/dist/public/assets/{_DyUvL09k2.js → _Bf-zNqvW2.js} +1 -1
  54. package/dist/public/assets/_Bf-zNqvW2.js.br +0 -0
  55. package/dist/public/assets/{_BUOWar32.js → _Bh10nSHk.js} +1 -1
  56. package/dist/public/assets/_Bh10nSHk.js.br +0 -0
  57. package/dist/public/assets/{_9dJ8BnyZ2.js → _Bhx2xsqn2.js} +1 -1
  58. package/dist/public/assets/_Bhx2xsqn2.js.br +0 -0
  59. package/dist/public/assets/{_CFBaZNUT.js → _BozRJAkt.js} +1 -1
  60. package/dist/public/assets/_BozRJAkt.js.br +0 -0
  61. package/dist/public/assets/{_CCNhM32c2.js → _Bp422VRU2.js} +1 -1
  62. package/dist/public/assets/_Bp422VRU2.js.br +0 -0
  63. package/dist/public/assets/{_CxrcWZPE.js → _Buph4MaC.js} +1 -1
  64. package/dist/public/assets/_Buph4MaC.js.br +0 -0
  65. package/dist/public/assets/{_B8ZQ8inF.js → _BvsESXeS.js} +1 -1
  66. package/dist/public/assets/_BvsESXeS.js.br +0 -0
  67. package/dist/public/assets/{_YetFhXkM.js → _BwWPg2fR.js} +1 -1
  68. package/dist/public/assets/_BwWPg2fR.js.br +0 -0
  69. package/dist/public/assets/{_BR3D4nzj2.js → _C0ILV08N2.js} +1 -1
  70. package/dist/public/assets/_C0ILV08N2.js.br +0 -0
  71. package/dist/public/assets/{_0L2K8sFq2.js → _C3-LfntB2.js} +1 -1
  72. package/dist/public/assets/_C3-LfntB2.js.br +0 -0
  73. package/dist/public/assets/{_CdtuhZSc.js → _C3WvBCQb.js} +1 -1
  74. package/dist/public/assets/_C3WvBCQb.js.br +0 -0
  75. package/dist/public/assets/{_DNcd1xtp.js → _C6G2Teqe.js} +1 -1
  76. package/dist/public/assets/_C6G2Teqe.js.br +0 -0
  77. package/dist/public/assets/{_Y-bTh0dW.js → _C9ik2q2w.js} +1 -1
  78. package/dist/public/assets/_C9ik2q2w.js.br +0 -0
  79. package/dist/public/assets/{_CBUJNdeq2.js → _C9pGaByT2.js} +1 -1
  80. package/dist/public/assets/_C9pGaByT2.js.br +0 -0
  81. package/dist/public/assets/{_DqLib98x.js → _CAVwrN0f.js} +1 -1
  82. package/dist/public/assets/_CAVwrN0f.js.br +0 -0
  83. package/dist/public/assets/{_-zdUyUYM2.js → _CBd4k6AZ2.js} +1 -1
  84. package/dist/public/assets/_CBd4k6AZ2.js.br +0 -0
  85. package/dist/public/assets/{_CMGgQ-4H2.js → _CJMg3VoD2.js} +1 -1
  86. package/dist/public/assets/_CJMg3VoD2.js.br +0 -0
  87. package/dist/public/assets/{_CvA5IOAW2.js → _CKapyBeI2.js} +1 -1
  88. package/dist/public/assets/_CKapyBeI2.js.br +0 -0
  89. package/dist/public/assets/{_Beb6Lb1w.js → _COt541Xf.js} +1 -1
  90. package/dist/public/assets/_COt541Xf.js.br +0 -0
  91. package/dist/public/assets/{_BNIilCsC.js → _CRLl3VEd.js} +1 -1
  92. package/dist/public/assets/_CRLl3VEd.js.br +0 -0
  93. package/dist/public/assets/{_CZfap_Dj.js → _CTbIxoLY.js} +1 -1
  94. package/dist/public/assets/_CTbIxoLY.js.br +0 -0
  95. package/dist/public/assets/{_B5nrQZIq2.js → _CYK6bapW2.js} +1 -1
  96. package/dist/public/assets/_CYK6bapW2.js.br +0 -0
  97. package/dist/public/assets/{_BHjcfVXB.js → _CZ1guNTV.js} +6 -6
  98. package/dist/public/assets/_CZ1guNTV.js.br +0 -0
  99. package/dist/public/assets/{_CwZYmUdt2.js → _C_6NOEKJ2.js} +1 -1
  100. package/dist/public/assets/{_mbzaOqik.js → _CdjreNlJ.js} +1 -1
  101. package/dist/public/assets/_CdjreNlJ.js.br +0 -0
  102. package/dist/public/assets/{_S9QQtt68.js → _Cf5Zrdti.js} +1 -1
  103. package/dist/public/assets/_Cf5Zrdti.js.br +0 -0
  104. package/dist/public/assets/{_CUVw5V4z.js → _CfJLLMWV.js} +1 -1
  105. package/dist/public/assets/_CfJLLMWV.js.br +0 -0
  106. package/dist/public/assets/{_DSIH6_Li.js → _CzvfWhEh.js} +1 -1
  107. package/dist/public/assets/_CzvfWhEh.js.br +0 -0
  108. package/dist/public/assets/{_D4u4SpiK.js → _D1A7jI1p.js} +1 -1
  109. package/dist/public/assets/_D1A7jI1p.js.br +0 -0
  110. package/dist/public/assets/{_CbNmSe5k.js → _D9nKEBYM.js} +1 -1
  111. package/dist/public/assets/_D9nKEBYM.js.br +0 -0
  112. package/dist/public/assets/{_BSWpz0dK.js → _DAv1qyFD.js} +1 -1
  113. package/dist/public/assets/_DAv1qyFD.js.br +0 -0
  114. package/dist/public/assets/{_C0OXw3Vy.js → _DG27SXxk.js} +1 -1
  115. package/dist/public/assets/_DG27SXxk.js.br +0 -0
  116. package/dist/public/assets/{_42jdam49.js → _DI5lrPqF.js} +1 -1
  117. package/dist/public/assets/_DI5lrPqF.js.br +0 -0
  118. package/dist/public/assets/{_rRtbbfKJ2.js → _DNc251EH2.js} +1 -1
  119. package/dist/public/assets/_DNc251EH2.js.br +0 -0
  120. package/dist/public/assets/{_D6CjH3JN.js → _D_abiz6o.js} +1 -1
  121. package/dist/public/assets/_D_abiz6o.js.br +0 -0
  122. package/dist/public/assets/{_DcMfCkmd.js → _DbqqEUGU.js} +1 -1
  123. package/dist/public/assets/_DbqqEUGU.js.br +0 -0
  124. package/dist/public/assets/{_CYMGOhCb.js → _DfVlmKjB.js} +1 -1
  125. package/dist/public/assets/_DfVlmKjB.js.br +0 -0
  126. package/dist/public/assets/{_CRuHDn_O2.js → _DiXam-cI2.js} +1 -1
  127. package/dist/public/assets/_DiXam-cI2.js.br +0 -0
  128. package/dist/public/assets/{_B1VuWiKK.js → _DjPFzYrA.js} +1 -1
  129. package/dist/public/assets/_DjPFzYrA.js.br +0 -0
  130. package/dist/public/assets/{_DQGTProt.js → _DlLV3Ljr.js} +1 -1
  131. package/dist/public/assets/_DlLV3Ljr.js.br +0 -0
  132. package/dist/public/assets/{_BlXwius8.js → _DlUUGQZG.js} +1 -1
  133. package/dist/public/assets/_DlUUGQZG.js.br +0 -0
  134. package/dist/public/assets/{_D-KjGTSW.js → _DnFHO_Dn.js} +5 -5
  135. package/dist/public/assets/_DnFHO_Dn.js.br +0 -0
  136. package/dist/public/assets/{_MInulccf2.js → _Dyi2Gxao2.js} +1 -1
  137. package/dist/public/assets/{_xOeYy_3v.js → _E9rgzIvo.js} +1 -1
  138. package/dist/public/assets/_E9rgzIvo.js.br +0 -0
  139. package/dist/public/assets/{_Bmt76eWT.js → _ReVTweDC.js} +1 -1
  140. package/dist/public/assets/_ReVTweDC.js.br +0 -0
  141. package/dist/public/assets/{_BPgL37mi2.js → _TnqcMVKx2.js} +1 -1
  142. package/dist/public/assets/_TnqcMVKx2.js.br +0 -0
  143. package/dist/public/assets/{_D_qDhyn2.js → _Upul3Ofo.js} +1 -1
  144. package/dist/public/assets/_Upul3Ofo.js.br +0 -0
  145. package/dist/public/assets/{_B03G1Nvs.js → _ZrGaJYJ6.js} +1 -1
  146. package/dist/public/assets/_ZrGaJYJ6.js.br +0 -0
  147. package/dist/public/assets/{_rMcfapaa.js → _jH6dnn_a.js} +1 -1
  148. package/dist/public/assets/_jH6dnn_a.js.br +0 -0
  149. package/dist/public/assets/{_Y8TOk1pR.js → _k9hFY1PH.js} +1 -1
  150. package/dist/public/assets/_k9hFY1PH.js.br +0 -0
  151. package/dist/public/assets/{_ClhApln3.js → _ssYg2Lbg.js} +1 -1
  152. package/dist/public/assets/_ssYg2Lbg.js.br +0 -0
  153. package/dist/public/assets/{_BRSJwfZ3.js → _stxqF0YI.js} +1 -1
  154. package/dist/public/assets/{_BoS5LU5l.js → _uwlWIup9.js} +1 -1
  155. package/dist/public/assets/_uwlWIup9.js.br +0 -0
  156. package/dist/public/assets/{_BSFENb4l.js → _wD1I5kuG.js} +1 -1
  157. package/dist/public/assets/_wD1I5kuG.js.br +0 -0
  158. package/dist/public/assets/{_DlhDim1D.js → _x-8ESFAf.js} +1 -1
  159. package/dist/public/assets/_x-8ESFAf.js.br +0 -0
  160. package/dist/public/assets/{app-page-BWf0w6W9.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-BZaYYEDK.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/_-zdUyUYM2.js.br +0 -0
  174. package/dist/public/assets/_0L2K8sFq2.js.br +0 -0
  175. package/dist/public/assets/_42jdam49.js.br +0 -0
  176. package/dist/public/assets/_9dJ8BnyZ2.js.br +0 -0
  177. package/dist/public/assets/_B03G1Nvs.js.br +0 -0
  178. package/dist/public/assets/_B0dZ7_qK.js.br +0 -0
  179. package/dist/public/assets/_B1VuWiKK.js.br +0 -0
  180. package/dist/public/assets/_B5nrQZIq2.js.br +0 -0
  181. package/dist/public/assets/_B8ZQ8inF.js.br +0 -0
  182. package/dist/public/assets/_B9e51G1K.js.br +0 -0
  183. package/dist/public/assets/_BH015W2i2.js.br +0 -0
  184. package/dist/public/assets/_BHjcfVXB.js.br +0 -0
  185. package/dist/public/assets/_BNIilCsC.js.br +0 -0
  186. package/dist/public/assets/_BPgL37mi2.js.br +0 -0
  187. package/dist/public/assets/_BR3D4nzj2.js.br +0 -0
  188. package/dist/public/assets/_BSFENb4l.js.br +0 -0
  189. package/dist/public/assets/_BSWpz0dK.js.br +0 -0
  190. package/dist/public/assets/_BUOWar32.js.br +0 -0
  191. package/dist/public/assets/_BZWlvMSJ.js.br +0 -0
  192. package/dist/public/assets/_B_dMglA92.js.br +0 -0
  193. package/dist/public/assets/_Beb6Lb1w.js.br +0 -0
  194. package/dist/public/assets/_BjIMoOV-2.js.br +0 -0
  195. package/dist/public/assets/_BlLuOKRT.js.br +0 -0
  196. package/dist/public/assets/_BlXwius8.js.br +0 -0
  197. package/dist/public/assets/_Bmt76eWT.js.br +0 -0
  198. package/dist/public/assets/_BoS5LU5l.js.br +0 -0
  199. package/dist/public/assets/_BsNKabYu2.js.br +0 -0
  200. package/dist/public/assets/_C0OXw3Vy.js.br +0 -0
  201. package/dist/public/assets/_CBUJNdeq2.js.br +0 -0
  202. package/dist/public/assets/_CCNhM32c2.js.br +0 -0
  203. package/dist/public/assets/_CFBaZNUT.js.br +0 -0
  204. package/dist/public/assets/_CJHqzl--2.js.br +0 -0
  205. package/dist/public/assets/_CMGgQ-4H2.js.br +0 -0
  206. package/dist/public/assets/_CPX0D-my.js.br +0 -0
  207. package/dist/public/assets/_CRuHDn_O2.js.br +0 -0
  208. package/dist/public/assets/_CUOao_Hj.js.br +0 -0
  209. package/dist/public/assets/_CUVw5V4z.js.br +0 -0
  210. package/dist/public/assets/_CYMGOhCb.js.br +0 -0
  211. package/dist/public/assets/_CZfap_Dj.js.br +0 -0
  212. package/dist/public/assets/_CbNmSe5k.js.br +0 -0
  213. package/dist/public/assets/_CdtuhZSc.js.br +0 -0
  214. package/dist/public/assets/_ClhApln3.js.br +0 -0
  215. package/dist/public/assets/_CvA5IOAW2.js.br +0 -0
  216. package/dist/public/assets/_CxrcWZPE.js.br +0 -0
  217. package/dist/public/assets/_D-KjGTSW.js.br +0 -0
  218. package/dist/public/assets/_D4u4SpiK.js.br +0 -0
  219. package/dist/public/assets/_D6CjH3JN.js.br +0 -0
  220. package/dist/public/assets/_D7cQLLGK2.js.br +0 -0
  221. package/dist/public/assets/_DBoABI85.js.br +0 -0
  222. package/dist/public/assets/_DNcd1xtp.js.br +0 -0
  223. package/dist/public/assets/_DQGTProt.js.br +0 -0
  224. package/dist/public/assets/_DSIH6_Li.js.br +0 -0
  225. package/dist/public/assets/_DXHf4WHs2.js.br +0 -0
  226. package/dist/public/assets/_D_qDhyn2.js.br +0 -0
  227. package/dist/public/assets/_DcMfCkmd.js.br +0 -0
  228. package/dist/public/assets/_DgDEdxEu.js.br +0 -0
  229. package/dist/public/assets/_DlhDim1D.js.br +0 -0
  230. package/dist/public/assets/_DqLib98x.js.br +0 -0
  231. package/dist/public/assets/_Ds0Qa0YX.js.br +0 -0
  232. package/dist/public/assets/_DyUvL09k2.js.br +0 -0
  233. package/dist/public/assets/_J6xlcydH2.js.br +0 -0
  234. package/dist/public/assets/_QMVFINxi.js.br +0 -0
  235. package/dist/public/assets/_S9QQtt68.js.br +0 -0
  236. package/dist/public/assets/_XCJLLGxV.js.br +0 -0
  237. package/dist/public/assets/_Y-bTh0dW.js.br +0 -0
  238. package/dist/public/assets/_Y8TOk1pR.js.br +0 -0
  239. package/dist/public/assets/_YetFhXkM.js.br +0 -0
  240. package/dist/public/assets/_YmJopjX92.js.br +0 -0
  241. package/dist/public/assets/_mbzaOqik.js.br +0 -0
  242. package/dist/public/assets/_rMcfapaa.js.br +0 -0
  243. package/dist/public/assets/_rRtbbfKJ2.js.br +0 -0
  244. package/dist/public/assets/_sSWgnHeU.js.br +0 -0
  245. package/dist/public/assets/_xOeYy_3v.js.br +0 -0
  246. package/dist/public/assets/app-page-BWf0w6W9.css.br +0 -0
  247. package/dist/public/assets/diff-view-BZaYYEDK.css.br +0 -0
  248. package/dist/public/assets/new-K-7z0qE8.js +0 -1
  249. package/dist/public/assets/settings-K-7z0qE8.js +0 -1
  250. package/dist/public/assets/w-K-7z0qE8.js +0 -1
  251. package/dist/public/assets/w._-D5d4klUv.js +0 -1
  252. package/dist/public/assets/w._-K-7z0qE8.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 "./_CivNK9fo.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";
@@ -253,7 +253,7 @@ var diff_send_default = _template("j", (input) => {
253
253
  let sendTarget = null;
254
254
  const sessions = input.sessions || [];
255
255
  const sendPick = sessions.some((s) => s.id === sendTarget) ? sendTarget : sessions[0]?.id ?? null;
256
- _html(`<span${_attr_class("_gR")}><button type=button${_attr_class("_o")} title="Copy comments as markdown">Copy${_el_resume($scope0_id, "c")}</button>${_el_resume($scope0_id, "b")}`);
256
+ _html(`<span${_attr_class("_f7")}><button type=button${_attr_class("_o")} title="Copy comments as markdown">Copy${_el_resume($scope0_id, "c")}</button>${_el_resume($scope0_id, "b")}`);
257
257
  _if(() => {
258
258
  if (sessions.length === 1) {
259
259
  const $scope1_id = _scope_id();
@@ -263,11 +263,11 @@ var diff_send_default = _template("j", (input) => {
263
263
  return 0;
264
264
  } else if (sessions.length) {
265
265
  const $scope2_id = _scope_id();
266
- _html(`<span${_attr_class("_gS")}><button type=button${_attr_class(["_p", "_gT"])}${_attr("disabled", sending)}>Send to${_el_resume($scope2_id, "c")}</button>${_el_resume($scope2_id, "b")}`);
266
+ _html(`<span${_attr_class("_f8")}><button type=button${_attr_class(["_p", "_f9"])}${_attr("disabled", sending)}>Send to${_el_resume($scope2_id, "c")}</button>${_el_resume($scope2_id, "b")}`);
267
267
  _attr_select_value($scope2_id, "d", sendTarget, _resume((_new_sendTarget) => {
268
268
  sendTarget = _new_sendTarget;
269
269
  }, "j0", $scope2_id), () => {
270
- _html(`<select${_attr_class("_gU")} aria-label="Send comments to session"${_attr("disabled", sending)}>`);
270
+ _html(`<select${_attr_class("_f_")} aria-label="Send comments to session"${_attr("disabled", sending)}>`);
271
271
  _for_of(sessions, (s) => {
272
272
  const $scope3_id = _scope_id();
273
273
  _html(`<option${_attr_option_value(s.id)}>${_escape(s.title || s.agent)}${_el_resume($scope3_id, "b", $sg__input_sessions)}</option>${_el_resume($scope3_id, "a", $sg__input_sessions)}`);
@@ -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(["_f8", !open && "_f7"])} 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("_ga")}>${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 });
@@ -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
  }
@@ -3559,12 +3559,12 @@ var diff_view_default = _template("m", (input) => {
3559
3559
  _if(() => {
3560
3560
  if (repos && !allFiles.length) {
3561
3561
  const $scope11_id = _scope_id();
3562
- _html(`<p${_attr_class("_bA")}>${repoList.some((r) => r.unborn) ? "No commits yet." : scope$1 === "dirty" ? "Nothing uncommitted." : repoList.some((r) => r.pr) ? "No file changes on these PRs." : "No changes vs base."}${_el_resume($scope11_id, "b")}</p>`);
3562
+ _html(`<p${_attr_class("_bJ")}>${repoList.some((r) => r.unborn) ? "No commits yet." : scope$1 === "dirty" ? "Nothing uncommitted." : repoList.some((r) => r.pr) ? "No file changes on these PRs." : "No changes vs base."}${_el_resume($scope11_id, "b")}</p>`);
3563
3563
  writeScope($scope11_id, {});
3564
3564
  return 0;
3565
3565
  } else if (repos && !shownFiles.length && !findState.hit) {
3566
3566
  const $scope8_id = _scope_id();
3567
- _html(`<p${_attr_class("_bA")}>${findState.query.trim() ? "No matches in review." : onlyNew && !fileFilter ? "Nothing changed since your last visit." : `No files match "${_escape(`${fileFilter}`)}".`}${_el_resume($scope8_id, "b")}</p>`);
3567
+ _html(`<p${_attr_class("_bJ")}>${findState.query.trim() ? "No matches in review." : onlyNew && !fileFilter ? "Nothing changed since your last visit." : `No files match "${_escape(`${fileFilter}`)}".`}${_el_resume($scope8_id, "b")}</p>`);
3568
3568
  writeScope($scope8_id, {});
3569
3569
  return 1;
3570
3570
  }
@@ -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
  }
@@ -2173,8 +2173,8 @@ function theme() {
2173
2173
  function setTheme(mode) {
2174
2174
  set("theme", mode === "system" ? null : mode);
2175
2175
  }
2176
- var sectionCount = "_bq _H _I";
2177
- var row = "_bB _bt";
2176
+ var sectionCount = "_bz _H _I";
2177
+ var row = "_bK _bC";
2178
2178
  var iconBtn = "_Z _j";
2179
2179
  //#endregion
2180
2180
  //#region src/tags/icons/icon-refresh.marko
@@ -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 = "_f9 _l";
2324
- var findIconBtn = "_gb _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 };