@dylanpiercey/work 0.2.68 → 0.2.70

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 (493) hide show
  1. package/bin/cli/topic.mjs +374 -23
  2. package/dist/_B25P__C4.js +2 -0
  3. package/dist/{_iwl-plYP.js → _COL0wji1.js} +113 -113
  4. package/dist/{_D3vayu01.js → _CSFzm8Kj.js} +1 -1
  5. package/dist/{_KNWFiRfu.js → _DK0sGNuL.js} +341 -17
  6. package/dist/_wbrwjNyW.js +2 -0
  7. package/dist/index.mjs +906 -868
  8. package/dist/public/assets/{_wvT-w49n.js → _0NYkT7Ka.js} +1 -1
  9. package/dist/public/assets/_0NYkT7Ka.js.br +0 -0
  10. package/dist/public/assets/_18ckOF7L.js +1 -0
  11. package/dist/public/assets/_25qbKqTG.js +1 -0
  12. package/dist/public/assets/{_CcA9L8Uv.js → _6R8pHfHu.js} +1 -1
  13. package/dist/public/assets/_6R8pHfHu.js.br +0 -0
  14. package/dist/public/assets/_8cC5eK8l.js +1 -0
  15. package/dist/public/assets/_8eN6y624.js +1 -0
  16. package/dist/public/assets/_8eN6y624.js.br +0 -0
  17. package/dist/public/assets/_9-vCfD1H.js +1 -0
  18. package/dist/public/assets/_9PSE1hBd.js +1 -0
  19. package/dist/public/assets/{_BpXuBLlJ.js → _B-ItC5A4.js} +1 -1
  20. package/dist/public/assets/_B-ItC5A4.js.br +0 -0
  21. package/dist/public/assets/{_Dr-IU6HK.js → _B-IuONfT.js} +5 -5
  22. package/dist/public/assets/_B-IuONfT.js.br +0 -0
  23. package/dist/public/assets/_B-Nak9W-.js +1 -0
  24. package/dist/public/assets/_B-Nak9W-.js.br +0 -0
  25. package/dist/public/assets/_B0vuJGqQ.js +1 -0
  26. package/dist/public/assets/{_BKxZiX8Y.js → _B24stjuF.js} +5 -5
  27. package/dist/public/assets/_B24stjuF.js.br +0 -0
  28. package/dist/public/assets/_B2HaD9d5.js +1 -0
  29. package/dist/public/assets/{_CDUHEtRr.js → _B3B2tRvZ.js} +1 -1
  30. package/dist/public/assets/_B3B2tRvZ.js.br +0 -0
  31. package/dist/public/assets/_B4oiI3_4.js +1 -0
  32. package/dist/public/assets/_B5CpgKE4.js +1 -0
  33. package/dist/public/assets/_B7Rpwq9e.js +1 -0
  34. package/dist/public/assets/{_Cv3jQpwd.js → _B7THbxch.js} +1 -1
  35. package/dist/public/assets/_B7THbxch.js.br +0 -0
  36. package/dist/public/assets/{_CHyLG_jb.js → _B9BZLh7B.js} +1 -1
  37. package/dist/public/assets/_B9BZLh7B.js.br +0 -0
  38. package/dist/public/assets/{_Cd0WqXuH.js → _B9_Lal-7.js} +1 -1
  39. package/dist/public/assets/_B9_Lal-7.js.br +0 -0
  40. package/dist/public/assets/{_CWUZ37Z2.js → _BC-QJfsn.js} +1 -1
  41. package/dist/public/assets/_BC-QJfsn.js.br +0 -0
  42. package/dist/public/assets/{_Cn1d1sxS.js → _BC1pxNUd.js} +1 -1
  43. package/dist/public/assets/_BC1pxNUd.js.br +0 -0
  44. package/dist/public/assets/{_BWcGdDBZ.js → _BC7rcYFE.js} +1 -1
  45. package/dist/public/assets/_BC7rcYFE.js.br +0 -0
  46. package/dist/public/assets/{_DPT6h_sp.js → _BCgm7As-.js} +1 -1
  47. package/dist/public/assets/_BCgm7As-.js.br +0 -0
  48. package/dist/public/assets/{_BmgC95YK.js → _BDmhvLCs.js} +1 -1
  49. package/dist/public/assets/_BDmhvLCs.js.br +0 -0
  50. package/dist/public/assets/{_BDJY1Xd1.js → _BEO7OuGG.js} +2 -2
  51. package/dist/public/assets/_BEO7OuGG.js.br +0 -0
  52. package/dist/public/assets/{_BtZdp5Pb.js → _BEg-5EkS.js} +1 -1
  53. package/dist/public/assets/_BEg-5EkS.js.br +0 -0
  54. package/dist/public/assets/_BFTxeP-D.js +1 -0
  55. package/dist/public/assets/_BGCoTA5R.js +1 -0
  56. package/dist/public/assets/{_CpU0Rdtw.js → _BJHD6sFy.js} +1 -1
  57. package/dist/public/assets/_BJHD6sFy.js.br +0 -0
  58. package/dist/public/assets/_BJeQROi4.js +1 -0
  59. package/dist/public/assets/_BJeQROi4.js.br +0 -0
  60. package/dist/public/assets/_BKDJIaLf.js +1 -0
  61. package/dist/public/assets/{_Dju_1f03.js → _BM9h7XBb.js} +1 -1
  62. package/dist/public/assets/_BM9h7XBb.js.br +0 -0
  63. package/dist/public/assets/{_Dqo4vWfH.js → _BNlAaEUI.js} +1 -1
  64. package/dist/public/assets/_BNlAaEUI.js.br +0 -0
  65. package/dist/public/assets/{_DWu6n0v3.js → _BOmZO9bQ.js} +1 -1
  66. package/dist/public/assets/_BOmZO9bQ.js.br +0 -0
  67. package/dist/public/assets/{_CI7eaQDi.js → _BQvedQNA.js} +1 -1
  68. package/dist/public/assets/_BQvedQNA.js.br +0 -0
  69. package/dist/public/assets/{_BByUXZCR.js → _BTJ4QNYJ.js} +1 -1
  70. package/dist/public/assets/_BTJ4QNYJ.js.br +0 -0
  71. package/dist/public/assets/_BUnVFLfD.js +1 -0
  72. package/dist/public/assets/{_DM3cX6sN.js → _BUpeVCdC.js} +1 -1
  73. package/dist/public/assets/_BUpeVCdC.js.br +0 -0
  74. package/dist/public/assets/{_CrHoYLWK.js → _BVIQdL1e.js} +1 -1
  75. package/dist/public/assets/_BVIQdL1e.js.br +0 -0
  76. package/dist/public/assets/{_TY_Pdc3F.js → _BVN5lLXw.js} +1 -1
  77. package/dist/public/assets/_BVN5lLXw.js.br +0 -0
  78. package/dist/public/assets/{_RyUSIajb.js → _BVOoaIUz.js} +1 -1
  79. package/dist/public/assets/_BVOoaIUz.js.br +0 -0
  80. package/dist/public/assets/_BYd6ll6G.js +1 -0
  81. package/dist/public/assets/_BZnPwq2i.js +1 -0
  82. package/dist/public/assets/{_kdC_mk_s.js → _BaULj7kH.js} +1 -1
  83. package/dist/public/assets/_BaULj7kH.js.br +0 -0
  84. package/dist/public/assets/_BbdvSQaN.js +1 -0
  85. package/dist/public/assets/{_BTK0j-x0.js → _BjJMzhJj.js} +1 -1
  86. package/dist/public/assets/_BjJMzhJj.js.br +0 -0
  87. package/dist/public/assets/_BkFty1Oi.js +1 -0
  88. package/dist/public/assets/{_BGVrbRXU.js → _BmAd0-4z.js} +1 -1
  89. package/dist/public/assets/{_CjsopDcM.js → _Bo5sqml-.js} +1 -1
  90. package/dist/public/assets/_BryOeCV4.js +1 -0
  91. package/dist/public/assets/_BtAYOnhU.js +1 -0
  92. package/dist/public/assets/{_D46vZBR0.js → _BvDvgf2D.js} +1 -1
  93. package/dist/public/assets/_BvDvgf2D.js.br +0 -0
  94. package/dist/public/assets/{_CTwtnjHT.js → _Bwj1cG6Z.js} +1 -1
  95. package/dist/public/assets/_Bwj1cG6Z.js.br +0 -0
  96. package/dist/public/assets/{_LDz6VXdO.js → _Bwl5RU7m.js} +1 -1
  97. package/dist/public/assets/_Bwl5RU7m.js.br +0 -0
  98. package/dist/public/assets/_Bx7eXUeM.js +1 -0
  99. package/dist/public/assets/_Bxw4J8BV.js +1 -0
  100. package/dist/public/assets/{_CWw2xrr5.js → _BzDLIQE5.js} +1 -1
  101. package/dist/public/assets/_BzDLIQE5.js.br +0 -0
  102. package/dist/public/assets/_BzvCB8DB.js +1 -0
  103. package/dist/public/assets/_C-9WWLQ3.js +1 -0
  104. package/dist/public/assets/_C-_bdY5V.js +1 -0
  105. package/dist/public/assets/{_DyYt1xor.js → _C0zpPwSp.js} +1 -1
  106. package/dist/public/assets/_C0zpPwSp.js.br +0 -0
  107. package/dist/public/assets/{_CJYGh-X3.js → _C2Tbc73e.js} +1 -1
  108. package/dist/public/assets/_C2Tbc73e.js.br +0 -0
  109. package/dist/public/assets/{_uwuCbs_Z.js → _C3RYgw_5.js} +1 -1
  110. package/dist/public/assets/_C3RYgw_5.js.br +0 -0
  111. package/dist/public/assets/_C7P0cxfL.js +1 -0
  112. package/dist/public/assets/_C81AvAMk.js +1 -0
  113. package/dist/public/assets/{_2WOV-Xxm.js → _C8l-PMHJ.js} +1 -1
  114. package/dist/public/assets/_C8l-PMHJ.js.br +0 -0
  115. package/dist/public/assets/{_D7kyaI0s.js → _CAUoTaA1.js} +1 -1
  116. package/dist/public/assets/_CAUoTaA1.js.br +0 -0
  117. package/dist/public/assets/{_D8G71X2r.js → _CCTE_j9L.js} +1 -1
  118. package/dist/public/assets/_CCTE_j9L.js.br +0 -0
  119. package/dist/public/assets/{_rKxafATp.js → _CDXnpAfh.js} +1 -1
  120. package/dist/public/assets/_CDXnpAfh.js.br +0 -0
  121. package/dist/public/assets/_CEWoPra5.js +1 -0
  122. package/dist/public/assets/{_C8Nimh8k.js → _CGSo9tnY.js} +2 -2
  123. package/dist/public/assets/_CGSo9tnY.js.br +0 -0
  124. package/dist/public/assets/_CGsbbcpE.js +1 -0
  125. package/dist/public/assets/{_DA-5OGva.js → _CHuWNcjJ.js} +1 -1
  126. package/dist/public/assets/_CHuWNcjJ.js.br +0 -0
  127. package/dist/public/assets/_CI0KXyAu.js +1 -0
  128. package/dist/public/assets/{_Cs2Zd8pI.js → _CI8Dmpt-.js} +1 -1
  129. package/dist/public/assets/_CI8Dmpt-.js.br +0 -0
  130. package/dist/public/assets/_CKmnCHzt.js +1 -0
  131. package/dist/public/assets/_CNY02rQP.js +1 -0
  132. package/dist/public/assets/{_BiHBXSk1.js → _COjB6Mds.js} +1 -1
  133. package/dist/public/assets/_COjB6Mds.js.br +0 -0
  134. package/dist/public/assets/_CPGWIVjG.js +1 -0
  135. package/dist/public/assets/_CQ0SDG17.js +1 -0
  136. package/dist/public/assets/{_BdeQis2A.js → _CWmrlUIL.js} +1 -1
  137. package/dist/public/assets/_CWmrlUIL.js.br +0 -0
  138. package/dist/public/assets/{_CHy8Yzm5.js → _CXLLGxAE.js} +4 -4
  139. package/dist/public/assets/_CXLLGxAE.js.br +0 -0
  140. package/dist/public/assets/_CXciWQH3.js +1 -0
  141. package/dist/public/assets/_CXjFOElm.js +1 -0
  142. package/dist/public/assets/{_BWZsCsQQ.js → _CbzlAKJK.js} +1 -1
  143. package/dist/public/assets/_CbzlAKJK.js.br +0 -0
  144. package/dist/public/assets/{_BpDpZv1R.js → _CcLifUnb.js} +1 -1
  145. package/dist/public/assets/_CcLifUnb.js.br +0 -0
  146. package/dist/public/assets/{_-mM4yo3H.js → _CcbgX86v.js} +1 -1
  147. package/dist/public/assets/_CcbgX86v.js.br +0 -0
  148. package/dist/public/assets/{_C_VkFQv_.js → _CdDgM-x6.js} +1 -1
  149. package/dist/public/assets/_CdDgM-x6.js.br +0 -0
  150. package/dist/public/assets/_Ce53vsUM.js +1 -0
  151. package/dist/public/assets/_CgdBa1Kb.js +1 -0
  152. package/dist/public/assets/_ChxOfm1L.js +1 -0
  153. package/dist/public/assets/{_CLWpBKoo.js → _Ck0GxYNQ.js} +1 -1
  154. package/dist/public/assets/_Ck0GxYNQ.js.br +0 -0
  155. package/dist/public/assets/_CmIuIy4h.js +1 -0
  156. package/dist/public/assets/{_CRd8czom.js → _Cp-ZKt1Y.js} +1 -1
  157. package/dist/public/assets/_Cp-ZKt1Y.js.br +0 -0
  158. package/dist/public/assets/{_DTseWZHC.js → _CrEFB_dj.js} +1 -1
  159. package/dist/public/assets/_CrEFB_dj.js.br +0 -0
  160. package/dist/public/assets/{_zuaxHefE.js → _Cu31pL3p.js} +1 -1
  161. package/dist/public/assets/_CwaUSclh.js +1 -0
  162. package/dist/public/assets/_Cy9eBufF.js +1 -0
  163. package/dist/public/assets/_CynmXPn2.js +1 -0
  164. package/dist/public/assets/{_DHOPvA0j.js → _CzBug9-x.js} +1 -1
  165. package/dist/public/assets/_CzBug9-x.js.br +0 -0
  166. package/dist/public/assets/{_B60HnTYs.js → _Cznq4Aee.js} +1 -1
  167. package/dist/public/assets/{_D67YJBwp.js → _D-6O7MKA.js} +1 -1
  168. package/dist/public/assets/_D-6O7MKA.js.br +0 -0
  169. package/dist/public/assets/_D-JhJZ2C.js +1 -0
  170. package/dist/public/assets/{_BtEy3x8_.js → _D-XHmBJj.js} +1 -1
  171. package/dist/public/assets/_D-XHmBJj.js.br +0 -0
  172. package/dist/public/assets/_D-neGx47.js +1 -0
  173. package/dist/public/assets/_D5VJGdAr.js +1 -0
  174. package/dist/public/assets/_D6u72i8c.js +1 -0
  175. package/dist/public/assets/_D8tbv6WM.js +1 -0
  176. package/dist/public/assets/{_DfZ3Abt5.js → _DA6CNMAS.js} +1 -1
  177. package/dist/public/assets/_DA6CNMAS.js.br +0 -0
  178. package/dist/public/assets/_DDD7aRxr.js +1 -0
  179. package/dist/public/assets/_DFCbdJTU.js +1 -0
  180. package/dist/public/assets/{_ZDh1oKQp.js → _DGyB0J_Z.js} +1 -1
  181. package/dist/public/assets/_DGyB0J_Z.js.br +0 -0
  182. package/dist/public/assets/{_BoQsdJdV.js → _DJNoam7G.js} +1 -1
  183. package/dist/public/assets/_DJNoam7G.js.br +0 -0
  184. package/dist/public/assets/{_F61IFRtr.js → _DKgv7Cyq.js} +1 -1
  185. package/dist/public/assets/_DKgv7Cyq.js.br +0 -0
  186. package/dist/public/assets/{_D9YIljl9.js → _DM2ZsY5Z.js} +1 -1
  187. package/dist/public/assets/_DM2ZsY5Z.js.br +0 -0
  188. package/dist/public/assets/{_DgHgR-hZ.js → _DO7dqRyj.js} +1 -1
  189. package/dist/public/assets/_DO7dqRyj.js.br +0 -0
  190. package/dist/public/assets/{_D-1h5Hss.js → _DORBDQxD.js} +1 -1
  191. package/dist/public/assets/_DORBDQxD.js.br +0 -0
  192. package/dist/public/assets/_DOsfhfso.js +1 -0
  193. package/dist/public/assets/_DRC6uiX0.js +1 -0
  194. package/dist/public/assets/_DSWmTo1L.js +1 -0
  195. package/dist/public/assets/{_C--f0OAN.js → _DU8DeX60.js} +1 -1
  196. package/dist/public/assets/_DU8DeX60.js.br +0 -0
  197. package/dist/public/assets/_DUKZkilh.js +1 -0
  198. package/dist/public/assets/{_CCAfK1VU.js → _DWCS2CFQ.js} +1 -1
  199. package/dist/public/assets/_DWCS2CFQ.js.br +0 -0
  200. package/dist/public/assets/_DWnX1Z3a.js +1 -0
  201. package/dist/public/assets/_DX71QHMR.js +1 -0
  202. package/dist/public/assets/{_pthxQoj7.js → _DZ0rqa0h.js} +1 -1
  203. package/dist/public/assets/_DZ0rqa0h.js.br +0 -0
  204. package/dist/public/assets/{_DDmNNj38.js → _D_TuAhnN.js} +1 -1
  205. package/dist/public/assets/_D_TuAhnN.js.br +0 -0
  206. package/dist/public/assets/_D_rLfkXR.js +1 -0
  207. package/dist/public/assets/_DeBbHTQf.js +1 -0
  208. package/dist/public/assets/_Dkm85KJF.js +1 -0
  209. package/dist/public/assets/{_DdnBcgjI.js → _Dml0472r.js} +1 -1
  210. package/dist/public/assets/_Dml0472r.js.br +0 -0
  211. package/dist/public/assets/{_BEhDrcww.js → _DouCdQ99.js} +1 -1
  212. package/dist/public/assets/{_CZa0gQzH.js → _DroY8_no.js} +1 -1
  213. package/dist/public/assets/_DroY8_no.js.br +0 -0
  214. package/dist/public/assets/_DtYahvpQ.js +1 -0
  215. package/dist/public/assets/{_Dzr8Nbyu.js → _DuaSYpQG.js} +1 -1
  216. package/dist/public/assets/_DuaSYpQG.js.br +0 -0
  217. package/dist/public/assets/{_SH68xtR9.js → _DuuP0rKI.js} +1 -1
  218. package/dist/public/assets/_DuuP0rKI.js.br +0 -0
  219. package/dist/public/assets/{_0L7GeCf8.js → _DyFziHLM.js} +1 -1
  220. package/dist/public/assets/_DyFziHLM.js.br +0 -0
  221. package/dist/public/assets/_Dz3s4MY0.js +1 -0
  222. package/dist/public/assets/_Dz3s4MY0.js.br +0 -0
  223. package/dist/public/assets/_DzZaUh6D.js +1 -0
  224. package/dist/public/assets/_DzhUXE8_.js +1 -0
  225. package/dist/public/assets/_GWc0eYhN.js +1 -0
  226. package/dist/public/assets/{_BL5Y2CUw.js → _H1xilHgC.js} +1 -1
  227. package/dist/public/assets/_H1xilHgC.js.br +0 -0
  228. package/dist/public/assets/{_Bd9f_2h4.js → _HNyiv6zs.js} +1 -1
  229. package/dist/public/assets/_HNyiv6zs.js.br +0 -0
  230. package/dist/public/assets/{_D-jzW1eS.js → _HlactPnQ.js} +1 -1
  231. package/dist/public/assets/_HlactPnQ.js.br +0 -0
  232. package/dist/public/assets/{_2xmggEiI.js → _JMrxKBGN.js} +1 -1
  233. package/dist/public/assets/_JMrxKBGN.js.br +0 -0
  234. package/dist/public/assets/{_DTQWFGgt.js → _JSiyuxRJ.js} +1 -1
  235. package/dist/public/assets/_JSiyuxRJ.js.br +0 -0
  236. package/dist/public/assets/{_DMsquaig.js → _JcvJ5ACW.js} +1 -1
  237. package/dist/public/assets/_JcvJ5ACW.js.br +0 -0
  238. package/dist/public/assets/{_PMnGojaw.js → _L2f5JNlj.js} +1 -1
  239. package/dist/public/assets/_L2f5JNlj.js.br +0 -0
  240. package/dist/public/assets/_LrU9RmZE.js +1 -0
  241. package/dist/public/assets/{_DAt5J6M_.js → _Mt6ebGGE.js} +10 -10
  242. package/dist/public/assets/_Mt6ebGGE.js.br +0 -0
  243. package/dist/public/assets/_Owc9jhpW.js +2 -0
  244. package/dist/public/assets/_Owc9jhpW.js.br +0 -0
  245. package/dist/public/assets/_PevhFQ5V.js +1 -0
  246. package/dist/public/assets/_R1tJA-Qg.js +1 -0
  247. package/dist/public/assets/{_DHQVtSUu.js → _REcALhmt.js} +1 -1
  248. package/dist/public/assets/_REcALhmt.js.br +0 -0
  249. package/dist/public/assets/{_BFlHBfEr.js → _TZpNJCj6.js} +1 -1
  250. package/dist/public/assets/_TZpNJCj6.js.br +0 -0
  251. package/dist/public/assets/_VDsjaeWW.js +1 -0
  252. package/dist/public/assets/{_DtsqwD_h.js → _VgS7WPcA.js} +1 -1
  253. package/dist/public/assets/_VgS7WPcA.js.br +0 -0
  254. package/dist/public/assets/_WekB6aHl.js +1 -0
  255. package/dist/public/assets/_X4dvLi1w.js +1 -0
  256. package/dist/public/assets/_XXcCKG6W.js +1 -0
  257. package/dist/public/assets/_Y4miPos6.js +1 -0
  258. package/dist/public/assets/{_CbkvJoJj.js → _YATrYiFD.js} +1 -1
  259. package/dist/public/assets/_YATrYiFD.js.br +0 -0
  260. package/dist/public/assets/{_DBn4INpY.js → _YC0QGp9j.js} +1 -1
  261. package/dist/public/assets/_YC0QGp9j.js.br +0 -0
  262. package/dist/public/assets/_YG1qePV2.js +1 -0
  263. package/dist/public/assets/_Yiwgrm_C.js +1 -0
  264. package/dist/public/assets/{_BSZnP2C1.js → __favRwtg.js} +1 -1
  265. package/dist/public/assets/__favRwtg.js.br +0 -0
  266. package/dist/public/assets/_b0whjSZe.js +1 -0
  267. package/dist/public/assets/_cw5fHxTz.js +1 -0
  268. package/dist/public/assets/_gSyGU-mq.js +1 -0
  269. package/dist/public/assets/_j5nRBBVa.js +1 -0
  270. package/dist/public/assets/{_8KVmX-ec.js → _jFGgKTYj.js} +1 -1
  271. package/dist/public/assets/_jFGgKTYj.js.br +0 -0
  272. package/dist/public/assets/{_BmhJ-bQi.js → _kkbInDpy.js} +1 -1
  273. package/dist/public/assets/_kkbInDpy.js.br +0 -0
  274. package/dist/public/assets/_mrvWutef.js +1 -0
  275. package/dist/public/assets/_nCxsopgT.js +1 -0
  276. package/dist/public/assets/_pwbytP5z.js +1 -0
  277. package/dist/public/assets/{_Be760Oeq.js → _sTT2iThd.js} +1 -1
  278. package/dist/public/assets/_sTT2iThd.js.br +0 -0
  279. package/dist/public/assets/{_Xei7jbG-.js → _tGE7SNww.js} +1 -1
  280. package/dist/public/assets/_tGE7SNww.js.br +0 -0
  281. package/dist/public/assets/_veyGCfhb.js +1 -0
  282. package/dist/public/assets/{_7kj3hOfH.js → _vfD02BWU.js} +1 -1
  283. package/dist/public/assets/_vfD02BWU.js.br +0 -0
  284. package/dist/public/assets/files-view-_b8IktQV.js +2 -0
  285. package/dist/public/assets/manage-workspace-Bu8_bkKy.js +2 -0
  286. package/dist/public/assets/new-CGbC3Rki.js +1 -0
  287. package/dist/public/assets/new-workspace-BPq4RG6p.js +2 -0
  288. package/dist/public/assets/review-view-Dwph1tIy.js +2 -0
  289. package/dist/public/assets/settings-CGbC3Rki.js +1 -0
  290. package/dist/public/assets/settings-page-DfjJBEV4.js +2 -0
  291. package/dist/public/assets/styles-DmUe5O9c.css +1 -0
  292. package/dist/public/assets/styles-DmUe5O9c.css.br +0 -0
  293. package/dist/public/assets/w-CGbC3Rki.js +1 -0
  294. package/dist/public/assets/w._-BdlGa_yr.js +1 -0
  295. package/dist/public/assets/w._-CGbC3Rki.js +1 -0
  296. package/dist/public/assets/w._-Cq1MaRMF.js +1 -0
  297. package/package.json +1 -1
  298. package/dist/_tFH4KiOy.js +0 -2
  299. package/dist/_xm4j4quQ.js +0 -2
  300. package/dist/public/assets/_-mM4yo3H.js.br +0 -0
  301. package/dist/public/assets/_0L7GeCf8.js.br +0 -0
  302. package/dist/public/assets/_2WOV-Xxm.js.br +0 -0
  303. package/dist/public/assets/_2xmggEiI.js.br +0 -0
  304. package/dist/public/assets/_5LaG-HZE.js +0 -1
  305. package/dist/public/assets/_7QNxfo9o.js +0 -1
  306. package/dist/public/assets/_7kj3hOfH.js.br +0 -0
  307. package/dist/public/assets/_8AEeEwwI.js +0 -1
  308. package/dist/public/assets/_8KVmX-ec.js.br +0 -0
  309. package/dist/public/assets/_B1J5kQMX.js +0 -1
  310. package/dist/public/assets/_B1ZJGMvk.js +0 -1
  311. package/dist/public/assets/_B3DCz1-b.js +0 -1
  312. package/dist/public/assets/_B3DCz1-b.js.br +0 -0
  313. package/dist/public/assets/_BAD_W-gb.js +0 -1
  314. package/dist/public/assets/_BByUXZCR.js.br +0 -0
  315. package/dist/public/assets/_BDJY1Xd1.js.br +0 -0
  316. package/dist/public/assets/_BFlHBfEr.js.br +0 -0
  317. package/dist/public/assets/_BG6nf7-6.js +0 -1
  318. package/dist/public/assets/_BG6nf7-6.js.br +0 -0
  319. package/dist/public/assets/_BHdwQo1r.js +0 -1
  320. package/dist/public/assets/_BJz1J7VL.js +0 -1
  321. package/dist/public/assets/_BKxZiX8Y.js.br +0 -0
  322. package/dist/public/assets/_BL5Y2CUw.js.br +0 -0
  323. package/dist/public/assets/_BOA9wu9y.js +0 -1
  324. package/dist/public/assets/_BQ6HGMiz.js +0 -1
  325. package/dist/public/assets/_BSZnP2C1.js.br +0 -0
  326. package/dist/public/assets/_BTK0j-x0.js.br +0 -0
  327. package/dist/public/assets/_BWZsCsQQ.js.br +0 -0
  328. package/dist/public/assets/_BWcGdDBZ.js.br +0 -0
  329. package/dist/public/assets/_BX6XuUUI.js +0 -1
  330. package/dist/public/assets/_BYImhKdQ.js +0 -1
  331. package/dist/public/assets/_Bcog8Mvw.js +0 -1
  332. package/dist/public/assets/_Bd9f_2h4.js.br +0 -0
  333. package/dist/public/assets/_BdViCDP-.js +0 -1
  334. package/dist/public/assets/_BdeQis2A.js.br +0 -0
  335. package/dist/public/assets/_Be760Oeq.js.br +0 -0
  336. package/dist/public/assets/_Bf8StQtP.js +0 -1
  337. package/dist/public/assets/_BgqsGerF.js +0 -1
  338. package/dist/public/assets/_BiHBXSk1.js.br +0 -0
  339. package/dist/public/assets/_Bic7QDJn.js +0 -1
  340. package/dist/public/assets/_Bje2UlWb.js +0 -1
  341. package/dist/public/assets/_BmgC95YK.js.br +0 -0
  342. package/dist/public/assets/_BmhJ-bQi.js.br +0 -0
  343. package/dist/public/assets/_BnQVcrhX.js +0 -1
  344. package/dist/public/assets/_BoQsdJdV.js.br +0 -0
  345. package/dist/public/assets/_BoTUkl_N.js +0 -1
  346. package/dist/public/assets/_BpDpZv1R.js.br +0 -0
  347. package/dist/public/assets/_BpGZbbmD.js +0 -1
  348. package/dist/public/assets/_BpXuBLlJ.js.br +0 -0
  349. package/dist/public/assets/_BsRfLR4Y.js +0 -1
  350. package/dist/public/assets/_BtEy3x8_.js.br +0 -0
  351. package/dist/public/assets/_BtZdp5Pb.js.br +0 -0
  352. package/dist/public/assets/_BxFn7bBG.js +0 -1
  353. package/dist/public/assets/_C--f0OAN.js.br +0 -0
  354. package/dist/public/assets/_C-_4KAMq.js +0 -1
  355. package/dist/public/assets/_C3lI_Twn.js +0 -1
  356. package/dist/public/assets/_C51h13b-.js +0 -1
  357. package/dist/public/assets/_C8Nimh8k.js.br +0 -0
  358. package/dist/public/assets/_C9UFsOy1.js +0 -1
  359. package/dist/public/assets/_CBK_SY_j.js +0 -1
  360. package/dist/public/assets/_CCAfK1VU.js.br +0 -0
  361. package/dist/public/assets/_CCw4Mih7.js +0 -1
  362. package/dist/public/assets/_CDUHEtRr.js.br +0 -0
  363. package/dist/public/assets/_CHy8Yzm5.js.br +0 -0
  364. package/dist/public/assets/_CHyLG_jb.js.br +0 -0
  365. package/dist/public/assets/_CI7eaQDi.js.br +0 -0
  366. package/dist/public/assets/_CIwfNMk3.js +0 -1
  367. package/dist/public/assets/_CJYGh-X3.js.br +0 -0
  368. package/dist/public/assets/_CLWpBKoo.js.br +0 -0
  369. package/dist/public/assets/_CPlovKCM.js +0 -1
  370. package/dist/public/assets/_CQDgAaDD.js +0 -1
  371. package/dist/public/assets/_CRd8czom.js.br +0 -0
  372. package/dist/public/assets/_CTwtnjHT.js.br +0 -0
  373. package/dist/public/assets/_CWUZ37Z2.js.br +0 -0
  374. package/dist/public/assets/_CWYdWpGf.js +0 -1
  375. package/dist/public/assets/_CWw2xrr5.js.br +0 -0
  376. package/dist/public/assets/_CZa0gQzH.js.br +0 -0
  377. package/dist/public/assets/_C_VkFQv_.js.br +0 -0
  378. package/dist/public/assets/_Cb5fameO.js +0 -1
  379. package/dist/public/assets/_Cb5znfXe.js +0 -1
  380. package/dist/public/assets/_CbkvJoJj.js.br +0 -0
  381. package/dist/public/assets/_CcA9L8Uv.js.br +0 -0
  382. package/dist/public/assets/_CcmYHRo2.js +0 -1
  383. package/dist/public/assets/_Cd0WqXuH.js.br +0 -0
  384. package/dist/public/assets/_Ci9OrA31.js +0 -1
  385. package/dist/public/assets/_CigEUN1Y.js +0 -1
  386. package/dist/public/assets/_CmCzrX8O.js +0 -1
  387. package/dist/public/assets/_Cn1d1sxS.js.br +0 -0
  388. package/dist/public/assets/_CpU0Rdtw.js.br +0 -0
  389. package/dist/public/assets/_CrHoYLWK.js.br +0 -0
  390. package/dist/public/assets/_CrLAwqeM.js +0 -1
  391. package/dist/public/assets/_Cs2Zd8pI.js.br +0 -0
  392. package/dist/public/assets/_Cs5YLsyh.js +0 -1
  393. package/dist/public/assets/_Cskv-lte.js +0 -1
  394. package/dist/public/assets/_CuZT7B5b.js +0 -1
  395. package/dist/public/assets/_Cv3jQpwd.js.br +0 -0
  396. package/dist/public/assets/_CzKQcLq6.js +0 -1
  397. package/dist/public/assets/_D-1h5Hss.js.br +0 -0
  398. package/dist/public/assets/_D-jzW1eS.js.br +0 -0
  399. package/dist/public/assets/_D3R3E-lW.js +0 -1
  400. package/dist/public/assets/_D3t8fBvV.js +0 -1
  401. package/dist/public/assets/_D46vZBR0.js.br +0 -0
  402. package/dist/public/assets/_D5_5gquy.js +0 -1
  403. package/dist/public/assets/_D624R74e.js +0 -1
  404. package/dist/public/assets/_D67YJBwp.js.br +0 -0
  405. package/dist/public/assets/_D7kyaI0s.js.br +0 -0
  406. package/dist/public/assets/_D8G71X2r.js.br +0 -0
  407. package/dist/public/assets/_D8mUHp4g.js +0 -1
  408. package/dist/public/assets/_D9YIljl9.js.br +0 -0
  409. package/dist/public/assets/_DA-5OGva.js.br +0 -0
  410. package/dist/public/assets/_DAt5J6M_.js.br +0 -0
  411. package/dist/public/assets/_DBn4INpY.js.br +0 -0
  412. package/dist/public/assets/_DBqrfSYd.js +0 -1
  413. package/dist/public/assets/_DDmNNj38.js.br +0 -0
  414. package/dist/public/assets/_DGF9MW5D.js +0 -1
  415. package/dist/public/assets/_DHOPvA0j.js.br +0 -0
  416. package/dist/public/assets/_DHQVtSUu.js.br +0 -0
  417. package/dist/public/assets/_DHTvNsC9.js +0 -1
  418. package/dist/public/assets/_DHafZUX3.js +0 -1
  419. package/dist/public/assets/_DM3cX6sN.js.br +0 -0
  420. package/dist/public/assets/_DMsquaig.js.br +0 -0
  421. package/dist/public/assets/_DNiHEIwz.js +0 -1
  422. package/dist/public/assets/_DPT6h_sp.js.br +0 -0
  423. package/dist/public/assets/_DQaRo0_Z.js +0 -1
  424. package/dist/public/assets/_DSjhAsHE.js +0 -1
  425. package/dist/public/assets/_DTQWFGgt.js.br +0 -0
  426. package/dist/public/assets/_DTseWZHC.js.br +0 -0
  427. package/dist/public/assets/_DULNepbq.js +0 -2
  428. package/dist/public/assets/_DULNepbq.js.br +0 -0
  429. package/dist/public/assets/_DVmk0cGb.js +0 -1
  430. package/dist/public/assets/_DVu8SG8S.js +0 -1
  431. package/dist/public/assets/_DWu6n0v3.js.br +0 -0
  432. package/dist/public/assets/_DYIJgXao.js +0 -1
  433. package/dist/public/assets/_DcDp1vYe.js +0 -1
  434. package/dist/public/assets/_DdnBcgjI.js.br +0 -0
  435. package/dist/public/assets/_DeqyAtmP.js +0 -1
  436. package/dist/public/assets/_DfZ3Abt5.js.br +0 -0
  437. package/dist/public/assets/_DgHgR-hZ.js.br +0 -0
  438. package/dist/public/assets/_Dhk4fgzB.js +0 -1
  439. package/dist/public/assets/_DiNKSmxI.js +0 -1
  440. package/dist/public/assets/_DiUWhWrq.js +0 -1
  441. package/dist/public/assets/_Dj1leKJH.js +0 -1
  442. package/dist/public/assets/_DjpGYd1p.js +0 -1
  443. package/dist/public/assets/_Dju_1f03.js.br +0 -0
  444. package/dist/public/assets/_DmGRSsUt.js +0 -1
  445. package/dist/public/assets/_Dqo4vWfH.js.br +0 -0
  446. package/dist/public/assets/_Dr-IU6HK.js.br +0 -0
  447. package/dist/public/assets/_DrqKhRAQ.js +0 -1
  448. package/dist/public/assets/_DtsqwD_h.js.br +0 -0
  449. package/dist/public/assets/_DyYt1xor.js.br +0 -0
  450. package/dist/public/assets/_DzFqbsGy.js +0 -1
  451. package/dist/public/assets/_Dzr8Nbyu.js.br +0 -0
  452. package/dist/public/assets/_EaUViMxr.js +0 -1
  453. package/dist/public/assets/_F61IFRtr.js.br +0 -0
  454. package/dist/public/assets/_JBpSIlgX.js +0 -1
  455. package/dist/public/assets/_JoAwMfkR.js +0 -1
  456. package/dist/public/assets/_LDz6VXdO.js.br +0 -0
  457. package/dist/public/assets/_Lop0HV3P.js +0 -1
  458. package/dist/public/assets/_Lop0HV3P.js.br +0 -0
  459. package/dist/public/assets/_Mg9GxHtB.js +0 -1
  460. package/dist/public/assets/_NwIYFT5B.js +0 -1
  461. package/dist/public/assets/_NwIYFT5B.js.br +0 -0
  462. package/dist/public/assets/_PMnGojaw.js.br +0 -0
  463. package/dist/public/assets/_RyUSIajb.js.br +0 -0
  464. package/dist/public/assets/_SH68xtR9.js.br +0 -0
  465. package/dist/public/assets/_TY_Pdc3F.js.br +0 -0
  466. package/dist/public/assets/_U6p2S3Z0.js +0 -1
  467. package/dist/public/assets/_V56TvjWJ.js +0 -1
  468. package/dist/public/assets/_Xei7jbG-.js.br +0 -0
  469. package/dist/public/assets/_ZDh1oKQp.js.br +0 -0
  470. package/dist/public/assets/__rjIklzT.js +0 -1
  471. package/dist/public/assets/_asNggv5C.js +0 -1
  472. package/dist/public/assets/_cSxqqciM.js +0 -1
  473. package/dist/public/assets/_hYHHWgXz.js +0 -1
  474. package/dist/public/assets/_kdC_mk_s.js.br +0 -0
  475. package/dist/public/assets/_pthxQoj7.js.br +0 -0
  476. package/dist/public/assets/_qss_F0VZ.js +0 -1
  477. package/dist/public/assets/_rKxafATp.js.br +0 -0
  478. package/dist/public/assets/_uwuCbs_Z.js.br +0 -0
  479. package/dist/public/assets/_wBNa2EL1.js +0 -1
  480. package/dist/public/assets/_wvT-w49n.js.br +0 -0
  481. package/dist/public/assets/files-view-D5Fv0SIK.js +0 -2
  482. package/dist/public/assets/manage-workspace-Cb9sMIjp.js +0 -2
  483. package/dist/public/assets/new-5AQb7ar3.js +0 -1
  484. package/dist/public/assets/new-workspace-o3VxyV3X.js +0 -2
  485. package/dist/public/assets/review-view-BNRZ1rgz.js +0 -2
  486. package/dist/public/assets/settings-5AQb7ar3.js +0 -1
  487. package/dist/public/assets/settings-page-6pXaU21j.js +0 -2
  488. package/dist/public/assets/styles-6nJ2WylG.css +0 -1
  489. package/dist/public/assets/styles-6nJ2WylG.css.br +0 -0
  490. package/dist/public/assets/w-5AQb7ar3.js +0 -1
  491. package/dist/public/assets/w._-5AQb7ar3.js +0 -1
  492. package/dist/public/assets/w._-6Uhhy1cN.js +0 -1
  493. package/dist/public/assets/w._-BdCzUYn6.js +0 -1
@@ -2,11 +2,11 @@ import { i as __require, o as __toESM, t as __commonJSMin } from "./_BMI-E3GI.js
2
2
  import { r as require_inherits, t as require_src$1 } from "./_xlrdOUsL.js";
3
3
  import { t as require_safe_buffer } from "./_BmSjjJ2E.js";
4
4
  import { createRequire } from "node:module";
5
+ import { execFile, execFileSync, spawn, spawnSync } from "node:child_process";
5
6
  import fs from "node:fs";
6
7
  import path from "node:path";
7
8
  import { fileURLToPath, pathToFileURL } from "node:url";
8
9
  import { AsyncLocalStorage } from "node:async_hooks";
9
- import { execFile, execFileSync, spawn, spawnSync } from "node:child_process";
10
10
  import fs$1 from "node:fs/promises";
11
11
  import os from "node:os";
12
12
  import { promisify } from "node:util";
@@ -184,6 +184,14 @@ try {
184
184
  * detaches every client on its socket, which on the live one cut every
185
185
  * open terminal. */
186
186
  var TMUX_SOCKET = process.env.WORK_TMUX_SOCKET || "work";
187
+ /** Any socket but the machine's `work` is a scratch server's (smoke, a
188
+ * repro), and its tmux server is that server's alone: it is stopped as the
189
+ * server stops (entry.ts) and its systemd unit ends within a day however
190
+ * the server went (`ensureTmuxServer`), where the live one outlives every
191
+ * restart. Left to themselves, scratch runs kept a tmux server and its unit
192
+ * each for weeks. `WORK_TMUX_KEEP=1` keeps one, for a test of what a
193
+ * restart keeps. */
194
+ var SCRATCH_TMUX = TMUX_SOCKET !== "work" && process.env.WORK_TMUX_KEEP !== "1";
187
195
  var execFileAsync = promisify(execFile);
188
196
  async function run$2(cmd, args, cwd, env, opts = {}) {
189
197
  const child = execFileAsync(cmd, args, {
@@ -9659,7 +9667,7 @@ function publishChange(sessionId) {
9659
9667
  const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
9660
9668
  if (row?.workspace_id) {
9661
9669
  const workspaceId = row.workspace_id;
9662
- import("./_xm4j4quQ.js").then((m) => m.notifySessionsChanged(workspaceId));
9670
+ import("./_wbrwjNyW.js").then((m) => m.notifySessionsChanged(workspaceId));
9663
9671
  return;
9664
9672
  }
9665
9673
  publish("sessions.changed");
@@ -12577,11 +12585,11 @@ async function pruneWorkspaceSnaps(ws) {
12577
12585
  const live = new Set([...reviewPoints(ws.id).values()].map((p) => p.snap));
12578
12586
  for (const repo of ws.repos) await pruneSnaps(path.join(ws.path, repo.worktree), ws.id, live).catch(() => {});
12579
12587
  }
12580
- var started = false;
12588
+ var started$1 = false;
12581
12589
  /** A minute after boot and hourly after, every active workspace's sweep. */
12582
12590
  function startSnapSweep() {
12583
- if (started) return;
12584
- started = true;
12591
+ if (started$1) return;
12592
+ started$1 = true;
12585
12593
  const sweep = () => {
12586
12594
  for (const { id } of all("SELECT id FROM workspaces WHERE status = 'active'")) {
12587
12595
  const ws = getWorkspace(id);
@@ -16722,7 +16730,7 @@ function serverAt(key, def, root, checkout, cmd, forWarm) {
16722
16730
  return srv;
16723
16731
  }
16724
16732
  /** When a server last mattered: asked, or warmed for a page. */
16725
- var touched = (s) => Math.max(s.lastUsed, s.lastWarm);
16733
+ var touched$1 = (s) => Math.max(s.lastUsed, s.lastWarm);
16726
16734
  /** Stop the least recently touched idle servers until one more fits, and
16727
16735
  * say whether it does. A question makes room from any server not
16728
16736
  * mid-question (a burst can overshoot); a warm only from ones unused for a
@@ -16730,7 +16738,7 @@ var touched = (s) => Math.max(s.lastUsed, s.lastWarm);
16730
16738
  function makeRoom(forWarm = false) {
16731
16739
  const live = [...servers.values()].filter((s) => !s.stopping);
16732
16740
  const now = Date.now();
16733
- const idle = live.filter((s) => !s.busy && (!forWarm || now - touched(s) > RECENT_MS)).sort((a, b) => touched(a) - touched(b));
16741
+ const idle = live.filter((s) => !s.busy && (!forWarm || now - touched$1(s) > RECENT_MS)).sort((a, b) => touched$1(a) - touched$1(b));
16734
16742
  let n = live.length;
16735
16743
  for (; n >= MAX_RUNNING && idle.length; n--) stop(idle.shift());
16736
16744
  return n < MAX_RUNNING;
@@ -16923,7 +16931,7 @@ setInterval(() => {
16923
16931
  if (!lspEnabled()) {
16924
16932
  for (const s of servers.values()) if (!s.busy) stop(s);
16925
16933
  }
16926
- for (const s of servers.values()) if (!s.busy && now - touched(s) > (s.lastUsed ? IDLE_MS : WARM_IDLE_MS)) stop(s);
16934
+ for (const s of servers.values()) if (!s.busy && now - touched$1(s) > (s.lastUsed ? IDLE_MS : WARM_IDLE_MS)) stop(s);
16927
16935
  }, 6e4).unref();
16928
16936
  function exclusive(srv, fn) {
16929
16937
  const run = srv.queue.then(fn, fn);
@@ -17469,6 +17477,60 @@ async function workPids(argv) {
17469
17477
  for (let at = process.pid; at && at > 1 && !pids.has(at) && pids.size < 32; at = argv ? argv.get(at)?.ppid : await procPpid(at)) pids.add(at);
17470
17478
  return pids;
17471
17479
  }
17480
+ /** How long what a closed session started has to exit on its SIGTERM. */
17481
+ var SESSION_END_GRACE_MS = 5e3;
17482
+ /** Every process a session started, wherever it went since. tmux gives a
17483
+ * session's panes `WORK_SESSION_ID` and whatever they start inherits it, a
17484
+ * job detached with nohup or setsid included: once its parent is gone no
17485
+ * process tree leads back to one, and such jobs outlived their sessions
17486
+ * by days. Read from each process's environment where /proc has it; on
17487
+ * macOS, whose `ps` would mix the environment into the command line, the
17488
+ * trees under the session's panes instead (`panes`, read before the
17489
+ * session went). Never the server or what runs it. */
17490
+ async function sessionProcs(sessionId, panes) {
17491
+ let pids;
17492
+ if (darwin) {
17493
+ const table = await processArgsNow();
17494
+ const children = /* @__PURE__ */ new Map();
17495
+ for (const [pid, row] of table) children.set(row.ppid, [...children.get(row.ppid) ?? [], pid]);
17496
+ const seen = /* @__PURE__ */ new Set();
17497
+ const queue = panes.filter((p) => table.has(p));
17498
+ while (queue.length) {
17499
+ const pid = queue.pop();
17500
+ if (seen.has(pid)) continue;
17501
+ seen.add(pid);
17502
+ queue.push(...children.get(pid) ?? []);
17503
+ }
17504
+ pids = [...seen];
17505
+ } else {
17506
+ const mark = `WORK_SESSION_ID=${sessionId}\0`;
17507
+ const names = await fs$1.readdir("/proc").catch(() => []);
17508
+ pids = (await Promise.all(names.filter((n) => /^\d+$/.test(n)).map(async (n) => {
17509
+ const env = await fs$1.readFile(`/proc/${n}/environ`, "latin1").catch(() => "");
17510
+ return env.startsWith(mark) || env.includes(`\0${mark}`) ? Number(n) : 0;
17511
+ }))).filter(Boolean);
17512
+ }
17513
+ const own = await workPids();
17514
+ return pids.filter((p) => !own.has(p));
17515
+ }
17516
+ /** Ends everything a closing session started (`sessionProcs`): SIGTERM
17517
+ * now, and SIGKILL to what is still there `SESSION_END_GRACE_MS` later.
17518
+ * On Linux the second pass looks again by the environment, so a pid
17519
+ * reused meanwhile is never hit. */
17520
+ async function endSessionProcs(sessionId, panes) {
17521
+ const first = await sessionProcs(sessionId, panes);
17522
+ if (!first.length) return;
17523
+ for (const pid of first) try {
17524
+ process.kill(pid, "SIGTERM");
17525
+ } catch {}
17526
+ setTimeout(() => {
17527
+ (darwin ? Promise.resolve(first) : sessionProcs(sessionId, [])).then((left) => {
17528
+ for (const pid of left) try {
17529
+ process.kill(pid, "SIGKILL");
17530
+ } catch {}
17531
+ }).catch(() => {});
17532
+ }, SESSION_END_GRACE_MS).unref?.();
17533
+ }
17472
17534
  /** SIGTERM every process running inside the workspace (dev servers etc.). */
17473
17535
  async function killWorkspaceProcs(wsPath) {
17474
17536
  for (const proc of await workspaceProcs(wsPath)) try {
@@ -17931,11 +17993,13 @@ function onSessionDispose(fn) {
17931
17993
  }
17932
17994
  async function disposeSession(id) {
17933
17995
  for (const fn of disposeListeners) fn(id);
17996
+ const panes = (await listPanes() ?? []).filter((p) => p.id === id).map((p) => p.pid);
17934
17997
  await tmux([
17935
17998
  "kill-session",
17936
17999
  "-t",
17937
18000
  tmuxName(id)
17938
18001
  ]).catch(() => {});
18002
+ endSessionProcs(id, panes).catch(() => {});
17939
18003
  forgetPanes();
17940
18004
  clearTmuxStarted(id);
17941
18005
  clearAgentPhase(id);
@@ -18005,7 +18069,7 @@ function notifySessionsChanged(workspaceId) {
18005
18069
  async function emitSessionsChanged(workspaceId) {
18006
18070
  try {
18007
18071
  const states = await sessionStates();
18008
- const { teamsOf } = await import("./_tFH4KiOy.js");
18072
+ const { teamsOf } = await import("./_B25P__C4.js");
18009
18073
  publish("sessions.changed", {
18010
18074
  workspaceId,
18011
18075
  sessions: listSessions(workspaceId).map((s) => ({
@@ -18299,8 +18363,9 @@ async function ensureTmuxServer() {
18299
18363
  "sleep",
18300
18364
  "infinity"
18301
18365
  ], os.homedir());
18366
+ const backstop = SCRATCH_TMUX ? ["--property=RuntimeMaxSec=1d"] : [];
18302
18367
  const files = openFileLimit();
18303
- await start(files ? [`--property=LimitNOFILE=${files}`] : []).catch(() => files ? start([]) : Promise.reject()).catch(() => {});
18368
+ await start([...files ? [`--property=LimitNOFILE=${files}`] : [], ...backstop]).catch(() => files ? start(backstop) : Promise.reject()).catch(() => {});
18304
18369
  }
18305
18370
  /** This server's open-file limit, for tmux's server: it holds a socket and
18306
18371
  * a tty for every client attached and a pty for every pane, and a systemd
@@ -18589,9 +18654,10 @@ function sessionEnvArgs(session, cwd) {
18589
18654
  }
18590
18655
  /** A session's scratch (`TMPDIR`): its workspace's own `.tmp/`, on disk
18591
18656
  * and gone with the workspace (and out of backups), where `/tmp` is a
18592
- * small tmpfs every workspace shares and nothing empties: agents' repro
18593
- * servers and installs there ran it out of inodes. Made here, since a
18594
- * `TMPDIR` that does not exist fails `mktemp` outright. */
18657
+ * small tmpfs every workspace shares: agents' repro servers and installs
18658
+ * there ran it out of inodes. It empties as `/tmp` does (tmp-sweep.ts).
18659
+ * Made here, since a `TMPDIR` that does not exist fails `mktemp`
18660
+ * outright. */
18595
18661
  function sessionTmp(cwd) {
18596
18662
  const dir = path.join(cwd, ".tmp");
18597
18663
  fs.mkdirSync(dir, { recursive: true });
@@ -18685,6 +18751,258 @@ function ensureAllPushHooks() {
18685
18751
  }
18686
18752
  }
18687
18753
  //#endregion
18754
+ //#region src/server/tmp-sweep.ts
18755
+ /**
18756
+ * A workspace's `.tmp/` is its sessions' `TMPDIR` (sessions.ts
18757
+ * `sessionTmp`), and agents fill it the way they would fill `/tmp`: clones,
18758
+ * installs, repro servers, logs. Nothing else ever emptied it, so it grew
18759
+ * to tens of gigabytes a workspace. It is emptied the way the machine
18760
+ * empties its own `/tmp`: what has gone untouched for as long as `/tmp`
18761
+ * keeps an entry goes, by the rules `systemd-tmpfiles --clean` applies, on
18762
+ * its schedule.
18763
+ */
18764
+ var DAY = 864e5;
18765
+ /** systemd's own age for `/tmp` (its shipped `tmp.conf`), and the age where
18766
+ * nothing on the machine names one. */
18767
+ var SYSTEMD_TMP_AGE = 10 * DAY;
18768
+ /** macOS's `daily_clean_tmps_days` as shipped. */
18769
+ var MAC_TMP_DAYS = 3;
18770
+ /** As `systemd-tmpfiles-clean.timer`: 15 minutes after start, then daily. */
18771
+ var FIRST_SWEEP_MS = 9e5;
18772
+ var SWEEP_EVERY_MS = DAY;
18773
+ /** Where systemd-tmpfiles reads its config, first to last: a file in an
18774
+ * earlier directory hides one of the same name in a later one. */
18775
+ var TMPFILES_DIRS = [
18776
+ "/etc/tmpfiles.d",
18777
+ "/run/tmpfiles.d",
18778
+ "/usr/local/lib/tmpfiles.d",
18779
+ "/usr/lib/tmpfiles.d"
18780
+ ];
18781
+ /** macOS periodic(8)'s config, each assignment overriding the one before. */
18782
+ var PERIODIC_CONFS = [
18783
+ "/etc/defaults/periodic.conf",
18784
+ "/etc/periodic.conf",
18785
+ "/etc/periodic.conf.local"
18786
+ ];
18787
+ var UNIT_MS = {
18788
+ us: .001,
18789
+ usec: .001,
18790
+ ms: 1,
18791
+ msec: 1,
18792
+ s: 1e3,
18793
+ sec: 1e3,
18794
+ second: 1e3,
18795
+ seconds: 1e3,
18796
+ m: 6e4,
18797
+ min: 6e4,
18798
+ minute: 6e4,
18799
+ minutes: 6e4,
18800
+ h: 36e5,
18801
+ hr: 36e5,
18802
+ hour: 36e5,
18803
+ hours: 36e5,
18804
+ d: DAY,
18805
+ day: DAY,
18806
+ days: DAY,
18807
+ w: 7 * DAY,
18808
+ week: 7 * DAY,
18809
+ weeks: 7 * DAY,
18810
+ M: 30.44 * DAY,
18811
+ month: 30.44 * DAY,
18812
+ months: 30.44 * DAY,
18813
+ y: 365.25 * DAY,
18814
+ year: 365.25 * DAY,
18815
+ years: 365.25 * DAY
18816
+ };
18817
+ /** A tmpfiles.d age (`10d`, `1w 2d`, `~12h`, `ac:30d`) in ms: null for
18818
+ * `-` or none, which means never cleaned. */
18819
+ function parseAge(text) {
18820
+ if (!text || text === "-") return null;
18821
+ const span = text.replace(/^~/, "").replace(/^[aAbBcCmM]+:/, "");
18822
+ let ms = 0;
18823
+ let matched = "";
18824
+ for (const m of span.matchAll(/\s*(\d+(?:\.\d+)?)\s*([a-zA-Zµ]*)/g)) {
18825
+ const unit = m[2] === "" ? "s" : m[2] === "µs" ? "us" : m[2];
18826
+ if (!(unit in UNIT_MS)) return null;
18827
+ ms += Number(m[1]) * UNIT_MS[unit];
18828
+ matched += m[0];
18829
+ }
18830
+ return matched.trim() === span.trim() && matched ? ms : null;
18831
+ }
18832
+ /** `/tmp`'s age in this machine's tmpfiles.d config: undefined when no
18833
+ * line names `/tmp`. Of every file, the lexicographically first one with a
18834
+ * line for a path is the one applied, as systemd-tmpfiles does. */
18835
+ function tmpfilesAge(root) {
18836
+ const files = /* @__PURE__ */ new Map();
18837
+ for (const dir of TMPFILES_DIRS) {
18838
+ let names;
18839
+ try {
18840
+ names = fs.readdirSync(path.join(root, dir));
18841
+ } catch {
18842
+ continue;
18843
+ }
18844
+ for (const name of names) if (name.endsWith(".conf") && !files.has(name)) files.set(name, path.join(root, dir, name));
18845
+ }
18846
+ for (const name of [...files.keys()].sort()) {
18847
+ let text;
18848
+ try {
18849
+ text = fs.readFileSync(files.get(name), "utf8");
18850
+ } catch {
18851
+ continue;
18852
+ }
18853
+ for (const raw of text.split("\n")) {
18854
+ const line = raw.trim();
18855
+ if (!line || line.startsWith("#")) continue;
18856
+ const [type, where, , , , age] = line.split(/\s+/);
18857
+ if (where === "/tmp" && /^[dDeqQv]/.test(type)) return parseAge(age);
18858
+ }
18859
+ }
18860
+ }
18861
+ /** macOS cleans `/tmp` from periodic(8)'s daily run: what has gone
18862
+ * `daily_clean_tmps_days` untouched, while `daily_clean_tmps_enable`. */
18863
+ function periodicAge(root) {
18864
+ const vars = {};
18865
+ for (const file of PERIODIC_CONFS) {
18866
+ let text;
18867
+ try {
18868
+ text = fs.readFileSync(path.join(root, file), "utf8");
18869
+ } catch {
18870
+ continue;
18871
+ }
18872
+ for (const m of text.matchAll(/^\s*(daily_clean_tmps_(?:enable|days))\s*=\s*["']?([^"'\s#]*)/gm)) vars[m[1]] = m[2];
18873
+ }
18874
+ if ((vars.daily_clean_tmps_enable ?? "YES").toUpperCase() !== "YES") return null;
18875
+ const days = Number(vars.daily_clean_tmps_days);
18876
+ return (Number.isFinite(days) && days >= 0 ? days : MAC_TMP_DAYS) * DAY;
18877
+ }
18878
+ /** How long this machine's `/tmp` keeps an entry nobody touches, in ms:
18879
+ * null when it never ages one out. `WORK_TMP_AGE` (a tmpfiles.d age, or
18880
+ * `off`) overrides it. `root` and `platform` are for a test. */
18881
+ function tmpAge(opts = {}) {
18882
+ const env = opts.env ?? process.env.WORK_TMP_AGE;
18883
+ if (env) return /^(off|never|-)$/i.test(env) ? null : parseAge(env);
18884
+ const root = opts.root ?? "/";
18885
+ if ((opts.platform ?? process.platform) === "darwin") return periodicAge(root);
18886
+ const age = tmpfilesAge(root);
18887
+ return age === void 0 ? SYSTEMD_TMP_AGE : age;
18888
+ }
18889
+ /** When an entry was last touched, by the times systemd-tmpfiles weighs
18890
+ * by default (`abcmABM`): a file's access, birth, change and modification;
18891
+ * a directory's without its change time, which cleaning it moves. */
18892
+ function touched(st, dir) {
18893
+ return Math.max(st.atimeMs, st.mtimeMs, st.birthtimeMs || 0, dir ? 0 : st.ctimeMs);
18894
+ }
18895
+ /** Empties `dir` of what has gone `ageMs` untouched: each file past it,
18896
+ * then each directory past it once it is empty. `dir` itself stays, a
18897
+ * symlink is never followed (a `.tmp` that is one is left alone), and
18898
+ * another filesystem mounted inside is never entered. */
18899
+ async function sweepTmp(dir, ageMs, now = Date.now()) {
18900
+ const out = {
18901
+ removed: 0,
18902
+ bytes: 0
18903
+ };
18904
+ let top;
18905
+ try {
18906
+ top = await fs$1.lstat(dir);
18907
+ } catch {
18908
+ return out;
18909
+ }
18910
+ if (!top.isDirectory()) return out;
18911
+ await clean(dir, top, now - ageMs, out);
18912
+ return out;
18913
+ }
18914
+ /** Cleans one directory, `st` its times from before it was read; true when
18915
+ * nothing is left in it. */
18916
+ async function clean(dir, st, cutoff, out) {
18917
+ let handle;
18918
+ try {
18919
+ handle = await fs$1.opendir(dir);
18920
+ } catch {
18921
+ return false;
18922
+ }
18923
+ let left = 0;
18924
+ try {
18925
+ for await (const entry of handle) {
18926
+ const p = path.join(dir, entry.name);
18927
+ let s;
18928
+ try {
18929
+ s = await fs$1.lstat(p);
18930
+ } catch {
18931
+ continue;
18932
+ }
18933
+ if (s.dev !== st.dev) {
18934
+ left++;
18935
+ continue;
18936
+ }
18937
+ if (s.isDirectory()) {
18938
+ if (await clean(p, s, cutoff, out) && touched(s, true) < cutoff) try {
18939
+ await fs$1.rmdir(p);
18940
+ out.removed++;
18941
+ continue;
18942
+ } catch {}
18943
+ left++;
18944
+ continue;
18945
+ }
18946
+ if (touched(s, false) < cutoff) try {
18947
+ await fs$1.unlink(p);
18948
+ out.removed++;
18949
+ out.bytes += s.size;
18950
+ continue;
18951
+ } catch {}
18952
+ left++;
18953
+ }
18954
+ } catch {
18955
+ left++;
18956
+ }
18957
+ await fs$1.utimes(dir, st.atime, st.mtime).catch(() => {});
18958
+ return left === 0;
18959
+ }
18960
+ /** An age as the sweep's log and the workspace AGENTS.md say it. */
18961
+ function ageText(ms) {
18962
+ for (const [unit, per] of [
18963
+ ["day", DAY],
18964
+ ["hour", 36e5],
18965
+ ["minute", 6e4]
18966
+ ]) if (ms >= per) {
18967
+ const n = Math.round(ms / per);
18968
+ return `${n} ${unit}${n === 1 ? "" : "s"}`;
18969
+ }
18970
+ const n = Math.round(ms / 1e3);
18971
+ return `${n} second${n === 1 ? "" : "s"}`;
18972
+ }
18973
+ function size(bytes) {
18974
+ return bytes >= 1 << 30 ? `${(bytes / (1 << 30)).toFixed(1)} GiB` : `${Math.round(bytes / (1 << 20))} MiB`;
18975
+ }
18976
+ var started = false;
18977
+ /** Sweeps each `.tmp/` that `dirs` names, on systemd-tmpfiles-clean's
18978
+ * schedule, at the age `/tmp` has when each sweep starts (a machine whose
18979
+ * `/tmp` keeps everything keeps these too). `WORK_TMP_SWEEP_DELAY`
18980
+ * (seconds) moves the first sweep, for a test. */
18981
+ function startTmpSweep(dirs) {
18982
+ if (started) return;
18983
+ started = true;
18984
+ let running = false;
18985
+ const sweep = async () => {
18986
+ if (running) return;
18987
+ running = true;
18988
+ try {
18989
+ const age = tmpAge();
18990
+ if (age === null) return;
18991
+ for (const dir of dirs()) {
18992
+ const r = await sweepTmp(dir, age).catch(() => null);
18993
+ if (r?.removed) console.log(`[work] tmp: removed ${r.removed} entr${r.removed === 1 ? "y" : "ies"} (${size(r.bytes)}) untouched for ${ageText(age)} from ${dir}`);
18994
+ }
18995
+ } finally {
18996
+ running = false;
18997
+ }
18998
+ };
18999
+ const delay = Number(process.env.WORK_TMP_SWEEP_DELAY);
19000
+ setTimeout(() => {
19001
+ sweep();
19002
+ setInterval(() => void sweep(), SWEEP_EVERY_MS).unref?.();
19003
+ }, Number.isFinite(delay) && delay >= 0 ? delay * 1e3 : FIRST_SWEEP_MS).unref?.();
19004
+ }
19005
+ //#endregion
18688
19006
  //#region src/server/workspaces.ts
18689
19007
  /** Newest first, and never reordered by use: a row that moves as you
18690
19008
  * click or type is worse than a stale order. The nav groups rows by PR
@@ -19653,6 +19971,8 @@ function syncAgentsMd() {
19653
19971
  }
19654
19972
  function agentsMd(wsId, branch, repos, origin) {
19655
19973
  const first = repos[0]?.worktree ?? "<repo>";
19974
+ const tmpKept = tmpAge();
19975
+ const tmpLine = tmpKept === null ? "" : `\n It empties as the machine's \`/tmp\` does: whatever goes ${ageText(tmpKept)}\n untouched there is deleted.`;
19656
19976
  const repoLines = repos.map((r) => ` - \`${r.worktree}/\`: ${r.full_name}${r.default_branch === r.base_branch ? "" : ` (base: \`${r.base_branch}\`${r.default_branch ? `, default: \`${r.default_branch}\`` : ""})`}`).join("\n");
19657
19977
  const featureBase = !origin && repos.some((r) => r.default_branch && r.default_branch !== r.base_branch);
19658
19978
  const backportLine = featureBase ? ` (a backport: from \`origin/<default>\`)` : "";
@@ -19685,7 +20005,10 @@ ${repoLines}
19685
20005
  \`work topic list\` shows the open ones. \`<group>.<topic>\` folds topics
19686
20006
  into one review chip. Keep a few open per repo unless asked for a batch; a
19687
20007
  finding you won't fix gets a topic of its own. Work on files another open
19688
- branch changes goes on that branch or waits for it to merge.
20008
+ branch changes goes on that branch or waits for it to merge. One you
20009
+ abandon goes with \`work topic drop <topic>\` (never \`git branch -D\` or
20010
+ \`git worktree remove\`): it says what it discards, wants \`--yes\` for
20011
+ work no base has, and keeps the tip 30 days.
19689
20012
  - **One branch, one PR:** follow-ups to a change are more commits on its
19690
20013
  branch, PR open or not. Stack only when the user asks, or when a change of
19691
20014
  several hundred lines splits into parts each worth merging alone (never a
@@ -19707,7 +20030,8 @@ ${repoLines}
19707
20030
  follow-up and the same link shows it.
19708
20031
  - **PRs:** only when the user asks; the description is a few sentences on
19709
20032
  what changed and why, no verification logs or file lists.${independentPr}
19710
- - **After a merge** (its PR's, or yours into the branch it stacks on):
20033
+ - **After a merge** (its PR's, yours into the branch it stacks on, or its
20034
+ changes landing by other commits: squashed into another PR, cherry-picked):
19711
20035
  \`work topic done <topic> --rebase\` removes the merged topic's worktree
19712
20036
  (its branch stays; the app prunes it) and rebases the other open topics,
19713
20037
  each onto its own base (\`origin/<base>\`${featureBase ? ", a backport's `origin/<default>`" : ""}, or the branch it
@@ -19719,7 +20043,7 @@ ${repoLines}
19719
20043
  \`[login-after](/w/${wsId}/files?file=.share/<path>)\`, never a bare file
19720
20044
  name, which nothing opens (\`work open <path>\` offers it in the app too).
19721
20045
  \`.tmp/\` (your \`TMPDIR\`) is scratch the app does not list: a link to a
19722
- file there opens, but what they should keep seeing belongs in \`.share/\`.
20046
+ file there opens, but what they should keep seeing belongs in \`.share/\`.${tmpLine}
19723
20047
  Their pastes land in \`.share/pasted/\`.
19724
20048
  - **Tell the user** only what the app does not already: it notifies them when
19725
20049
  your turn ends or you are waiting on them. For news in the middle of a turn
@@ -19774,4 +20098,4 @@ ${repoLines}
19774
20098
  `;
19775
20099
  }
19776
20100
  //#endregion
19777
- export { panePids as $, agentBadge as $n, agentById as $r, startSnapSweep as $t, closedSession as A, lastTypedAt as An, WORKSPACE_PREFS as Ar, removeServer as At, killWorkspaceSessions as B, onPhaseChange as Bn, setDisabledAgents as Br, refreshGithub as Bt, workspaceBranches as C, config as Ci, realInside as Cn, ensureGitCredentials as Cr, addCustomServer as Ct, beginCreation as D, hookPhase as Dn, removeHost as Dr, installKey as Dt, agentCaller as E, clearAgentPhase as En, normalizeHost as Er, forgetProbes as Et, ensureTmuxServer as F, noteTurnFailed as Fn, disabledAgents as Fr, authGithub as Ft, markTmuxStarted as G, setExpecting as Gn, ghKnownHosts as Gr, patchIn as Gt, listPanes as H, onTurnFailed as Hn, setSetting as Hr, runStreaming as Ht, forgetPanes as I, noteTyped as In, enabledAgents as Ir, installAgent as It, noteConversation as J, settleQuietWorking as Jn, which as Jr, reviewWaiting as Jt, moveSession as K, setScrapedPhase as Kn, miseInstalls as Kr, readBlobAt as Kt, getSession as L, noteUserAnswered as Ln, getSetting as Lr, installMise as Lt, creationOf as M, noteBackground as Mn, allPrefs as Mr, serverList as Mt, descendantsOf as N, noteInterrupt as Nn, changePref as Nr, sharing as Nt, cleanEnv as O, hookReportedAt as On, unreachableRepos as Or, installServer as Ot, disposeSessions as P, notePermissionMode as Pn, deleteSetting as Pr, whileInstalling as Pt, paneJobs as Q, turnSince as Qn, TOOLS as Qr, setPoints as Qt, interruptSession as R, notifyEventOn as Rn, isKnownAgent as Rr, installTool as Rt, withProgressOp as S, tmux as Si, inside as Sn, configuredHosts as Sr, stopServers as St, hookToken as T, withLock as Ti, agentPhase as Tn, isValidHost as Tr, forgetCustomServer as Tt, listPanesWithin as U, sessionWatched as Un, discoverAgents as Ur, updateTool as Ut, launchDir as V, onTurnEnd as Vn, setPref as Vr, removeTool as Vt, listSessions as W, setAgentPhase as Wn, doctor as Wr, fileChanges as Wt, onSessionDispose as X, turnPhase as Xn, firewallProbe as Xr, workspaceDiff as Xt, notifySessionsChanged as Y, summaryOf as Yn, bornOut as Yr, withinBudget as Yt, ownWorkspaceOnly as Z, turnSettling as Zn, PROJECT_TOOLS as Zr, workspaceSections as Zt, retryMaterialize as _, workspacePath as _i, blankRow as _n, repoBranches as _r, lspQueryOf as _t, ensureUntrackedCache as a, FRAME_ANCESTORS as ai, hotBatchMinMs as an, getInstance as ar, retireSession as at, sweepTrash as b, TMUX_SOCKET as bi, writeCache as bn, DEFAULT_HOST as br, runningServers as bt, insertPendingWorkspace as c, httpError as ci, withoutDismissed as cn, normalizeAccent as cr, sessionStates as ct, progress as d, publishJson as di, AGENTS as dn, pushPublicKey as dr, killWorkspaceProc as dt, agentLabel$1 as ei, diffStamp as en, agentFamily as er, pasteToSession as et, progressSince as f, subscribe as fi, interruptKeys as fn, saveSubscription as fr, portsByWorkspace as ft, resumePendingWorkspaces as g, get as gi, steerKeys as gn, pendingSsoOrgs as gr, lspQuery as gt, removeRepo as h, db as hi, reportsWorking as hn, headOid as hr, lspDiagnostics as ht, deleteWorkspace as i, applyPrefChange as ii, dismissPr as in, ACCENT_RE as ir, restartSession as it, createSession as j, noteActivity$1 as jn, agentChoices as jr, serverById as jt, clearTmuxStarted as k, interruptedSinceReport as kn, PREF_MAX as kr, lspEnabled as kt, listWorkspaces as l, readBody as li, workspacePrs as ln, setInstance as lr, tmuxName as lt, queueMaterialize as m, all as mi, readHookPayload as mn, validSubscription as mr, killServers as mt, barePath as n, parseAgentId as ni, markBranch as nn, agentLabel as nr, reopenSession as nt, gcBares as o, FRAME_HEADERS as oi, notePushActivity as on, iconSvg as or, sendToSession as ot, pruneLaneBranch as p, subscriberCount as pi, quotesPastes as pn, sendPush as pr, workspaceProcs as pt, newSessionArgs as q, setSessionViewers as qn, miseVersions as qr, readFileAt as qt, createWorkspace as r, toolById as ri, sectionFor as rn, agentMeta as rr, reopenable as rt, getWorkspace as s, checked as si, refreshPrsBatch as sn, manifest as sr, sessionInfo as st, addRepo as t, catalogPin as ti, commentFolder as tn, agentFromCommand as tr, renameSession as tt, otherWorkspaceBranches as u, publish as ui, noteActivity as un, deleteSubscription as ur, tmuxWasStarted as ut, revParse as v, ownsBranchOf as vi, credentialStamp as vn, repoCatalog as vr, lspUses as vt, ensureAllPushHooks as w, swr as wi, activityOf as wn, forgetToken as wr, allServers as wt, syncAgentsMd as x, git as xi, cleanSummary as xn, addHost as xr, stopAllServers as xt, setWorkspaceStatus as y, ensureAllCacheConfig as yi, readCache as yn, repoDefaultBranch as yr, lspWarm as yt, killSession as z, onFinished as zn, preferredAgent as zr, logoutGithub as zt };
20101
+ export { paneJobs as $, turnSince as $n, TOOLS as $r, setPoints as $t, clearTmuxStarted as A, interruptedSinceReport as An, PREF_MAX as Ar, lspEnabled as At, killSession as B, onFinished as Bn, preferredAgent as Br, logoutGithub as Bt, workspaceBranches as C, git as Ci, inside as Cn, configuredHosts as Cr, stopServers as Ct, agentCaller as D, withLock as Di, clearAgentPhase as Dn, normalizeHost as Dr, forgetProbes as Dt, hookToken as E, swr as Ei, agentPhase as En, isValidHost as Er, forgetCustomServer as Et, disposeSessions as F, notePermissionMode as Fn, deleteSetting as Fr, whileInstalling as Ft, listSessions as G, setAgentPhase as Gn, doctor as Gr, fileChanges as Gt, launchDir as H, onTurnEnd as Hn, setPref as Hr, removeTool as Ht, ensureTmuxServer as I, noteTurnFailed as In, disabledAgents as Ir, authGithub as It, newSessionArgs as J, setSessionViewers as Jn, miseVersions as Jr, readFileAt as Jt, markTmuxStarted as K, setExpecting as Kn, ghKnownHosts as Kr, patchIn as Kt, forgetPanes as L, noteTyped as Ln, enabledAgents as Lr, installAgent as Lt, createSession as M, noteActivity$1 as Mn, agentChoices as Mr, serverById as Mt, creationOf as N, noteBackground as Nn, allPrefs as Nr, serverList as Nt, beginCreation as O, hookPhase as On, removeHost as Or, installKey as Ot, descendantsOf as P, noteInterrupt as Pn, changePref as Pr, sharing as Pt, ownWorkspaceOnly as Q, turnSettling as Qn, PROJECT_TOOLS as Qr, workspaceSections as Qt, getSession as R, noteUserAnswered as Rn, getSetting as Rr, installMise as Rt, withProgressOp as S, TMUX_SOCKET as Si, cleanSummary as Sn, addHost as Sr, stopAllServers as St, ensureAllPushHooks as T, config as Ti, activityOf as Tn, forgetToken as Tr, allServers as Tt, listPanes as U, onTurnFailed as Un, setSetting as Ur, runStreaming as Ut, killWorkspaceSessions as V, onPhaseChange as Vn, setDisabledAgents as Vr, refreshGithub as Vt, listPanesWithin as W, sessionWatched as Wn, discoverAgents as Wr, updateTool as Wt, notifySessionsChanged as X, summaryOf as Xn, bornOut as Xr, withinBudget as Xt, noteConversation as Y, settleQuietWorking as Yn, which as Yr, reviewWaiting as Yt, onSessionDispose as Z, turnPhase as Zn, firewallProbe as Zr, workspaceDiff as Zt, retryMaterialize as _, get as _i, steerKeys as _n, pendingSsoOrgs as _r, lspQuery as _t, ensureUntrackedCache as a, applyPrefChange as ai, dismissPr as an, ACCENT_RE as ar, restartSession as at, sweepTrash as b, ensureAllCacheConfig as bi, readCache as bn, repoDefaultBranch as br, lspWarm as bt, insertPendingWorkspace as c, checked as ci, refreshPrsBatch as cn, manifest as cr, sessionInfo as ct, progress as d, publish as di, noteActivity as dn, deleteSubscription as dr, tmuxWasStarted as dt, agentById as ei, startSnapSweep as en, agentBadge as er, panePids as et, progressSince as f, publishJson as fi, AGENTS as fn, pushPublicKey as fr, killWorkspaceProc as ft, resumePendingWorkspaces as g, db as gi, reportsWorking as gn, headOid as gr, lspDiagnostics as gt, removeRepo as h, all as hi, readHookPayload as hn, validSubscription as hr, killServers as ht, deleteWorkspace as i, toolById as ii, sectionFor as in, agentMeta as ir, reopenable as it, closedSession as j, lastTypedAt as jn, WORKSPACE_PREFS as jr, removeServer as jt, cleanEnv as k, hookReportedAt as kn, unreachableRepos as kr, installServer as kt, listWorkspaces as l, httpError as li, withoutDismissed as ln, normalizeAccent as lr, sessionStates as lt, queueMaterialize as m, subscriberCount as mi, quotesPastes as mn, sendPush as mr, workspaceProcs as mt, barePath as n, catalogPin as ni, commentFolder as nn, agentFromCommand as nr, renameSession as nt, gcBares as o, FRAME_ANCESTORS as oi, hotBatchMinMs as on, getInstance as or, retireSession as ot, pruneLaneBranch as p, subscribe as pi, interruptKeys as pn, saveSubscription as pr, portsByWorkspace as pt, moveSession as q, setScrapedPhase as qn, miseInstalls as qr, readBlobAt as qt, createWorkspace as r, parseAgentId as ri, markBranch as rn, agentLabel as rr, reopenSession as rt, getWorkspace as s, FRAME_HEADERS as si, notePushActivity as sn, iconSvg as sr, sendToSession as st, addRepo as t, agentLabel$1 as ti, diffStamp as tn, agentFamily as tr, pasteToSession as tt, otherWorkspaceBranches as u, readBody as ui, workspacePrs as un, setInstance as ur, tmuxName as ut, revParse as v, workspacePath as vi, blankRow as vn, repoBranches as vr, lspQueryOf as vt, startTmpSweep as w, tmux as wi, realInside as wn, ensureGitCredentials as wr, addCustomServer as wt, syncAgentsMd as x, SCRATCH_TMUX as xi, writeCache as xn, DEFAULT_HOST as xr, runningServers as xt, setWorkspaceStatus as y, ownsBranchOf as yi, credentialStamp as yn, repoCatalog as yr, lspUses as yt, interruptSession as z, notifyEventOn as zn, isKnownAgent as zr, installTool as zt };
@@ -0,0 +1,2 @@
1
+ import { X as notifySessionsChanged } from "./_DK0sGNuL.js";
2
+ export { notifySessionsChanged };