@dylanpiercey/work 0.0.221 → 0.0.223

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 (541) hide show
  1. package/README.md +7 -4
  2. package/bin/work.mjs +70 -17
  3. package/dist/{_-MXZhaOD.js → _CpANOzpd.js} +313 -173
  4. package/dist/_LF2Fo5WE.js +2 -0
  5. package/dist/index.mjs +1572 -1804
  6. package/dist/public/assets/_--tE4Gxz.js +2 -0
  7. package/dist/public/assets/_--tE4Gxz.js.br +0 -0
  8. package/dist/public/assets/_1OL9vXM-.js +1 -0
  9. package/dist/public/assets/_2mnAZf6B.js +1 -0
  10. package/dist/public/assets/_2mnAZf6B.js.br +0 -0
  11. package/dist/public/assets/_5f9fMvWJ.js +1 -0
  12. package/dist/public/assets/_5y69OR6M.js +1 -0
  13. package/dist/public/assets/{_Cto7UR6x.js → _Aq9oGnRu.js} +1 -1
  14. package/dist/public/assets/_Aq9oGnRu.js.br +0 -0
  15. package/dist/public/assets/_B0uJCjmk.js +1 -0
  16. package/dist/public/assets/{_DzCAv2Gl.js → _B1RldJ0S.js} +1 -1
  17. package/dist/public/assets/_B1RldJ0S.js.br +0 -0
  18. package/dist/public/assets/_B5TpOQCZ.js +1 -0
  19. package/dist/public/assets/_B6UdulKa.js +1 -0
  20. package/dist/public/assets/{_Bgbe-7aj.js → _BA8HFnO3.js} +1 -1
  21. package/dist/public/assets/_BA8HFnO3.js.br +0 -0
  22. package/dist/public/assets/{_B59uDfC7.js → _BAHrOydH.js} +1 -1
  23. package/dist/public/assets/_BAHrOydH.js.br +0 -0
  24. package/dist/public/assets/{_DJa--qOX.js → _BBpX-M4b.js} +1 -1
  25. package/dist/public/assets/_BBpX-M4b.js.br +0 -0
  26. package/dist/public/assets/{_B8ypf2w7.js → _BCZpExov.js} +1 -1
  27. package/dist/public/assets/_BCZpExov.js.br +0 -0
  28. package/dist/public/assets/_BFZHNauV.js +1 -0
  29. package/dist/public/assets/_BGCK5I_O.js +1 -0
  30. package/dist/public/assets/_BGCK5I_O.js.br +0 -0
  31. package/dist/public/assets/_BJRSndB4.js +6 -0
  32. package/dist/public/assets/_BJRSndB4.js.br +0 -0
  33. package/dist/public/assets/{_IJOifsPN.js → _BL9QMk_P.js} +1 -1
  34. package/dist/public/assets/_BL9QMk_P.js.br +0 -0
  35. package/dist/public/assets/_BLNEzyb5.js +1 -0
  36. package/dist/public/assets/{_CiZ8pHbe.js → _BLRpf6Uw.js} +1 -1
  37. package/dist/public/assets/_BLRpf6Uw.js.br +0 -0
  38. package/dist/public/assets/{_CGLnSBxx.js → _BLTfQLdY.js} +1 -1
  39. package/dist/public/assets/_BLTfQLdY.js.br +0 -0
  40. package/dist/public/assets/{_ImG6Q5u4.js → _BO0OB-rz.js} +1 -1
  41. package/dist/public/assets/_BO0OB-rz.js.br +0 -0
  42. package/dist/public/assets/{_CW_p-nUL.js → _BPcswKMK.js} +1 -1
  43. package/dist/public/assets/_BPcswKMK.js.br +0 -0
  44. package/dist/public/assets/_BPhXWliU.js +1 -0
  45. package/dist/public/assets/_BQXTv9Cr.js +1 -0
  46. package/dist/public/assets/{_Cvh-VNIk.js → _BRG_DBcC.js} +1 -1
  47. package/dist/public/assets/_BRG_DBcC.js.br +0 -0
  48. package/dist/public/assets/{_DuQRbl1J.js → _BS4crAAm.js} +1 -1
  49. package/dist/public/assets/_BS4crAAm.js.br +0 -0
  50. package/dist/public/assets/{_B7FEL7wR.js → _BUH04L5e.js} +1 -1
  51. package/dist/public/assets/{_DXhRdKW7.js → _BVp6r0fg.js} +1 -1
  52. package/dist/public/assets/_BVp6r0fg.js.br +0 -0
  53. package/dist/public/assets/{_udAEKVMs.js → _BXT2bXMi.js} +1 -1
  54. package/dist/public/assets/_BXT2bXMi.js.br +0 -0
  55. package/dist/public/assets/{_CIs24vxl.js → _B_zyAtSJ.js} +1 -1
  56. package/dist/public/assets/_B_zyAtSJ.js.br +0 -0
  57. package/dist/public/assets/_BaXKdIeb.js +1 -0
  58. package/dist/public/assets/{_2L-OI8uX.js → _BbiACo0Y.js} +1 -1
  59. package/dist/public/assets/_BbiACo0Y.js.br +0 -0
  60. package/dist/public/assets/{_C86ZHeAp.js → _BdvO5Lqa.js} +1 -1
  61. package/dist/public/assets/_BdvO5Lqa.js.br +0 -0
  62. package/dist/public/assets/{_7PkH8MR2.js → _BeE9qDu0.js} +1 -1
  63. package/dist/public/assets/_BeE9qDu0.js.br +0 -0
  64. package/dist/public/assets/_BewXp5Y_.js +1 -0
  65. package/dist/public/assets/_BewXp5Y_.js.br +0 -0
  66. package/dist/public/assets/_BfOOLKo5.js +1 -0
  67. package/dist/public/assets/_BhS8bTnr.js +1 -0
  68. package/dist/public/assets/_BhZ3ZoG0.js +1 -0
  69. package/dist/public/assets/_Bi3_ZsOQ.js +1 -0
  70. package/dist/public/assets/_Bj_Lfa8B.js +1 -0
  71. package/dist/public/assets/_BlN_x04q.js +1 -0
  72. package/dist/public/assets/_Bn5nsnie.js +1 -0
  73. package/dist/public/assets/_BnOOD6nr.js +15 -0
  74. package/dist/public/assets/_BnOOD6nr.js.br +0 -0
  75. package/dist/public/assets/{_DccrUV-t.js → _BnyLUTdO.js} +1 -1
  76. package/dist/public/assets/_BnyLUTdO.js.br +0 -0
  77. package/dist/public/assets/_Bp_WT09q.js +1 -0
  78. package/dist/public/assets/_Bp_WT09q.js.br +0 -0
  79. package/dist/public/assets/{_CNyZnrbq.js → _BsimXDnm.js} +1 -1
  80. package/dist/public/assets/_BsimXDnm.js.br +0 -0
  81. package/dist/public/assets/_BsupnkWM.js +1 -0
  82. package/dist/public/assets/_BsupnkWM.js.br +0 -0
  83. package/dist/public/assets/{_BkmyKCts.js → _BxAl0m64.js} +1 -1
  84. package/dist/public/assets/_BxAl0m64.js.br +0 -0
  85. package/dist/public/assets/{_l5fDrx0F.js → _C-6dImS5.js} +1 -1
  86. package/dist/public/assets/_C-6dImS5.js.br +0 -0
  87. package/dist/public/assets/_C18Torhh.js +1 -0
  88. package/dist/public/assets/{_DNZFctlv.js → _C1PmcEws.js} +1 -1
  89. package/dist/public/assets/_C1PmcEws.js.br +0 -0
  90. package/dist/public/assets/{_C8fTPM4x.js → _C2ZpyiHV.js} +1 -1
  91. package/dist/public/assets/_C2ZpyiHV.js.br +0 -0
  92. package/dist/public/assets/_C3P1VHUI.js +1 -0
  93. package/dist/public/assets/{_CKiOrTnh.js → _C6i9NP5A.js} +1 -1
  94. package/dist/public/assets/_C6xwTKke.js +1 -0
  95. package/dist/public/assets/_C6yqlRfl.js +1 -0
  96. package/dist/public/assets/_C75D8bH2.js +1 -0
  97. package/dist/public/assets/{_CN5dKT5U.js → _C87NBm9i.js} +1 -1
  98. package/dist/public/assets/_C87NBm9i.js.br +0 -0
  99. package/dist/public/assets/_C8Vc_vBH.js +1 -0
  100. package/dist/public/assets/{_B8QLRTNE.js → _C9OdJcx4.js} +1 -1
  101. package/dist/public/assets/_C9OdJcx4.js.br +0 -0
  102. package/dist/public/assets/_C9eoo0sE.js +1 -0
  103. package/dist/public/assets/_C9qO_dny.js +1 -0
  104. package/dist/public/assets/_C9qO_dny.js.br +0 -0
  105. package/dist/public/assets/{_CtrIYddo.js → _CB31bp-W.js} +1 -1
  106. package/dist/public/assets/_CB31bp-W.js.br +0 -0
  107. package/dist/public/assets/{_DTRYzVXy.js → _CCCQMLw5.js} +1 -1
  108. package/dist/public/assets/_CCCQMLw5.js.br +0 -0
  109. package/dist/public/assets/_CCie36pi.js +1 -0
  110. package/dist/public/assets/_CDD9N34p.js +1 -0
  111. package/dist/public/assets/{_DlOIFmP5.js → _CE5MhJWL.js} +1 -1
  112. package/dist/public/assets/_CE5MhJWL.js.br +0 -0
  113. package/dist/public/assets/{_IYKAiNbQ.js → _CGLpCj_I.js} +1 -1
  114. package/dist/public/assets/_CGLpCj_I.js.br +0 -0
  115. package/dist/public/assets/{_4zMj-KgY.js → _CJ9j8N5Z.js} +1 -1
  116. package/dist/public/assets/_CJ9j8N5Z.js.br +0 -0
  117. package/dist/public/assets/{_B7aQVpV3.js → _CLDmR3jR.js} +1 -1
  118. package/dist/public/assets/_CLDmR3jR.js.br +0 -0
  119. package/dist/public/assets/{_DMuuYm9C.js → _CLerZOx-.js} +1 -1
  120. package/dist/public/assets/_CLerZOx-.js.br +0 -0
  121. package/dist/public/assets/_CM5GtJb2.js +1 -0
  122. package/dist/public/assets/_COECwOVb.js +1 -0
  123. package/dist/public/assets/_CSQE9nMN.js +1 -0
  124. package/dist/public/assets/_CSXMgHLQ.js +1 -0
  125. package/dist/public/assets/{_DgZrpFgz.js → _CT3clsOQ.js} +1 -1
  126. package/dist/public/assets/_CVRiByCT.js +1 -0
  127. package/dist/public/assets/_CVSrm4Pl.js +1 -0
  128. package/dist/public/assets/{_DLOPvUZY.js → _CX1wufuh.js} +1 -1
  129. package/dist/public/assets/_CX1wufuh.js.br +0 -0
  130. package/dist/public/assets/{_CPCx9DM-.js → _CYNAhnRH.js} +117 -117
  131. package/dist/public/assets/_CYNAhnRH.js.br +0 -0
  132. package/dist/public/assets/{_CZ62PUna.js → _CZGS4T08.js} +1 -1
  133. package/dist/public/assets/_CZGS4T08.js.br +0 -0
  134. package/dist/public/assets/_C_L7l9Mg.js +1 -0
  135. package/dist/public/assets/_CaMrYy1W.js +1 -0
  136. package/dist/public/assets/{_CA7oQPMX.js → _CdgAsi3s.js} +1 -1
  137. package/dist/public/assets/_CdgAsi3s.js.br +0 -0
  138. package/dist/public/assets/_Ce-E7sJE.js +1 -0
  139. package/dist/public/assets/_Cg3S760D.js +1 -0
  140. package/dist/public/assets/{_BDoav0oh.js → _ChpYg41R.js} +1 -1
  141. package/dist/public/assets/_CicyY7KP.js +1 -0
  142. package/dist/public/assets/_Ck0YOw_7.js +1 -0
  143. package/dist/public/assets/_CmHlTZSs.js +1 -0
  144. package/dist/public/assets/_CnECYh66.js +1 -0
  145. package/dist/public/assets/{_BA7jNaHU.js → _CnKYioYw.js} +1 -1
  146. package/dist/public/assets/_CnKYioYw.js.br +0 -0
  147. package/dist/public/assets/_CnUVvVPd.js +1 -0
  148. package/dist/public/assets/_CqSgGCGC.js +1 -0
  149. package/dist/public/assets/{_8jPfRR-S.js → _CttJbiei.js} +1 -1
  150. package/dist/public/assets/_CttJbiei.js.br +0 -0
  151. package/dist/public/assets/{_Cx8F-gsJ.js → _CtyJUmXC.js} +1 -1
  152. package/dist/public/assets/_CtyJUmXC.js.br +0 -0
  153. package/dist/public/assets/{_DxwuLWwv.js → _Cw_8WbwF.js} +1 -1
  154. package/dist/public/assets/_Cw_8WbwF.js.br +0 -0
  155. package/dist/public/assets/{_BZgSH_zH.js → _CwmzEsB4.js} +1 -1
  156. package/dist/public/assets/_CwmzEsB4.js.br +0 -0
  157. package/dist/public/assets/_CzETFsJs.js +1 -0
  158. package/dist/public/assets/_D-S9H-tX.js +1 -0
  159. package/dist/public/assets/{_C4dOkocS.js → _D-hK5uFn.js} +1 -1
  160. package/dist/public/assets/_D-hK5uFn.js.br +0 -0
  161. package/dist/public/assets/_D5fTwHXK.js +1 -0
  162. package/dist/public/assets/{_5iLDlaH-.js → _D8u1YU9b.js} +1 -1
  163. package/dist/public/assets/_D8u1YU9b.js.br +0 -0
  164. package/dist/public/assets/_DAH8evhA.js +1 -0
  165. package/dist/public/assets/_DAemmoHI.js +1 -0
  166. package/dist/public/assets/_DEMYxWZf.js +1 -0
  167. package/dist/public/assets/_DGTQBWy0.js +1 -0
  168. package/dist/public/assets/_DGTQBWy0.js.br +0 -0
  169. package/dist/public/assets/_DHhv0pCA.js +1 -0
  170. package/dist/public/assets/{_LSddbYPg.js → _DI0QHEXB.js} +1 -1
  171. package/dist/public/assets/_DI0QHEXB.js.br +0 -0
  172. package/dist/public/assets/{_B4jQnWBQ.js → _DJ3UAR_s.js} +1 -1
  173. package/dist/public/assets/_DJ3UAR_s.js.br +0 -0
  174. package/dist/public/assets/_DKu6UxI7.js +1 -0
  175. package/dist/public/assets/_DNC-9RBN.js +1 -0
  176. package/dist/public/assets/_DP-Bu7ET.js +1 -0
  177. package/dist/public/assets/_DYmmPBcq.js +1 -0
  178. package/dist/public/assets/_Da2Dmt_d.js +1 -0
  179. package/dist/public/assets/_Da2Dmt_d.js.br +0 -0
  180. package/dist/public/assets/{_D4Ta82Ad.js → _DaqT6m41.js} +1 -1
  181. package/dist/public/assets/_DaqT6m41.js.br +0 -0
  182. package/dist/public/assets/_DbVyutEZ.js +1 -0
  183. package/dist/public/assets/_DcBvO2Si.js +1 -0
  184. package/dist/public/assets/{_B0VKtqZ9.js → _DeCJ44Me.js} +1 -1
  185. package/dist/public/assets/_DeCJ44Me.js.br +0 -0
  186. package/dist/public/assets/{_CVYE0HUe.js → _DeN4EY8L.js} +1 -1
  187. package/dist/public/assets/_DeN4EY8L.js.br +0 -0
  188. package/dist/public/assets/{_DBpSHwsH.js → _DhEdzMUw.js} +1 -1
  189. package/dist/public/assets/_DhEdzMUw.js.br +0 -0
  190. package/dist/public/assets/{_DX2UfSkV.js → _DhNuRs-V.js} +1 -1
  191. package/dist/public/assets/_DhNuRs-V.js.br +0 -0
  192. package/dist/public/assets/{_BscapHlE.js → _DiqV5bDH.js} +1 -1
  193. package/dist/public/assets/_DiqV5bDH.js.br +0 -0
  194. package/dist/public/assets/_Diqt_yCf.js +1 -0
  195. package/dist/public/assets/{_CT-gn1Q3.js → _DlpTErRA.js} +1 -1
  196. package/dist/public/assets/_DlpTErRA.js.br +0 -0
  197. package/dist/public/assets/{_B9H0wf6g.js → _DmDSLxrw.js} +1 -1
  198. package/dist/public/assets/_DmDSLxrw.js.br +0 -0
  199. package/dist/public/assets/_DoC0qbSD.js +1 -0
  200. package/dist/public/assets/{_CBdbNtLm.js → _DoCtdMd2.js} +1 -1
  201. package/dist/public/assets/_DoCtdMd2.js.br +0 -0
  202. package/dist/public/assets/_DpqWFkMg.js +1 -0
  203. package/dist/public/assets/_Dr0Bkgso.js +1 -0
  204. package/dist/public/assets/_Dt-n9FaQ.js +1 -0
  205. package/dist/public/assets/_DtOzdwHm.js +1 -0
  206. package/dist/public/assets/_DtOzdwHm.js.br +0 -0
  207. package/dist/public/assets/{_CVimy4Le.js → _DuGmU4h0.js} +1 -1
  208. package/dist/public/assets/_DuGmU4h0.js.br +0 -0
  209. package/dist/public/assets/{_khh1x77_.js → _DuXOUegE.js} +1 -1
  210. package/dist/public/assets/_DuXOUegE.js.br +0 -0
  211. package/dist/public/assets/_DuaocJd1.js +1 -0
  212. package/dist/public/assets/{_Cdr1LImQ.js → _DuarImb7.js} +1 -1
  213. package/dist/public/assets/_DuarImb7.js.br +0 -0
  214. package/dist/public/assets/{_d0O4aA0L.js → _DwcoW-IU.js} +1 -1
  215. package/dist/public/assets/_DwcoW-IU.js.br +0 -0
  216. package/dist/public/assets/{_Mrawm4gM.js → _DxVt7Zuk.js} +12 -12
  217. package/dist/public/assets/_DxVt7Zuk.js.br +0 -0
  218. package/dist/public/assets/{_D7eFF5Zh.js → _DzrtBP-L.js} +1 -1
  219. package/dist/public/assets/{_BgvkMEDS.js → _Fzbz4zvE.js} +1 -1
  220. package/dist/public/assets/_Fzbz4zvE.js.br +0 -0
  221. package/dist/public/assets/_I5oX-lGP.js +1 -0
  222. package/dist/public/assets/{_DlpWFr6R.js → _IWMmnVCy.js} +1 -1
  223. package/dist/public/assets/_IWMmnVCy.js.br +0 -0
  224. package/dist/public/assets/{_DE_Y-0-h.js → _O70J1Mfv.js} +1 -1
  225. package/dist/public/assets/_O70J1Mfv.js.br +0 -0
  226. package/dist/public/assets/_SwbsOoi9.js +1 -0
  227. package/dist/public/assets/_SwbsOoi9.js.br +0 -0
  228. package/dist/public/assets/_Yy39CykK.js +1 -0
  229. package/dist/public/assets/{_BD5g3CBa.js → __Oa255vo.js} +1 -1
  230. package/dist/public/assets/__Oa255vo.js.br +0 -0
  231. package/dist/public/assets/_bPze7k1x.js +1 -0
  232. package/dist/public/assets/_bU1KcT1I.js +1 -0
  233. package/dist/public/assets/{_CP0AloMu.js → _dr95P55a.js} +1 -1
  234. package/dist/public/assets/_dr95P55a.js.br +0 -0
  235. package/dist/public/assets/{_vXrbhKaS.js → _eQK3EZCc.js} +1 -1
  236. package/dist/public/assets/_eQK3EZCc.js.br +0 -0
  237. package/dist/public/assets/{_BgPQq_uu.js → _gPFPzzPF.js} +1 -1
  238. package/dist/public/assets/_gPFPzzPF.js.br +0 -0
  239. package/dist/public/assets/_hzpOPZUB.js +1 -0
  240. package/dist/public/assets/{_C1TYaRDe.js → _ifUb4WX7.js} +1 -1
  241. package/dist/public/assets/_ifUb4WX7.js.br +0 -0
  242. package/dist/public/assets/_kQ7LiSim.js +1 -0
  243. package/dist/public/assets/_lOAW1VLM.js +1 -0
  244. package/dist/public/assets/{_DRTW5fd9.js → _mnBdD4YN.js} +1 -1
  245. package/dist/public/assets/_mnBdD4YN.js.br +0 -0
  246. package/dist/public/assets/_odBcV1kc.js +1 -0
  247. package/dist/public/assets/{_XFhH3dP0.js → _pP1W6w5v.js} +1 -1
  248. package/dist/public/assets/_pP1W6w5v.js.br +0 -0
  249. package/dist/public/assets/{_CzvJRV9T.js → _pUYwxsdF.js} +1 -1
  250. package/dist/public/assets/_pUYwxsdF.js.br +0 -0
  251. package/dist/public/assets/{_Hd-PFNkS.js → _pvS44-AC.js} +1 -1
  252. package/dist/public/assets/_pvS44-AC.js.br +0 -0
  253. package/dist/public/assets/_qJTL2ooe.js +1 -0
  254. package/dist/public/assets/_qJTL2ooe.js.br +0 -0
  255. package/dist/public/assets/{_8cXksh59.js → _s5Jez2mu.js} +1 -1
  256. package/dist/public/assets/_s5Jez2mu.js.br +0 -0
  257. package/dist/public/assets/{_nIuAA97l.js → _unfL8mz1.js} +1 -1
  258. package/dist/public/assets/_unfL8mz1.js.br +0 -0
  259. package/dist/public/assets/_unwtcXFQ.js +1 -0
  260. package/dist/public/assets/_unwtcXFQ.js.br +0 -0
  261. package/dist/public/assets/{_DILlGU4L.js → _vKQopDwG.js} +1 -1
  262. package/dist/public/assets/_vKQopDwG.js.br +0 -0
  263. package/dist/public/assets/_w1aegGdT.js +1 -0
  264. package/dist/public/assets/_xdrkfok5.js +1 -0
  265. package/dist/public/assets/_xdrkfok5.js.br +0 -0
  266. package/dist/public/assets/_y-lm36fI.js +1 -0
  267. package/dist/public/assets/{_Q3J62UbV.js → _zKlxcAnQ.js} +1 -1
  268. package/dist/public/assets/_zKlxcAnQ.js.br +0 -0
  269. package/dist/public/assets/app-shell-CpPCwWPW.css +1 -0
  270. package/dist/public/assets/app-shell-CpPCwWPW.css.br +0 -0
  271. package/dist/public/assets/files-view-BfCdcfXX.js +2 -0
  272. package/dist/public/assets/files-view-DtI7JE-f.css +1 -0
  273. package/dist/public/assets/files-view-DtI7JE-f.css.br +0 -0
  274. package/dist/public/assets/group.css.ts-SeaNz7WZ.css +1 -0
  275. package/dist/public/assets/group.css.ts-SeaNz7WZ.css.br +0 -0
  276. package/dist/public/assets/icon-folder-DHVc-REl.css +1 -0
  277. package/dist/public/assets/icon-folder-DHVc-REl.css.br +0 -0
  278. package/dist/public/assets/{icon-search-CQX_Oqgo.css → icon-search-DAtjHWFL.css} +1 -1
  279. package/dist/public/assets/icon-search-DAtjHWFL.css.br +0 -0
  280. package/dist/public/assets/manage-workspace-6i6Zeai7.css +1 -0
  281. package/dist/public/assets/manage-workspace-CixeMkdt.js +2 -0
  282. package/dist/public/assets/{modal-view-BY2E8mw2.css → modal-view-D0qnmuJE.css} +1 -1
  283. package/dist/public/assets/modal-view-D0qnmuJE.css.br +0 -0
  284. package/dist/public/assets/new-DxhaKmbF.js +1 -0
  285. package/dist/public/assets/new-workspace-BXjDRbqF.css +1 -0
  286. package/dist/public/assets/new-workspace-BXjDRbqF.css.br +0 -0
  287. package/dist/public/assets/new-workspace-DG693v2S.js +2 -0
  288. package/dist/public/assets/port-chip-Lz3mVJWb.css +1 -0
  289. package/dist/public/assets/{port-chip-9ONt0A-X.css.br → port-chip-Lz3mVJWb.css.br} +0 -0
  290. package/dist/public/assets/prompt-dialog-vhnae1-x.css +1 -0
  291. package/dist/public/assets/prompt-dialog-vhnae1-x.css.br +0 -0
  292. package/dist/public/assets/quick-open-DVqzk3-g.css +1 -0
  293. package/dist/public/assets/quick-open-DVqzk3-g.css.br +0 -0
  294. package/dist/public/assets/repo-picker-K5RYsEge.css +1 -0
  295. package/dist/public/assets/repo-picker-K5RYsEge.css.br +0 -0
  296. package/dist/public/assets/review-view-DqMrB4Ny.css +1 -0
  297. package/dist/public/assets/review-view-DqMrB4Ny.css.br +0 -0
  298. package/dist/public/assets/review-view-TdLbCgEg.js +2 -0
  299. package/dist/public/assets/section-2MyJSq5D.css +1 -0
  300. package/dist/public/assets/section-2MyJSq5D.css.br +0 -0
  301. package/dist/public/assets/settings-DxhaKmbF.js +1 -0
  302. package/dist/public/assets/settings-page-BBAG94Vh.js +2 -0
  303. package/dist/public/assets/settings-page-DUefc32x.css +1 -0
  304. package/dist/public/assets/settings-page-DUefc32x.css.br +0 -0
  305. package/dist/public/assets/skill-row-BeOk8NK8.css +1 -0
  306. package/dist/public/assets/sso-auth-CU3fGJ4U.css +1 -0
  307. package/dist/public/assets/sso-auth-CU3fGJ4U.css.br +0 -0
  308. package/dist/public/assets/w-DxhaKmbF.js +1 -0
  309. package/dist/public/assets/w._-C6JVdFgi.js +1 -0
  310. package/dist/public/assets/w._-DxhaKmbF.js +1 -0
  311. package/dist/public/assets/w._-rfvcDGPk.js +1 -0
  312. package/install.sh +1 -1
  313. package/lib/setup/catalog.d.mts +13 -0
  314. package/lib/setup/catalog.mjs +107 -14
  315. package/lib/setup/doctor.d.mts +1 -0
  316. package/lib/setup/doctor.mjs +5 -4
  317. package/lib/share/manifest.mjs +1 -1
  318. package/package.json +3 -3
  319. package/scripts/migrate.mjs +119 -261
  320. package/dist/_BkCP7ACo.js +0 -2
  321. package/dist/public/assets/_0EfQU-nm.js +0 -1
  322. package/dist/public/assets/_2L-OI8uX.js.br +0 -0
  323. package/dist/public/assets/_3dcgIhy4.js +0 -1
  324. package/dist/public/assets/_4lkLC-N6.js +0 -1
  325. package/dist/public/assets/_4lkLC-N6.js.br +0 -0
  326. package/dist/public/assets/_4zMj-KgY.js.br +0 -0
  327. package/dist/public/assets/_5iLDlaH-.js.br +0 -0
  328. package/dist/public/assets/_7PkH8MR2.js.br +0 -0
  329. package/dist/public/assets/_7pZFw9YH.js +0 -1
  330. package/dist/public/assets/_81trVXGv.js +0 -1
  331. package/dist/public/assets/_81trVXGv.js.br +0 -0
  332. package/dist/public/assets/_8cXksh59.js.br +0 -0
  333. package/dist/public/assets/_8jPfRR-S.js.br +0 -0
  334. package/dist/public/assets/_B-VEZaw2.js +0 -1
  335. package/dist/public/assets/_B0VKtqZ9.js.br +0 -0
  336. package/dist/public/assets/_B1n6UKwc.js +0 -1
  337. package/dist/public/assets/_B4jQnWBQ.js.br +0 -0
  338. package/dist/public/assets/_B59uDfC7.js.br +0 -0
  339. package/dist/public/assets/_B7aQVpV3.js.br +0 -0
  340. package/dist/public/assets/_B8QLRTNE.js.br +0 -0
  341. package/dist/public/assets/_B8ypf2w7.js.br +0 -0
  342. package/dist/public/assets/_B9H0wf6g.js.br +0 -0
  343. package/dist/public/assets/_BA7jNaHU.js.br +0 -0
  344. package/dist/public/assets/_BATBuapN.js +0 -1
  345. package/dist/public/assets/_BC-o0Ofo.js +0 -1
  346. package/dist/public/assets/_BD5g3CBa.js.br +0 -0
  347. package/dist/public/assets/_BGKOdZ60.js +0 -1
  348. package/dist/public/assets/_BGKOdZ60.js.br +0 -0
  349. package/dist/public/assets/_BI7rb-iV.js +0 -1
  350. package/dist/public/assets/_BNxiob9l.js +0 -1
  351. package/dist/public/assets/_BOIo-Rws.js +0 -1
  352. package/dist/public/assets/_BP-cH3Ls.js +0 -1
  353. package/dist/public/assets/_BP4aeWpk.js +0 -1
  354. package/dist/public/assets/_BQ_wB80D.js +0 -1
  355. package/dist/public/assets/_BSR1BCIl.js +0 -15
  356. package/dist/public/assets/_BSR1BCIl.js.br +0 -0
  357. package/dist/public/assets/_BUVzSij7.js +0 -1
  358. package/dist/public/assets/_BV5hAHrd.js +0 -1
  359. package/dist/public/assets/_BZgSH_zH.js.br +0 -0
  360. package/dist/public/assets/_BbdX33R5.js +0 -1
  361. package/dist/public/assets/_BbjPIfv2.js +0 -1
  362. package/dist/public/assets/_BebbIngd.js +0 -2
  363. package/dist/public/assets/_BebbIngd.js.br +0 -0
  364. package/dist/public/assets/_BfUMBq7F.js +0 -1
  365. package/dist/public/assets/_BgPQq_uu.js.br +0 -0
  366. package/dist/public/assets/_Bgbe-7aj.js.br +0 -0
  367. package/dist/public/assets/_BgvkMEDS.js.br +0 -0
  368. package/dist/public/assets/_BklmY-WW.js +0 -1
  369. package/dist/public/assets/_BkmyKCts.js.br +0 -0
  370. package/dist/public/assets/_BnKAavAk.js +0 -1
  371. package/dist/public/assets/_BotvnYbJ.js +0 -1
  372. package/dist/public/assets/_BotvnYbJ.js.br +0 -0
  373. package/dist/public/assets/_BscapHlE.js.br +0 -0
  374. package/dist/public/assets/_Bt4fKX2z.js +0 -1
  375. package/dist/public/assets/_BvcmHt9j.js +0 -1
  376. package/dist/public/assets/_C1TYaRDe.js.br +0 -0
  377. package/dist/public/assets/_C45o01H4.js +0 -1
  378. package/dist/public/assets/_C4dOkocS.js.br +0 -0
  379. package/dist/public/assets/_C7rA9hcV.js +0 -1
  380. package/dist/public/assets/_C86ZHeAp.js.br +0 -0
  381. package/dist/public/assets/_C8fTPM4x.js.br +0 -0
  382. package/dist/public/assets/_CA7oQPMX.js.br +0 -0
  383. package/dist/public/assets/_CAMTVZ5S.js +0 -1
  384. package/dist/public/assets/_CAMTVZ5S.js.br +0 -0
  385. package/dist/public/assets/_CBdbNtLm.js.br +0 -0
  386. package/dist/public/assets/_CENgKlig.js +0 -1
  387. package/dist/public/assets/_CGLnSBxx.js.br +0 -0
  388. package/dist/public/assets/_CIAIGE-e.js +0 -1
  389. package/dist/public/assets/_CIs24vxl.js.br +0 -0
  390. package/dist/public/assets/_CJ2EZdoV.js +0 -1
  391. package/dist/public/assets/_CJlqVV8j.js +0 -6
  392. package/dist/public/assets/_CJlqVV8j.js.br +0 -0
  393. package/dist/public/assets/_CKIVOffF.js +0 -1
  394. package/dist/public/assets/_CLdKQrZk.js +0 -1
  395. package/dist/public/assets/_CN5dKT5U.js.br +0 -0
  396. package/dist/public/assets/_CNyZnrbq.js.br +0 -0
  397. package/dist/public/assets/_CP0AloMu.js.br +0 -0
  398. package/dist/public/assets/_CPCx9DM-.js.br +0 -0
  399. package/dist/public/assets/_CPz2zCZW.js +0 -1
  400. package/dist/public/assets/_CT-gn1Q3.js.br +0 -0
  401. package/dist/public/assets/_CTbiX1kY.js +0 -1
  402. package/dist/public/assets/_CVYE0HUe.js.br +0 -0
  403. package/dist/public/assets/_CVimy4Le.js.br +0 -0
  404. package/dist/public/assets/_CW_p-nUL.js.br +0 -0
  405. package/dist/public/assets/_CZ62PUna.js.br +0 -0
  406. package/dist/public/assets/_CcCzrg9K.js +0 -1
  407. package/dist/public/assets/_Cdr1LImQ.js.br +0 -0
  408. package/dist/public/assets/_CgXIOrOV.js +0 -1
  409. package/dist/public/assets/_Ci01sxM0.js +0 -1
  410. package/dist/public/assets/_CiZ8pHbe.js.br +0 -0
  411. package/dist/public/assets/_CpIC1zJN.js +0 -1
  412. package/dist/public/assets/_CpSmZ2fW.js +0 -1
  413. package/dist/public/assets/_CpzhHQ3e.js +0 -1
  414. package/dist/public/assets/_CrThDEqs.js +0 -1
  415. package/dist/public/assets/_CrThDEqs.js.br +0 -0
  416. package/dist/public/assets/_CrzUyUH2.js +0 -1
  417. package/dist/public/assets/_Csdgg-p8.js +0 -1
  418. package/dist/public/assets/_Csdgg-p8.js.br +0 -0
  419. package/dist/public/assets/_CtWH28kh.js +0 -1
  420. package/dist/public/assets/_Cto7UR6x.js.br +0 -0
  421. package/dist/public/assets/_CtrIYddo.js.br +0 -0
  422. package/dist/public/assets/_CvDzPXmv.js +0 -1
  423. package/dist/public/assets/_Cvh-VNIk.js.br +0 -0
  424. package/dist/public/assets/_Cx8F-gsJ.js.br +0 -0
  425. package/dist/public/assets/_CxbcobyM.js +0 -1
  426. package/dist/public/assets/_Cy7hJYIs.js +0 -1
  427. package/dist/public/assets/_CzvJRV9T.js.br +0 -0
  428. package/dist/public/assets/_D-902IrK.js +0 -1
  429. package/dist/public/assets/_D-902IrK.js.br +0 -0
  430. package/dist/public/assets/_D1Bmsn3j.js +0 -1
  431. package/dist/public/assets/_D4Ta82Ad.js.br +0 -0
  432. package/dist/public/assets/_D8EMVgMd.js +0 -1
  433. package/dist/public/assets/_DBpSHwsH.js.br +0 -0
  434. package/dist/public/assets/_DDwytJDF.js +0 -1
  435. package/dist/public/assets/_DDwytJDF.js.br +0 -0
  436. package/dist/public/assets/_DE_Y-0-h.js.br +0 -0
  437. package/dist/public/assets/_DHw-LiNs.js +0 -1
  438. package/dist/public/assets/_DILlGU4L.js.br +0 -0
  439. package/dist/public/assets/_DJa--qOX.js.br +0 -0
  440. package/dist/public/assets/_DKmUkNb1.js +0 -1
  441. package/dist/public/assets/_DKuBKDhM.js +0 -1
  442. package/dist/public/assets/_DLOPvUZY.js.br +0 -0
  443. package/dist/public/assets/_DMBjdP4M.js +0 -1
  444. package/dist/public/assets/_DMgMXzil.js +0 -1
  445. package/dist/public/assets/_DMuuYm9C.js.br +0 -0
  446. package/dist/public/assets/_DNZFctlv.js.br +0 -0
  447. package/dist/public/assets/_DPq7Yp4u.js +0 -1
  448. package/dist/public/assets/_DRTW5fd9.js.br +0 -0
  449. package/dist/public/assets/_DRx0cYWy.js +0 -1
  450. package/dist/public/assets/_DSqeeGaZ.js +0 -1
  451. package/dist/public/assets/_DTRYzVXy.js.br +0 -0
  452. package/dist/public/assets/_DTebU1L2.js +0 -1
  453. package/dist/public/assets/_DWO9qYdD.js +0 -1
  454. package/dist/public/assets/_DWnXmngO.js +0 -1
  455. package/dist/public/assets/_DX2UfSkV.js.br +0 -0
  456. package/dist/public/assets/_DXhRdKW7.js.br +0 -0
  457. package/dist/public/assets/_D_JNOhlM.js +0 -1
  458. package/dist/public/assets/_Dc1Lc51O.js +0 -1
  459. package/dist/public/assets/_Dc1Lc51O.js.br +0 -0
  460. package/dist/public/assets/_DccrUV-t.js.br +0 -0
  461. package/dist/public/assets/_DfMtdFhk.js +0 -1
  462. package/dist/public/assets/_DlOIFmP5.js.br +0 -0
  463. package/dist/public/assets/_DlpWFr6R.js.br +0 -0
  464. package/dist/public/assets/_DmzK_VpH.js +0 -1
  465. package/dist/public/assets/_Dn-53uYD.js +0 -1
  466. package/dist/public/assets/_Dprfg2XO.js +0 -1
  467. package/dist/public/assets/_DqSs-qWW.js +0 -1
  468. package/dist/public/assets/_Dt47AQIi.js +0 -1
  469. package/dist/public/assets/_DtVh1tC2.js +0 -1
  470. package/dist/public/assets/_DuBYI8Df.js +0 -1
  471. package/dist/public/assets/_DuQRbl1J.js.br +0 -0
  472. package/dist/public/assets/_DxwuLWwv.js.br +0 -0
  473. package/dist/public/assets/_Dy4AHyMD.js +0 -1
  474. package/dist/public/assets/_DzCAv2Gl.js.br +0 -0
  475. package/dist/public/assets/_Hd-PFNkS.js.br +0 -0
  476. package/dist/public/assets/_IJOifsPN.js.br +0 -0
  477. package/dist/public/assets/_IYKAiNbQ.js.br +0 -0
  478. package/dist/public/assets/_ImG6Q5u4.js.br +0 -0
  479. package/dist/public/assets/_K_yqvP79.js +0 -1
  480. package/dist/public/assets/_K_yqvP79.js.br +0 -0
  481. package/dist/public/assets/_LSddbYPg.js.br +0 -0
  482. package/dist/public/assets/_Mrawm4gM.js.br +0 -0
  483. package/dist/public/assets/_N6UM3iEC.js +0 -1
  484. package/dist/public/assets/_OCdp7nNx.js +0 -1
  485. package/dist/public/assets/_OCdp7nNx.js.br +0 -0
  486. package/dist/public/assets/_P4Q76273.js +0 -1
  487. package/dist/public/assets/_Q3J62UbV.js.br +0 -0
  488. package/dist/public/assets/_V7boHS_a.js +0 -1
  489. package/dist/public/assets/_V7boHS_a.js.br +0 -0
  490. package/dist/public/assets/_VUoWEzVN.js +0 -1
  491. package/dist/public/assets/_XFhH3dP0.js.br +0 -0
  492. package/dist/public/assets/_aD-zCciQ.js +0 -1
  493. package/dist/public/assets/_d0O4aA0L.js.br +0 -0
  494. package/dist/public/assets/_dVPo9v4u.js +0 -1
  495. package/dist/public/assets/_egwsGA2z.js +0 -1
  496. package/dist/public/assets/_hIGDKE3G.js +0 -1
  497. package/dist/public/assets/_khh1x77_.js.br +0 -0
  498. package/dist/public/assets/_l5fDrx0F.js.br +0 -0
  499. package/dist/public/assets/_nIuAA97l.js.br +0 -0
  500. package/dist/public/assets/_udAEKVMs.js.br +0 -0
  501. package/dist/public/assets/_vXrbhKaS.js.br +0 -0
  502. package/dist/public/assets/app-shell-B0OO79vS.css +0 -1
  503. package/dist/public/assets/app-shell-B0OO79vS.css.br +0 -0
  504. package/dist/public/assets/files-view-8U0RvfCW.css +0 -1
  505. package/dist/public/assets/files-view-8U0RvfCW.css.br +0 -0
  506. package/dist/public/assets/files-view-Cen1Ehm2.js +0 -2
  507. package/dist/public/assets/group.css.ts-BXYS6DEA.css +0 -1
  508. package/dist/public/assets/group.css.ts-BXYS6DEA.css.br +0 -0
  509. package/dist/public/assets/icon-folder-BfrS749u.css +0 -1
  510. package/dist/public/assets/icon-folder-BfrS749u.css.br +0 -0
  511. package/dist/public/assets/icon-search-CQX_Oqgo.css.br +0 -0
  512. package/dist/public/assets/manage-workspace-CCJ4ta9y.js +0 -2
  513. package/dist/public/assets/manage-workspace-D_Q7iFJx.css +0 -1
  514. package/dist/public/assets/modal-view-BY2E8mw2.css.br +0 -0
  515. package/dist/public/assets/new-B_V1ilQW.js +0 -1
  516. package/dist/public/assets/new-workspace-DbYcKEc1.js +0 -2
  517. package/dist/public/assets/new-workspace-DxkmgnmD.css +0 -1
  518. package/dist/public/assets/new-workspace-DxkmgnmD.css.br +0 -0
  519. package/dist/public/assets/port-chip-9ONt0A-X.css +0 -1
  520. package/dist/public/assets/prompt-dialog-FlNGIEVH.css +0 -1
  521. package/dist/public/assets/prompt-dialog-FlNGIEVH.css.br +0 -0
  522. package/dist/public/assets/quick-open-DGZd2O_C.css +0 -1
  523. package/dist/public/assets/quick-open-DGZd2O_C.css.br +0 -0
  524. package/dist/public/assets/repo-picker-cm3fnbTq.css +0 -1
  525. package/dist/public/assets/repo-picker-cm3fnbTq.css.br +0 -3
  526. package/dist/public/assets/review-view-B2Nz9ybY.js +0 -2
  527. package/dist/public/assets/review-view-CcATNzWo.css +0 -1
  528. package/dist/public/assets/review-view-CcATNzWo.css.br +0 -0
  529. package/dist/public/assets/section-CzWFTcJC.css +0 -1
  530. package/dist/public/assets/section-CzWFTcJC.css.br +0 -0
  531. package/dist/public/assets/settings-B_V1ilQW.js +0 -1
  532. package/dist/public/assets/settings-page-CMLmEhnN.js +0 -2
  533. package/dist/public/assets/settings-page-DUX8B1oE.css +0 -1
  534. package/dist/public/assets/settings-page-DUX8B1oE.css.br +0 -0
  535. package/dist/public/assets/skill-row-DqAUuSBd.css +0 -1
  536. package/dist/public/assets/sso-auth-B6eZLZCG.css +0 -1
  537. package/dist/public/assets/sso-auth-B6eZLZCG.css.br +0 -0
  538. package/dist/public/assets/w-B_V1ilQW.js +0 -1
  539. package/dist/public/assets/w._-B0e-KW5y.js +0 -1
  540. package/dist/public/assets/w._-B_V1ilQW.js +0 -1
  541. package/dist/public/assets/w._-DQBTonBF.js +0 -1
package/README.md CHANGED
@@ -32,7 +32,7 @@ re-run the installer).
32
32
 
33
33
  ## Develop
34
34
 
35
- Requires Linux or macOS with `git`, `tmux`, `gh` (authenticated), and Node 22+.
35
+ Requires Linux or macOS with `git`, `tmux`, `gh` (authenticated), and Node 24+.
36
36
  The bootstrap script installs everything via [mise](https://mise.jdx.dev),
37
37
  offers the agent CLIs, and runs `pnpm install`:
38
38
 
@@ -94,8 +94,9 @@ the whole hostname to it.
94
94
  `http://<host>:<port>`, which only works where the machine is reachable
95
95
  directly. Through a tunnel, route a wildcard hostname to the app port as
96
96
  well and work proxies it — HTTP and websockets, so HMR works — to
97
- `localhost:<port>`. Two hostname shapes are accepted; `WORK_PORT_HOSTS`
98
- picks which one the chips link to:
97
+ `localhost:<port>`. `WORK_PORT_HOSTS` picks the hostname shape the chips
98
+ link to; `sub` is always accepted, `dash` only when picked, and only for a
99
+ name of three labels or more:
99
100
 
100
101
  - `sub` (default): `https://3000.work.example.com`. Needs a wildcard
101
102
  `*.work.example.com` route and a certificate that covers it (your own
@@ -133,7 +134,9 @@ commits, uncommitted or untracked
133
134
  files, ignored files that are not build junk — and waits for a decision.
134
135
 
135
136
  **Restore** (Settings → Backup, or `work restore <file> --yes`) installs
136
- what the file names that the machine lacks and re-creates the workspaces
137
+ what the file names that the machine lacks — a tool outside work's catalog
138
+ or a new GitHub host only when ticked (or named with `--allow`), since it
139
+ installs and runs whatever the file says — and re-creates the workspaces
137
140
  as rows; each one's repos then clone in the background, one workspace at
138
141
  a time, on the branch the manifest recorded (from origin, or fresh from
139
142
  the base when it was never pushed). Archived workspaces clone when they
package/bin/work.mjs CHANGED
@@ -12,7 +12,9 @@
12
12
  // work procs [id|name] a workspace's running processes and ports
13
13
  // work review [id|name] pending review comments as markdown (--json for rows)
14
14
  // work export [file] write a backup manifest (workspaces, settings, skills, tool pins)
15
- // work restore <file> bring a manifest's workspaces and machine setup back (--yes to run)
15
+ // work restore <file> bring a manifest's workspaces and machine setup back (--yes to run;
16
+ // --allow <spec|host>, repeated, for each tool outside work's catalog
17
+ // or new GitHub host it names — skipped otherwise)
16
18
  // work share [id|name] print a workspace's invite (paste into New → Join / work join)
17
19
  // work join [file] join a workspace from an invite (file, or stdin)
18
20
  // work version print the installed version
@@ -25,7 +27,6 @@ import fs from "node:fs";
25
27
  import os from "node:os";
26
28
  import path from "node:path";
27
29
  import { fileURLToPath } from "node:url";
28
- import { createRequire } from "node:module";
29
30
  import { doctor, formatDoctor, setupPath } from "../lib/setup/doctor.mjs";
30
31
  import { installTool } from "../lib/setup/install.mjs";
31
32
  import { dialHost, listenStream } from "../lib/setup/listen.mjs";
@@ -58,7 +59,7 @@ const yes = args.includes("--yes") || args.includes("-y");
58
59
  const jsonOut = args.includes("--json");
59
60
  /** `--name <value>` style flags take the next arg; keep it out of the
60
61
  * positionals so `work join --name x` still reads stdin. */
61
- const VALUED = new Set(["--name"]);
62
+ const VALUED = new Set(["--name", "--allow"]);
62
63
  const positional = args.filter(
63
64
  (a, i) => a === "-" || (!a.startsWith("-") && !VALUED.has(args[i - 1])),
64
65
  );
@@ -69,6 +70,14 @@ const flagValue = (flag) => {
69
70
  die(`${flag} needs a value`);
70
71
  return args[i + 1];
71
72
  };
73
+ /** Every value of a flag given more than once (`--allow a --allow b`). */
74
+ const flagValues = (flag) =>
75
+ args.flatMap((a, i) => {
76
+ if (a !== flag) return [];
77
+ if (i + 1 >= args.length || args[i + 1].startsWith("-"))
78
+ die(`${flag} needs a value`);
79
+ return [args[i + 1]];
80
+ });
72
81
 
73
82
  switch (command) {
74
83
  case "start":
@@ -473,7 +482,7 @@ async function exportCmd() {
473
482
  }
474
483
 
475
484
  function readManifest(file) {
476
- if (!file) die("usage: work restore <file> [--yes]");
485
+ if (!file) die("usage: work restore <file> [--yes] [--allow <spec|host>]...");
477
486
  let manifest;
478
487
  try {
479
488
  manifest = JSON.parse(fs.readFileSync(file, "utf8"));
@@ -483,35 +492,76 @@ function readManifest(file) {
483
492
  return manifest;
484
493
  }
485
494
 
495
+ /** A word as a shell reads it back: specs come from the file, so one
496
+ * printed in a command to copy is quoted, never pasted as shell. */
497
+ function shellWord(s) {
498
+ return /^[\w@%+=:,./-]+$/.test(s) ? s : `'${s.replaceAll("'", `'\\''`)}'`;
499
+ }
500
+
486
501
  /** Preview, then (with --yes) restore everything the file names that this
487
- * machine does not have. Workspaces already here are skipped. */
502
+ * machine does not have. Workspaces already here are skipped. A tool
503
+ * outside work's catalog installs and runs whatever it names, and a new
504
+ * GitHub host is one work signs in to and clones from, so each is taken
505
+ * only when `--allow` names it exactly as listed. */
488
506
  async function restoreCmd() {
489
507
  const manifest = readManifest(positional[0]);
490
508
  const preview = await apiPost("/api/backup/preview", manifest);
491
509
  if (jsonOut && !yes) return console.log(JSON.stringify(preview, null, 2));
492
510
  const pick = (list) => list.filter((x) => !x.installed);
493
511
  const say = jsonOut ? () => {} : console.log;
512
+ const allow = new Set(flagValues("--allow"));
513
+ const extraTools = pick(preview.tools)
514
+ .filter((t) => !t.catalog)
515
+ .map((t) => t.spec);
516
+ const newHosts = preview.hosts.filter((h) => !h.known).map((h) => h.host);
517
+ for (const a of allow) {
518
+ if (!extraTools.includes(a) && !newHosts.includes(a))
519
+ warn(`--allow ${a} names nothing this file would add`);
520
+ }
494
521
  say(`from ${preview.from.host} on ${preview.from.exportedAt.slice(0, 10)}`);
495
522
  const workspaces = preview.workspaces.filter(
496
- (w) => !w.exists && !w.unknownHost,
523
+ (w) => !w.exists && (!w.unknownHost || allow.has(w.unknownHost)),
497
524
  );
498
525
  for (const w of preview.workspaces) {
499
526
  const note = w.exists
500
527
  ? "already here"
501
- : w.unknownHost
528
+ : w.unknownHost && !allow.has(w.unknownHost)
502
529
  ? `unknown host ${w.unknownHost}`
503
530
  : w.status;
504
531
  say(` ${pad(w.name, 24)} ${pad(note, 14)} ${w.repos.join(", ")}`);
505
532
  }
506
- const tools = pick(preview.tools).map((t) => t.name);
533
+ const tools = pick(preview.tools)
534
+ .filter((t) => t.catalog)
535
+ .map((t) => t.name);
507
536
  const skills = pick(preview.skills).map((s) => s.id);
508
537
  const agents = pick(preview.agents).map((a) => a.label);
509
- const hosts = preview.hosts.filter((h) => !h.known).map((h) => h.host);
510
538
  if (tools.length) say(` tools to install: ${tools.join(", ")}`);
511
539
  if (skills.length) say(` skills to add: ${skills.join(", ")}`);
512
540
  if (agents.length) say(` agents to install: ${agents.join(", ")}`);
513
- if (hosts.length) say(` hosts to add: ${hosts.join(", ")}`);
514
541
  if (preview.settings) say(` settings: ${preview.settings}`);
542
+ const extras = [
543
+ ...extraTools.map((name) => ({ kind: "tool", name })),
544
+ ...newHosts.map((name) => ({ kind: "host", name })),
545
+ ];
546
+ if (extras.length) {
547
+ say(
548
+ " not in work's catalog — a tool installs and runs whatever it names,",
549
+ );
550
+ say(
551
+ " a host is one work signs in to and clones from; each only with --allow:",
552
+ );
553
+ for (const x of extras)
554
+ say(
555
+ ` ${pad(x.kind, 5)} ${x.name}${allow.has(x.name) ? " (allowed)" : ""}`,
556
+ );
557
+ const missing = extras.filter((x) => !allow.has(x.name));
558
+ if (missing.length) {
559
+ say(" to take them too, if you trust this file:");
560
+ say(
561
+ ` work restore ${shellWord(positional[0])} --yes ${missing.map((x) => `--allow ${shellWord(x.name)}`).join(" ")}`,
562
+ );
563
+ }
564
+ }
515
565
  if (!yes) {
516
566
  say("");
517
567
  log("re-run with --yes to restore");
@@ -522,6 +572,8 @@ async function restoreCmd() {
522
572
  selection: {
523
573
  workspaces: workspaces.map((w) => w.id),
524
574
  tools: true,
575
+ extraTools: extraTools.filter((s) => allow.has(s)),
576
+ hosts: newHosts.filter((h) => allow.has(h)),
525
577
  skills: true,
526
578
  agents: true,
527
579
  settings: true,
@@ -962,9 +1014,9 @@ function serviceEnv() {
962
1014
 
963
1015
  /** True when `cmd` is a work *server* (not `work setup` / `work update`).
964
1016
  * Must not match the tmux that hosts agent sessions: `tmux -L work
965
- * start-server` used to hit `\bwork\s+start\b` because `\b` fires on the
966
- * `t`/`-` boundary in `start-server`, so `work update` killed tmux mid-
967
- * setup and never reached `systemctl restart`. */
1017
+ * start-server` hits `\bwork\s+start\b` because `\b` fires on the
1018
+ * `t`/`-` boundary in `start-server`, and `work update` would kill tmux
1019
+ * mid-setup and never reach `systemctl restart`. */
968
1020
  function isWorkServerCmd(cmd) {
969
1021
  if (/\btmux\b/.test(cmd)) return false;
970
1022
  if (/\bwork(\.mjs)?\s+(setup|update|version)\b/.test(cmd)) return false;
@@ -1125,10 +1177,11 @@ function stopOldCopies(port) {
1125
1177
  }
1126
1178
 
1127
1179
  /** Wait for the service to answer before we tell anyone it is up. Both
1128
- * service managers return as soon as the job is spawned, so `done — http://…`
1129
- * used to print at a port that answers a second or two later — which reads as
1130
- * an update that broke the app. Any HTTP reply proves the server is serving;
1131
- * the status the route returns is not this function's business. */
1180
+ * service managers return as soon as the job is spawned, so without this
1181
+ * `done — http://…` would print at a port that answers a second or two
1182
+ * later — which reads as an update that broke the app. Any HTTP reply
1183
+ * proves the server is serving; the status the route returns is not this
1184
+ * function's business. */
1132
1185
  async function waitForServer(timeoutMs = 30_000) {
1133
1186
  const deadline = Date.now() + timeoutMs;
1134
1187
  for (;;) {