@dylanpiercey/work 0.2.69 → 0.2.71

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 (497) hide show
  1. package/bin/cli/session.mjs +36 -4
  2. package/bin/cli/topic.mjs +421 -23
  3. package/dist/{_Da7kjbAP.js → _B3z3x0nb.js} +100 -11
  4. package/dist/_BawMVLA9.js +2 -0
  5. package/dist/{_DDCmzS5h.js → _BcuBHot2.js} +113 -113
  6. package/dist/_D3ixWlKr.js +2 -0
  7. package/dist/{_CilTmd3l.js → _DHaRHB4s.js} +237 -36
  8. package/dist/index.mjs +1225 -1098
  9. package/dist/public/assets/{_DIEqAzJB.js → _-JtZtVz8.js} +1 -1
  10. package/dist/public/assets/_-JtZtVz8.js.br +0 -0
  11. package/dist/public/assets/{_DeGJuali.js → _0QJDM3NO.js} +1 -1
  12. package/dist/public/assets/_0QJDM3NO.js.br +0 -0
  13. package/dist/public/assets/{_BiIrl8ml.js → _0vqLbImj.js} +1 -1
  14. package/dist/public/assets/_0vqLbImj.js.br +0 -0
  15. package/dist/public/assets/_2W-pgjXX.js +1 -0
  16. package/dist/public/assets/{_ZlbOPzr7.js → _4ogr0vzb.js} +1 -1
  17. package/dist/public/assets/_4ogr0vzb.js.br +0 -0
  18. package/dist/public/assets/{_wC0cYIUL.js → _5lt7STSU.js} +10 -10
  19. package/dist/public/assets/_5lt7STSU.js.br +0 -0
  20. package/dist/public/assets/{_DPKcpw43.js → _6D14OK7z.js} +1 -1
  21. package/dist/public/assets/_6D14OK7z.js.br +0 -0
  22. package/dist/public/assets/{_BnDvb8rh.js → _9D7sZPkr.js} +1 -1
  23. package/dist/public/assets/_9D7sZPkr.js.br +0 -0
  24. package/dist/public/assets/{_w3JsvUod.js → _Alp3-sd6.js} +1 -1
  25. package/dist/public/assets/_B0CqgYFf.js +1 -0
  26. package/dist/public/assets/{_DLoAVrbv.js → _B0sUN2tx.js} +1 -1
  27. package/dist/public/assets/_B0sUN2tx.js.br +0 -0
  28. package/dist/public/assets/_B1KbLd5h.js +1 -0
  29. package/dist/public/assets/{_D4XHSL1o.js → _B5SjUyop.js} +1 -1
  30. package/dist/public/assets/_B5SjUyop.js.br +0 -0
  31. package/dist/public/assets/_B7FCBIYG.js +1 -0
  32. package/dist/public/assets/_B7FCBIYG.js.br +0 -0
  33. package/dist/public/assets/_B9G7-El7.js +1 -0
  34. package/dist/public/assets/_BDNW7Ugd.js +1 -0
  35. package/dist/public/assets/{_G0Ur49hc.js → _BGXJVx0k.js} +1 -1
  36. package/dist/public/assets/_BGXJVx0k.js.br +0 -0
  37. package/dist/public/assets/{_HnJD2Vzo.js → _BHypHLzv.js} +1 -1
  38. package/dist/public/assets/_BHypHLzv.js.br +0 -0
  39. package/dist/public/assets/{_YTVYw9XV.js → _BJ0RWeiG.js} +1 -1
  40. package/dist/public/assets/_BJ0RWeiG.js.br +0 -0
  41. package/dist/public/assets/{_D-pAxlQ-.js → _BLALkhiZ.js} +4 -4
  42. package/dist/public/assets/_BLALkhiZ.js.br +0 -0
  43. package/dist/public/assets/_BMNhhqEV.js +1 -0
  44. package/dist/public/assets/{_C3k75NG8.js → _BPHBcrYh.js} +1 -1
  45. package/dist/public/assets/_BPHBcrYh.js.br +0 -0
  46. package/dist/public/assets/{_KtT9ovgB.js → _BPoePslg.js} +1 -1
  47. package/dist/public/assets/_BPoePslg.js.br +0 -0
  48. package/dist/public/assets/{_B5QrsHwd.js → _BQuf46P2.js} +1 -1
  49. package/dist/public/assets/_BQuf46P2.js.br +0 -0
  50. package/dist/public/assets/_BTydwZJh.js +1 -0
  51. package/dist/public/assets/{_CLpJpkGL.js → _BUbGYrKa.js} +1 -1
  52. package/dist/public/assets/_BUbGYrKa.js.br +0 -0
  53. package/dist/public/assets/{_Dh_fGh7B.js → _BUh4HTF3.js} +1 -1
  54. package/dist/public/assets/_BUh4HTF3.js.br +0 -0
  55. package/dist/public/assets/{_DE5SUDS8.js → _BVXZCAXs.js} +1 -1
  56. package/dist/public/assets/_BVXZCAXs.js.br +0 -0
  57. package/dist/public/assets/_BWBW2sE5.js +1 -0
  58. package/dist/public/assets/_BXgfsaug.js +1 -0
  59. package/dist/public/assets/_BXgfsaug.js.br +0 -0
  60. package/dist/public/assets/_BZycN9ye.js +1 -0
  61. package/dist/public/assets/_BaQeAF-B.js +1 -0
  62. package/dist/public/assets/_BhA6H8WQ.js +1 -0
  63. package/dist/public/assets/_BikFQJva.js +1 -0
  64. package/dist/public/assets/_Bk0YJ7b1.js +1 -0
  65. package/dist/public/assets/{_DcCeapFB.js → _BlSH3TRK.js} +1 -1
  66. package/dist/public/assets/_BlSH3TRK.js.br +0 -0
  67. package/dist/public/assets/_BqSnw21E.js +1 -0
  68. package/dist/public/assets/{_DdWxi_D9.js → _BtWMgvvl.js} +2 -2
  69. package/dist/public/assets/_BtWMgvvl.js.br +0 -0
  70. package/dist/public/assets/{_5pKDjgHs.js → _BvskbvTW.js} +1 -1
  71. package/dist/public/assets/_BvskbvTW.js.br +0 -0
  72. package/dist/public/assets/{_rizgJsHK.js → _Bx8oVkmQ.js} +1 -1
  73. package/dist/public/assets/_Bx8oVkmQ.js.br +0 -0
  74. package/dist/public/assets/_BxPoJO_L.js +1 -0
  75. package/dist/public/assets/{_BH9u6x7L.js → _C09HUxcS.js} +1 -1
  76. package/dist/public/assets/_C09HUxcS.js.br +0 -0
  77. package/dist/public/assets/_C14PL76N.js +1 -0
  78. package/dist/public/assets/{_3jDFL-Cg.js → _C15TsQVx.js} +1 -1
  79. package/dist/public/assets/_C15TsQVx.js.br +0 -0
  80. package/dist/public/assets/_C1bNeWUD.js +1 -0
  81. package/dist/public/assets/{_B9OVFXEI.js → _C2IlBo8e.js} +1 -1
  82. package/dist/public/assets/_C2IlBo8e.js.br +0 -0
  83. package/dist/public/assets/{_lCk1CAYf.js → _C3F6fdUB.js} +1 -1
  84. package/dist/public/assets/_C5KZ0ozw.js +1 -0
  85. package/dist/public/assets/_C5KZ0ozw.js.br +0 -0
  86. package/dist/public/assets/_C94IJ4uX.js +1 -0
  87. package/dist/public/assets/_CCRiWfSo.js +1 -0
  88. package/dist/public/assets/{_CUPYyx5O.js → _CCl1txGr.js} +1 -1
  89. package/dist/public/assets/{_TOwFHHoM.js → _CDHWB_us.js} +1 -1
  90. package/dist/public/assets/_CDHWB_us.js.br +0 -0
  91. package/dist/public/assets/_CE-UlWde.js +1 -0
  92. package/dist/public/assets/{_BJcqxD6V.js → _CEgYI4gj.js} +1 -1
  93. package/dist/public/assets/_CEgYI4gj.js.br +0 -0
  94. package/dist/public/assets/_CI9y5SMD.js +1 -0
  95. package/dist/public/assets/_CLrYkY55.js +1 -0
  96. package/dist/public/assets/{_C4Hln-a1.js → _CPTaxuJG.js} +1 -1
  97. package/dist/public/assets/_CPTaxuJG.js.br +0 -0
  98. package/dist/public/assets/_CQKcBCsl.js +1 -0
  99. package/dist/public/assets/{_9PIiwVmz.js → _CQuARfyY.js} +1 -1
  100. package/dist/public/assets/_CQuARfyY.js.br +0 -0
  101. package/dist/public/assets/_CRdqojLF.js +1 -0
  102. package/dist/public/assets/{_B0tb8Vgp.js → _CRew7lgJ.js} +1 -1
  103. package/dist/public/assets/_CRew7lgJ.js.br +0 -0
  104. package/dist/public/assets/_CS11TygF.js +1 -0
  105. package/dist/public/assets/{_kHV7j6Zv.js → _CS9qmTkt.js} +1 -1
  106. package/dist/public/assets/_CS9qmTkt.js.br +0 -0
  107. package/dist/public/assets/_CSSixb56.js +1 -0
  108. package/dist/public/assets/_CSa_w7tA.js +86 -0
  109. package/dist/public/assets/_CSa_w7tA.js.br +0 -0
  110. package/dist/public/assets/_CTbIErzd.js +1 -0
  111. package/dist/public/assets/_CTbIErzd.js.br +0 -0
  112. package/dist/public/assets/_CXf2VxeD.js +1 -0
  113. package/dist/public/assets/{_BciKbAaO.js → _CYHURCb7.js} +1 -1
  114. package/dist/public/assets/_CYHURCb7.js.br +0 -0
  115. package/dist/public/assets/_C_vPuVhA.js +1 -0
  116. package/dist/public/assets/_Cajx7i0I.js +1 -0
  117. package/dist/public/assets/{_B1rg6S37.js → _Cb-D3ERI.js} +1 -1
  118. package/dist/public/assets/_Cb-D3ERI.js.br +0 -0
  119. package/dist/public/assets/_Cc8Hhqep.js +1 -0
  120. package/dist/public/assets/{_CbAa5uAw.js → _Ce6hwXny.js} +1 -1
  121. package/dist/public/assets/_Ce6hwXny.js.br +0 -0
  122. package/dist/public/assets/_CeSD_6xP.js +1 -0
  123. package/dist/public/assets/_CfFIePkk.js +1 -0
  124. package/dist/public/assets/_CfUhSwyu.js +1 -0
  125. package/dist/public/assets/_CfziTCiN.js +1 -0
  126. package/dist/public/assets/_Ci7l0V_h.js +1 -0
  127. package/dist/public/assets/{_ByZbJftZ.js → _Cif8YVIW.js} +1 -1
  128. package/dist/public/assets/_Cif8YVIW.js.br +0 -0
  129. package/dist/public/assets/_CjI_b19m.js +1 -0
  130. package/dist/public/assets/{_DUEm1sqD.js → _CjT2-NNY.js} +1 -1
  131. package/dist/public/assets/_CjT2-NNY.js.br +0 -0
  132. package/dist/public/assets/_Cjromvor.js +1 -0
  133. package/dist/public/assets/{_l9Ig5EJO.js → _CmcVar5g.js} +1 -1
  134. package/dist/public/assets/_CmcVar5g.js.br +0 -0
  135. package/dist/public/assets/_Cof8T6gT.js +1 -0
  136. package/dist/public/assets/{_BICdCzpd.js → _CreV-6z6.js} +1 -1
  137. package/dist/public/assets/_CreV-6z6.js.br +0 -0
  138. package/dist/public/assets/_CsKkccjn.js +1 -0
  139. package/dist/public/assets/{_CXhoovwf.js → _CsnlIPmX.js} +1 -1
  140. package/dist/public/assets/_CsnlIPmX.js.br +0 -0
  141. package/dist/public/assets/_CsxBH5UX.js +1 -0
  142. package/dist/public/assets/{_CtYn_7Ld.js → _CvrDFzmP.js} +1 -1
  143. package/dist/public/assets/_CvrDFzmP.js.br +0 -0
  144. package/dist/public/assets/{_CRAhvbwb.js → _CwAvlnWz.js} +1 -1
  145. package/dist/public/assets/_CwAvlnWz.js.br +0 -0
  146. package/dist/public/assets/{_DJVQZQI-.js → _CwBNy_7k.js} +1 -1
  147. package/dist/public/assets/_CwBNy_7k.js.br +0 -0
  148. package/dist/public/assets/{_BMXY56L9.js → _Cx0sSSLJ.js} +1 -1
  149. package/dist/public/assets/_Cx0sSSLJ.js.br +0 -0
  150. package/dist/public/assets/_CxyaZiJz.js +1 -0
  151. package/dist/public/assets/{_BSyW2RLw.js → _D-4UJozU.js} +1 -1
  152. package/dist/public/assets/_D-4UJozU.js.br +0 -0
  153. package/dist/public/assets/{_Coj9l4W_.js → _D0PrCOmg.js} +1 -1
  154. package/dist/public/assets/_D0PrCOmg.js.br +0 -0
  155. package/dist/public/assets/{_LsFmgSj_.js → _D0n_5okc.js} +1 -1
  156. package/dist/public/assets/_D0n_5okc.js.br +0 -0
  157. package/dist/public/assets/{_aVJfol8S.js → _D1ZTqBtg.js} +1 -1
  158. package/dist/public/assets/_D1ZTqBtg.js.br +0 -0
  159. package/dist/public/assets/_D2m31-DG.js +1 -0
  160. package/dist/public/assets/_D2vTqjKk.js +1 -0
  161. package/dist/public/assets/{_DxgeJa1G.js → _D2zuXOi5.js} +1 -1
  162. package/dist/public/assets/_D2zuXOi5.js.br +0 -0
  163. package/dist/public/assets/{_BoRNFqwj.js → _D3mGPwaD.js} +1 -1
  164. package/dist/public/assets/{_DmBJQY0z.js → _D4SspWzi.js} +1 -1
  165. package/dist/public/assets/_D4SspWzi.js.br +0 -0
  166. package/dist/public/assets/_D8BYyk4L.js +1 -0
  167. package/dist/public/assets/_D8c2vqae.js +1 -0
  168. package/dist/public/assets/{_SkNT3g1t.js → _D93e76eJ.js} +1 -1
  169. package/dist/public/assets/_D93e76eJ.js.br +0 -0
  170. package/dist/public/assets/{_a3BQDAxj.js → _DB0x3S_V.js} +1 -1
  171. package/dist/public/assets/_DB0x3S_V.js.br +0 -0
  172. package/dist/public/assets/{_CiYp9PxT.js → _DBqiCvB3.js} +1 -1
  173. package/dist/public/assets/_DBqiCvB3.js.br +0 -0
  174. package/dist/public/assets/_DDPfcBYW.js +1 -0
  175. package/dist/public/assets/_DE7f6G-4.js +1 -0
  176. package/dist/public/assets/_DFc8nVyA.js +1 -0
  177. package/dist/public/assets/_DGNNG6hE.js +1 -0
  178. package/dist/public/assets/{_BiIQdsrx.js → _DI_3CxxT.js} +1 -1
  179. package/dist/public/assets/_DKaZoJEU.js +1 -0
  180. package/dist/public/assets/_DPCcVPqS.js +1 -0
  181. package/dist/public/assets/{_BUPTpTYH.js → _DPO20UhE.js} +1 -1
  182. package/dist/public/assets/_DPO20UhE.js.br +0 -0
  183. package/dist/public/assets/_DQ9KMZkg.js +1 -0
  184. package/dist/public/assets/_DQfR4nGA.js +1 -0
  185. package/dist/public/assets/_DRl7_NsH.js +1 -0
  186. package/dist/public/assets/_DSjKT54G.js +1 -0
  187. package/dist/public/assets/{_B-cgAjqV.js → _DUQ4-DAq.js} +1 -1
  188. package/dist/public/assets/_DUQ4-DAq.js.br +0 -0
  189. package/dist/public/assets/{_ulL_yezz.js → _DVUACl-0.js} +1 -1
  190. package/dist/public/assets/_DVUACl-0.js.br +0 -0
  191. package/dist/public/assets/_DVaVJl4U.js +1 -0
  192. package/dist/public/assets/{_C1EEKbbh.js → _DWJFJSQt.js} +1 -1
  193. package/dist/public/assets/_DWJFJSQt.js.br +0 -0
  194. package/dist/public/assets/{_zGawNqPU.js → _DW_3eCmy.js} +1 -1
  195. package/dist/public/assets/_DW_3eCmy.js.br +0 -0
  196. package/dist/public/assets/_DWcr4WT2.js +1 -0
  197. package/dist/public/assets/_D_uqbH0s.js +1 -0
  198. package/dist/public/assets/_Db3LFxDp.js +1 -0
  199. package/dist/public/assets/{_D9-mnhpM.js → _DcKVJllO.js} +1 -1
  200. package/dist/public/assets/_DcKVJllO.js.br +0 -0
  201. package/dist/public/assets/_De55CP4F.js +1 -0
  202. package/dist/public/assets/{_CEzgbnFo.js → _DglTnOtH.js} +1 -1
  203. package/dist/public/assets/_DglTnOtH.js.br +0 -0
  204. package/dist/public/assets/_DhyrSLt_.js +1 -0
  205. package/dist/public/assets/_DishjoMc.js +1 -0
  206. package/dist/public/assets/_DlHs_b1x.js +1 -0
  207. package/dist/public/assets/{_C23aBO0p.js → _DmlL12SP.js} +1 -1
  208. package/dist/public/assets/_DmlL12SP.js.br +0 -0
  209. package/dist/public/assets/{_B40fHLkj.js → _Dnj7y5O6.js} +1 -1
  210. package/dist/public/assets/_Dnj7y5O6.js.br +0 -0
  211. package/dist/public/assets/_DqB9AEIR.js +1 -0
  212. package/dist/public/assets/_DqmZjpyA.js +1 -0
  213. package/dist/public/assets/_DrC0PHwd.js +1 -0
  214. package/dist/public/assets/_DrtDlCCB.js +1 -0
  215. package/dist/public/assets/{_Dv298HDL.js → _DsxZHqAt.js} +1 -1
  216. package/dist/public/assets/_DsxZHqAt.js.br +0 -0
  217. package/dist/public/assets/{_B_zlRrUP.js → _DucELdm1.js} +1 -1
  218. package/dist/public/assets/_DucELdm1.js.br +0 -0
  219. package/dist/public/assets/{_CKvOm2QG.js → _Dw2w_cI1.js} +1 -1
  220. package/dist/public/assets/_Dw2w_cI1.js.br +0 -0
  221. package/dist/public/assets/{_C0W4EC0Z.js → _Dx2nYKAs.js} +1 -1
  222. package/dist/public/assets/_Dx2nYKAs.js.br +0 -0
  223. package/dist/public/assets/{_gy0a9Cmp.js → _DxZFU6SY.js} +1 -1
  224. package/dist/public/assets/_DxZFU6SY.js.br +0 -0
  225. package/dist/public/assets/_DyztCqYX.js +1 -0
  226. package/dist/public/assets/_Dz42MOZj.js +1 -0
  227. package/dist/public/assets/{_CsNZdkZU.js → _DzSNrU-9.js} +1 -1
  228. package/dist/public/assets/_DzSNrU-9.js.br +0 -0
  229. package/dist/public/assets/{_BORTVznS.js → _HnLpRxna.js} +2 -2
  230. package/dist/public/assets/_HnLpRxna.js.br +0 -0
  231. package/dist/public/assets/{_0H09AGax.js → _Im1dFxR8.js} +1 -1
  232. package/dist/public/assets/_Im1dFxR8.js.br +0 -0
  233. package/dist/public/assets/_ImlHzwYY.js +1 -0
  234. package/dist/public/assets/_J-P8YHmV.js +1 -0
  235. package/dist/public/assets/_KsdD4dsM.js +1 -0
  236. package/dist/public/assets/_KsdD4dsM.js.br +0 -0
  237. package/dist/public/assets/_LRjlRqrU.js +7 -0
  238. package/dist/public/assets/_LRjlRqrU.js.br +0 -0
  239. package/dist/public/assets/_LTl-SYyD.js +1 -0
  240. package/dist/public/assets/{_Cw9GxBkQ.js → _LniUny_a.js} +1 -1
  241. package/dist/public/assets/_LniUny_a.js.br +0 -0
  242. package/dist/public/assets/_Oup4mCuX.js +1 -0
  243. package/dist/public/assets/{_DuKrnKV2.js → _R3Kvmve2.js} +1 -1
  244. package/dist/public/assets/_R3Kvmve2.js.br +0 -0
  245. package/dist/public/assets/{_Cw3MnPjo.js → _R7YbF1yw.js} +1 -1
  246. package/dist/public/assets/_R7YbF1yw.js.br +0 -0
  247. package/dist/public/assets/{_CDG0zRut.js → _S9Qy4Cmi.js} +1 -1
  248. package/dist/public/assets/_S9Qy4Cmi.js.br +0 -0
  249. package/dist/public/assets/{_BF2_gMS8.js → _ShiWFlWr.js} +1 -1
  250. package/dist/public/assets/_ShiWFlWr.js.br +0 -0
  251. package/dist/public/assets/{_CDPOV9zA.js → _TLB-Nq6Z.js} +1 -1
  252. package/dist/public/assets/_TLB-Nq6Z.js.br +0 -0
  253. package/dist/public/assets/_YcOZiOZ4.js +2 -0
  254. package/dist/public/assets/_YcOZiOZ4.js.br +0 -0
  255. package/dist/public/assets/_YjSW_ahw.js +1 -0
  256. package/dist/public/assets/_c9iXcb5V.js +1 -0
  257. package/dist/public/assets/{_T32b15Ve.js → _dSWMMogH.js} +1 -1
  258. package/dist/public/assets/_dSWMMogH.js.br +0 -0
  259. package/dist/public/assets/_dp0lBRTw.js +1 -0
  260. package/dist/public/assets/_etOTb_Um.js +1 -0
  261. package/dist/public/assets/{_DmISa8wc.js → _fZ9Nn0aY.js} +1 -1
  262. package/dist/public/assets/_fZ9Nn0aY.js.br +0 -0
  263. package/dist/public/assets/_h3o298tf.js +1 -0
  264. package/dist/public/assets/_iTnQEpuR.js +1 -0
  265. package/dist/public/assets/{_BWwfOfMX.js → _ii--A0F-.js} +1 -1
  266. package/dist/public/assets/_ii--A0F-.js.br +0 -0
  267. package/dist/public/assets/{_BZhRz8TB.js → _ixsF2ttz.js} +1 -1
  268. package/dist/public/assets/_ixsF2ttz.js.br +0 -0
  269. package/dist/public/assets/_kQ2OAVME.js +1 -0
  270. package/dist/public/assets/{_fBJXUlyl.js → _l71VhzhS.js} +1 -1
  271. package/dist/public/assets/_l71VhzhS.js.br +0 -0
  272. package/dist/public/assets/{_CY7Wr_6h.js → _ptpihSzL.js} +1 -1
  273. package/dist/public/assets/_ptpihSzL.js.br +0 -0
  274. package/dist/public/assets/{_B6Zw_zoM.js → _suQAT3jW.js} +1 -1
  275. package/dist/public/assets/_suQAT3jW.js.br +0 -0
  276. package/dist/public/assets/{_Bdq41ArX.js → _t5-hsdI5.js} +1 -1
  277. package/dist/public/assets/_t5-hsdI5.js.br +0 -0
  278. package/dist/public/assets/{_CAN3Gwlo.js → _tEBqbfOJ.js} +1 -1
  279. package/dist/public/assets/_tEBqbfOJ.js.br +0 -0
  280. package/dist/public/assets/{_C3La6EyV.js → _vy4Y1hd_.js} +1 -1
  281. package/dist/public/assets/_vy4Y1hd_.js.br +0 -0
  282. package/dist/public/assets/{_CKNilRtP.js → _x7Lebeio.js} +1 -1
  283. package/dist/public/assets/_x7Lebeio.js.br +0 -0
  284. package/dist/public/assets/_z3J861v3.js +1 -0
  285. package/dist/public/assets/files-view-DyuIyBwJ.js +2 -0
  286. package/dist/public/assets/manage-workspace-CtSdSPLU.js +2 -0
  287. package/dist/public/assets/new-ClUAGfpX.js +1 -0
  288. package/dist/public/assets/new-workspace-BLb55_cv.js +2 -0
  289. package/dist/public/assets/review-view-BhRXZEwU.js +2 -0
  290. package/dist/public/assets/settings-ClUAGfpX.js +1 -0
  291. package/dist/public/assets/settings-page-CTit2PgC.js +2 -0
  292. package/dist/public/assets/styles-C4hTgteh.css +1 -0
  293. package/dist/public/assets/styles-C4hTgteh.css.br +0 -0
  294. package/dist/public/assets/w-ClUAGfpX.js +1 -0
  295. package/dist/public/assets/w._-ClUAGfpX.js +1 -0
  296. package/dist/public/assets/w._-CtbjyBu3.js +1 -0
  297. package/dist/public/assets/w._-D5ZiKvyZ.js +1 -0
  298. package/package.json +1 -1
  299. package/dist/_BkRvQO5r.js +0 -2
  300. package/dist/_C29NgtBI.js +0 -2
  301. package/dist/public/assets/_-EmIcUKk.js +0 -1
  302. package/dist/public/assets/_-Zp0T_lO.js +0 -1
  303. package/dist/public/assets/_0H09AGax.js.br +0 -0
  304. package/dist/public/assets/_3jDFL-Cg.js.br +0 -0
  305. package/dist/public/assets/_42tHqFp1.js +0 -1
  306. package/dist/public/assets/_43jDY_uH.js +0 -1
  307. package/dist/public/assets/_5pKDjgHs.js.br +0 -0
  308. package/dist/public/assets/_73JN1my-.js +0 -1
  309. package/dist/public/assets/_7X0H8kL8.js +0 -1
  310. package/dist/public/assets/_9PIiwVmz.js.br +0 -0
  311. package/dist/public/assets/_Ag37ZLrV.js +0 -1
  312. package/dist/public/assets/_B-cgAjqV.js.br +0 -0
  313. package/dist/public/assets/_B0YQ-oFW.js +0 -1
  314. package/dist/public/assets/_B0tb8Vgp.js.br +0 -0
  315. package/dist/public/assets/_B1fJukJK.js +0 -1
  316. package/dist/public/assets/_B1rg6S37.js.br +0 -0
  317. package/dist/public/assets/_B40fHLkj.js.br +0 -0
  318. package/dist/public/assets/_B4a1Ga-C.js +0 -1
  319. package/dist/public/assets/_B5QrsHwd.js.br +0 -0
  320. package/dist/public/assets/_B6Gi_-aO.js +0 -1
  321. package/dist/public/assets/_B6Zw_zoM.js.br +0 -0
  322. package/dist/public/assets/_B7FUbkdd.js +0 -1
  323. package/dist/public/assets/_B9OVFXEI.js.br +0 -0
  324. package/dist/public/assets/_BAxxcUnT.js +0 -1
  325. package/dist/public/assets/_BBVcNRD6.js +0 -1
  326. package/dist/public/assets/_BCO2lKSr.js +0 -1
  327. package/dist/public/assets/_BF2_gMS8.js.br +0 -0
  328. package/dist/public/assets/_BH9u6x7L.js.br +0 -0
  329. package/dist/public/assets/_BHyPBbeA.js +0 -1
  330. package/dist/public/assets/_BICdCzpd.js.br +0 -0
  331. package/dist/public/assets/_BJcqxD6V.js.br +0 -0
  332. package/dist/public/assets/_BKsJcK3w.js +0 -1
  333. package/dist/public/assets/_BMXY56L9.js.br +0 -0
  334. package/dist/public/assets/_BORTVznS.js.br +0 -0
  335. package/dist/public/assets/_BOr_i2db.js +0 -1
  336. package/dist/public/assets/_BSCc1FVi.js +0 -1
  337. package/dist/public/assets/_BSEhhZ07.js +0 -1
  338. package/dist/public/assets/_BSyW2RLw.js.br +0 -0
  339. package/dist/public/assets/_BUPTpTYH.js.br +0 -0
  340. package/dist/public/assets/_BUqHNT5-.js +0 -1
  341. package/dist/public/assets/_BWwfOfMX.js.br +0 -0
  342. package/dist/public/assets/_BZXQzilG.js +0 -1
  343. package/dist/public/assets/_BZhRz8TB.js.br +0 -0
  344. package/dist/public/assets/_B_1_7y_i.js +0 -1
  345. package/dist/public/assets/_B_zlRrUP.js.br +0 -0
  346. package/dist/public/assets/_BciKbAaO.js.br +0 -0
  347. package/dist/public/assets/_BdNI84NG.js +0 -1
  348. package/dist/public/assets/_Bdq41ArX.js.br +0 -0
  349. package/dist/public/assets/_BfT9QWYM.js +0 -1
  350. package/dist/public/assets/_BflxkINP.js +0 -1
  351. package/dist/public/assets/_BiIrl8ml.js.br +0 -0
  352. package/dist/public/assets/_Bmgmfh64.js +0 -1
  353. package/dist/public/assets/_BnDvb8rh.js.br +0 -0
  354. package/dist/public/assets/_BstVSsFN.js +0 -1
  355. package/dist/public/assets/_Bu1DxZly.js +0 -1
  356. package/dist/public/assets/_By3jAAQI.js +0 -1
  357. package/dist/public/assets/_By3jAAQI.js.br +0 -0
  358. package/dist/public/assets/_ByZbJftZ.js.br +0 -0
  359. package/dist/public/assets/_BzU0dRn3.js +0 -1
  360. package/dist/public/assets/_C-IpRzUC.js +0 -1
  361. package/dist/public/assets/_C0W4EC0Z.js.br +0 -0
  362. package/dist/public/assets/_C1EEKbbh.js.br +0 -0
  363. package/dist/public/assets/_C1I4axdk.js +0 -1
  364. package/dist/public/assets/_C23aBO0p.js.br +0 -0
  365. package/dist/public/assets/_C3La6EyV.js.br +0 -0
  366. package/dist/public/assets/_C3k75NG8.js.br +0 -0
  367. package/dist/public/assets/_C4Hln-a1.js.br +0 -0
  368. package/dist/public/assets/_C7nRA4nl.js +0 -1
  369. package/dist/public/assets/_CAN3Gwlo.js.br +0 -0
  370. package/dist/public/assets/_CB6bJYj7.js +0 -1
  371. package/dist/public/assets/_CDG0zRut.js.br +0 -0
  372. package/dist/public/assets/_CDPOV9zA.js.br +0 -0
  373. package/dist/public/assets/_CEzgbnFo.js.br +0 -0
  374. package/dist/public/assets/_CH7j19or.js +0 -1
  375. package/dist/public/assets/_CH7j19or.js.br +0 -0
  376. package/dist/public/assets/_CKNilRtP.js.br +0 -0
  377. package/dist/public/assets/_CKvOm2QG.js.br +0 -0
  378. package/dist/public/assets/_CLpJpkGL.js.br +0 -0
  379. package/dist/public/assets/_CN4xiFtS.js +0 -1
  380. package/dist/public/assets/_CRAhvbwb.js.br +0 -0
  381. package/dist/public/assets/_CRkxKTgw.js +0 -1
  382. package/dist/public/assets/_CS08pKi4.js +0 -1
  383. package/dist/public/assets/_CSE16QHd.js +0 -1
  384. package/dist/public/assets/_CT4ei2Jg.js +0 -1
  385. package/dist/public/assets/_CW5ES2vr.js +0 -1
  386. package/dist/public/assets/_CWhF-4OC.js +0 -1
  387. package/dist/public/assets/_CXhoovwf.js.br +0 -0
  388. package/dist/public/assets/_CY7Wr_6h.js.br +0 -0
  389. package/dist/public/assets/_C_-mBehU.js +0 -1
  390. package/dist/public/assets/_CazYpkki.js +0 -1
  391. package/dist/public/assets/_CbAa5uAw.js.br +0 -0
  392. package/dist/public/assets/_CcbwLXni.js +0 -1
  393. package/dist/public/assets/_CiYp9PxT.js.br +0 -0
  394. package/dist/public/assets/_CmLGUmi9.js +0 -1
  395. package/dist/public/assets/_CmLGUmi9.js.br +0 -0
  396. package/dist/public/assets/_Coj9l4W_.js.br +0 -0
  397. package/dist/public/assets/_Cp1MBi_q.js +0 -1
  398. package/dist/public/assets/_CpXvQ4wL.js +0 -1
  399. package/dist/public/assets/_CsNZdkZU.js.br +0 -0
  400. package/dist/public/assets/_Ct8a3v8n.js +0 -1
  401. package/dist/public/assets/_CtYn_7Ld.js.br +0 -0
  402. package/dist/public/assets/_CthHHBjW.js +0 -2
  403. package/dist/public/assets/_CthHHBjW.js.br +0 -0
  404. package/dist/public/assets/_CtliFzZo.js +0 -1
  405. package/dist/public/assets/_Cw3MnPjo.js.br +0 -0
  406. package/dist/public/assets/_Cw9GxBkQ.js.br +0 -0
  407. package/dist/public/assets/_CwLlOfhS.js +0 -1
  408. package/dist/public/assets/_Cz606f5R.js +0 -7
  409. package/dist/public/assets/_Cz606f5R.js.br +0 -0
  410. package/dist/public/assets/_D-pAxlQ-.js.br +0 -0
  411. package/dist/public/assets/_D24Cf_aJ.js +0 -1
  412. package/dist/public/assets/_D2Bfy3Mq.js +0 -1
  413. package/dist/public/assets/_D3_-HE_e.js +0 -1
  414. package/dist/public/assets/_D4XHSL1o.js.br +0 -0
  415. package/dist/public/assets/_D8WYrmFe.js +0 -1
  416. package/dist/public/assets/_D8WYrmFe.js.br +0 -0
  417. package/dist/public/assets/_D9-mnhpM.js.br +0 -0
  418. package/dist/public/assets/_DBjp4Oaj.js +0 -1
  419. package/dist/public/assets/_DBzqRlRQ.js +0 -1
  420. package/dist/public/assets/_DC6M2qH2.js +0 -1
  421. package/dist/public/assets/_DE5SUDS8.js.br +0 -0
  422. package/dist/public/assets/_DEGMhwoO.js +0 -1
  423. package/dist/public/assets/_DIEqAzJB.js.br +0 -0
  424. package/dist/public/assets/_DJVQZQI-.js.br +0 -0
  425. package/dist/public/assets/_DL8YLICC.js +0 -1
  426. package/dist/public/assets/_DLoAVrbv.js.br +0 -0
  427. package/dist/public/assets/_DLpha-BN.js +0 -1
  428. package/dist/public/assets/_DPKcpw43.js.br +0 -0
  429. package/dist/public/assets/_DUEm1sqD.js.br +0 -0
  430. package/dist/public/assets/_DX8wVfyk.js +0 -1
  431. package/dist/public/assets/_DXEbBRHY.js +0 -1
  432. package/dist/public/assets/_DX_AAVan.js +0 -1
  433. package/dist/public/assets/_DXhgTM12.js +0 -1
  434. package/dist/public/assets/_DcCeapFB.js.br +0 -0
  435. package/dist/public/assets/_DdWxi_D9.js.br +0 -0
  436. package/dist/public/assets/_DeGJuali.js.br +0 -0
  437. package/dist/public/assets/_Dge-T7VA.js +0 -1
  438. package/dist/public/assets/_Dh_fGh7B.js.br +0 -0
  439. package/dist/public/assets/_DlKCZs5m.js +0 -1
  440. package/dist/public/assets/_DmAY0SHM.js +0 -1
  441. package/dist/public/assets/_DmBJQY0z.js.br +0 -0
  442. package/dist/public/assets/_DmISa8wc.js.br +0 -0
  443. package/dist/public/assets/_DpUeYTvU.js +0 -1
  444. package/dist/public/assets/_DqcTAqJs.js +0 -1
  445. package/dist/public/assets/_DrntETw8.js +0 -1
  446. package/dist/public/assets/_Dsb-mJGm.js +0 -1
  447. package/dist/public/assets/_DuKrnKV2.js.br +0 -0
  448. package/dist/public/assets/_Dv298HDL.js.br +0 -0
  449. package/dist/public/assets/_DxgeJa1G.js.br +0 -0
  450. package/dist/public/assets/_DxpwwPqc.js +0 -1
  451. package/dist/public/assets/_G0Ur49hc.js.br +0 -0
  452. package/dist/public/assets/_GRlZXT_k.js +0 -1
  453. package/dist/public/assets/_HnJD2Vzo.js.br +0 -0
  454. package/dist/public/assets/_KtT9ovgB.js.br +0 -0
  455. package/dist/public/assets/_LsFmgSj_.js.br +0 -0
  456. package/dist/public/assets/_M2eABJML.js +0 -1
  457. package/dist/public/assets/_N7_4E3sa.js +0 -1
  458. package/dist/public/assets/_SCQ7gzWP.js +0 -1
  459. package/dist/public/assets/_SkNT3g1t.js.br +0 -0
  460. package/dist/public/assets/_T32b15Ve.js.br +0 -0
  461. package/dist/public/assets/_TOwFHHoM.js.br +0 -0
  462. package/dist/public/assets/_UUd1gazT.js +0 -1
  463. package/dist/public/assets/_YTVYw9XV.js.br +0 -0
  464. package/dist/public/assets/_ZlbOPzr7.js.br +0 -0
  465. package/dist/public/assets/_a3BQDAxj.js.br +0 -0
  466. package/dist/public/assets/_aVJfol8S.js.br +0 -0
  467. package/dist/public/assets/_ee3nMJZE.js +0 -86
  468. package/dist/public/assets/_ee3nMJZE.js.br +0 -0
  469. package/dist/public/assets/_fBJXUlyl.js.br +0 -0
  470. package/dist/public/assets/_gy0a9Cmp.js.br +0 -0
  471. package/dist/public/assets/_iTbVHO4b.js +0 -1
  472. package/dist/public/assets/_k79dEMkm.js +0 -1
  473. package/dist/public/assets/_kHV7j6Zv.js.br +0 -0
  474. package/dist/public/assets/_l9Ig5EJO.js.br +0 -0
  475. package/dist/public/assets/_lYxkU02J.js +0 -1
  476. package/dist/public/assets/_rizgJsHK.js.br +0 -0
  477. package/dist/public/assets/_rmo2BlTL.js +0 -1
  478. package/dist/public/assets/_sEygC0rY.js +0 -1
  479. package/dist/public/assets/_sEygC0rY.js.br +0 -0
  480. package/dist/public/assets/_ulL_yezz.js.br +0 -0
  481. package/dist/public/assets/_vWNf9U23.js +0 -1
  482. package/dist/public/assets/_vd2rHjSk.js +0 -1
  483. package/dist/public/assets/_wC0cYIUL.js.br +0 -0
  484. package/dist/public/assets/_zGawNqPU.js.br +0 -0
  485. package/dist/public/assets/files-view-D9y_w_28.js +0 -2
  486. package/dist/public/assets/manage-workspace-BCRACsUn.js +0 -2
  487. package/dist/public/assets/new-BdLH98ro.js +0 -1
  488. package/dist/public/assets/new-workspace-TMTnjdBC.js +0 -2
  489. package/dist/public/assets/review-view-CvIicWqZ.js +0 -2
  490. package/dist/public/assets/settings-BdLH98ro.js +0 -1
  491. package/dist/public/assets/settings-page-I3W3CL5p.js +0 -2
  492. package/dist/public/assets/styles-D39vLjzP.css +0 -1
  493. package/dist/public/assets/styles-D39vLjzP.css.br +0 -0
  494. package/dist/public/assets/w-BdLH98ro.js +0 -1
  495. package/dist/public/assets/w._-BD4s-fU6.js +0 -1
  496. package/dist/public/assets/w._-BdLH98ro.js +0 -1
  497. package/dist/public/assets/w._-DnOj6Zzs.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, {
@@ -831,6 +839,13 @@ var STEPS = [
831
839
  ALTER TABLE sessions ADD COLUMN typed_at INTEGER;
832
840
  `);
833
841
  }
842
+ },
843
+ {
844
+ version: 16,
845
+ name: "switching sessions",
846
+ up(db) {
847
+ db.exec("ALTER TABLE sessions ADD COLUMN switch_to TEXT;");
848
+ }
834
849
  }
835
850
  ];
836
851
  var LATEST = STEPS.at(-1).version;
@@ -9659,7 +9674,7 @@ function publishChange(sessionId) {
9659
9674
  const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
9660
9675
  if (row?.workspace_id) {
9661
9676
  const workspaceId = row.workspace_id;
9662
- import("./_C29NgtBI.js").then((m) => m.notifySessionsChanged(workspaceId));
9677
+ import("./_BawMVLA9.js").then((m) => m.notifySessionsChanged(workspaceId));
9663
9678
  return;
9664
9679
  }
9665
9680
  publish("sessions.changed");
@@ -12052,6 +12067,46 @@ var branchPrs = swr(TTL_MS, async (key, refresh) => {
12052
12067
  async function workspacePrs(fullName, branch, foreign, refresh = false, since) {
12053
12068
  return prsForBranchPrefix(await branchPrs(branchKey(fullName, branch), refresh).catch(() => []), branch, foreign).filter((pr) => !since || pr.state === "OPEN" || !pr.updatedAt || pr.updatedAt >= since);
12054
12069
  }
12070
+ /** Each branch's own PRs, however long ago they finished, by
12071
+ * `fullName#branch`: what `prsForHeads` last found, kept an hour. */
12072
+ var HEADS_TTL_MS = 36e5;
12073
+ var headsFound = /* @__PURE__ */ new Map();
12074
+ /** GitHub refuses a search query past 256 characters; the rest of the
12075
+ * query (`is:pr is:closed sort:updated-desc repo:…`) takes its share. */
12076
+ var HEAD_TERMS_MAX = 160;
12077
+ /** These branches' PRs in one workspace repo, open or finished however
12078
+ * long ago. The workspace's own search keeps only its latest finished PRs
12079
+ * (`CLOSED_FIRST`), so a topic whose squash-merged PR had aged out of it
12080
+ * read as unmerged work for good. Asked for by name, only for the branches
12081
+ * `work topic` cannot otherwise account for: as few searches as the query
12082
+ * length allows (one per branch, run side by side, took GitHub 19 s for
12083
+ * three), and each branch's answer kept an hour. None of it rides the
12084
+ * status tick. */
12085
+ async function prsForHeads(fullName, heads) {
12086
+ const now = Date.now();
12087
+ const stale = heads.filter((h) => {
12088
+ const seen = headsFound.get(branchKey(fullName, h));
12089
+ return !seen || now - seen.at > HEADS_TTL_MS;
12090
+ });
12091
+ if (stale.length) try {
12092
+ const { host, name } = splitRepo(fullName);
12093
+ const upstream = await repoParent(fullName);
12094
+ const repos = upstream ? [name, splitRepo(upstream).name] : [name];
12095
+ const found = new Map(stale.map((h) => [h, []]));
12096
+ const batches = [[]];
12097
+ for (const h of stale) {
12098
+ const batch = batches[batches.length - 1];
12099
+ if (batch.length && [...batch, h].join(" head:").length > HEAD_TERMS_MAX) batches.push([h]);
12100
+ else batch.push(h);
12101
+ }
12102
+ for (const batch of batches) for (const n of await searchPrs(host, repos, batch)) if (ownsNode(n, fullName, upstream)) found.get(n.headRefName)?.push(n);
12103
+ for (const [h, prs] of found) headsFound.set(branchKey(fullName, h), {
12104
+ at: now,
12105
+ prs
12106
+ });
12107
+ } catch {}
12108
+ return heads.flatMap((h) => headsFound.get(branchKey(fullName, h))?.prs ?? []);
12109
+ }
12055
12110
  /** Refresh many repos' PRs with one GraphQL request (vs one `gh pr list`
12056
12111
  * process per repo) — called from the status watcher for active
12057
12112
  * workspaces so open/merge/close flips surface in ~watch-tick time
@@ -17469,6 +17524,60 @@ async function workPids(argv) {
17469
17524
  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
17525
  return pids;
17471
17526
  }
17527
+ /** How long what a closed session started has to exit on its SIGTERM. */
17528
+ var SESSION_END_GRACE_MS = 5e3;
17529
+ /** Every process a session started, wherever it went since. tmux gives a
17530
+ * session's panes `WORK_SESSION_ID` and whatever they start inherits it, a
17531
+ * job detached with nohup or setsid included: once its parent is gone no
17532
+ * process tree leads back to one, and such jobs outlived their sessions
17533
+ * by days. Read from each process's environment where /proc has it; on
17534
+ * macOS, whose `ps` would mix the environment into the command line, the
17535
+ * trees under the session's panes instead (`panes`, read before the
17536
+ * session went). Never the server or what runs it. */
17537
+ async function sessionProcs(sessionId, panes) {
17538
+ let pids;
17539
+ if (darwin) {
17540
+ const table = await processArgsNow();
17541
+ const children = /* @__PURE__ */ new Map();
17542
+ for (const [pid, row] of table) children.set(row.ppid, [...children.get(row.ppid) ?? [], pid]);
17543
+ const seen = /* @__PURE__ */ new Set();
17544
+ const queue = panes.filter((p) => table.has(p));
17545
+ while (queue.length) {
17546
+ const pid = queue.pop();
17547
+ if (seen.has(pid)) continue;
17548
+ seen.add(pid);
17549
+ queue.push(...children.get(pid) ?? []);
17550
+ }
17551
+ pids = [...seen];
17552
+ } else {
17553
+ const mark = `WORK_SESSION_ID=${sessionId}\0`;
17554
+ const names = await fs$1.readdir("/proc").catch(() => []);
17555
+ pids = (await Promise.all(names.filter((n) => /^\d+$/.test(n)).map(async (n) => {
17556
+ const env = await fs$1.readFile(`/proc/${n}/environ`, "latin1").catch(() => "");
17557
+ return env.startsWith(mark) || env.includes(`\0${mark}`) ? Number(n) : 0;
17558
+ }))).filter(Boolean);
17559
+ }
17560
+ const own = await workPids();
17561
+ return pids.filter((p) => !own.has(p));
17562
+ }
17563
+ /** Ends everything a closing session started (`sessionProcs`): SIGTERM
17564
+ * now, and SIGKILL to what is still there `SESSION_END_GRACE_MS` later.
17565
+ * On Linux the second pass looks again by the environment, so a pid
17566
+ * reused meanwhile is never hit. */
17567
+ async function endSessionProcs(sessionId, panes) {
17568
+ const first = await sessionProcs(sessionId, panes);
17569
+ if (!first.length) return;
17570
+ for (const pid of first) try {
17571
+ process.kill(pid, "SIGTERM");
17572
+ } catch {}
17573
+ setTimeout(() => {
17574
+ (darwin ? Promise.resolve(first) : sessionProcs(sessionId, [])).then((left) => {
17575
+ for (const pid of left) try {
17576
+ process.kill(pid, "SIGKILL");
17577
+ } catch {}
17578
+ }).catch(() => {});
17579
+ }, SESSION_END_GRACE_MS).unref?.();
17580
+ }
17472
17581
  /** SIGTERM every process running inside the workspace (dev servers etc.). */
17473
17582
  async function killWorkspaceProcs(wsPath) {
17474
17583
  for (const proc of await workspaceProcs(wsPath)) try {
@@ -17731,13 +17840,25 @@ async function killSession(id, keepChildren = false, how = "closed") {
17731
17840
  if (!session) return [];
17732
17841
  const family = keepChildren ? [id] : [id, ...descendantsOf(id)];
17733
17842
  db.prepare(`DELETE FROM closed_sessions WHERE closed_at < strftime('%Y-%m-%dT%H:%M:%fZ', 'now', '${REOPEN_WITHIN}')`).run();
17734
- for (const member of family) {
17735
- keepClosed(member, member === id ? how : "closed");
17736
- await disposeSession(member);
17737
- }
17843
+ linkPastUnkept(family, new Map(family.map((m) => [m, getSession(m)?.parent_id ?? null])), new Set(family.filter((m) => keepClosed(m, m === id ? how : "closed"))));
17844
+ for (const member of family) await disposeSession(member);
17738
17845
  notifySessionsChanged(session.workspace_id);
17739
17846
  return family;
17740
17847
  }
17848
+ /** A member kept under one that was not (a shell, a session whose
17849
+ * conversation work never learned) is linked to the nearest member above
17850
+ * it that was, so `reopenTeam` still reaches it: under a parent that never
17851
+ * comes back it would stand alone. */
17852
+ function linkPastUnkept(family, parents, kept) {
17853
+ const inFamily = new Set(family);
17854
+ for (const member of kept) {
17855
+ const own = parents.get(member);
17856
+ if (!own || !inFamily.has(own) || kept.has(own)) continue;
17857
+ let up = parents.get(own) ?? null;
17858
+ while (up && inFamily.has(up) && !kept.has(up)) up = parents.get(up) ?? null;
17859
+ if (up && kept.has(up)) db.prepare("UPDATE closed_sessions SET parent_id = ? WHERE id = ?").run(up, member);
17860
+ }
17861
+ }
17741
17862
  /** How long a closed session can be started again: a lead's follow-ups
17742
17863
  * come as the user reviews its result, the same day or so. */
17743
17864
  var REOPEN_WITHIN = "-7 days";
@@ -17745,6 +17866,28 @@ var REOPEN_WITHIN = "-7 days";
17745
17866
  function noteConversation(id, conversation) {
17746
17867
  db.prepare("UPDATE sessions SET conversation = ? WHERE id = ? AND conversation IS NOT ?").run(conversation, id, conversation);
17747
17868
  }
17869
+ /** The sessions closed with `id` and still kept (`reopenTeam`): down its
17870
+ * parent links, each closed no earlier than it — one closed on its own
17871
+ * before its lead went is not part of that close — parents before their
17872
+ * children. */
17873
+ function closedTeam(id) {
17874
+ const lead = closedSession(id);
17875
+ if (!lead) return [];
17876
+ const rows = all(`SELECT * FROM closed_sessions WHERE workspace_id = ? AND id != ? AND closed_at >= ?
17877
+ AND closed_at >= strftime('%Y-%m-%dT%H:%M:%fZ', 'now', '${REOPEN_WITHIN}')
17878
+ ORDER BY closed_at, created_at`, lead.workspace_id, id, lead.closed_at);
17879
+ const team = [];
17880
+ const reached = /* @__PURE__ */ new Set([id]);
17881
+ for (let grew = true; grew;) {
17882
+ grew = false;
17883
+ for (const r of rows) if (!reached.has(r.id) && r.parent_id && reached.has(r.parent_id)) {
17884
+ reached.add(r.id);
17885
+ team.push(r);
17886
+ grew = true;
17887
+ }
17888
+ }
17889
+ return team;
17890
+ }
17748
17891
  /** A closed session that can still be started again (`reopenSession`). */
17749
17892
  function closedSession(id) {
17750
17893
  return get(`SELECT * FROM closed_sessions WHERE id = ?
@@ -17757,12 +17900,14 @@ function reopenable(s) {
17757
17900
  }
17758
17901
  /** Keep `id` as it is in closed_sessions, about to close. One closed for
17759
17902
  * being done is kept whatever it is, so a message to it can say why it
17760
- * does not reopen; any other only if it can be started again. */
17903
+ * does not reopen; any other only if it can be started again. Whether it
17904
+ * was kept. */
17761
17905
  function keepClosed(id, how) {
17762
17906
  const s = getSession(id);
17763
- if (!s?.workspace_id || how === "closed" && !reopenable(s)) return;
17907
+ if (!s?.workspace_id || how === "closed" && !reopenable(s)) return false;
17764
17908
  db.prepare(`INSERT OR REPLACE INTO closed_sessions (id, workspace_id, agent, title, parent_id, launch_dir, launch_mode, summary, conversation, created_at, how)
17765
17909
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(s.id, s.workspace_id, s.agent, s.title, s.parent_id, s.launch_dir, s.launch_mode, s.summary, s.conversation, s.created_at, how);
17910
+ return true;
17766
17911
  }
17767
17912
  /** Close a session work is done with (server/team), keeping what starts
17768
17913
  * it again on its own conversation (`reopenSession`): the lead that
@@ -17812,11 +17957,20 @@ async function reopenSession(id, opts = {}) {
17812
17957
  notifySessionsChanged(closed.workspace_id);
17813
17958
  return session;
17814
17959
  }
17815
- /** Start a running session's CLI again on its own conversation, as
17816
- * `agent` if given (`resumeAs`): one stuck at its prompt because its
17817
- * account hit a limit goes on as another account's. Its row, what is
17818
- * queued for it and what it owes stay (server/messages keeps them). */
17819
- async function restartSession(id, agent) {
17960
+ /** Restarts in flight, by session (`restartOf`): an attach that ends
17961
+ * meanwhile was ended by the restart, not by its agent, so term-ws tells
17962
+ * its page to come back rather than that the session ended, and a page
17963
+ * that connects meanwhile waits for the new pane. Kept a beat past the
17964
+ * restart, since an old attach hears its end only as tmux gets to it. */
17965
+ var restarts = /* @__PURE__ */ new Map();
17966
+ var RESTART_LINGER_MS = 3e3;
17967
+ function restartOf(id) {
17968
+ return restarts.get(id);
17969
+ }
17970
+ /** What `restartSession` would start `id` as, or why it cannot: asked
17971
+ * before a switch is scheduled (server/messages `reopen`), so a request
17972
+ * that cannot work fails as it is made, not when it comes due. */
17973
+ function restartPlan(id, agent) {
17820
17974
  const s = getSession(id);
17821
17975
  if (!s) throw httpError(404, `no session ${id}`);
17822
17976
  if (!reopenable(s)) throw httpError(409, `${id} cannot start again on its conversation: ${canResume(s.agent) ? "work has not learned it yet (it comes with the first prompt's hook)" : `${agentLabel(s.agent)} cannot resume one`}`);
@@ -17824,26 +17978,61 @@ async function restartSession(id, agent) {
17824
17978
  const wsPath = workspacePath(s.workspace_id);
17825
17979
  if (!wsPath) throw httpError(409, `${id}'s workspace is gone`);
17826
17980
  if (s.launch_dir && launchDir(s, wsPath) === wsPath) throw httpError(409, `${id} ran in ${s.launch_dir}, which is gone, and its conversation with it: ${START_AGAIN}`);
17827
- const env = cleanEnv();
17828
- await tmux([
17829
- "kill-session",
17830
- "-t",
17831
- tmuxName(id)
17832
- ], env).catch(() => {});
17833
- forgetPanes();
17834
- clearTmuxStarted(id);
17835
- clearAgentPhase(id);
17836
- db.prepare("UPDATE sessions SET agent = ? WHERE id = ?").run(next, id);
17837
- const session = getSession(id);
17838
- await ensureTmuxServer();
17839
- await launchDetached(session, wsPath, env, { resume: s.conversation });
17840
- if (!await paneAlive(id, env)) {
17841
- db.prepare("UPDATE sessions SET agent = ? WHERE id = ?").run(s.agent, id);
17981
+ return {
17982
+ s,
17983
+ next,
17984
+ wsPath
17985
+ };
17986
+ }
17987
+ /** Start a running session's CLI again on its own conversation, as
17988
+ * `agent` if given (`resumeAs`): one stuck at its prompt because its
17989
+ * account hit a limit goes on as another account's. Its row, what is
17990
+ * queued for it and what it owes stay (server/messages keeps them), and a
17991
+ * switch it was waiting on is done. */
17992
+ async function restartSession(id, agent) {
17993
+ const { s, next, wsPath } = restartPlan(id, agent);
17994
+ let finish;
17995
+ const pending = new Promise((resolve) => finish = resolve);
17996
+ restarts.set(id, pending);
17997
+ try {
17998
+ const env = cleanEnv();
17999
+ await tmux([
18000
+ "kill-session",
18001
+ "-t",
18002
+ tmuxName(id)
18003
+ ], env).catch(() => {});
18004
+ forgetPanes();
18005
+ clearTmuxStarted(id);
18006
+ clearAgentPhase(id);
18007
+ db.prepare("UPDATE sessions SET agent = ?, switch_to = NULL WHERE id = ?").run(next, id);
18008
+ const session = getSession(id);
18009
+ await ensureTmuxServer();
18010
+ await launchDetached(session, wsPath, env, { resume: s.conversation });
18011
+ if (!await paneAlive(id, env)) {
18012
+ db.prepare("UPDATE sessions SET agent = ? WHERE id = ?").run(s.agent, id);
18013
+ notifySessionsChanged(s.workspace_id);
18014
+ throw httpError(409, `${id}'s ${agentLabel(next)} could not resume its conversation (${s.conversation})${next === s.agent ? "" : `: ${next} may keep its conversations apart from ${s.agent}'s`}, and its pane has closed: \`work session reopen ${id}\` tries again`);
18015
+ }
17842
18016
  notifySessionsChanged(s.workspace_id);
17843
- throw httpError(409, `${id}'s ${agentLabel(next)} could not resume its conversation (${s.conversation})${next === s.agent ? "" : `: ${next} may keep its conversations apart from ${s.agent}'s`}, and its pane has closed: \`work session reopen ${id}\` tries again`);
18017
+ return session;
18018
+ } finally {
18019
+ finish();
18020
+ setTimeout(() => {
18021
+ if (restarts.get(id) === pending) restarts.delete(id);
18022
+ }, RESTART_LINGER_MS).unref?.();
17844
18023
  }
18024
+ }
18025
+ /** Ask for `id` to move to `agent` once it is idle (server/messages
18026
+ * `switchWhenIdle`), or take that ask back (`agent` null). */
18027
+ function setSwitch(id, agent) {
18028
+ const s = getSession(id);
18029
+ if (!s) return;
18030
+ db.prepare("UPDATE sessions SET switch_to = ? WHERE id = ?").run(agent, id);
17845
18031
  notifySessionsChanged(s.workspace_id);
17846
- return session;
18032
+ }
18033
+ /** Sessions waiting to move to another instance once idle. */
18034
+ function pendingSwitches() {
18035
+ return all("SELECT id, switch_to FROM sessions WHERE switch_to IS NOT NULL");
17847
18036
  }
17848
18037
  /** What a session is, open or closed (`work session list <id>`, `log`):
17849
18038
  * undefined for one work does not know, or no longer keeps. */
@@ -17863,6 +18052,8 @@ function sessionInfo(id) {
17863
18052
  kept: !!live?.keep,
17864
18053
  /** Since when it is to close once nothing is lost by it (`retire`). */
17865
18054
  retiring: live?.retire_at ?? null,
18055
+ /** The instance it moves to once it is idle (`reopen --agent`). */
18056
+ switching: live?.switch_to ?? null,
17866
18057
  /** How and when it closed; null while open. */
17867
18058
  closed: closed ? {
17868
18059
  how: closed.how,
@@ -17931,11 +18122,13 @@ function onSessionDispose(fn) {
17931
18122
  }
17932
18123
  async function disposeSession(id) {
17933
18124
  for (const fn of disposeListeners) fn(id);
18125
+ const panes = (await listPanes() ?? []).filter((p) => p.id === id).map((p) => p.pid);
17934
18126
  await tmux([
17935
18127
  "kill-session",
17936
18128
  "-t",
17937
18129
  tmuxName(id)
17938
18130
  ]).catch(() => {});
18131
+ endSessionProcs(id, panes).catch(() => {});
17939
18132
  forgetPanes();
17940
18133
  clearTmuxStarted(id);
17941
18134
  clearAgentPhase(id);
@@ -18005,7 +18198,7 @@ function notifySessionsChanged(workspaceId) {
18005
18198
  async function emitSessionsChanged(workspaceId) {
18006
18199
  try {
18007
18200
  const states = await sessionStates();
18008
- const { teamsOf } = await import("./_BkRvQO5r.js");
18201
+ const { teamsOf } = await import("./_D3ixWlKr.js");
18009
18202
  publish("sessions.changed", {
18010
18203
  workspaceId,
18011
18204
  sessions: listSessions(workspaceId).map((s) => ({
@@ -18299,8 +18492,9 @@ async function ensureTmuxServer() {
18299
18492
  "sleep",
18300
18493
  "infinity"
18301
18494
  ], os.homedir());
18495
+ const backstop = SCRATCH_TMUX ? ["--property=RuntimeMaxSec=1d"] : [];
18302
18496
  const files = openFileLimit();
18303
- await start(files ? [`--property=LimitNOFILE=${files}`] : []).catch(() => files ? start([]) : Promise.reject()).catch(() => {});
18497
+ await start([...files ? [`--property=LimitNOFILE=${files}`] : [], ...backstop]).catch(() => files ? start(backstop) : Promise.reject()).catch(() => {});
18304
18498
  }
18305
18499
  /** This server's open-file limit, for tmux's server: it holds a socket and
18306
18500
  * a tty for every client attached and a pty for every pane, and a systemd
@@ -19940,7 +20134,10 @@ ${repoLines}
19940
20134
  \`work topic list\` shows the open ones. \`<group>.<topic>\` folds topics
19941
20135
  into one review chip. Keep a few open per repo unless asked for a batch; a
19942
20136
  finding you won't fix gets a topic of its own. Work on files another open
19943
- branch changes goes on that branch or waits for it to merge.
20137
+ branch changes goes on that branch or waits for it to merge. One you
20138
+ abandon goes with \`work topic drop <topic>\` (never \`git branch -D\` or
20139
+ \`git worktree remove\`): it says what it discards, wants \`--yes\` for
20140
+ work no base has, and keeps the tip 30 days.
19944
20141
  - **One branch, one PR:** follow-ups to a change are more commits on its
19945
20142
  branch, PR open or not. Stack only when the user asks, or when a change of
19946
20143
  several hundred lines splits into parts each worth merging alone (never a
@@ -19962,7 +20159,8 @@ ${repoLines}
19962
20159
  follow-up and the same link shows it.
19963
20160
  - **PRs:** only when the user asks; the description is a few sentences on
19964
20161
  what changed and why, no verification logs or file lists.${independentPr}
19965
- - **After a merge** (its PR's, or yours into the branch it stacks on):
20162
+ - **After a merge** (its PR's, yours into the branch it stacks on, or its
20163
+ changes landing by other commits: squashed into another PR, cherry-picked):
19966
20164
  \`work topic done <topic> --rebase\` removes the merged topic's worktree
19967
20165
  (its branch stays; the app prunes it) and rebases the other open topics,
19968
20166
  each onto its own base (\`origin/<base>\`${featureBase ? ", a backport's `origin/<default>`" : ""}, or the branch it
@@ -20005,7 +20203,10 @@ ${repoLines}
20005
20203
  Claude or Codex one reopens it on its own conversation; one closed
20006
20204
  otherwise (with its lead, by the user), or stuck on its account's limit,
20007
20205
  \`work session reopen <id> [--agent <another instance>]\` starts again
20008
- on it, and \`work session log [<id>]\` shows what went to and from
20206
+ on it, a busy one once it is idle. To move yourself to another account
20207
+ (\`reopen $WORK_SESSION_ID --agent claude2\`), it happens as this turn
20208
+ ends, your conversation, team and queue kept: say where you are, then
20209
+ end the turn. \`work session log [<id>]\` shows what went to and from
20009
20210
  one and how each message went. \`kill\` and \`skip\` end the turn under
20010
20211
  way and what its pane runs; to lose nothing, \`forget <id>\` stops
20011
20212
  waiting on a reply, \`unsend <id>\` takes back a message not yet typed
@@ -20029,4 +20230,4 @@ ${repoLines}
20029
20230
  `;
20030
20231
  }
20031
20232
  //#endregion
20032
- 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, tmux as Ci, inside as Cn, configuredHosts as Cr, stopServers as Ct, agentCaller as D, clearAgentPhase as Dn, normalizeHost as Dr, forgetProbes as Dt, hookToken as E, withLock 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, git as Si, cleanSummary as Sn, addHost as Sr, stopAllServers as St, ensureAllPushHooks as T, swr 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, config as wi, realInside as wn, ensureGitCredentials as wr, addCustomServer as wt, syncAgentsMd as x, TMUX_SOCKET 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 };
20233
+ export { ownWorkspaceOnly as $, setScrapedPhase as $n, miseInstalls as $r, readFileAt as $t, clearTmuxStarted as A, tmux as Ai, realInside as An, ensureGitCredentials as Ar, allServers as At, interruptSession as B, noteInterrupt as Bn, changePref as Br, whileInstalling as Bt, workspaceBranches as C, get as Ci, steerKeys as Cn, pendingSsoOrgs as Cr, lspQueryOf as Ct, agentCaller as D, SCRATCH_TMUX as Di, writeCache as Dn, DEFAULT_HOST as Dr, stopAllServers as Dt, hookToken as E, ensureAllCacheConfig as Ei, readCache as En, repoDefaultBranch as Er, runningServers as Et, descendantsOf as F, hookReportedAt as Fn, unreachableRepos as Fr, lspEnabled as Ft, listPanesWithin as G, notifyEventOn as Gn, isKnownAgent as Gr, logoutGithub as Gt, killWorkspaceSessions as H, noteTurnFailed as Hn, disabledAgents as Hr, installAgent as Ht, disposeSessions as I, interruptedSinceReport as In, PREF_MAX as Ir, removeServer as It, moveSession as J, onTurnEnd as Jn, setPref as Jr, runStreaming as Jt, listSessions as K, onFinished as Kn, preferredAgent as Kr, refreshGithub as Kt, ensureTmuxServer as L, lastTypedAt as Ln, WORKSPACE_PREFS as Lr, serverById as Lt, closedTeam as M, swr as Mi, agentPhase as Mn, isValidHost as Mr, forgetProbes as Mt, createSession as N, withLock as Ni, clearAgentPhase as Nn, normalizeHost as Nr, installKey as Nt, beginCreation as O, TMUX_SOCKET as Oi, cleanSummary as On, addHost as Or, stopServers as Ot, creationOf as P, hookPhase as Pn, removeHost as Pr, installServer as Pt, onSessionDispose as Q, setExpecting as Qn, ghKnownHosts as Qr, readBlobAt as Qt, forgetPanes as R, noteActivity$1 as Rn, agentChoices as Rr, serverList as Rt, withProgressOp as S, db as Si, reportsWorking as Sn, headOid as Sr, lspQuery as St, ensureAllPushHooks as T, ownsBranchOf as Ti, credentialStamp as Tn, repoCatalog as Tr, lspWarm as Tt, launchDir as U, noteTyped as Un, enabledAgents as Ur, installMise as Ut, killSession as V, notePermissionMode as Vn, deleteSetting as Vr, authGithub as Vt, listPanes as W, noteUserAnswered as Wn, getSetting as Wr, installTool as Wt, noteConversation as X, sessionWatched as Xn, discoverAgents as Xr, fileChanges as Xt, newSessionArgs as Y, onTurnFailed as Yn, setSetting as Yr, updateTool as Yt, notifySessionsChanged as Z, setAgentPhase as Zn, doctor as Zr, patchIn as Zt, retryMaterialize as _, publish as _i, noteActivity as _n, deleteSubscription as _r, killWorkspaceProc as _t, ensureUntrackedCache as a, TOOLS as ai, startSnapSweep as an, turnSince as ar, reopenSession as at, sweepTrash as b, subscriberCount as bi, quotesPastes as bn, sendPush as br, killServers as bt, insertPendingWorkspace as c, catalogPin as ci, markBranch as cn, agentFromCommand as cr, restartPlan as ct, progress as d, applyPrefChange as di, hotBatchMinMs as dn, ACCENT_RE as dr, sendToSession as dt, miseVersions as ei, reviewWaiting as en, setSessionViewers as er, paneJobs as et, progressSince as f, FRAME_ANCESTORS as fi, notePushActivity as fn, getInstance as fr, sessionInfo as ft, resumePendingWorkspaces as g, readBody as gi, workspacePrs as gn, setInstance as gr, tmuxWasStarted as gt, removeRepo as h, httpError as hi, withoutDismissed as hn, normalizeAccent as hr, tmuxName as ht, deleteWorkspace as i, PROJECT_TOOLS as ii, setPoints as in, turnSettling as ir, renameSession as it, closedSession as j, config as ji, activityOf as jn, forgetToken as jr, forgetCustomServer as jt, cleanEnv as k, git as ki, inside as kn, configuredHosts as kr, addCustomServer as kt, listWorkspaces as l, parseAgentId as li, sectionFor as ln, agentLabel as lr, restartSession as lt, queueMaterialize as m, checked as mi, refreshPrsBatch as mn, manifest as mr, setSwitch as mt, barePath as n, bornOut as ni, workspaceDiff as nn, summaryOf as nr, pasteToSession as nt, gcBares as o, agentById as oi, diffStamp as on, agentBadge as or, reopenable as ot, pruneLaneBranch as p, FRAME_HEADERS as pi, prsForHeads as pn, iconSvg as pr, sessionStates as pt, markTmuxStarted as q, onPhaseChange as qn, setDisabledAgents as qr, removeTool as qt, createWorkspace as r, firewallProbe as ri, workspaceSections as rn, turnPhase as rr, pendingSwitches as rt, getWorkspace as s, agentLabel$1 as si, commentFolder as sn, agentFamily as sr, restartOf as st, addRepo as t, which as ti, withinBudget as tn, settleQuietWorking as tr, panePids as tt, otherWorkspaceBranches as u, toolById as ui, dismissPr as un, agentMeta as ur, retireSession as ut, revParse as v, publishJson as vi, AGENTS as vn, pushPublicKey as vr, portsByWorkspace as vt, startTmpSweep as w, workspacePath as wi, blankRow as wn, repoBranches as wr, lspUses as wt, syncAgentsMd as x, all as xi, readHookPayload as xn, validSubscription as xr, lspDiagnostics as xt, setWorkspaceStatus as y, subscribe as yi, interruptKeys as yn, saveSubscription as yr, workspaceProcs as yt, getSession as z, noteBackground as zn, allPrefs as zr, sharing as zt };