@dylanpiercey/work 0.0.223 → 0.1.0

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 (522) hide show
  1. package/README.md +2 -27
  2. package/bin/work.mjs +51 -105
  3. package/dist/{_CpANOzpd.js → _Bq7to522.js} +344 -139
  4. package/dist/_CkwTsHKB.js +2 -0
  5. package/dist/index.mjs +2222 -2341
  6. package/dist/public/assets/_1RHVsAcK.js +1 -0
  7. package/dist/public/assets/_4CShjaLP.js +1 -0
  8. package/dist/public/assets/_68JtNDO1.js +1 -0
  9. package/dist/public/assets/{_DoCtdMd2.js → _8G2Mv7jG.js} +1 -1
  10. package/dist/public/assets/_8G2Mv7jG.js.br +0 -0
  11. package/dist/public/assets/{_BL9QMk_P.js → _8dvK2NDJ.js} +1 -1
  12. package/dist/public/assets/_8dvK2NDJ.js.br +0 -0
  13. package/dist/public/assets/_94L2SIJF.js +1 -0
  14. package/dist/public/assets/_9AnDb3YH.js +1 -0
  15. package/dist/public/assets/{_DlpTErRA.js → _9kX9D09B.js} +1 -1
  16. package/dist/public/assets/_9kX9D09B.js.br +0 -0
  17. package/dist/public/assets/_9lErVegn.js +1 -0
  18. package/dist/public/assets/{_DtOzdwHm.js → _B0oyGUU5.js} +1 -1
  19. package/dist/public/assets/_B0oyGUU5.js.br +0 -0
  20. package/dist/public/assets/_B1mPnLlp.js +1 -0
  21. package/dist/public/assets/_B4fi2SSA.js +1 -0
  22. package/dist/public/assets/{_BUH04L5e.js → _B582D2rg.js} +1 -1
  23. package/dist/public/assets/{_CT3clsOQ.js → _B7GwDeKK.js} +1 -1
  24. package/dist/public/assets/_B7Qx25UP.js +1 -0
  25. package/dist/public/assets/_B7b8EVjA.js +1 -0
  26. package/dist/public/assets/{_BVp6r0fg.js → _BBWaxDkO.js} +1 -1
  27. package/dist/public/assets/_BBWaxDkO.js.br +0 -0
  28. package/dist/public/assets/{_DeCJ44Me.js → _BDa-iwuj.js} +1 -1
  29. package/dist/public/assets/_BDa-iwuj.js.br +0 -0
  30. package/dist/public/assets/_BEKHKNmM.js +1 -0
  31. package/dist/public/assets/{_DJ3UAR_s.js → _BE_Jyvqd.js} +1 -1
  32. package/dist/public/assets/_BE_Jyvqd.js.br +0 -0
  33. package/dist/public/assets/_BFU-kJkk.js +1 -0
  34. package/dist/public/assets/_BIJ2O2oU.js +1 -0
  35. package/dist/public/assets/_BJ59XAZ9.js +1 -0
  36. package/dist/public/assets/{_BnOOD6nr.js → _BKqRYfOI.js} +4 -4
  37. package/dist/public/assets/_BKqRYfOI.js.br +0 -0
  38. package/dist/public/assets/_BKr9Dzz1.js +1 -0
  39. package/dist/public/assets/_BN7xvxS_.js +1 -0
  40. package/dist/public/assets/_BNQTVBlH.js +1 -0
  41. package/dist/public/assets/{_D8u1YU9b.js → _BNW5Jiec.js} +1 -1
  42. package/dist/public/assets/_BNW5Jiec.js.br +0 -0
  43. package/dist/public/assets/{_CZGS4T08.js → _BOGkzMx9.js} +1 -1
  44. package/dist/public/assets/_BOGkzMx9.js.br +0 -0
  45. package/dist/public/assets/_BUEpqQ_m.js +1 -0
  46. package/dist/public/assets/{_B_zyAtSJ.js → _BUvqweu0.js} +1 -1
  47. package/dist/public/assets/_BUvqweu0.js.br +0 -0
  48. package/dist/public/assets/{_BsupnkWM.js → _BZKB4fhr.js} +1 -1
  49. package/dist/public/assets/_BZKB4fhr.js.br +0 -0
  50. package/dist/public/assets/_BZo9BjDF.js +1 -0
  51. package/dist/public/assets/{_BeE9qDu0.js → _BbbOvNRH.js} +1 -1
  52. package/dist/public/assets/_BbbOvNRH.js.br +0 -0
  53. package/dist/public/assets/_BdUNnSlC.js +1 -0
  54. package/dist/public/assets/{_Cw_8WbwF.js → _Bf8WYPfh.js} +1 -1
  55. package/dist/public/assets/_Bf8WYPfh.js.br +0 -0
  56. package/dist/public/assets/{_pP1W6w5v.js → _Bhx319Hi.js} +1 -1
  57. package/dist/public/assets/_Bhx319Hi.js.br +0 -0
  58. package/dist/public/assets/{_O70J1Mfv.js → _Bm4SHrNp.js} +1 -1
  59. package/dist/public/assets/_Bm4SHrNp.js.br +0 -0
  60. package/dist/public/assets/{_--tE4Gxz.js → _Bmrqq8Ro.js} +2 -2
  61. package/dist/public/assets/_Bmrqq8Ro.js.br +0 -0
  62. package/dist/public/assets/_BnHZ6Npj.js +1 -0
  63. package/dist/public/assets/{_CLDmR3jR.js → _BoDxRJLS.js} +1 -1
  64. package/dist/public/assets/_BoDxRJLS.js.br +0 -0
  65. package/dist/public/assets/_Bo_Ru664.js +1 -0
  66. package/dist/public/assets/{_BCZpExov.js → _Bp8-V8yl.js} +1 -1
  67. package/dist/public/assets/_Bp8-V8yl.js.br +0 -0
  68. package/dist/public/assets/{_CGLpCj_I.js → _BpoeUr5j.js} +1 -1
  69. package/dist/public/assets/_BpoeUr5j.js.br +0 -0
  70. package/dist/public/assets/_Bq2G_Tid.js +1 -0
  71. package/dist/public/assets/_BsyoLB_D.js +1 -0
  72. package/dist/public/assets/{_BAHrOydH.js → _Bv3e3rg8.js} +1 -1
  73. package/dist/public/assets/_Bv3e3rg8.js.br +0 -0
  74. package/dist/public/assets/{_C6i9NP5A.js → _Bv3qNE1b.js} +1 -1
  75. package/dist/public/assets/{_BXT2bXMi.js → _BvXp6HpX.js} +1 -1
  76. package/dist/public/assets/_BvXp6HpX.js.br +0 -0
  77. package/dist/public/assets/{_CX1wufuh.js → _BwP07uVS.js} +1 -1
  78. package/dist/public/assets/_BwP07uVS.js.br +0 -0
  79. package/dist/public/assets/{_ifUb4WX7.js → _Bx1CW-sF.js} +1 -1
  80. package/dist/public/assets/_Bx1CW-sF.js.br +0 -0
  81. package/dist/public/assets/{_BPcswKMK.js → _BywcP-As.js} +1 -1
  82. package/dist/public/assets/_BywcP-As.js.br +0 -0
  83. package/dist/public/assets/{_Bp_WT09q.js → _Bzgtwt3G.js} +1 -1
  84. package/dist/public/assets/_Bzgtwt3G.js.br +0 -0
  85. package/dist/public/assets/{_IWMmnVCy.js → _C0_s45qg.js} +1 -1
  86. package/dist/public/assets/_C0_s45qg.js.br +0 -0
  87. package/dist/public/assets/_C0ePgF6b.js +1 -0
  88. package/dist/public/assets/{_Da2Dmt_d.js → _C0oVtTqO.js} +1 -1
  89. package/dist/public/assets/_C0oVtTqO.js.br +0 -0
  90. package/dist/public/assets/{_CtyJUmXC.js → _C654p96Z.js} +1 -1
  91. package/dist/public/assets/_C654p96Z.js.br +0 -0
  92. package/dist/public/assets/{_2mnAZf6B.js → _C8_1Y2-z.js} +1 -1
  93. package/dist/public/assets/_C8_1Y2-z.js.br +0 -0
  94. package/dist/public/assets/_C8v1AZFP.js +1 -0
  95. package/dist/public/assets/{_BO0OB-rz.js → _CAkPJLeF.js} +1 -1
  96. package/dist/public/assets/_CAkPJLeF.js.br +0 -0
  97. package/dist/public/assets/_CB0D5cRH.js +1 -0
  98. package/dist/public/assets/_CD05JUTh.js +1 -0
  99. package/dist/public/assets/{_CJ9j8N5Z.js → _CEJUcePr.js} +1 -1
  100. package/dist/public/assets/_CEJUcePr.js.br +0 -0
  101. package/dist/public/assets/{_DuarImb7.js → _CEXHZd73.js} +1 -1
  102. package/dist/public/assets/_CEXHZd73.js.br +0 -0
  103. package/dist/public/assets/_CHcUMVR7.js +1 -0
  104. package/dist/public/assets/{_BnyLUTdO.js → _CHuLFr1f.js} +1 -1
  105. package/dist/public/assets/_CHuLFr1f.js.br +0 -0
  106. package/dist/public/assets/{_DwcoW-IU.js → _CIb7xw_1.js} +1 -1
  107. package/dist/public/assets/_CIb7xw_1.js.br +0 -0
  108. package/dist/public/assets/{_B1RldJ0S.js → _CMSBfO6u.js} +1 -1
  109. package/dist/public/assets/_CMSBfO6u.js.br +0 -0
  110. package/dist/public/assets/_CN7GPyBo.js +1 -0
  111. package/dist/public/assets/{_DI0QHEXB.js → _COcePo2y.js} +1 -1
  112. package/dist/public/assets/_COcePo2y.js.br +0 -0
  113. package/dist/public/assets/{_eQK3EZCc.js → _CTINBWaG.js} +1 -1
  114. package/dist/public/assets/_CTINBWaG.js.br +0 -0
  115. package/dist/public/assets/_CTWrnAbz.js +1 -0
  116. package/dist/public/assets/{_CLerZOx-.js → _CUXajOKj.js} +1 -1
  117. package/dist/public/assets/_CUXajOKj.js.br +0 -0
  118. package/dist/public/assets/{_ChpYg41R.js → _CVru3vzC.js} +1 -1
  119. package/dist/public/assets/{_BA8HFnO3.js → _CYjE__ml.js} +1 -1
  120. package/dist/public/assets/_CYjE__ml.js.br +0 -0
  121. package/dist/public/assets/{_dr95P55a.js → _CZ_OWtIT.js} +1 -1
  122. package/dist/public/assets/_CZ_OWtIT.js.br +0 -0
  123. package/dist/public/assets/{_BLTfQLdY.js → _C_37_B6u.js} +1 -1
  124. package/dist/public/assets/_C_37_B6u.js.br +0 -0
  125. package/dist/public/assets/{_xdrkfok5.js → _C_CIQL7J.js} +1 -1
  126. package/dist/public/assets/_C_CIQL7J.js.br +0 -0
  127. package/dist/public/assets/_C_WdpYbK.js +1 -0
  128. package/dist/public/assets/_CaiH3VN9.js +1 -0
  129. package/dist/public/assets/{_CCCQMLw5.js → _CamWDaoG.js} +1 -1
  130. package/dist/public/assets/_CamWDaoG.js.br +0 -0
  131. package/dist/public/assets/_CdDElA0V.js +1 -0
  132. package/dist/public/assets/_CfnsClzZ.js +1 -0
  133. package/dist/public/assets/{_SwbsOoi9.js → _Cgo1fRhJ.js} +1 -1
  134. package/dist/public/assets/_Cgo1fRhJ.js.br +0 -0
  135. package/dist/public/assets/_CjhGrlf3.js +1 -0
  136. package/dist/public/assets/_CjlbL4C_.js +1 -0
  137. package/dist/public/assets/_CjogTUXK.js +1 -0
  138. package/dist/public/assets/{_mnBdD4YN.js → _ClldMY37.js} +1 -1
  139. package/dist/public/assets/_ClldMY37.js.br +0 -0
  140. package/dist/public/assets/_CmFq6Gtp.js +1 -0
  141. package/dist/public/assets/_CoAPOKiP.js +1 -0
  142. package/dist/public/assets/_CoUUgh9P.js +1 -0
  143. package/dist/public/assets/{_s5Jez2mu.js → _CpjSCB1I.js} +1 -1
  144. package/dist/public/assets/_CpjSCB1I.js.br +0 -0
  145. package/dist/public/assets/{_DeN4EY8L.js → _Ct3RF80L.js} +1 -1
  146. package/dist/public/assets/_Ct3RF80L.js.br +0 -0
  147. package/dist/public/assets/_CtYy5eZs.js +1 -0
  148. package/dist/public/assets/{_BS4crAAm.js → _CxAPL49a.js} +1 -1
  149. package/dist/public/assets/_CxAPL49a.js.br +0 -0
  150. package/dist/public/assets/{_CwmzEsB4.js → _CyBCIknf.js} +1 -1
  151. package/dist/public/assets/_CyBCIknf.js.br +0 -0
  152. package/dist/public/assets/{_unfL8mz1.js → _Cz5BPBG8.js} +1 -1
  153. package/dist/public/assets/_Cz5BPBG8.js.br +0 -0
  154. package/dist/public/assets/_D-eEFXaI.js +1 -0
  155. package/dist/public/assets/{_gPFPzzPF.js → _D0aoEFRx.js} +1 -1
  156. package/dist/public/assets/_D0aoEFRx.js.br +0 -0
  157. package/dist/public/assets/{_CnKYioYw.js → _D1uRW1qz.js} +1 -1
  158. package/dist/public/assets/_D1uRW1qz.js.br +0 -0
  159. package/dist/public/assets/_D2oIr2T2.js +1 -0
  160. package/dist/public/assets/{_BBpX-M4b.js → _D2un443j.js} +1 -1
  161. package/dist/public/assets/_D2un443j.js.br +0 -0
  162. package/dist/public/assets/_D3MPx4-f.js +1 -0
  163. package/dist/public/assets/{_DzrtBP-L.js → _D4dJ2qEE.js} +1 -1
  164. package/dist/public/assets/{_Fzbz4zvE.js → _D4q8XSMI.js} +1 -1
  165. package/dist/public/assets/_D4q8XSMI.js.br +0 -0
  166. package/dist/public/assets/{_BxAl0m64.js → _D4quFMVQ.js} +1 -1
  167. package/dist/public/assets/_D4quFMVQ.js.br +0 -0
  168. package/dist/public/assets/{_pvS44-AC.js → _D4rOX-Fa.js} +1 -1
  169. package/dist/public/assets/_D4rOX-Fa.js.br +0 -0
  170. package/dist/public/assets/_D5edrSyA.js +1 -0
  171. package/dist/public/assets/{_DuXOUegE.js → _D6kktUFn.js} +1 -1
  172. package/dist/public/assets/_D6kktUFn.js.br +0 -0
  173. package/dist/public/assets/_D80-qtVY.js +1 -0
  174. package/dist/public/assets/_D9-3EVA4.js +1 -0
  175. package/dist/public/assets/{_CE5MhJWL.js → _D9sS4J_w.js} +1 -1
  176. package/dist/public/assets/_D9sS4J_w.js.br +0 -0
  177. package/dist/public/assets/_DBLpxTDi.js +1 -0
  178. package/dist/public/assets/{_CYNAhnRH.js → _DByHQ7nW.js} +6 -6
  179. package/dist/public/assets/_DByHQ7nW.js.br +0 -0
  180. package/dist/public/assets/{_D-hK5uFn.js → _DC-78WeM.js} +1 -1
  181. package/dist/public/assets/_DC-78WeM.js.br +0 -0
  182. package/dist/public/assets/{_DmDSLxrw.js → _DDl8KSWJ.js} +1 -1
  183. package/dist/public/assets/_DDl8KSWJ.js.br +0 -0
  184. package/dist/public/assets/{_C-6dImS5.js → _DFWOMF-B.js} +1 -1
  185. package/dist/public/assets/_DFWOMF-B.js.br +0 -0
  186. package/dist/public/assets/_DKb-rt9n.js +1 -0
  187. package/dist/public/assets/_DMnSJCF_.js +1 -0
  188. package/dist/public/assets/_DOOIlrPh.js +1 -0
  189. package/dist/public/assets/_DPW-0yKP.js +1 -0
  190. package/dist/public/assets/_DR3BmvWU.js +1 -0
  191. package/dist/public/assets/{_C9OdJcx4.js → _DSVLaMWS.js} +1 -1
  192. package/dist/public/assets/_DSVLaMWS.js.br +0 -0
  193. package/dist/public/assets/_DYNGNKLk.js +1 -0
  194. package/dist/public/assets/_DZnEgCbj.js +1 -0
  195. package/dist/public/assets/{_zKlxcAnQ.js → _DaMVRI8f.js} +1 -1
  196. package/dist/public/assets/_DaMVRI8f.js.br +0 -0
  197. package/dist/public/assets/{_DGTQBWy0.js → _DbvaGqOl.js} +1 -1
  198. package/dist/public/assets/_DbvaGqOl.js.br +0 -0
  199. package/dist/public/assets/{_DiqV5bDH.js → _DcMIlvz-.js} +1 -1
  200. package/dist/public/assets/_DcMIlvz-.js.br +0 -0
  201. package/dist/public/assets/{__Oa255vo.js → _Dd6X3e7w.js} +1 -1
  202. package/dist/public/assets/_Dd6X3e7w.js.br +0 -0
  203. package/dist/public/assets/{_BdvO5Lqa.js → _De7P3jUH.js} +1 -1
  204. package/dist/public/assets/_De7P3jUH.js.br +0 -0
  205. package/dist/public/assets/_DeiFEAar.js +1 -0
  206. package/dist/public/assets/{_vKQopDwG.js → _DfI982PI.js} +1 -1
  207. package/dist/public/assets/_DfI982PI.js.br +0 -0
  208. package/dist/public/assets/_DfZ6emcw.js +1 -0
  209. package/dist/public/assets/{_DxVt7Zuk.js → _Dj1lZ1pa.js} +4 -4
  210. package/dist/public/assets/_Dj1lZ1pa.js.br +0 -0
  211. package/dist/public/assets/{_DhEdzMUw.js → _DkCaEf_h.js} +1 -1
  212. package/dist/public/assets/_DkCaEf_h.js.br +0 -0
  213. package/dist/public/assets/_DonAis0J.js +1 -0
  214. package/dist/public/assets/{_BRG_DBcC.js → _Dp3IZdH8.js} +1 -1
  215. package/dist/public/assets/_Dp3IZdH8.js.br +0 -0
  216. package/dist/public/assets/{_unwtcXFQ.js → _DqYih4xk.js} +1 -1
  217. package/dist/public/assets/_DqYih4xk.js.br +0 -0
  218. package/dist/public/assets/{_BLRpf6Uw.js → _DqhphdU4.js} +1 -1
  219. package/dist/public/assets/_DqhphdU4.js.br +0 -0
  220. package/dist/public/assets/{_C87NBm9i.js → _DrIgZJzN.js} +1 -1
  221. package/dist/public/assets/_DrIgZJzN.js.br +0 -0
  222. package/dist/public/assets/_Dt4hHR05.js +1 -0
  223. package/dist/public/assets/_DtTbTraA.js +1 -0
  224. package/dist/public/assets/_DwMxAJKP.js +1 -0
  225. package/dist/public/assets/{_CttJbiei.js → _DxEm-Gwj.js} +1 -1
  226. package/dist/public/assets/_DxEm-Gwj.js.br +0 -0
  227. package/dist/public/assets/{_CdgAsi3s.js → _Dytf99zx.js} +1 -1
  228. package/dist/public/assets/_Dytf99zx.js.br +0 -0
  229. package/dist/public/assets/_EAgv5jR9.js +1 -0
  230. package/dist/public/assets/{_C9qO_dny.js → _Iecpd0kS.js} +1 -1
  231. package/dist/public/assets/_Iecpd0kS.js.br +0 -0
  232. package/dist/public/assets/{_DuGmU4h0.js → _MCwIJAuJ.js} +1 -1
  233. package/dist/public/assets/_MCwIJAuJ.js.br +0 -0
  234. package/dist/public/assets/{_BJRSndB4.js → _NM79Lu3L.js} +1 -1
  235. package/dist/public/assets/_NM79Lu3L.js.br +0 -0
  236. package/dist/public/assets/_QpNKKuS9.js +1 -0
  237. package/dist/public/assets/{_BbiACo0Y.js → _SGDxiwE1.js} +1 -1
  238. package/dist/public/assets/_SGDxiwE1.js.br +0 -0
  239. package/dist/public/assets/_TA8pE7z9.js +1 -0
  240. package/dist/public/assets/_bE4sNDeU.js +1 -0
  241. package/dist/public/assets/{_pUYwxsdF.js → _bcsuBP7T.js} +1 -1
  242. package/dist/public/assets/_bcsuBP7T.js.br +0 -0
  243. package/dist/public/assets/_cdcAU4yY.js +1 -0
  244. package/dist/public/assets/{_DhNuRs-V.js → _ch_yXAap.js} +1 -1
  245. package/dist/public/assets/_ch_yXAap.js.br +0 -0
  246. package/dist/public/assets/{_DaqT6m41.js → _d5u7EI97.js} +1 -1
  247. package/dist/public/assets/_d5u7EI97.js.br +0 -0
  248. package/dist/public/assets/{_C2ZpyiHV.js → _eoa1EOU-.js} +1 -1
  249. package/dist/public/assets/_eoa1EOU-.js.br +0 -0
  250. package/dist/public/assets/{_C1PmcEws.js → _j2tDSMvo.js} +1 -1
  251. package/dist/public/assets/_j2tDSMvo.js.br +0 -0
  252. package/dist/public/assets/_jNhIFgbc.js +1 -0
  253. package/dist/public/assets/_kDYiTaag.js +1 -0
  254. package/dist/public/assets/_lNMVVbUx.js +1 -0
  255. package/dist/public/assets/_nwJ7Hu3S.js +1 -0
  256. package/dist/public/assets/{_qJTL2ooe.js → _tmDtUACa.js} +1 -1
  257. package/dist/public/assets/_tmDtUACa.js.br +0 -0
  258. package/dist/public/assets/{_BewXp5Y_.js → _wXDh-Z2N.js} +1 -1
  259. package/dist/public/assets/_wXDh-Z2N.js.br +0 -0
  260. package/dist/public/assets/{_CB31bp-W.js → _wcshV0sZ.js} +1 -1
  261. package/dist/public/assets/_wcshV0sZ.js.br +0 -0
  262. package/dist/public/assets/_x-NwqgCn.js +1 -0
  263. package/dist/public/assets/{_BsimXDnm.js → _xyw_DS5P.js} +1 -1
  264. package/dist/public/assets/_xyw_DS5P.js.br +0 -0
  265. package/dist/public/assets/{_Aq9oGnRu.js → _zSAfqXcm.js} +1 -1
  266. package/dist/public/assets/_zSAfqXcm.js.br +0 -0
  267. package/dist/public/assets/{app-shell-CpPCwWPW.css → app-shell-ChQoVC5b.css} +1 -1
  268. package/dist/public/assets/app-shell-ChQoVC5b.css.br +0 -0
  269. package/dist/public/assets/files-view-CLtLp_BW.js +2 -0
  270. package/dist/public/assets/{files-view-DtI7JE-f.css → files-view-CNHQapdI.css} +1 -1
  271. package/dist/public/assets/files-view-CNHQapdI.css.br +0 -0
  272. package/dist/public/assets/group.css.ts-BG82htKb.css +1 -0
  273. package/dist/public/assets/group.css.ts-BG82htKb.css.br +0 -0
  274. package/dist/public/assets/icon-folder-DJOHuEpD.css +1 -0
  275. package/dist/public/assets/icon-folder-DJOHuEpD.css.br +0 -0
  276. package/dist/public/assets/{icon-search-DAtjHWFL.css → icon-search-DsJuFXUJ.css} +1 -1
  277. package/dist/public/assets/icon-search-DsJuFXUJ.css.br +0 -0
  278. package/dist/public/assets/manage-workspace-NBcFDyrB.js +2 -0
  279. package/dist/public/assets/manage-workspace-f_Np32TD.css +1 -0
  280. package/dist/public/assets/{modal-view-D0qnmuJE.css → modal-view-KVNBpNYi.css} +1 -1
  281. package/dist/public/assets/modal-view-KVNBpNYi.css.br +0 -0
  282. package/dist/public/assets/new-DHI77GvL.js +1 -0
  283. package/dist/public/assets/new-workspace-BFE-HpD_.css +1 -0
  284. package/dist/public/assets/new-workspace-BFE-HpD_.css.br +0 -0
  285. package/dist/public/assets/new-workspace-BRzimdd5.js +2 -0
  286. package/dist/public/assets/port-chip-CUUIDOVM.css +1 -0
  287. package/dist/public/assets/port-chip-CUUIDOVM.css.br +0 -0
  288. package/dist/public/assets/prompt-dialog-BGs6RXOV.css +1 -0
  289. package/dist/public/assets/prompt-dialog-BGs6RXOV.css.br +0 -0
  290. package/dist/public/assets/{quick-open-DVqzk3-g.css → quick-open-Gx4so1bl.css} +1 -1
  291. package/dist/public/assets/quick-open-Gx4so1bl.css.br +0 -0
  292. package/dist/public/assets/repo-picker-CUhd0vJN.css +1 -0
  293. package/dist/public/assets/repo-picker-CUhd0vJN.css.br +4 -0
  294. package/dist/public/assets/review-view-DFEK9VBa.js +2 -0
  295. package/dist/public/assets/{review-view-DqMrB4Ny.css → review-view-deUY3OE5.css} +1 -1
  296. package/dist/public/assets/review-view-deUY3OE5.css.br +0 -0
  297. package/dist/public/assets/section-CziSOSBR.css +1 -0
  298. package/dist/public/assets/section-CziSOSBR.css.br +0 -0
  299. package/dist/public/assets/settings-DHI77GvL.js +1 -0
  300. package/dist/public/assets/settings-page-OOtPOzIn.js +2 -0
  301. package/dist/public/assets/settings-page-wZhd7FLi.css +1 -0
  302. package/dist/public/assets/settings-page-wZhd7FLi.css.br +0 -0
  303. package/dist/public/assets/skill-row-BoCyFIXg.css +1 -0
  304. package/dist/public/assets/sso-auth-DV76tTpE.css +1 -0
  305. package/dist/public/assets/sso-auth-DV76tTpE.css.br +0 -0
  306. package/dist/public/assets/w-DHI77GvL.js +1 -0
  307. package/dist/public/assets/w._-DHI77GvL.js +1 -0
  308. package/dist/public/assets/w._-DsTgq3-C.js +1 -0
  309. package/dist/public/assets/w._-igEOSPR-.js +1 -0
  310. package/lib/review/markdown.mjs +5 -5
  311. package/lib/setup/bridge.d.mts +10 -0
  312. package/lib/setup/bridge.mjs +84 -0
  313. package/lib/setup/doctor.d.mts +5 -0
  314. package/lib/setup/doctor.mjs +45 -1
  315. package/lib/setup/install.d.mts +1 -0
  316. package/lib/setup/install.mjs +21 -1
  317. package/lib/setup/listen.mjs +2 -2
  318. package/lib/share/manifest.mjs +2 -1
  319. package/package.json +2 -3
  320. package/dist/_LF2Fo5WE.js +0 -2
  321. package/dist/public/assets/_--tE4Gxz.js.br +0 -0
  322. package/dist/public/assets/_1OL9vXM-.js +0 -1
  323. package/dist/public/assets/_2mnAZf6B.js.br +0 -0
  324. package/dist/public/assets/_5f9fMvWJ.js +0 -1
  325. package/dist/public/assets/_5y69OR6M.js +0 -1
  326. package/dist/public/assets/_Aq9oGnRu.js.br +0 -0
  327. package/dist/public/assets/_B0uJCjmk.js +0 -1
  328. package/dist/public/assets/_B1RldJ0S.js.br +0 -0
  329. package/dist/public/assets/_B5TpOQCZ.js +0 -1
  330. package/dist/public/assets/_B6UdulKa.js +0 -1
  331. package/dist/public/assets/_BA8HFnO3.js.br +0 -0
  332. package/dist/public/assets/_BAHrOydH.js.br +0 -0
  333. package/dist/public/assets/_BBpX-M4b.js.br +0 -0
  334. package/dist/public/assets/_BCZpExov.js.br +0 -0
  335. package/dist/public/assets/_BFZHNauV.js +0 -1
  336. package/dist/public/assets/_BJRSndB4.js.br +0 -0
  337. package/dist/public/assets/_BL9QMk_P.js.br +0 -0
  338. package/dist/public/assets/_BLNEzyb5.js +0 -1
  339. package/dist/public/assets/_BLRpf6Uw.js.br +0 -0
  340. package/dist/public/assets/_BLTfQLdY.js.br +0 -0
  341. package/dist/public/assets/_BO0OB-rz.js.br +0 -0
  342. package/dist/public/assets/_BPcswKMK.js.br +0 -0
  343. package/dist/public/assets/_BPhXWliU.js +0 -1
  344. package/dist/public/assets/_BQXTv9Cr.js +0 -1
  345. package/dist/public/assets/_BRG_DBcC.js.br +0 -0
  346. package/dist/public/assets/_BS4crAAm.js.br +0 -0
  347. package/dist/public/assets/_BVp6r0fg.js.br +0 -0
  348. package/dist/public/assets/_BXT2bXMi.js.br +0 -0
  349. package/dist/public/assets/_B_zyAtSJ.js.br +0 -0
  350. package/dist/public/assets/_BaXKdIeb.js +0 -1
  351. package/dist/public/assets/_BbiACo0Y.js.br +0 -0
  352. package/dist/public/assets/_BdvO5Lqa.js.br +0 -0
  353. package/dist/public/assets/_BeE9qDu0.js.br +0 -0
  354. package/dist/public/assets/_BewXp5Y_.js.br +0 -0
  355. package/dist/public/assets/_BfOOLKo5.js +0 -1
  356. package/dist/public/assets/_BhS8bTnr.js +0 -1
  357. package/dist/public/assets/_BhZ3ZoG0.js +0 -1
  358. package/dist/public/assets/_Bi3_ZsOQ.js +0 -1
  359. package/dist/public/assets/_Bj_Lfa8B.js +0 -1
  360. package/dist/public/assets/_BlN_x04q.js +0 -1
  361. package/dist/public/assets/_Bn5nsnie.js +0 -1
  362. package/dist/public/assets/_BnOOD6nr.js.br +0 -0
  363. package/dist/public/assets/_BnyLUTdO.js.br +0 -0
  364. package/dist/public/assets/_Bp_WT09q.js.br +0 -0
  365. package/dist/public/assets/_BsimXDnm.js.br +0 -0
  366. package/dist/public/assets/_BsupnkWM.js.br +0 -0
  367. package/dist/public/assets/_BxAl0m64.js.br +0 -0
  368. package/dist/public/assets/_C-6dImS5.js.br +0 -0
  369. package/dist/public/assets/_C18Torhh.js +0 -1
  370. package/dist/public/assets/_C1PmcEws.js.br +0 -0
  371. package/dist/public/assets/_C2ZpyiHV.js.br +0 -0
  372. package/dist/public/assets/_C3P1VHUI.js +0 -1
  373. package/dist/public/assets/_C6xwTKke.js +0 -1
  374. package/dist/public/assets/_C6yqlRfl.js +0 -1
  375. package/dist/public/assets/_C75D8bH2.js +0 -1
  376. package/dist/public/assets/_C87NBm9i.js.br +0 -0
  377. package/dist/public/assets/_C8Vc_vBH.js +0 -1
  378. package/dist/public/assets/_C9OdJcx4.js.br +0 -0
  379. package/dist/public/assets/_C9eoo0sE.js +0 -1
  380. package/dist/public/assets/_C9qO_dny.js.br +0 -0
  381. package/dist/public/assets/_CB31bp-W.js.br +0 -0
  382. package/dist/public/assets/_CCCQMLw5.js.br +0 -0
  383. package/dist/public/assets/_CCie36pi.js +0 -1
  384. package/dist/public/assets/_CDD9N34p.js +0 -1
  385. package/dist/public/assets/_CE5MhJWL.js.br +0 -0
  386. package/dist/public/assets/_CGLpCj_I.js.br +0 -0
  387. package/dist/public/assets/_CJ9j8N5Z.js.br +0 -0
  388. package/dist/public/assets/_CLDmR3jR.js.br +0 -0
  389. package/dist/public/assets/_CLerZOx-.js.br +0 -0
  390. package/dist/public/assets/_CM5GtJb2.js +0 -1
  391. package/dist/public/assets/_COECwOVb.js +0 -1
  392. package/dist/public/assets/_CSQE9nMN.js +0 -1
  393. package/dist/public/assets/_CSXMgHLQ.js +0 -1
  394. package/dist/public/assets/_CVRiByCT.js +0 -1
  395. package/dist/public/assets/_CVSrm4Pl.js +0 -1
  396. package/dist/public/assets/_CX1wufuh.js.br +0 -0
  397. package/dist/public/assets/_CYNAhnRH.js.br +0 -0
  398. package/dist/public/assets/_CZGS4T08.js.br +0 -0
  399. package/dist/public/assets/_C_L7l9Mg.js +0 -1
  400. package/dist/public/assets/_CaMrYy1W.js +0 -1
  401. package/dist/public/assets/_CdgAsi3s.js.br +0 -0
  402. package/dist/public/assets/_Ce-E7sJE.js +0 -1
  403. package/dist/public/assets/_Cg3S760D.js +0 -1
  404. package/dist/public/assets/_CicyY7KP.js +0 -1
  405. package/dist/public/assets/_Ck0YOw_7.js +0 -1
  406. package/dist/public/assets/_CmHlTZSs.js +0 -1
  407. package/dist/public/assets/_CnECYh66.js +0 -1
  408. package/dist/public/assets/_CnKYioYw.js.br +0 -0
  409. package/dist/public/assets/_CnUVvVPd.js +0 -1
  410. package/dist/public/assets/_CqSgGCGC.js +0 -1
  411. package/dist/public/assets/_CttJbiei.js.br +0 -0
  412. package/dist/public/assets/_CtyJUmXC.js.br +0 -0
  413. package/dist/public/assets/_Cw_8WbwF.js.br +0 -0
  414. package/dist/public/assets/_CwmzEsB4.js.br +0 -0
  415. package/dist/public/assets/_CzETFsJs.js +0 -1
  416. package/dist/public/assets/_D-S9H-tX.js +0 -1
  417. package/dist/public/assets/_D-hK5uFn.js.br +0 -0
  418. package/dist/public/assets/_D5fTwHXK.js +0 -1
  419. package/dist/public/assets/_D8u1YU9b.js.br +0 -0
  420. package/dist/public/assets/_DAH8evhA.js +0 -1
  421. package/dist/public/assets/_DAemmoHI.js +0 -1
  422. package/dist/public/assets/_DEMYxWZf.js +0 -1
  423. package/dist/public/assets/_DGTQBWy0.js.br +0 -0
  424. package/dist/public/assets/_DHhv0pCA.js +0 -1
  425. package/dist/public/assets/_DI0QHEXB.js.br +0 -0
  426. package/dist/public/assets/_DJ3UAR_s.js.br +0 -0
  427. package/dist/public/assets/_DKu6UxI7.js +0 -1
  428. package/dist/public/assets/_DNC-9RBN.js +0 -1
  429. package/dist/public/assets/_DP-Bu7ET.js +0 -1
  430. package/dist/public/assets/_DYmmPBcq.js +0 -1
  431. package/dist/public/assets/_Da2Dmt_d.js.br +0 -0
  432. package/dist/public/assets/_DaqT6m41.js.br +0 -0
  433. package/dist/public/assets/_DbVyutEZ.js +0 -1
  434. package/dist/public/assets/_DcBvO2Si.js +0 -1
  435. package/dist/public/assets/_DeCJ44Me.js.br +0 -0
  436. package/dist/public/assets/_DeN4EY8L.js.br +0 -0
  437. package/dist/public/assets/_DhEdzMUw.js.br +0 -0
  438. package/dist/public/assets/_DhNuRs-V.js.br +0 -0
  439. package/dist/public/assets/_DiqV5bDH.js.br +0 -0
  440. package/dist/public/assets/_Diqt_yCf.js +0 -1
  441. package/dist/public/assets/_DlpTErRA.js.br +0 -0
  442. package/dist/public/assets/_DmDSLxrw.js.br +0 -0
  443. package/dist/public/assets/_DoC0qbSD.js +0 -1
  444. package/dist/public/assets/_DoCtdMd2.js.br +0 -0
  445. package/dist/public/assets/_DpqWFkMg.js +0 -1
  446. package/dist/public/assets/_Dr0Bkgso.js +0 -1
  447. package/dist/public/assets/_Dt-n9FaQ.js +0 -1
  448. package/dist/public/assets/_DtOzdwHm.js.br +0 -0
  449. package/dist/public/assets/_DuGmU4h0.js.br +0 -0
  450. package/dist/public/assets/_DuXOUegE.js.br +0 -0
  451. package/dist/public/assets/_DuaocJd1.js +0 -1
  452. package/dist/public/assets/_DuarImb7.js.br +0 -0
  453. package/dist/public/assets/_DwcoW-IU.js.br +0 -0
  454. package/dist/public/assets/_DxVt7Zuk.js.br +0 -0
  455. package/dist/public/assets/_Fzbz4zvE.js.br +0 -0
  456. package/dist/public/assets/_I5oX-lGP.js +0 -1
  457. package/dist/public/assets/_IWMmnVCy.js.br +0 -0
  458. package/dist/public/assets/_O70J1Mfv.js.br +0 -0
  459. package/dist/public/assets/_SwbsOoi9.js.br +0 -0
  460. package/dist/public/assets/_Yy39CykK.js +0 -1
  461. package/dist/public/assets/__Oa255vo.js.br +0 -0
  462. package/dist/public/assets/_bPze7k1x.js +0 -1
  463. package/dist/public/assets/_bU1KcT1I.js +0 -1
  464. package/dist/public/assets/_dr95P55a.js.br +0 -0
  465. package/dist/public/assets/_eQK3EZCc.js.br +0 -0
  466. package/dist/public/assets/_gPFPzzPF.js.br +0 -0
  467. package/dist/public/assets/_hzpOPZUB.js +0 -1
  468. package/dist/public/assets/_ifUb4WX7.js.br +0 -0
  469. package/dist/public/assets/_kQ7LiSim.js +0 -1
  470. package/dist/public/assets/_lOAW1VLM.js +0 -1
  471. package/dist/public/assets/_mnBdD4YN.js.br +0 -0
  472. package/dist/public/assets/_odBcV1kc.js +0 -1
  473. package/dist/public/assets/_pP1W6w5v.js.br +0 -0
  474. package/dist/public/assets/_pUYwxsdF.js.br +0 -0
  475. package/dist/public/assets/_pvS44-AC.js.br +0 -0
  476. package/dist/public/assets/_qJTL2ooe.js.br +0 -0
  477. package/dist/public/assets/_s5Jez2mu.js.br +0 -0
  478. package/dist/public/assets/_unfL8mz1.js.br +0 -0
  479. package/dist/public/assets/_unwtcXFQ.js.br +0 -0
  480. package/dist/public/assets/_vKQopDwG.js.br +0 -0
  481. package/dist/public/assets/_w1aegGdT.js +0 -1
  482. package/dist/public/assets/_xdrkfok5.js.br +0 -0
  483. package/dist/public/assets/_y-lm36fI.js +0 -1
  484. package/dist/public/assets/_zKlxcAnQ.js.br +0 -0
  485. package/dist/public/assets/app-shell-CpPCwWPW.css.br +0 -0
  486. package/dist/public/assets/files-view-BfCdcfXX.js +0 -2
  487. package/dist/public/assets/files-view-DtI7JE-f.css.br +0 -0
  488. package/dist/public/assets/group.css.ts-SeaNz7WZ.css +0 -1
  489. package/dist/public/assets/group.css.ts-SeaNz7WZ.css.br +0 -0
  490. package/dist/public/assets/icon-folder-DHVc-REl.css +0 -1
  491. package/dist/public/assets/icon-folder-DHVc-REl.css.br +0 -0
  492. package/dist/public/assets/icon-search-DAtjHWFL.css.br +0 -0
  493. package/dist/public/assets/manage-workspace-6i6Zeai7.css +0 -1
  494. package/dist/public/assets/manage-workspace-CixeMkdt.js +0 -2
  495. package/dist/public/assets/modal-view-D0qnmuJE.css.br +0 -0
  496. package/dist/public/assets/new-DxhaKmbF.js +0 -1
  497. package/dist/public/assets/new-workspace-BXjDRbqF.css +0 -1
  498. package/dist/public/assets/new-workspace-BXjDRbqF.css.br +0 -0
  499. package/dist/public/assets/new-workspace-DG693v2S.js +0 -2
  500. package/dist/public/assets/port-chip-Lz3mVJWb.css +0 -1
  501. package/dist/public/assets/port-chip-Lz3mVJWb.css.br +0 -0
  502. package/dist/public/assets/prompt-dialog-vhnae1-x.css +0 -1
  503. package/dist/public/assets/prompt-dialog-vhnae1-x.css.br +0 -0
  504. package/dist/public/assets/quick-open-DVqzk3-g.css.br +0 -0
  505. package/dist/public/assets/repo-picker-K5RYsEge.css +0 -1
  506. package/dist/public/assets/repo-picker-K5RYsEge.css.br +0 -0
  507. package/dist/public/assets/review-view-DqMrB4Ny.css.br +0 -0
  508. package/dist/public/assets/review-view-TdLbCgEg.js +0 -2
  509. package/dist/public/assets/section-2MyJSq5D.css +0 -1
  510. package/dist/public/assets/section-2MyJSq5D.css.br +0 -0
  511. package/dist/public/assets/settings-DxhaKmbF.js +0 -1
  512. package/dist/public/assets/settings-page-BBAG94Vh.js +0 -2
  513. package/dist/public/assets/settings-page-DUefc32x.css +0 -1
  514. package/dist/public/assets/settings-page-DUefc32x.css.br +0 -0
  515. package/dist/public/assets/skill-row-BeOk8NK8.css +0 -1
  516. package/dist/public/assets/sso-auth-CU3fGJ4U.css +0 -1
  517. package/dist/public/assets/sso-auth-CU3fGJ4U.css.br +0 -0
  518. package/dist/public/assets/w-DxhaKmbF.js +0 -1
  519. package/dist/public/assets/w._-C6JVdFgi.js +0 -1
  520. package/dist/public/assets/w._-DxhaKmbF.js +0 -1
  521. package/dist/public/assets/w._-rfvcDGPk.js +0 -1
  522. package/scripts/migrate.mjs +0 -682
package/README.md CHANGED
@@ -44,12 +44,6 @@ offers the agent CLIs, and runs `pnpm install`:
44
44
 
45
45
  ```sh
46
46
  pnpm dev # http://localhost:7171
47
- ```
48
-
49
- For a production build plus a background service (systemd on Linux, launchd on macOS):
50
-
51
- ```sh
52
- ./scripts/setup-prod.sh # build + install + start the service
53
47
 
54
48
  # While hacking on work itself, point the background service at a checkout
55
49
  # (and back at the npm install when done):
@@ -58,8 +52,6 @@ work-source local # this tree (or: work-source local /path/to/work)
58
52
  work-source rebuild # rebuild + restart without rewriting the unit
59
53
  work-source prod # global @dylanpiercey/work again
60
54
  work-source # status
61
- ./scripts/run-prod.sh # or: build with --no-service and run manually
62
- ./scripts/update.sh # later: pull latest, rebuild, restart
63
55
  ```
64
56
 
65
57
  ### Access
@@ -85,10 +77,8 @@ Access, `tailscale serve` — and tell work about it:
85
77
  Set them when installing (`WORK_ALLOWED_HOSTS=… WORK_TRUSTED_PROXIES=…
86
78
  WORK_LISTEN=0.0.0.0 work setup`); `work setup` keeps them in the service
87
79
  from then on. A refused request gets a page saying which setting it needs.
88
- Installs from before this default keep listening on every interface, and
89
- other machines see that page until they are configured. Everything (pages,
90
- API, and the `/term` websockets) serves from the single app port, so route
91
- the whole hostname to it.
80
+ Everything (pages, API, and the `/term` websockets) serves from the single
81
+ app port, so route the whole hostname to it.
92
82
 
93
83
  **Opening workspace ports remotely.** The port chips in the sidebar link to
94
84
  `http://<host>:<port>`, which only works where the machine is reachable
@@ -114,11 +104,6 @@ auth as the app. API writes and the terminal websockets refuse a foreign
114
104
  `Origin`, so a page a workspace serves cannot drive work with the shared
115
105
  login cookie.
116
106
 
117
- > **Upgrading from the two-port layout:** older setups routed `/term/*` to a
118
- > separate terminal port (7172). That port no longer exists — remove the
119
- > `/term` rule from your tunnel/proxy config and send all traffic to the app
120
- > port, or terminals will fail to connect.
121
-
122
107
  ## Backup, restore, join
123
108
 
124
109
  A `work` machine holds almost nothing that lives only there: branches are
@@ -163,16 +148,6 @@ targeting that branch.
163
148
  | `WORK_USER` / `WORK_HOST` | current user/host | Branch-name prefix parts |
164
149
  | `WORK_BRANCH_PREFIX` | `<user>-<host>` | Whole branch-name prefix, overriding the parts |
165
150
 
166
- Ports and paths can be exported before `scripts/setup-prod.sh` to bake them into
167
- the service. For settings that should outlive an update, put them in an untracked
168
- `.env.local` at the repo root instead — `scripts/run-prod.sh` reads it on every
169
- start (the dev server does not), only `WORK_*` names apply, and the
170
- surrounding environment still takes precedence:
171
-
172
- ```sh
173
- WORK_BRANCH_PREFIX=rturnq
174
- ```
175
-
176
151
  The usage panel (and `work usage`) reads plan/quota windows straight from each
177
152
  agent CLI's own credentials on disk — Claude, Codex, Cursor, Grok, and Copilot
178
153
  (via `gh`'s token). Providers you are not signed into simply say so.
package/bin/work.mjs CHANGED
@@ -28,7 +28,8 @@ import os from "node:os";
28
28
  import path from "node:path";
29
29
  import { fileURLToPath } from "node:url";
30
30
  import { doctor, formatDoctor, setupPath } from "../lib/setup/doctor.mjs";
31
- import { installTool } from "../lib/setup/install.mjs";
31
+ import { installTool, repairGhHelpers } from "../lib/setup/install.mjs";
32
+ import { bridgeCommands, bridgeIfNeeded } from "../lib/setup/bridge.mjs";
32
33
  import { dialHost, listenStream } from "../lib/setup/listen.mjs";
33
34
  import { commentMarkdown } from "../lib/review/markdown.mjs";
34
35
  import { formatInvite, parseInvite } from "../lib/share/manifest.mjs";
@@ -87,9 +88,12 @@ switch (command) {
87
88
  await setup();
88
89
  break;
89
90
  case "install-service":
90
- // Service installation only — no doctor/fix, no migrate. Used by
91
- // scripts/setup-prod.sh so npm and source installs share one
92
- // definition; WORK_SERVICE_EXEC points it at a checkout's run-prod.sh.
91
+ // Service installation only — no doctor/fix. Used by
92
+ // scripts/work-source.sh so a checkout and the npm package share one
93
+ // definition; WORK_SERVICE_EXEC points it at the checkout's
94
+ // run-local.sh. The database is brought to the baseline first all the
95
+ // same: a server this checkout builds cannot open one from before it.
96
+ await bridge();
93
97
  if (!installService()) {
94
98
  process.exitCode = 1;
95
99
  } else if (await waitForServer()) {
@@ -101,12 +105,6 @@ switch (command) {
101
105
  process.exitCode = 1;
102
106
  }
103
107
  break;
104
- case "migrate":
105
- // The one-shot cleanups alone, against the service's settings (and the
106
- // checkout's .env.local when WORK_SERVICE_EXEC names one). Used by
107
- // scripts/update.sh ahead of setup-prod.sh.
108
- process.exitCode = migrate();
109
- break;
110
108
  case "doctor":
111
109
  await doctorCmd();
112
110
  break;
@@ -151,7 +149,7 @@ switch (command) {
151
149
  break;
152
150
  default:
153
151
  console.log(
154
- `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]`,
152
+ `work ${pkg.version}\n\nusage: work <setup|install-service|doctor|start|update|usage|workspaces|workspace|repos|procs|review|export|restore|share|join|version> [--json]`,
155
153
  );
156
154
  }
157
155
 
@@ -639,10 +637,9 @@ function until(iso) {
639
637
  }
640
638
 
641
639
  async function setup() {
640
+ await bridge();
642
641
  await fix(await doctor());
643
642
 
644
- migrate();
645
-
646
643
  const running = installService();
647
644
  const port = serviceEnv().PORT;
648
645
  maybeTunnel(port);
@@ -669,19 +666,24 @@ async function setup() {
669
666
  }
670
667
  }
671
668
 
672
- /** One-shot cleanups between versions (scripts/migrate.mjs), run against
673
- * the settings the service actually uses: migrate.mjs exits quietly when it
674
- * finds no db, so an ambient environment missing WORK_DATA_DIR skips every
675
- * sweep. A checkout's .env.local sits under both, as it does when its run
676
- * script starts the server. Returns the exit status. */
677
- function migrate() {
678
- const script = path.join(pkgRoot, "scripts", "migrate.mjs");
679
- if (!fs.existsSync(script)) return 0;
680
- return (
681
- spawnSync(process.execPath, [script], {
682
- stdio: "inherit",
683
- env: { ...checkoutEnvLocal(), ...process.env, ...serviceEnv() },
684
- }).status ?? 1
669
+ /** Bring a database from before 0.1 to the baseline this release starts
670
+ * from (lib/setup/bridge.mjs), before anything touches the service: the
671
+ * server it would restart refuses such a database. Run with the settings
672
+ * the service uses (a checkout's .env.local under them, as its run script
673
+ * has it), so it finds the data dir the server opens rather than whatever
674
+ * this shell has. On failure the service is left as it was, and what to
675
+ * run by hand ends the output. */
676
+ async function bridge() {
677
+ const env = { ...checkoutEnvLocal(), ...process.env, ...serviceEnv() };
678
+ const dataDir =
679
+ env.WORK_DATA_DIR ||
680
+ path.join(
681
+ env.XDG_DATA_HOME || path.join(os.homedir(), ".local", "share"),
682
+ "work",
683
+ );
684
+ if (bridgeIfNeeded(dataDir, env, log)) return;
685
+ die(
686
+ `${path.join(dataDir, "work.db")} is still from before 0.1, so the service was left as it was. Run:\n ${bridgeCommands(dataDir).join("\n ")}`,
685
687
  );
686
688
  }
687
689
 
@@ -789,6 +791,13 @@ async function fix(d) {
789
791
  "GitHub is not signed in. Open the app and use Settings → GitHub → Sign in",
790
792
  );
791
793
  }
794
+ if (d.staleGhHelpers.length) {
795
+ try {
796
+ repairGhHelpers(d.staleGhHelpers, { log });
797
+ } catch (err) {
798
+ warn(`could not repair git's gh credential helper: ${err.message}`);
799
+ }
800
+ }
792
801
  // Agent CLIs are installed from the app (Settings → Agents), where each
793
802
  // one is a click and the picker updates immediately — no prompt here.
794
803
  if (!d.agents.some((a) => a.installed)) {
@@ -833,25 +842,6 @@ function serviceFile() {
833
842
  );
834
843
  }
835
844
 
836
- /** Whether an installed service with no WORK_LISTEN line was installed
837
- * before the this-machine-only default. On Linux its shape tells: under the
838
- * default, work.socket binds an address (`127.0.0.1:7171`), where an older
839
- * service had no socket or bound a bare port. A launchd agent has no such
840
- * tell. */
841
- function predatesListenDefault() {
842
- if (!fs.existsSync(serviceFile())) return false;
843
- if (process.platform === "darwin") return true;
844
- try {
845
- const socket = fs.readFileSync(
846
- path.join(path.dirname(serviceFile()), "work.socket"),
847
- "utf8",
848
- );
849
- return /^ListenStream=\d+\s*$/m.test(socket);
850
- } catch {
851
- return true;
852
- }
853
- }
854
-
855
845
  /** One Environment= line systemd reads back as exactly this value. A value
856
846
  * holding whitespace, a quote, `\` or `%` is quoted, with `\` and `"`
857
847
  * escaped and `%` doubled, since systemd expands specifiers there: bare, a
@@ -901,8 +891,8 @@ function installedServiceEnv() {
901
891
  }
902
892
  return installed;
903
893
  }
904
- // unitEnvLine's quoted form, or an older service's bare `KEY=value`,
905
- // which was never escaped either.
894
+ // unitEnvLine's quoted form, or the bare `KEY=value` it writes for a
895
+ // plain value, which is not escaped either.
906
896
  const re =
907
897
  /^Environment=(?:"([A-Za-z_][A-Za-z0-9_]*)=((?:[^"\\]|\\.)*)"|([A-Za-z_][A-Za-z0-9_]*)=(.*))$/gm;
908
898
  for (const [, qKey, qValue, key, value] of text.matchAll(re)) {
@@ -916,9 +906,9 @@ function installedServiceEnv() {
916
906
  }
917
907
 
918
908
  /** WORK_* from the .env.local of the checkout WORK_SERVICE_EXEC runs, read
919
- * as scripts/env-local.sh reads it: that script exports them at start, under
920
- * whatever the service sets. Never written into the service, which would
921
- * shadow later edits of the file. */
909
+ * as scripts/run-local.sh reads it: that script exports them at start,
910
+ * under whatever the service sets. Never written into the service, which
911
+ * would shadow later edits of the file. */
922
912
  function checkoutEnvLocal() {
923
913
  const exec = process.env.WORK_SERVICE_EXEC;
924
914
  const out = {};
@@ -972,18 +962,8 @@ function serviceEnv() {
972
962
  const value = key in process.env ? process.env[key] : installed[key];
973
963
  if (value) env[key] = value;
974
964
  }
975
- // A new install listens on this machine only, and its service says so, so
976
- // that a missing line only ever means a service from before that default.
977
- // Those listened on every interface, and other machines (a phone, the
978
- // proxy in front of it) may be reaching it that way: keep it listening,
979
- // so they get work's page naming the setting to add (server/access.ts)
980
- // rather than a connection that is simply refused.
981
- if (!env.WORK_LISTEN) {
982
- env.WORK_LISTEN =
983
- !("WORK_LISTEN" in process.env) && predatesListenDefault()
984
- ? "0.0.0.0"
985
- : "127.0.0.1";
986
- }
965
+ // This machine only unless set, and the service says so.
966
+ env.WORK_LISTEN ||= "127.0.0.1";
987
967
  // entry.ts prefers PORT, so carrying WORK_APP_PORT forward without this
988
968
  // would leave the service on the default port anyway. A checkout's run
989
969
  // script serves the port its .env.local names, so the socket binds that
@@ -1022,9 +1002,7 @@ function isWorkServerCmd(cmd) {
1022
1002
  if (/\bwork(\.mjs)?\s+(setup|update|version)\b/.test(cmd)) return false;
1023
1003
  if (
1024
1004
  /\bwork\.mjs\s+start(?:\s|$)/.test(cmd) ||
1025
- /(?:^|[\s/])work\s+start(?:\s|$)/.test(cmd) ||
1026
- /--why=work server is running/.test(cmd) ||
1027
- /--why="work server is running"/.test(cmd)
1005
+ /(?:^|[\s/])work\s+start(?:\s|$)/.test(cmd)
1028
1006
  )
1029
1007
  return true;
1030
1008
  // A built server or run script, by the absolute path an interpreter was
@@ -1035,9 +1013,7 @@ function isWorkServerCmd(cmd) {
1035
1013
  const argv = cmd.split(/\s+/);
1036
1014
  return argv.some((arg, i) => {
1037
1015
  if (
1038
- !/^\/.*\/(?:(?:dist|\.run)\/index\.mjs|scripts\/run-(?:prod|local)\.sh)$/.test(
1039
- arg,
1040
- )
1016
+ !/^\/.*\/(?:(?:dist|\.run)\/index\.mjs|scripts\/run-local\.sh)$/.test(arg)
1041
1017
  )
1042
1018
  return false;
1043
1019
  const runner = argv
@@ -1129,10 +1105,9 @@ function killPids(pids, signal) {
1129
1105
  }
1130
1106
  }
1131
1107
 
1132
- /** Stop the managed service *and* any leftover checkout / `work start`
1133
- * process still bound to the port. A pre-npm install often wasn't the
1134
- * current unit (or was a bare node), so restarting work.service left it
1135
- * sitting in front of the new one. */
1108
+ /** Stop the managed service *and* any other work server still bound to
1109
+ * the port — a `work start` left in a terminal, a checkout's — which would
1110
+ * otherwise sit in front of the new one. */
1136
1111
  function stopOldCopies(port) {
1137
1112
  log("stopping any previous work server");
1138
1113
  if (process.platform === "darwin") {
@@ -1140,28 +1115,6 @@ function stopOldCopies(port) {
1140
1115
  spawnSync("launchctl", ["bootout", `gui/${uid}/dev.work.app`], {
1141
1116
  stdio: "ignore",
1142
1117
  });
1143
- const agents = path.join(os.homedir(), "Library/LaunchAgents");
1144
- try {
1145
- for (const name of fs.readdirSync(agents)) {
1146
- if (!name.endsWith(".plist")) continue;
1147
- const file = path.join(agents, name);
1148
- const text = fs.readFileSync(file, "utf8");
1149
- if (
1150
- !/dev\.work\.app|work\.mjs|run-prod\.sh|run-local\.sh|@dylanpiercey\/work/.test(
1151
- text,
1152
- )
1153
- )
1154
- continue;
1155
- const label = text.match(
1156
- /<key>Label<\/key>\s*<string>([^<]+)<\/string>/,
1157
- )?.[1];
1158
- if (label) {
1159
- spawnSync("launchctl", ["bootout", `gui/${uid}/${label}`], {
1160
- stdio: "ignore",
1161
- });
1162
- }
1163
- }
1164
- } catch {}
1165
1118
  } else if (have("systemctl")) {
1166
1119
  spawnSync("systemctl", ["--user", "stop", "work.service"], {
1167
1120
  stdio: "ignore",
@@ -1201,8 +1154,8 @@ function installService() {
1201
1154
  const port = serviceEnv().PORT;
1202
1155
  stopOldCopies(port);
1203
1156
  const cliPath = fileURLToPath(import.meta.url);
1204
- // One service definition serves both installers. A source install
1205
- // (scripts/setup-prod.sh) points the unit at this checkout's run-prod.sh
1157
+ // One service definition serves the npm package and a checkout:
1158
+ // scripts/work-source.sh points the unit at the checkout's run-local.sh
1206
1159
  // instead of the CLI — that script carries its own sleep inhibitor and
1207
1160
  // PORT handling, so no awake prefix is layered on top.
1208
1161
  const execOverride = process.env.WORK_SERVICE_EXEC;
@@ -1250,15 +1203,8 @@ ${envXml}
1250
1203
  stdio: "ignore",
1251
1204
  }).status === 0;
1252
1205
  if (!started) {
1253
- // A launchd that only speaks the legacy verbs: `load -w` honours
1254
- // RunAtLoad the same way.
1255
- started =
1256
- spawnSync("launchctl", ["load", "-w", plist], { stdio: "ignore" })
1257
- .status === 0;
1258
- }
1259
- if (!started) {
1260
- // Both refused because the job is loaded already (a bootout that did
1261
- // not take). Nothing spawned it with the new definition, and it is old
1206
+ // Refused because the job is loaded already (a bootout that did not
1207
+ // take). Nothing spawned it with the new definition, and it is old
1262
1208
  // enough not to be throttled, so restart it.
1263
1209
  started =
1264
1210
  spawnSync("launchctl", ["kickstart", "-k", label], { stdio: "ignore" })