@dylanpiercey/work 0.0.203 → 0.0.205

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 (557) hide show
  1. package/bin/work.mjs +220 -63
  2. package/dist/_CWyeRc54.js +2 -0
  3. package/dist/{_B9FeLAO5.js → _C_-lYJlp.js} +394 -114
  4. package/dist/index.mjs +15157 -13688
  5. package/dist/public/assets/_-OlchSkR.js +1 -0
  6. package/dist/public/assets/_2V7v-g6H.js +1 -0
  7. package/dist/public/assets/_5FuvVnQD.js +1 -0
  8. package/dist/public/assets/_5izm_sOI.js +1 -0
  9. package/dist/public/assets/_5izm_sOI.js.br +0 -0
  10. package/dist/public/assets/_6AplNi7Z.js +1 -0
  11. package/dist/public/assets/_6AplNi7Z.js.br +0 -0
  12. package/dist/public/assets/_8YGIApOo.js +1 -0
  13. package/dist/public/assets/{_DITz3wmu.js → _AHFaCvQU.js} +1 -1
  14. package/dist/public/assets/_AHFaCvQU.js.br +0 -0
  15. package/dist/public/assets/_B0mn17Dk.js +1 -0
  16. package/dist/public/assets/_B0roVhqi.js +1 -0
  17. package/dist/public/assets/{_Brbaz_V-.js → _B16QFqgy.js} +1 -1
  18. package/dist/public/assets/_B16QFqgy.js.br +0 -0
  19. package/dist/public/assets/{_D8WMh6gu.js → _B2f-LxUk.js} +1 -1
  20. package/dist/public/assets/_B2f-LxUk.js.br +0 -0
  21. package/dist/public/assets/_B7rzA4Vo.js +1 -0
  22. package/dist/public/assets/_B7rzA4Vo.js.br +0 -0
  23. package/dist/public/assets/_B9EmUOCA.js +1 -0
  24. package/dist/public/assets/_B9EmUOCA.js.br +0 -0
  25. package/dist/public/assets/_BD9gP_kw.js +1 -0
  26. package/dist/public/assets/_BD9gP_kw.js.br +0 -0
  27. package/dist/public/assets/_BDHG8Nmi.js +9 -0
  28. package/dist/public/assets/_BDHG8Nmi.js.br +0 -0
  29. package/dist/public/assets/{_Cl7KlO12.js → _BDWKc_9X.js} +1 -1
  30. package/dist/public/assets/_BDWKc_9X.js.br +0 -0
  31. package/dist/public/assets/{_BeVk3dbG.js → _BE8KQ5PW.js} +1 -1
  32. package/dist/public/assets/_BE8KQ5PW.js.br +0 -0
  33. package/dist/public/assets/{_DCg8UEc3.js → _BFgV8m7c.js} +1 -1
  34. package/dist/public/assets/_BFgV8m7c.js.br +0 -0
  35. package/dist/public/assets/_BHZ-Cv2U.js +1 -0
  36. package/dist/public/assets/{_Do95KzEK.js → _BHcaNOzL.js} +1 -1
  37. package/dist/public/assets/_BHcaNOzL.js.br +0 -0
  38. package/dist/public/assets/_BKM2-z0e.js +1 -0
  39. package/dist/public/assets/_BN0AE2HC.js +1 -0
  40. package/dist/public/assets/_BNORURCQ.js +1 -0
  41. package/dist/public/assets/_BNORURCQ.js.br +0 -0
  42. package/dist/public/assets/_BNm4Ae9_.js +1 -0
  43. package/dist/public/assets/_BNm4Ae9_.js.br +0 -0
  44. package/dist/public/assets/_BOm1SpkD.js +1 -0
  45. package/dist/public/assets/{_C3M50_zF.js → _BPhE-idg.js} +1 -1
  46. package/dist/public/assets/_BPhE-idg.js.br +0 -0
  47. package/dist/public/assets/{_Bx5kmADX.js → _BPtQ2PEh.js} +1 -1
  48. package/dist/public/assets/_BPtQ2PEh.js.br +0 -0
  49. package/dist/public/assets/_BRGmqkNr.js +1 -0
  50. package/dist/public/assets/_BRnslEKE.js +1 -0
  51. package/dist/public/assets/{_B9kU6sMh.js → _BSSQw7B1.js} +1 -1
  52. package/dist/public/assets/_BSSQw7B1.js.br +0 -0
  53. package/dist/public/assets/{_CPH47jXm.js → _BUfLoUyd.js} +56 -56
  54. package/dist/public/assets/_BUfLoUyd.js.br +0 -0
  55. package/dist/public/assets/{_CRZGR7so.js → _BVLWii1t.js} +1 -1
  56. package/dist/public/assets/_BVLWii1t.js.br +0 -0
  57. package/dist/public/assets/{_DEf8mUHj.js → _BWAs5afd.js} +1 -1
  58. package/dist/public/assets/_BWAs5afd.js.br +0 -0
  59. package/dist/public/assets/_BYdCKt3O.js +1 -0
  60. package/dist/public/assets/_B_JOtc1M.js +1 -0
  61. package/dist/public/assets/_BcXiRBkz.js +1 -0
  62. package/dist/public/assets/_BgKdTCD6.js +1 -0
  63. package/dist/public/assets/{_TcqYUNNo.js → _BixjwCO8.js} +1 -1
  64. package/dist/public/assets/_BixjwCO8.js.br +0 -0
  65. package/dist/public/assets/_BkQF1UOD.js +1 -0
  66. package/dist/public/assets/_BkQF1UOD.js.br +0 -0
  67. package/dist/public/assets/_BpGTzAYy.js +1 -0
  68. package/dist/public/assets/{_DqAamLSj.js → _Bpf0k8uS.js} +1 -1
  69. package/dist/public/assets/_Bpf0k8uS.js.br +0 -0
  70. package/dist/public/assets/{_CljaR6t8.js → _BqizK7cx.js} +1 -1
  71. package/dist/public/assets/_BqizK7cx.js.br +0 -0
  72. package/dist/public/assets/{_CArazMIS.js → _BrWsQx9M.js} +1 -1
  73. package/dist/public/assets/_BrWsQx9M.js.br +0 -0
  74. package/dist/public/assets/_BrbA4biE.js +1 -0
  75. package/dist/public/assets/{_CoZYY0F5.js → _Bs2HUAxm.js} +1 -1
  76. package/dist/public/assets/_Bs2HUAxm.js.br +0 -0
  77. package/dist/public/assets/_BsWogZkr.js +1 -0
  78. package/dist/public/assets/_BthptJ6a.js +1 -0
  79. package/dist/public/assets/_BthptJ6a.js.br +0 -0
  80. package/dist/public/assets/_BuxlUghc.js +1 -0
  81. package/dist/public/assets/{_BaiQtGR9.js → _Bv-wpAaO.js} +1 -1
  82. package/dist/public/assets/_Bv-wpAaO.js.br +0 -0
  83. package/dist/public/assets/_BvK6PQ1z.js +1 -0
  84. package/dist/public/assets/{_-K2pkpBq.js → _BytWZ6R5.js} +1 -1
  85. package/dist/public/assets/_BytWZ6R5.js.br +0 -0
  86. package/dist/public/assets/_C-OUSTHo.js +1 -0
  87. package/dist/public/assets/{_C_Lr0eFb.js → _C0Hfu_Ho.js} +1 -1
  88. package/dist/public/assets/_C0Hfu_Ho.js.br +0 -0
  89. package/dist/public/assets/_C0ztthm_.js +1 -0
  90. package/dist/public/assets/{_Dq-Jad5X.js → _C2DkGqn5.js} +1 -1
  91. package/dist/public/assets/_C2DkGqn5.js.br +0 -0
  92. package/dist/public/assets/{_DFjp3R_E.js → _C33cmCxX.js} +1 -1
  93. package/dist/public/assets/_C33cmCxX.js.br +0 -0
  94. package/dist/public/assets/{_B80CP8fn.js → _C3ShTfoQ.js} +1 -1
  95. package/dist/public/assets/_C3ShTfoQ.js.br +0 -0
  96. package/dist/public/assets/_C3tVbCBH.js +1 -0
  97. package/dist/public/assets/_C6M1hDWV.js +1 -0
  98. package/dist/public/assets/_C6P-6sWK.js +1 -0
  99. package/dist/public/assets/_C78RESm0.js +1 -0
  100. package/dist/public/assets/_C7z3JBX0.js +1 -0
  101. package/dist/public/assets/_C8-cikmx.js +1 -0
  102. package/dist/public/assets/_C9thRVyr.js +1 -0
  103. package/dist/public/assets/{_GnLkrWZM.js → _CBBTd56s.js} +1 -1
  104. package/dist/public/assets/_CBBTd56s.js.br +0 -0
  105. package/dist/public/assets/_CEGHO2aQ.js +1 -0
  106. package/dist/public/assets/{_BZ3C3l3R.js → _CFF1bIG3.js} +1 -1
  107. package/dist/public/assets/_CFF1bIG3.js.br +0 -0
  108. package/dist/public/assets/{_vunrMsGK.js → _CGmOePAM.js} +1 -1
  109. package/dist/public/assets/_CGmOePAM.js.br +0 -0
  110. package/dist/public/assets/_CHOAR75o.js +1 -0
  111. package/dist/public/assets/_CIK0aYGO.js +1422 -0
  112. package/dist/public/assets/_CIK0aYGO.js.br +0 -0
  113. package/dist/public/assets/_CIM_QKij.js +1 -0
  114. package/dist/public/assets/_CJzM23DW.js +2 -0
  115. package/dist/public/assets/_CJzM23DW.js.br +0 -0
  116. package/dist/public/assets/_CK5CtA9f.js +1 -0
  117. package/dist/public/assets/_CLVYQ-74.js +1 -0
  118. package/dist/public/assets/_CLVYQ-74.js.br +0 -0
  119. package/dist/public/assets/{_up7lLRgA.js → _CLeF1FF3.js} +1 -1
  120. package/dist/public/assets/_CPm0qMfS.js +1 -0
  121. package/dist/public/assets/_CQWTMS1P.js +1 -0
  122. package/dist/public/assets/_CQWTMS1P.js.br +0 -0
  123. package/dist/public/assets/_CQgVf_hl.js +1 -0
  124. package/dist/public/assets/_CRzep8vQ.js +1 -0
  125. package/dist/public/assets/_CVY_H9pO.js +1 -0
  126. package/dist/public/assets/_CVlglWWP.js +1 -0
  127. package/dist/public/assets/_CYtOhTGb.js +1 -0
  128. package/dist/public/assets/_CZP-vnK2.js +1 -0
  129. package/dist/public/assets/_CZP-vnK2.js.br +0 -0
  130. package/dist/public/assets/_C_aWNVgg.js +1 -0
  131. package/dist/public/assets/_C_fU39wg.js +1 -0
  132. package/dist/public/assets/{_CSmKiIv8.js → _CaWlTbQM.js} +1 -1
  133. package/dist/public/assets/_Ca_UkEY3.js +1 -0
  134. package/dist/public/assets/_Ca_UkEY3.js.br +8 -0
  135. package/dist/public/assets/_CbKQ4tM7.js +1 -0
  136. package/dist/public/assets/_CbndvCa9.js +1 -0
  137. package/dist/public/assets/_CdgFbcw6.js +1 -0
  138. package/dist/public/assets/_Cf0kh0ya.js +1 -0
  139. package/dist/public/assets/_Cf0kh0ya.js.br +0 -0
  140. package/dist/public/assets/_CffIUDL_.js +1 -0
  141. package/dist/public/assets/_CffIUDL_.js.br +0 -0
  142. package/dist/public/assets/_CfrSfMqj.js +1 -0
  143. package/dist/public/assets/_CfrSfMqj.js.br +0 -0
  144. package/dist/public/assets/_CoHLhCNH.js +1 -0
  145. package/dist/public/assets/{_D07_FXWo.js → _CpK94htG.js} +1 -1
  146. package/dist/public/assets/_CqrXDSP9.js +1 -0
  147. package/dist/public/assets/_Csdgg-p8.js +1 -0
  148. package/dist/public/assets/_Csdgg-p8.js.br +0 -0
  149. package/dist/public/assets/{_C0K-WRJD.js → _Csvc0jmZ.js} +1 -1
  150. package/dist/public/assets/_Csvc0jmZ.js.br +0 -0
  151. package/dist/public/assets/_CtdLytfI.js +1 -0
  152. package/dist/public/assets/{_S99TppFt.js → _CtxNwohv.js} +1 -1
  153. package/dist/public/assets/_CtxNwohv.js.br +0 -0
  154. package/dist/public/assets/_CuApWap_.js +86 -0
  155. package/dist/public/assets/_CuApWap_.js.br +0 -0
  156. package/dist/public/assets/_CvBjVI0v.js +1 -0
  157. package/dist/public/assets/_CwZRDJQ2.js +1 -0
  158. package/dist/public/assets/_CwZRDJQ2.js.br +0 -0
  159. package/dist/public/assets/_CxyFAuJT.js +1 -0
  160. package/dist/public/assets/_CxyFAuJT.js.br +0 -0
  161. package/dist/public/assets/_D00q6XFi.js +1 -0
  162. package/dist/public/assets/_D00q6XFi.js.br +0 -0
  163. package/dist/public/assets/{_8Q9P2uHp.js → _D0rv_4FK.js} +1 -1
  164. package/dist/public/assets/_D0rv_4FK.js.br +0 -0
  165. package/dist/public/assets/{_CJoG6S3-.js → _D478nKDM.js} +1 -1
  166. package/dist/public/assets/_D478nKDM.js.br +0 -0
  167. package/dist/public/assets/{_CXBw8HMs.js → _D5W5ntHo.js} +1 -1
  168. package/dist/public/assets/_D5W5ntHo.js.br +0 -0
  169. package/dist/public/assets/_D5guyfCP.js +1 -0
  170. package/dist/public/assets/{_3ewKhZLc.js → _D7FiuTy-.js} +1 -1
  171. package/dist/public/assets/_D7FiuTy-.js.br +0 -0
  172. package/dist/public/assets/_DA1hU7GY.js +1 -0
  173. package/dist/public/assets/_DAGUL1Vl.js +6 -0
  174. package/dist/public/assets/_DAGUL1Vl.js.br +0 -0
  175. package/dist/public/assets/{_gkUCl--6.js → _DCaVKBqt.js} +1 -1
  176. package/dist/public/assets/_DCaVKBqt.js.br +0 -0
  177. package/dist/public/assets/_DFRZGT2q.js +1 -0
  178. package/dist/public/assets/_DFRZGT2q.js.br +0 -0
  179. package/dist/public/assets/_DGDoR_gX.js +1 -0
  180. package/dist/public/assets/_DGDoR_gX.js.br +0 -0
  181. package/dist/public/assets/_DJl1sf70.js +1 -0
  182. package/dist/public/assets/_DMGdwfSr.js +1 -0
  183. package/dist/public/assets/_DMGdwfSr.js.br +0 -0
  184. package/dist/public/assets/{_CrONT8um.js → _DMdBg_GK.js} +1 -1
  185. package/dist/public/assets/_DMdBg_GK.js.br +0 -0
  186. package/dist/public/assets/{_DVs9_2EC.js → _DPOlYZjX.js} +1 -1
  187. package/dist/public/assets/_DPOlYZjX.js.br +0 -0
  188. package/dist/public/assets/{_DH7j4yfd.js → _DSCUag9O.js} +1 -1
  189. package/dist/public/assets/_DSCUag9O.js.br +0 -0
  190. package/dist/public/assets/_DUzx5eZR.js +1 -0
  191. package/dist/public/assets/_DUzx5eZR.js.br +0 -0
  192. package/dist/public/assets/{_BDdtj9Cq.js → _DV0W2yTo.js} +1 -1
  193. package/dist/public/assets/_DV0W2yTo.js.br +0 -0
  194. package/dist/public/assets/_DW6rnS22.js +1 -0
  195. package/dist/public/assets/_DW6rnS22.js.br +0 -0
  196. package/dist/public/assets/_DY6s_kAl.js +1 -0
  197. package/dist/public/assets/{_rHKeW7zh.js → _Da0Zcyhl.js} +1 -1
  198. package/dist/public/assets/_Dbyzv-e6.js +1 -0
  199. package/dist/public/assets/_Dbyzv-e6.js.br +0 -0
  200. package/dist/public/assets/{_B66w2fqU.js → _DcFRlTYB.js} +1 -1
  201. package/dist/public/assets/_DcFRlTYB.js.br +0 -0
  202. package/dist/public/assets/_DiThv-ws.js +1 -0
  203. package/dist/public/assets/_Djho-FAH.js +1 -0
  204. package/dist/public/assets/_Djho-FAH.js.br +0 -0
  205. package/dist/public/assets/_DkfyvJLz.js +1 -0
  206. package/dist/public/assets/_DmdewGjf.js +1 -0
  207. package/dist/public/assets/{_DY6PUWO1.js → _DnhVTHg1.js} +1 -1
  208. package/dist/public/assets/_DnhVTHg1.js.br +0 -0
  209. package/dist/public/assets/_Dq4Lv0Cs.js +1 -0
  210. package/dist/public/assets/_Dq4Lv0Cs.js.br +0 -0
  211. package/dist/public/assets/_DqxOu378.js +1 -0
  212. package/dist/public/assets/{_BmZVM8Ww.js → _DrpXP57c.js} +1 -1
  213. package/dist/public/assets/_DrpXP57c.js.br +0 -0
  214. package/dist/public/assets/{_DmGawoV0.js → _DsAV3t8S.js} +1 -1
  215. package/dist/public/assets/_DsAV3t8S.js.br +0 -0
  216. package/dist/public/assets/{_q4Q8wf1-.js → _DvNEiAgs.js} +1 -1
  217. package/dist/public/assets/_DvNEiAgs.js.br +0 -0
  218. package/dist/public/assets/{_e-EoIF14.js → _Dvu8aO9d.js} +1 -1
  219. package/dist/public/assets/_Dvu8aO9d.js.br +0 -0
  220. package/dist/public/assets/_DyUJCQsE.js +1 -0
  221. package/dist/public/assets/_DyUJCQsE.js.br +0 -0
  222. package/dist/public/assets/_DzJPXetd.js +1 -0
  223. package/dist/public/assets/_DzJPXetd.js.br +0 -0
  224. package/dist/public/assets/{_CkwMzG0u.js → _DzOgre70.js} +1 -1
  225. package/dist/public/assets/_DzOgre70.js.br +0 -0
  226. package/dist/public/assets/_FXPfeF9Q.js +1 -0
  227. package/dist/public/assets/{_CKO6VeWe.js → _G6zi9_6i.js} +1 -1
  228. package/dist/public/assets/_G6zi9_6i.js.br +0 -0
  229. package/dist/public/assets/_I2leMoLk.js +1 -0
  230. package/dist/public/assets/_IWsH3JbM.js +1 -0
  231. package/dist/public/assets/{_DhHO6Tuz.js → _Jsehj7rl.js} +1 -1
  232. package/dist/public/assets/_Jsehj7rl.js.br +0 -0
  233. package/dist/public/assets/_NGMwjBBG.js +1 -0
  234. package/dist/public/assets/{_Bwo88m9W.js → _QljbgS5l.js} +1 -1
  235. package/dist/public/assets/_QljbgS5l.js.br +0 -0
  236. package/dist/public/assets/{_CgLkQJNG.js → _Z8l8zhFZ.js} +1 -1
  237. package/dist/public/assets/_Z8l8zhFZ.js.br +0 -0
  238. package/dist/public/assets/__GnUfSxE.js +1 -0
  239. package/dist/public/assets/__GnUfSxE.js.br +0 -0
  240. package/dist/public/assets/_cD7JRpZk.js +1 -0
  241. package/dist/public/assets/_dP2ZLG1O.js +1 -0
  242. package/dist/public/assets/_dP2ZLG1O.js.br +0 -0
  243. package/dist/public/assets/_fQTAXQ2A.js +1 -0
  244. package/dist/public/assets/_fQTAXQ2A.js.br +0 -0
  245. package/dist/public/assets/_gIJHrFck.js +1 -0
  246. package/dist/public/assets/_gIJHrFck.js.br +0 -0
  247. package/dist/public/assets/{_BERyw-_I.js → _iqlUPvpu.js} +1 -1
  248. package/dist/public/assets/_iqlUPvpu.js.br +0 -0
  249. package/dist/public/assets/_m2OvafhN.js +1 -0
  250. package/dist/public/assets/_mNtBBYrx.js +1 -0
  251. package/dist/public/assets/_o4vB6uaf.js +1 -0
  252. package/dist/public/assets/{_DSn_einI.js → _pTRVL6_Z.js} +1 -1
  253. package/dist/public/assets/_pTRVL6_Z.js.br +0 -0
  254. package/dist/public/assets/_sayhcKVq.js +1 -0
  255. package/dist/public/assets/_sdf2KG0s.js +1 -0
  256. package/dist/public/assets/_sdf2KG0s.js.br +0 -0
  257. package/dist/public/assets/_tsg5j2Lv.js +1 -0
  258. package/dist/public/assets/_uTzPJzX0.js +1 -0
  259. package/dist/public/assets/_vIGuFBIb.js +1 -0
  260. package/dist/public/assets/_vIGuFBIb.js.br +0 -0
  261. package/dist/public/assets/_yJE0vu9j.js +1 -0
  262. package/dist/public/assets/_yJE0vu9j.js.br +0 -0
  263. package/dist/public/assets/_z9XIIgTI.js +1 -0
  264. package/dist/public/assets/{app-page-a-M15PMY.css → app-shell-8Pd1rc7u.css} +1 -1
  265. package/dist/public/assets/app-shell-8Pd1rc7u.css.br +0 -0
  266. package/dist/public/assets/command-palette-B4o6jF8Z.css +1 -0
  267. package/dist/public/assets/command-palette-B4o6jF8Z.css.br +0 -0
  268. package/dist/public/assets/files-view-BnN1VOCi.css +1 -0
  269. package/dist/public/assets/files-view-BnN1VOCi.css.br +0 -0
  270. package/dist/public/assets/files-view-cAPnyoQZ.js +2 -0
  271. package/dist/public/assets/group.css.ts-CXNej9ok.css +1 -0
  272. package/dist/public/assets/group.css.ts-CXNej9ok.css.br +0 -0
  273. package/dist/public/assets/{icon-search-CiIAr7NA.css → icon-search-DcAn99Uv.css} +1 -1
  274. package/dist/public/assets/icon-search-DcAn99Uv.css.br +0 -0
  275. package/dist/public/assets/manage-workspace-BMzLgYX3.css +1 -0
  276. package/dist/public/assets/manage-workspace-DhLNff0-.js +2 -0
  277. package/dist/public/assets/new-BqXHbQlu.js +1 -0
  278. package/dist/public/assets/new-workspace-B3ylje_g.css +1 -0
  279. package/dist/public/assets/new-workspace-B3ylje_g.css.br +0 -0
  280. package/dist/public/assets/new-workspace-RR8h-qIh.js +2 -0
  281. package/dist/public/assets/port-chip-Bt0w2MzG.css +1 -0
  282. package/dist/public/assets/port-chip-Bt0w2MzG.css.br +0 -0
  283. package/dist/public/assets/prompt-dialog-B_qzbXMZ.css +1 -0
  284. package/dist/public/assets/prompt-dialog-B_qzbXMZ.css.br +0 -0
  285. package/dist/public/assets/quick-open-CXyrWkbA.css +1 -0
  286. package/dist/public/assets/quick-open-CXyrWkbA.css.br +0 -0
  287. package/dist/public/assets/repo-picker-CpKpWL1n.css +1 -0
  288. package/dist/public/assets/repo-picker-CpKpWL1n.css.br +0 -0
  289. package/dist/public/assets/review-view-CTtdvipj.js +2 -0
  290. package/dist/public/assets/review-view-tq2OyY98.css +1 -0
  291. package/dist/public/assets/review-view-tq2OyY98.css.br +0 -0
  292. package/dist/public/assets/section-D7RUq5Cz.css +1 -0
  293. package/dist/public/assets/section-D7RUq5Cz.css.br +0 -0
  294. package/dist/public/assets/settings-BqXHbQlu.js +1 -0
  295. package/dist/public/assets/settings-page-Btvx32iZ.js +2 -0
  296. package/dist/public/assets/settings-page-Cnmgnr_0.css +1 -0
  297. package/dist/public/assets/settings-page-Cnmgnr_0.css.br +0 -0
  298. package/dist/public/assets/skill-row-CyviHufk.css +1 -0
  299. package/dist/public/assets/sso-auth-BRNOE7tU.css +1 -0
  300. package/dist/public/assets/sso-auth-BRNOE7tU.css.br +0 -0
  301. package/dist/public/assets/w-BqXHbQlu.js +1 -0
  302. package/dist/public/assets/w._-BqXHbQlu.js +1 -0
  303. package/dist/public/assets/w._-Nf-ixmkH.js +1 -0
  304. package/dist/public/assets/w._-cjUl7ond.js +1 -0
  305. package/dist/public/assets/worker-hkE5tvP8.js +164 -0
  306. package/dist/public/assets/worker-hkE5tvP8.js.br +0 -0
  307. package/lib/review/markdown.mjs +23 -11
  308. package/lib/setup/doctor.d.mts +5 -0
  309. package/lib/setup/doctor.mjs +31 -1
  310. package/lib/setup/install.mjs +68 -9
  311. package/lib/setup/listen.d.mts +5 -0
  312. package/lib/setup/listen.mjs +23 -0
  313. package/lib/share/manifest.mjs +8 -3
  314. package/package.json +7 -7
  315. package/scripts/migrate.mjs +169 -89
  316. package/dist/_7W8iLTql.js +0 -2
  317. package/dist/public/assets/_-K2pkpBq.js.br +0 -0
  318. package/dist/public/assets/_-O6dm4G6.js +0 -1
  319. package/dist/public/assets/_-tNsWCRW.js +0 -1
  320. package/dist/public/assets/_3aic_W0y.js +0 -1
  321. package/dist/public/assets/_3ewKhZLc.js.br +0 -0
  322. package/dist/public/assets/_3xHfzmVK.js +0 -1
  323. package/dist/public/assets/_3xHfzmVK.js.br +0 -0
  324. package/dist/public/assets/_772AjyQx.js +0 -1
  325. package/dist/public/assets/_772AjyQx.js.br +0 -0
  326. package/dist/public/assets/_8Q9P2uHp.js.br +0 -0
  327. package/dist/public/assets/_AoYqPW6v.js +0 -1
  328. package/dist/public/assets/_AoYqPW6v.js.br +0 -0
  329. package/dist/public/assets/_B1q5pQla.js +0 -1
  330. package/dist/public/assets/_B1q5pQla.js.br +0 -0
  331. package/dist/public/assets/_B66w2fqU.js.br +0 -0
  332. package/dist/public/assets/_B80CP8fn.js.br +0 -0
  333. package/dist/public/assets/_B9FnTf4h.js +0 -1
  334. package/dist/public/assets/_B9kU6sMh.js.br +0 -0
  335. package/dist/public/assets/_BADK8qnN.js +0 -1
  336. package/dist/public/assets/_BADK8qnN.js.br +0 -0
  337. package/dist/public/assets/_BD2qsrlz.js +0 -1
  338. package/dist/public/assets/_BDdtj9Cq.js.br +0 -0
  339. package/dist/public/assets/_BERyw-_I.js.br +0 -0
  340. package/dist/public/assets/_BH5mQvfn.js +0 -1
  341. package/dist/public/assets/_BK0E9Er2.js +0 -1
  342. package/dist/public/assets/_BK0E9Er2.js.br +0 -0
  343. package/dist/public/assets/_BKkFTJtI.js +0 -1
  344. package/dist/public/assets/_BKkFTJtI.js.br +0 -0
  345. package/dist/public/assets/_BOBHk1-a.js +0 -1
  346. package/dist/public/assets/_BOk1AEgN.js +0 -1
  347. package/dist/public/assets/_BZ3C3l3R.js.br +0 -0
  348. package/dist/public/assets/_BaiQtGR9.js.br +0 -0
  349. package/dist/public/assets/_BdUIic1U.js +0 -1
  350. package/dist/public/assets/_BdUIic1U.js.br +0 -0
  351. package/dist/public/assets/_BeVk3dbG.js.br +0 -0
  352. package/dist/public/assets/_Bedi1JZC.js +0 -1
  353. package/dist/public/assets/_BgCpq5St.js +0 -1
  354. package/dist/public/assets/_BjXiH2oW.js +0 -1
  355. package/dist/public/assets/_BjXiH2oW.js.br +0 -0
  356. package/dist/public/assets/_Bk31AYSk.js +0 -1
  357. package/dist/public/assets/_Bk31AYSk.js.br +0 -0
  358. package/dist/public/assets/_BmZVM8Ww.js.br +0 -0
  359. package/dist/public/assets/_BqgMkZ3f.js +0 -1
  360. package/dist/public/assets/_Brbaz_V-.js.br +0 -0
  361. package/dist/public/assets/_Bs9HVA9T.js +0 -1
  362. package/dist/public/assets/_Bwo88m9W.js.br +0 -0
  363. package/dist/public/assets/_Bx5kmADX.js.br +0 -0
  364. package/dist/public/assets/_BzU-RPev.js +0 -1
  365. package/dist/public/assets/_BzVRtEsz.js +0 -1
  366. package/dist/public/assets/_C0K-WRJD.js.br +0 -0
  367. package/dist/public/assets/_C3M50_zF.js.br +0 -0
  368. package/dist/public/assets/_C5l9z0N5.js +0 -1
  369. package/dist/public/assets/_CArazMIS.js.br +0 -0
  370. package/dist/public/assets/_CBZB5Yxv.js +0 -1
  371. package/dist/public/assets/_CBZB5Yxv.js.br +0 -0
  372. package/dist/public/assets/_CCDOu5-k.js +0 -1
  373. package/dist/public/assets/_CCDOu5-k.js.br +0 -0
  374. package/dist/public/assets/_CCnHpcK_.js +0 -1
  375. package/dist/public/assets/_CDMh_Czk.js +0 -1
  376. package/dist/public/assets/_CE_CwnMm.js +0 -1
  377. package/dist/public/assets/_CG4M2EXP.js +0 -1
  378. package/dist/public/assets/_CHEpaVmI.js +0 -1
  379. package/dist/public/assets/_CHEpaVmI.js.br +0 -0
  380. package/dist/public/assets/_CHxSYsqp.js +0 -1
  381. package/dist/public/assets/_CJMlU8h-.js +0 -1
  382. package/dist/public/assets/_CJoG6S3-.js.br +0 -0
  383. package/dist/public/assets/_CKO6VeWe.js.br +0 -0
  384. package/dist/public/assets/_COzp254y.js +0 -1
  385. package/dist/public/assets/_CPH47jXm.js.br +0 -0
  386. package/dist/public/assets/_CRZGR7so.js.br +0 -0
  387. package/dist/public/assets/_CTPBS0LC.js +0 -1
  388. package/dist/public/assets/_CTPBS0LC.js.br +0 -0
  389. package/dist/public/assets/_CThA4lbu.js +0 -1
  390. package/dist/public/assets/_CThA4lbu.js.br +0 -0
  391. package/dist/public/assets/_CXBw8HMs.js.br +0 -0
  392. package/dist/public/assets/_CXzJ6bil.js +0 -1
  393. package/dist/public/assets/_CYUNskmo.js +0 -1
  394. package/dist/public/assets/_CYUNskmo.js.br +0 -0
  395. package/dist/public/assets/_C_Lr0eFb.js.br +0 -0
  396. package/dist/public/assets/_CbnW4odW.js +0 -1
  397. package/dist/public/assets/_Cfuem2T_.js +0 -1
  398. package/dist/public/assets/_Cg-uvNvy.js +0 -1
  399. package/dist/public/assets/_Cg-uvNvy.js.br +0 -0
  400. package/dist/public/assets/_CgLkQJNG.js.br +0 -0
  401. package/dist/public/assets/_CkwMzG0u.js.br +0 -0
  402. package/dist/public/assets/_Cl7KlO12.js.br +0 -0
  403. package/dist/public/assets/_ClSzF1-k.js +0 -1
  404. package/dist/public/assets/_CljaR6t8.js.br +0 -0
  405. package/dist/public/assets/_CoZYY0F5.js.br +0 -0
  406. package/dist/public/assets/_CpposQLo.js +0 -1
  407. package/dist/public/assets/_CpposQLo.js.br +0 -0
  408. package/dist/public/assets/_CrONT8um.js.br +0 -0
  409. package/dist/public/assets/_Cu1guAvn.js +0 -1
  410. package/dist/public/assets/_CygSeSG1.js +0 -1
  411. package/dist/public/assets/_CygSeSG1.js.br +0 -0
  412. package/dist/public/assets/_Czf21qbL.js +0 -1
  413. package/dist/public/assets/_D-2kyUyG.js +0 -9
  414. package/dist/public/assets/_D-2kyUyG.js.br +0 -0
  415. package/dist/public/assets/_D3Je7YVw.js +0 -1
  416. package/dist/public/assets/_D4xPo0HZ.js +0 -1
  417. package/dist/public/assets/_D605QHvK.js +0 -1
  418. package/dist/public/assets/_D8WMh6gu.js.br +0 -0
  419. package/dist/public/assets/_D8ve50C6.js +0 -1
  420. package/dist/public/assets/_D8ve50C6.js.br +0 -0
  421. package/dist/public/assets/_D9b8PlSh.js +0 -2640
  422. package/dist/public/assets/_D9b8PlSh.js.br +0 -0
  423. package/dist/public/assets/_D9cUlE3a.js +0 -1
  424. package/dist/public/assets/_D9cUlE3a.js.br +0 -0
  425. package/dist/public/assets/_DCg8UEc3.js.br +0 -0
  426. package/dist/public/assets/_DEf8mUHj.js.br +0 -0
  427. package/dist/public/assets/_DFjp3R_E.js.br +0 -0
  428. package/dist/public/assets/_DGLS_XIM.js +0 -1
  429. package/dist/public/assets/_DH7j4yfd.js.br +0 -0
  430. package/dist/public/assets/_DITz3wmu.js.br +0 -0
  431. package/dist/public/assets/_DIbtkkt7.js +0 -1
  432. package/dist/public/assets/_DIhhsT9E.js +0 -1
  433. package/dist/public/assets/_DJ16po4M.js +0 -1
  434. package/dist/public/assets/_DKPOXVYN.js +0 -1
  435. package/dist/public/assets/_DKPOXVYN.js.br +0 -0
  436. package/dist/public/assets/_DMVwpwke.js +0 -1
  437. package/dist/public/assets/_DMVwpwke.js.br +0 -0
  438. package/dist/public/assets/_DMWaKaIG.js +0 -1
  439. package/dist/public/assets/_DOXCLF1P.js +0 -1
  440. package/dist/public/assets/_DQYtsGep.js +0 -1
  441. package/dist/public/assets/_DRNYHvLK.js +0 -86
  442. package/dist/public/assets/_DRNYHvLK.js.br +0 -0
  443. package/dist/public/assets/_DSn_einI.js.br +0 -0
  444. package/dist/public/assets/_DVs9_2EC.js.br +0 -0
  445. package/dist/public/assets/_DY6PUWO1.js.br +0 -0
  446. package/dist/public/assets/_DYq5I1a_.js +0 -1
  447. package/dist/public/assets/_DZaWjeov.js +0 -1
  448. package/dist/public/assets/_DZaWjeov.js.br +0 -0
  449. package/dist/public/assets/_D_zYO-l8.js +0 -1
  450. package/dist/public/assets/_D_zYO-l8.js.br +0 -0
  451. package/dist/public/assets/_Db15f2uj.js +0 -1
  452. package/dist/public/assets/_DcyKrmeq.js +0 -1
  453. package/dist/public/assets/_DdfXpdn_.js +0 -1
  454. package/dist/public/assets/_DdfXpdn_.js.br +0 -0
  455. package/dist/public/assets/_DevPwgsp.js +0 -1
  456. package/dist/public/assets/_DgwVeEsD.js +0 -6
  457. package/dist/public/assets/_DgwVeEsD.js.br +0 -0
  458. package/dist/public/assets/_DhHO6Tuz.js.br +0 -0
  459. package/dist/public/assets/_DkSuDAhs.js +0 -1
  460. package/dist/public/assets/_DmGawoV0.js.br +0 -0
  461. package/dist/public/assets/_DnlCrUDV.js +0 -2
  462. package/dist/public/assets/_DnlCrUDV.js.br +0 -0
  463. package/dist/public/assets/_Do95KzEK.js.br +0 -0
  464. package/dist/public/assets/_Dob_Fmbm.js +0 -1
  465. package/dist/public/assets/_Dq-Jad5X.js.br +0 -0
  466. package/dist/public/assets/_DqAamLSj.js.br +0 -0
  467. package/dist/public/assets/_DsT0GWgJ.js +0 -1
  468. package/dist/public/assets/_Ds_ya4mr.js +0 -1
  469. package/dist/public/assets/_Dsv1qAjm.js +0 -1
  470. package/dist/public/assets/_Dsv1qAjm.js.br +0 -0
  471. package/dist/public/assets/_DuR6ueoD.js +0 -1
  472. package/dist/public/assets/_Dy4QBSz2.js +0 -1
  473. package/dist/public/assets/_GHV_3jJp.js +0 -1
  474. package/dist/public/assets/_GN2ORfhz.js +0 -1
  475. package/dist/public/assets/_GnLkrWZM.js.br +0 -0
  476. package/dist/public/assets/_IsgXwMDs.js +0 -1
  477. package/dist/public/assets/_ItxI9nk3.js +0 -1
  478. package/dist/public/assets/_ItxI9nk3.js.br +0 -0
  479. package/dist/public/assets/_IzVuLVN1.js +0 -1
  480. package/dist/public/assets/_JekmkJTS.js +0 -1
  481. package/dist/public/assets/_JekmkJTS.js.br +0 -0
  482. package/dist/public/assets/_KiUN85cI.js +0 -1
  483. package/dist/public/assets/_NeT1bfJI.js +0 -1
  484. package/dist/public/assets/_QWPZ0V06.js +0 -1
  485. package/dist/public/assets/_Qs4Lwkwv.js +0 -1
  486. package/dist/public/assets/_Qs4Lwkwv.js.br +0 -0
  487. package/dist/public/assets/_RNDgNS1c.js +0 -1
  488. package/dist/public/assets/_RVKQdbGj.js +0 -1
  489. package/dist/public/assets/_RwgpF7LC.js +0 -1
  490. package/dist/public/assets/_RwgpF7LC.js.br +0 -0
  491. package/dist/public/assets/_S99TppFt.js.br +0 -0
  492. package/dist/public/assets/_S_seG_by.js +0 -1
  493. package/dist/public/assets/_TcqYUNNo.js.br +0 -0
  494. package/dist/public/assets/_WkU7AijT.js +0 -1
  495. package/dist/public/assets/__bV-79mJ.js +0 -1
  496. package/dist/public/assets/_e-EoIF14.js.br +0 -0
  497. package/dist/public/assets/_eutX35zw.js +0 -1
  498. package/dist/public/assets/_eutX35zw.js.br +0 -0
  499. package/dist/public/assets/_gkUCl--6.js.br +0 -0
  500. package/dist/public/assets/_kmXANkGr.js +0 -1
  501. package/dist/public/assets/_kmXANkGr.js.br +0 -0
  502. package/dist/public/assets/_kqic6B_q.js +0 -1
  503. package/dist/public/assets/_kqic6B_q.js.br +0 -0
  504. package/dist/public/assets/_oXuFhEmo.js +0 -1
  505. package/dist/public/assets/_q4Q8wf1-.js.br +0 -0
  506. package/dist/public/assets/_ryYtmLmM.js +0 -1
  507. package/dist/public/assets/_tHa-ZHkQ.js +0 -1
  508. package/dist/public/assets/_vunrMsGK.js.br +0 -0
  509. package/dist/public/assets/_wjT9tLjb.js +0 -1
  510. package/dist/public/assets/_wjT9tLjb.js.br +0 -0
  511. package/dist/public/assets/_xw7rRdJa.js +0 -1
  512. package/dist/public/assets/_y1uwlPvR.js +0 -1
  513. package/dist/public/assets/_z3bkSqoV.js +0 -1
  514. package/dist/public/assets/_z3bkSqoV.js.br +0 -0
  515. package/dist/public/assets/app-page-a-M15PMY.css.br +0 -0
  516. package/dist/public/assets/command-palette-DnTWF_r2.css +0 -1
  517. package/dist/public/assets/command-palette-DnTWF_r2.css.br +0 -0
  518. package/dist/public/assets/files-view-C_Ak1o_u.css +0 -1
  519. package/dist/public/assets/files-view-C_Ak1o_u.css.br +0 -0
  520. package/dist/public/assets/files-view-D29gwNTU.js +0 -2
  521. package/dist/public/assets/group.css.ts-bSDNRl7w.css +0 -1
  522. package/dist/public/assets/group.css.ts-bSDNRl7w.css.br +0 -0
  523. package/dist/public/assets/icon-search-CiIAr7NA.css.br +0 -0
  524. package/dist/public/assets/key-bar.css.ts-Bku3uER9.css +0 -1
  525. package/dist/public/assets/key-bar.css.ts-Bku3uER9.css.br +0 -0
  526. package/dist/public/assets/manage-workspace-FNt9673q.css +0 -1
  527. package/dist/public/assets/manage-workspace-LPUu3-Rp.js +0 -2
  528. package/dist/public/assets/new-pJJ6ZABY.js +0 -1
  529. package/dist/public/assets/new-workspace-Bj3jwBnp.css +0 -1
  530. package/dist/public/assets/new-workspace-Bj3jwBnp.css.br +0 -0
  531. package/dist/public/assets/new-workspace-Cukm9rzJ.js +0 -2
  532. package/dist/public/assets/port-chip-B2VAUY_i.css +0 -1
  533. package/dist/public/assets/port-chip-B2VAUY_i.css.br +0 -0
  534. package/dist/public/assets/prompt-dialog-CtmcwmFw.css +0 -1
  535. package/dist/public/assets/prompt-dialog-CtmcwmFw.css.br +0 -0
  536. package/dist/public/assets/quick-open-CuR4WzpL.css +0 -1
  537. package/dist/public/assets/quick-open-CuR4WzpL.css.br +0 -0
  538. package/dist/public/assets/repo-picker-DFTPYkNQ.css +0 -1
  539. package/dist/public/assets/repo-picker-DFTPYkNQ.css.br +0 -2
  540. package/dist/public/assets/review-view-B6bsrcls.css +0 -1
  541. package/dist/public/assets/review-view-B6bsrcls.css.br +0 -0
  542. package/dist/public/assets/review-view-BNyQ646Y.js +0 -2
  543. package/dist/public/assets/section-aiv_79hg.css +0 -1
  544. package/dist/public/assets/section-aiv_79hg.css.br +0 -0
  545. package/dist/public/assets/settings-pJJ6ZABY.js +0 -1
  546. package/dist/public/assets/settings-page-DAwtsEQ9.css +0 -1
  547. package/dist/public/assets/settings-page-DAwtsEQ9.css.br +0 -0
  548. package/dist/public/assets/settings-page-DsbRNeSq.js +0 -2
  549. package/dist/public/assets/skill-row-bJ0ycL8_.css +0 -1
  550. package/dist/public/assets/sso-auth-JILClN0h.css +0 -1
  551. package/dist/public/assets/sso-auth-JILClN0h.css.br +0 -0
  552. package/dist/public/assets/w-pJJ6ZABY.js +0 -1
  553. package/dist/public/assets/w._-C4FeaeOO.js +0 -1
  554. package/dist/public/assets/w._-DChqn_ll.js +0 -1
  555. package/dist/public/assets/w._-pJJ6ZABY.js +0 -1
  556. package/dist/public/assets/worker-BK3lyuKh.js +0 -164
  557. package/dist/public/assets/worker-BK3lyuKh.js.br +0 -0
package/bin/work.mjs CHANGED
@@ -28,6 +28,7 @@ import { fileURLToPath } from "node:url";
28
28
  import { createRequire } from "node:module";
29
29
  import { doctor, formatDoctor, setupPath } from "../lib/setup/doctor.mjs";
30
30
  import { installTool } from "../lib/setup/install.mjs";
31
+ import { dialHost, listenStream } from "../lib/setup/listen.mjs";
31
32
  import { commentMarkdown } from "../lib/review/markdown.mjs";
32
33
  import { formatInvite, parseInvite } from "../lib/share/manifest.mjs";
33
34
  import { duration, pctText } from "../lib/usage/format.mjs";
@@ -82,7 +83,7 @@ switch (command) {
82
83
  // definition; WORK_SERVICE_EXEC points it at a checkout's run-prod.sh.
83
84
  if (!installService()) {
84
85
  process.exitCode = 1;
85
- } else if (await waitForServer(serviceEnv().PORT)) {
86
+ } else if (await waitForServer()) {
86
87
  log(`done — http://localhost:${serviceEnv().PORT}`);
87
88
  } else {
88
89
  warn(
@@ -91,6 +92,12 @@ switch (command) {
91
92
  process.exitCode = 1;
92
93
  }
93
94
  break;
95
+ case "migrate":
96
+ // The one-shot cleanups alone, against the service's settings (and the
97
+ // checkout's .env.local when WORK_SERVICE_EXEC names one). Used by
98
+ // scripts/update.sh ahead of setup-prod.sh.
99
+ process.exitCode = migrate();
100
+ break;
94
101
  case "doctor":
95
102
  await doctorCmd();
96
103
  break;
@@ -135,7 +142,7 @@ switch (command) {
135
142
  break;
136
143
  default:
137
144
  console.log(
138
- `work ${pkg.version}\n\nusage: work <setup|install-service|doctor|start|update|usage|workspaces|workspace|repos|procs|review|export|restore|share|join|version> [--json]`,
145
+ `work ${pkg.version}\n\nusage: work <setup|install-service|migrate|doctor|start|update|usage|workspaces|workspace|repos|procs|review|export|restore|share|join|version> [--json]`,
139
146
  );
140
147
  }
141
148
 
@@ -190,10 +197,17 @@ async function usage() {
190
197
 
191
198
  // -- workspace read commands (HTTP to the running server) --------------------
192
199
 
200
+ /** The running server as this machine reaches it: the service's port, at
201
+ * the address it listens on. */
202
+ function serverUrl() {
203
+ const env = serviceEnv();
204
+ return `http://${dialHost(env.WORK_LISTEN)}:${env.PORT}`;
205
+ }
206
+
193
207
  async function apiGet(path) {
194
208
  const port = serviceEnv().PORT;
195
209
  try {
196
- const res = await fetch(`http://127.0.0.1:${port}${path}`, {
210
+ const res = await fetch(`${serverUrl()}${path}`, {
197
211
  signal: AbortSignal.timeout(30_000),
198
212
  });
199
213
  if (!res.ok) die(`server answered ${res.status} for ${path}`);
@@ -362,14 +376,32 @@ async function reviewCmd() {
362
376
  const { comments = [] } = await apiGet(`/api/workspaces/${ws.id}/review`);
363
377
  if (jsonOut) return console.log(JSON.stringify(comments, null, 2));
364
378
  if (!comments.length) return console.log("no pending review comments");
365
- console.log(commentMarkdown(comments, null));
379
+ console.log(commentMarkdown(comments, await reviewSections(ws.id, comments)));
380
+ }
381
+
382
+ /** The diff's sections, which say which lane or PR a comment's lines are
383
+ * on (by the head it stored) and what a removed line was removed from.
384
+ * Null when no comment stored a head or the diff cannot be had: those
385
+ * comments then read as the checkout's rather than failing the command. */
386
+ async function reviewSections(wsId, comments) {
387
+ if (!comments.some((c) => c.head)) return null;
388
+ const port = serviceEnv().PORT;
389
+ try {
390
+ const res = await fetch(
391
+ `http://127.0.0.1:${port}/api/workspaces/${wsId}/diff`,
392
+ { signal: AbortSignal.timeout(60_000) },
393
+ );
394
+ return res.ok ? ((await res.json()).sections ?? null) : null;
395
+ } catch {
396
+ return null;
397
+ }
366
398
  }
367
399
 
368
400
  async function apiPost(path, body) {
369
401
  const port = serviceEnv().PORT;
370
402
  let res;
371
403
  try {
372
- res = await fetch(`http://127.0.0.1:${port}${path}`, {
404
+ res = await fetch(`${serverUrl()}${path}`, {
373
405
  method: "POST",
374
406
  headers: { "content-type": "application/json" },
375
407
  body: body === undefined ? undefined : JSON.stringify(body),
@@ -428,8 +460,7 @@ async function exportCmd() {
428
460
  );
429
461
  }
430
462
  }
431
- const port = serviceEnv().PORT;
432
- const res = await fetch(`http://127.0.0.1:${port}/api/backup/export`);
463
+ const res = await fetch(`${serverUrl()}/api/backup/export`);
433
464
  if (!res.ok) die(`server answered ${res.status} for /api/backup/export`);
434
465
  const name =
435
466
  positional[0] ||
@@ -558,22 +589,13 @@ function until(iso) {
558
589
  async function setup() {
559
590
  await fix(await doctor());
560
591
 
561
- // One-shot cleanups between versions. Run them against the settings the
562
- // service actually uses: migrate.mjs exits quietly when it finds no db, so
563
- // an ambient environment missing WORK_DATA_DIR skips every sweep.
564
- const migrate = path.join(pkgRoot, "scripts", "migrate.mjs");
565
- if (fs.existsSync(migrate)) {
566
- spawnSync(process.execPath, [migrate], {
567
- stdio: "inherit",
568
- env: { ...process.env, ...serviceEnv() },
569
- });
570
- }
592
+ migrate();
571
593
 
572
594
  const running = installService();
573
595
  const port = serviceEnv().PORT;
574
596
  maybeTunnel(port);
575
597
  if (running) {
576
- if (await waitForServer(port)) log(`done — http://localhost:${port}`);
598
+ if (await waitForServer()) log(`done — http://localhost:${port}`);
577
599
  else
578
600
  warn(
579
601
  `service started but nothing answered on port ${port} within 30s — check the logs`,
@@ -595,6 +617,22 @@ async function setup() {
595
617
  }
596
618
  }
597
619
 
620
+ /** One-shot cleanups between versions (scripts/migrate.mjs), run against
621
+ * the settings the service actually uses: migrate.mjs exits quietly when it
622
+ * finds no db, so an ambient environment missing WORK_DATA_DIR skips every
623
+ * sweep. A checkout's .env.local sits under both, as it does when its run
624
+ * script starts the server. Returns the exit status. */
625
+ function migrate() {
626
+ const script = path.join(pkgRoot, "scripts", "migrate.mjs");
627
+ if (!fs.existsSync(script)) return 0;
628
+ return (
629
+ spawnSync(process.execPath, [script], {
630
+ stdio: "inherit",
631
+ env: { ...checkoutEnvLocal(), ...process.env, ...serviceEnv() },
632
+ }).status ?? 1
633
+ );
634
+ }
635
+
598
636
  /** The two packages in this tree that carry install scripts: node-pty builds
599
637
  * its native binding when there is no prebuild for the platform, and our own
600
638
  * postinstall marks the bundled spawn-helper executable. */
@@ -643,11 +681,16 @@ async function doctorCmd() {
643
681
  await fix(d);
644
682
  d = await doctor();
645
683
  }
646
- if (args.includes("--json")) return console.log(JSON.stringify(d, null, 2));
647
- console.log(formatDoctor(d));
648
- const access = accessNote();
649
- if (access) warn(access);
650
- if (!d.ready) process.exit(1);
684
+ if (args.includes("--json")) {
685
+ console.log(JSON.stringify(d, null, 2));
686
+ } else {
687
+ console.log(formatDoctor(d));
688
+ const access = accessNote();
689
+ if (access) warn(access);
690
+ }
691
+ // exitCode, not exit(): a pipe on macOS is written asynchronously, and
692
+ // exiting at once can cut the JSON short for whatever reads it.
693
+ if (!d.ready) process.exitCode = 1;
651
694
  }
652
695
 
653
696
  /** Said when the service listens beyond this machine with nothing declared
@@ -738,33 +781,114 @@ function serviceFile() {
738
781
  );
739
782
  }
740
783
 
784
+ /** Whether an installed service with no WORK_LISTEN line was installed
785
+ * before the this-machine-only default. On Linux its shape tells: under the
786
+ * default, work.socket binds an address (`127.0.0.1:7171`), where an older
787
+ * service had no socket or bound a bare port. A launchd agent has no such
788
+ * tell. */
789
+ function predatesListenDefault() {
790
+ if (!fs.existsSync(serviceFile())) return false;
791
+ if (process.platform === "darwin") return true;
792
+ try {
793
+ const socket = fs.readFileSync(
794
+ path.join(path.dirname(serviceFile()), "work.socket"),
795
+ "utf8",
796
+ );
797
+ return /^ListenStream=\d+\s*$/m.test(socket);
798
+ } catch {
799
+ return true;
800
+ }
801
+ }
802
+
803
+ /** One Environment= line systemd reads back as exactly this value. A value
804
+ * holding whitespace, a quote, `\` or `%` is quoted, with `\` and `"`
805
+ * escaped and `%` doubled, since systemd expands specifiers there: bare, a
806
+ * proxy URL's percent-encoded password, a root with a space or a host list
807
+ * written `a, b` is cut short or dropped whole. Any other value stays bare,
808
+ * the form an older CLI reads back (`work-source prod` runs the npm one),
809
+ * so a setting such a CLI carries is not lost to the quoting. */
810
+ function unitEnvLine(key, value) {
811
+ const text = String(value);
812
+ if (!/[\s"'\\%]/.test(text)) return `Environment=${key}=${text}`;
813
+ const escaped = text.replace(/[\\"]/g, "\\$&").replace(/%/g, "%%");
814
+ return `Environment="${key}=${escaped}"`;
815
+ }
816
+
817
+ /** Text for a plist <string>: launchd reads it as XML. */
818
+ function xmlText(value) {
819
+ return String(value)
820
+ .replace(/&/g, "&amp;")
821
+ .replace(/</g, "&lt;")
822
+ .replace(/>/g, "&gt;");
823
+ }
824
+
825
+ const XML_ENTITIES = { amp: "&", lt: "<", gt: ">", quot: '"', apos: "'" };
826
+
741
827
  /** WORK_* already baked into the installed service. `work update` re-runs
742
828
  * setup from whatever shell the user happens to be in, so without this the
743
829
  * first update silently resets the port, root and data dir to defaults —
744
830
  * and a lost WORK_DATA_DIR points the server at an empty database, making
745
- * every workspace look like it vanished. */
746
- /** work.socket's ListenStream for WORK_LISTEN: this machine only unless
747
- * set, every interface for `0.0.0.0` / `::` / `*`, else that address. */
748
- function listenStream(listen, port) {
749
- if (!listen) return `127.0.0.1:${port}`;
750
- if (listen === "0.0.0.0" || listen === "::" || listen === "*")
751
- return String(port);
752
- return listen.includes(":") ? `[${listen}]:${port}` : `${listen}:${port}`;
753
- }
754
-
831
+ * every workspace look like it vanished. Values come back unescaped, or the
832
+ * next setup would write the escapes into the value itself. */
755
833
  function installedServiceEnv() {
756
834
  const installed = {};
835
+ let text;
757
836
  try {
758
- const text = fs.readFileSync(serviceFile(), "utf8");
837
+ text = fs.readFileSync(serviceFile(), "utf8");
838
+ } catch {
839
+ return installed;
840
+ }
841
+ if (process.platform === "darwin") {
759
842
  const re =
760
- process.platform === "darwin"
761
- ? /<key>([A-Za-z_]+)<\/key>\s*<string>([^<]*)<\/string>/g
762
- : /^Environment=([A-Za-z_]+)=(.*)$/gm;
763
- for (const [, key, value] of text.matchAll(re)) installed[key] = value;
764
- } catch {}
843
+ /<key>([A-Za-z_][A-Za-z0-9_]*)<\/key>\s*<string>([^<]*)<\/string>/g;
844
+ for (const [, key, value] of text.matchAll(re)) {
845
+ installed[key] = value.replace(
846
+ /&(amp|lt|gt|quot|apos);/g,
847
+ (_, name) => XML_ENTITIES[name],
848
+ );
849
+ }
850
+ return installed;
851
+ }
852
+ // unitEnvLine's quoted form, or an older service's bare `KEY=value`,
853
+ // which was never escaped either.
854
+ const re =
855
+ /^Environment=(?:"([A-Za-z_][A-Za-z0-9_]*)=((?:[^"\\]|\\.)*)"|([A-Za-z_][A-Za-z0-9_]*)=(.*))$/gm;
856
+ for (const [, qKey, qValue, key, value] of text.matchAll(re)) {
857
+ if (qKey) {
858
+ installed[qKey] = qValue.replace(/\\(.)|%%/g, (_, c) => c ?? "%");
859
+ } else {
860
+ installed[key] = value;
861
+ }
862
+ }
765
863
  return installed;
766
864
  }
767
865
 
866
+ /** WORK_* from the .env.local of the checkout WORK_SERVICE_EXEC runs, read
867
+ * as scripts/env-local.sh reads it: that script exports them at start, under
868
+ * whatever the service sets. Never written into the service, which would
869
+ * shadow later edits of the file. */
870
+ function checkoutEnvLocal() {
871
+ const exec = process.env.WORK_SERVICE_EXEC;
872
+ const out = {};
873
+ if (!exec) return out;
874
+ let text = "";
875
+ try {
876
+ text = fs.readFileSync(
877
+ path.join(path.dirname(path.dirname(exec)), ".env.local"),
878
+ "utf8",
879
+ );
880
+ } catch {
881
+ return out;
882
+ }
883
+ for (const line of text.split("\n")) {
884
+ const m = /^\s*(?:export\s+)?(WORK_[A-Za-z0-9_]*)=(.*)$/.exec(line);
885
+ if (!m) continue;
886
+ const quoted = /^"(.*)"$|^'(.*)'$/.exec(m[2]);
887
+ out[m[1]] ??= quoted ? (quoted[1] ?? quoted[2]) : m[2];
888
+ }
889
+ return out;
890
+ }
891
+
768
892
  function serviceEnv() {
769
893
  // Network env worth carrying from the installing shell into the service.
770
894
  // (Declared here, not at module level: the command dispatch above runs
@@ -796,17 +920,23 @@ function serviceEnv() {
796
920
  const value = key in process.env ? process.env[key] : installed[key];
797
921
  if (value) env[key] = value;
798
922
  }
799
- // A new install listens on this machine only. One installed before that
800
- // default listened on every interface, and other machines (a phone, the
923
+ // A new install listens on this machine only, and its service says so, so
924
+ // that a missing line only ever means a service from before that default.
925
+ // Those listened on every interface, and other machines (a phone, the
801
926
  // proxy in front of it) may be reaching it that way: keep it listening,
802
927
  // so they get work's page naming the setting to add (server/access.ts)
803
928
  // rather than a connection that is simply refused.
804
- if (!("WORK_LISTEN" in process.env) && !installed.WORK_LISTEN) {
805
- if (fs.existsSync(serviceFile())) env.WORK_LISTEN = "0.0.0.0";
929
+ if (!env.WORK_LISTEN) {
930
+ env.WORK_LISTEN =
931
+ !("WORK_LISTEN" in process.env) && predatesListenDefault()
932
+ ? "0.0.0.0"
933
+ : "127.0.0.1";
806
934
  }
807
935
  // entry.ts prefers PORT, so carrying WORK_APP_PORT forward without this
808
- // would leave the service on the default port anyway.
809
- env.PORT = env.WORK_APP_PORT || appPort;
936
+ // would leave the service on the default port anyway. A checkout's run
937
+ // script serves the port its .env.local names, so the socket binds that
938
+ // one and setup waits on it.
939
+ env.PORT = env.WORK_APP_PORT || checkoutEnvLocal().WORK_APP_PORT || appPort;
810
940
  // A service starts with none of the shell's network environment. Behind a
811
941
  // corporate proxy or a private CA the server's own usage fetches would
812
942
  // fail while every CLI in a login-shell pane works, so carry those
@@ -838,16 +968,48 @@ function serviceEnv() {
838
968
  function isWorkServerCmd(cmd) {
839
969
  if (/\btmux\b/.test(cmd)) return false;
840
970
  if (/\bwork(\.mjs)?\s+(setup|update|version)\b/.test(cmd)) return false;
841
- return (
971
+ if (
842
972
  /\bwork\.mjs\s+start(?:\s|$)/.test(cmd) ||
843
973
  /(?:^|[\s/])work\s+start(?:\s|$)/.test(cmd) ||
844
- /run-prod\.sh/.test(cmd) ||
845
- /run-local\.sh/.test(cmd) ||
846
974
  /--why=work server is running/.test(cmd) ||
847
- /--why="work server is running"/.test(cmd) ||
848
- (/@dylanpiercey\/work\//.test(cmd) && !/\bnpm\b/.test(cmd)) ||
849
- /\/work\/(?:\S*\/)?(?:dist|\.run)\/index\.mjs/.test(cmd)
850
- );
975
+ /--why="work server is running"/.test(cmd)
976
+ )
977
+ return true;
978
+ // A built server or run script, by the absolute path an interpreter was
979
+ // handed, inside this package or a checkout of it. A path alone says
980
+ // nothing: `dist/index.mjs` is most node builds' entry, workspaces live
981
+ // under ~/work, and an editor or pager may have a run script open — each
982
+ // a process of the user's that setup must not kill.
983
+ const argv = cmd.split(/\s+/);
984
+ return argv.some((arg, i) => {
985
+ if (
986
+ !/^\/.*\/(?:(?:dist|\.run)\/index\.mjs|scripts\/run-(?:prod|local)\.sh)$/.test(
987
+ arg,
988
+ )
989
+ )
990
+ return false;
991
+ const runner = argv
992
+ .slice(0, i)
993
+ .reverse()
994
+ .find((a) => !a.startsWith("-"));
995
+ if (runner && !/^(?:node|nodejs|bash|sh)$/.test(path.basename(runner)))
996
+ return false;
997
+ return inWorkPackage(arg);
998
+ });
999
+ }
1000
+
1001
+ /** Whether `file` lies in a package named as this one is: the nearest
1002
+ * package.json above it that has a name. */
1003
+ function inWorkPackage(file) {
1004
+ for (let dir = path.dirname(file); ; dir = path.dirname(dir)) {
1005
+ try {
1006
+ const { name } = JSON.parse(
1007
+ fs.readFileSync(path.join(dir, "package.json"), "utf8"),
1008
+ );
1009
+ if (name) return name === pkg.name;
1010
+ } catch {}
1011
+ if (dir === path.dirname(dir)) return false;
1012
+ }
851
1013
  }
852
1014
 
853
1015
  function pidsListening(port) {
@@ -967,11 +1129,11 @@ function stopOldCopies(port) {
967
1129
  * used to print at a port that answers a second or two later — which reads as
968
1130
  * an update that broke the app. Any HTTP reply proves the server is serving;
969
1131
  * the status the route returns is not this function's business. */
970
- async function waitForServer(port, timeoutMs = 30_000) {
1132
+ async function waitForServer(timeoutMs = 30_000) {
971
1133
  const deadline = Date.now() + timeoutMs;
972
1134
  for (;;) {
973
1135
  try {
974
- await fetch(`http://127.0.0.1:${port}/`, {
1136
+ await fetch(`${serverUrl()}/`, {
975
1137
  redirect: "manual",
976
1138
  signal: AbortSignal.timeout(2000),
977
1139
  });
@@ -998,13 +1160,8 @@ function installService() {
998
1160
  const plist = serviceFile();
999
1161
  fs.mkdirSync(path.dirname(plist), { recursive: true });
1000
1162
  fs.mkdirSync(path.join(os.homedir(), "Library/Logs"), { recursive: true });
1001
- const xml = (v) =>
1002
- String(v)
1003
- .replace(/&/g, "&amp;")
1004
- .replace(/</g, "&lt;")
1005
- .replace(/>/g, "&gt;");
1006
1163
  const envXml = Object.entries(serviceEnv())
1007
- .map(([k, v]) => ` <key>${k}</key><string>${xml(v)}</string>`)
1164
+ .map(([k, v]) => ` <key>${k}</key><string>${xmlText(v)}</string>`)
1008
1165
  .join("\n");
1009
1166
  fs.writeFileSync(
1010
1167
  plist,
@@ -1014,7 +1171,7 @@ function installService() {
1014
1171
  <dict>
1015
1172
  <key>Label</key><string>dev.work.app</string>
1016
1173
  <key>ProgramArguments</key>
1017
- <array>${startArgs.map((a) => `<string>${a}</string>`).join("")}</array>
1174
+ <array>${startArgs.map((a) => `<string>${xmlText(a)}</string>`).join("")}</array>
1018
1175
  <key>RunAtLoad</key><true/>
1019
1176
  <key>KeepAlive</key><true/>
1020
1177
  <key>StandardOutPath</key><string>${os.homedir()}/Library/Logs/work.log</string>
@@ -1072,7 +1229,7 @@ ${envXml}
1072
1229
  const unitDir = path.dirname(unitFile);
1073
1230
  fs.mkdirSync(unitDir, { recursive: true });
1074
1231
  const envLines = Object.entries(serviceEnv())
1075
- .map(([k, v]) => `Environment=${k}=${v}`)
1232
+ .map(([k, v]) => unitEnvLine(k, v))
1076
1233
  .join("\n");
1077
1234
  const execStart = unitCommand(target);
1078
1235
  // The port is held by work.socket, not the server: a restart swaps the
@@ -1146,7 +1303,7 @@ WantedBy=default.target
1146
1303
 
1147
1304
  warn(
1148
1305
  execOverride
1149
- ? "no service manager found. Start manually with: scripts/run-prod.sh"
1306
+ ? `no service manager found. Start manually with: ${execOverride}`
1150
1307
  : "no service manager found. Start manually with: work start",
1151
1308
  );
1152
1309
  return false;
@@ -0,0 +1,2 @@
1
+ import { h as notifySessionsChanged } from "./_C_-lYJlp.js";
2
+ export { notifySessionsChanged };