@dylanpiercey/work 0.2.41 → 0.2.43

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 (506) hide show
  1. package/bin/cli/stack.mjs +33 -19
  2. package/bin/cli/topic.mjs +1 -1
  3. package/bin/work.mjs +199 -47
  4. package/dist/_BKkT73fv.js +2 -0
  5. package/dist/_BviTiVOB.js +2 -0
  6. package/dist/{_DuADlWik.js → _Cv5RrCSW.js} +3 -72
  7. package/dist/{_DgY5Gc2z.js → _DN2yXOe-.js} +113 -113
  8. package/dist/{_D4k_lVuT.js → _DuwPQCOE.js} +1 -1
  9. package/dist/index.mjs +1123 -1073
  10. package/dist/public/assets/_4jzUxBl1.js +1 -0
  11. package/dist/public/assets/_6Gfbsj34.js +1 -0
  12. package/dist/public/assets/{_CGYOyAi6.js → _7NOeJZ7O.js} +1 -1
  13. package/dist/public/assets/_7NOeJZ7O.js.br +0 -0
  14. package/dist/public/assets/{_f7Sgp2jB.js → _8fMkhL-V.js} +1 -1
  15. package/dist/public/assets/_8fMkhL-V.js.br +0 -0
  16. package/dist/public/assets/_ACxWQrF_.js +1 -0
  17. package/dist/public/assets/{_CvTM_Hkg.js → _AUDK9Grt.js} +1 -1
  18. package/dist/public/assets/_AUDK9Grt.js.br +0 -0
  19. package/dist/public/assets/{_C4i6tdPg.js → _B0mwj6Ev.js} +1 -1
  20. package/dist/public/assets/_B0mwj6Ev.js.br +0 -0
  21. package/dist/public/assets/{_Bud8PVk2.js → _B0pMH4yO.js} +1 -1
  22. package/dist/public/assets/_B0pMH4yO.js.br +0 -0
  23. package/dist/public/assets/_B1G63IYo.js +1 -0
  24. package/dist/public/assets/_B1qkzWnd.js +1 -0
  25. package/dist/public/assets/_B56RiWbN.js +1 -0
  26. package/dist/public/assets/_B6ZXN5aU.js +1 -0
  27. package/dist/public/assets/_B6_r9iYg.js +1 -0
  28. package/dist/public/assets/{_BLzCI5fA.js → _B73Eh-N_.js} +1 -1
  29. package/dist/public/assets/_B73Eh-N_.js.br +0 -0
  30. package/dist/public/assets/{_CBmZFyev.js → _B8-o-AZv.js} +1 -1
  31. package/dist/public/assets/_B92ZvzMb.js +1595 -0
  32. package/dist/public/assets/_B92ZvzMb.js.br +0 -0
  33. package/dist/public/assets/_B9iGefG4.js +1 -0
  34. package/dist/public/assets/_BAb8sJtB.js +1 -0
  35. package/dist/public/assets/{_DOGQJlMz.js → _BCXa70Fh.js} +1 -1
  36. package/dist/public/assets/_BCXa70Fh.js.br +0 -0
  37. package/dist/public/assets/_BEw6aufk.js +1 -0
  38. package/dist/public/assets/{_2X4Nxaqb.js → _BKI2XK6i.js} +1 -1
  39. package/dist/public/assets/_BKI2XK6i.js.br +0 -0
  40. package/dist/public/assets/_BL6T7K5F.js +1 -0
  41. package/dist/public/assets/{_Yl99Ym1s.js → _BLtle8N9.js} +1 -1
  42. package/dist/public/assets/_BLtle8N9.js.br +0 -0
  43. package/dist/public/assets/_BMhAJhx_.js +1 -0
  44. package/dist/public/assets/_BNC-BdhL.js +1 -0
  45. package/dist/public/assets/{_wlPMGofh.js → _BOw__Q2y.js} +1 -1
  46. package/dist/public/assets/_BOw__Q2y.js.br +0 -0
  47. package/dist/public/assets/{_DDwZqDeP.js → _BPHYSdej.js} +1 -1
  48. package/dist/public/assets/_BPHYSdej.js.br +0 -0
  49. package/dist/public/assets/{_BFR8p6md.js → _BPbGGRrT.js} +1 -1
  50. package/dist/public/assets/_BPbGGRrT.js.br +0 -0
  51. package/dist/public/assets/_BQ0Wpc1b.js +1 -0
  52. package/dist/public/assets/{_C4TOoJt-.js → _BQjfwReN.js} +1 -1
  53. package/dist/public/assets/_BQjfwReN.js.br +0 -0
  54. package/dist/public/assets/_BSOQpNL6.js +1 -0
  55. package/dist/public/assets/_BU076YIw.js +1 -0
  56. package/dist/public/assets/{_Goz4NHSk.js → _BUHolEsT.js} +1 -1
  57. package/dist/public/assets/_BUHolEsT.js.br +0 -0
  58. package/dist/public/assets/_BW0CTcZj.js +1 -0
  59. package/dist/public/assets/_BWaDSzqN.js +1 -0
  60. package/dist/public/assets/_BXFUBIN4.js +1 -0
  61. package/dist/public/assets/_BaZLe1km.js +1 -0
  62. package/dist/public/assets/{_B7kCpNyD.js → _BcEm_iyy.js} +1 -1
  63. package/dist/public/assets/_BcEm_iyy.js.br +0 -0
  64. package/dist/public/assets/_BdTFZA5g.js +1 -0
  65. package/dist/public/assets/{_DyPWIZeU.js → _BgpmFeeP.js} +1 -1
  66. package/dist/public/assets/_BgpmFeeP.js.br +0 -0
  67. package/dist/public/assets/_BhtG3O1x.js +2 -0
  68. package/dist/public/assets/_BhtG3O1x.js.br +0 -0
  69. package/dist/public/assets/_BiYkTvg2.js +1 -0
  70. package/dist/public/assets/_BjTD5VbW.js +1 -0
  71. package/dist/public/assets/_Bl1FCUd6.js +1 -0
  72. package/dist/public/assets/_BtuZvkEt.js +1 -0
  73. package/dist/public/assets/{_Dw-MQsnH.js → _Buv7nRCW.js} +1 -1
  74. package/dist/public/assets/_Buv7nRCW.js.br +0 -0
  75. package/dist/public/assets/_Buv99kaT.js +1 -0
  76. package/dist/public/assets/_ByfZnU2c.js +1 -0
  77. package/dist/public/assets/_C-fnxBxJ.js +2 -0
  78. package/dist/public/assets/_C-fnxBxJ.js.br +0 -0
  79. package/dist/public/assets/_C05YW868.js +1 -0
  80. package/dist/public/assets/{_sAZ12zqC.js → _C6f-hgTe.js} +1 -1
  81. package/dist/public/assets/_C6f-hgTe.js.br +0 -0
  82. package/dist/public/assets/_C7Y0TA82.js +1 -0
  83. package/dist/public/assets/{_DAqHF2w4.js → _C7vQHCek.js} +1 -1
  84. package/dist/public/assets/_C7vQHCek.js.br +0 -0
  85. package/dist/public/assets/_C8bV43Ih.js +1 -0
  86. package/dist/public/assets/{_BFkRvzwl.js → _CCjVMkO3.js} +1 -1
  87. package/dist/public/assets/_CCjVMkO3.js.br +0 -0
  88. package/dist/public/assets/_CGIbExeK.js +1 -0
  89. package/dist/public/assets/{_DH0yKcfT.js → _CGb1Cnwy.js} +1 -1
  90. package/dist/public/assets/_CGb1Cnwy.js.br +0 -0
  91. package/dist/public/assets/{_D6N1Ob8T.js → _CHy9xaEn.js} +1 -1
  92. package/dist/public/assets/_CHy9xaEn.js.br +0 -0
  93. package/dist/public/assets/_CKyHmOht.js +1 -0
  94. package/dist/public/assets/_CL-ckoH5.js +1 -0
  95. package/dist/public/assets/{_UBNUF9Kp.js → _CNBA4JfC.js} +1 -1
  96. package/dist/public/assets/_CNBA4JfC.js.br +0 -0
  97. package/dist/public/assets/{_CFQ5E_MU.js → _CN_q8cW8.js} +1 -1
  98. package/dist/public/assets/{_BP1-9YZQ.js → _COOlu3UX.js} +1 -1
  99. package/dist/public/assets/_COOlu3UX.js.br +0 -0
  100. package/dist/public/assets/{_DrmQTAwC.js → _COk-n7hZ.js} +1 -1
  101. package/dist/public/assets/_COk-n7hZ.js.br +0 -0
  102. package/dist/public/assets/{_DxG3J469.js → _CPPSSISM.js} +1 -1
  103. package/dist/public/assets/_CPPSSISM.js.br +0 -0
  104. package/dist/public/assets/_CQftYh9Z.js +1 -0
  105. package/dist/public/assets/_CQmdU2jo.js +1 -0
  106. package/dist/public/assets/{_CafkGbWO.js → _CS9jx04A.js} +1 -1
  107. package/dist/public/assets/_CS9jx04A.js.br +0 -0
  108. package/dist/public/assets/_CSdtDfvR.js +1 -0
  109. package/dist/public/assets/_CU0zS2tF.js +1 -0
  110. package/dist/public/assets/_CVs4BgJ8.js +1 -0
  111. package/dist/public/assets/{_DzYdOMqO.js → _CWfDZOTS.js} +1 -1
  112. package/dist/public/assets/_CWfDZOTS.js.br +0 -0
  113. package/dist/public/assets/_CXTPeLVy.js +1 -0
  114. package/dist/public/assets/{_KcGCvv0h.js → _C_2Poz1k.js} +1 -1
  115. package/dist/public/assets/_C_2Poz1k.js.br +0 -0
  116. package/dist/public/assets/{_QSE08ioq.js → _C_YGsTAD.js} +1 -1
  117. package/dist/public/assets/_C_YGsTAD.js.br +0 -0
  118. package/dist/public/assets/{_BNKR_PFf.js → _Cas9R6tf.js} +1 -1
  119. package/dist/public/assets/_Cas9R6tf.js.br +0 -0
  120. package/dist/public/assets/{_DrUKq1tq.js → _CbLcjKPG.js} +1 -1
  121. package/dist/public/assets/_CbLcjKPG.js.br +0 -0
  122. package/dist/public/assets/_CbwHAX50.js +1 -0
  123. package/dist/public/assets/_CcKHitbd.js +1 -0
  124. package/dist/public/assets/_CdPw4LUm.js +1 -0
  125. package/dist/public/assets/_CdPw4LUm.js.br +0 -0
  126. package/dist/public/assets/_CfDehMkg.js +1 -0
  127. package/dist/public/assets/{_BHZ3z1c3.js → _Ciq72Yaz.js} +1 -1
  128. package/dist/public/assets/_Ciq72Yaz.js.br +0 -0
  129. package/dist/public/assets/{_D-6002zy.js → _CjnfvQG7.js} +1 -1
  130. package/dist/public/assets/_CjnfvQG7.js.br +0 -0
  131. package/dist/public/assets/_Ck80YJf-.js +1 -0
  132. package/dist/public/assets/{_BVF9vDBR.js → _CkwFvNTM.js} +1 -1
  133. package/dist/public/assets/_CkwFvNTM.js.br +0 -0
  134. package/dist/public/assets/_CmrqyF2X.js +1 -0
  135. package/dist/public/assets/_Coq56wZh.js +1 -0
  136. package/dist/public/assets/{_S0t9nmdw.js → _CqD6fuWN.js} +1 -1
  137. package/dist/public/assets/_CqD6fuWN.js.br +0 -0
  138. package/dist/public/assets/{_DMxmrREh.js → _Cucb4Tjg.js} +1 -1
  139. package/dist/public/assets/_Cucb4Tjg.js.br +0 -0
  140. package/dist/public/assets/{_Dmr61lrF.js → _Cug-hxky.js} +1 -1
  141. package/dist/public/assets/_Cug-hxky.js.br +0 -0
  142. package/dist/public/assets/_Cw7W1tiO.js +1 -0
  143. package/dist/public/assets/_CwE97-yW.js +1 -0
  144. package/dist/public/assets/_CwuZ_5cX.js +1 -0
  145. package/dist/public/assets/{_CxA2ehGA.js → _CyYvm4rW.js} +1 -1
  146. package/dist/public/assets/_CyYvm4rW.js.br +0 -0
  147. package/dist/public/assets/{_BUi5Lnyu.js → _CzIpBjJM.js} +1 -1
  148. package/dist/public/assets/_CzIpBjJM.js.br +0 -0
  149. package/dist/public/assets/{_lv7q9SmK.js → _D1L3UHX3.js} +1 -1
  150. package/dist/public/assets/_D1L3UHX3.js.br +0 -0
  151. package/dist/public/assets/{_CxGMPpn8.js → _D4egTrfn.js} +1 -1
  152. package/dist/public/assets/_D4egTrfn.js.br +0 -0
  153. package/dist/public/assets/{_C63MsoW_.js → _D4uw28j2.js} +1 -1
  154. package/dist/public/assets/_D4uw28j2.js.br +0 -0
  155. package/dist/public/assets/{_BsEmt4Xo.js → _D5bv6LQl.js} +1 -1
  156. package/dist/public/assets/_D5bv6LQl.js.br +0 -0
  157. package/dist/public/assets/{_BWRhy73M.js → _D7_Ub5eD.js} +1 -1
  158. package/dist/public/assets/_D7_Ub5eD.js.br +0 -0
  159. package/dist/public/assets/{_DsODWTMK.js → _DA4mq6lj.js} +1 -1
  160. package/dist/public/assets/_DA4mq6lj.js.br +0 -0
  161. package/dist/public/assets/{_rV9c6noX.js → _DAqrKmCA.js} +1 -1
  162. package/dist/public/assets/_DAqrKmCA.js.br +0 -0
  163. package/dist/public/assets/_DAuw68_p.js +1 -0
  164. package/dist/public/assets/_DCVr8Tb2.js +1 -0
  165. package/dist/public/assets/{_BdYyTR77.js → _DFf4Rzl8.js} +1 -1
  166. package/dist/public/assets/_DFf4Rzl8.js.br +0 -0
  167. package/dist/public/assets/_DGvpitpZ.js +1 -0
  168. package/dist/public/assets/_DIZG1G-Z.js +1 -0
  169. package/dist/public/assets/_DJ-_BqNL.js +1 -0
  170. package/dist/public/assets/_DMEqEv_T.js +1 -0
  171. package/dist/public/assets/{_Dxl6ePU3.js → _DPoG38YC.js} +1 -1
  172. package/dist/public/assets/{_CqVEbJdU.js → _DTfOovOq.js} +5 -5
  173. package/dist/public/assets/_DTfOovOq.js.br +0 -0
  174. package/dist/public/assets/{_CxPc5sJ4.js → _DUUWYhg_.js} +1 -1
  175. package/dist/public/assets/_DUUWYhg_.js.br +0 -0
  176. package/dist/public/assets/{_ymY4YmGe.js → _DUuqR8Il.js} +1 -1
  177. package/dist/public/assets/_DUuqR8Il.js.br +0 -0
  178. package/dist/public/assets/_DVHVPPDm.js +1 -0
  179. package/dist/public/assets/_DVPR8Gc6.js +12 -0
  180. package/dist/public/assets/_DVPR8Gc6.js.br +0 -0
  181. package/dist/public/assets/{_D9G809lq.js → _DWlBFpSS.js} +1 -1
  182. package/dist/public/assets/_DWlBFpSS.js.br +0 -0
  183. package/dist/public/assets/_DWum7no_.js +1 -0
  184. package/dist/public/assets/{_DVfIcVOc.js → _DXV62Cae.js} +1 -1
  185. package/dist/public/assets/_DXV62Cae.js.br +0 -0
  186. package/dist/public/assets/{_BPoHnP8w.js → _DXipSiI1.js} +1 -1
  187. package/dist/public/assets/_DXipSiI1.js.br +0 -0
  188. package/dist/public/assets/{_Clzo9X7l.js → _DZYDOMkl.js} +1 -1
  189. package/dist/public/assets/_DZYDOMkl.js.br +0 -0
  190. package/dist/public/assets/_D_701Hlg.js +1 -0
  191. package/dist/public/assets/{_tlSiPgo6.js → _D_9gKfZY.js} +1 -1
  192. package/dist/public/assets/_D_9gKfZY.js.br +0 -0
  193. package/dist/public/assets/{_Ctprx5dp.js → _D_JHfJs4.js} +1 -1
  194. package/dist/public/assets/_D_JHfJs4.js.br +0 -0
  195. package/dist/public/assets/{_DvhYEPCI.js → _DbEZe7yb.js} +1 -1
  196. package/dist/public/assets/_DbEZe7yb.js.br +0 -0
  197. package/dist/public/assets/{_B0YpwhBT.js → _DbH0P--6.js} +1 -1
  198. package/dist/public/assets/_DbH0P--6.js.br +0 -0
  199. package/dist/public/assets/{_CKGtByJf.js → _DbadYlan.js} +1 -1
  200. package/dist/public/assets/_DbadYlan.js.br +0 -0
  201. package/dist/public/assets/_DcZGtx9M.js +1 -0
  202. package/dist/public/assets/{_BG7u51c6.js → _DdkaLWU-.js} +1 -1
  203. package/dist/public/assets/_DdkaLWU-.js.br +0 -0
  204. package/dist/public/assets/{_D80egIjq.js → _De56Kzes.js} +1 -1
  205. package/dist/public/assets/_De56Kzes.js.br +0 -0
  206. package/dist/public/assets/{_DxMfRWk5.js → _DeI8ro0m.js} +1 -1
  207. package/dist/public/assets/_DeI8ro0m.js.br +0 -0
  208. package/dist/public/assets/_DeW8reMC.js +1 -0
  209. package/dist/public/assets/{_DNWcRd5b.js → _DeYwNUUu.js} +2 -2
  210. package/dist/public/assets/_DeYwNUUu.js.br +0 -0
  211. package/dist/public/assets/{_B4Cg-RuN.js → _DgTOYvd6.js} +1 -1
  212. package/dist/public/assets/_DgTOYvd6.js.br +0 -0
  213. package/dist/public/assets/_DiSCjU2A.js +1 -0
  214. package/dist/public/assets/{_D6fwgK2P.js → _DkTAnqm3.js} +1 -1
  215. package/dist/public/assets/_DkTAnqm3.js.br +0 -0
  216. package/dist/public/assets/_Dmm830TH.js +1 -0
  217. package/dist/public/assets/_DpjdDKK2.js +7 -0
  218. package/dist/public/assets/_DpjdDKK2.js.br +0 -0
  219. package/dist/public/assets/{_BteLCW3W.js → _DqJfOZRO.js} +1 -1
  220. package/dist/public/assets/_DqJfOZRO.js.br +0 -0
  221. package/dist/public/assets/_DqjxsMkL.js +1 -0
  222. package/dist/public/assets/_DuA45JvH.js +1 -0
  223. package/dist/public/assets/_DuA45JvH.js.br +0 -0
  224. package/dist/public/assets/{_BbhdJgn7.js → _DuOaoYJs.js} +1 -1
  225. package/dist/public/assets/_DuOaoYJs.js.br +0 -0
  226. package/dist/public/assets/_Duzf7BCj.js +1 -0
  227. package/dist/public/assets/_Duzf7BCj.js.br +0 -0
  228. package/dist/public/assets/_DvLPq_1f.js +1 -0
  229. package/dist/public/assets/{_DCPFy4S-.js → _Dy7h2yOQ.js} +1 -1
  230. package/dist/public/assets/_Dy7h2yOQ.js.br +0 -0
  231. package/dist/public/assets/{_zLL0pxIC.js → _FChy8Jml.js} +1 -1
  232. package/dist/public/assets/_FChy8Jml.js.br +0 -0
  233. package/dist/public/assets/_Hg8ZWlxs.js +1 -0
  234. package/dist/public/assets/_IGL38N54.js +1 -0
  235. package/dist/public/assets/{_Bzj2coXM.js → _KHMfdBQI.js} +1 -1
  236. package/dist/public/assets/_KHMfdBQI.js.br +0 -0
  237. package/dist/public/assets/{_AZdn-pAq.js → _KkDXvfqJ.js} +1 -1
  238. package/dist/public/assets/_KkDXvfqJ.js.br +0 -0
  239. package/dist/public/assets/_MNAHC8bw.js +1 -0
  240. package/dist/public/assets/_MaR9Opge.js +1 -0
  241. package/dist/public/assets/{__SKAFxGa.js → _NxnEqCRC.js} +1 -1
  242. package/dist/public/assets/_NxnEqCRC.js.br +0 -0
  243. package/dist/public/assets/_OUf-pT7F.js +1 -0
  244. package/dist/public/assets/_QCvY_0EH.js +1 -0
  245. package/dist/public/assets/{_lEdDdBb0.js → _TMRapgLW.js} +1 -1
  246. package/dist/public/assets/_TMRapgLW.js.br +0 -0
  247. package/dist/public/assets/{_CzBj3vat.js → __2D61bRv.js} +1 -1
  248. package/dist/public/assets/_a3v9VRGR.js +1 -0
  249. package/dist/public/assets/{_HHBD7Mwb.js → _b1QkEZO6.js} +1 -1
  250. package/dist/public/assets/_b1QkEZO6.js.br +0 -0
  251. package/dist/public/assets/{_csnQFbUb.js → _czNfyPen.js} +1 -1
  252. package/dist/public/assets/_czNfyPen.js.br +0 -0
  253. package/dist/public/assets/_dubh06MD.js +1 -0
  254. package/dist/public/assets/_e7F7m2AO.js +1 -0
  255. package/dist/public/assets/_e7F7m2AO.js.br +0 -0
  256. package/dist/public/assets/_ep6TpAZh.js +1 -0
  257. package/dist/public/assets/{_nVVtAArW.js → _g5AR9tpA.js} +1 -1
  258. package/dist/public/assets/_g5AR9tpA.js.br +0 -0
  259. package/dist/public/assets/_gZV0em2r.js +1 -0
  260. package/dist/public/assets/_jiqsGnyP.js +1 -0
  261. package/dist/public/assets/{_CwwZF_Zb.js → _l0hDq-K2.js} +1 -1
  262. package/dist/public/assets/_l0hDq-K2.js.br +0 -0
  263. package/dist/public/assets/{_DuiVLwbC.js → _lSk10m1w.js} +1 -1
  264. package/dist/public/assets/_lSk10m1w.js.br +0 -0
  265. package/dist/public/assets/_lhsz8w9h.js +1 -0
  266. package/dist/public/assets/_nI9u4LRb.js +1 -0
  267. package/dist/public/assets/_n_zJ-LqK.js +1 -0
  268. package/dist/public/assets/_n_zJ-LqK.js.br +0 -0
  269. package/dist/public/assets/{_Ih3MoXl0.js → _o0VQYCUE.js} +1 -1
  270. package/dist/public/assets/_o0VQYCUE.js.br +0 -0
  271. package/dist/public/assets/{_BB9Q57R1.js → _oR0LYfq3.js} +1 -1
  272. package/dist/public/assets/_oR0LYfq3.js.br +0 -0
  273. package/dist/public/assets/{_znlpA0RF.js → _q330tDWb.js} +1 -1
  274. package/dist/public/assets/_q330tDWb.js.br +0 -0
  275. package/dist/public/assets/_qHB7bu0-.js +1 -0
  276. package/dist/public/assets/_so_VJkr5.js +1 -0
  277. package/dist/public/assets/_toCsz2cL.js +1 -0
  278. package/dist/public/assets/_u7bZ6UkK.js +1 -0
  279. package/dist/public/assets/{_CEcIHTni.js → _uP13C5Wl.js} +1 -1
  280. package/dist/public/assets/_uP13C5Wl.js.br +0 -0
  281. package/dist/public/assets/{_CRxrUJ-J.js → _xSVMCoQJ.js} +1 -1
  282. package/dist/public/assets/_xSVMCoQJ.js.br +0 -0
  283. package/dist/public/assets/{_CgHFvMzh.js → _xXNz6TCM.js} +1 -1
  284. package/dist/public/assets/_xXNz6TCM.js.br +0 -0
  285. package/dist/public/assets/_zmjyTuaK.js +1 -0
  286. package/dist/public/assets/files-view-XjUBLNCX.js +2 -0
  287. package/dist/public/assets/manage-workspace-DdpHBJIX.js +2 -0
  288. package/dist/public/assets/new-4NSZeknb.js +1 -0
  289. package/dist/public/assets/new-workspace-LRUvrRNr.js +2 -0
  290. package/dist/public/assets/review-view-AXkF7DUG.js +2 -0
  291. package/dist/public/assets/settings-4NSZeknb.js +1 -0
  292. package/dist/public/assets/settings-page-DhMS0VeA.js +2 -0
  293. package/dist/public/assets/styles-CJbPDDVA.css +1 -0
  294. package/dist/public/assets/styles-CJbPDDVA.css.br +0 -0
  295. package/dist/public/assets/w-4NSZeknb.js +1 -0
  296. package/dist/public/assets/w._-4NSZeknb.js +1 -0
  297. package/dist/public/assets/w._-BXrd0YFM.js +1 -0
  298. package/dist/public/assets/w._-Dwx7An1m.js +1 -0
  299. package/lib/setup/catalog.d.mts +2 -4
  300. package/lib/setup/catalog.mjs +0 -3
  301. package/lib/setup/doctor.mjs +1 -27
  302. package/lib/setup/firewall.mjs +3 -1
  303. package/lib/setup/install.mjs +0 -27
  304. package/package.json +1 -1
  305. package/dist/_DDikKLG_.js +0 -2
  306. package/dist/_ENqPMLjD.js +0 -2
  307. package/dist/public/assets/_2X4Nxaqb.js.br +0 -0
  308. package/dist/public/assets/_4CG1_0AB.js +0 -1
  309. package/dist/public/assets/_6e0Uc2iz.js +0 -1
  310. package/dist/public/assets/_7EbyoqQO.js +0 -1
  311. package/dist/public/assets/_AZdn-pAq.js.br +0 -0
  312. package/dist/public/assets/_B0YpwhBT.js.br +0 -0
  313. package/dist/public/assets/_B2E2dOUC.js +0 -1
  314. package/dist/public/assets/_B4Cg-RuN.js.br +0 -0
  315. package/dist/public/assets/_B7kCpNyD.js.br +0 -0
  316. package/dist/public/assets/_B9NIbsbr.js +0 -1
  317. package/dist/public/assets/_BAmZEVIH.js +0 -15
  318. package/dist/public/assets/_BAmZEVIH.js.br +0 -0
  319. package/dist/public/assets/_BB9Q57R1.js.br +0 -0
  320. package/dist/public/assets/_BCxjUBLn.js +0 -1
  321. package/dist/public/assets/_BCxjUBLn.js.br +0 -0
  322. package/dist/public/assets/_BD6kLg4i.js +0 -1
  323. package/dist/public/assets/_BFR8p6md.js.br +0 -0
  324. package/dist/public/assets/_BFkRvzwl.js.br +0 -0
  325. package/dist/public/assets/_BFwjqxJi.js +0 -1
  326. package/dist/public/assets/_BG7u51c6.js.br +0 -0
  327. package/dist/public/assets/_BGj24EPL.js +0 -1
  328. package/dist/public/assets/_BHZ3z1c3.js.br +0 -0
  329. package/dist/public/assets/_BLzCI5fA.js.br +0 -0
  330. package/dist/public/assets/_BNKR_PFf.js.br +0 -0
  331. package/dist/public/assets/_BP1-9YZQ.js.br +0 -0
  332. package/dist/public/assets/_BPoHnP8w.js.br +0 -0
  333. package/dist/public/assets/_BQK0Ua8P.js +0 -1
  334. package/dist/public/assets/_BUi5Lnyu.js.br +0 -0
  335. package/dist/public/assets/_BVF9vDBR.js.br +0 -0
  336. package/dist/public/assets/_BWRhy73M.js.br +0 -0
  337. package/dist/public/assets/_BapqrzTC.js +0 -1
  338. package/dist/public/assets/_Bb3HjdgA.js +0 -1
  339. package/dist/public/assets/_BbhdJgn7.js.br +0 -0
  340. package/dist/public/assets/_BdYyTR77.js.br +0 -0
  341. package/dist/public/assets/_BgJeYj6O.js +0 -1
  342. package/dist/public/assets/_Bgcqgb8f.js +0 -1
  343. package/dist/public/assets/_BjDtPv37.js +0 -7
  344. package/dist/public/assets/_BjDtPv37.js.br +0 -0
  345. package/dist/public/assets/_BjL4pgd1.js +0 -1
  346. package/dist/public/assets/_Bjupqvvl.js +0 -1
  347. package/dist/public/assets/_Bjupqvvl.js.br +0 -0
  348. package/dist/public/assets/_BjzIZvxS.js +0 -1
  349. package/dist/public/assets/_BkleQY2P.js +0 -1
  350. package/dist/public/assets/_BlGMtzOr.js +0 -1
  351. package/dist/public/assets/_Bo09pVsm.js +0 -1
  352. package/dist/public/assets/_Bo7UsgQ1.js +0 -1
  353. package/dist/public/assets/_Bo7UsgQ1.js.br +0 -0
  354. package/dist/public/assets/_BoN8WXNM.js +0 -1
  355. package/dist/public/assets/_BrAi38xM.js +0 -1
  356. package/dist/public/assets/_BrwDLY9A.js +0 -1
  357. package/dist/public/assets/_BsEmt4Xo.js.br +0 -0
  358. package/dist/public/assets/_BteLCW3W.js.br +0 -0
  359. package/dist/public/assets/_Bud8PVk2.js.br +0 -0
  360. package/dist/public/assets/_BwOL76jM.js +0 -1
  361. package/dist/public/assets/_Bzj2coXM.js.br +0 -0
  362. package/dist/public/assets/_C0qwHGvt.js +0 -1
  363. package/dist/public/assets/_C0qwHGvt.js.br +0 -0
  364. package/dist/public/assets/_C44-U0HZ.js +0 -1
  365. package/dist/public/assets/_C4TOoJt-.js.br +0 -0
  366. package/dist/public/assets/_C4i6tdPg.js.br +0 -0
  367. package/dist/public/assets/_C4lozmRu.js +0 -1
  368. package/dist/public/assets/_C63MsoW_.js.br +0 -0
  369. package/dist/public/assets/_C9xpsatV.js +0 -1
  370. package/dist/public/assets/_CBcRMH1I.js +0 -1
  371. package/dist/public/assets/_CEcIHTni.js.br +0 -0
  372. package/dist/public/assets/_CErLThfD.js +0 -1
  373. package/dist/public/assets/_CFDwxbE0.js +0 -1
  374. package/dist/public/assets/_CGYOyAi6.js.br +0 -0
  375. package/dist/public/assets/_CHCQDmjv.js +0 -1591
  376. package/dist/public/assets/_CHCQDmjv.js.br +0 -0
  377. package/dist/public/assets/_CKGtByJf.js.br +0 -0
  378. package/dist/public/assets/_CKYU_-EV.js +0 -1
  379. package/dist/public/assets/_CLDzlgJ_.js +0 -1
  380. package/dist/public/assets/_CNz608a5.js +0 -1
  381. package/dist/public/assets/_CO7giqIn.js +0 -1
  382. package/dist/public/assets/_COImNA0T.js +0 -1
  383. package/dist/public/assets/_CQIbdL8n.js +0 -2
  384. package/dist/public/assets/_CQIbdL8n.js.br +0 -0
  385. package/dist/public/assets/_CR91niWu.js +0 -1
  386. package/dist/public/assets/_CRxrUJ-J.js.br +0 -0
  387. package/dist/public/assets/_CUI5_Kc8.js +0 -1
  388. package/dist/public/assets/_CViysOIy.js +0 -2
  389. package/dist/public/assets/_CViysOIy.js.br +0 -0
  390. package/dist/public/assets/_CWUHe8y9.js +0 -1
  391. package/dist/public/assets/_CafkGbWO.js.br +0 -0
  392. package/dist/public/assets/_CamEQdEy.js +0 -1
  393. package/dist/public/assets/_CbLtpMzf.js +0 -1
  394. package/dist/public/assets/_CcUuSpPV.js +0 -1
  395. package/dist/public/assets/_CgHFvMzh.js.br +0 -0
  396. package/dist/public/assets/_ChYvsWUb.js +0 -1
  397. package/dist/public/assets/_CjMgo0is.js +0 -1
  398. package/dist/public/assets/_Clzo9X7l.js.br +0 -0
  399. package/dist/public/assets/_CoRZeDpA.js +0 -1
  400. package/dist/public/assets/_CoUiEb__.js +0 -1
  401. package/dist/public/assets/_CqVEbJdU.js.br +0 -0
  402. package/dist/public/assets/_CsnYZRX1.js +0 -1
  403. package/dist/public/assets/_Ctprx5dp.js.br +0 -0
  404. package/dist/public/assets/_CvO8C3EH.js +0 -1
  405. package/dist/public/assets/_CvTM_Hkg.js.br +0 -0
  406. package/dist/public/assets/_Cw53IOvr.js +0 -1
  407. package/dist/public/assets/_CwwZF_Zb.js.br +0 -0
  408. package/dist/public/assets/_CxA2ehGA.js.br +0 -0
  409. package/dist/public/assets/_CxGMPpn8.js.br +0 -0
  410. package/dist/public/assets/_CxPc5sJ4.js.br +0 -0
  411. package/dist/public/assets/_Cxa2TAUf.js +0 -1
  412. package/dist/public/assets/_Cy_niJWx.js +0 -1
  413. package/dist/public/assets/_D-6002zy.js.br +0 -0
  414. package/dist/public/assets/_D0Ae1m8t.js +0 -1
  415. package/dist/public/assets/_D1EJcr9u.js +0 -1
  416. package/dist/public/assets/_D6N1Ob8T.js.br +0 -0
  417. package/dist/public/assets/_D6fwgK2P.js.br +0 -0
  418. package/dist/public/assets/_D80egIjq.js.br +0 -0
  419. package/dist/public/assets/_D9G809lq.js.br +0 -0
  420. package/dist/public/assets/_DAgpiMnc.js +0 -1
  421. package/dist/public/assets/_DAqHF2w4.js.br +0 -0
  422. package/dist/public/assets/_DCPFy4S-.js.br +0 -0
  423. package/dist/public/assets/_DDdrxdVx.js +0 -1
  424. package/dist/public/assets/_DDwZqDeP.js.br +0 -0
  425. package/dist/public/assets/_DEpWf8ro.js +0 -1
  426. package/dist/public/assets/_DEpWf8ro.js.br +0 -0
  427. package/dist/public/assets/_DFMkO54P.js +0 -1
  428. package/dist/public/assets/_DFVrnUUI.js +0 -1
  429. package/dist/public/assets/_DH0yKcfT.js.br +0 -0
  430. package/dist/public/assets/_DHE02xjh.js +0 -1
  431. package/dist/public/assets/_DMxmrREh.js.br +0 -0
  432. package/dist/public/assets/_DNWcRd5b.js.br +0 -0
  433. package/dist/public/assets/_DOGQJlMz.js.br +0 -0
  434. package/dist/public/assets/_DUOr22R8.js +0 -1
  435. package/dist/public/assets/_DVfIcVOc.js.br +0 -0
  436. package/dist/public/assets/_DWvJUtgI.js +0 -1
  437. package/dist/public/assets/_DX_wI8Ku.js +0 -1
  438. package/dist/public/assets/_DZAyYSrR.js +0 -1
  439. package/dist/public/assets/_DbON91M6.js +0 -1
  440. package/dist/public/assets/_Dmr61lrF.js.br +0 -0
  441. package/dist/public/assets/_Do0f-7ZP.js +0 -1
  442. package/dist/public/assets/_DrUKq1tq.js.br +0 -0
  443. package/dist/public/assets/_DrmQTAwC.js.br +0 -0
  444. package/dist/public/assets/_DsE5ESQl.js +0 -1
  445. package/dist/public/assets/_DsODWTMK.js.br +0 -0
  446. package/dist/public/assets/_DuHnqTMi.js +0 -1
  447. package/dist/public/assets/_DuiVLwbC.js.br +0 -0
  448. package/dist/public/assets/_DvhYEPCI.js.br +0 -0
  449. package/dist/public/assets/_Dw-MQsnH.js.br +0 -0
  450. package/dist/public/assets/_DxG3J469.js.br +0 -0
  451. package/dist/public/assets/_DxMfRWk5.js.br +0 -0
  452. package/dist/public/assets/_DyJbxamO.js +0 -1
  453. package/dist/public/assets/_DyPWIZeU.js.br +0 -0
  454. package/dist/public/assets/_DzDisVDu.js +0 -1
  455. package/dist/public/assets/_DzYdOMqO.js.br +0 -0
  456. package/dist/public/assets/_Goz4NHSk.js.br +0 -0
  457. package/dist/public/assets/_HHBD7Mwb.js.br +0 -0
  458. package/dist/public/assets/_I0BsvzyX.js +0 -1
  459. package/dist/public/assets/_Ih3MoXl0.js.br +0 -0
  460. package/dist/public/assets/_Iy5kHWHO.js +0 -1
  461. package/dist/public/assets/_K5LXbS5I.js +0 -1
  462. package/dist/public/assets/_KcGCvv0h.js.br +0 -0
  463. package/dist/public/assets/_PCJNoAwu.js +0 -1
  464. package/dist/public/assets/_QSE08ioq.js.br +0 -0
  465. package/dist/public/assets/_S0t9nmdw.js.br +0 -0
  466. package/dist/public/assets/_UBNUF9Kp.js.br +0 -0
  467. package/dist/public/assets/_Uz6LspUB.js +0 -1
  468. package/dist/public/assets/_WaGpIsSa.js +0 -1
  469. package/dist/public/assets/_Yl99Ym1s.js.br +0 -0
  470. package/dist/public/assets/_Z73XNfnJ.js +0 -1
  471. package/dist/public/assets/__SKAFxGa.js.br +0 -0
  472. package/dist/public/assets/_c3cBqR4q.js +0 -1
  473. package/dist/public/assets/_csnQFbUb.js.br +0 -0
  474. package/dist/public/assets/_dLadtSBo.js +0 -1
  475. package/dist/public/assets/_f7Sgp2jB.js.br +0 -0
  476. package/dist/public/assets/_gjaB4W51.js +0 -1
  477. package/dist/public/assets/_l-1e5-uC.js +0 -1
  478. package/dist/public/assets/_lEdDdBb0.js.br +0 -0
  479. package/dist/public/assets/_lv7q9SmK.js.br +0 -0
  480. package/dist/public/assets/_nVVtAArW.js.br +0 -0
  481. package/dist/public/assets/_pSzK2ztp.js +0 -1
  482. package/dist/public/assets/_r9IZX58O.js +0 -1
  483. package/dist/public/assets/_rV9c6noX.js.br +0 -0
  484. package/dist/public/assets/_rk0M_hpt.js +0 -1
  485. package/dist/public/assets/_ru_rDgLp.js +0 -1
  486. package/dist/public/assets/_sAZ12zqC.js.br +0 -0
  487. package/dist/public/assets/_scmoaGnX.js +0 -1
  488. package/dist/public/assets/_tlSiPgo6.js.br +0 -0
  489. package/dist/public/assets/_w_kZ7oXG.js +0 -1
  490. package/dist/public/assets/_wlPMGofh.js.br +0 -0
  491. package/dist/public/assets/_ymY4YmGe.js.br +0 -0
  492. package/dist/public/assets/_zLL0pxIC.js.br +0 -0
  493. package/dist/public/assets/_znlpA0RF.js.br +0 -0
  494. package/dist/public/assets/files-view-BMZoqQCr.js +0 -2
  495. package/dist/public/assets/manage-workspace-DVER4MrG.js +0 -2
  496. package/dist/public/assets/new-BuZjAnZr.js +0 -1
  497. package/dist/public/assets/new-workspace-DG5o9P6p.js +0 -2
  498. package/dist/public/assets/review-view-B9KVei-m.js +0 -2
  499. package/dist/public/assets/settings-BuZjAnZr.js +0 -1
  500. package/dist/public/assets/settings-page-CbLeDUF_.js +0 -2
  501. package/dist/public/assets/styles-DUzVKiZK.css +0 -1
  502. package/dist/public/assets/styles-DUzVKiZK.css.br +0 -0
  503. package/dist/public/assets/w-BuZjAnZr.js +0 -1
  504. package/dist/public/assets/w._-BLFJb1Kc.js +0 -1
  505. package/dist/public/assets/w._-BuZjAnZr.js +0 -1
  506. package/dist/public/assets/w._-DDS58VZm.js +0 -1
package/bin/cli/stack.mjs CHANGED
@@ -8,26 +8,40 @@ function recipe(branch) {
8
8
 
9
9
  Stack only when the user asks, or when a change of several hundred lines
10
10
  splits into parts each worth merging alone; never a layer per commit.
11
+ A stack is a convention, plain branches and PRs: each layer is cut from
12
+ the one below and its PR is based on it, which is how GitHub and work's
13
+ review both read a stack.
11
14
 
12
- - The working branch (${branch}) stays the top; cut layers below it, bottom
13
- first, as ${branch}-<layer>:
14
- gh stack init --base <base> <layers…> ${branch}
15
- (after \`gh stack unstack --local\` if a stack exists).
15
+ - The working branch (${branch}) stays the top; cut layers below it from
16
+ its own commits, bottom first, as ${branch}-<layer>, each with its PR's
17
+ base as gh reads it:
18
+ git branch ${branch}-<layer> <its last commit>
19
+ git config branch.${branch}-<layer>.gh-merge-base <layer below, else base>
20
+ - The user reviews it here a layer at a time, bottom first: link each as
21
+ [<layer>](/w/<id>/review?section=<repo>@<layer>) (\`work branches\`
22
+ lists them).
16
23
  - Never check a layer out. Edit one by \`git commit --fixup <sha>\` on the
17
- top, then:
24
+ top, then (every layer moves with the commits it holds):
18
25
  GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash --update-refs origin/<base>
19
- - \`gh stack sync\` / \`gh stack rebase\` switch branches: run them in topic
20
- worktrees only. Leave the local <base> gh-stack keeps as trunk.
21
- - Merge a layer with \`gh stack merge <pr> --squash\` or on the web
22
- (\`gh pr merge\` refuses it), then, on the top:
23
- old=$(git rev-parse origin/${branch})
26
+ A base that moved is \`git rebase --update-refs origin/<base>\` alike.
27
+ - Nothing goes up front. Push a layer and open its PR only when the user
28
+ says it is ready, after reviewing it, bottom first and never past a
29
+ layer still local (a PR's base must be on GitHub):
30
+ git push origin ${branch}-<layer>
31
+ gh pr create --head ${branch}-<layer> --base <layer below, else base>
32
+ The top goes last, its PR based on the last layer (one already open:
33
+ \`gh pr edit --base\`). After a rebase, force-push only what is pushed:
34
+ git push --force-with-lease --atomic origin <pushed branches…>
35
+ - Land bottom first, deleting the merged branch so GitHub moves the PR
36
+ above onto <base> (on the web, delete it after merging):
37
+ cut=$(git rev-parse ${branch}-<layer>)
38
+ gh pr merge <pr> --squash --delete-branch
39
+ then, on the top, move the rest onto the squash, and force-push what of
40
+ it is pushed:
24
41
  git fetch
25
- git branch -f <layer> origin/<layer> # for each remaining layer
26
- git branch -D <merged-layer>
27
- git rebase --onto origin/${branch} $old
28
- - Once the top merges: \`gh stack unstack --local\`.
29
- - Link a layer for review as [<layer>](/w/<id>/review?section=<repo>@<layer>);
30
- \`work branches\` lists every layer with its link.`;
42
+ git rebase --update-refs --onto origin/<base> $cut
43
+ git config branch.<layer above>.gh-merge-base <base> # not the top's
44
+ - A lane stacks the same way, in its worktree, its branch the top.`;
31
45
  }
32
46
 
33
47
  export const commands = [
@@ -35,9 +49,9 @@ export const commands = [
35
49
  name: "stack",
36
50
  summary: "how to stack branches in this workspace (prints the recipe)",
37
51
  help: `work stack [id|name]
38
- Prints how to stack branches with gh-stack here, with the workspace's
39
- branch filled in: when to, cutting layers, editing one without checking
40
- it out, merging a layer and rebasing the rest.`,
52
+ Prints how to stack branches here, as plain branches and PRs, with the
53
+ workspace's branch filled in: when to, cutting layers, editing one
54
+ without checking it out, merging a layer and rebasing the rest.`,
41
55
  async run(ctx) {
42
56
  let branch = "<workspace-branch>";
43
57
  try {
package/bin/cli/topic.mjs CHANGED
@@ -84,7 +84,7 @@ function mergeBases(dir) {
84
84
  * copy. This workspace's own branches (it, and the topics one stacks on)
85
85
  * go by the local one: they may never be pushed, and here is where they
86
86
  * move. Any other (the repo's base) goes by origin's: a bare cache's local
87
- * copy of it is as old as the clone, or as gh-stack's trunk. */
87
+ * copy of it is as old as the clone. */
88
88
  function baseRef(dir, name, ws, foreign) {
89
89
  const local = has(dir, `refs/heads/${name}`) ? name : null;
90
90
  const remote = has(dir, `refs/remotes/origin/${name}`)
package/bin/work.mjs CHANGED
@@ -76,6 +76,7 @@ import {
76
76
  applyPlan,
77
77
  dropText,
78
78
  firewallProbe,
79
+ programOf,
79
80
  serviceNode,
80
81
  } from "../lib/setup/firewall.mjs";
81
82
  import { installTool, repairGhHelpers } from "../lib/setup/install.mjs";
@@ -958,6 +959,7 @@ function allowScriptsArgs() {
958
959
 
959
960
  async function update() {
960
961
  log("updating @dylanpiercey/work");
962
+ const before = serviceCli();
961
963
  // `--prefer-online`: npm serves `latest` from a cached packument for a
962
964
  // few minutes after a publish, so an update right behind a release
963
965
  // reinstalled the version already running.
@@ -974,8 +976,19 @@ async function update() {
974
976
  ],
975
977
  { stdio },
976
978
  );
977
- // Re-exec the (possibly new) CLI to finish with fresh code.
978
- sh("work", [
979
+ // Finish with the CLI that npm just installed, found where that npm
980
+ // installs, never `work` by name: the npm and the `work` first on PATH
981
+ // can be two nodes' (a Homebrew npm ahead of mise's shims), and the
982
+ // other install's setup points the service back at itself, so every
983
+ // update left the service on the old release.
984
+ const root = execFileSync("npm", ["root", "-g"], {
985
+ encoding: "utf8",
986
+ stdio: ["ignore", "pipe", 2],
987
+ }).trim();
988
+ const cli = path.join(root, "@dylanpiercey", "work", "bin", "work.mjs");
989
+ if (!fs.existsSync(cli))
990
+ die(`npm installed into ${root}, but there is no ${cli}`);
991
+ sh(cli, [
979
992
  "setup",
980
993
  ...(yes ? ["--yes"] : []),
981
994
  ...args.filter((a) =>
@@ -991,6 +1004,21 @@ async function update() {
991
1004
  ...flagValues("--allow-host").flatMap((h) => ["--allow-host", h]),
992
1005
  ...flagValues("--disallow-host").flatMap((h) => ["--disallow-host", h]),
993
1006
  ]);
1007
+ // The service now runs what npm updated; an install it or this shell ran
1008
+ // before is left behind at its old release.
1009
+ const now = realpathOr(cli);
1010
+ const left = new Map();
1011
+ for (const [w, was] of [
1012
+ [before, "the service ran"],
1013
+ [installAt(fileURLToPath(import.meta.url)), "`work` here ran"],
1014
+ ]) {
1015
+ if (w?.prefix && w.real !== now && !left.has(w.real))
1016
+ left.set(
1017
+ w.real,
1018
+ `${was} ${tilde(w.path)} (${w.version}), not the install npm updated (${tilde(cli)}); remove it: ${removeHint(w)}`,
1019
+ );
1020
+ }
1021
+ for (const note of left.values()) warn(note);
994
1022
  }
995
1023
 
996
1024
  /** Machine readiness from lib/setup — the same probe the Settings page runs. */
@@ -1015,38 +1043,39 @@ async function doctorCmd() {
1015
1043
  }
1016
1044
 
1017
1045
  /**
1018
- * This `work`, every other one on PATH (the first is what `work` runs),
1019
- * each with its version, and the version the running service reports
1020
- * (null when none answers). A package manager's global left behind — a
1021
- * Homebrew node's under mise's — shadows the one kept up to date, and the
1022
- * doctor it runs is then old code describing a machine it no longer knows.
1046
+ * This `work`, every other one on PATH (the first is what `work` runs) or
1047
+ * on the service's, each with the install it runs and its version, and the
1048
+ * service: the CLI its definition runs and the release the running one
1049
+ * reports. A package manager's global left behind — a Homebrew node's
1050
+ * under mise's — shadows the one kept up to date, and the doctor it runs is
1051
+ * then old code describing a machine it no longer knows.
1023
1052
  */
1024
1053
  async function workInstalls() {
1025
- const self = realpathOr(fileURLToPath(import.meta.url));
1054
+ const self = installAt(fileURLToPath(import.meta.url));
1055
+ const shell = (process.env.PATH || "").split(path.delimiter);
1056
+ const servicePath = (installedServiceEnv().PATH || "").split(path.delimiter);
1026
1057
  const onPath = [];
1027
1058
  const seen = new Set();
1028
- for (const dir of (process.env.PATH || "").split(path.delimiter)) {
1059
+ for (const dir of new Set([...shell, ...servicePath])) {
1029
1060
  if (!dir) continue;
1030
- const file = path.join(dir, "work");
1031
- let real;
1032
- try {
1033
- if (!fs.statSync(file).isFile()) continue;
1034
- real = fs.realpathSync(file);
1035
- } catch {
1036
- continue;
1037
- }
1038
- if (seen.has(real)) continue;
1039
- seen.add(real);
1040
- onPath.push({ path: file, real, version: installVersion(real, file) });
1041
- }
1042
- let service = null;
1061
+ const w = workOnPath(path.join(dir, "work"));
1062
+ if (!w || seen.has(w.real)) continue;
1063
+ seen.add(w.real);
1064
+ onPath.push(shell.includes(dir) ? w : { ...w, servicePath: true });
1065
+ }
1066
+ // A service that answers without a version is from before /api/boot
1067
+ // carried one: older than any CLI that asks.
1068
+ const service = { answered: false, version: null, cli: serviceCli() };
1043
1069
  try {
1044
1070
  const res = await fetch(`${serverUrl()}/api/boot`, {
1045
1071
  signal: AbortSignal.timeout(2000),
1046
1072
  });
1047
- if (res.ok) service = (await res.json()).version ?? null;
1073
+ if (res.ok) {
1074
+ service.version = (await res.json()).version ?? null;
1075
+ service.answered = true;
1076
+ }
1048
1077
  } catch {}
1049
- return { self: { path: self, version: pkg.version }, onPath, service };
1078
+ return { self, onPath, service };
1050
1079
  }
1051
1080
 
1052
1081
  function realpathOr(file) {
@@ -1057,28 +1086,118 @@ function realpathOr(file) {
1057
1086
  }
1058
1087
  }
1059
1088
 
1060
- /** An install's version: an npm global's bin links into the package, whose
1061
- * package.json says; a shim (mise's) is asked. */
1062
- function installVersion(real, file) {
1089
+ /** The package of work a file is part of, read from its package.json and
1090
+ * never by running anything: `prefix` is the npm prefix whose global it
1091
+ * is, null for a checkout. */
1092
+ function installAt(file) {
1093
+ const real = realpathOr(file);
1063
1094
  let dir = path.dirname(real);
1064
1095
  for (let i = 0; i < 3; i++) {
1065
1096
  try {
1066
1097
  const p = JSON.parse(fs.readFileSync(path.join(dir, "package.json")));
1067
- if (p.name === "@dylanpiercey/work") return p.version ?? null;
1098
+ if (p.name === "@dylanpiercey/work") {
1099
+ const prefix = /^(.*)\/lib\/node_modules\/@dylanpiercey\/work$/.exec(
1100
+ dir,
1101
+ )?.[1];
1102
+ return {
1103
+ path: file,
1104
+ real,
1105
+ version: p.version ?? null,
1106
+ prefix: prefix ?? null,
1107
+ };
1108
+ }
1068
1109
  } catch {}
1069
1110
  dir = path.dirname(dir);
1070
1111
  }
1112
+ return null;
1113
+ }
1114
+
1115
+ /** Version managers whose shims stand in for `work`. A shim is the
1116
+ * manager's own binary (mise links every shim to itself) or a script that
1117
+ * hands off to it, so neither its path nor its target is the install: the
1118
+ * manager's `which` names that. A global uninstalled from one of its
1119
+ * nodes leaves the shim until a reshim. */
1120
+ function versionManagers() {
1121
+ return [
1122
+ {
1123
+ id: "mise",
1124
+ shim: (file, real) => path.basename(real) === "mise",
1125
+ which: (real) => [real, ["which", "work"]],
1126
+ installs: /\/mise\/installs\/node\//,
1127
+ reshim: "mise reshim",
1128
+ },
1129
+ {
1130
+ id: "asdf",
1131
+ shim: (file) => /\/\.asdf\/shims$/.test(path.dirname(file)),
1132
+ which: () => ["asdf", ["which", "work"]],
1133
+ installs: /\/\.asdf\/installs\/nodejs\//,
1134
+ reshim: "asdf reshim nodejs",
1135
+ },
1136
+ {
1137
+ id: "nodenv",
1138
+ shim: (file) => /\/\.nodenv\/shims$/.test(path.dirname(file)),
1139
+ which: () => ["nodenv", ["which", "work"]],
1140
+ installs: /\/\.nodenv\/versions\//,
1141
+ reshim: "nodenv rehash",
1142
+ },
1143
+ ];
1144
+ }
1145
+
1146
+ /** The install a `work` on PATH runs: an npm global's bin links into the
1147
+ * package, a shim's is the one its manager names, and anything else is
1148
+ * asked its version. */
1149
+ function workOnPath(file) {
1150
+ try {
1151
+ if (!fs.statSync(file).isFile()) return null;
1152
+ } catch {
1153
+ return null;
1154
+ }
1155
+ const own = installAt(file);
1156
+ if (own) return own;
1157
+ const real = realpathOr(file);
1158
+ const manager = versionManagers().find((m) => m.shim(file, real));
1159
+ if (manager) {
1160
+ const [bin, argv] = manager.which(real);
1161
+ const out = spawnSync(bin, argv, { encoding: "utf8", timeout: 5000 });
1162
+ const target = out.status === 0 && out.stdout.trim();
1163
+ const w = target && installAt(target);
1164
+ if (w) return { ...w, path: file, manager: manager.id };
1165
+ }
1071
1166
  const out = spawnSync(file, ["version"], { encoding: "utf8", timeout: 5000 });
1072
- return /^\d+\.\d+\.\d+\S*/.exec((out.stdout || "").trim())?.[0] ?? null;
1167
+ const version = /^\d+\.\d+\.\d+\S*/.exec((out.stdout || "").trim())?.[0];
1168
+ return { path: file, real, version: version ?? null, prefix: null };
1169
+ }
1170
+
1171
+ /** The work the service definition runs (`[caffeinate -s] <cli> start`,
1172
+ * or a checkout's run script under work-source local): the first program
1173
+ * in its argv that is part of a work package. */
1174
+ function serviceCli() {
1175
+ let text;
1176
+ try {
1177
+ text = fs.readFileSync(serviceFile(), "utf8");
1178
+ } catch {
1179
+ return null;
1180
+ }
1181
+ for (const arg of programOf(text)) {
1182
+ const w = path.isAbsolute(arg) && installAt(arg);
1183
+ if (w) return w;
1184
+ }
1185
+ return null;
1073
1186
  }
1074
1187
 
1075
- /** How to remove an install: the npm beside the node whose global it is. */
1076
- function removeHint(real) {
1077
- const m =
1078
- /^(.*)\/lib\/node_modules\/@dylanpiercey\/work\/bin\/work\.mjs$/.exec(real);
1079
- return m
1080
- ? `${m[1]}/bin/npm uninstall -g @dylanpiercey/work`
1081
- : `remove ${real}`;
1188
+ /** How to remove an npm global of work: npm's uninstall at the prefix it
1189
+ * is in (named: the npm first on PATH may be another node's, whose own
1190
+ * prefix holds some other install), then its version manager's reshim.
1191
+ * Null for anything else, which is not this CLI's to remove. */
1192
+ function removeHint(w) {
1193
+ if (!w.prefix) return null;
1194
+ const manager = versionManagers().find(
1195
+ (m) => m.id === w.manager || m.installs.test(`${w.prefix}/`),
1196
+ );
1197
+ const prefix = /^[\w@%+=:,./-]+$/.test(w.prefix)
1198
+ ? w.prefix
1199
+ : `'${w.prefix.replace(/'/g, `'\\''`)}'`;
1200
+ return `npm uninstall -g --prefix ${prefix} @dylanpiercey/work${manager ? ` && ${manager.reshim}` : ""}`;
1082
1201
  }
1083
1202
 
1084
1203
  function newest(versions) {
@@ -1090,23 +1209,56 @@ function newest(versions) {
1090
1209
  }, null);
1091
1210
  }
1092
1211
 
1093
- /** The doctor's warnings about which `work` this is. */
1212
+ /** The doctor's warnings about which `work` this is and which the service
1213
+ * runs. */
1094
1214
  function installNotes({ self, onPath, service }) {
1095
1215
  const notes = [];
1096
- if (service && service !== self.version) {
1097
- const theirs = onPath.find((w) => w.version === service);
1216
+ const runs = service.cli;
1217
+ // The newest install here is the one to keep: an update installs it,
1218
+ // and whatever else is here was left behind, the service's included.
1219
+ const current = newest([self.version, ...onPath.map((w) => w.version)]);
1220
+ const behind = (v) => v !== current && newest([v, current]) === current;
1221
+ const keep = [...onPath.filter((w) => !w.servicePath), self].find(
1222
+ (w) => w.prefix && w.version === current,
1223
+ );
1224
+ // `setup` from the install kept points the service at it, unless the
1225
+ // service runs a checkout (work-source local), which setup would undo.
1226
+ const move =
1227
+ keep &&
1228
+ runs?.prefix &&
1229
+ `\`${keep === onPath[0] ? "work" : keep.path} setup\``;
1230
+ if (service.answered && service.version !== self.version) {
1231
+ const theirs = runs ?? onPath.find((w) => w.version === service.version);
1232
+ notes.push(
1233
+ `this work is ${self.version} (${tilde(self.path)}), but the running service is ${service.version ?? "older (it does not report its version)"}, so what this doctor says is an older or newer release's${theirs ? `: the service's is ${tilde(theirs.path)}` : ""}${move && behind(service.version) ? `; run ${move} to move it to ${current}` : ""}`,
1234
+ );
1235
+ } else if (!service.answered && runs && runs.version !== self.version) {
1098
1236
  notes.push(
1099
- `this work is ${self.version} (${tilde(self.path)}), but the running service is ${service}, so what this doctor says is an older or newer release's${theirs ? `: the service's is ${tilde(theirs.path)}` : ""}`,
1237
+ `the service is set to run ${tilde(runs.path)} (${runs.version ?? "unknown version"}), not this work (${self.version}, ${tilde(self.path)})${move && behind(runs.version) ? `; run ${move} to move it to ${current}` : ""}`,
1100
1238
  );
1101
1239
  }
1102
1240
  if (onPath.length > 1) {
1103
- // A stray is one at another release than the service's (or, with no
1104
- // service answering, than the newest here).
1105
- const current = service ?? newest(onPath.map((w) => w.version));
1106
- const lines = onPath.map(
1107
- (w, i) =>
1108
- ` ${tilde(w.path)} → ${w.version ?? "unknown version"}${i === 0 ? " (what \`work\` runs)" : ""}${w.version === current ? "" : `\n remove: ${removeHint(w.real)}`}`,
1109
- );
1241
+ const lines = onPath.map((w, i) => {
1242
+ const tags = [
1243
+ i === 0 && !w.servicePath && "what `work` runs",
1244
+ w.servicePath && "on the service's PATH",
1245
+ w.real === runs?.real && "the service's",
1246
+ ].filter(Boolean);
1247
+ const hint = removeHint(w);
1248
+ // The service's own install goes only once the service is off it:
1249
+ // removed first, it would stop the service.
1250
+ const fix =
1251
+ w.version === current
1252
+ ? ""
1253
+ : !hint
1254
+ ? "not an npm global: remove it the way it was installed"
1255
+ : w.real !== runs?.real
1256
+ ? `remove: ${hint}`
1257
+ : move
1258
+ ? `remove, once ${move} has moved the service off it: ${hint}`
1259
+ : "";
1260
+ return ` ${tilde(w.path)} → ${w.version ?? "unknown version"}${tags.length ? ` (${tags.join(", ")})` : ""}${fix ? `\n ${fix}` : ""}`;
1261
+ });
1110
1262
  notes.push(`more than one work is on PATH:\n${lines.join("\n")}`);
1111
1263
  }
1112
1264
  return notes;
@@ -0,0 +1,2 @@
1
+ import { J as notifySessionsChanged } from "./_Cv5RrCSW.js";
2
+ export { notifySessionsChanged };
@@ -0,0 +1,2 @@
1
+ import { f as teamsOf } from "./_DuwPQCOE.js";
2
+ export { teamsOf };
@@ -1129,11 +1129,6 @@ var TOOLS = [
1129
1129
  mise: "gh",
1130
1130
  required: true
1131
1131
  },
1132
- {
1133
- id: "gh-stack",
1134
- label: "gh stack",
1135
- ghExtension: "github/gh-stack"
1136
- },
1137
1132
  {
1138
1133
  id: "ripgrep",
1139
1134
  label: "ripgrep",
@@ -2321,19 +2316,6 @@ async function canStayAwake() {
2321
2316
  ], { timeout: 5e3 });
2322
2317
  return ok;
2323
2318
  }
2324
- /** gh's extensions, repo → version (`gh extension list`: name, repo,
2325
- * version by tabs). Null without gh, which is what installs them. */
2326
- async function ghExtensions() {
2327
- if (!which("gh")) return null;
2328
- const { ok, stdout } = await run("gh", ["extension", "list"]);
2329
- if (!ok) return /* @__PURE__ */ new Map();
2330
- const out = /* @__PURE__ */ new Map();
2331
- for (const line of stdout.split("\n")) {
2332
- const [, repo, version = ""] = line.split(" ");
2333
- if (repo) out.set(repo.trim(), version.trim().replace(/^v/, ""));
2334
- }
2335
- return out;
2336
- }
2337
2319
  function parseJson(text) {
2338
2320
  try {
2339
2321
  return JSON.parse(text);
@@ -2386,11 +2368,10 @@ async function doctor(opts = {}) {
2386
2368
  ...opts.hosts || [],
2387
2369
  ...ghKnownHosts()
2388
2370
  ]);
2389
- const [versions, github, awake, extensions, helpers, tailscale, firewall] = await Promise.all([
2371
+ const [versions, github, awake, helpers, tailscale, firewall] = await Promise.all([
2390
2372
  miseVersions(),
2391
2373
  Promise.all([...hostSet].map(githubHostStatus)),
2392
2374
  canStayAwake(),
2393
- ghExtensions(),
2394
2375
  staleGhHelpers(),
2395
2376
  tailscaleProbe(opts),
2396
2377
  opts.firewall !== void 0 ? opts.firewall : firewallProbe({
@@ -2401,17 +2382,6 @@ async function doctor(opts = {}) {
2401
2382
  })
2402
2383
  ]);
2403
2384
  const tools = TOOLS.map((t) => {
2404
- if (t.ghExtension) {
2405
- const version = extensions?.get(t.ghExtension);
2406
- return {
2407
- id: t.id,
2408
- label: t.label,
2409
- required: !!t.required,
2410
- installed: version !== void 0,
2411
- version: version || void 0,
2412
- installable: extensions !== null
2413
- };
2414
- }
2415
2385
  const found = which(t.bin);
2416
2386
  return {
2417
2387
  id: t.id,
@@ -9508,7 +9478,7 @@ function publishChange(sessionId) {
9508
9478
  const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
9509
9479
  if (row?.workspace_id) {
9510
9480
  const workspaceId = row.workspace_id;
9511
- import("./_DDikKLG_.js").then((m) => m.notifySessionsChanged(workspaceId));
9481
+ import("./_BKkT73fv.js").then((m) => m.notifySessionsChanged(workspaceId));
9512
9482
  return;
9513
9483
  }
9514
9484
  publish("sessions.changed");
@@ -14839,15 +14809,6 @@ async function installMise(opts = {}) {
14839
14809
  await runRemoteScript("https://mise.run", "sh", opts);
14840
14810
  if (!which("mise")) throw new Error("mise install finished but binary not found");
14841
14811
  }
14842
- /** A catalog tool that is a gh extension: gh, not mise, owns it. The name
14843
- * gh's upgrade and remove take is the repo's less its `gh-`. */
14844
- function ghExtension(idOrName) {
14845
- const repo = toolById(idOrName)?.ghExtension;
14846
- return repo ? {
14847
- repo,
14848
- name: repo.slice(repo.indexOf("/") + 1).replace(/^gh-/, "")
14849
- } : null;
14850
- }
14851
14812
  function miseName(idOrName) {
14852
14813
  const t = toolById(idOrName);
14853
14814
  if (t && !t.mise) throw new Error(`${t.label} is a system package. Install it with the system package manager`);
@@ -14856,16 +14817,6 @@ function miseName(idOrName) {
14856
14817
  /** `mise use -g name@version` — installs (or re-pins) a global tool. Accepts
14857
14818
  * catalog ids or any mise registry short name (Settings search). */
14858
14819
  async function installTool(idOrName, { version = "latest", ...opts } = {}) {
14859
- const ext = ghExtension(idOrName);
14860
- if (ext) {
14861
- opts.log?.(`gh extension install ${ext.repo}`);
14862
- await runStreaming("gh", [
14863
- "extension",
14864
- "install",
14865
- ext.repo
14866
- ], opts);
14867
- return;
14868
- }
14869
14820
  await installMise(opts);
14870
14821
  const name = miseName(idOrName);
14871
14822
  opts.log?.(`mise use -g ${name}@${version}`);
@@ -14879,16 +14830,6 @@ async function installTool(idOrName, { version = "latest", ...opts } = {}) {
14879
14830
  /** Move to the newest release and rewrite the global pin to match
14880
14831
  * (`--bump`), so an exact pin such as `1.5.0` updates too. */
14881
14832
  async function updateTool(idOrName, opts = {}) {
14882
- const ext = ghExtension(idOrName);
14883
- if (ext) {
14884
- opts.log?.(`gh extension upgrade ${ext.name}`);
14885
- await runStreaming("gh", [
14886
- "extension",
14887
- "upgrade",
14888
- ext.name
14889
- ], opts);
14890
- return;
14891
- }
14892
14833
  const name = miseName(idOrName);
14893
14834
  opts.log?.(`mise upgrade --bump ${name}`);
14894
14835
  await runStreaming("mise", [
@@ -14902,16 +14843,6 @@ async function updateTool(idOrName, opts = {}) {
14902
14843
  async function removeTool(idOrName, opts = {}) {
14903
14844
  const t = toolById(idOrName);
14904
14845
  if (t?.required) throw new Error(`${t.label} is required`);
14905
- const ext = ghExtension(idOrName);
14906
- if (ext) {
14907
- opts.log?.(`gh extension remove ${ext.name}`);
14908
- await runStreaming("gh", [
14909
- "extension",
14910
- "remove",
14911
- ext.name
14912
- ], opts);
14913
- return;
14914
- }
14915
14846
  const name = miseName(idOrName);
14916
14847
  opts.log?.(`mise unuse -g ${name}`);
14917
14848
  await runStreaming("mise", [
@@ -17645,7 +17576,7 @@ function notifySessionsChanged(workspaceId) {
17645
17576
  async function emitSessionsChanged(workspaceId) {
17646
17577
  try {
17647
17578
  const states = await sessionStates();
17648
- const { teamsOf } = await import("./_ENqPMLjD.js");
17579
+ const { teamsOf } = await import("./_BviTiVOB.js");
17649
17580
  publish("sessions.changed", {
17650
17581
  workspaceId,
17651
17582
  sessions: listSessions(workspaceId).map((s) => ({