@dylanpiercey/work 0.0.222 → 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 (540) hide show
  1. package/README.md +7 -4
  2. package/bin/work.mjs +70 -17
  3. package/dist/{_DNhDGBkH.js → _CpANOzpd.js} +219 -134
  4. package/dist/_LF2Fo5WE.js +2 -0
  5. package/dist/index.mjs +1462 -1770
  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/{_CsicaM6z.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/{_C1JRCVnT.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/{_cSsv1ZjH.js → _BA8HFnO3.js} +1 -1
  21. package/dist/public/assets/_BA8HFnO3.js.br +0 -0
  22. package/dist/public/assets/{_CdWPIocC.js → _BAHrOydH.js} +1 -1
  23. package/dist/public/assets/_BAHrOydH.js.br +0 -0
  24. package/dist/public/assets/{_Bpf0Nyqk.js → _BBpX-M4b.js} +1 -1
  25. package/dist/public/assets/_BBpX-M4b.js.br +0 -0
  26. package/dist/public/assets/{_BxpaVKca.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/{_DYBhy6q4.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/{_B9Ukk65G.js → _BLRpf6Uw.js} +1 -1
  37. package/dist/public/assets/_BLRpf6Uw.js.br +0 -0
  38. package/dist/public/assets/{_CrV4JiE4.js → _BLTfQLdY.js} +1 -1
  39. package/dist/public/assets/_BLTfQLdY.js.br +0 -0
  40. package/dist/public/assets/{_Dns259C4.js → _BO0OB-rz.js} +1 -1
  41. package/dist/public/assets/_BO0OB-rz.js.br +0 -0
  42. package/dist/public/assets/{_DZLJGzpN.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/{_DktieTrd.js → _BRG_DBcC.js} +1 -1
  47. package/dist/public/assets/_BRG_DBcC.js.br +0 -0
  48. package/dist/public/assets/{_DvqvHR7_.js → _BS4crAAm.js} +1 -1
  49. package/dist/public/assets/_BS4crAAm.js.br +0 -0
  50. package/dist/public/assets/{_OZcBKgKS.js → _BUH04L5e.js} +1 -1
  51. package/dist/public/assets/{_Cp1dT7ox.js → _BVp6r0fg.js} +1 -1
  52. package/dist/public/assets/_BVp6r0fg.js.br +0 -0
  53. package/dist/public/assets/{_BSliyqkf.js → _BXT2bXMi.js} +1 -1
  54. package/dist/public/assets/_BXT2bXMi.js.br +0 -0
  55. package/dist/public/assets/{_BJIAaIh4.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/{_B29iioj9.js → _BbiACo0Y.js} +1 -1
  59. package/dist/public/assets/_BbiACo0Y.js.br +0 -0
  60. package/dist/public/assets/{_BxAKVWw-.js → _BdvO5Lqa.js} +1 -1
  61. package/dist/public/assets/_BdvO5Lqa.js.br +0 -0
  62. package/dist/public/assets/{_4KGVbuYs.js → _BeE9qDu0.js} +1 -1
  63. package/dist/public/assets/{_4KGVbuYs.js.br → _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/{_Dtx2usNe.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/{_DZD7yzH2.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/{_BNPo3NaH.js → _BxAl0m64.js} +1 -1
  84. package/dist/public/assets/_BxAl0m64.js.br +0 -0
  85. package/dist/public/assets/{_CPMD0qdL.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/{_H7TtilBa.js → _C1PmcEws.js} +1 -1
  89. package/dist/public/assets/_C1PmcEws.js.br +0 -0
  90. package/dist/public/assets/{_i6oi77xC.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/{_D74J3kwJ.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/{_DLJu1hcD.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/{_BpLwQ1O8.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/{_C3E24F_T.js → _CB31bp-W.js} +1 -1
  106. package/dist/public/assets/_CB31bp-W.js.br +0 -0
  107. package/dist/public/assets/{_BXU-ZvQb.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/{_Ca3bfNZI.js → _CE5MhJWL.js} +1 -1
  112. package/dist/public/assets/_CE5MhJWL.js.br +0 -0
  113. package/dist/public/assets/{_Ct2VbISZ.js → _CGLpCj_I.js} +1 -1
  114. package/dist/public/assets/_CGLpCj_I.js.br +0 -0
  115. package/dist/public/assets/{_BIul3uoC.js → _CJ9j8N5Z.js} +1 -1
  116. package/dist/public/assets/_CJ9j8N5Z.js.br +0 -0
  117. package/dist/public/assets/{_NGfZeYAt.js → _CLDmR3jR.js} +1 -1
  118. package/dist/public/assets/_CLDmR3jR.js.br +0 -0
  119. package/dist/public/assets/{_CKwCTsbp.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/{_DYm1j3HZ.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/{_DNqoI_cd.js → _CX1wufuh.js} +1 -1
  129. package/dist/public/assets/_CX1wufuh.js.br +0 -0
  130. package/dist/public/assets/{_gP9nLV2Y.js → _CYNAhnRH.js} +117 -117
  131. package/dist/public/assets/_CYNAhnRH.js.br +0 -0
  132. package/dist/public/assets/{_DW6AnxDW.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/{_C4KQv1VW.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/{_BY6ayWBy.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/{_CluEtmrQ.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/{_LgS0G0uH.js → _CttJbiei.js} +1 -1
  150. package/dist/public/assets/_CttJbiei.js.br +0 -0
  151. package/dist/public/assets/{_TxnhYSE5.js → _CtyJUmXC.js} +1 -1
  152. package/dist/public/assets/_CtyJUmXC.js.br +0 -0
  153. package/dist/public/assets/{_KM7EGl2R.js → _Cw_8WbwF.js} +1 -1
  154. package/dist/public/assets/_Cw_8WbwF.js.br +0 -0
  155. package/dist/public/assets/{_D_joWBEC.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/{_C-oO7X9P.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/{_DFiA_pht.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/{_Cnl5owe1.js → _DI0QHEXB.js} +1 -1
  171. package/dist/public/assets/_DI0QHEXB.js.br +0 -0
  172. package/dist/public/assets/{_BHkMvOuI.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/{_ByqDCoAZ.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/{_BYHfXvmU.js → _DeCJ44Me.js} +1 -1
  185. package/dist/public/assets/_DeCJ44Me.js.br +0 -0
  186. package/dist/public/assets/{_CEvca0JK.js → _DeN4EY8L.js} +1 -1
  187. package/dist/public/assets/_DeN4EY8L.js.br +0 -0
  188. package/dist/public/assets/{_BCTeDxHC.js → _DhEdzMUw.js} +1 -1
  189. package/dist/public/assets/_DhEdzMUw.js.br +0 -0
  190. package/dist/public/assets/{_aAORMS0u.js → _DhNuRs-V.js} +1 -1
  191. package/dist/public/assets/_DhNuRs-V.js.br +0 -0
  192. package/dist/public/assets/{_ItervcuA.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/{_BJk5sqrB.js → _DlpTErRA.js} +1 -1
  196. package/dist/public/assets/_DlpTErRA.js.br +0 -0
  197. package/dist/public/assets/{_SHB9zmh2.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/{_CtQ-4c6a.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/{_QlXMW-cP.js → _DuGmU4h0.js} +1 -1
  208. package/dist/public/assets/_DuGmU4h0.js.br +0 -0
  209. package/dist/public/assets/{_DJnXBrlD.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/{_CN5iw4cA.js → _DuarImb7.js} +1 -1
  213. package/dist/public/assets/_DuarImb7.js.br +0 -0
  214. package/dist/public/assets/{_9xYWGqfi.js → _DwcoW-IU.js} +1 -1
  215. package/dist/public/assets/_DwcoW-IU.js.br +0 -0
  216. package/dist/public/assets/{_M94yp4jo.js → _DxVt7Zuk.js} +11 -11
  217. package/dist/public/assets/_DxVt7Zuk.js.br +0 -0
  218. package/dist/public/assets/{_B-992FUw.js → _DzrtBP-L.js} +1 -1
  219. package/dist/public/assets/{_CB-I9KUl.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/{_U2n8Yyqy.js → _IWMmnVCy.js} +1 -1
  223. package/dist/public/assets/_IWMmnVCy.js.br +0 -0
  224. package/dist/public/assets/{_BYgxEDpq.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/{_D5yRmwZD.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/{_BlSF31Ck.js → _dr95P55a.js} +1 -1
  234. package/dist/public/assets/_dr95P55a.js.br +0 -0
  235. package/dist/public/assets/{_B7nG9Ktb.js → _eQK3EZCc.js} +1 -1
  236. package/dist/public/assets/_eQK3EZCc.js.br +0 -0
  237. package/dist/public/assets/{_DPIQzOUl.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/{_D93v6VDe.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/{_BS0AEB1V.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/{_buuWf96L.js → _pP1W6w5v.js} +1 -1
  248. package/dist/public/assets/_pP1W6w5v.js.br +0 -0
  249. package/dist/public/assets/{_Bk_g_9Bn.js → _pUYwxsdF.js} +1 -1
  250. package/dist/public/assets/_pUYwxsdF.js.br +0 -0
  251. package/dist/public/assets/{_6FNzwUcm.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/{_BDCQoRmq.js → _s5Jez2mu.js} +1 -1
  256. package/dist/public/assets/_s5Jez2mu.js.br +0 -0
  257. package/dist/public/assets/{_KpWeECPp.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/{_tqD_68em.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/{_CgsPFJZy.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-De3LJVaT.css → icon-folder-DHVc-REl.css} +1 -1
  277. package/dist/public/assets/icon-folder-DHVc-REl.css.br +0 -0
  278. package/dist/public/assets/{icon-search-C6A4IBPq.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-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 +3 -0
  314. package/lib/setup/catalog.mjs +17 -0
  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/_u9qRCTjI.js +0 -2
  321. package/dist/public/assets/_43qHqm_h.js +0 -1
  322. package/dist/public/assets/_4hbCil9D.js +0 -1
  323. package/dist/public/assets/_4hbCil9D.js.br +0 -0
  324. package/dist/public/assets/_69GBvJfT.js +0 -1
  325. package/dist/public/assets/_6FNzwUcm.js.br +0 -0
  326. package/dist/public/assets/_8SWI_CIk.js +0 -1
  327. package/dist/public/assets/_8SWI_CIk.js.br +0 -0
  328. package/dist/public/assets/_9fKCaxLn.js +0 -1
  329. package/dist/public/assets/_9xYWGqfi.js.br +0 -0
  330. package/dist/public/assets/_AKwHRUw2.js +0 -1
  331. package/dist/public/assets/_B29iioj9.js.br +0 -0
  332. package/dist/public/assets/_B3bcGOWb.js +0 -1
  333. package/dist/public/assets/_B3fa8s0p.js +0 -1
  334. package/dist/public/assets/_B6-AgBRx.js +0 -1
  335. package/dist/public/assets/_B6-AgBRx.js.br +0 -0
  336. package/dist/public/assets/_B68mxQgf.js +0 -15
  337. package/dist/public/assets/_B68mxQgf.js.br +0 -0
  338. package/dist/public/assets/_B7lNd0Fe.js +0 -1
  339. package/dist/public/assets/_B7nG9Ktb.js.br +0 -0
  340. package/dist/public/assets/_B9Ukk65G.js.br +0 -0
  341. package/dist/public/assets/_BCTeDxHC.js.br +0 -0
  342. package/dist/public/assets/_BDCQoRmq.js.br +0 -0
  343. package/dist/public/assets/_BHkMvOuI.js.br +0 -0
  344. package/dist/public/assets/_BIul3uoC.js.br +0 -0
  345. package/dist/public/assets/_BJIAaIh4.js.br +0 -5
  346. package/dist/public/assets/_BJk5sqrB.js.br +0 -0
  347. package/dist/public/assets/_BLOE-kpM.js +0 -1
  348. package/dist/public/assets/_BNK4RUnx.js +0 -1
  349. package/dist/public/assets/_BNPo3NaH.js.br +0 -0
  350. package/dist/public/assets/_BPMmLRzt.js +0 -1
  351. package/dist/public/assets/_BQ91qGf-.js +0 -1
  352. package/dist/public/assets/_BS0AEB1V.js.br +0 -0
  353. package/dist/public/assets/_BS66ieXF.js +0 -1
  354. package/dist/public/assets/_BSb0QOJN.js +0 -1
  355. package/dist/public/assets/_BSliyqkf.js.br +0 -0
  356. package/dist/public/assets/_BSydNGAC.js +0 -2
  357. package/dist/public/assets/_BSydNGAC.js.br +0 -0
  358. package/dist/public/assets/_BXU-ZvQb.js.br +0 -0
  359. package/dist/public/assets/_BYHfXvmU.js.br +0 -0
  360. package/dist/public/assets/_BYcB3W24.js +0 -1
  361. package/dist/public/assets/_BYgxEDpq.js.br +0 -0
  362. package/dist/public/assets/_BYi6z1C9.js +0 -1
  363. package/dist/public/assets/_BbM04KlN.js +0 -1
  364. package/dist/public/assets/_Bc5E_ez3.js +0 -1
  365. package/dist/public/assets/_BcWZ_-iA.js +0 -1
  366. package/dist/public/assets/_BkXPpVmm.js +0 -1
  367. package/dist/public/assets/_Bk_g_9Bn.js.br +0 -0
  368. package/dist/public/assets/_BlSF31Ck.js.br +0 -0
  369. package/dist/public/assets/_Bn4xIRpG.js +0 -1
  370. package/dist/public/assets/_BpLwQ1O8.js.br +0 -0
  371. package/dist/public/assets/_BpVNeKi-.js +0 -1
  372. package/dist/public/assets/_BpdpbMex.js +0 -1
  373. package/dist/public/assets/_Bpf0Nyqk.js.br +0 -0
  374. package/dist/public/assets/_BwBNAwDG.js +0 -1
  375. package/dist/public/assets/_BxAKVWw-.js.br +0 -0
  376. package/dist/public/assets/_BxpaVKca.js.br +0 -0
  377. package/dist/public/assets/_ByqDCoAZ.js.br +0 -0
  378. package/dist/public/assets/_Bzg_Rzcf.js +0 -1
  379. package/dist/public/assets/_C-oO7X9P.js.br +0 -0
  380. package/dist/public/assets/_C0KvehwH.js +0 -1
  381. package/dist/public/assets/_C1JRCVnT.js.br +0 -0
  382. package/dist/public/assets/_C2U9mANP.js +0 -1
  383. package/dist/public/assets/_C3E24F_T.js.br +0 -0
  384. package/dist/public/assets/_C4KQv1VW.js.br +0 -0
  385. package/dist/public/assets/_C5MTb3MY.js +0 -1
  386. package/dist/public/assets/_C7ha2DpU.js +0 -1
  387. package/dist/public/assets/_C7ha2DpU.js.br +0 -0
  388. package/dist/public/assets/_CAaW1fUv.js +0 -1
  389. package/dist/public/assets/_CB-I9KUl.js.br +0 -0
  390. package/dist/public/assets/_CEvca0JK.js.br +0 -0
  391. package/dist/public/assets/_CGZs9U_g.js +0 -1
  392. package/dist/public/assets/_CK6p4Zj1.js +0 -1
  393. package/dist/public/assets/_CK6p4Zj1.js.br +0 -0
  394. package/dist/public/assets/_CKwCTsbp.js.br +0 -0
  395. package/dist/public/assets/_CKyRgnW2.js +0 -1
  396. package/dist/public/assets/_CN5iw4cA.js.br +0 -0
  397. package/dist/public/assets/_CPAGQRmF.js +0 -1
  398. package/dist/public/assets/_CPMD0qdL.js.br +0 -0
  399. package/dist/public/assets/_CRi7-Tyh.js +0 -1
  400. package/dist/public/assets/_CU2T7o-W.js +0 -1
  401. package/dist/public/assets/_CVSAwdO1.js +0 -1
  402. package/dist/public/assets/_CZzsPgfD.js +0 -1
  403. package/dist/public/assets/_C_jQehPQ.js +0 -1
  404. package/dist/public/assets/_Ca3bfNZI.js.br +0 -0
  405. package/dist/public/assets/_CdWPIocC.js.br +0 -0
  406. package/dist/public/assets/_CeFqvzt1.js +0 -1
  407. package/dist/public/assets/_CgsPFJZy.js.br +0 -0
  408. package/dist/public/assets/_ClgoCZxV.js +0 -6
  409. package/dist/public/assets/_ClgoCZxV.js.br +0 -0
  410. package/dist/public/assets/_CluEtmrQ.js.br +0 -0
  411. package/dist/public/assets/_Cnl5owe1.js.br +0 -0
  412. package/dist/public/assets/_Cp1dT7ox.js.br +0 -0
  413. package/dist/public/assets/_Cpyx7Ldm.js +0 -1
  414. package/dist/public/assets/_Cq4-AZ6O.js +0 -1
  415. package/dist/public/assets/_CrV4JiE4.js.br +0 -0
  416. package/dist/public/assets/_Csdgg-p8.js +0 -1
  417. package/dist/public/assets/_Csdgg-p8.js.br +0 -0
  418. package/dist/public/assets/_CsicaM6z.js.br +0 -0
  419. package/dist/public/assets/_Ct2VbISZ.js.br +0 -0
  420. package/dist/public/assets/_CtQ-4c6a.js.br +0 -0
  421. package/dist/public/assets/_Cyfdf5Zc.js +0 -1
  422. package/dist/public/assets/_D1qsYd77.js +0 -1
  423. package/dist/public/assets/_D1qsYd77.js.br +0 -0
  424. package/dist/public/assets/_D5yRmwZD.js.br +0 -0
  425. package/dist/public/assets/_D78O__dl.js +0 -1
  426. package/dist/public/assets/_D93v6VDe.js.br +0 -0
  427. package/dist/public/assets/_DDfizRXp.js +0 -1
  428. package/dist/public/assets/_DDfizRXp.js.br +0 -0
  429. package/dist/public/assets/_DFiA_pht.js.br +0 -0
  430. package/dist/public/assets/_DGDsfGXN.js +0 -1
  431. package/dist/public/assets/_DGDsfGXN.js.br +0 -0
  432. package/dist/public/assets/_DJnXBrlD.js.br +0 -0
  433. package/dist/public/assets/_DKiEZYX8.js +0 -1
  434. package/dist/public/assets/_DLEnV6cR.js +0 -1
  435. package/dist/public/assets/_DLJu1hcD.js.br +0 -0
  436. package/dist/public/assets/_DL_rHJtD.js +0 -1
  437. package/dist/public/assets/_DNFF24hk.js +0 -1
  438. package/dist/public/assets/_DNqoI_cd.js.br +0 -0
  439. package/dist/public/assets/_DOLRYXID.js +0 -1
  440. package/dist/public/assets/_DPIQzOUl.js.br +0 -0
  441. package/dist/public/assets/_DQWcu2Z_.js +0 -1
  442. package/dist/public/assets/_DW6AnxDW.js.br +0 -0
  443. package/dist/public/assets/_DWYjkjOA.js +0 -1
  444. package/dist/public/assets/_DXE83VZw.js +0 -1
  445. package/dist/public/assets/_DYBhy6q4.js.br +0 -0
  446. package/dist/public/assets/_DYKZ1zvC.js +0 -1
  447. package/dist/public/assets/_DYbmgf-P.js +0 -1
  448. package/dist/public/assets/_DZD7yzH2.js.br +0 -0
  449. package/dist/public/assets/_DZLJGzpN.js.br +0 -0
  450. package/dist/public/assets/_D_joWBEC.js.br +0 -0
  451. package/dist/public/assets/_D_qiANiM.js +0 -1
  452. package/dist/public/assets/_D_qiANiM.js.br +0 -0
  453. package/dist/public/assets/_DhhUcrza.js +0 -1
  454. package/dist/public/assets/_Dik2fbTK.js +0 -1
  455. package/dist/public/assets/_Dik2fbTK.js.br +0 -0
  456. package/dist/public/assets/_DjGbHRs7.js +0 -1
  457. package/dist/public/assets/_DjdPagIm.js +0 -1
  458. package/dist/public/assets/_Djnp5vRt.js +0 -1
  459. package/dist/public/assets/_DktieTrd.js.br +0 -0
  460. package/dist/public/assets/_Dns259C4.js.br +0 -0
  461. package/dist/public/assets/_Dr2zRKuC.js +0 -1
  462. package/dist/public/assets/_Dtx2usNe.js.br +0 -0
  463. package/dist/public/assets/_DvnFb18d.js +0 -1
  464. package/dist/public/assets/_DvqvHR7_.js.br +0 -0
  465. package/dist/public/assets/_Dy57KGoU.js +0 -1
  466. package/dist/public/assets/_Dy57KGoU.js.br +0 -0
  467. package/dist/public/assets/_FdygZebO.js +0 -1
  468. package/dist/public/assets/_H7TtilBa.js.br +0 -0
  469. package/dist/public/assets/_HwOcVvTN.js +0 -1
  470. package/dist/public/assets/_ICJfUHY2.js +0 -1
  471. package/dist/public/assets/_ItervcuA.js.br +0 -0
  472. package/dist/public/assets/_JGwf6udl.js +0 -1
  473. package/dist/public/assets/_KM7EGl2R.js.br +0 -0
  474. package/dist/public/assets/_KpWeECPp.js.br +0 -0
  475. package/dist/public/assets/_LgS0G0uH.js.br +0 -0
  476. package/dist/public/assets/_M94yp4jo.js.br +0 -0
  477. package/dist/public/assets/_NGfZeYAt.js.br +0 -0
  478. package/dist/public/assets/_QlXMW-cP.js.br +0 -0
  479. package/dist/public/assets/_SHB9zmh2.js.br +0 -0
  480. package/dist/public/assets/_TSA_v82C.js +0 -1
  481. package/dist/public/assets/_TxnhYSE5.js.br +0 -0
  482. package/dist/public/assets/_U2n8Yyqy.js.br +0 -0
  483. package/dist/public/assets/_Vhpht63x.js +0 -1
  484. package/dist/public/assets/_Z9CaLBvo.js +0 -1
  485. package/dist/public/assets/__-FQNLs7.js +0 -1
  486. package/dist/public/assets/__CN8nA63.js +0 -1
  487. package/dist/public/assets/_aAORMS0u.js.br +0 -0
  488. package/dist/public/assets/_buuWf96L.js.br +0 -0
  489. package/dist/public/assets/_cSsv1ZjH.js.br +0 -0
  490. package/dist/public/assets/_gP9nLV2Y.js.br +0 -0
  491. package/dist/public/assets/_i6oi77xC.js.br +0 -0
  492. package/dist/public/assets/_jb3Fwzol.js +0 -1
  493. package/dist/public/assets/_lmVJ3O6t.js +0 -1
  494. package/dist/public/assets/_mloSZbwk.js +0 -1
  495. package/dist/public/assets/_sYOWcsEI.js +0 -1
  496. package/dist/public/assets/_tqD_68em.js.br +0 -0
  497. package/dist/public/assets/_y4SZiKqE.js +0 -1
  498. package/dist/public/assets/_y4SZiKqE.js.br +0 -0
  499. package/dist/public/assets/_zMYJngRw.js +0 -1
  500. package/dist/public/assets/_zTWXKPCk.js +0 -1
  501. package/dist/public/assets/app-shell-BXDHei7B.css +0 -1
  502. package/dist/public/assets/app-shell-BXDHei7B.css.br +0 -0
  503. package/dist/public/assets/files-view-BCnw4-08.js +0 -2
  504. package/dist/public/assets/files-view-Ds4k9TjY.css +0 -1
  505. package/dist/public/assets/files-view-Ds4k9TjY.css.br +0 -0
  506. package/dist/public/assets/group.css.ts-CZcH3cNI.css +0 -1
  507. package/dist/public/assets/group.css.ts-CZcH3cNI.css.br +0 -0
  508. package/dist/public/assets/icon-folder-De3LJVaT.css.br +0 -0
  509. package/dist/public/assets/icon-search-C6A4IBPq.css.br +0 -0
  510. package/dist/public/assets/manage-workspace-B2IJyc-s.js +0 -2
  511. package/dist/public/assets/manage-workspace-BYotHuev.css +0 -1
  512. package/dist/public/assets/modal-view-BY2E8mw2.css.br +0 -0
  513. package/dist/public/assets/new-workspace-9FQTNRn4.css +0 -1
  514. package/dist/public/assets/new-workspace-9FQTNRn4.css.br +0 -0
  515. package/dist/public/assets/new-workspace-B_6v9CYu.js +0 -2
  516. package/dist/public/assets/new-zQDWH4FQ.js +0 -1
  517. package/dist/public/assets/port-chip-V2q_q3UM.css +0 -1
  518. package/dist/public/assets/port-chip-V2q_q3UM.css.br +0 -0
  519. package/dist/public/assets/prompt-dialog-C_kDiYmC.css +0 -1
  520. package/dist/public/assets/prompt-dialog-C_kDiYmC.css.br +0 -0
  521. package/dist/public/assets/quick-open-IkoNJ7wT.css +0 -1
  522. package/dist/public/assets/quick-open-IkoNJ7wT.css.br +0 -0
  523. package/dist/public/assets/repo-picker-CMHPjNaZ.css +0 -1
  524. package/dist/public/assets/repo-picker-CMHPjNaZ.css.br +0 -0
  525. package/dist/public/assets/review-view-CqIbovDm.css +0 -1
  526. package/dist/public/assets/review-view-CqIbovDm.css.br +0 -0
  527. package/dist/public/assets/review-view-DJ3TxEP8.js +0 -2
  528. package/dist/public/assets/section-Bjoist2N.css +0 -1
  529. package/dist/public/assets/section-Bjoist2N.css.br +0 -0
  530. package/dist/public/assets/settings-page-CA4M6Hig.css +0 -1
  531. package/dist/public/assets/settings-page-CA4M6Hig.css.br +0 -0
  532. package/dist/public/assets/settings-page-Gf4hmpSr.js +0 -2
  533. package/dist/public/assets/settings-zQDWH4FQ.js +0 -1
  534. package/dist/public/assets/skill-row-y-AJuVyg.css +0 -1
  535. package/dist/public/assets/sso-auth-DCSrkI2L.css +0 -1
  536. package/dist/public/assets/sso-auth-DCSrkI2L.css.br +0 -0
  537. package/dist/public/assets/w-zQDWH4FQ.js +0 -1
  538. package/dist/public/assets/w._-B47BqhrV.js +0 -1
  539. package/dist/public/assets/w._-D0upu6g5.js +0 -1
  540. package/dist/public/assets/w._-zQDWH4FQ.js +0 -1
@@ -4,11 +4,22 @@ import { t as require_safe_buffer } from "./_BmSjjJ2E.js";
4
4
  import fs from "node:fs";
5
5
  import path from "node:path";
6
6
  import { execFile, execFileSync } from "node:child_process";
7
+ import fs$1 from "node:fs/promises";
7
8
  import os from "node:os";
8
9
  import { promisify } from "node:util";
9
10
  import { DatabaseSync } from "node:sqlite";
10
11
  import { createHash } from "node:crypto";
11
12
  //#region src/server/http.ts
13
+ /** Who may frame the app's own responses: the app alone (the review's PDF
14
+ * preview). A page elsewhere that frames it can dress a click on it as a
15
+ * click on something of its own. A route that sends a
16
+ * Content-Security-Policy of its own replaces this one, so it names
17
+ * `FRAME_ANCESTORS` too. */
18
+ var FRAME_ANCESTORS = "frame-ancestors 'self'";
19
+ var FRAME_HEADERS = {
20
+ "content-security-policy": FRAME_ANCESTORS,
21
+ "x-frame-options": "SAMEORIGIN"
22
+ };
12
23
  /** Error whose `status` the API error-boundary middleware uses for the response. */
13
24
  function httpError(status, message) {
14
25
  return Object.assign(new Error(message), { status });
@@ -25,6 +36,96 @@ async function readBody(ctx) {
25
36
  return checked(await ctx.body, "request body");
26
37
  }
27
38
  //#endregion
39
+ //#region src/server/cache.ts
40
+ /** Keyed stale-while-revalidate cache: a cached value is served immediately
41
+ * (revalidating in the background when older than `ttlMs`); loads are deduped
42
+ * per key, and `refresh` bypasses both the cache and any in-flight load. */
43
+ function swr(ttlMs, load, seed) {
44
+ const cache = /* @__PURE__ */ new Map();
45
+ const inflight = /* @__PURE__ */ new Map();
46
+ function start(key, refresh) {
47
+ const startedAt = Date.now();
48
+ const promise = load(key, refresh).then((value) => {
49
+ const existing = cache.get(key);
50
+ if (!existing || existing.at <= startedAt) cache.set(key, {
51
+ at: Date.now(),
52
+ value
53
+ });
54
+ return value;
55
+ }).finally(() => {
56
+ if (inflight.get(key)?.promise === promise) inflight.delete(key);
57
+ });
58
+ inflight.set(key, {
59
+ promise,
60
+ refresh
61
+ });
62
+ return promise;
63
+ }
64
+ const read = (key, refresh = false) => {
65
+ if (refresh) {
66
+ const current = inflight.get(key);
67
+ return current?.refresh ? current.promise : start(key, true);
68
+ }
69
+ let cached = cache.get(key);
70
+ if (!cached && seed) {
71
+ cached = seed(key);
72
+ if (cached) cache.set(key, cached);
73
+ }
74
+ if (cached) {
75
+ if (Date.now() - cached.at >= ttlMs && !inflight.has(key)) start(key, false).catch(() => {});
76
+ return Promise.resolve(cached.value);
77
+ }
78
+ return inflight.get(key)?.promise ?? start(key, false);
79
+ };
80
+ /** Inject an externally fetched value (e.g. from a batched load). */
81
+ read.set = (key, value) => {
82
+ cache.set(key, {
83
+ at: Date.now(),
84
+ value
85
+ });
86
+ };
87
+ /** Current cached value, if any — used when a batch update must merge
88
+ * with a richer per-key load rather than replace it. */
89
+ read.get = (key) => cache.get(key)?.value;
90
+ return read;
91
+ }
92
+ /** Serialize async work per key: calls for one key run in submission order,
93
+ * each starting only after the previous settled. The stored tail is the
94
+ * all-settled form, so a rejection neither blocks the next caller nor leaves
95
+ * the entry behind — the map holds only keys with work still in flight. */
96
+ var locks = /* @__PURE__ */ new Map();
97
+ function withLock(key, fn) {
98
+ const run = (locks.get(key) ?? Promise.resolve()).then(fn);
99
+ const tail = run.then(() => {}, () => {});
100
+ locks.set(key, tail);
101
+ tail.then(() => {
102
+ if (locks.get(key) === tail) locks.delete(key);
103
+ });
104
+ return run;
105
+ }
106
+ /** One load at a time, and a short reuse window: callers join the in-flight
107
+ * load, and a result younger than `ttlMs` is served without one. For an
108
+ * expensive process sweep (lsof, ps, list-panes) whose answer does not
109
+ * change within the window — `ttlMs` of 0 still collapses concurrent
110
+ * callers onto a single spawn. */
111
+ function shared(fn, ttlMs) {
112
+ let inflight = null;
113
+ let last = null;
114
+ return () => {
115
+ if (last && Date.now() - last.at < ttlMs) return Promise.resolve(last.value);
116
+ if (!inflight) inflight = fn().then((value) => {
117
+ last = {
118
+ at: Date.now(),
119
+ value
120
+ };
121
+ return value;
122
+ }).finally(() => {
123
+ inflight = null;
124
+ });
125
+ return inflight;
126
+ };
127
+ }
128
+ //#endregion
28
129
  //#region lib/setup/listen.mjs
29
130
  /** Addresses that mean every interface. */
30
131
  var EVERY = /* @__PURE__ */ new Set([
@@ -66,8 +167,9 @@ var config = {
66
167
  appPort: Number(process.env.WORK_APP_PORT || 7171),
67
168
  /** How a workspace port is named in a hostname the app proxies
68
169
  * (server/port-proxy.ts): `sub` is `3000.work.example.com`, `dash` is
69
- * `3000-work.example.com`. The server accepts both; this only picks
70
- * which one the port chips link to. `dash` stays one label under the
170
+ * `3000-work.example.com`. The port chips link to this one; the server
171
+ * takes `sub` either way, and `dash` only when it is picked
172
+ * (server/access.ts `dashPortName`). `dash` stays one label under the
71
173
  * zone, which is what a free Cloudflare certificate covers. */
72
174
  portHosts: process.env.WORK_PORT_HOSTS === "dash" ? "dash" : "sub",
73
175
  /** The address the server listens on: this machine only, unless set
@@ -92,6 +194,11 @@ function list(value) {
92
194
  return (value || "").split(",").map((s) => s.trim()).filter(Boolean);
93
195
  }
94
196
  fs.mkdirSync(config.dataDir, { recursive: true });
197
+ try {
198
+ fs.chmodSync(config.dataDir, 448);
199
+ } catch (err) {
200
+ console.warn(`[work] could not make ${config.dataDir} private: ${err.message}`);
201
+ }
95
202
  //#endregion
96
203
  //#region src/server/exec.ts
97
204
  /** Dedicated tmux server so we never touch another multiplexer's or the
@@ -131,21 +238,25 @@ var GIT_NETWORK_MS = {
131
238
  push: 3e5,
132
239
  "ls-remote": 6e4
133
240
  };
134
- /** Never let git wait on a terminal it doesn't have — a missing credential
135
- * fails with a message instead of hanging the clone forever. Optional
136
- * locks are off because most of what runs here is a background probe (the
137
- * review's stamp poll, Files, the language servers' change feed): a
138
- * `git status` refreshing the index holds `index.lock`, and an agent's
139
- * `git commit` or rebase step landing in that moment fails on it. */
241
+ /** What every git process work starts runs with, `extra` on top: `git`
242
+ * below, and the diff's streaming reads, which spawn their own. Never let
243
+ * git wait on a terminal it doesn't have — a missing credential fails with
244
+ * a message instead of hanging the clone forever. Optional locks are off
245
+ * because most of what runs here is a background probe (the review's
246
+ * stamp poll, Files, the language servers' change feed): a `git status`
247
+ * refreshing the index holds `index.lock`, and an agent's `git commit` or
248
+ * rebase step landing in that moment fails on it. */
249
+ var gitEnv = (extra) => ({
250
+ ...process.env,
251
+ GIT_TERMINAL_PROMPT: "0",
252
+ GIT_OPTIONAL_LOCKS: "0",
253
+ ...extra
254
+ });
140
255
  var git = async (args, cwd) => {
141
256
  const verb = args.find((a) => !a.startsWith("-")) ?? "";
142
257
  const timeoutMs = GIT_NETWORK_MS[verb];
143
258
  try {
144
- return await run$1("git", args, cwd, {
145
- ...process.env,
146
- GIT_TERMINAL_PROMPT: "0",
147
- GIT_OPTIONAL_LOCKS: "0"
148
- }, timeoutMs ? { timeoutMs } : void 0);
259
+ return await run$1("git", args, cwd, gitEnv(), timeoutMs ? { timeoutMs } : void 0);
149
260
  } catch (err) {
150
261
  if (timeoutMs && err.killed) throw new Error(`git ${verb} timed out after ${Math.round(timeoutMs / 1e3)}s`);
151
262
  throw err;
@@ -229,6 +340,7 @@ function get(sql, ...params) {
229
340
  function workspacePath(id) {
230
341
  return get("SELECT path FROM workspaces WHERE id = ?", id)?.path;
231
342
  }
343
+ var fresh = !db.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table'").get();
232
344
  var freshReview = !db.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'review_comments'").get();
233
345
  db.exec(`
234
346
  PRAGMA journal_mode = WAL;
@@ -290,8 +402,7 @@ db.exec(`
290
402
  );
291
403
 
292
404
  -- Viewed marks (server/viewed.ts): a file of a branch, and its change
293
- -- as it was when marked. Keep in sync with scripts/migrate.mjs, which
294
- -- creates it too.
405
+ -- as it was when marked.
295
406
  CREATE TABLE IF NOT EXISTS review_marks (
296
407
  workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
297
408
  worktree TEXT NOT NULL,
@@ -313,6 +424,7 @@ ensureColumn("review_comments", "snippet", "TEXT");
313
424
  ensureColumn("workspaces", "materialized", "INTEGER NOT NULL DEFAULT 1");
314
425
  ensureColumn("workspaces", "origin_branch", "TEXT");
315
426
  ensureColumn("workspaces", "imported_at", "TEXT");
427
+ if (fresh) db.exec("PRAGMA user_version = 1");
316
428
  //#endregion
317
429
  //#region src/client/pref-change.ts
318
430
  /** The stored text after `change`, or null when nothing is left. A value
@@ -642,6 +754,18 @@ var DEFAULT_GITHUB_HOST = "github.com";
642
754
  function toolById(id) {
643
755
  return TOOLS.find((t) => t.id === id) || PROJECT_TOOLS.find((t) => t.id === id) || null;
644
756
  }
757
+ /** A version that is only a version (`latest`, `lts`, `22`, `1.2.3-rc.1`),
758
+ * not one of mise's forms that build from a git ref or point at a path
759
+ * (`ref:`, `path:`, `prefix:`). */
760
+ var PLAIN_VERSION = /^(?!-)[\w.+-]+$/;
761
+ /** Whether a mise pin is one of the tools above, as they install, at a
762
+ * plain version: what a restore takes without asking. Any other name —
763
+ * a registry tool the catalog does not list, a backend (`npm:`, `ubi:`,
764
+ * `github:`, `cargo:`, `go:`, `pipx:` …), a URL — installs and runs
765
+ * whatever it names, so a restore takes it only when it is named. */
766
+ function catalogPin(name, version) {
767
+ return [...TOOLS, ...PROJECT_TOOLS].some((t) => t.mise === name) && PLAIN_VERSION.test(version);
768
+ }
645
769
  function agentById(id) {
646
770
  return AGENTS$1.find((a) => a.id === id) || null;
647
771
  }
@@ -711,8 +835,9 @@ function setupDirs() {
711
835
  };
712
836
  return dirsFor.dirs;
713
837
  }
714
- /** `~/…` for anything under the home directory — every path here is for
715
- * display (Settings rows, `work doctor`), never re-used to exec. */
838
+ /** `~/…` for anything under the home directory — every path given it is
839
+ * for display (Settings rows, `work doctor`, a language server's
840
+ * definition outside every checkout), never re-used to exec. */
716
841
  function tilde(p) {
717
842
  if (!p) return p;
718
843
  return p === home ? "~" : p.startsWith(home + path.sep) ? "~" + p.slice(home.length) : p;
@@ -1106,96 +1231,6 @@ function preferredAgent(enabled = enabledAgents()) {
1106
1231
  return enabled[0] || "shell";
1107
1232
  }
1108
1233
  //#endregion
1109
- //#region src/server/cache.ts
1110
- /** Keyed stale-while-revalidate cache: a cached value is served immediately
1111
- * (revalidating in the background when older than `ttlMs`); loads are deduped
1112
- * per key, and `refresh` bypasses both the cache and any in-flight load. */
1113
- function swr(ttlMs, load, seed) {
1114
- const cache = /* @__PURE__ */ new Map();
1115
- const inflight = /* @__PURE__ */ new Map();
1116
- function start(key, refresh) {
1117
- const startedAt = Date.now();
1118
- const promise = load(key, refresh).then((value) => {
1119
- const existing = cache.get(key);
1120
- if (!existing || existing.at <= startedAt) cache.set(key, {
1121
- at: Date.now(),
1122
- value
1123
- });
1124
- return value;
1125
- }).finally(() => {
1126
- if (inflight.get(key)?.promise === promise) inflight.delete(key);
1127
- });
1128
- inflight.set(key, {
1129
- promise,
1130
- refresh
1131
- });
1132
- return promise;
1133
- }
1134
- const read = (key, refresh = false) => {
1135
- if (refresh) {
1136
- const current = inflight.get(key);
1137
- return current?.refresh ? current.promise : start(key, true);
1138
- }
1139
- let cached = cache.get(key);
1140
- if (!cached && seed) {
1141
- cached = seed(key);
1142
- if (cached) cache.set(key, cached);
1143
- }
1144
- if (cached) {
1145
- if (Date.now() - cached.at >= ttlMs && !inflight.has(key)) start(key, false).catch(() => {});
1146
- return Promise.resolve(cached.value);
1147
- }
1148
- return inflight.get(key)?.promise ?? start(key, false);
1149
- };
1150
- /** Inject an externally fetched value (e.g. from a batched load). */
1151
- read.set = (key, value) => {
1152
- cache.set(key, {
1153
- at: Date.now(),
1154
- value
1155
- });
1156
- };
1157
- /** Current cached value, if any — used when a batch update must merge
1158
- * with a richer per-key load rather than replace it. */
1159
- read.get = (key) => cache.get(key)?.value;
1160
- return read;
1161
- }
1162
- /** Serialize async work per key: calls for one key run in submission order,
1163
- * each starting only after the previous settled. The stored tail is the
1164
- * all-settled form, so a rejection neither blocks the next caller nor leaves
1165
- * the entry behind — the map holds only keys with work still in flight. */
1166
- var locks = /* @__PURE__ */ new Map();
1167
- function withLock(key, fn) {
1168
- const run = (locks.get(key) ?? Promise.resolve()).then(fn);
1169
- const tail = run.then(() => {}, () => {});
1170
- locks.set(key, tail);
1171
- tail.then(() => {
1172
- if (locks.get(key) === tail) locks.delete(key);
1173
- });
1174
- return run;
1175
- }
1176
- /** One load at a time, and a short reuse window: callers join the in-flight
1177
- * load, and a result younger than `ttlMs` is served without one. For an
1178
- * expensive process sweep (lsof, ps, list-panes) whose answer does not
1179
- * change within the window — `ttlMs` of 0 still collapses concurrent
1180
- * callers onto a single spawn. */
1181
- function shared(fn, ttlMs) {
1182
- let inflight = null;
1183
- let last = null;
1184
- return () => {
1185
- if (last && Date.now() - last.at < ttlMs) return Promise.resolve(last.value);
1186
- if (!inflight) inflight = fn().then((value) => {
1187
- last = {
1188
- at: Date.now(),
1189
- value
1190
- };
1191
- return value;
1192
- }).finally(() => {
1193
- inflight = null;
1194
- });
1195
- return inflight;
1196
- };
1197
- }
1198
- //#endregion
1199
1234
  //#region src/server/events.ts
1200
1235
  var listeners$1 = /* @__PURE__ */ new Set();
1201
1236
  function publish(type, data) {
@@ -1219,7 +1254,7 @@ function subscribe(listener) {
1219
1254
  listeners$1.add(listener);
1220
1255
  return () => listeners$1.delete(listener);
1221
1256
  }
1222
- /** Connected SSE clients — lets background watchers idle when no one
1257
+ /** Connected events-bus clients — lets background watchers idle when no one
1223
1258
  * is listening. */
1224
1259
  function subscriberCount() {
1225
1260
  return listeners$1.size;
@@ -7177,7 +7212,7 @@ var background = /* @__PURE__ */ new Map();
7177
7212
  /** A turn's end is pushed once it has stayed ended this long. Stop fires
7178
7213
  * again each time something sends the agent back to work (a stop hook
7179
7214
  * that continues it, a goal loop, background subagents reporting in), and
7180
- * each of those ends was a "Finished" on the phone while it carried on. */
7215
+ * each of those ends would be a "Finished" on the phone while it carries on. */
7181
7216
  var DONE_SETTLE_MS = 3e3;
7182
7217
  var listeners = /* @__PURE__ */ new Set();
7183
7218
  /** Called on every phase transition (the status snapshot drops itself). */
@@ -7350,7 +7385,7 @@ function publishChange(sessionId) {
7350
7385
  const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
7351
7386
  if (row?.workspace_id) {
7352
7387
  const workspaceId = row.workspace_id;
7353
- import("./_u9qRCTjI.js").then((m) => m.notifySessionsChanged(workspaceId));
7388
+ import("./_LF2Fo5WE.js").then((m) => m.notifySessionsChanged(workspaceId));
7354
7389
  return;
7355
7390
  }
7356
7391
  publish("sessions.changed");
@@ -7760,10 +7795,10 @@ async function fetchUsage$3(account) {
7760
7795
  var PROFILE_TTL_MS = 36e5;
7761
7796
  var profiles = /* @__PURE__ */ new Map();
7762
7797
  /** The account's plan as Anthropic has it now. `.claude.json` holds what
7763
- * Claude Code saw at sign-in, and it only asks again on a new login, so an
7764
- * upgrade (Max 5x → 20x) kept reading as the old plan until then. Asked
7765
- * with the same token as the usage; the cached plan stands in when it
7766
- * cannot be. */
7798
+ * Claude Code saw at sign-in, and it only asks again on a new login, so
7799
+ * from it alone an upgrade (Max 5x → 20x) reads as the old plan until
7800
+ * then. Asked with the same token as the usage; the cached plan stands in
7801
+ * when it cannot be. */
7767
7802
  async function livePlan(account) {
7768
7803
  const hit = profiles.get(account.dir);
7769
7804
  if (hit && Date.now() - hit.at < PROFILE_TTL_MS) return hit.plan;
@@ -8664,6 +8699,47 @@ var cursor = {
8664
8699
  usage: () => cursorRow().then((row) => [row])
8665
8700
  };
8666
8701
  //#endregion
8702
+ //#region src/server/paths.ts
8703
+ /** Whether `target` is `root` or somewhere under it, by name alone. Both
8704
+ * are normalised first, so `..` and a trailing slash count as the
8705
+ * filesystem would count them, and the separator after `root` is the
8706
+ * whole point: a sibling `…/work-2` is not in `…/work`. A relative
8707
+ * `target` is in nothing — an empty one is a process cwd that could not
8708
+ * be read, not the root. A symlink under `root` can still lead out: what
8709
+ * is read through one wants `realInside`. */
8710
+ function inside(target, root) {
8711
+ if (!path.isAbsolute(target)) return false;
8712
+ const top = path.resolve(root);
8713
+ const full = path.resolve(target);
8714
+ return full === top || full.startsWith(top.endsWith(path.sep) ? top : top + path.sep);
8715
+ }
8716
+ /** Where `file` — named from `root`, as git and the pages name a
8717
+ * checkout's files, or absolute — really leads through every symlink,
8718
+ * when that is still `root` or under it; null when it leads out or is not
8719
+ * there. The check by name alone lets a symlink in a repo, which a branch
8720
+ * can add, point a read at any file on the machine. */
8721
+ async function realInside(file, root) {
8722
+ const full = path.resolve(root, file);
8723
+ if (!inside(full, root)) return null;
8724
+ try {
8725
+ const [top, real] = await Promise.all([fs$1.realpath(root), fs$1.realpath(full)]);
8726
+ return inside(real, top) ? real : null;
8727
+ } catch {
8728
+ return null;
8729
+ }
8730
+ }
8731
+ /** `realInside` for a caller that cannot wait. */
8732
+ function realInsideSync(file, root) {
8733
+ const full = path.resolve(root, file);
8734
+ if (!inside(full, root)) return null;
8735
+ try {
8736
+ const real = fs.realpathSync(full);
8737
+ return inside(real, fs.realpathSync(root)) ? real : null;
8738
+ } catch {
8739
+ return null;
8740
+ }
8741
+ }
8742
+ //#endregion
8667
8743
  //#region src/agents/grok/usage.ts
8668
8744
  var AUTH = path.join(HOME, ".grok", "auth.json");
8669
8745
  var LOG = path.join(HOME, ".grok", "logs", "unified.jsonl");
@@ -8836,7 +8912,7 @@ function scratch() {
8836
8912
  return os.tmpdir();
8837
8913
  }
8838
8914
  })();
8839
- return hookFile().startsWith(tmp + path.sep);
8915
+ return inside(hookFile(), tmp);
8840
8916
  }
8841
8917
  /** Whether Grok's hook registry names work's hook file — without it Grok
8842
8918
  * reports nothing and the screen has to speak for it. Read from disk, not
@@ -9364,10 +9440,10 @@ function tmuxWasStarted(id) {
9364
9440
  function clearTmuxStarted(id) {
9365
9441
  tmuxStarted.delete(id);
9366
9442
  }
9367
- /** SSE payload: session rows + live tmux/hook state so clients don't refetch.
9368
- * Coalesced per workspace: a turn boundary lands as a burst of phase
9369
- * transitions (hook, then scrape), and each one cost a list-panes spawn
9370
- * and a broadcast for a list that came out the same. */
9443
+ /** Events-bus payload: session rows + live tmux/hook state so clients
9444
+ * don't refetch. Coalesced per workspace: a turn boundary lands as a burst
9445
+ * of phase transitions (hook, then scrape), and each one cost a list-panes
9446
+ * spawn and a broadcast for a list that came out the same. */
9371
9447
  var EMIT_DEBOUNCE_MS = 50;
9372
9448
  var pendingEmits = /* @__PURE__ */ new Map();
9373
9449
  function notifySessionsChanged(workspaceId) {
@@ -9394,8 +9470,14 @@ async function emitSessionsChanged(workspaceId) {
9394
9470
  async function killWorkspaceSessions(workspaceId) {
9395
9471
  for (const session of listSessions(workspaceId)) await killSession(session.id);
9396
9472
  }
9473
+ /** Control characters a paste never means: C0 but tab and line breaks,
9474
+ * ESC, DEL and C1. The text can quote a reviewed file, which is repo
9475
+ * content, and an ESC in it can end the bracketed paste early on a tmux
9476
+ * that passes one through, typing the rest into the pane as keys. */
9477
+ var PASTE_UNSAFE = /[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]/g;
9397
9478
  /** Type text into a session's tmux (bracketed paste + Enter), creating it if needed. */
9398
- async function sendToSession(id, text, size) {
9479
+ async function sendToSession(id, raw, size) {
9480
+ const text = raw.replace(PASTE_UNSAFE, "");
9399
9481
  const session = getSession(id);
9400
9482
  if (!session) throw new Error("unknown session");
9401
9483
  const wsPath = workspacePath(session.workspace_id);
@@ -9573,68 +9655,71 @@ async function ensureTmuxServer() {
9573
9655
  ], os.homedir()).catch(() => {});
9574
9656
  }
9575
9657
  /** Full tmux command (options + new-session) for creating/attaching a
9576
- * session's tmux; `mode` is "-d" (create detached) or "-A" (attach-or-create). */
9658
+ * session's tmux; `mode` is "-d" (create detached) or "-A" (attach-or-create).
9659
+ * Every `set-option` is `-q`: one failed command drops the rest of a `;`
9660
+ * chain, new-session included, and a tmux older than an option
9661
+ * (`fill-character`, `extended-keys-format`) rejects its name. */
9577
9662
  function newSessionArgs(session, wsPath, mode, initialPrompt, size) {
9578
9663
  return [
9579
9664
  "start-server",
9580
9665
  ";",
9581
9666
  "set-option",
9582
- "-g",
9667
+ "-gq",
9583
9668
  "status",
9584
9669
  "off",
9585
9670
  ";",
9586
9671
  "set-option",
9587
- "-g",
9672
+ "-gq",
9588
9673
  "mouse",
9589
9674
  "on",
9590
9675
  ";",
9591
9676
  "set-option",
9592
- "-g",
9677
+ "-gq",
9593
9678
  "history-limit",
9594
9679
  "5000",
9595
9680
  ";",
9596
9681
  "set-option",
9597
- "-g",
9682
+ "-gq",
9598
9683
  "fill-character",
9599
9684
  " ",
9600
9685
  ";",
9601
9686
  "set-option",
9602
- "-s",
9687
+ "-sq",
9603
9688
  "set-clipboard",
9604
9689
  "on",
9605
9690
  ";",
9606
9691
  "set-option",
9607
- "-g",
9692
+ "-gq",
9608
9693
  "focus-events",
9609
9694
  "on",
9610
9695
  ";",
9611
9696
  "set-option",
9612
- "-s",
9697
+ "-sq",
9613
9698
  "extended-keys",
9614
9699
  "on",
9615
9700
  ";",
9616
9701
  "set-option",
9617
- "-s",
9702
+ "-sq",
9618
9703
  "extended-keys-format",
9619
9704
  "csi-u",
9620
9705
  ";",
9621
9706
  "set-option",
9622
- "-s",
9707
+ "-sq",
9623
9708
  "terminal-features[100]",
9624
9709
  "*:hyperlinks",
9625
9710
  ";",
9626
9711
  "set-option",
9627
- "-s",
9712
+ "-sq",
9628
9713
  "terminal-features[101]",
9629
9714
  "*:clipboard",
9630
9715
  ";",
9631
9716
  "set-option",
9632
- "-s",
9717
+ "-sq",
9633
9718
  "terminal-features[102]",
9634
9719
  "*:sync:RGB",
9635
9720
  ";",
9636
9721
  "set-option",
9637
- "-s",
9722
+ "-sq",
9638
9723
  "terminal-features[103]",
9639
9724
  "*:sixel",
9640
9725
  ";",
@@ -9825,4 +9910,4 @@ function sleep(ms) {
9825
9910
  return new Promise((resolve) => setTimeout(resolve, ms));
9826
9911
  }
9827
9912
  //#endregion
9828
- export { publish as $, noteBackground as A, agentLabel$1 as At, agentLabel as B, run$1 as Bt, readHookPayload as C, miseVersions as Ct, clearAgentPhase as D, PROJECT_TOOLS as Dt, agentPhase as E, DEFAULT_GITHUB_HOST as Et, setSessionViewers as F, get as Ft, manifest as G, readBody as Gt, ACCENT_RE as H, config as Ht, settleQuietWorking as I, workspacePath as It, deleteSubscription as J, normalizeAccent as K, agentBadge as L, TMUX_SOCKET as Lt, onPhaseChange as M, applyPrefChange as Mt, setAgentPhase as N, all as Nt, hookPhase as O, TOOLS as Ot, setScrapedPhase as P, db as Pt, validSubscription as Q, agentFamily as R, gh as Rt, AGENTS as S, miseInstalls as St, blankRow as T, which as Tt, getInstance as U, checked as Ut, agentMeta as V, tmux as Vt, iconSvg as W, httpError as Wt, saveSubscription as X, pushPublicKey as Y, sendPush as Z, renameSession as _, setPref as _t, ensureTmuxServer as a, withLock as at, tmuxName as b, doctor as bt, killSession as c, agentChoices as ct, listPanesWithin as d, deleteWorkspacePrefs as dt, publishJson as et, listSessions as f, disabledAgents as ft, panePids as g, setDisabledAgents as gt, notifySessionsChanged as h, preferredAgent as ht, disposeSessions as i, swr as it, noteUserAnswered as j, toolById as jt, hookReportedAt as k, agentById as kt, killWorkspaceSessions as l, allPrefs as lt, newSessionArgs as m, getSetting as mt, clearTmuxStarted as n, subscriberCount as nt, forgetPanes as o, PREF_MAX as ot, markTmuxStarted as p, enabledAgents as pt, setInstance as q, createSession as r, shared as rt, getSession as s, WORKSPACE_PREFS as st, cleanEnv as t, subscribe as tt, listPanes as u, changePref as ut, sendToSession as v, setSetting as vt, reportsWorking as w, setupPath as wt, tmuxWasStarted as x, ghKnownHosts as xt, sessionStates as y, discoverAgents as yt, agentFromCommand as z, git as zt };
9913
+ export { saveSubscription as $, readBody as $t, clearAgentPhase as A, agentById as At, agentBadge as B, gh as Bt, readHookPayload as C, miseVersions as Ct, realInsideSync as D, DEFAULT_GITHUB_HOST as Dt, realInside as E, which as Et, onPhaseChange as F, all as Ft, ACCENT_RE as G, config as Gt, agentFromCommand as H, gitEnv as Ht, setAgentPhase as I, db as It, manifest as J, withLock as Jt, getInstance as K, shared as Kt, setScrapedPhase as L, get as Lt, hookReportedAt as M, catalogPin as Mt, noteBackground as N, toolById as Nt, blankRow as O, PROJECT_TOOLS as Ot, noteUserAnswered as P, applyPrefChange as Pt, pushPublicKey as Q, httpError as Qt, setSessionViewers as R, workspacePath as Rt, AGENTS as S, miseInstalls as St, inside as T, tilde as Tt, agentLabel as U, run$1 as Ut, agentFamily as V, git as Vt, agentMeta as W, tmux as Wt, setInstance as X, FRAME_HEADERS as Xt, normalizeAccent as Y, FRAME_ANCESTORS as Yt, deleteSubscription as Z, checked as Zt, renameSession as _, setPref as _t, ensureTmuxServer as a, subscriberCount as at, tmuxName as b, doctor as bt, killSession as c, agentChoices as ct, listPanesWithin as d, deleteWorkspacePrefs as dt, sendPush as et, listSessions as f, disabledAgents as ft, panePids as g, setDisabledAgents as gt, notifySessionsChanged as h, preferredAgent as ht, disposeSessions as i, subscribe as it, hookPhase as j, agentLabel$1 as jt, agentPhase as k, TOOLS as kt, killWorkspaceSessions as l, allPrefs as lt, newSessionArgs as m, getSetting as mt, clearTmuxStarted as n, publish as nt, forgetPanes as o, PREF_MAX as ot, markTmuxStarted as p, enabledAgents as pt, iconSvg as q, swr as qt, createSession as r, publishJson as rt, getSession as s, WORKSPACE_PREFS as st, cleanEnv as t, validSubscription as tt, listPanes as u, changePref as ut, sendToSession as v, setSetting as vt, reportsWorking as w, setupPath as wt, tmuxWasStarted as x, ghKnownHosts as xt, sessionStates as y, discoverAgents as yt, settleQuietWorking as z, TMUX_SOCKET as zt };
@@ -0,0 +1,2 @@
1
+ import { h as notifySessionsChanged } from "./_CpANOzpd.js";
2
+ export { notifySessionsChanged };