@dylanpiercey/work 0.0.62 → 0.0.64

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 (240) hide show
  1. package/bin/work.mjs +11 -11
  2. package/dist/{_Bku5pAVE.js → _ByG3GBnQ.js} +27 -27
  3. package/dist/_CTJQVrRJ.js +2 -0
  4. package/dist/{_7mK9AY0T.js → _D4h268HL.js} +2 -2
  5. package/dist/{_BejZlkF2.js → _Dp9_KYvx.js} +2 -2
  6. package/dist/index.mjs +131 -131
  7. package/dist/public/assets/{_BjagzzUC.js → _65H_kIjK.js} +1 -1
  8. package/dist/public/assets/_65H_kIjK.js.br +0 -0
  9. package/dist/public/assets/{_DWpVZhhs2.js → _6Myj1hK42.js} +1 -1
  10. package/dist/public/assets/_6Myj1hK42.js.br +0 -0
  11. package/dist/public/assets/{_EgE1aM6k2.js → _6VYAvwvG2.js} +1 -1
  12. package/dist/public/assets/_6VYAvwvG2.js.br +0 -0
  13. package/dist/public/assets/{_C_Lwpyr2.js → _72K44f_h.js} +1 -1
  14. package/dist/public/assets/_72K44f_h.js.br +0 -0
  15. package/dist/public/assets/{_DM9tVZE72.js → _83k-11-P2.js} +1 -1
  16. package/dist/public/assets/_83k-11-P2.js.br +0 -0
  17. package/dist/public/assets/{_DWW1tzOL.js → _B-8Z8oIY.js} +1 -1
  18. package/dist/public/assets/_B-8Z8oIY.js.br +0 -0
  19. package/dist/public/assets/{_CRdIqR3o.js → _B0FsfqEm.js} +1 -1
  20. package/dist/public/assets/_B0FsfqEm.js.br +0 -0
  21. package/dist/public/assets/{_DY8zXUcR.js → _B2jIVPhB.js} +1 -1
  22. package/dist/public/assets/_B2jIVPhB.js.br +0 -0
  23. package/dist/public/assets/{_dqzbkz96.js → _B36I-e1O.js} +1 -1
  24. package/dist/public/assets/_B36I-e1O.js.br +0 -0
  25. package/dist/public/assets/{_jXivZHPc.js → _B4P5vBPb.js} +1 -1
  26. package/dist/public/assets/_B4P5vBPb.js.br +0 -0
  27. package/dist/public/assets/{_CojE1Rih.js → _B675zlkV.js} +1 -1
  28. package/dist/public/assets/_B675zlkV.js.br +0 -0
  29. package/dist/public/assets/{_CtqLNr1H.js → _B9zB94hy.js} +1 -1
  30. package/dist/public/assets/_B9zB94hy.js.br +0 -0
  31. package/dist/public/assets/{_D9D3tNbX.js → _BAr_CSvD.js} +1 -1
  32. package/dist/public/assets/_BAr_CSvD.js.br +0 -0
  33. package/dist/public/assets/{_CX9IsvBg.js → _BB8x4GTA.js} +1 -1
  34. package/dist/public/assets/_BB8x4GTA.js.br +0 -0
  35. package/dist/public/assets/{_Cbo_I8cI.js → _BGLpZn66.js} +1 -1
  36. package/dist/public/assets/_BGLpZn66.js.br +0 -0
  37. package/dist/public/assets/{_CVsuoQ1S.js → _BGv8AOWB.js} +1 -1
  38. package/dist/public/assets/_BGv8AOWB.js.br +0 -0
  39. package/dist/public/assets/{_BzOQxEe-.js → _BLABN4kn.js} +1 -1
  40. package/dist/public/assets/_BLABN4kn.js.br +0 -0
  41. package/dist/public/assets/{_CHDkG0wx.js → _BQwUqJm0.js} +1 -1
  42. package/dist/public/assets/_BQwUqJm0.js.br +0 -0
  43. package/dist/public/assets/{_CtfiRZQm.js → _BUEsgS4s.js} +1 -1
  44. package/dist/public/assets/_BUEsgS4s.js.br +0 -0
  45. package/dist/public/assets/{_Bl99pSfp.js → _BXY6tRzK.js} +1 -1
  46. package/dist/public/assets/_BXY6tRzK.js.br +0 -0
  47. package/dist/public/assets/{_Dc74DSEe.js → _BYylAsTA.js} +1 -1
  48. package/dist/public/assets/{_CLM8BIDc2.js → _Bc8VjeFk2.js} +1 -1
  49. package/dist/public/assets/_Bc8VjeFk2.js.br +0 -0
  50. package/dist/public/assets/{_BmYp0pKL.js → _BiiQtd9c.js} +1 -1
  51. package/dist/public/assets/_BiiQtd9c.js.br +0 -0
  52. package/dist/public/assets/{_Br-E8YAz2.js → _BjGw33mr2.js} +1 -1
  53. package/dist/public/assets/_BjGw33mr2.js.br +0 -0
  54. package/dist/public/assets/{_DaT55_68.js → _BlBM-IPW.js} +1 -1
  55. package/dist/public/assets/_BlBM-IPW.js.br +0 -0
  56. package/dist/public/assets/{_CCyW-1Sn.js → _Bnwodjuf.js} +1 -1
  57. package/dist/public/assets/_Bnwodjuf.js.br +0 -0
  58. package/dist/public/assets/{_D_33ZhIK.js → _ByQr15Ol.js} +1 -1
  59. package/dist/public/assets/_ByQr15Ol.js.br +0 -0
  60. package/dist/public/assets/{_CrK5zb132.js → _C-KRN5dY2.js} +1 -1
  61. package/dist/public/assets/_C-KRN5dY2.js.br +0 -0
  62. package/dist/public/assets/{_hruXV0aM2.js → _C0b7auhW2.js} +1 -1
  63. package/dist/public/assets/_C0b7auhW2.js.br +0 -0
  64. package/dist/public/assets/{_D5J07fN3.js → _C3qyrcO9.js} +7 -7
  65. package/dist/public/assets/_C3qyrcO9.js.br +0 -0
  66. package/dist/public/assets/{_BWytSBjx.js → _C4L-8mN9.js} +1 -1
  67. package/dist/public/assets/_C4L-8mN9.js.br +0 -0
  68. package/dist/public/assets/{_DipM3Zqc.js → _C6OJXRQI.js} +1 -1
  69. package/dist/public/assets/_C6OJXRQI.js.br +0 -0
  70. package/dist/public/assets/{_B0-BDtgM2.js → _C6i1ekF42.js} +1 -1
  71. package/dist/public/assets/_C6i1ekF42.js.br +0 -0
  72. package/dist/public/assets/{_8iazSXl8.js → _CBMt4SVC.js} +1 -1
  73. package/dist/public/assets/_CBMt4SVC.js.br +0 -0
  74. package/dist/public/assets/{_Cpgb4jiw.js → _CDBu-zyP.js} +1 -1
  75. package/dist/public/assets/_CDBu-zyP.js.br +0 -0
  76. package/dist/public/assets/{_8exFiBrt.js → _CELqAUa7.js} +1 -1
  77. package/dist/public/assets/_CELqAUa7.js.br +0 -0
  78. package/dist/public/assets/{_yt9OUojE.js → _CQ5YFSoz.js} +1 -1
  79. package/dist/public/assets/_CQ5YFSoz.js.br +0 -0
  80. package/dist/public/assets/{_Dr72TtQR.js → _CQQncEWM.js} +1 -1
  81. package/dist/public/assets/_CQQncEWM.js.br +0 -0
  82. package/dist/public/assets/{_CInstDdo.js → _CXIiF1dy.js} +1 -1
  83. package/dist/public/assets/_CXIiF1dy.js.br +0 -0
  84. package/dist/public/assets/{_DsQjcbbX2.js → _CaLmf9v_2.js} +1 -1
  85. package/dist/public/assets/_CaLmf9v_2.js.br +0 -0
  86. package/dist/public/assets/{_CflINbuk.js → _CeOxF4LT.js} +1 -1
  87. package/dist/public/assets/_CeOxF4LT.js.br +0 -0
  88. package/dist/public/assets/{_BCeOFTBB.js → _ChYx4fuj.js} +1 -1
  89. package/dist/public/assets/_ChYx4fuj.js.br +0 -0
  90. package/dist/public/assets/{_C5iLuQxE.js → _ClsvLvq9.js} +1 -1
  91. package/dist/public/assets/_ClsvLvq9.js.br +0 -0
  92. package/dist/public/assets/{_Cbxy3waF2.js → _CqhZzk-Q2.js} +1 -1
  93. package/dist/public/assets/_CqhZzk-Q2.js.br +0 -0
  94. package/dist/public/assets/{_CyGDwTMI.js → _Cr7e9j-6.js} +1 -1
  95. package/dist/public/assets/_Cr7e9j-6.js.br +0 -0
  96. package/dist/public/assets/{_txgmYLEK2.js → _CtQra8T02.js} +1 -1
  97. package/dist/public/assets/_CtQra8T02.js.br +0 -0
  98. package/dist/public/assets/{_CcbdxX3j.js → _CyFVU5mI.js} +1 -1
  99. package/dist/public/assets/_CyFVU5mI.js.br +0 -0
  100. package/dist/public/assets/{_IW93tBtf.js → _D8H9ELrD.js} +1 -1
  101. package/dist/public/assets/_D8H9ELrD.js.br +0 -0
  102. package/dist/public/assets/{_CRyXwIGb.js → _D9FzQerH.js} +1 -1
  103. package/dist/public/assets/_D9FzQerH.js.br +0 -0
  104. package/dist/public/assets/{_BgmVSeJ-2.js → _DKF6tfmm2.js} +1 -1
  105. package/dist/public/assets/_DKF6tfmm2.js.br +0 -0
  106. package/dist/public/assets/{_jFQI4vL22.js → _DOJFehKz2.js} +1 -1
  107. package/dist/public/assets/_DOJFehKz2.js.br +0 -0
  108. package/dist/public/assets/{_McDy2LPi2.js → _DX_MU9Ip2.js} +1 -1
  109. package/dist/public/assets/_DX_MU9Ip2.js.br +0 -0
  110. package/dist/public/assets/{_BLwcyRiN2.js → _D_R54hG22.js} +1 -1
  111. package/dist/public/assets/{_0nS-teL3.js → _Dpc4pIai.js} +1 -1
  112. package/dist/public/assets/_Dpc4pIai.js.br +0 -0
  113. package/dist/public/assets/{_BkGvxDxN2.js → _DqAeQk4f2.js} +1 -1
  114. package/dist/public/assets/_DqAeQk4f2.js.br +0 -0
  115. package/dist/public/assets/{_B2-kdJTs2.js → _DtD9G9S42.js} +1 -1
  116. package/dist/public/assets/_DtD9G9S42.js.br +0 -0
  117. package/dist/public/assets/{_C2j7Tws62.js → _DvzUNhWh2.js} +1 -1
  118. package/dist/public/assets/_DvzUNhWh2.js.br +0 -0
  119. package/dist/public/assets/{_DmcXv3A7.js → _Dw8kHrnm.js} +1 -1
  120. package/dist/public/assets/_Dw8kHrnm.js.br +0 -0
  121. package/dist/public/assets/{_vKlXsaGv2.js → _DwCYtjJB2.js} +1 -1
  122. package/dist/public/assets/_DwCYtjJB2.js.br +0 -0
  123. package/dist/public/assets/{_DJ_WfU5M.js → _EoDv3B2A.js} +1 -1
  124. package/dist/public/assets/_EoDv3B2A.js.br +0 -0
  125. package/dist/public/assets/{_Bayn9p2i.js → _Gx1ovPtL.js} +1 -1
  126. package/dist/public/assets/_Gx1ovPtL.js.br +0 -0
  127. package/dist/public/assets/{_BeTcBc4J2.js → _Nmnye_1v2.js} +1 -1
  128. package/dist/public/assets/_Nmnye_1v2.js.br +0 -0
  129. package/dist/public/assets/{_vtp3N3QP.js → _QGeXhMMm.js} +1 -1
  130. package/dist/public/assets/_QGeXhMMm.js.br +0 -0
  131. package/dist/public/assets/{_O5V7T0S-.js → _VnlUe4Rf.js} +1 -1
  132. package/dist/public/assets/_VnlUe4Rf.js.br +0 -0
  133. package/dist/public/assets/{_CyMahfmq.js → _WEEnryDw.js} +1 -1
  134. package/dist/public/assets/_WEEnryDw.js.br +0 -0
  135. package/dist/public/assets/{_B4UdeAxL2.js → _fTU9kouy2.js} +1 -1
  136. package/dist/public/assets/_fTU9kouy2.js.br +0 -0
  137. package/dist/public/assets/{_ByAdeD1X2.js → _fyZQIdGC2.js} +1 -1
  138. package/dist/public/assets/{_DfsjLM7K.js → _hEhKGFAi.js} +1 -1
  139. package/dist/public/assets/_hEhKGFAi.js.br +0 -0
  140. package/dist/public/assets/{_C9MpuLme.js → _p-UGLikC.js} +1 -1
  141. package/dist/public/assets/_p-UGLikC.js.br +0 -0
  142. package/dist/public/assets/{_DZ7anwBF2.js → _pX9ul4kg2.js} +1 -1
  143. package/dist/public/assets/_pX9ul4kg2.js.br +0 -0
  144. package/dist/public/assets/{_CzOaX-Fg2.js → _pjASEu__2.js} +1 -1
  145. package/dist/public/assets/_pjASEu__2.js.br +0 -0
  146. package/dist/public/assets/{_DGUdL3hy.js → _qD4lxfI_.js} +1 -1
  147. package/dist/public/assets/_qD4lxfI_.js.br +0 -0
  148. package/dist/public/assets/{_B8TieFt8.js → _shu_NdEE.js} +1 -1
  149. package/dist/public/assets/_shu_NdEE.js.br +0 -0
  150. package/dist/public/assets/{_CSAeGtT-.js → _xVbSYHC1.js} +1 -1
  151. package/dist/public/assets/_xVbSYHC1.js.br +0 -0
  152. package/dist/public/assets/{_BIeQw4Bf.js → _z4329J00.js} +1 -1
  153. package/dist/public/assets/_z4329J00.js.br +0 -0
  154. package/dist/public/assets/{diff-view-3nxNMkla.css → diff-view-DvND0FJi.css} +1 -1
  155. package/dist/public/assets/diff-view-DvND0FJi.css.br +0 -0
  156. package/dist/public/assets/{index-Crdde1-o.css → index-BAolJTj4.css} +1 -1
  157. package/dist/public/assets/index-BAolJTj4.css.br +0 -0
  158. package/dist/public/assets/{index-CuKPDokr.js → index-CPfPckDD.js} +3 -3
  159. package/dist/public/assets/index-CPfPckDD.js.br +0 -0
  160. package/install.sh +4 -4
  161. package/lib/setup/doctor.mjs +1 -1
  162. package/lib/setup/install.mjs +1 -1
  163. package/package.json +1 -1
  164. package/scripts/migrate.mjs +1 -1
  165. package/dist/_C_Ufy3TH.js +0 -2
  166. package/dist/public/assets/_0nS-teL3.js.br +0 -0
  167. package/dist/public/assets/_8exFiBrt.js.br +0 -0
  168. package/dist/public/assets/_8iazSXl8.js.br +0 -0
  169. package/dist/public/assets/_B0-BDtgM2.js.br +0 -0
  170. package/dist/public/assets/_B2-kdJTs2.js.br +0 -0
  171. package/dist/public/assets/_B4UdeAxL2.js.br +0 -0
  172. package/dist/public/assets/_B8TieFt8.js.br +0 -0
  173. package/dist/public/assets/_BCeOFTBB.js.br +0 -0
  174. package/dist/public/assets/_BIeQw4Bf.js.br +0 -0
  175. package/dist/public/assets/_BWytSBjx.js.br +0 -0
  176. package/dist/public/assets/_Bayn9p2i.js.br +0 -0
  177. package/dist/public/assets/_BeTcBc4J2.js.br +0 -0
  178. package/dist/public/assets/_BgmVSeJ-2.js.br +0 -0
  179. package/dist/public/assets/_BjagzzUC.js.br +0 -0
  180. package/dist/public/assets/_BkGvxDxN2.js.br +0 -0
  181. package/dist/public/assets/_Bl99pSfp.js.br +0 -0
  182. package/dist/public/assets/_BmYp0pKL.js.br +0 -0
  183. package/dist/public/assets/_Br-E8YAz2.js.br +0 -0
  184. package/dist/public/assets/_BzOQxEe-.js.br +0 -0
  185. package/dist/public/assets/_C2j7Tws62.js.br +0 -0
  186. package/dist/public/assets/_C5iLuQxE.js.br +0 -0
  187. package/dist/public/assets/_C9MpuLme.js.br +0 -0
  188. package/dist/public/assets/_CCyW-1Sn.js.br +0 -0
  189. package/dist/public/assets/_CHDkG0wx.js.br +0 -0
  190. package/dist/public/assets/_CInstDdo.js.br +0 -0
  191. package/dist/public/assets/_CLM8BIDc2.js.br +0 -0
  192. package/dist/public/assets/_CRdIqR3o.js.br +0 -0
  193. package/dist/public/assets/_CRyXwIGb.js.br +0 -0
  194. package/dist/public/assets/_CSAeGtT-.js.br +0 -0
  195. package/dist/public/assets/_CVsuoQ1S.js.br +0 -0
  196. package/dist/public/assets/_CX9IsvBg.js.br +0 -0
  197. package/dist/public/assets/_C_Lwpyr2.js.br +0 -0
  198. package/dist/public/assets/_Cbo_I8cI.js.br +0 -0
  199. package/dist/public/assets/_Cbxy3waF2.js.br +0 -0
  200. package/dist/public/assets/_CcbdxX3j.js.br +0 -0
  201. package/dist/public/assets/_CflINbuk.js.br +0 -0
  202. package/dist/public/assets/_CojE1Rih.js.br +0 -0
  203. package/dist/public/assets/_Cpgb4jiw.js.br +0 -0
  204. package/dist/public/assets/_CrK5zb132.js.br +0 -0
  205. package/dist/public/assets/_CtfiRZQm.js.br +0 -0
  206. package/dist/public/assets/_CtqLNr1H.js.br +0 -0
  207. package/dist/public/assets/_CyGDwTMI.js.br +0 -0
  208. package/dist/public/assets/_CyMahfmq.js.br +0 -0
  209. package/dist/public/assets/_CzOaX-Fg2.js.br +0 -0
  210. package/dist/public/assets/_D5J07fN3.js.br +0 -0
  211. package/dist/public/assets/_D9D3tNbX.js.br +0 -0
  212. package/dist/public/assets/_DGUdL3hy.js.br +0 -0
  213. package/dist/public/assets/_DJ_WfU5M.js.br +0 -0
  214. package/dist/public/assets/_DM9tVZE72.js.br +0 -0
  215. package/dist/public/assets/_DWW1tzOL.js.br +0 -0
  216. package/dist/public/assets/_DWpVZhhs2.js.br +0 -0
  217. package/dist/public/assets/_DY8zXUcR.js.br +0 -0
  218. package/dist/public/assets/_DZ7anwBF2.js.br +0 -0
  219. package/dist/public/assets/_D_33ZhIK.js.br +0 -0
  220. package/dist/public/assets/_DaT55_68.js.br +0 -0
  221. package/dist/public/assets/_DfsjLM7K.js.br +0 -0
  222. package/dist/public/assets/_DipM3Zqc.js.br +0 -0
  223. package/dist/public/assets/_DmcXv3A7.js.br +0 -0
  224. package/dist/public/assets/_Dr72TtQR.js.br +0 -0
  225. package/dist/public/assets/_DsQjcbbX2.js.br +0 -0
  226. package/dist/public/assets/_EgE1aM6k2.js.br +0 -0
  227. package/dist/public/assets/_IW93tBtf.js.br +0 -0
  228. package/dist/public/assets/_McDy2LPi2.js.br +0 -0
  229. package/dist/public/assets/_O5V7T0S-.js.br +0 -0
  230. package/dist/public/assets/_dqzbkz96.js.br +0 -0
  231. package/dist/public/assets/_hruXV0aM2.js.br +0 -0
  232. package/dist/public/assets/_jFQI4vL22.js.br +0 -0
  233. package/dist/public/assets/_jXivZHPc.js.br +0 -0
  234. package/dist/public/assets/_txgmYLEK2.js.br +0 -0
  235. package/dist/public/assets/_vKlXsaGv2.js.br +0 -0
  236. package/dist/public/assets/_vtp3N3QP.js.br +0 -0
  237. package/dist/public/assets/_yt9OUojE.js.br +0 -0
  238. package/dist/public/assets/diff-view-3nxNMkla.css.br +0 -0
  239. package/dist/public/assets/index-Crdde1-o.css.br +0 -0
  240. package/dist/public/assets/index-CuKPDokr.js.br +0 -0
package/bin/work.mjs CHANGED
@@ -107,7 +107,7 @@ async function usage() {
107
107
  if (!res.ok) die(`server answered ${res.status} for /api/usage`);
108
108
  data = await res.json();
109
109
  } catch {
110
- die(`no work server on port ${port} start one with: work start`);
110
+ die(`no work server on port ${port}. Start one with: work start`);
111
111
  }
112
112
  if (args.includes("--json")) {
113
113
  console.log(JSON.stringify(data, null, 2));
@@ -149,7 +149,7 @@ async function apiGet(path) {
149
149
  return await res.json();
150
150
  } catch (err) {
151
151
  if (err?.message?.startsWith("server answered")) throw err;
152
- die(`no work server on port ${port} start one with: work start`);
152
+ die(`no work server on port ${port}. Start one with: work start`);
153
153
  }
154
154
  }
155
155
 
@@ -184,7 +184,7 @@ async function resolveWorkspace(arg) {
184
184
  return cwd === root || cwd.startsWith(root + path.sep);
185
185
  });
186
186
  }
187
- if (!ws) die("not inside a workspace pass its name or id (see: work workspaces)");
187
+ if (!ws) die("not inside a workspace. Pass its name or id (see: work workspaces)");
188
188
  return { ws, status: status[ws.id] || { ports: [], repos: [], sessions: [] } };
189
189
  }
190
190
 
@@ -196,7 +196,7 @@ async function workspacesCmd() {
196
196
  const [list, status] = await Promise.all([apiGet("/api/workspaces"), apiGet("/api/status")]);
197
197
  const rows = list.map((w) => ({ ...w, ...(status[w.id] || {}) }));
198
198
  if (jsonOut) return console.log(JSON.stringify(rows, null, 2));
199
- if (!rows.length) return console.log("no workspaces create one in the app");
199
+ if (!rows.length) return console.log("no workspaces. Create one in the app");
200
200
  const wName = Math.max(4, ...rows.map((w) => w.name.length));
201
201
  console.log(`${pad("name", wName)} ${pad("status", 8)} ${pad("branch", 28)} repos agents ports`);
202
202
  for (const w of rows) {
@@ -342,7 +342,7 @@ async function doctorCmd() {
342
342
  async function fix(d) {
343
343
  for (const tool of d.tools.filter((t) => !t.installed)) {
344
344
  if (!tool.installable) {
345
- if (tool.required) die(`${tool.label} not found install it and re-run (the curl installer does this automatically)`);
345
+ if (tool.required) die(`${tool.label} not found. Install it and re-run (the curl installer does this automatically)`);
346
346
  continue;
347
347
  }
348
348
  log(`installing ${tool.label} via mise`);
@@ -357,12 +357,12 @@ async function fix(d) {
357
357
  // wires git credentials); here we only say so. GH_TOKEN still works headless.
358
358
  if (!d.github.some((h) => h.authed)) {
359
359
  if (process.env.GH_TOKEN || process.env.GITHUB_TOKEN) log("gh will use GH_TOKEN from the environment");
360
- else warn("GitHub is not signed in open the app and use Settings → GitHub → Sign in");
360
+ else warn("GitHub is not signed in. Open the app and use Settings → GitHub → Sign in");
361
361
  }
362
362
  // Agent CLIs are installed from the app (Settings → Agents), where each
363
363
  // one is a click and the picker updates immediately — no prompt here.
364
364
  if (!d.agents.some((a) => a.installed)) {
365
- warn("no coding agent CLI found install one from Settings → Agents in the app");
365
+ warn("no coding agent CLI found. Install one from Settings → Agents in the app");
366
366
  }
367
367
  }
368
368
 
@@ -596,7 +596,7 @@ ${envXml}
596
596
  spawnSync("launchctl", ["bootout", `gui/${uid}/dev.work.app`], { stdio: "ignore" });
597
597
  const boot = spawnSync("launchctl", ["bootstrap", `gui/${uid}`, plist], { stdio: "ignore" });
598
598
  if (boot.status !== 0 && spawnSync("launchctl", ["load", "-w", plist], { stdio: "ignore" }).status !== 0) {
599
- warn(`could not load the agent (no GUI launchd session?) run from a local terminal: launchctl bootstrap gui/$UID ${plist}`);
599
+ warn(`could not load the agent (no GUI launchd session?). Run from a local terminal: launchctl bootstrap gui/$UID ${plist}`);
600
600
  warn("or start manually: work start");
601
601
  return false;
602
602
  }
@@ -619,7 +619,7 @@ ${envXml}
619
619
  fs.writeFileSync(
620
620
  unitFile,
621
621
  `[Unit]
622
- Description=work agentic dev workspace GUI
622
+ Description=work, agentic dev workspace GUI
623
623
  # Keep retrying forever: hitting the default start limit parks the unit in
624
624
  # failed state, which is the manual-restart hole we are closing.
625
625
  StartLimitIntervalSec=0
@@ -647,7 +647,7 @@ WantedBy=default.target
647
647
  return true;
648
648
  }
649
649
 
650
- warn("no service manager found start manually with: work start");
650
+ warn("no service manager found. Start manually with: work start");
651
651
  return false;
652
652
  }
653
653
 
@@ -655,7 +655,7 @@ function maybeTunnel(port = appPort) {
655
655
  if (yes || have("cloudflared")) return;
656
656
  console.log(`
657
657
  To reach work from your phone or other devices, put it behind something
658
- that terminates TLS and authenticates e.g. a Cloudflare Tunnel with
658
+ that terminates TLS and authenticates, e.g. a Cloudflare Tunnel with
659
659
  Access (https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/)
660
660
  pointing at http://localhost:${port}, or Tailscale. The server itself has
661
661
  no auth of its own.`);
@@ -1,4 +1,4 @@
1
- import { A as tone, Ct as attrTag, F as _attr_input_value, I as _attr_option_value, J as _el_resume, K as _el, M as _attr, N as _attr_class, P as _attr_details_or_dialog_open, Q as _for_of, R as _attr_select_value, T as iconBtnRow, Tt as writeScope, W as _content_resume, X as _existing_scope, Y as _escape, _t as _subscribe, a as diffUncommitted, at as _resume, ct as _scope_reason, d as icon_search_default, dt as _sep, f as icon_back_default, ft as _serialize_guard, gt as _show_start, ht as _show_end, i as diffTreeOpen, it as _peek_scope_id, l as fuzzy, lt as _scope_with_id, mt as _set_serialize_reason, n as findInput, ot as _resume_branch, p as icon_refresh_default, pt as _serialize_if, q as _el_read_error, r as icon_sidebar_default, rt as _if, st as _scope_id, t as findIconBtn, tt as _html, ut as _script, v as toast_default, vt as _template, w as iconBtnLg, y as repoLabel, z as _attr_style } from "./_7mK9AY0T.js";
1
+ import { A as tone, Ct as attrTag, F as _attr_input_value, I as _attr_option_value, J as _el_resume, K as _el, M as _attr, N as _attr_class, P as _attr_details_or_dialog_open, Q as _for_of, R as _attr_select_value, T as iconBtnRow, Tt as writeScope, W as _content_resume, X as _existing_scope, Y as _escape, _t as _subscribe, a as diffUncommitted, at as _resume, ct as _scope_reason, d as icon_search_default, dt as _sep, f as icon_back_default, ft as _serialize_guard, gt as _show_start, ht as _show_end, i as diffTreeOpen, it as _peek_scope_id, l as fuzzy, lt as _scope_with_id, mt as _set_serialize_reason, n as findInput, ot as _resume_branch, p as icon_refresh_default, pt as _serialize_if, q as _el_read_error, r as icon_sidebar_default, rt as _if, st as _scope_id, t as findIconBtn, tt as _html, ut as _script, v as toast_default, vt as _template, w as iconBtnLg, y as repoLabel, z as _attr_style } from "./_D4h268HL.js";
2
2
  //#region src/client/clipboard.ts
3
3
  /** Copy text to the clipboard. `navigator.clipboard` needs a secure
4
4
  * context — absent over plain-http LAN origins — so fall back to a hidden
@@ -173,7 +173,7 @@ function repoHeader(worktree, repo) {
173
173
  const head = shortSha(repo.head);
174
174
  const base = shortSha(repo.baseSha);
175
175
  const branch = repo.pr?.headRefName || repo.branch || "HEAD";
176
- return `${worktree}/${repo.pr ? ` #${repo.pr.number}` : ""} \`${branch}\` ${head} vs \`${repo.base}\` ${base}`;
176
+ return `${worktree}/${repo.pr ? ` #${repo.pr.number}` : ""}: \`${branch}\` ${head} vs \`${repo.base}\` ${base}`;
177
177
  }
178
178
  function shortSha(sha, n = 12) {
179
179
  return sha.slice(0, n);
@@ -263,7 +263,7 @@ function treeRows(files) {
263
263
  var treeToggle = "_d_ _U _d";
264
264
  var repoWorktree = "_eC _r";
265
265
  var repoTitle = "_eE _q";
266
- var fileFilter = "_fy _f";
266
+ var fileFilter = "_ff _f";
267
267
  //#endregion
268
268
  //#region src/tags/file-filter.marko
269
269
  var file_filter_default = _template("j", (input) => {
@@ -293,7 +293,7 @@ var file_filter_default = _template("j", (input) => {
293
293
  pending = v;
294
294
  box.timer = setTimeout(flush, 150);
295
295
  }, "j2", $scope0_id);
296
- _html(`<div${_attr_class("_fx")}><input${_attr_input_value($scope0_id, "b", draft, _resume(function(v) {
296
+ _html(`<div${_attr_class("_fe")}><input${_attr_input_value($scope0_id, "b", draft, _resume(function(v) {
297
297
  type(v);
298
298
  }, "j0", $scope0_id))}${_attr_class(fileFilter)} type=search placeholder="Filter files…" aria-label="Filter files">${_el_resume($scope0_id, "b")}</div>`);
299
299
  _script($scope0_id, "j3");
@@ -319,7 +319,7 @@ var diff_send_default = _template("g", (input) => {
319
319
  let sendTarget = null;
320
320
  const sessions = input.sessions || [];
321
321
  const sendPick = sessions.some((s) => s.id === sendTarget) ? sendTarget : sessions[0]?.id ?? null;
322
- _html(`<span${_attr_class("_ft")}><button type=button${_attr_class("_i")} title="Copy comments as markdown">Copy${_el_resume($scope0_id, "c")}</button>${_el_resume($scope0_id, "b")}`);
322
+ _html(`<span${_attr_class("_fa")}><button type=button${_attr_class("_i")} title="Copy comments as markdown">Copy${_el_resume($scope0_id, "c")}</button>${_el_resume($scope0_id, "b")}`);
323
323
  _if(() => {
324
324
  if (sessions.length === 1) {
325
325
  const $scope1_id = _scope_id();
@@ -329,11 +329,11 @@ var diff_send_default = _template("g", (input) => {
329
329
  return 0;
330
330
  } else if (sessions.length) {
331
331
  const $scope2_id = _scope_id();
332
- _html(`<span${_attr_class("_fu")}><button type=button${_attr_class(["_j", "_fv"])}${_attr("disabled", sending)}>Send to${_el_resume($scope2_id, "c")}</button>${_el_resume($scope2_id, "b")}`);
332
+ _html(`<span${_attr_class("_fb")}><button type=button${_attr_class(["_j", "_fc"])}${_attr("disabled", sending)}>Send to${_el_resume($scope2_id, "c")}</button>${_el_resume($scope2_id, "b")}`);
333
333
  _attr_select_value($scope2_id, "d", sendTarget, _resume((_new_sendTarget) => {
334
334
  sendTarget = _new_sendTarget;
335
335
  }, "g0", $scope2_id), () => {
336
- _html(`<select${_attr_class("_fw")} aria-label="Send comments to session"${_attr("disabled", sending)}>`);
336
+ _html(`<select${_attr_class("_fd")} aria-label="Send comments to session"${_attr("disabled", sending)}>`);
337
337
  _for_of(sessions, (s) => {
338
338
  const $scope3_id = _scope_id();
339
339
  _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)}`);
@@ -1869,9 +1869,9 @@ var diff_find_default = _template("f", (input) => {
1869
1869
  el.select();
1870
1870
  }, 0);
1871
1871
  }, "f5", $scope0_id);
1872
- _html(`<div${_attr_class(["_fK", !open && "_fJ"])} aria-hidden=${open ? "false" : "true"}><input${_attr_input_value($scope0_id, "b", query || "", _resume(function(v) {
1872
+ _html(`<div${_attr_class(["_fh", !open && "_fg"])} aria-hidden=${open ? "false" : "true"}><input${_attr_input_value($scope0_id, "b", query || "", _resume(function(v) {
1873
1873
  type(v);
1874
- }, "f0", $scope0_id))}${_attr_class(findInput)} type=search enterkeyhint=search autocomplete=off tabindex=${open ? "0" : "-1"} placeholder="Find in diffs" aria-label="Find in diffs">${_el_resume($scope0_id, "b")}<span${_attr_class("_fN")}>${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"}>↑</button>${_el_resume($scope0_id, "e")}<button type=button${_attr_class(findIconBtn)} title="Next match"${_attr("disabled", !hits.length || !open)} tabindex=${open ? "0" : "-1"}>↓</button>${_el_resume($scope0_id, "f")}<button type=button${_attr_class(findIconBtn)} title="Close find" tabindex=${open ? "0" : "-1"}>×</button>${_el_resume($scope0_id, "g")}</div>${_el_resume($scope0_id, "a")}`);
1874
+ }, "f0", $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("_fk")}>${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"}>↑</button>${_el_resume($scope0_id, "e")}<button type=button${_attr_class(findIconBtn)} title="Next match"${_attr("disabled", !hits.length || !open)} tabindex=${open ? "0" : "-1"}>↓</button>${_el_resume($scope0_id, "f")}<button type=button${_attr_class(findIconBtn)} title="Close find" tabindex=${open ? "0" : "-1"}>×</button>${_el_resume($scope0_id, "g")}</div>${_el_resume($scope0_id, "a")}`);
1875
1875
  _script($scope0_id, "f6");
1876
1876
  _script($scope0_id, "f7");
1877
1877
  _script($scope0_id, "f8");
@@ -1908,7 +1908,7 @@ var diff_file_default = _template("e", (input) => {
1908
1908
  _scope_reason();
1909
1909
  const $scope0_id = _scope_id();
1910
1910
  _el($scope0_id, "e0");
1911
- _html(`<div${_attr_class(["_fs", input.class])}></div>${_el_resume($scope0_id, "a")}`);
1911
+ _html(`<div${_attr_class(["_e_", input.class])}></div>${_el_resume($scope0_id, "a")}`);
1912
1912
  _script($scope0_id, "e1");
1913
1913
  writeScope($scope0_id, {
1914
1914
  e: input.file,
@@ -1937,10 +1937,10 @@ var diff_tree_default = _template("h", (input) => {
1937
1937
  let openedRepos = input.openedRepos;
1938
1938
  let collapsedDirs = /* @__PURE__ */ new Set();
1939
1939
  const commentKeys = input.commentKeys || /* @__PURE__ */ new Set();
1940
- _html(`<aside${_attr_class(["_fA", { ["_fz"]: input.open === false }])}>`);
1940
+ _html(`<aside${_attr_class(["_fw", { ["_fv"]: input.open === false }])}>`);
1941
1941
  _for_of(input.sections, (section) => {
1942
1942
  const $scope1_id = _scope_id();
1943
- _html(`<div${_attr_class("_fB")}><button type=button${_attr_class(["_fC", { ["_fz"]: collapsedRepos.has(section.id) }])}><span${_attr_class("_fH")}>${collapsedRepos.has(section.id) ? "▸" : "▾"}${_el_resume($scope1_id, "d")}</span>${_sep($sg__input_sections)}${_escape(section.label)}${_el_resume($scope1_id, "e", $sg__input_sections)}</button>${_el_resume($scope1_id, "b")}`);
1943
+ _html(`<div${_attr_class("_fx")}><button type=button${_attr_class(["_fy", { ["_fv"]: collapsedRepos.has(section.id) }])}><span${_attr_class("_fD")}>${collapsedRepos.has(section.id) ? "▸" : "▾"}${_el_resume($scope1_id, "d")}</span>${_sep($sg__input_sections)}${_escape(section.label)}${_el_resume($scope1_id, "e", $sg__input_sections)}</button>${_el_resume($scope1_id, "b")}`);
1944
1944
  _if(() => {
1945
1945
  if (!collapsedRepos.has(section.id) || openedRepos.has(section.id)) {
1946
1946
  const $scope2_id = _scope_id();
@@ -1967,17 +1967,17 @@ var diff_tree_default = _template("h", (input) => {
1967
1967
  _if(() => {
1968
1968
  if (!hiddenByCollapse(row) && row.kind === "dir") {
1969
1969
  const $scope5_id = _scope_id();
1970
- _html(`<button type=button${_attr_class(["_fD", { ["_fz"]: collapsedDirs.has(dirKey(row.path)) }])}${_attr("title", row.path)}${_attr_style(`padding-left:${.35 + row.depth * .75}rem`)}><span${_attr_class("_fH")}>${collapsedDirs.has(dirKey(row.path)) ? "▸" : "▾"}${_el_resume($scope5_id, "c")}</span>${_escape(row.label)}${_el_resume($scope5_id, "d", $sg__input_sections)}/</button>${_el_resume($scope5_id, "a")}`);
1970
+ _html(`<button type=button${_attr_class(["_fz", { ["_fv"]: collapsedDirs.has(dirKey(row.path)) }])}${_attr("title", row.path)}${_attr_style(`padding-left:${.35 + row.depth * .75}rem`)}><span${_attr_class("_fD")}>${collapsedDirs.has(dirKey(row.path)) ? "▸" : "▾"}${_el_resume($scope5_id, "c")}</span>${_escape(row.label)}${_el_resume($scope5_id, "d", $sg__input_sections)}/</button>${_el_resume($scope5_id, "a")}`);
1971
1971
  _script($scope5_id, "h3");
1972
1972
  _subscribe($si__input_sections && $if_content__dirKey__closures, _subscribe($collapsedDirs__closures, writeScope($scope5_id, { Cv: 1 })));
1973
1973
  return 0;
1974
1974
  } else if (!hiddenByCollapse(row) && row.kind !== "dir") {
1975
1975
  const $scope4_id = _scope_id();
1976
- _html(`<button type=button${_attr_class("_fE")}${_attr("title", row.file.path)}${_attr_style(`padding-left:${.5 + row.depth * .75}rem`)}><span${_attr_class("_fI")}${_attr("data-status", row.file.status)}>${_escape(row.file.status)}${_el_resume($scope4_id, "c", $sg__input_sections)}</span>${_el_resume($scope4_id, "b", $sg__input_sections)}<span${_attr_class("_fF")}>${_escape(row.name)}${_el_resume($scope4_id, "e", $sg__input_sections)}</span>`);
1976
+ _html(`<button type=button${_attr_class("_fA")}${_attr("title", row.file.path)}${_attr_style(`padding-left:${.5 + row.depth * .75}rem`)}><span${_attr_class("_fE")}${_attr("data-status", row.file.status)}>${_escape(row.file.status)}${_el_resume($scope4_id, "c", $sg__input_sections)}</span>${_el_resume($scope4_id, "b", $sg__input_sections)}<span${_attr_class("_fB")}>${_escape(row.name)}${_el_resume($scope4_id, "e", $sg__input_sections)}</span>`);
1977
1977
  _if(() => {
1978
1978
  if (commentKeys.has(row.file.key)) {
1979
1979
  const $scope6_id = _scope_id();
1980
- _html(`<span${_attr_class("_fG")}>💬</span>`);
1980
+ _html(`<span${_attr_class("_fC")}>💬</span>`);
1981
1981
  _serialize_if($scope0_reason, 0) && writeScope($scope6_id, {});
1982
1982
  return 0;
1983
1983
  }
@@ -2048,10 +2048,10 @@ var diff_file_sheet_default = _template("d", (input) => {
2048
2048
  _if(() => {
2049
2049
  if (open) {
2050
2050
  const $scope1_id = _scope_id();
2051
- _html(`<div${_attr_class("_fY")}></div>${_el_resume($scope1_id, "a")}<div${_attr_class("_fZ")} role=dialog aria-label="Jump to file"><div${_attr_class("_f0")}><strong${_attr_class("_fX")}>Files</strong><span${_attr_class("_f1")}>${_escape(input.files.length)}${_el_resume($scope1_id, "f", _serialize_guard($scope0_reason, 6))}${_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, "_fW"])} title=Close aria-label=Close>×</button>${_el_resume($scope1_id, "h")}</div><div${_attr_class("_f2")}>`);
2051
+ _html(`<div${_attr_class("_e2")}></div>${_el_resume($scope1_id, "a")}<div${_attr_class("_e3")} role=dialog aria-label="Jump to file"><div${_attr_class("_e4")}><strong${_attr_class("_e1")}>Files</strong><span${_attr_class("_e5")}>${_escape(input.files.length)}${_el_resume($scope1_id, "f", _serialize_guard($scope0_reason, 6))}${_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, "_e0"])} title=Close aria-label=Close>×</button>${_el_resume($scope1_id, "h")}</div><div${_attr_class("_e6")}>`);
2052
2052
  _for_of(input.files, (file) => {
2053
2053
  const $scope2_id = _scope_id();
2054
- _html(`<button type=button${_attr_class(["_f3", "_r"])}><span${_attr_class("_f5")}${_attr("data-status", file.status)}>${_escape(file.status)}${_el_resume($scope2_id, "c", $sg__input_files)}</span>${_el_resume($scope2_id, "b", $sg__input_files)}<span${_attr_class("_f4")}${_attr("title", file.key)}><bdi>${_escape(file.key)}${_el_resume($scope2_id, "e", $sg__input_files)}</bdi></span>${_el_resume($scope2_id, "d", $sg__input_files)}`);
2054
+ _html(`<button type=button${_attr_class(["_e7", "_r"])}><span${_attr_class("_e9")}${_attr("data-status", file.status)}>${_escape(file.status)}${_el_resume($scope2_id, "c", $sg__input_files)}</span>${_el_resume($scope2_id, "b", $sg__input_files)}<span${_attr_class("_e8")}${_attr("title", file.key)}><bdi>${_escape(file.key)}${_el_resume($scope2_id, "e", $sg__input_files)}</bdi></span>${_el_resume($scope2_id, "d", $sg__input_files)}`);
2055
2055
  _if(() => {
2056
2056
  if (commentKeys.has(file.key)) {
2057
2057
  const $scope3_id = _scope_id();
@@ -2346,7 +2346,7 @@ var diff_view_default = _template("i", (input) => {
2346
2346
  }, "i12", $scope0_id);
2347
2347
  const copyMarkdown = _resume(async () => {
2348
2348
  if (!await copyText(commentMarkdown(comments, repos))) {
2349
- error = "Copy failed clipboard needs HTTPS on this browser.";
2349
+ error = "Copy failed: the clipboard needs HTTPS in this browser.";
2350
2350
  return false;
2351
2351
  }
2352
2352
  await clearComments();
@@ -2516,10 +2516,10 @@ var diff_view_default = _template("i", (input) => {
2516
2516
  size: 14,
2517
2517
  class: loading && "_y"
2518
2518
  });
2519
- _html(`</button>${_el_resume($scope0_id, "q")}<button${_attr_class(["_i", "_eV"])} title="Jump to file">Files (<!>${_escape(shownFiles.length)}${_el_resume($scope0_id, "t")})</button>${_el_resume($scope0_id, "s")}<div${_attr_class("_ev")} role=group aria-label="Review scope"><button type=button${_attr_class(["_ex", { ["_ew"]: !uncommitted }])} aria-pressed=${!uncommitted ? "true" : "false"} title="Committed changes only base…tip, no working-tree edits"${_attr("disabled", loading)}>Committed</button>${_el_resume($scope0_id, "v")}<button type=button${_attr_class(["_ex", { ["_ew"]: uncommitted }])} aria-pressed=${uncommitted ? "true" : "false"} title="Include uncommitted and untracked files in the working tree"${_attr("disabled", loading)}>Working tree</button>${_el_resume($scope0_id, "w")}</div><button type=button${_attr_class(["_ey", {
2519
+ _html(`</button>${_el_resume($scope0_id, "q")}<button${_attr_class(["_i", "_eV"])} title="Jump to file">Files (<!>${_escape(shownFiles.length)}${_el_resume($scope0_id, "t")})</button>${_el_resume($scope0_id, "s")}<div${_attr_class("_ev")} role=group aria-label="Review scope"><button type=button${_attr_class(["_ex", { ["_ew"]: !uncommitted }])} aria-pressed=${!uncommitted ? "true" : "false"} title="Committed changes only (base…tip, no working-tree edits)"${_attr("disabled", loading)}>Committed</button>${_el_resume($scope0_id, "v")}<button type=button${_attr_class(["_ex", { ["_ew"]: uncommitted }])} aria-pressed=${uncommitted ? "true" : "false"} title="Include uncommitted and untracked files in the working tree"${_attr("disabled", loading)}>Working tree</button>${_el_resume($scope0_id, "w")}</div><button type=button${_attr_class(["_ey", {
2520
2520
  ["_ew"]: uncommitted,
2521
2521
  ["_Y"]: uncommitted
2522
- }])} aria-pressed=${uncommitted ? "true" : "false"} title=${uncommitted ? "\"Working tree (incl. uncommitted) tap for committed only\"" : "\"Committed only tap to include the working tree\""}${_attr("disabled", loading)}>${uncommitted ? "Working tree" : "Committed"}${_el_resume($scope0_id, "y")}</button>${_el_resume($scope0_id, "x")}<div${_attr_class(["_ej", { ["_ei"]: !findOpen }])}>`);
2522
+ }])} aria-pressed=${uncommitted ? "true" : "false"} title=${uncommitted ? "\"Working tree, including uncommitted. Switch to committed only\"" : "\"Committed only. Switch to the working tree\""}${_attr("disabled", loading)}>${uncommitted ? "Working tree" : "Committed"}${_el_resume($scope0_id, "y")}</button>${_el_resume($scope0_id, "x")}<div${_attr_class(["_ej", { ["_ei"]: !findOpen }])}>`);
2523
2523
  _set_serialize_reason(2);
2524
2524
  const $childScope4 = _peek_scope_id();
2525
2525
  diff_find_default({
@@ -2538,7 +2538,7 @@ var diff_view_default = _template("i", (input) => {
2538
2538
  iconBtnRow,
2539
2539
  "_eh",
2540
2540
  "_d9"
2541
- ])} title="Find in the review (⌘/Ctrl+F)" aria-label="Find in the review"${_attr("hidden", findOpen)}>`);
2541
+ ])} title="Find in review (⌘/Ctrl+F)" aria-label="Find in review"${_attr("hidden", findOpen)}>`);
2542
2542
  icon_search_default({ size: 14 });
2543
2543
  _html(`</button>${_el_resume($scope0_id, "a1")}</div></div>${_el_resume($scope0_id, "c")}<div${_attr_class("_em")} data-diff-main>`);
2544
2544
  _if(() => {
@@ -2580,7 +2580,7 @@ var diff_view_default = _template("i", (input) => {
2580
2580
  content: _content_resume("i38", () => {
2581
2581
  _scope_reason();
2582
2582
  const $scope20_id = _scope_id();
2583
- _html(`${_escape(repo.base)}${_el_resume($scope20_id, "a")}<!>${uncommitted ? " showing uncommitted changes only" : ""}${_el_resume($scope20_id, "b")}.`);
2583
+ _html(`${_escape(repo.base)}${_el_resume($scope20_id, "a")}<!>${uncommitted ? ", showing uncommitted changes only" : ""}${_el_resume($scope20_id, "b")}.`);
2584
2584
  _subscribe($for_content3__repo_base__closures, _subscribe($uncommitted__closures, writeScope($scope20_id, { _: _scope_with_id($scope19_id) })));
2585
2585
  _resume_branch($scope20_id);
2586
2586
  }, $scope19_id)
@@ -2603,7 +2603,7 @@ var diff_view_default = _template("i", (input) => {
2603
2603
  content: _content_resume("i39", () => {
2604
2604
  _scope_reason();
2605
2605
  const $scope22_id = _scope_id();
2606
- _html(`already in <!>${_escape(repo.base)}${_el_resume($scope22_id, "a")}<!>${uncommitted ? " showing uncommitted changes only" : ""}${_el_resume($scope22_id, "b")}.`);
2606
+ _html(`already in <!>${_escape(repo.base)}${_el_resume($scope22_id, "a")}<!>${uncommitted ? ", showing uncommitted changes only" : ""}${_el_resume($scope22_id, "b")}.`);
2607
2607
  _subscribe($for_content4__repo_base__closures, _subscribe($uncommitted__closures, writeScope($scope22_id, {
2608
2608
  _: _scope_with_id($scope21_id),
2609
2609
  Cdv: 1
@@ -2646,7 +2646,7 @@ var diff_view_default = _template("i", (input) => {
2646
2646
  _html(`${i > 0 ? " · " : ""}${_el_resume($scope31_id, "a")}<!>${_escape(repo.worktree)}${_el_resume($scope31_id, "b")} #<!>${_escape(repo.pr.number)}${_el_resume($scope31_id, "c")}`);
2647
2647
  writeScope($scope31_id, {});
2648
2648
  }, "id", $scope28_id, "b");
2649
- _html(` this view has a newer tip than the PR page.</span><span${_attr_class(["_r", "_en"])}>`);
2649
+ _html(` : this view has a newer tip than the PR page.</span><span${_attr_class(["_r", "_en"])}>`);
2650
2650
  _for_of(driftRepos, (repo, i) => {
2651
2651
  const $scope32_id = _scope_id();
2652
2652
  _html(`<span${_attr("title", `origin/${repo.pr.headRefName} ${repo.head} · GitHub ${repo.pr.headRefOid}`)}>${i > 0 ? " · " : ""}${_el_resume($scope32_id, "b")}<!>${_escape(shortSha(repo.head))}${_el_resume($scope32_id, "c")} → <!>${_escape(shortSha(repo.pr.headRefOid))}${_el_resume($scope32_id, "d")}</span>${_el_resume($scope32_id, "a")}`);
@@ -2703,7 +2703,7 @@ var diff_view_default = _template("i", (input) => {
2703
2703
  return 0;
2704
2704
  } else if (repos && !shownFiles.length && !findState.hit) {
2705
2705
  const $scope18_id = _scope_id();
2706
- _html(`<p${_attr_class("_bA")}>${findState.query.trim() ? "No matches in diffs." : `No files match "${_escape(`${fileFilter}`)}".`}${_el_resume($scope18_id, "b")}</p>`);
2706
+ _html(`<p${_attr_class("_bA")}>${findState.query.trim() ? "No matches in review." : `No files match "${_escape(`${fileFilter}`)}".`}${_el_resume($scope18_id, "b")}</p>`);
2707
2707
  writeScope($scope18_id, {});
2708
2708
  return 1;
2709
2709
  }
@@ -2746,7 +2746,7 @@ var diff_view_default = _template("i", (input) => {
2746
2746
  _if(() => {
2747
2747
  if (repo.pr) {
2748
2748
  const $scope33_id = _scope_id();
2749
- _html(`<a${_attr_class(["_m", "_o"])}${_attr("href", `${repo.pr.url}/files`)} target=_blank rel=noopener${_attr("title", `${repo.pr.title} ${repo.pr.headRefName} ${repo.head} vs ${repo.base} ${repo.baseSha}`)}>#<!>${_escape(repo.pr.number)}${_el_resume($scope33_id, "b")}</a>${_el_resume($scope33_id, "a")}<span${_attr_class(repoTitle)}>${_escape(repo.pr.title)}${_el_resume($scope33_id, "d")}</span>`);
2749
+ _html(`<a${_attr_class(["_m", "_o"])}${_attr("href", `${repo.pr.url}/files`)} target=_blank rel=noopener${_attr("title", `${repo.pr.title}: ${repo.pr.headRefName} ${repo.head} vs ${repo.base} ${repo.baseSha}`)}>#<!>${_escape(repo.pr.number)}${_el_resume($scope33_id, "b")}</a>${_el_resume($scope33_id, "a")}<span${_attr_class(repoTitle)}>${_escape(repo.pr.title)}${_el_resume($scope33_id, "d")}</span>`);
2750
2750
  _script($scope33_id, "i44");
2751
2751
  _subscribe($for_content__repo_baseSha__closures, _subscribe($for_content__repo_base__closures, _subscribe($for_content__repo_head__closures, _subscribe($for_content__repo_pr_headRefName__closures, _subscribe($for_content__repo_pr_title__closures, _subscribe($for_content__repo_pr_url__closures, _subscribe($for_content__repo_pr_number__closures, writeScope($scope33_id, {
2752
2752
  Ca4: 2,
@@ -2804,7 +2804,7 @@ var diff_view_default = _template("i", (input) => {
2804
2804
  _if(() => {
2805
2805
  if (repo.pr) {
2806
2806
  const $scope35_id = _scope_id();
2807
- _html(`<a${_attr_class(["_m", "_o"])}${_attr("href", `${repo.pr.url}/files`)} target=_blank rel=noopener${_attr("title", `${repo.pr.title} ${repo.pr.headRefName} ${repo.head} vs ${repo.base} ${repo.baseSha}`)}>#<!>${_escape(repo.pr.number)}${_el_resume($scope35_id, "b")}</a>${_el_resume($scope35_id, "a")}<span${_attr_class("_q")}>${_escape(repo.pr.title)}${_el_resume($scope35_id, "d")}</span>`);
2807
+ _html(`<a${_attr_class(["_m", "_o"])}${_attr("href", `${repo.pr.url}/files`)} target=_blank rel=noopener${_attr("title", `${repo.pr.title}: ${repo.pr.headRefName} ${repo.head} vs ${repo.base} ${repo.baseSha}`)}>#<!>${_escape(repo.pr.number)}${_el_resume($scope35_id, "b")}</a>${_el_resume($scope35_id, "a")}<span${_attr_class("_q")}>${_escape(repo.pr.title)}${_el_resume($scope35_id, "d")}</span>`);
2808
2808
  _subscribe($for_content__repo_baseSha__closures, _subscribe($for_content__repo_base__closures, _subscribe($for_content__repo_head__closures, _subscribe($for_content__repo_pr_headRefName__closures, _subscribe($for_content__repo_pr_title__closures, _subscribe($for_content__repo_pr_url__closures, _subscribe($for_content__repo_pr_number__closures, writeScope($scope35_id, {
2809
2809
  Ca1: 1,
2810
2810
  Ca2: 1,
@@ -0,0 +1,2 @@
1
+ import { f as notifySessionsChanged } from "./_Dp9_KYvx.js";
2
+ export { notifySessionsChanged };
@@ -2286,7 +2286,7 @@ var icon_sidebar_default = _template("S", (input) => {
2286
2286
  });
2287
2287
  _serialize_if($scope0_reason, 0) && writeScope($scope0_id, { a: _existing_scope($childScope) });
2288
2288
  });
2289
- var findInput = "_fL _f";
2290
- var findIconBtn = "_fO _d";
2289
+ var findInput = "_fi _f";
2290
+ var findIconBtn = "_fl _d";
2291
2291
  //#endregion
2292
2292
  export { _hoist as $, tone as A, _attrs as B, btnSm as C, attrTag as Ct, inputLg as D, iconBtnXs as E, _attr_input_value as F, _dynamic_tag as G, _await as H, _attr_option_value as I, _el_resume as J, _el as K, _attr_or as L, _attr as M, _attr_class as N, metaTrunc as O, _attr_details_or_dialog_open as P, _for_of as Q, _attr_select_value as R, btnLg as S, _var as St, iconBtnRow as T, writeScope as Tt, _content as U, _attrs_partial as V, _content_resume as W, _existing_scope as X, _escape as Y, _flush_head as Z, sectionCount as _, _subscribe as _t, diffUncommitted as a, _resume as at, repoWebUrl as b, _trailers as bt, workspaceTab as c, _scope_reason as ct, icon_search_default as d, _sep as dt, _hoist_read_error as et, icon_back_default as f, _serialize_guard as ft, row as g, _show_start as gt, iconBtn as h, _show_end as ht, diffTreeOpen as i, _peek_scope_id as it, $global as j, phase as k, fuzzy as l, _scope_with_id as lt, icon_base_default as m, _set_serialize_reason as mt, findInput as n, _id as nt, setWorkspaceTab as o, _resume_branch as ot, icon_refresh_default as p, _serialize_if as pt, _el_read_error as q, icon_sidebar_default as r, _if as rt, sideNavOpen as s, _scope_id as st, findIconBtn as t, _html as tt, rankRepos as u, _script as ut, toast_default as v, _template as vt, iconBtnLg as w, withPageAssets as wt, setPrimaryHost as x, _try as xt, repoLabel as y, _to_text as yt, _attr_style as z };
@@ -6395,7 +6395,7 @@ async function notify(sessionId, reason) {
6395
6395
  const label = reason === "done" ? "✔ Finished" : "⚠ Needs attention";
6396
6396
  sendPush({
6397
6397
  title: `${row.name} · ${row.title || row.agent}`,
6398
- body: summary ? `${label} ${summary}` : `${label}`,
6398
+ body: summary ? `${label}: ${summary}` : `${label}`,
6399
6399
  tag: `session-${sessionId}`,
6400
6400
  badge: waiting,
6401
6401
  data: {
@@ -6434,7 +6434,7 @@ function publishChange(sessionId) {
6434
6434
  const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
6435
6435
  if (row?.workspace_id) {
6436
6436
  const workspaceId = row.workspace_id;
6437
- import("./_C_Ufy3TH.js").then((m) => m.notifySessionsChanged(workspaceId));
6437
+ import("./_CTJQVrRJ.js").then((m) => m.notifySessionsChanged(workspaceId));
6438
6438
  return;
6439
6439
  }
6440
6440
  publish("sessions.changed");