@dylanpiercey/work 0.1.0 → 0.2.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 +45 -5
  2. package/bin/work.mjs +449 -10
  3. package/dist/_BO3_WJb5.js +169 -0
  4. package/dist/{_Bq7to522.js → _CzOrFOdN.js} +527 -56
  5. package/dist/_DiOv9AKj.js +2 -0
  6. package/dist/index.mjs +8916 -7891
  7. package/dist/public/assets/{_Dytf99zx.js → _3hcTpTUc.js} +1 -1
  8. package/dist/public/assets/_3hcTpTUc.js.br +0 -0
  9. package/dist/public/assets/_88jVvZ6C.js +1 -0
  10. package/dist/public/assets/{_DrIgZJzN.js → _B0FtZL3L.js} +1 -1
  11. package/dist/public/assets/_B0FtZL3L.js.br +0 -0
  12. package/dist/public/assets/{_C0_s45qg.js → _B0rj5kOY.js} +1 -1
  13. package/dist/public/assets/_B0rj5kOY.js.br +0 -0
  14. package/dist/public/assets/{_BNW5Jiec.js → _B3aw0q8p.js} +1 -1
  15. package/dist/public/assets/_B3aw0q8p.js.br +0 -0
  16. package/dist/public/assets/{_Bhx319Hi.js → _B42XfAog.js} +1 -1
  17. package/dist/public/assets/_B42XfAog.js.br +0 -0
  18. package/dist/public/assets/_B5Ih3Lwt.js +1 -0
  19. package/dist/public/assets/_B6jh-_o_.js +1 -0
  20. package/dist/public/assets/_B8FHVXDZ.js +1 -0
  21. package/dist/public/assets/_BBJYNk03.js +1 -0
  22. package/dist/public/assets/{_D4q8XSMI.js → _BBk5_vEh.js} +1 -1
  23. package/dist/public/assets/_BBk5_vEh.js.br +0 -0
  24. package/dist/public/assets/_BCS_gQxR.js +15 -0
  25. package/dist/public/assets/_BCS_gQxR.js.br +0 -0
  26. package/dist/public/assets/{_BvXp6HpX.js → _BDBxSbjY.js} +1 -1
  27. package/dist/public/assets/_BDBxSbjY.js.br +0 -0
  28. package/dist/public/assets/_BDkqB224.js +1 -0
  29. package/dist/public/assets/{_SGDxiwE1.js → _BEtl4C9q.js} +1 -1
  30. package/dist/public/assets/_BEtl4C9q.js.br +0 -0
  31. package/dist/public/assets/{_DDl8KSWJ.js → _BJZwk-Pf.js} +1 -1
  32. package/dist/public/assets/_BJZwk-Pf.js.br +0 -0
  33. package/dist/public/assets/{_CpjSCB1I.js → _BM8qop28.js} +1 -1
  34. package/dist/public/assets/_BM8qop28.js.br +0 -0
  35. package/dist/public/assets/_BNL2e5az.js +1 -0
  36. package/dist/public/assets/{_CEXHZd73.js → _BODl5Jdc.js} +1 -1
  37. package/dist/public/assets/_BODl5Jdc.js.br +0 -0
  38. package/dist/public/assets/{_De7P3jUH.js → _BOe3voZI.js} +1 -1
  39. package/dist/public/assets/_BOe3voZI.js.br +0 -0
  40. package/dist/public/assets/{_eoa1EOU-.js → _BPW-OoaM.js} +1 -1
  41. package/dist/public/assets/_BPW-OoaM.js.br +0 -0
  42. package/dist/public/assets/{_BE_Jyvqd.js → _BSHUa-H0.js} +1 -1
  43. package/dist/public/assets/_BSHUa-H0.js.br +0 -0
  44. package/dist/public/assets/_BTXURtlK.js +1 -0
  45. package/dist/public/assets/{_Bp8-V8yl.js → _BU4lH-F3.js} +1 -1
  46. package/dist/public/assets/_BU4lH-F3.js.br +0 -0
  47. package/dist/public/assets/{_wcshV0sZ.js → _BVGSrb9C.js} +1 -1
  48. package/dist/public/assets/_BVGSrb9C.js.br +0 -0
  49. package/dist/public/assets/{_CTINBWaG.js → _BXyDScMX.js} +1 -1
  50. package/dist/public/assets/_BXyDScMX.js.br +0 -0
  51. package/dist/public/assets/{_Bm4SHrNp.js → _BZXtyNwD.js} +1 -1
  52. package/dist/public/assets/_BZXtyNwD.js.br +0 -0
  53. package/dist/public/assets/{_DfI982PI.js → _B_iUZxSk.js} +1 -1
  54. package/dist/public/assets/_B_iUZxSk.js.br +0 -0
  55. package/dist/public/assets/_B_klvcQs.js +1 -0
  56. package/dist/public/assets/{_CHuLFr1f.js → _BaNsw5pr.js} +1 -1
  57. package/dist/public/assets/_BaNsw5pr.js.br +0 -0
  58. package/dist/public/assets/_BbPq34k8.js +1 -0
  59. package/dist/public/assets/{_CAkPJLeF.js → _BfDaM2KU.js} +1 -1
  60. package/dist/public/assets/{_CAkPJLeF.js.br → _BfDaM2KU.js.br} +0 -0
  61. package/dist/public/assets/_Bk1naXp4.js +1 -0
  62. package/dist/public/assets/{_BOGkzMx9.js → _BkNKadGd.js} +1 -1
  63. package/dist/public/assets/_BkNKadGd.js.br +0 -0
  64. package/dist/public/assets/_BkztnqUW.js +1 -0
  65. package/dist/public/assets/_BkztnqUW.js.br +0 -0
  66. package/dist/public/assets/_BlNBDTvP.js +1 -0
  67. package/dist/public/assets/_BlNBDTvP.js.br +0 -0
  68. package/dist/public/assets/_BlUmx1wN.js +1 -0
  69. package/dist/public/assets/_Ble8b9gd.js +1 -0
  70. package/dist/public/assets/{_BDa-iwuj.js → _BpEvAl9E.js} +1 -1
  71. package/dist/public/assets/_BpEvAl9E.js.br +0 -0
  72. package/dist/public/assets/_Bqyvdrqf.js +1 -0
  73. package/dist/public/assets/_BsA2bpua.js +1 -0
  74. package/dist/public/assets/_BsA2bpua.js.br +0 -0
  75. package/dist/public/assets/_BsAVia13.js +1 -0
  76. package/dist/public/assets/_BtxLmMRq.js +1 -0
  77. package/dist/public/assets/{_ClldMY37.js → _Byfemjjt.js} +1 -1
  78. package/dist/public/assets/_Byfemjjt.js.br +0 -0
  79. package/dist/public/assets/{_MCwIJAuJ.js → _Bz94qqXL.js} +1 -1
  80. package/dist/public/assets/_Bz94qqXL.js.br +0 -0
  81. package/dist/public/assets/_C-HIZYIZ.js +1 -0
  82. package/dist/public/assets/{_D4quFMVQ.js → _C-UGjoFi.js} +1 -1
  83. package/dist/public/assets/_C-UGjoFi.js.br +0 -0
  84. package/dist/public/assets/{_wXDh-Z2N.js → _C-jXvDAe.js} +1 -1
  85. package/dist/public/assets/_C-jXvDAe.js.br +0 -0
  86. package/dist/public/assets/{_Ct3RF80L.js → _C2b1kmvc.js} +1 -1
  87. package/dist/public/assets/_C2b1kmvc.js.br +0 -0
  88. package/dist/public/assets/{_CIb7xw_1.js → _C3PIXMJF.js} +1 -1
  89. package/dist/public/assets/_C3PIXMJF.js.br +0 -0
  90. package/dist/public/assets/_C6eXJBpX.js +1 -0
  91. package/dist/public/assets/{_C654p96Z.js → _C7Xd05b1.js} +1 -1
  92. package/dist/public/assets/_C7Xd05b1.js.br +0 -0
  93. package/dist/public/assets/_C8jPP8tm.js +1 -0
  94. package/dist/public/assets/{_CamWDaoG.js → _CB9BGKKP.js} +1 -1
  95. package/dist/public/assets/_CB9BGKKP.js.br +0 -0
  96. package/dist/public/assets/{_bcsuBP7T.js → _CD44YUtO.js} +1 -1
  97. package/dist/public/assets/_CD44YUtO.js.br +0 -0
  98. package/dist/public/assets/{_D6kktUFn.js → _CEXagH_p.js} +1 -1
  99. package/dist/public/assets/_CEXagH_p.js.br +0 -0
  100. package/dist/public/assets/_CFOiLJdu.js +1 -0
  101. package/dist/public/assets/_CFOiLJdu.js.br +0 -0
  102. package/dist/public/assets/{_D1uRW1qz.js → _CGrClLsS.js} +1 -1
  103. package/dist/public/assets/_CGrClLsS.js.br +0 -0
  104. package/dist/public/assets/_CHJuzFIS.js +1 -0
  105. package/dist/public/assets/{_DC-78WeM.js → _CJ7DGNLC.js} +1 -1
  106. package/dist/public/assets/_CJ7DGNLC.js.br +0 -0
  107. package/dist/public/assets/_CJG7LF4o.js +1 -0
  108. package/dist/public/assets/_CK0tdQ6M.js +1591 -0
  109. package/dist/public/assets/_CK0tdQ6M.js.br +0 -0
  110. package/dist/public/assets/{_CMSBfO6u.js → _CKcab_6c.js} +1 -1
  111. package/dist/public/assets/_CKcab_6c.js.br +0 -0
  112. package/dist/public/assets/{_8G2Mv7jG.js → _CKpSd2DN.js} +1 -1
  113. package/dist/public/assets/_CKpSd2DN.js.br +0 -0
  114. package/dist/public/assets/{_zSAfqXcm.js → _CKy2HduV.js} +1 -1
  115. package/dist/public/assets/_CKy2HduV.js.br +0 -0
  116. package/dist/public/assets/{_BUvqweu0.js → _CLikwAg5.js} +1 -1
  117. package/dist/public/assets/_CLikwAg5.js.br +0 -0
  118. package/dist/public/assets/{_CxAPL49a.js → _CM-AIl7T.js} +1 -1
  119. package/dist/public/assets/_CM-AIl7T.js.br +0 -0
  120. package/dist/public/assets/_CMwrJ1ju.js +1 -0
  121. package/dist/public/assets/_CMwrJ1ju.js.br +0 -0
  122. package/dist/public/assets/_CQG-EbMi.js +1 -0
  123. package/dist/public/assets/_CUl36Gcx.js +1 -0
  124. package/dist/public/assets/{_BwP07uVS.js → _CUq2djIT.js} +1 -1
  125. package/dist/public/assets/_CUq2djIT.js.br +0 -0
  126. package/dist/public/assets/{_DFWOMF-B.js → _CWSGdqC2.js} +1 -1
  127. package/dist/public/assets/_CWSGdqC2.js.br +0 -0
  128. package/dist/public/assets/_CXK3AUqn.js +1 -0
  129. package/dist/public/assets/{_d5u7EI97.js → _CYYRiJuo.js} +1 -1
  130. package/dist/public/assets/_CYYRiJuo.js.br +0 -0
  131. package/dist/public/assets/_CYr8GcJI.js +1 -0
  132. package/dist/public/assets/{_8dvK2NDJ.js → _CaFhYr8X.js} +1 -1
  133. package/dist/public/assets/_CaFhYr8X.js.br +0 -0
  134. package/dist/public/assets/_CbzGfu_I.js +1 -0
  135. package/dist/public/assets/{_CZ_OWtIT.js → _Cd85Xtd1.js} +1 -1
  136. package/dist/public/assets/_Cd85Xtd1.js.br +0 -0
  137. package/dist/public/assets/_Ch-bwiFD.js +1 -0
  138. package/dist/public/assets/_ClGAsZdo.js +1 -0
  139. package/dist/public/assets/_ClGAsZdo.js.br +0 -0
  140. package/dist/public/assets/_ClhDmYWO.js +1 -0
  141. package/dist/public/assets/_ClhDmYWO.js.br +0 -0
  142. package/dist/public/assets/{_9kX9D09B.js → _Cm85V2m3.js} +1 -1
  143. package/dist/public/assets/_Cm85V2m3.js.br +0 -0
  144. package/dist/public/assets/_Cp4ZjGeg.js +1 -0
  145. package/dist/public/assets/{_C_37_B6u.js → _CsRnEvC3.js} +1 -1
  146. package/dist/public/assets/_CsRnEvC3.js.br +0 -0
  147. package/dist/public/assets/_CtFo1511.js +1 -0
  148. package/dist/public/assets/{_DcMIlvz-.js → _CtIpOiCk.js} +1 -1
  149. package/dist/public/assets/_CtIpOiCk.js.br +0 -0
  150. package/dist/public/assets/{_D4rOX-Fa.js → _CwOgQx7H.js} +1 -1
  151. package/dist/public/assets/_CwOgQx7H.js.br +0 -0
  152. package/dist/public/assets/_CwtVecVY.js +1 -0
  153. package/dist/public/assets/_Cxuln-KJ.js +1 -0
  154. package/dist/public/assets/_CyYNC4Ow.js +1 -0
  155. package/dist/public/assets/{_Dd6X3e7w.js → _Cy_g0woP.js} +1 -1
  156. package/dist/public/assets/_Cy_g0woP.js.br +0 -0
  157. package/dist/public/assets/{_COcePo2y.js → _CzDRlITT.js} +1 -1
  158. package/dist/public/assets/_CzDRlITT.js.br +0 -0
  159. package/dist/public/assets/_Czq9fyjZ.js +1 -0
  160. package/dist/public/assets/{_B582D2rg.js → _D1Rh4MKD.js} +1 -1
  161. package/dist/public/assets/_D2edy8B-.js +1 -0
  162. package/dist/public/assets/_D2edy8B-.js.br +0 -0
  163. package/dist/public/assets/_D2pdXUO3.js +1 -0
  164. package/dist/public/assets/_D4M5BFEU.js +1 -0
  165. package/dist/public/assets/{_D0aoEFRx.js → _D749nUfQ.js} +1 -1
  166. package/dist/public/assets/_D749nUfQ.js.br +0 -0
  167. package/dist/public/assets/_D7mcWce0.js +2 -0
  168. package/dist/public/assets/_D7mcWce0.js.br +0 -0
  169. package/dist/public/assets/{_BpoeUr5j.js → _D81sIY4I.js} +1 -1
  170. package/dist/public/assets/_D81sIY4I.js.br +0 -0
  171. package/dist/public/assets/{_D9sS4J_w.js → _D8Opg0DA.js} +1 -1
  172. package/dist/public/assets/_D8Opg0DA.js.br +0 -0
  173. package/dist/public/assets/{_B7GwDeKK.js → _DCJrZQ6J.js} +1 -1
  174. package/dist/public/assets/_DEPHQNx4.js +1 -0
  175. package/dist/public/assets/_DEtYVOe1.js +1 -0
  176. package/dist/public/assets/_DJ4gN7dQ.js +1 -0
  177. package/dist/public/assets/_DJ9NEjwG.js +1 -0
  178. package/dist/public/assets/{_xyw_DS5P.js → _DJUeUZKF.js} +1 -1
  179. package/dist/public/assets/_DJUeUZKF.js.br +0 -0
  180. package/dist/public/assets/_DLZswhbS.js +1 -0
  181. package/dist/public/assets/{_BywcP-As.js → _DMEtxMrc.js} +1 -1
  182. package/dist/public/assets/_DMEtxMrc.js.br +0 -0
  183. package/dist/public/assets/{_DqhphdU4.js → _DOr6ubI-.js} +1 -1
  184. package/dist/public/assets/_DOr6ubI-.js.br +0 -0
  185. package/dist/public/assets/{_ch_yXAap.js → _DQu5M2GV.js} +1 -1
  186. package/dist/public/assets/_DQu5M2GV.js.br +0 -0
  187. package/dist/public/assets/_DUvup9ew.js +1 -0
  188. package/dist/public/assets/{_CEJUcePr.js → _DWrhUk5T.js} +1 -1
  189. package/dist/public/assets/_DWrhUk5T.js.br +0 -0
  190. package/dist/public/assets/{_Bv3qNE1b.js → _DXOx4zKx.js} +1 -1
  191. package/dist/public/assets/_D_1b7pob.js +1 -0
  192. package/dist/public/assets/_Daap2skI.js +1 -0
  193. package/dist/public/assets/{_CUXajOKj.js → _DcktT8yN.js} +1 -1
  194. package/dist/public/assets/_DcktT8yN.js.br +0 -0
  195. package/dist/public/assets/{_D2un443j.js → _Ddc9Y9a_.js} +1 -1
  196. package/dist/public/assets/_Ddc9Y9a_.js.br +0 -0
  197. package/dist/public/assets/{_BBWaxDkO.js → _Dfjlzo9W.js} +1 -1
  198. package/dist/public/assets/_Dfjlzo9W.js.br +0 -0
  199. package/dist/public/assets/_Dh30YzVM.js +1 -0
  200. package/dist/public/assets/_DhohfuPc.js +1 -0
  201. package/dist/public/assets/_DjQz8h-q.js +1 -0
  202. package/dist/public/assets/_DjX1BGKn.js +1 -0
  203. package/dist/public/assets/_DjiaxzEs.js +1 -0
  204. package/dist/public/assets/_Dkg-QEnz.js +1 -0
  205. package/dist/public/assets/{_Bx1CW-sF.js → _Dl46-33v.js} +1 -1
  206. package/dist/public/assets/_Dl46-33v.js.br +0 -0
  207. package/dist/public/assets/_DlvIY6aE.js +1 -0
  208. package/dist/public/assets/{_DxEm-Gwj.js → _Dmi6AQP3.js} +1 -1
  209. package/dist/public/assets/_Dmi6AQP3.js.br +0 -0
  210. package/dist/public/assets/{_BbbOvNRH.js → _Dmj0vHNs.js} +1 -1
  211. package/dist/public/assets/{_BbbOvNRH.js.br → _Dmj0vHNs.js.br} +0 -0
  212. package/dist/public/assets/{_DSVLaMWS.js → _DnYboxB9.js} +1 -1
  213. package/dist/public/assets/_DnYboxB9.js.br +0 -0
  214. package/dist/public/assets/{_Cz5BPBG8.js → _Do6MGycg.js} +1 -1
  215. package/dist/public/assets/_Do6MGycg.js.br +0 -0
  216. package/dist/public/assets/{_DkCaEf_h.js → _DtZ-vebM.js} +1 -1
  217. package/dist/public/assets/_DtZ-vebM.js.br +0 -0
  218. package/dist/public/assets/_DuNisSjT.js +1 -0
  219. package/dist/public/assets/_Dvk-TlMq.js +1 -0
  220. package/dist/public/assets/_Dvk-TlMq.js.br +0 -0
  221. package/dist/public/assets/_DwdnhMjL.js +1 -0
  222. package/dist/public/assets/_DwydmxSi.js +1 -0
  223. package/dist/public/assets/_DzgHDUu0.js +1 -0
  224. package/dist/public/assets/{_Dp3IZdH8.js → _G-e2JHHS.js} +1 -1
  225. package/dist/public/assets/_G-e2JHHS.js.br +0 -0
  226. package/dist/public/assets/_IOS0xG1B.js +1 -0
  227. package/dist/public/assets/_IiZnk_jc.js +1 -0
  228. package/dist/public/assets/{_DaMVRI8f.js → _KYdxhRVL.js} +1 -1
  229. package/dist/public/assets/_KYdxhRVL.js.br +0 -0
  230. package/dist/public/assets/_LY1sEEvJ.js +1 -0
  231. package/dist/public/assets/_MATnTPAL.js +1 -0
  232. package/dist/public/assets/_MATnTPAL.js.br +0 -0
  233. package/dist/public/assets/_OVl4e0V3.js +1 -0
  234. package/dist/public/assets/{_Bf8WYPfh.js → _Sv1HjkeK.js} +1 -1
  235. package/dist/public/assets/_Sv1HjkeK.js.br +0 -0
  236. package/dist/public/assets/_Syg4UyQU.js +86 -0
  237. package/dist/public/assets/_Syg4UyQU.js.br +0 -0
  238. package/dist/public/assets/_TJCslr2g.js +1 -0
  239. package/dist/public/assets/_UcXY-7XH.js +2 -0
  240. package/dist/public/assets/_UcXY-7XH.js.br +0 -0
  241. package/dist/public/assets/{_j2tDSMvo.js → _VM9JbUGP.js} +1 -1
  242. package/dist/public/assets/_VM9JbUGP.js.br +0 -0
  243. package/dist/public/assets/_YOjtJWMK.js +1 -0
  244. package/dist/public/assets/_YOjtJWMK.js.br +10 -0
  245. package/dist/public/assets/_YPt61819.js +1 -0
  246. package/dist/public/assets/{_DbvaGqOl.js → _Zh4-3iG-.js} +1 -1
  247. package/dist/public/assets/_Zh4-3iG-.js.br +0 -0
  248. package/dist/public/assets/{_D4dJ2qEE.js → _ZptG1LQC.js} +1 -1
  249. package/dist/public/assets/_brnakAIx.js +1 -0
  250. package/dist/public/assets/_bsxJ1YDE.js +1 -0
  251. package/dist/public/assets/_f5wPpUkq.js +1 -0
  252. package/dist/public/assets/_fPqLhj85.js +1 -0
  253. package/dist/public/assets/_g3oXW6NQ.js +1 -0
  254. package/dist/public/assets/_iHPPeFV7.js +1 -0
  255. package/dist/public/assets/_iJwEKWn1.js +1 -0
  256. package/dist/public/assets/_jtFrcV5d.js +1 -0
  257. package/dist/public/assets/{_Bv3e3rg8.js → _kQ9qYC7a.js} +1 -1
  258. package/dist/public/assets/_kQ9qYC7a.js.br +0 -0
  259. package/dist/public/assets/_kQki_UDN.js +1 -0
  260. package/dist/public/assets/_lRRU15CX.js +1 -0
  261. package/dist/public/assets/_lRRU15CX.js.br +0 -0
  262. package/dist/public/assets/_mKx7UwEC.js +1 -0
  263. package/dist/public/assets/_nnKb_fyX.js +6 -0
  264. package/dist/public/assets/_nnKb_fyX.js.br +0 -0
  265. package/dist/public/assets/_p44jCyhe.js +1 -0
  266. package/dist/public/assets/_pAx6IPLY.js +1 -0
  267. package/dist/public/assets/_psqSIrEM.js +1 -0
  268. package/dist/public/assets/{_CyBCIknf.js → _w_IRrfdL.js} +1 -1
  269. package/dist/public/assets/_w_IRrfdL.js.br +0 -0
  270. package/dist/public/assets/_wxSNlWQ_.js +1 -0
  271. package/dist/public/assets/_xPBJn0Hx.js +1 -0
  272. package/dist/public/assets/_xPBJn0Hx.js.br +0 -0
  273. package/dist/public/assets/_yP2G9NCR.js +1 -0
  274. package/dist/public/assets/app-shell-CVYlktwa.css +1 -0
  275. package/dist/public/assets/app-shell-CVYlktwa.css.br +0 -0
  276. package/dist/public/assets/files-view-SzdFekvc.js +2 -0
  277. package/dist/public/assets/manage-workspace-DIY2p0qY.js +2 -0
  278. package/dist/public/assets/new-dBLsQZ5Y.js +1 -0
  279. package/dist/public/assets/new-workspace-D6YmZcwM.js +2 -0
  280. package/dist/public/assets/review-view-Dr5gLqyl.js +2 -0
  281. package/dist/public/assets/settings-dBLsQZ5Y.js +1 -0
  282. package/dist/public/assets/settings-page-COg15zf5.js +2 -0
  283. package/dist/public/assets/styles-DqimleOa.css +1 -0
  284. package/dist/public/assets/styles-DqimleOa.css.br +0 -0
  285. package/dist/public/assets/w-dBLsQZ5Y.js +1 -0
  286. package/dist/public/assets/w._-BbJyr8oS.js +1 -0
  287. package/dist/public/assets/w._-Bbhvn-OV.js +1 -0
  288. package/dist/public/assets/w._-dBLsQZ5Y.js +1 -0
  289. package/dist/rtc-helper.mjs +1170 -0
  290. package/lib/preview/media.mjs +5 -4
  291. package/lib/setup/doctor.d.mts +23 -1
  292. package/lib/setup/doctor.mjs +75 -9
  293. package/lib/setup/firewall.d.mts +76 -0
  294. package/lib/setup/firewall.mjs +598 -0
  295. package/lib/setup/tailscale.d.mts +53 -0
  296. package/lib/setup/tailscale.mjs +179 -0
  297. package/package.json +3 -2
  298. package/dist/_CkwTsHKB.js +0 -2
  299. package/dist/public/assets/_1RHVsAcK.js +0 -1
  300. package/dist/public/assets/_4CShjaLP.js +0 -1
  301. package/dist/public/assets/_68JtNDO1.js +0 -1
  302. package/dist/public/assets/_8G2Mv7jG.js.br +0 -0
  303. package/dist/public/assets/_8dvK2NDJ.js.br +0 -0
  304. package/dist/public/assets/_94L2SIJF.js +0 -1
  305. package/dist/public/assets/_9AnDb3YH.js +0 -1
  306. package/dist/public/assets/_9kX9D09B.js.br +0 -0
  307. package/dist/public/assets/_9lErVegn.js +0 -1
  308. package/dist/public/assets/_B0oyGUU5.js +0 -1
  309. package/dist/public/assets/_B0oyGUU5.js.br +0 -0
  310. package/dist/public/assets/_B1mPnLlp.js +0 -1
  311. package/dist/public/assets/_B4fi2SSA.js +0 -1
  312. package/dist/public/assets/_B7Qx25UP.js +0 -1
  313. package/dist/public/assets/_B7b8EVjA.js +0 -1
  314. package/dist/public/assets/_BBWaxDkO.js.br +0 -0
  315. package/dist/public/assets/_BDa-iwuj.js.br +0 -0
  316. package/dist/public/assets/_BEKHKNmM.js +0 -1
  317. package/dist/public/assets/_BE_Jyvqd.js.br +0 -0
  318. package/dist/public/assets/_BFU-kJkk.js +0 -1
  319. package/dist/public/assets/_BIJ2O2oU.js +0 -1
  320. package/dist/public/assets/_BJ59XAZ9.js +0 -1
  321. package/dist/public/assets/_BKqRYfOI.js +0 -15
  322. package/dist/public/assets/_BKqRYfOI.js.br +0 -0
  323. package/dist/public/assets/_BKr9Dzz1.js +0 -1
  324. package/dist/public/assets/_BN7xvxS_.js +0 -1
  325. package/dist/public/assets/_BNQTVBlH.js +0 -1
  326. package/dist/public/assets/_BNW5Jiec.js.br +0 -0
  327. package/dist/public/assets/_BOGkzMx9.js.br +0 -0
  328. package/dist/public/assets/_BUEpqQ_m.js +0 -1
  329. package/dist/public/assets/_BUvqweu0.js.br +0 -0
  330. package/dist/public/assets/_BZKB4fhr.js +0 -1
  331. package/dist/public/assets/_BZKB4fhr.js.br +0 -0
  332. package/dist/public/assets/_BZo9BjDF.js +0 -1
  333. package/dist/public/assets/_BdUNnSlC.js +0 -1
  334. package/dist/public/assets/_Bf8WYPfh.js.br +0 -0
  335. package/dist/public/assets/_Bhx319Hi.js.br +0 -0
  336. package/dist/public/assets/_Bm4SHrNp.js.br +0 -0
  337. package/dist/public/assets/_Bmrqq8Ro.js +0 -2
  338. package/dist/public/assets/_Bmrqq8Ro.js.br +0 -0
  339. package/dist/public/assets/_BnHZ6Npj.js +0 -1
  340. package/dist/public/assets/_BoDxRJLS.js +0 -1
  341. package/dist/public/assets/_BoDxRJLS.js.br +0 -0
  342. package/dist/public/assets/_BoPk1gXL.js +0 -1
  343. package/dist/public/assets/_Bo_Ru664.js +0 -1
  344. package/dist/public/assets/_Bp8-V8yl.js.br +0 -0
  345. package/dist/public/assets/_BpoeUr5j.js.br +0 -0
  346. package/dist/public/assets/_Bq2G_Tid.js +0 -1
  347. package/dist/public/assets/_BsyoLB_D.js +0 -1
  348. package/dist/public/assets/_Bv3e3rg8.js.br +0 -0
  349. package/dist/public/assets/_BvXp6HpX.js.br +0 -0
  350. package/dist/public/assets/_BwP07uVS.js.br +0 -0
  351. package/dist/public/assets/_Bx1CW-sF.js.br +0 -0
  352. package/dist/public/assets/_BywcP-As.js.br +0 -0
  353. package/dist/public/assets/_Bzgtwt3G.js +0 -1
  354. package/dist/public/assets/_Bzgtwt3G.js.br +0 -0
  355. package/dist/public/assets/_C0_s45qg.js.br +0 -0
  356. package/dist/public/assets/_C0ePgF6b.js +0 -1
  357. package/dist/public/assets/_C0oVtTqO.js +0 -1
  358. package/dist/public/assets/_C0oVtTqO.js.br +0 -0
  359. package/dist/public/assets/_C654p96Z.js.br +0 -0
  360. package/dist/public/assets/_C8_1Y2-z.js +0 -1
  361. package/dist/public/assets/_C8_1Y2-z.js.br +0 -0
  362. package/dist/public/assets/_C8v1AZFP.js +0 -1
  363. package/dist/public/assets/_CB0D5cRH.js +0 -1
  364. package/dist/public/assets/_CD05JUTh.js +0 -1
  365. package/dist/public/assets/_CEJUcePr.js.br +0 -0
  366. package/dist/public/assets/_CEXHZd73.js.br +0 -0
  367. package/dist/public/assets/_CHcUMVR7.js +0 -1
  368. package/dist/public/assets/_CHuLFr1f.js.br +0 -0
  369. package/dist/public/assets/_CIb7xw_1.js.br +0 -0
  370. package/dist/public/assets/_CMSBfO6u.js.br +0 -0
  371. package/dist/public/assets/_CN7GPyBo.js +0 -1
  372. package/dist/public/assets/_COcePo2y.js.br +0 -0
  373. package/dist/public/assets/_CTINBWaG.js.br +0 -0
  374. package/dist/public/assets/_CTWrnAbz.js +0 -1
  375. package/dist/public/assets/_CUXajOKj.js.br +0 -0
  376. package/dist/public/assets/_CVru3vzC.js +0 -1
  377. package/dist/public/assets/_CYjE__ml.js +0 -1
  378. package/dist/public/assets/_CYjE__ml.js.br +0 -0
  379. package/dist/public/assets/_CZ_OWtIT.js.br +0 -0
  380. package/dist/public/assets/_C_37_B6u.js.br +0 -0
  381. package/dist/public/assets/_C_CIQL7J.js +0 -1
  382. package/dist/public/assets/_C_CIQL7J.js.br +0 -0
  383. package/dist/public/assets/_C_WdpYbK.js +0 -1
  384. package/dist/public/assets/_CaiH3VN9.js +0 -1
  385. package/dist/public/assets/_CamWDaoG.js.br +0 -0
  386. package/dist/public/assets/_CdDElA0V.js +0 -1
  387. package/dist/public/assets/_CfnsClzZ.js +0 -1
  388. package/dist/public/assets/_Cgo1fRhJ.js +0 -1
  389. package/dist/public/assets/_Cgo1fRhJ.js.br +0 -0
  390. package/dist/public/assets/_CjhGrlf3.js +0 -1
  391. package/dist/public/assets/_CjlbL4C_.js +0 -1
  392. package/dist/public/assets/_CjogTUXK.js +0 -1
  393. package/dist/public/assets/_ClldMY37.js.br +0 -0
  394. package/dist/public/assets/_CmFq6Gtp.js +0 -1
  395. package/dist/public/assets/_CoAPOKiP.js +0 -1
  396. package/dist/public/assets/_CoUUgh9P.js +0 -1
  397. package/dist/public/assets/_CpjSCB1I.js.br +0 -0
  398. package/dist/public/assets/_Ct3RF80L.js.br +0 -0
  399. package/dist/public/assets/_CtYy5eZs.js +0 -1
  400. package/dist/public/assets/_CxAPL49a.js.br +0 -0
  401. package/dist/public/assets/_CyBCIknf.js.br +0 -0
  402. package/dist/public/assets/_Cz5BPBG8.js.br +0 -0
  403. package/dist/public/assets/_D-eEFXaI.js +0 -1
  404. package/dist/public/assets/_D0aoEFRx.js.br +0 -0
  405. package/dist/public/assets/_D1uRW1qz.js.br +0 -0
  406. package/dist/public/assets/_D2oIr2T2.js +0 -1
  407. package/dist/public/assets/_D2un443j.js.br +0 -0
  408. package/dist/public/assets/_D3MPx4-f.js +0 -1
  409. package/dist/public/assets/_D4q8XSMI.js.br +0 -0
  410. package/dist/public/assets/_D4quFMVQ.js.br +0 -0
  411. package/dist/public/assets/_D4rOX-Fa.js.br +0 -0
  412. package/dist/public/assets/_D5edrSyA.js +0 -1
  413. package/dist/public/assets/_D6kktUFn.js.br +0 -0
  414. package/dist/public/assets/_D80-qtVY.js +0 -1
  415. package/dist/public/assets/_D9-3EVA4.js +0 -1
  416. package/dist/public/assets/_D9sS4J_w.js.br +0 -0
  417. package/dist/public/assets/_DBLpxTDi.js +0 -1
  418. package/dist/public/assets/_DByHQ7nW.js +0 -1591
  419. package/dist/public/assets/_DByHQ7nW.js.br +0 -0
  420. package/dist/public/assets/_DC-78WeM.js.br +0 -0
  421. package/dist/public/assets/_DDl8KSWJ.js.br +0 -0
  422. package/dist/public/assets/_DFWOMF-B.js.br +0 -0
  423. package/dist/public/assets/_DKb-rt9n.js +0 -1
  424. package/dist/public/assets/_DMnSJCF_.js +0 -1
  425. package/dist/public/assets/_DOOIlrPh.js +0 -1
  426. package/dist/public/assets/_DPW-0yKP.js +0 -1
  427. package/dist/public/assets/_DR3BmvWU.js +0 -1
  428. package/dist/public/assets/_DSVLaMWS.js.br +0 -0
  429. package/dist/public/assets/_DYNGNKLk.js +0 -1
  430. package/dist/public/assets/_DZnEgCbj.js +0 -1
  431. package/dist/public/assets/_DaMVRI8f.js.br +0 -0
  432. package/dist/public/assets/_DbvaGqOl.js.br +0 -0
  433. package/dist/public/assets/_DcMIlvz-.js.br +0 -0
  434. package/dist/public/assets/_Dd6X3e7w.js.br +0 -0
  435. package/dist/public/assets/_De7P3jUH.js.br +0 -0
  436. package/dist/public/assets/_DeiFEAar.js +0 -1
  437. package/dist/public/assets/_DfI982PI.js.br +0 -0
  438. package/dist/public/assets/_DfZ6emcw.js +0 -1
  439. package/dist/public/assets/_Dj1lZ1pa.js +0 -86
  440. package/dist/public/assets/_Dj1lZ1pa.js.br +0 -0
  441. package/dist/public/assets/_DkCaEf_h.js.br +0 -0
  442. package/dist/public/assets/_DonAis0J.js +0 -1
  443. package/dist/public/assets/_Dp3IZdH8.js.br +0 -0
  444. package/dist/public/assets/_DqYih4xk.js +0 -1
  445. package/dist/public/assets/_DqYih4xk.js.br +0 -0
  446. package/dist/public/assets/_DqhphdU4.js.br +0 -0
  447. package/dist/public/assets/_DrIgZJzN.js.br +0 -0
  448. package/dist/public/assets/_Dt4hHR05.js +0 -1
  449. package/dist/public/assets/_DtTbTraA.js +0 -1
  450. package/dist/public/assets/_DwMxAJKP.js +0 -1
  451. package/dist/public/assets/_DxEm-Gwj.js.br +0 -0
  452. package/dist/public/assets/_Dytf99zx.js.br +0 -0
  453. package/dist/public/assets/_EAgv5jR9.js +0 -1
  454. package/dist/public/assets/_Iecpd0kS.js +0 -1
  455. package/dist/public/assets/_Iecpd0kS.js.br +0 -0
  456. package/dist/public/assets/_MCwIJAuJ.js.br +0 -0
  457. package/dist/public/assets/_NM79Lu3L.js +0 -6
  458. package/dist/public/assets/_NM79Lu3L.js.br +0 -0
  459. package/dist/public/assets/_QpNKKuS9.js +0 -1
  460. package/dist/public/assets/_SGDxiwE1.js.br +0 -0
  461. package/dist/public/assets/_TA8pE7z9.js +0 -1
  462. package/dist/public/assets/_bE4sNDeU.js +0 -1
  463. package/dist/public/assets/_bcsuBP7T.js.br +0 -0
  464. package/dist/public/assets/_cdcAU4yY.js +0 -1
  465. package/dist/public/assets/_ch_yXAap.js.br +0 -0
  466. package/dist/public/assets/_d5u7EI97.js.br +0 -0
  467. package/dist/public/assets/_eoa1EOU-.js.br +0 -0
  468. package/dist/public/assets/_j2tDSMvo.js.br +0 -0
  469. package/dist/public/assets/_jNhIFgbc.js +0 -1
  470. package/dist/public/assets/_kDYiTaag.js +0 -1
  471. package/dist/public/assets/_lNMVVbUx.js +0 -1
  472. package/dist/public/assets/_nwJ7Hu3S.js +0 -1
  473. package/dist/public/assets/_tmDtUACa.js +0 -1
  474. package/dist/public/assets/_tmDtUACa.js.br +0 -0
  475. package/dist/public/assets/_wXDh-Z2N.js.br +0 -0
  476. package/dist/public/assets/_wcshV0sZ.js.br +0 -0
  477. package/dist/public/assets/_x-NwqgCn.js +0 -1
  478. package/dist/public/assets/_xyw_DS5P.js.br +0 -0
  479. package/dist/public/assets/_zSAfqXcm.js.br +0 -0
  480. package/dist/public/assets/app-shell-ChQoVC5b.css +0 -1
  481. package/dist/public/assets/app-shell-ChQoVC5b.css.br +0 -0
  482. package/dist/public/assets/files-view-CLtLp_BW.js +0 -2
  483. package/dist/public/assets/files-view-CNHQapdI.css +0 -1
  484. package/dist/public/assets/files-view-CNHQapdI.css.br +0 -0
  485. package/dist/public/assets/group.css.ts-BG82htKb.css +0 -1
  486. package/dist/public/assets/group.css.ts-BG82htKb.css.br +0 -0
  487. package/dist/public/assets/icon-folder-DJOHuEpD.css +0 -1
  488. package/dist/public/assets/icon-folder-DJOHuEpD.css.br +0 -0
  489. package/dist/public/assets/icon-search-DsJuFXUJ.css +0 -1
  490. package/dist/public/assets/icon-search-DsJuFXUJ.css.br +0 -0
  491. package/dist/public/assets/manage-workspace-NBcFDyrB.js +0 -2
  492. package/dist/public/assets/manage-workspace-f_Np32TD.css +0 -1
  493. package/dist/public/assets/modal-view-KVNBpNYi.css +0 -1
  494. package/dist/public/assets/modal-view-KVNBpNYi.css.br +0 -0
  495. package/dist/public/assets/new-DHI77GvL.js +0 -1
  496. package/dist/public/assets/new-workspace-BFE-HpD_.css +0 -1
  497. package/dist/public/assets/new-workspace-BFE-HpD_.css.br +0 -0
  498. package/dist/public/assets/new-workspace-BRzimdd5.js +0 -2
  499. package/dist/public/assets/port-chip-CUUIDOVM.css +0 -1
  500. package/dist/public/assets/port-chip-CUUIDOVM.css.br +0 -0
  501. package/dist/public/assets/prompt-dialog-BGs6RXOV.css +0 -1
  502. package/dist/public/assets/prompt-dialog-BGs6RXOV.css.br +0 -0
  503. package/dist/public/assets/quick-open-Gx4so1bl.css +0 -1
  504. package/dist/public/assets/quick-open-Gx4so1bl.css.br +0 -0
  505. package/dist/public/assets/repo-picker-CUhd0vJN.css +0 -1
  506. package/dist/public/assets/repo-picker-CUhd0vJN.css.br +0 -4
  507. package/dist/public/assets/review-view-DFEK9VBa.js +0 -2
  508. package/dist/public/assets/review-view-deUY3OE5.css +0 -1
  509. package/dist/public/assets/review-view-deUY3OE5.css.br +0 -0
  510. package/dist/public/assets/section-CziSOSBR.css +0 -1
  511. package/dist/public/assets/section-CziSOSBR.css.br +0 -0
  512. package/dist/public/assets/settings-DHI77GvL.js +0 -1
  513. package/dist/public/assets/settings-page-OOtPOzIn.js +0 -2
  514. package/dist/public/assets/settings-page-wZhd7FLi.css +0 -1
  515. package/dist/public/assets/settings-page-wZhd7FLi.css.br +0 -0
  516. package/dist/public/assets/skill-row-BoCyFIXg.css +0 -1
  517. package/dist/public/assets/sso-auth-DV76tTpE.css +0 -1
  518. package/dist/public/assets/sso-auth-DV76tTpE.css.br +0 -0
  519. package/dist/public/assets/w-DHI77GvL.js +0 -1
  520. package/dist/public/assets/w._-DHI77GvL.js +0 -1
  521. package/dist/public/assets/w._-DsTgq3-C.js +0 -1
  522. package/dist/public/assets/w._-igEOSPR-.js +0 -1
@@ -1,13 +1,14 @@
1
1
  // What a browser can render inline for a binary file in review, keyed by
2
- // extension. Plain ESM with no dependencies: the blob route serves only the
3
- // types in this table and the browser picks its element from the same one,
4
- // so a type can never be displayable at one end and not the other.
2
+ // extension. Plain ESM with no dependencies: the blob route serves inline
3
+ // only the types in this table and the browser picks its element from the
4
+ // same one, so a type can never be displayable at one end and not the other.
5
5
  //
6
6
  // The allowlist is the security boundary, not a nicety. The app's API and
7
7
  // the review page share an origin, so an `image/svg+xml` opened in a tab —
8
8
  // or worse a `text/html` — from a repo under review would be script with
9
9
  // the reviewer's access to it. Nothing outside this table is ever served
10
- // inline, and the served response denies scripts on top of that.
10
+ // inline (a `.share/` file of another type goes only as an attachment),
11
+ // and the served response denies scripts on top of that.
11
12
 
12
13
  /** @typedef {"image" | "pdf" | "video"} PreviewKind */
13
14
  /** @typedef {{ kind: PreviewKind, type: string }} Preview */
@@ -1,3 +1,5 @@
1
+ import type { TailscaleProbe } from "./tailscale.mjs";
2
+ import type { FirewallProbe } from "./firewall.mjs";
1
3
  export interface DoctorTool {
2
4
  id: string;
3
5
  label: string;
@@ -47,6 +49,11 @@ export interface Doctor {
47
49
  awake: boolean | null;
48
50
  /** git credential helpers that run a gh which is gone (config keys). */
49
51
  staleGhHelpers: string[];
52
+ /** Tailscale, optional: how work is reached from other devices. */
53
+ tailscale: TailscaleProbe;
54
+ /** The host firewall in front of direct connections' UDP port; null
55
+ * with none active (or direct connections off). */
56
+ firewall: FirewallProbe | null;
50
57
  }
51
58
  export function setupPath(base?: string): string;
52
59
  export function which(bin: string): string | null;
@@ -61,5 +68,20 @@ export const VERSIONED_PATH: RegExp;
61
68
  export function stableGh(): string | null;
62
69
  export function staleGhHelpers(): Promise<string[]>;
63
70
  export function discoverAgents(fresh?: boolean): DoctorAgent[];
64
- export function doctor(opts?: { hosts?: string[] }): Promise<Doctor>;
71
+ export function tailscaleProbe(opts?: {
72
+ port?: string;
73
+ allowedHosts?: string;
74
+ }): Promise<TailscaleProbe>;
75
+ export function doctor(opts?: {
76
+ hosts?: string[];
77
+ port?: string;
78
+ allowedHosts?: string;
79
+ /** The service's direct-connection settings, for the firewall probe. */
80
+ rtcPort?: string;
81
+ listen?: string;
82
+ rtc?: string;
83
+ /** The firewall as the service meets it, read by the caller (the CLI
84
+ * asks the running server); the probe runs here without it. */
85
+ firewall?: FirewallProbe | null | Promise<FirewallProbe | null>;
86
+ }): Promise<Doctor>;
65
87
  export function formatDoctor(d: Doctor): string;
@@ -6,6 +6,8 @@ import fs from "node:fs";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
8
8
  import { AGENTS, DEFAULT_GITHUB_HOST, TOOLS } from "./catalog.mjs";
9
+ import { readTailscale, tailscaleLine } from "./tailscale.mjs";
10
+ import { firewallLine, firewallProbe } from "./firewall.mjs";
9
11
 
10
12
  const home = os.homedir();
11
13
 
@@ -363,11 +365,50 @@ async function ghExtensions() {
363
365
  return out;
364
366
  }
365
367
 
368
+ function parseJson(text) {
369
+ try {
370
+ return JSON.parse(text);
371
+ } catch {
372
+ return null;
373
+ }
374
+ }
375
+
376
+ /** Tailscale here and what its serve config does with work's port
377
+ * (lib/setup/tailscale.mjs), from read-only commands. `port` and
378
+ * `allowedHosts` default to this process's own, which are the server's
379
+ * when the server asks. */
380
+ export async function tailscaleProbe({ port, allowedHosts } = {}) {
381
+ const bin = which("tailscale");
382
+ if (!bin) return { installed: false };
383
+ // Without peers: a large tailnet's full status is megabytes, and only
384
+ // this node is read.
385
+ const [version, status, serve] = await Promise.all([
386
+ run(bin, ["version"], { timeout: 5000 }),
387
+ run(bin, ["status", "--json", "--peers=false"], { timeout: 5000 }),
388
+ run(bin, ["serve", "status", "--json"], { timeout: 5000 }),
389
+ ]);
390
+ return readTailscale(
391
+ {
392
+ path: tilde(bin),
393
+ version: version.stdout,
394
+ status: status.ok ? parseJson(status.stdout) : null,
395
+ serve: serve.ok ? parseJson(serve.stdout) : null,
396
+ },
397
+ {
398
+ port: port || process.env.PORT || process.env.WORK_APP_PORT || "7171",
399
+ allowedHosts: allowedHosts ?? process.env.WORK_ALLOWED_HOSTS,
400
+ },
401
+ );
402
+ }
403
+
366
404
  /**
367
405
  * Full readiness snapshot.
368
406
  *
369
- * @param {{ hosts?: string[] }} [opts] configured GitHub hosts (settings);
370
- * github.com and any host gh is already signed in to are always included.
407
+ * @param {{ hosts?: string[], port?: string, allowedHosts?: string }} [opts]
408
+ * configured GitHub hosts (settings); github.com and any host gh is
409
+ * already signed in to are always included. `port` and `allowedHosts`
410
+ * are the service's, for the Tailscale probe; `firewall`, when given, is
411
+ * the service's own firewall reading (`serviceFirewall` in the CLI).
371
412
  */
372
413
  export async function doctor(opts = {}) {
373
414
  const hostSet = new Set([
@@ -375,13 +416,29 @@ export async function doctor(opts = {}) {
375
416
  ...(opts.hosts || []),
376
417
  ...ghKnownHosts(),
377
418
  ]);
378
- const [versions, github, awake, extensions, helpers] = await Promise.all([
379
- miseVersions(),
380
- Promise.all([...hostSet].map(githubHostStatus)),
381
- canStayAwake(),
382
- ghExtensions(),
383
- staleGhHelpers(),
384
- ]);
419
+ const [versions, github, awake, extensions, helpers, tailscale, firewall] =
420
+ await Promise.all([
421
+ miseVersions(),
422
+ Promise.all([...hostSet].map(githubHostStatus)),
423
+ canStayAwake(),
424
+ ghExtensions(),
425
+ staleGhHelpers(),
426
+ tailscaleProbe(opts),
427
+ // The CLI hands in the service's own reading (bin/work.mjs
428
+ // `serviceFirewall`); the server reads for itself.
429
+ opts.firewall !== undefined
430
+ ? opts.firewall
431
+ : firewallProbe({
432
+ rtcPort: opts.rtcPort ?? process.env.WORK_RTC_PORT,
433
+ appPort:
434
+ opts.port ||
435
+ process.env.PORT ||
436
+ process.env.WORK_APP_PORT ||
437
+ "7171",
438
+ listen: opts.listen ?? process.env.WORK_LISTEN,
439
+ rtc: opts.rtc ?? process.env.WORK_RTC,
440
+ }),
441
+ ]);
385
442
 
386
443
  const tools = TOOLS.map((t) => {
387
444
  if (t.ghExtension) {
@@ -429,6 +486,8 @@ export async function doctor(opts = {}) {
429
486
  github,
430
487
  awake,
431
488
  staleGhHelpers: helpers,
489
+ tailscale,
490
+ firewall,
432
491
  };
433
492
  }
434
493
 
@@ -455,6 +514,13 @@ export function formatDoctor(d) {
455
514
  `${a.label.padEnd(11)}${mark(a.installed)} ${a.installed ? a.instances.map((i) => `${i.command} (${i.path})`).join(", ") : "not installed"}`,
456
515
  );
457
516
  }
517
+ // Optional, so never part of `ready`: it is how work is reached from
518
+ // elsewhere, not what it needs to run.
519
+ lines.push(tailscaleLine(d.tailscale));
520
+ // Optional too: only devices elsewhere on the network lose the direct
521
+ // path to a firewall, and work runs either way.
522
+ const firewall = firewallLine(d.firewall);
523
+ if (firewall) lines.push(firewall);
458
524
  // Said only when nothing holds the host: not a readiness gate, since
459
525
  // work runs either way, but the one place a headless host would say so.
460
526
  if (d.awake === false) {
@@ -0,0 +1,76 @@
1
+ export const RULE: string;
2
+ export interface FirewallProbe {
3
+ kind: "firewalld" | "ufw" | "macos";
4
+ /** How it is named in a sentence: `firewalld (zone FedoraServer)`. */
5
+ what: string;
6
+ zone?: string;
7
+ /** The UDP port direct connections use. */
8
+ port: number;
9
+ /** It lets that port in (by its settings, or work's own rule). */
10
+ admits: boolean;
11
+ /** It likely drops it: not admitted by what could be read. */
12
+ likely: boolean;
13
+ /** Its settings were read as they are, not as shipped. */
14
+ exact: boolean;
15
+ /** work's named rule is there. */
16
+ ruled: boolean;
17
+ /** The commands `work setup --firewall` runs (argv, sudo first); empty
18
+ * where it adds nothing. */
19
+ plan: string[][];
20
+ /** Those as one shell line, or the fix to run by hand; null with none. */
21
+ fix: string | null;
22
+ /** What the verdict rests on, when it is not work's rule. */
23
+ why?: string | null;
24
+ /** The node macOS's firewall was asked about (its real path). */
25
+ node?: string;
26
+ /** Whose node that was, as the CLI found it: the running service's
27
+ * own reading, its definition's, or this shell's for want of either. */
28
+ nodeFrom?: "service" | "unit" | "shell";
29
+ }
30
+ export function firewallProbe(opts?: {
31
+ rtcPort?: string | number;
32
+ appPort?: string | number;
33
+ listen?: string;
34
+ rtc?: string;
35
+ node?: string;
36
+ root?: string;
37
+ platform?: string;
38
+ }): Promise<FirewallProbe | null>;
39
+ export interface MacosVerdict {
40
+ admits: boolean;
41
+ exact: boolean;
42
+ why: string;
43
+ needs: "blockall" | "unblock" | "add" | null;
44
+ }
45
+ export function macosVerdict(said: {
46
+ state?: string;
47
+ blockAll?: string;
48
+ signed?: string;
49
+ blocked?: string;
50
+ apps?: string;
51
+ sign?: string;
52
+ paths: string[];
53
+ }): MacosVerdict | null;
54
+ export function globalOn(text?: string): boolean | null;
55
+ export function blockAllOn(text?: string): boolean | null;
56
+ export function allowSigned(text?: string): {
57
+ builtIn: boolean | null;
58
+ downloaded: boolean | null;
59
+ };
60
+ export function listedAs(
61
+ text?: string,
62
+ paths?: string[],
63
+ ): "allow" | "block" | null;
64
+ export function appBlocked(text?: string): "allow" | "block" | null;
65
+ export function signatureOf(
66
+ text?: string,
67
+ ): "developer-id" | "apple" | "adhoc" | "unsigned" | "other" | null;
68
+ export function serviceNode(
69
+ text: string,
70
+ opts?: { PATH?: string },
71
+ ): string | null;
72
+ export function firewallLine(f: FirewallProbe | null): string | null;
73
+ export function applyPlan(
74
+ plan: string[][],
75
+ log: (line: string) => void,
76
+ ): { ok: boolean; failed?: string[] };