@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.
- package/bin/cli/topic.mjs +374 -23
- package/dist/_B25P__C4.js +2 -0
- package/dist/{_iwl-plYP.js → _COL0wji1.js} +113 -113
- package/dist/{_D3vayu01.js → _CSFzm8Kj.js} +1 -1
- package/dist/{_KNWFiRfu.js → _DK0sGNuL.js} +341 -17
- package/dist/_wbrwjNyW.js +2 -0
- package/dist/index.mjs +906 -868
- package/dist/public/assets/{_wvT-w49n.js → _0NYkT7Ka.js} +1 -1
- package/dist/public/assets/_0NYkT7Ka.js.br +0 -0
- package/dist/public/assets/_18ckOF7L.js +1 -0
- package/dist/public/assets/_25qbKqTG.js +1 -0
- package/dist/public/assets/{_CcA9L8Uv.js → _6R8pHfHu.js} +1 -1
- package/dist/public/assets/_6R8pHfHu.js.br +0 -0
- package/dist/public/assets/_8cC5eK8l.js +1 -0
- package/dist/public/assets/_8eN6y624.js +1 -0
- package/dist/public/assets/_8eN6y624.js.br +0 -0
- package/dist/public/assets/_9-vCfD1H.js +1 -0
- package/dist/public/assets/_9PSE1hBd.js +1 -0
- package/dist/public/assets/{_BpXuBLlJ.js → _B-ItC5A4.js} +1 -1
- package/dist/public/assets/_B-ItC5A4.js.br +0 -0
- package/dist/public/assets/{_Dr-IU6HK.js → _B-IuONfT.js} +5 -5
- package/dist/public/assets/_B-IuONfT.js.br +0 -0
- package/dist/public/assets/_B-Nak9W-.js +1 -0
- package/dist/public/assets/_B-Nak9W-.js.br +0 -0
- package/dist/public/assets/_B0vuJGqQ.js +1 -0
- package/dist/public/assets/{_BKxZiX8Y.js → _B24stjuF.js} +5 -5
- package/dist/public/assets/_B24stjuF.js.br +0 -0
- package/dist/public/assets/_B2HaD9d5.js +1 -0
- package/dist/public/assets/{_CDUHEtRr.js → _B3B2tRvZ.js} +1 -1
- package/dist/public/assets/_B3B2tRvZ.js.br +0 -0
- package/dist/public/assets/_B4oiI3_4.js +1 -0
- package/dist/public/assets/_B5CpgKE4.js +1 -0
- package/dist/public/assets/_B7Rpwq9e.js +1 -0
- package/dist/public/assets/{_Cv3jQpwd.js → _B7THbxch.js} +1 -1
- package/dist/public/assets/_B7THbxch.js.br +0 -0
- package/dist/public/assets/{_CHyLG_jb.js → _B9BZLh7B.js} +1 -1
- package/dist/public/assets/_B9BZLh7B.js.br +0 -0
- package/dist/public/assets/{_Cd0WqXuH.js → _B9_Lal-7.js} +1 -1
- package/dist/public/assets/_B9_Lal-7.js.br +0 -0
- package/dist/public/assets/{_CWUZ37Z2.js → _BC-QJfsn.js} +1 -1
- package/dist/public/assets/_BC-QJfsn.js.br +0 -0
- package/dist/public/assets/{_Cn1d1sxS.js → _BC1pxNUd.js} +1 -1
- package/dist/public/assets/_BC1pxNUd.js.br +0 -0
- package/dist/public/assets/{_BWcGdDBZ.js → _BC7rcYFE.js} +1 -1
- package/dist/public/assets/_BC7rcYFE.js.br +0 -0
- package/dist/public/assets/{_DPT6h_sp.js → _BCgm7As-.js} +1 -1
- package/dist/public/assets/_BCgm7As-.js.br +0 -0
- package/dist/public/assets/{_BmgC95YK.js → _BDmhvLCs.js} +1 -1
- package/dist/public/assets/_BDmhvLCs.js.br +0 -0
- package/dist/public/assets/{_BDJY1Xd1.js → _BEO7OuGG.js} +2 -2
- package/dist/public/assets/_BEO7OuGG.js.br +0 -0
- package/dist/public/assets/{_BtZdp5Pb.js → _BEg-5EkS.js} +1 -1
- package/dist/public/assets/_BEg-5EkS.js.br +0 -0
- package/dist/public/assets/_BFTxeP-D.js +1 -0
- package/dist/public/assets/_BGCoTA5R.js +1 -0
- package/dist/public/assets/{_CpU0Rdtw.js → _BJHD6sFy.js} +1 -1
- package/dist/public/assets/_BJHD6sFy.js.br +0 -0
- package/dist/public/assets/_BJeQROi4.js +1 -0
- package/dist/public/assets/_BJeQROi4.js.br +0 -0
- package/dist/public/assets/_BKDJIaLf.js +1 -0
- package/dist/public/assets/{_Dju_1f03.js → _BM9h7XBb.js} +1 -1
- package/dist/public/assets/_BM9h7XBb.js.br +0 -0
- package/dist/public/assets/{_Dqo4vWfH.js → _BNlAaEUI.js} +1 -1
- package/dist/public/assets/_BNlAaEUI.js.br +0 -0
- package/dist/public/assets/{_DWu6n0v3.js → _BOmZO9bQ.js} +1 -1
- package/dist/public/assets/_BOmZO9bQ.js.br +0 -0
- package/dist/public/assets/{_CI7eaQDi.js → _BQvedQNA.js} +1 -1
- package/dist/public/assets/_BQvedQNA.js.br +0 -0
- package/dist/public/assets/{_BByUXZCR.js → _BTJ4QNYJ.js} +1 -1
- package/dist/public/assets/_BTJ4QNYJ.js.br +0 -0
- package/dist/public/assets/_BUnVFLfD.js +1 -0
- package/dist/public/assets/{_DM3cX6sN.js → _BUpeVCdC.js} +1 -1
- package/dist/public/assets/_BUpeVCdC.js.br +0 -0
- package/dist/public/assets/{_CrHoYLWK.js → _BVIQdL1e.js} +1 -1
- package/dist/public/assets/_BVIQdL1e.js.br +0 -0
- package/dist/public/assets/{_TY_Pdc3F.js → _BVN5lLXw.js} +1 -1
- package/dist/public/assets/_BVN5lLXw.js.br +0 -0
- package/dist/public/assets/{_RyUSIajb.js → _BVOoaIUz.js} +1 -1
- package/dist/public/assets/_BVOoaIUz.js.br +0 -0
- package/dist/public/assets/_BYd6ll6G.js +1 -0
- package/dist/public/assets/_BZnPwq2i.js +1 -0
- package/dist/public/assets/{_kdC_mk_s.js → _BaULj7kH.js} +1 -1
- package/dist/public/assets/_BaULj7kH.js.br +0 -0
- package/dist/public/assets/_BbdvSQaN.js +1 -0
- package/dist/public/assets/{_BTK0j-x0.js → _BjJMzhJj.js} +1 -1
- package/dist/public/assets/_BjJMzhJj.js.br +0 -0
- package/dist/public/assets/_BkFty1Oi.js +1 -0
- package/dist/public/assets/{_BGVrbRXU.js → _BmAd0-4z.js} +1 -1
- package/dist/public/assets/{_CjsopDcM.js → _Bo5sqml-.js} +1 -1
- package/dist/public/assets/_BryOeCV4.js +1 -0
- package/dist/public/assets/_BtAYOnhU.js +1 -0
- package/dist/public/assets/{_D46vZBR0.js → _BvDvgf2D.js} +1 -1
- package/dist/public/assets/_BvDvgf2D.js.br +0 -0
- package/dist/public/assets/{_CTwtnjHT.js → _Bwj1cG6Z.js} +1 -1
- package/dist/public/assets/_Bwj1cG6Z.js.br +0 -0
- package/dist/public/assets/{_LDz6VXdO.js → _Bwl5RU7m.js} +1 -1
- package/dist/public/assets/_Bwl5RU7m.js.br +0 -0
- package/dist/public/assets/_Bx7eXUeM.js +1 -0
- package/dist/public/assets/_Bxw4J8BV.js +1 -0
- package/dist/public/assets/{_CWw2xrr5.js → _BzDLIQE5.js} +1 -1
- package/dist/public/assets/_BzDLIQE5.js.br +0 -0
- package/dist/public/assets/_BzvCB8DB.js +1 -0
- package/dist/public/assets/_C-9WWLQ3.js +1 -0
- package/dist/public/assets/_C-_bdY5V.js +1 -0
- package/dist/public/assets/{_DyYt1xor.js → _C0zpPwSp.js} +1 -1
- package/dist/public/assets/_C0zpPwSp.js.br +0 -0
- package/dist/public/assets/{_CJYGh-X3.js → _C2Tbc73e.js} +1 -1
- package/dist/public/assets/_C2Tbc73e.js.br +0 -0
- package/dist/public/assets/{_uwuCbs_Z.js → _C3RYgw_5.js} +1 -1
- package/dist/public/assets/_C3RYgw_5.js.br +0 -0
- package/dist/public/assets/_C7P0cxfL.js +1 -0
- package/dist/public/assets/_C81AvAMk.js +1 -0
- package/dist/public/assets/{_2WOV-Xxm.js → _C8l-PMHJ.js} +1 -1
- package/dist/public/assets/_C8l-PMHJ.js.br +0 -0
- package/dist/public/assets/{_D7kyaI0s.js → _CAUoTaA1.js} +1 -1
- package/dist/public/assets/_CAUoTaA1.js.br +0 -0
- package/dist/public/assets/{_D8G71X2r.js → _CCTE_j9L.js} +1 -1
- package/dist/public/assets/_CCTE_j9L.js.br +0 -0
- package/dist/public/assets/{_rKxafATp.js → _CDXnpAfh.js} +1 -1
- package/dist/public/assets/_CDXnpAfh.js.br +0 -0
- package/dist/public/assets/_CEWoPra5.js +1 -0
- package/dist/public/assets/{_C8Nimh8k.js → _CGSo9tnY.js} +2 -2
- package/dist/public/assets/_CGSo9tnY.js.br +0 -0
- package/dist/public/assets/_CGsbbcpE.js +1 -0
- package/dist/public/assets/{_DA-5OGva.js → _CHuWNcjJ.js} +1 -1
- package/dist/public/assets/_CHuWNcjJ.js.br +0 -0
- package/dist/public/assets/_CI0KXyAu.js +1 -0
- package/dist/public/assets/{_Cs2Zd8pI.js → _CI8Dmpt-.js} +1 -1
- package/dist/public/assets/_CI8Dmpt-.js.br +0 -0
- package/dist/public/assets/_CKmnCHzt.js +1 -0
- package/dist/public/assets/_CNY02rQP.js +1 -0
- package/dist/public/assets/{_BiHBXSk1.js → _COjB6Mds.js} +1 -1
- package/dist/public/assets/_COjB6Mds.js.br +0 -0
- package/dist/public/assets/_CPGWIVjG.js +1 -0
- package/dist/public/assets/_CQ0SDG17.js +1 -0
- package/dist/public/assets/{_BdeQis2A.js → _CWmrlUIL.js} +1 -1
- package/dist/public/assets/_CWmrlUIL.js.br +0 -0
- package/dist/public/assets/{_CHy8Yzm5.js → _CXLLGxAE.js} +4 -4
- package/dist/public/assets/_CXLLGxAE.js.br +0 -0
- package/dist/public/assets/_CXciWQH3.js +1 -0
- package/dist/public/assets/_CXjFOElm.js +1 -0
- package/dist/public/assets/{_BWZsCsQQ.js → _CbzlAKJK.js} +1 -1
- package/dist/public/assets/_CbzlAKJK.js.br +0 -0
- package/dist/public/assets/{_BpDpZv1R.js → _CcLifUnb.js} +1 -1
- package/dist/public/assets/_CcLifUnb.js.br +0 -0
- package/dist/public/assets/{_-mM4yo3H.js → _CcbgX86v.js} +1 -1
- package/dist/public/assets/_CcbgX86v.js.br +0 -0
- package/dist/public/assets/{_C_VkFQv_.js → _CdDgM-x6.js} +1 -1
- package/dist/public/assets/_CdDgM-x6.js.br +0 -0
- package/dist/public/assets/_Ce53vsUM.js +1 -0
- package/dist/public/assets/_CgdBa1Kb.js +1 -0
- package/dist/public/assets/_ChxOfm1L.js +1 -0
- package/dist/public/assets/{_CLWpBKoo.js → _Ck0GxYNQ.js} +1 -1
- package/dist/public/assets/_Ck0GxYNQ.js.br +0 -0
- package/dist/public/assets/_CmIuIy4h.js +1 -0
- package/dist/public/assets/{_CRd8czom.js → _Cp-ZKt1Y.js} +1 -1
- package/dist/public/assets/_Cp-ZKt1Y.js.br +0 -0
- package/dist/public/assets/{_DTseWZHC.js → _CrEFB_dj.js} +1 -1
- package/dist/public/assets/_CrEFB_dj.js.br +0 -0
- package/dist/public/assets/{_zuaxHefE.js → _Cu31pL3p.js} +1 -1
- package/dist/public/assets/_CwaUSclh.js +1 -0
- package/dist/public/assets/_Cy9eBufF.js +1 -0
- package/dist/public/assets/_CynmXPn2.js +1 -0
- package/dist/public/assets/{_DHOPvA0j.js → _CzBug9-x.js} +1 -1
- package/dist/public/assets/_CzBug9-x.js.br +0 -0
- package/dist/public/assets/{_B60HnTYs.js → _Cznq4Aee.js} +1 -1
- package/dist/public/assets/{_D67YJBwp.js → _D-6O7MKA.js} +1 -1
- package/dist/public/assets/_D-6O7MKA.js.br +0 -0
- package/dist/public/assets/_D-JhJZ2C.js +1 -0
- package/dist/public/assets/{_BtEy3x8_.js → _D-XHmBJj.js} +1 -1
- package/dist/public/assets/_D-XHmBJj.js.br +0 -0
- package/dist/public/assets/_D-neGx47.js +1 -0
- package/dist/public/assets/_D5VJGdAr.js +1 -0
- package/dist/public/assets/_D6u72i8c.js +1 -0
- package/dist/public/assets/_D8tbv6WM.js +1 -0
- package/dist/public/assets/{_DfZ3Abt5.js → _DA6CNMAS.js} +1 -1
- package/dist/public/assets/_DA6CNMAS.js.br +0 -0
- package/dist/public/assets/_DDD7aRxr.js +1 -0
- package/dist/public/assets/_DFCbdJTU.js +1 -0
- package/dist/public/assets/{_ZDh1oKQp.js → _DGyB0J_Z.js} +1 -1
- package/dist/public/assets/_DGyB0J_Z.js.br +0 -0
- package/dist/public/assets/{_BoQsdJdV.js → _DJNoam7G.js} +1 -1
- package/dist/public/assets/_DJNoam7G.js.br +0 -0
- package/dist/public/assets/{_F61IFRtr.js → _DKgv7Cyq.js} +1 -1
- package/dist/public/assets/_DKgv7Cyq.js.br +0 -0
- package/dist/public/assets/{_D9YIljl9.js → _DM2ZsY5Z.js} +1 -1
- package/dist/public/assets/_DM2ZsY5Z.js.br +0 -0
- package/dist/public/assets/{_DgHgR-hZ.js → _DO7dqRyj.js} +1 -1
- package/dist/public/assets/_DO7dqRyj.js.br +0 -0
- package/dist/public/assets/{_D-1h5Hss.js → _DORBDQxD.js} +1 -1
- package/dist/public/assets/_DORBDQxD.js.br +0 -0
- package/dist/public/assets/_DOsfhfso.js +1 -0
- package/dist/public/assets/_DRC6uiX0.js +1 -0
- package/dist/public/assets/_DSWmTo1L.js +1 -0
- package/dist/public/assets/{_C--f0OAN.js → _DU8DeX60.js} +1 -1
- package/dist/public/assets/_DU8DeX60.js.br +0 -0
- package/dist/public/assets/_DUKZkilh.js +1 -0
- package/dist/public/assets/{_CCAfK1VU.js → _DWCS2CFQ.js} +1 -1
- package/dist/public/assets/_DWCS2CFQ.js.br +0 -0
- package/dist/public/assets/_DWnX1Z3a.js +1 -0
- package/dist/public/assets/_DX71QHMR.js +1 -0
- package/dist/public/assets/{_pthxQoj7.js → _DZ0rqa0h.js} +1 -1
- package/dist/public/assets/_DZ0rqa0h.js.br +0 -0
- package/dist/public/assets/{_DDmNNj38.js → _D_TuAhnN.js} +1 -1
- package/dist/public/assets/_D_TuAhnN.js.br +0 -0
- package/dist/public/assets/_D_rLfkXR.js +1 -0
- package/dist/public/assets/_DeBbHTQf.js +1 -0
- package/dist/public/assets/_Dkm85KJF.js +1 -0
- package/dist/public/assets/{_DdnBcgjI.js → _Dml0472r.js} +1 -1
- package/dist/public/assets/_Dml0472r.js.br +0 -0
- package/dist/public/assets/{_BEhDrcww.js → _DouCdQ99.js} +1 -1
- package/dist/public/assets/{_CZa0gQzH.js → _DroY8_no.js} +1 -1
- package/dist/public/assets/_DroY8_no.js.br +0 -0
- package/dist/public/assets/_DtYahvpQ.js +1 -0
- package/dist/public/assets/{_Dzr8Nbyu.js → _DuaSYpQG.js} +1 -1
- package/dist/public/assets/_DuaSYpQG.js.br +0 -0
- package/dist/public/assets/{_SH68xtR9.js → _DuuP0rKI.js} +1 -1
- package/dist/public/assets/_DuuP0rKI.js.br +0 -0
- package/dist/public/assets/{_0L7GeCf8.js → _DyFziHLM.js} +1 -1
- package/dist/public/assets/_DyFziHLM.js.br +0 -0
- package/dist/public/assets/_Dz3s4MY0.js +1 -0
- package/dist/public/assets/_Dz3s4MY0.js.br +0 -0
- package/dist/public/assets/_DzZaUh6D.js +1 -0
- package/dist/public/assets/_DzhUXE8_.js +1 -0
- package/dist/public/assets/_GWc0eYhN.js +1 -0
- package/dist/public/assets/{_BL5Y2CUw.js → _H1xilHgC.js} +1 -1
- package/dist/public/assets/_H1xilHgC.js.br +0 -0
- package/dist/public/assets/{_Bd9f_2h4.js → _HNyiv6zs.js} +1 -1
- package/dist/public/assets/_HNyiv6zs.js.br +0 -0
- package/dist/public/assets/{_D-jzW1eS.js → _HlactPnQ.js} +1 -1
- package/dist/public/assets/_HlactPnQ.js.br +0 -0
- package/dist/public/assets/{_2xmggEiI.js → _JMrxKBGN.js} +1 -1
- package/dist/public/assets/_JMrxKBGN.js.br +0 -0
- package/dist/public/assets/{_DTQWFGgt.js → _JSiyuxRJ.js} +1 -1
- package/dist/public/assets/_JSiyuxRJ.js.br +0 -0
- package/dist/public/assets/{_DMsquaig.js → _JcvJ5ACW.js} +1 -1
- package/dist/public/assets/_JcvJ5ACW.js.br +0 -0
- package/dist/public/assets/{_PMnGojaw.js → _L2f5JNlj.js} +1 -1
- package/dist/public/assets/_L2f5JNlj.js.br +0 -0
- package/dist/public/assets/_LrU9RmZE.js +1 -0
- package/dist/public/assets/{_DAt5J6M_.js → _Mt6ebGGE.js} +10 -10
- package/dist/public/assets/_Mt6ebGGE.js.br +0 -0
- package/dist/public/assets/_Owc9jhpW.js +2 -0
- package/dist/public/assets/_Owc9jhpW.js.br +0 -0
- package/dist/public/assets/_PevhFQ5V.js +1 -0
- package/dist/public/assets/_R1tJA-Qg.js +1 -0
- package/dist/public/assets/{_DHQVtSUu.js → _REcALhmt.js} +1 -1
- package/dist/public/assets/_REcALhmt.js.br +0 -0
- package/dist/public/assets/{_BFlHBfEr.js → _TZpNJCj6.js} +1 -1
- package/dist/public/assets/_TZpNJCj6.js.br +0 -0
- package/dist/public/assets/_VDsjaeWW.js +1 -0
- package/dist/public/assets/{_DtsqwD_h.js → _VgS7WPcA.js} +1 -1
- package/dist/public/assets/_VgS7WPcA.js.br +0 -0
- package/dist/public/assets/_WekB6aHl.js +1 -0
- package/dist/public/assets/_X4dvLi1w.js +1 -0
- package/dist/public/assets/_XXcCKG6W.js +1 -0
- package/dist/public/assets/_Y4miPos6.js +1 -0
- package/dist/public/assets/{_CbkvJoJj.js → _YATrYiFD.js} +1 -1
- package/dist/public/assets/_YATrYiFD.js.br +0 -0
- package/dist/public/assets/{_DBn4INpY.js → _YC0QGp9j.js} +1 -1
- package/dist/public/assets/_YC0QGp9j.js.br +0 -0
- package/dist/public/assets/_YG1qePV2.js +1 -0
- package/dist/public/assets/_Yiwgrm_C.js +1 -0
- package/dist/public/assets/{_BSZnP2C1.js → __favRwtg.js} +1 -1
- package/dist/public/assets/__favRwtg.js.br +0 -0
- package/dist/public/assets/_b0whjSZe.js +1 -0
- package/dist/public/assets/_cw5fHxTz.js +1 -0
- package/dist/public/assets/_gSyGU-mq.js +1 -0
- package/dist/public/assets/_j5nRBBVa.js +1 -0
- package/dist/public/assets/{_8KVmX-ec.js → _jFGgKTYj.js} +1 -1
- package/dist/public/assets/_jFGgKTYj.js.br +0 -0
- package/dist/public/assets/{_BmhJ-bQi.js → _kkbInDpy.js} +1 -1
- package/dist/public/assets/_kkbInDpy.js.br +0 -0
- package/dist/public/assets/_mrvWutef.js +1 -0
- package/dist/public/assets/_nCxsopgT.js +1 -0
- package/dist/public/assets/_pwbytP5z.js +1 -0
- package/dist/public/assets/{_Be760Oeq.js → _sTT2iThd.js} +1 -1
- package/dist/public/assets/_sTT2iThd.js.br +0 -0
- package/dist/public/assets/{_Xei7jbG-.js → _tGE7SNww.js} +1 -1
- package/dist/public/assets/_tGE7SNww.js.br +0 -0
- package/dist/public/assets/_veyGCfhb.js +1 -0
- package/dist/public/assets/{_7kj3hOfH.js → _vfD02BWU.js} +1 -1
- package/dist/public/assets/_vfD02BWU.js.br +0 -0
- package/dist/public/assets/files-view-_b8IktQV.js +2 -0
- package/dist/public/assets/manage-workspace-Bu8_bkKy.js +2 -0
- package/dist/public/assets/new-CGbC3Rki.js +1 -0
- package/dist/public/assets/new-workspace-BPq4RG6p.js +2 -0
- package/dist/public/assets/review-view-Dwph1tIy.js +2 -0
- package/dist/public/assets/settings-CGbC3Rki.js +1 -0
- package/dist/public/assets/settings-page-DfjJBEV4.js +2 -0
- package/dist/public/assets/styles-DmUe5O9c.css +1 -0
- package/dist/public/assets/styles-DmUe5O9c.css.br +0 -0
- package/dist/public/assets/w-CGbC3Rki.js +1 -0
- package/dist/public/assets/w._-BdlGa_yr.js +1 -0
- package/dist/public/assets/w._-CGbC3Rki.js +1 -0
- package/dist/public/assets/w._-Cq1MaRMF.js +1 -0
- package/package.json +1 -1
- package/dist/_tFH4KiOy.js +0 -2
- package/dist/_xm4j4quQ.js +0 -2
- package/dist/public/assets/_-mM4yo3H.js.br +0 -0
- package/dist/public/assets/_0L7GeCf8.js.br +0 -0
- package/dist/public/assets/_2WOV-Xxm.js.br +0 -0
- package/dist/public/assets/_2xmggEiI.js.br +0 -0
- package/dist/public/assets/_5LaG-HZE.js +0 -1
- package/dist/public/assets/_7QNxfo9o.js +0 -1
- package/dist/public/assets/_7kj3hOfH.js.br +0 -0
- package/dist/public/assets/_8AEeEwwI.js +0 -1
- package/dist/public/assets/_8KVmX-ec.js.br +0 -0
- package/dist/public/assets/_B1J5kQMX.js +0 -1
- package/dist/public/assets/_B1ZJGMvk.js +0 -1
- package/dist/public/assets/_B3DCz1-b.js +0 -1
- package/dist/public/assets/_B3DCz1-b.js.br +0 -0
- package/dist/public/assets/_BAD_W-gb.js +0 -1
- package/dist/public/assets/_BByUXZCR.js.br +0 -0
- package/dist/public/assets/_BDJY1Xd1.js.br +0 -0
- package/dist/public/assets/_BFlHBfEr.js.br +0 -0
- package/dist/public/assets/_BG6nf7-6.js +0 -1
- package/dist/public/assets/_BG6nf7-6.js.br +0 -0
- package/dist/public/assets/_BHdwQo1r.js +0 -1
- package/dist/public/assets/_BJz1J7VL.js +0 -1
- package/dist/public/assets/_BKxZiX8Y.js.br +0 -0
- package/dist/public/assets/_BL5Y2CUw.js.br +0 -0
- package/dist/public/assets/_BOA9wu9y.js +0 -1
- package/dist/public/assets/_BQ6HGMiz.js +0 -1
- package/dist/public/assets/_BSZnP2C1.js.br +0 -0
- package/dist/public/assets/_BTK0j-x0.js.br +0 -0
- package/dist/public/assets/_BWZsCsQQ.js.br +0 -0
- package/dist/public/assets/_BWcGdDBZ.js.br +0 -0
- package/dist/public/assets/_BX6XuUUI.js +0 -1
- package/dist/public/assets/_BYImhKdQ.js +0 -1
- package/dist/public/assets/_Bcog8Mvw.js +0 -1
- package/dist/public/assets/_Bd9f_2h4.js.br +0 -0
- package/dist/public/assets/_BdViCDP-.js +0 -1
- package/dist/public/assets/_BdeQis2A.js.br +0 -0
- package/dist/public/assets/_Be760Oeq.js.br +0 -0
- package/dist/public/assets/_Bf8StQtP.js +0 -1
- package/dist/public/assets/_BgqsGerF.js +0 -1
- package/dist/public/assets/_BiHBXSk1.js.br +0 -0
- package/dist/public/assets/_Bic7QDJn.js +0 -1
- package/dist/public/assets/_Bje2UlWb.js +0 -1
- package/dist/public/assets/_BmgC95YK.js.br +0 -0
- package/dist/public/assets/_BmhJ-bQi.js.br +0 -0
- package/dist/public/assets/_BnQVcrhX.js +0 -1
- package/dist/public/assets/_BoQsdJdV.js.br +0 -0
- package/dist/public/assets/_BoTUkl_N.js +0 -1
- package/dist/public/assets/_BpDpZv1R.js.br +0 -0
- package/dist/public/assets/_BpGZbbmD.js +0 -1
- package/dist/public/assets/_BpXuBLlJ.js.br +0 -0
- package/dist/public/assets/_BsRfLR4Y.js +0 -1
- package/dist/public/assets/_BtEy3x8_.js.br +0 -0
- package/dist/public/assets/_BtZdp5Pb.js.br +0 -0
- package/dist/public/assets/_BxFn7bBG.js +0 -1
- package/dist/public/assets/_C--f0OAN.js.br +0 -0
- package/dist/public/assets/_C-_4KAMq.js +0 -1
- package/dist/public/assets/_C3lI_Twn.js +0 -1
- package/dist/public/assets/_C51h13b-.js +0 -1
- package/dist/public/assets/_C8Nimh8k.js.br +0 -0
- package/dist/public/assets/_C9UFsOy1.js +0 -1
- package/dist/public/assets/_CBK_SY_j.js +0 -1
- package/dist/public/assets/_CCAfK1VU.js.br +0 -0
- package/dist/public/assets/_CCw4Mih7.js +0 -1
- package/dist/public/assets/_CDUHEtRr.js.br +0 -0
- package/dist/public/assets/_CHy8Yzm5.js.br +0 -0
- package/dist/public/assets/_CHyLG_jb.js.br +0 -0
- package/dist/public/assets/_CI7eaQDi.js.br +0 -0
- package/dist/public/assets/_CIwfNMk3.js +0 -1
- package/dist/public/assets/_CJYGh-X3.js.br +0 -0
- package/dist/public/assets/_CLWpBKoo.js.br +0 -0
- package/dist/public/assets/_CPlovKCM.js +0 -1
- package/dist/public/assets/_CQDgAaDD.js +0 -1
- package/dist/public/assets/_CRd8czom.js.br +0 -0
- package/dist/public/assets/_CTwtnjHT.js.br +0 -0
- package/dist/public/assets/_CWUZ37Z2.js.br +0 -0
- package/dist/public/assets/_CWYdWpGf.js +0 -1
- package/dist/public/assets/_CWw2xrr5.js.br +0 -0
- package/dist/public/assets/_CZa0gQzH.js.br +0 -0
- package/dist/public/assets/_C_VkFQv_.js.br +0 -0
- package/dist/public/assets/_Cb5fameO.js +0 -1
- package/dist/public/assets/_Cb5znfXe.js +0 -1
- package/dist/public/assets/_CbkvJoJj.js.br +0 -0
- package/dist/public/assets/_CcA9L8Uv.js.br +0 -0
- package/dist/public/assets/_CcmYHRo2.js +0 -1
- package/dist/public/assets/_Cd0WqXuH.js.br +0 -0
- package/dist/public/assets/_Ci9OrA31.js +0 -1
- package/dist/public/assets/_CigEUN1Y.js +0 -1
- package/dist/public/assets/_CmCzrX8O.js +0 -1
- package/dist/public/assets/_Cn1d1sxS.js.br +0 -0
- package/dist/public/assets/_CpU0Rdtw.js.br +0 -0
- package/dist/public/assets/_CrHoYLWK.js.br +0 -0
- package/dist/public/assets/_CrLAwqeM.js +0 -1
- package/dist/public/assets/_Cs2Zd8pI.js.br +0 -0
- package/dist/public/assets/_Cs5YLsyh.js +0 -1
- package/dist/public/assets/_Cskv-lte.js +0 -1
- package/dist/public/assets/_CuZT7B5b.js +0 -1
- package/dist/public/assets/_Cv3jQpwd.js.br +0 -0
- package/dist/public/assets/_CzKQcLq6.js +0 -1
- package/dist/public/assets/_D-1h5Hss.js.br +0 -0
- package/dist/public/assets/_D-jzW1eS.js.br +0 -0
- package/dist/public/assets/_D3R3E-lW.js +0 -1
- package/dist/public/assets/_D3t8fBvV.js +0 -1
- package/dist/public/assets/_D46vZBR0.js.br +0 -0
- package/dist/public/assets/_D5_5gquy.js +0 -1
- package/dist/public/assets/_D624R74e.js +0 -1
- package/dist/public/assets/_D67YJBwp.js.br +0 -0
- package/dist/public/assets/_D7kyaI0s.js.br +0 -0
- package/dist/public/assets/_D8G71X2r.js.br +0 -0
- package/dist/public/assets/_D8mUHp4g.js +0 -1
- package/dist/public/assets/_D9YIljl9.js.br +0 -0
- package/dist/public/assets/_DA-5OGva.js.br +0 -0
- package/dist/public/assets/_DAt5J6M_.js.br +0 -0
- package/dist/public/assets/_DBn4INpY.js.br +0 -0
- package/dist/public/assets/_DBqrfSYd.js +0 -1
- package/dist/public/assets/_DDmNNj38.js.br +0 -0
- package/dist/public/assets/_DGF9MW5D.js +0 -1
- package/dist/public/assets/_DHOPvA0j.js.br +0 -0
- package/dist/public/assets/_DHQVtSUu.js.br +0 -0
- package/dist/public/assets/_DHTvNsC9.js +0 -1
- package/dist/public/assets/_DHafZUX3.js +0 -1
- package/dist/public/assets/_DM3cX6sN.js.br +0 -0
- package/dist/public/assets/_DMsquaig.js.br +0 -0
- package/dist/public/assets/_DNiHEIwz.js +0 -1
- package/dist/public/assets/_DPT6h_sp.js.br +0 -0
- package/dist/public/assets/_DQaRo0_Z.js +0 -1
- package/dist/public/assets/_DSjhAsHE.js +0 -1
- package/dist/public/assets/_DTQWFGgt.js.br +0 -0
- package/dist/public/assets/_DTseWZHC.js.br +0 -0
- package/dist/public/assets/_DULNepbq.js +0 -2
- package/dist/public/assets/_DULNepbq.js.br +0 -0
- package/dist/public/assets/_DVmk0cGb.js +0 -1
- package/dist/public/assets/_DVu8SG8S.js +0 -1
- package/dist/public/assets/_DWu6n0v3.js.br +0 -0
- package/dist/public/assets/_DYIJgXao.js +0 -1
- package/dist/public/assets/_DcDp1vYe.js +0 -1
- package/dist/public/assets/_DdnBcgjI.js.br +0 -0
- package/dist/public/assets/_DeqyAtmP.js +0 -1
- package/dist/public/assets/_DfZ3Abt5.js.br +0 -0
- package/dist/public/assets/_DgHgR-hZ.js.br +0 -0
- package/dist/public/assets/_Dhk4fgzB.js +0 -1
- package/dist/public/assets/_DiNKSmxI.js +0 -1
- package/dist/public/assets/_DiUWhWrq.js +0 -1
- package/dist/public/assets/_Dj1leKJH.js +0 -1
- package/dist/public/assets/_DjpGYd1p.js +0 -1
- package/dist/public/assets/_Dju_1f03.js.br +0 -0
- package/dist/public/assets/_DmGRSsUt.js +0 -1
- package/dist/public/assets/_Dqo4vWfH.js.br +0 -0
- package/dist/public/assets/_Dr-IU6HK.js.br +0 -0
- package/dist/public/assets/_DrqKhRAQ.js +0 -1
- package/dist/public/assets/_DtsqwD_h.js.br +0 -0
- package/dist/public/assets/_DyYt1xor.js.br +0 -0
- package/dist/public/assets/_DzFqbsGy.js +0 -1
- package/dist/public/assets/_Dzr8Nbyu.js.br +0 -0
- package/dist/public/assets/_EaUViMxr.js +0 -1
- package/dist/public/assets/_F61IFRtr.js.br +0 -0
- package/dist/public/assets/_JBpSIlgX.js +0 -1
- package/dist/public/assets/_JoAwMfkR.js +0 -1
- package/dist/public/assets/_LDz6VXdO.js.br +0 -0
- package/dist/public/assets/_Lop0HV3P.js +0 -1
- package/dist/public/assets/_Lop0HV3P.js.br +0 -0
- package/dist/public/assets/_Mg9GxHtB.js +0 -1
- package/dist/public/assets/_NwIYFT5B.js +0 -1
- package/dist/public/assets/_NwIYFT5B.js.br +0 -0
- package/dist/public/assets/_PMnGojaw.js.br +0 -0
- package/dist/public/assets/_RyUSIajb.js.br +0 -0
- package/dist/public/assets/_SH68xtR9.js.br +0 -0
- package/dist/public/assets/_TY_Pdc3F.js.br +0 -0
- package/dist/public/assets/_U6p2S3Z0.js +0 -1
- package/dist/public/assets/_V56TvjWJ.js +0 -1
- package/dist/public/assets/_Xei7jbG-.js.br +0 -0
- package/dist/public/assets/_ZDh1oKQp.js.br +0 -0
- package/dist/public/assets/__rjIklzT.js +0 -1
- package/dist/public/assets/_asNggv5C.js +0 -1
- package/dist/public/assets/_cSxqqciM.js +0 -1
- package/dist/public/assets/_hYHHWgXz.js +0 -1
- package/dist/public/assets/_kdC_mk_s.js.br +0 -0
- package/dist/public/assets/_pthxQoj7.js.br +0 -0
- package/dist/public/assets/_qss_F0VZ.js +0 -1
- package/dist/public/assets/_rKxafATp.js.br +0 -0
- package/dist/public/assets/_uwuCbs_Z.js.br +0 -0
- package/dist/public/assets/_wBNa2EL1.js +0 -1
- package/dist/public/assets/_wvT-w49n.js.br +0 -0
- package/dist/public/assets/files-view-D5Fv0SIK.js +0 -2
- package/dist/public/assets/manage-workspace-Cb9sMIjp.js +0 -2
- package/dist/public/assets/new-5AQb7ar3.js +0 -1
- package/dist/public/assets/new-workspace-o3VxyV3X.js +0 -2
- package/dist/public/assets/review-view-BNRZ1rgz.js +0 -2
- package/dist/public/assets/settings-5AQb7ar3.js +0 -1
- package/dist/public/assets/settings-page-6pXaU21j.js +0 -2
- package/dist/public/assets/styles-6nJ2WylG.css +0 -1
- package/dist/public/assets/styles-6nJ2WylG.css.br +0 -0
- package/dist/public/assets/w-5AQb7ar3.js +0 -1
- package/dist/public/assets/w._-5AQb7ar3.js +0 -1
- package/dist/public/assets/w._-6Uhhy1cN.js +0 -1
- 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("./
|
|
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("./
|
|
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(
|
|
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
|
|
18593
|
-
*
|
|
18594
|
-
* `TMPDIR` that does not exist fails `mktemp`
|
|
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,
|
|
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 {
|
|
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 };
|