@dylanpiercey/work 0.2.18 → 0.2.19
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/README.md +4 -1
- package/bin/cli/session.mjs +157 -28
- package/bin/work.mjs +10 -1
- package/dist/{_BlLEM8du.js → _CsokArOR.js} +109 -15
- package/dist/_L2HNAA_8.js +2 -0
- package/dist/__TCdgPY5.js +173 -0
- package/dist/index.mjs +1597 -1220
- package/dist/public/assets/{_DKlB-yMq.js → _-7Amnss4.js} +1 -1
- package/dist/public/assets/_-7Amnss4.js.br +0 -0
- package/dist/public/assets/_0XXNUttq.js +1 -0
- package/dist/public/assets/{_RudCGuBM.js → _0sTkxfPx.js} +1 -1
- package/dist/public/assets/_0sTkxfPx.js.br +0 -0
- package/dist/public/assets/_0zzYbK0A.js +1 -0
- package/dist/public/assets/{_B0FhzjB2.js → _1M3oZPSf.js} +1 -1
- package/dist/public/assets/_1M3oZPSf.js.br +0 -0
- package/dist/public/assets/_2O5HnHht.js +1 -0
- package/dist/public/assets/_7WlUaJPH.js +1 -0
- package/dist/public/assets/_8Tr7ByPg.js +1 -0
- package/dist/public/assets/_9AXMmQSO.js +1 -0
- package/dist/public/assets/_B1VqbV-X.js +1 -0
- package/dist/public/assets/{_DGRgLaG-.js → _B9I2AEux.js} +1 -1
- package/dist/public/assets/_B9I2AEux.js.br +0 -0
- package/dist/public/assets/{_Dh9434oc.js → _B9qGqvit.js} +1 -1
- package/dist/public/assets/{_DB7_Yora.js → _B9xuaMHt.js} +1 -1
- package/dist/public/assets/_B9xuaMHt.js.br +0 -0
- package/dist/public/assets/{_HpxvfbM2.js → _BAWjkhA8.js} +1 -1
- package/dist/public/assets/_BAWjkhA8.js.br +0 -0
- package/dist/public/assets/{_CpVeIwQ4.js → _BBCzcNZY.js} +1 -1
- package/dist/public/assets/_BBCzcNZY.js.br +0 -0
- package/dist/public/assets/_BBW2szHh.js +1 -0
- package/dist/public/assets/_BCP2Njnu.js +1 -0
- package/dist/public/assets/{_WOU8TCkO.js → _BClUYs-k.js} +1 -1
- package/dist/public/assets/_BClUYs-k.js.br +0 -0
- package/dist/public/assets/{_DwTaEsY5.js → _BDdZkZRc.js} +1 -1
- package/dist/public/assets/_BDdZkZRc.js.br +0 -0
- package/dist/public/assets/_BEDmGSgS.js +1 -0
- package/dist/public/assets/_BEDmGSgS.js.br +0 -0
- package/dist/public/assets/{_tJgkkxOD.js → _BH9BIky6.js} +1 -1
- package/dist/public/assets/_BH9BIky6.js.br +0 -0
- package/dist/public/assets/_BLdi8Ee5.js +1 -0
- package/dist/public/assets/{_rv9KtZHz.js → _BPDSQUbl.js} +1 -1
- package/dist/public/assets/_BPDSQUbl.js.br +0 -0
- package/dist/public/assets/{_sSKEak2x.js → _BQW1kIop.js} +1 -1
- package/dist/public/assets/_BQW1kIop.js.br +0 -0
- package/dist/public/assets/_BQeoUfFw.js +1 -0
- package/dist/public/assets/_BRzroLbh.js +1 -0
- package/dist/public/assets/_BSXsTYSe.js +1 -0
- package/dist/public/assets/_BTXDT3Na.js +1 -0
- package/dist/public/assets/_BXm4xeFI.js +1 -0
- package/dist/public/assets/_BY8UeogK.js +1 -0
- package/dist/public/assets/_BYpyhp64.js +1 -0
- package/dist/public/assets/_BYpyhp64.js.br +0 -0
- package/dist/public/assets/_B_Kz7LnY.js +1 -0
- package/dist/public/assets/{_DYxQeog7.js → _Bcc0Xs64.js} +1 -1
- package/dist/public/assets/_Bcc0Xs64.js.br +0 -0
- package/dist/public/assets/{_CUxBk_RE.js → _BdSsUhCi.js} +1 -1
- package/dist/public/assets/_BdSsUhCi.js.br +0 -0
- package/dist/public/assets/_BdaWssEH.js +1 -0
- package/dist/public/assets/{_C46o3wQ8.js → _BhecGD7y.js} +1 -1
- package/dist/public/assets/_BhecGD7y.js.br +0 -0
- package/dist/public/assets/_Bj9dpPhN.js +1 -0
- package/dist/public/assets/{_Cwdn40Q2.js → _BjZqS7za.js} +1 -1
- package/dist/public/assets/_BjZqS7za.js.br +0 -0
- package/dist/public/assets/_BkSUiyHK.js +1 -0
- package/dist/public/assets/_BlshXH2Y.js +16 -0
- package/dist/public/assets/_BlshXH2Y.js.br +0 -0
- package/dist/public/assets/_BmX-VP7w.js +1 -0
- package/dist/public/assets/{_ClHeQc6g.js → _BmpOmFbo.js} +1 -1
- package/dist/public/assets/_BmpOmFbo.js.br +0 -0
- package/dist/public/assets/_Bo6YntUl.js +1 -0
- package/dist/public/assets/{_9KUM3Nch.js → _BprZx4vg.js} +2 -2
- package/dist/public/assets/_BprZx4vg.js.br +0 -0
- package/dist/public/assets/_Bqm7OnIV.js +1 -0
- package/dist/public/assets/_BquBGUNK.js +1 -0
- package/dist/public/assets/_BquBGUNK.js.br +0 -0
- package/dist/public/assets/_BrB66aRZ.js +1 -0
- package/dist/public/assets/{_B2DHvTZR.js → _Bt03HU8S.js} +1 -1
- package/dist/public/assets/{_vHqiFYsh.js → _BtedGrGs.js} +1 -1
- package/dist/public/assets/_BtedGrGs.js.br +0 -0
- package/dist/public/assets/{_BxKDE6Ct.js → _C-BYkx5h.js} +1 -1
- package/dist/public/assets/_C-BYkx5h.js.br +0 -0
- package/dist/public/assets/{_hbXd8Ogo.js → _C-DhXiEm.js} +1 -1
- package/dist/public/assets/_C-DhXiEm.js.br +0 -0
- package/dist/public/assets/_C-NBFnST.js +1 -0
- package/dist/public/assets/{_DJwY_zBh.js → _C1RigMYD.js} +1 -1
- package/dist/public/assets/_C1RigMYD.js.br +0 -0
- package/dist/public/assets/_C2vRS-ES.js +1 -0
- package/dist/public/assets/{_i6YkSowH.js → _C3fslTAD.js} +1 -1
- package/dist/public/assets/_C3fslTAD.js.br +0 -0
- package/dist/public/assets/_C4EYjWGn.js +1 -0
- package/dist/public/assets/_C4EYjWGn.js.br +0 -0
- package/dist/public/assets/{_Df-N1G_n.js → _C6Yt6h_R.js} +1 -1
- package/dist/public/assets/_C6Yt6h_R.js.br +0 -0
- package/dist/public/assets/{_Dku55Ypt.js → _C7Y4xApK.js} +1 -1
- package/dist/public/assets/_C7Y4xApK.js.br +0 -0
- package/dist/public/assets/{_CPqT91JX.js → _CB52LkYt.js} +1 -1
- package/dist/public/assets/_CB52LkYt.js.br +0 -0
- package/dist/public/assets/{_9JG-F3GR.js → _CBEKHwUV.js} +1 -1
- package/dist/public/assets/_CBEKHwUV.js.br +0 -0
- package/dist/public/assets/_CBSLBYQF.js +1 -0
- package/dist/public/assets/{_Ba9OQzPV.js → _CBgzBB_k.js} +1 -1
- package/dist/public/assets/_CBgzBB_k.js.br +0 -0
- package/dist/public/assets/{_DZqoQxTm.js → _CCoTlnvb.js} +1 -1
- package/dist/public/assets/_CCoTlnvb.js.br +0 -0
- package/dist/public/assets/_CD26To-f.js +1 -0
- package/dist/public/assets/_CDyWgQ0v.js +6 -0
- package/dist/public/assets/_CDyWgQ0v.js.br +0 -0
- package/dist/public/assets/{_B3Z1kRpD.js → _CEC5O89D.js} +1 -1
- package/dist/public/assets/_CEC5O89D.js.br +0 -0
- package/dist/public/assets/_CF2kEAU7.js +1 -0
- package/dist/public/assets/_CFURqbmO.js +1 -0
- package/dist/public/assets/{_DG3L8-RO.js → _CG383oZY.js} +1 -1
- package/dist/public/assets/_CG383oZY.js.br +0 -0
- package/dist/public/assets/_CHNJosg3.js +1 -0
- package/dist/public/assets/{_Cq4DpL3R.js → _CHmEM8Sm.js} +1 -1
- package/dist/public/assets/_CHmEM8Sm.js.br +0 -0
- package/dist/public/assets/{_DnUBW0Qq.js → _CIfCdAzS.js} +1 -1
- package/dist/public/assets/_CKyzH0fl.js +1 -0
- package/dist/public/assets/{_YDyNvOET.js → _CL8DzBla.js} +1 -1
- package/dist/public/assets/_CL8DzBla.js.br +0 -0
- package/dist/public/assets/_CNYS94C5.js +1 -0
- package/dist/public/assets/_CNhypHJN.js +1 -0
- package/dist/public/assets/_CO-FkxlA.js +1 -0
- package/dist/public/assets/_COiGBSpO.js +1 -0
- package/dist/public/assets/_COvolvRQ.js +1 -0
- package/dist/public/assets/{_DNrRZhO7.js → _CPaMvBMG.js} +1 -1
- package/dist/public/assets/_CPaMvBMG.js.br +0 -0
- package/dist/public/assets/{_B6VtVybz.js → _CPj_VL66.js} +1 -1
- package/dist/public/assets/_CPj_VL66.js.br +0 -0
- package/dist/public/assets/_CQJC8Vx4.js +1 -0
- package/dist/public/assets/_CRHNlzBC.js +1 -0
- package/dist/public/assets/{_B26gPL08.js → _CToqok6Q.js} +1 -1
- package/dist/public/assets/_CToqok6Q.js.br +0 -0
- package/dist/public/assets/_CUFKkl0B.js +1 -0
- package/dist/public/assets/_CZsOUa-q.js +1 -0
- package/dist/public/assets/{_BXPUZfKX.js → _C_D5TPb7.js} +1 -1
- package/dist/public/assets/_C_D5TPb7.js.br +0 -0
- package/dist/public/assets/_CdHI48v6.js +1 -0
- package/dist/public/assets/{_B3sH8Usv.js → _CdpmkkzR.js} +1 -1
- package/dist/public/assets/_CdpmkkzR.js.br +0 -0
- package/dist/public/assets/{_DDWIDZyP.js → _CdtjIoUd.js} +1 -1
- package/dist/public/assets/_CdtjIoUd.js.br +0 -0
- package/dist/public/assets/_Ce9Tv01m.js +1 -0
- package/dist/public/assets/_CeC7Lv10.js +1 -0
- package/dist/public/assets/{_Bs_MPTBZ.js → _CfP0f0PU.js} +1 -1
- package/dist/public/assets/_CfP0f0PU.js.br +0 -0
- package/dist/public/assets/_Cg7DH3xk.js +1 -0
- package/dist/public/assets/_Cg7DH3xk.js.br +0 -0
- package/dist/public/assets/_CikNq0z8.js +1 -0
- package/dist/public/assets/{_B5NleRC6.js → _Cl7LTITm.js} +1 -1
- package/dist/public/assets/_Cl7LTITm.js.br +0 -0
- package/dist/public/assets/{_vG7bXn-C.js → _Cmtl59QM.js} +1 -1
- package/dist/public/assets/_Cmtl59QM.js.br +0 -0
- package/dist/public/assets/_CshYq_Dp.js +1 -0
- package/dist/public/assets/{_BIUaA4Nl.js → _CspPbDoP.js} +1 -1
- package/dist/public/assets/_CspPbDoP.js.br +0 -0
- package/dist/public/assets/{_oVsjszGq.js → _Ctjz3BD9.js} +1 -1
- package/dist/public/assets/_Ctjz3BD9.js.br +0 -0
- package/dist/public/assets/{_CYcgwayF.js → _CuglAToi.js} +1 -1
- package/dist/public/assets/_CuglAToi.js.br +0 -0
- package/dist/public/assets/_CwSoAVRN.js +1 -0
- package/dist/public/assets/_D0XQV-Hm.js +1 -0
- package/dist/public/assets/{_Bn6y2_ex.js → _D36PnqCD.js} +1 -1
- package/dist/public/assets/_D36PnqCD.js.br +0 -0
- package/dist/public/assets/{_DMCVOg7x.js → _D3IviZbJ.js} +1 -1
- package/dist/public/assets/_D3IviZbJ.js.br +0 -0
- package/dist/public/assets/_D6rgUB9O.js +1 -0
- package/dist/public/assets/{_l9xpLTP_.js → _D7qWWxdI.js} +1 -1
- package/dist/public/assets/_D7qWWxdI.js.br +0 -0
- package/dist/public/assets/{_DXvsvUmJ.js → _D8ac72_O.js} +1 -1
- package/dist/public/assets/_D8ac72_O.js.br +0 -0
- package/dist/public/assets/_D9WWxrQR.js +1 -0
- package/dist/public/assets/_D9hI5dSA.js +1 -0
- package/dist/public/assets/{_f8D86HXZ.js → _DCrPsldZ.js} +1 -1
- package/dist/public/assets/_DCrPsldZ.js.br +0 -0
- package/dist/public/assets/{_BSRsPQTe.js → _DDcVFyaQ.js} +1 -1
- package/dist/public/assets/_DDcVFyaQ.js.br +0 -0
- package/dist/public/assets/_DDhkKo8Q.js +1 -0
- package/dist/public/assets/{_B4hn3NNW.js → _DJBR8Qwq.js} +1 -1
- package/dist/public/assets/_DJBR8Qwq.js.br +0 -0
- package/dist/public/assets/_DLpa6VYT.js +1 -0
- package/dist/public/assets/_DMqe6rR-.js +1 -0
- package/dist/public/assets/{_Cfts4mFJ.js → _DN7pTn2g.js} +1 -1
- package/dist/public/assets/_DN7pTn2g.js.br +0 -0
- package/dist/public/assets/_DP8UuFuJ.js +1 -0
- package/dist/public/assets/_DQedUaqM.js +1 -0
- package/dist/public/assets/{_BkGAUdMd.js → _DSCqWPO0.js} +1 -1
- package/dist/public/assets/_DSCqWPO0.js.br +0 -0
- package/dist/public/assets/{_B-H6ABVZ.js → _DSeQngGR.js} +1 -1
- package/dist/public/assets/_DSeQngGR.js.br +0 -0
- package/dist/public/assets/{_B-iOtMg6.js → _DTNiWZFr.js} +1 -1
- package/dist/public/assets/_DTNiWZFr.js.br +0 -0
- package/dist/public/assets/_DThlusXY.js +1 -0
- package/dist/public/assets/_DUK16H19.js +1 -0
- package/dist/public/assets/_DUZ13t3U.js +1 -0
- package/dist/public/assets/{_DUH5o_iN.js → _DWb03VKf.js} +1 -1
- package/dist/public/assets/_DWb03VKf.js.br +0 -0
- package/dist/public/assets/_DWsyhfgn.js +1 -0
- package/dist/public/assets/_DXuzYhW6.js +1 -0
- package/dist/public/assets/_DXyOzA2b.js +1 -0
- package/dist/public/assets/{_CZsqsL_m.js → _DYUFCi44.js} +1 -1
- package/dist/public/assets/_DYUFCi44.js.br +0 -0
- package/dist/public/assets/{_DHYIZWev.js → _DYhs8iJg.js} +12 -12
- package/dist/public/assets/_DYhs8iJg.js.br +0 -0
- package/dist/public/assets/{_DjYscMjF.js → _D__ojGam.js} +1 -1
- package/dist/public/assets/_D__ojGam.js.br +0 -0
- package/dist/public/assets/_DaFI_W5D.js +1 -0
- package/dist/public/assets/{_BI45WgW9.js → _DbT6uo7W.js} +1 -1
- package/dist/public/assets/_DbT6uo7W.js.br +0 -0
- package/dist/public/assets/_DhnT0cCE.js +1 -0
- package/dist/public/assets/_Dm9OGn2q.js +1 -0
- package/dist/public/assets/_DmkeGFoM.js +1 -0
- package/dist/public/assets/{_CIDjLk1A.js → _DmoI4cIl.js} +1 -1
- package/dist/public/assets/_DmoI4cIl.js.br +0 -0
- package/dist/public/assets/{_C9k00otG.js → _DpbHp8yR.js} +1 -1
- package/dist/public/assets/_DpbHp8yR.js.br +0 -0
- package/dist/public/assets/_Dqz_HBE1.js +1 -0
- package/dist/public/assets/{_CcINcTUt.js → _DsehEuMD.js} +1 -1
- package/dist/public/assets/_DsehEuMD.js.br +0 -0
- package/dist/public/assets/{_Bt4cxzaP.js → _Dtx52FYB.js} +1 -1
- package/dist/public/assets/_DuEyirL6.js +1 -0
- package/dist/public/assets/_DuuloSIi.js +1 -0
- package/dist/public/assets/{_BJpBnuvv.js → _DuyCZnNC.js} +1 -1
- package/dist/public/assets/_DuyCZnNC.js.br +0 -0
- package/dist/public/assets/{_B8joFpf1.js → _Dw1P6xZJ.js} +1 -1
- package/dist/public/assets/_Dw1P6xZJ.js.br +0 -0
- package/dist/public/assets/{_XWw1j8vS.js → _DzNFlI0M.js} +1 -1
- package/dist/public/assets/_DzNFlI0M.js.br +0 -0
- package/dist/public/assets/{_8_DzkMgB.js → _EcMqP1xI.js} +1 -1
- package/dist/public/assets/_EcMqP1xI.js.br +0 -0
- package/dist/public/assets/{_BLeLpnYL.js → _G1BLeMns.js} +1 -1
- package/dist/public/assets/_G1BLeMns.js.br +0 -0
- package/dist/public/assets/{_BkHLXMjq.js → _G8KNSVdM.js} +1 -1
- package/dist/public/assets/_G8KNSVdM.js.br +0 -0
- package/dist/public/assets/{_CLV83hY7.js → _J1v2clxU.js} +1 -1
- package/dist/public/assets/_J1v2clxU.js.br +0 -0
- package/dist/public/assets/{_DRpsUHP5.js → _J3wdy6bJ.js} +1 -1
- package/dist/public/assets/_J3wdy6bJ.js.br +0 -0
- package/dist/public/assets/{_DUmYv8Kf.js → _MHZgY1AQ.js} +1 -1
- package/dist/public/assets/_MHZgY1AQ.js.br +0 -0
- package/dist/public/assets/_NHTZitq1.js +2 -0
- package/dist/public/assets/_NHTZitq1.js.br +0 -0
- package/dist/public/assets/_PsuNqRL9.js +86 -0
- package/dist/public/assets/_PsuNqRL9.js.br +0 -0
- package/dist/public/assets/{_10dZ1R0m.js → _T5HFHZgl.js} +1 -1
- package/dist/public/assets/_T5HFHZgl.js.br +0 -0
- package/dist/public/assets/{_o8mJsMHw.js → _UZAFx6D8.js} +1 -1
- package/dist/public/assets/_UZAFx6D8.js.br +0 -0
- package/dist/public/assets/_XA8_RQXF.js +1 -0
- package/dist/public/assets/{_CcflXOTj.js → _XsB9KmcW.js} +1 -1
- package/dist/public/assets/_XsB9KmcW.js.br +0 -0
- package/dist/public/assets/{_C-z8Ntse.js → _YoXk_8Bl.js} +1 -1
- package/dist/public/assets/_YoXk_8Bl.js.br +0 -0
- package/dist/public/assets/_YubCdy3Z.js +1 -0
- package/dist/public/assets/{_BXHggM8M.js → _bDI-pCZR.js} +1 -1
- package/dist/public/assets/_bDI-pCZR.js.br +0 -0
- package/dist/public/assets/{_BD1SQU0V.js → _bHL-NcWS.js} +1 -1
- package/dist/public/assets/_bHL-NcWS.js.br +0 -0
- package/dist/public/assets/_bqRzDYc8.js +1 -0
- package/dist/public/assets/{_GK8r-gEu.js → _briyaWgK.js} +1 -1
- package/dist/public/assets/_briyaWgK.js.br +0 -0
- package/dist/public/assets/{_DG_QOtsx.js → _dVHSDgPC.js} +1 -1
- package/dist/public/assets/_dVHSDgPC.js.br +0 -0
- package/dist/public/assets/_gkZjZ9I4.js +1 -0
- package/dist/public/assets/_plyCYAnN.js +1 -0
- package/dist/public/assets/_q0Z44mWJ.js +1 -0
- package/dist/public/assets/_q0Z44mWJ.js.br +0 -0
- package/dist/public/assets/{_CFKwHn62.js → _qAsGEOt5.js} +1 -1
- package/dist/public/assets/_qAsGEOt5.js.br +0 -0
- package/dist/public/assets/{_w-MAJku6.js → _qxffRpjc.js} +1 -1
- package/dist/public/assets/{_CX5VOdNU.js → _uCKs5N6Q.js} +1 -1
- package/dist/public/assets/_uCKs5N6Q.js.br +0 -0
- package/dist/public/assets/_utWnC80Q.js +1 -0
- package/dist/public/assets/_utvzcBHT.js +1 -0
- package/dist/public/assets/_v8WbCPI8.js +1 -0
- package/dist/public/assets/_yK4b_Bl5.js +1 -0
- package/dist/public/assets/_yoQW4BY5.js +1 -0
- package/dist/public/assets/_zB6USXHX.js +1 -0
- package/dist/public/assets/{_5tN48iuJ.js → _zN8SypHW.js} +1 -1
- package/dist/public/assets/_zN8SypHW.js.br +0 -0
- package/dist/public/assets/files-view-Fl0rU3Ns.js +2 -0
- package/dist/public/assets/manage-workspace-DggRcsXf.js +2 -0
- package/dist/public/assets/new-C7NxTJAT.js +1 -0
- package/dist/public/assets/new-workspace-C0pw5Iz1.js +2 -0
- package/dist/public/assets/review-view-C4YQ0J-X.js +2 -0
- package/dist/public/assets/settings-C7NxTJAT.js +1 -0
- package/dist/public/assets/settings-page-Cl_1tWCv.js +2 -0
- package/dist/public/assets/styles-Vcsj4CA7.css +1 -0
- package/dist/public/assets/styles-Vcsj4CA7.css.br +0 -0
- package/dist/public/assets/w-C7NxTJAT.js +1 -0
- package/dist/public/assets/w._-BbFH2lR-.js +1 -0
- package/dist/public/assets/w._-C7NxTJAT.js +1 -0
- package/dist/public/assets/w._-YIzLOiyZ.js +1 -0
- package/lib/preview/media.d.mts +1 -1
- package/lib/preview/media.mjs +15 -2
- package/package.json +1 -1
- package/dist/_BAJGOEa1.js +0 -168
- package/dist/_t9VsALwo.js +0 -2
- package/dist/public/assets/_10dZ1R0m.js.br +0 -0
- package/dist/public/assets/_1EPD0XJG.js +0 -1
- package/dist/public/assets/_1jA3fFvQ.js +0 -1
- package/dist/public/assets/_4Sj6a8Ya.js +0 -1
- package/dist/public/assets/_4Sj6a8Ya.js.br +0 -0
- package/dist/public/assets/_5tN48iuJ.js.br +0 -0
- package/dist/public/assets/_8_DzkMgB.js.br +0 -0
- package/dist/public/assets/_9JG-F3GR.js.br +0 -0
- package/dist/public/assets/_9KUM3Nch.js.br +0 -0
- package/dist/public/assets/_B-H6ABVZ.js.br +0 -0
- package/dist/public/assets/_B-iOtMg6.js.br +0 -0
- package/dist/public/assets/_B0FhzjB2.js.br +0 -0
- package/dist/public/assets/_B26gPL08.js.br +0 -0
- package/dist/public/assets/_B3Z1kRpD.js.br +0 -0
- package/dist/public/assets/_B3sH8Usv.js.br +0 -0
- package/dist/public/assets/_B42hLH2K.js +0 -1
- package/dist/public/assets/_B4hn3NNW.js.br +0 -0
- package/dist/public/assets/_B5NleRC6.js.br +0 -0
- package/dist/public/assets/_B5fRGxPQ.js +0 -1
- package/dist/public/assets/_B5fRGxPQ.js.br +0 -0
- package/dist/public/assets/_B65yR5Ej.js +0 -1
- package/dist/public/assets/_B6Sh9WEH.js +0 -1
- package/dist/public/assets/_B6VtVybz.js.br +0 -0
- package/dist/public/assets/_B7rJ4n9b.js +0 -1
- package/dist/public/assets/_B8M-AD29.js +0 -1
- package/dist/public/assets/_B8joFpf1.js.br +0 -0
- package/dist/public/assets/_B9nA-Uh1.js +0 -1
- package/dist/public/assets/_B9nA-Uh1.js.br +0 -0
- package/dist/public/assets/_BA6X_Aj6.js +0 -1
- package/dist/public/assets/_BBFJV2Bx.js +0 -1
- package/dist/public/assets/_BCW5GFMW.js +0 -1
- package/dist/public/assets/_BD1SQU0V.js.br +0 -0
- package/dist/public/assets/_BEpd9Y1R.js +0 -1
- package/dist/public/assets/_BEy7R4W_.js +0 -1
- package/dist/public/assets/_BFGJOHQb.js +0 -1
- package/dist/public/assets/_BI45WgW9.js.br +0 -0
- package/dist/public/assets/_BIKvQKWe.js +0 -1
- package/dist/public/assets/_BIPnL2aI.js +0 -1
- package/dist/public/assets/_BIUaA4Nl.js.br +0 -0
- package/dist/public/assets/_BJpBnuvv.js.br +0 -0
- package/dist/public/assets/_BLeLpnYL.js.br +0 -0
- package/dist/public/assets/_BMb5ANTv.js +0 -1
- package/dist/public/assets/_BSRsPQTe.js.br +0 -0
- package/dist/public/assets/_BVuerXin.js +0 -6
- package/dist/public/assets/_BVuerXin.js.br +0 -0
- package/dist/public/assets/_BWV8aSlZ.js +0 -1
- package/dist/public/assets/_BXHggM8M.js.br +0 -0
- package/dist/public/assets/_BXPUZfKX.js.br +0 -0
- package/dist/public/assets/_BYebhygn.js +0 -1
- package/dist/public/assets/_BZgCxd-U.js +0 -1
- package/dist/public/assets/_BZgCxd-U.js.br +0 -0
- package/dist/public/assets/_B_W51WxU.js +0 -1
- package/dist/public/assets/_B_jFFNyT.js +0 -1
- package/dist/public/assets/_Ba9OQzPV.js.br +0 -0
- package/dist/public/assets/_BayiY7GU.js +0 -1
- package/dist/public/assets/_BcDMeS82.js +0 -1
- package/dist/public/assets/_BdD1sZp_.js +0 -1
- package/dist/public/assets/_Bg_WwlL2.js +0 -1
- package/dist/public/assets/_BhHzv4g0.js +0 -1
- package/dist/public/assets/_BjEinMEe.js +0 -1
- package/dist/public/assets/_BjEinMEe.js.br +0 -0
- package/dist/public/assets/_BkGAUdMd.js.br +0 -0
- package/dist/public/assets/_BkHLXMjq.js.br +0 -0
- package/dist/public/assets/_BmSWsZvV.js +0 -1
- package/dist/public/assets/_Bn6y2_ex.js.br +0 -0
- package/dist/public/assets/_Bp2gqUaf.js +0 -1
- package/dist/public/assets/_Bs6oYKkD.js +0 -1
- package/dist/public/assets/_Bs_MPTBZ.js.br +0 -0
- package/dist/public/assets/_Bt13j1ev.js +0 -1
- package/dist/public/assets/_BwlnYt-t.js +0 -1
- package/dist/public/assets/_Bx9aUXTG.js +0 -1
- package/dist/public/assets/_BxKDE6Ct.js.br +0 -0
- package/dist/public/assets/_BymFDqKj.js +0 -1
- package/dist/public/assets/_C-z8Ntse.js.br +0 -0
- package/dist/public/assets/_C0XUbqWe.js +0 -1
- package/dist/public/assets/_C1upDwBv.js +0 -1
- package/dist/public/assets/_C3f4huqn.js +0 -1
- package/dist/public/assets/_C46o3wQ8.js.br +0 -0
- package/dist/public/assets/_C4_3qKLX.js +0 -1
- package/dist/public/assets/_C7tG4xwv.js +0 -1
- package/dist/public/assets/_C8LciIOa.js +0 -1
- package/dist/public/assets/_C9k00otG.js.br +0 -0
- package/dist/public/assets/_CBG92pZO.js +0 -1
- package/dist/public/assets/_CBfI2lSr.js +0 -1
- package/dist/public/assets/_CFKwHn62.js.br +0 -0
- package/dist/public/assets/_CHDvRNgn.js +0 -1
- package/dist/public/assets/_CIDjLk1A.js.br +0 -0
- package/dist/public/assets/_CLV83hY7.js.br +0 -0
- package/dist/public/assets/_CO8ZosDU.js +0 -1
- package/dist/public/assets/_CPqT91JX.js.br +0 -0
- package/dist/public/assets/_CRZ03hrO.js +0 -1
- package/dist/public/assets/_CUKvJRmi.js +0 -1
- package/dist/public/assets/_CU_FKEsy.js +0 -1
- package/dist/public/assets/_CUxBk_RE.js.br +0 -0
- package/dist/public/assets/_CW_vyZfo.js +0 -1
- package/dist/public/assets/_CX5VOdNU.js.br +0 -0
- package/dist/public/assets/_CYcgwayF.js.br +0 -0
- package/dist/public/assets/_CZsqsL_m.js.br +0 -0
- package/dist/public/assets/_C_a8QggH.js +0 -1
- package/dist/public/assets/_C_ymFHNL.js +0 -1
- package/dist/public/assets/_CaU4irFc.js +0 -1
- package/dist/public/assets/_Cb3fSi2R.js +0 -1
- package/dist/public/assets/_CcINcTUt.js.br +0 -0
- package/dist/public/assets/_CcflXOTj.js.br +0 -0
- package/dist/public/assets/_Cfts4mFJ.js.br +0 -0
- package/dist/public/assets/_ClHeQc6g.js.br +0 -0
- package/dist/public/assets/_CnSlVcEh.js +0 -1
- package/dist/public/assets/_Co71-HWR.js +0 -1
- package/dist/public/assets/_CpEeHKyF.js +0 -1
- package/dist/public/assets/_CpVeIwQ4.js.br +0 -0
- package/dist/public/assets/_Cq4DpL3R.js.br +0 -0
- package/dist/public/assets/_CvxsvMFa.js +0 -1
- package/dist/public/assets/_Cwdn40Q2.js.br +0 -0
- package/dist/public/assets/_CzN0wC_5.js +0 -16
- package/dist/public/assets/_CzN0wC_5.js.br +0 -0
- package/dist/public/assets/_D3ieGLoq.js +0 -1
- package/dist/public/assets/_D4wF26fk.js +0 -1
- package/dist/public/assets/_D9a9nY1Q.js +0 -1
- package/dist/public/assets/_DB7_Yora.js.br +0 -0
- package/dist/public/assets/_DDWIDZyP.js.br +0 -0
- package/dist/public/assets/_DG3L8-RO.js.br +0 -0
- package/dist/public/assets/_DGRgLaG-.js.br +0 -0
- package/dist/public/assets/_DG_QOtsx.js.br +0 -0
- package/dist/public/assets/_DHYIZWev.js.br +0 -0
- package/dist/public/assets/_DJwY_zBh.js.br +0 -0
- package/dist/public/assets/_DKlB-yMq.js.br +0 -0
- package/dist/public/assets/_DMCVOg7x.js.br +0 -0
- package/dist/public/assets/_DMXnrdYy.js +0 -1
- package/dist/public/assets/_DMXnrdYy.js.br +0 -0
- package/dist/public/assets/_DNrRZhO7.js.br +0 -0
- package/dist/public/assets/_DPdb5l-Z.js +0 -1
- package/dist/public/assets/_DRpsUHP5.js.br +0 -0
- package/dist/public/assets/_DUH5o_iN.js.br +0 -0
- package/dist/public/assets/_DUmYv8Kf.js.br +0 -0
- package/dist/public/assets/_DXvsvUmJ.js.br +0 -0
- package/dist/public/assets/_DYxQeog7.js.br +0 -0
- package/dist/public/assets/_DZIDdpeW.js +0 -1
- package/dist/public/assets/_DZqoQxTm.js.br +0 -0
- package/dist/public/assets/_D_4RJnk0.js +0 -2
- package/dist/public/assets/_D_4RJnk0.js.br +0 -0
- package/dist/public/assets/_DclJXqwW.js +0 -1
- package/dist/public/assets/_Debmjz1c.js +0 -1
- package/dist/public/assets/_DeiCZCO_.js +0 -1
- package/dist/public/assets/_Df-N1G_n.js.br +0 -0
- package/dist/public/assets/_Df_3rEok.js +0 -86
- package/dist/public/assets/_Df_3rEok.js.br +0 -0
- package/dist/public/assets/_DjYscMjF.js.br +0 -0
- package/dist/public/assets/_Dku55Ypt.js.br +0 -0
- package/dist/public/assets/_Dm8TVkBX.js +0 -1
- package/dist/public/assets/_DoOPrRIy.js +0 -1
- package/dist/public/assets/_DqJvxlYV.js +0 -1
- package/dist/public/assets/_Drle66GA.js +0 -1
- package/dist/public/assets/_DtrvrAfl.js +0 -1
- package/dist/public/assets/_DwTaEsY5.js.br +0 -0
- package/dist/public/assets/_Dypj9l-z.js +0 -1
- package/dist/public/assets/_DyvwMfCp.js +0 -1
- package/dist/public/assets/_GK8r-gEu.js.br +0 -0
- package/dist/public/assets/_HpxvfbM2.js.br +0 -0
- package/dist/public/assets/_RudCGuBM.js.br +0 -0
- package/dist/public/assets/_UbfI3k4y.js +0 -1
- package/dist/public/assets/_WOU8TCkO.js.br +0 -0
- package/dist/public/assets/_XWw1j8vS.js.br +0 -0
- package/dist/public/assets/_YDyNvOET.js.br +0 -0
- package/dist/public/assets/_f8D86HXZ.js.br +0 -0
- package/dist/public/assets/_hbXd8Ogo.js.br +0 -0
- package/dist/public/assets/_i6YkSowH.js.br +0 -0
- package/dist/public/assets/_k1ciacDf.js +0 -1
- package/dist/public/assets/_k6nXIP-i.js +0 -1
- package/dist/public/assets/_keX09TNx.js +0 -1
- package/dist/public/assets/_l9xpLTP_.js.br +0 -0
- package/dist/public/assets/_n9Rb26YX.js +0 -1
- package/dist/public/assets/_o8mJsMHw.js.br +0 -0
- package/dist/public/assets/_oVsjszGq.js.br +0 -0
- package/dist/public/assets/_pM8W420Q.js +0 -1
- package/dist/public/assets/_rv9KtZHz.js.br +0 -0
- package/dist/public/assets/_sSKEak2x.js.br +0 -0
- package/dist/public/assets/_tJgkkxOD.js.br +0 -0
- package/dist/public/assets/_uP3LGOtV.js +0 -1
- package/dist/public/assets/_vG7bXn-C.js.br +0 -0
- package/dist/public/assets/_vHqiFYsh.js.br +0 -0
- package/dist/public/assets/_vXJ7nP0d.js +0 -1
- package/dist/public/assets/_wvhU__5f.js +0 -1
- package/dist/public/assets/_xFMpRp_e.js +0 -1
- package/dist/public/assets/_yXimF5vw.js +0 -1
- package/dist/public/assets/files-view-BennlUmP.js +0 -2
- package/dist/public/assets/manage-workspace-CaESLJdc.js +0 -2
- package/dist/public/assets/new-BNH4m99d.js +0 -1
- package/dist/public/assets/new-workspace-CwiZjHNn.js +0 -2
- package/dist/public/assets/review-view-BdbMyVt7.js +0 -2
- package/dist/public/assets/settings-BNH4m99d.js +0 -1
- package/dist/public/assets/settings-page-CU3aC70Q.js +0 -2
- package/dist/public/assets/styles-ctr-Sxsj.css +0 -1
- package/dist/public/assets/styles-ctr-Sxsj.css.br +0 -0
- package/dist/public/assets/w-BNH4m99d.js +0 -1
- package/dist/public/assets/w._-BNH4m99d.js +0 -1
- package/dist/public/assets/w._-CLYxMMR4.js +0 -1
- package/dist/public/assets/w._-_w8eUYMy.js +0 -1
package/README.md
CHANGED
|
@@ -59,7 +59,10 @@ work-source # status
|
|
|
59
59
|
Everything the app's pages do has a `work` command too, so an agent — or a
|
|
60
60
|
script — can use and set up work from a terminal: `work help` lists them.
|
|
61
61
|
Inside a workspace, `work branches`, `work session`, `work topic`,
|
|
62
|
-
`work review`, `work notify` and `work open`;
|
|
62
|
+
`work review`, `work notify` and `work open`; agents start and message each
|
|
63
|
+
other with `work session new|send|wait` — any vendor's, each in a tab of its
|
|
64
|
+
own the user watches, its last message as a turn ends coming back to the
|
|
65
|
+
one that asked as a prompt; to change things,
|
|
63
66
|
`work workspace create`, `work repo add`, `work config get|set` (checked
|
|
64
67
|
against what each setting takes; `work config schema` lists them),
|
|
65
68
|
`work agent|skill|lsp|host` and `work gh login`; `work status` sums the
|
package/bin/cli/session.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// `work session`: which session this is (an agent's own pane, by
|
|
2
2
|
// WORK_SESSION_ID), its name in the session list, and the workspace's
|
|
3
|
-
// other sessions — starting one,
|
|
3
|
+
// other sessions — starting one, messaging it and waiting on its reply,
|
|
4
|
+
// closing it (server/messages.ts).
|
|
4
5
|
|
|
5
6
|
/** More sessions than this in one workspace is an agent starting them in
|
|
6
7
|
* a loop, not a plan: past it, `new` wants --force. */
|
|
@@ -16,21 +17,84 @@ function sessionId(ctx) {
|
|
|
16
17
|
return id;
|
|
17
18
|
}
|
|
18
19
|
|
|
19
|
-
/**
|
|
20
|
+
/** How long `wait` waits by default: inside an agent's own tool limit
|
|
21
|
+
* (ten minutes for most), so it ends saying who is still working rather
|
|
22
|
+
* than being killed. */
|
|
23
|
+
const WAIT_S = 540;
|
|
24
|
+
const POLL_MS = 1500;
|
|
25
|
+
|
|
26
|
+
/** The workspace's sessions with their state, this pane's marked, each
|
|
27
|
+
* after the session that started it (as the sidebar lists them). */
|
|
20
28
|
async function sessionsOf(ctx, wsId) {
|
|
21
29
|
const me = process.env.WORK_SESSION_ID;
|
|
22
30
|
const list = await ctx.api.get(`/api/workspaces/${wsId}/sessions`);
|
|
23
|
-
|
|
31
|
+
const rows = list.map((s) => ({
|
|
24
32
|
id: s.id,
|
|
25
33
|
agent: s.agent,
|
|
26
34
|
title: s.title || null,
|
|
27
35
|
phase: s.state?.phase || (s.state?.alive ? "idle" : "off"),
|
|
36
|
+
parent: s.parent_id || null,
|
|
37
|
+
waitingOn: s.messages?.waitingOn ?? [],
|
|
38
|
+
queued: s.messages?.queued ?? 0,
|
|
28
39
|
self: s.id === me,
|
|
29
40
|
}));
|
|
41
|
+
const ids = new Set(rows.map((s) => s.id));
|
|
42
|
+
const out = [];
|
|
43
|
+
const walk = (s, depth) => {
|
|
44
|
+
if (out.some((o) => o.id === s.id)) return;
|
|
45
|
+
out.push({ ...s, depth });
|
|
46
|
+
for (const c of rows) if (c.parent === s.id) walk(c, depth + 1);
|
|
47
|
+
};
|
|
48
|
+
for (const s of rows) if (!s.parent || !ids.has(s.parent)) walk(s, 0);
|
|
49
|
+
for (const s of rows) walk(s, 0);
|
|
50
|
+
return out;
|
|
30
51
|
}
|
|
31
52
|
|
|
32
53
|
function sessionLine(ctx, s) {
|
|
33
|
-
|
|
54
|
+
const notes = [
|
|
55
|
+
s.waitingOn.length && `waiting on ${s.waitingOn.join(", ")}`,
|
|
56
|
+
s.queued && `${s.queued} queued for it`,
|
|
57
|
+
s.self && "this session",
|
|
58
|
+
].filter(Boolean);
|
|
59
|
+
return `${" ".repeat(s.depth ?? 0)}${ctx.pad(s.id, 9)} ${ctx.pad(s.agent, 10)} ${ctx.pad(s.phase, 8)} ${s.title || ""}${notes.length ? ` (${notes.join("; ")})` : ""}`;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** A flag's value, "-" (stdin) included, which ctx.flag takes for a
|
|
63
|
+
* flag of its own. */
|
|
64
|
+
function valueOf(ctx, flag) {
|
|
65
|
+
const i = ctx.args.indexOf(flag);
|
|
66
|
+
if (i >= 0 && ctx.args[i + 1] === "-") return "-";
|
|
67
|
+
return ctx.flag(flag);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** The text itself, or stdin's for "-": a heredoc carries a long prompt
|
|
71
|
+
* with quotes in it, which an argument mangles. */
|
|
72
|
+
async function textOf(value) {
|
|
73
|
+
if (value !== "-") return value;
|
|
74
|
+
const chunks = [];
|
|
75
|
+
for await (const chunk of process.stdin) chunks.push(chunk);
|
|
76
|
+
return Buffer.concat(chunks).toString("utf8").replace(/\n$/, "");
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** What became of a message, for the sender. */
|
|
80
|
+
function sentText(id, r) {
|
|
81
|
+
const lines = [
|
|
82
|
+
r.delivered
|
|
83
|
+
? `sent to ${id}`
|
|
84
|
+
: `queued for ${id} (${r.queued}): typed in once it is at its prompt`,
|
|
85
|
+
];
|
|
86
|
+
if (r.wantsReply)
|
|
87
|
+
lines.push(
|
|
88
|
+
`Its last message, as that turn ends, comes back to you as a prompt: end your turn to wait for it, or run \`work session wait ${id}\`.`,
|
|
89
|
+
);
|
|
90
|
+
return lines.join("\n");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function printReply(r) {
|
|
94
|
+
const head =
|
|
95
|
+
r.kind === "reply" ? `${r.label} replied:` : `${r.label}: ${r.text}`;
|
|
96
|
+
console.log(head);
|
|
97
|
+
if (r.kind === "reply") console.log(`${r.text}\n`);
|
|
34
98
|
}
|
|
35
99
|
|
|
36
100
|
export const commands = [
|
|
@@ -44,14 +108,26 @@ work session list [id|name] [--json]
|
|
|
44
108
|
The workspace's sessions, this one marked.
|
|
45
109
|
work session title "<name>" [--session <id>]
|
|
46
110
|
Name a session in the session list (empty clears it).
|
|
47
|
-
work session new [--agent <id>] [--title "<name>"] [--prompt "<text>"] [--workspace <id|name>] [--force]
|
|
48
|
-
Start a session (the default agent unless --agent; "shell"
|
|
49
|
-
terminal)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
111
|
+
work session new [--agent <id>] [--title "<name>"] [--prompt "<text>"|-] [--no-reply] [--workspace <id|name>] [--force]
|
|
112
|
+
Start a session (the default agent unless --agent, any vendor's; "shell"
|
|
113
|
+
for a terminal) in a tab of its own, where the user watches it, name it,
|
|
114
|
+
and hand it a first prompt ("-": read it from stdin). Started from
|
|
115
|
+
another session it is listed under that one, and the prompt is a
|
|
116
|
+
message from it (below). Past ${SESSION_CAP} sessions in the workspace it wants --force.
|
|
117
|
+
work session send <id> "<text>"|- [--no-reply]
|
|
118
|
+
Message an agent session: typed in, headed with who it is from, once
|
|
119
|
+
it is at its prompt — never into a turn under way, a question it asks,
|
|
120
|
+
or a draft someone is typing. From an agent's session it wants a reply
|
|
121
|
+
unless --no-reply: the recipient's last message as that turn ends,
|
|
122
|
+
typed into this session as a prompt of its own. End your turn to wait
|
|
123
|
+
for it. A file's path says more than its text pasted in.
|
|
124
|
+
work session wait [<id>...] [--timeout <seconds>]
|
|
125
|
+
Wait for the replies owed to this session (by those sessions, else by
|
|
126
|
+
any), printing each as it comes; a reply printed here is not typed in
|
|
127
|
+
too. Exits 124 if some are still working after --timeout (${WAIT_S} s).
|
|
53
128
|
work session kill <id> --yes
|
|
54
|
-
Close a session and the process in it
|
|
129
|
+
Close a session and the process in it (whoever waits on its reply is
|
|
130
|
+
told).`,
|
|
55
131
|
async run(ctx) {
|
|
56
132
|
const [verb, ...rest] = ctx.parse([
|
|
57
133
|
"--agent",
|
|
@@ -59,6 +135,7 @@ work session kill <id> --yes
|
|
|
59
135
|
"--prompt",
|
|
60
136
|
"--workspace",
|
|
61
137
|
"--session",
|
|
138
|
+
"--timeout",
|
|
62
139
|
]);
|
|
63
140
|
switch (verb) {
|
|
64
141
|
case undefined: {
|
|
@@ -68,6 +145,7 @@ work session kill <id> --yes
|
|
|
68
145
|
if (!me) ctx.die(`no session ${id} in ${ws.name}`);
|
|
69
146
|
const out = {
|
|
70
147
|
...me,
|
|
148
|
+
depth: undefined,
|
|
71
149
|
workspace: {
|
|
72
150
|
id: ws.id,
|
|
73
151
|
name: ws.name,
|
|
@@ -77,7 +155,7 @@ work session kill <id> --yes
|
|
|
77
155
|
};
|
|
78
156
|
return ctx.out(out, (s) => {
|
|
79
157
|
console.log(
|
|
80
|
-
`${s.id} ${s.agent} ${s.phase}${s.title ? ` "${s.title}"` : ""}`,
|
|
158
|
+
`${s.id} ${s.agent} ${s.phase}${s.title ? ` "${s.title}"` : ""}${s.waitingOn.length ? ` (waiting on ${s.waitingOn.join(", ")})` : ""}`,
|
|
81
159
|
);
|
|
82
160
|
console.log(
|
|
83
161
|
`workspace ${s.workspace.name} (${s.workspace.id}) ${s.workspace.path}`,
|
|
@@ -110,42 +188,93 @@ work session kill <id> --yes
|
|
|
110
188
|
`${ws.name} already has ${existing.length} sessions: pass --force to start another`,
|
|
111
189
|
);
|
|
112
190
|
const agent = ctx.flag("--agent");
|
|
191
|
+
const me = process.env.WORK_SESSION_ID;
|
|
192
|
+
const prompt = await textOf(valueOf(ctx, "--prompt"));
|
|
113
193
|
const created = await ctx.api.post(
|
|
114
194
|
`/api/workspaces/${ws.id}/sessions`,
|
|
115
|
-
agent ? { agent } : {},
|
|
195
|
+
{ ...(agent ? { agent } : {}), ...(me ? { parent: me } : {}) },
|
|
116
196
|
);
|
|
117
197
|
const title = ctx.flag("--title");
|
|
118
198
|
if (title)
|
|
119
199
|
await ctx.api.patch(`/api/sessions/${created.id}`, { title });
|
|
120
|
-
const prompt = ctx.flag("--prompt");
|
|
121
200
|
// Sent, the session starts (detached) with it as its first
|
|
122
201
|
// prompt; otherwise it starts when someone opens it.
|
|
123
|
-
|
|
124
|
-
await ctx.api.post(`/api/sessions/${created.id}/
|
|
125
|
-
|
|
126
|
-
|
|
202
|
+
const sent = prompt
|
|
203
|
+
? await ctx.api.post(`/api/sessions/${created.id}/messages`, {
|
|
204
|
+
text: prompt,
|
|
205
|
+
...(me ? { from: me } : {}),
|
|
206
|
+
reply: !ctx.has("--no-reply"),
|
|
207
|
+
})
|
|
208
|
+
: null;
|
|
127
209
|
const out = {
|
|
128
210
|
id: created.id,
|
|
129
211
|
agent: created.agent,
|
|
130
212
|
title: title || null,
|
|
131
213
|
workspace: ws.id,
|
|
132
|
-
|
|
214
|
+
parent: created.parent_id ?? null,
|
|
215
|
+
prompted: !!sent?.delivered,
|
|
216
|
+
queued: sent?.queued ?? null,
|
|
217
|
+
wantsReply: !!sent?.wantsReply,
|
|
133
218
|
href: `/w/${ws.id}?s=${created.id}`,
|
|
134
219
|
};
|
|
135
|
-
return ctx.out(out, (s) =>
|
|
220
|
+
return ctx.out(out, (s) => {
|
|
136
221
|
console.log(
|
|
137
222
|
`started ${s.id} (${s.agent})${s.prompted ? " with its prompt" : ""}: [${s.title || s.agent}](${s.href})`,
|
|
138
|
-
)
|
|
139
|
-
|
|
223
|
+
);
|
|
224
|
+
if (s.queued)
|
|
225
|
+
console.log(`its prompt waits to be typed in: ${s.queued}`);
|
|
226
|
+
if (s.wantsReply)
|
|
227
|
+
console.log(
|
|
228
|
+
`Its last message, as that turn ends, comes back to you as a prompt: end your turn to wait for it, or run \`work session wait ${s.id}\`.`,
|
|
229
|
+
);
|
|
230
|
+
});
|
|
140
231
|
}
|
|
141
232
|
case "send": {
|
|
142
233
|
const [id, ...words] = rest;
|
|
143
|
-
const text = words.join(" ");
|
|
144
|
-
if (!id || !text)
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
234
|
+
const text = await textOf(words.join(" "));
|
|
235
|
+
if (!id || !text)
|
|
236
|
+
ctx.die('usage: work session send <id> "<text>"|- [--no-reply]');
|
|
237
|
+
const me = process.env.WORK_SESSION_ID;
|
|
238
|
+
const r = await ctx.api.post(`/api/sessions/${id}/messages`, {
|
|
239
|
+
text,
|
|
240
|
+
...(me ? { from: me } : {}),
|
|
241
|
+
reply: !ctx.has("--no-reply"),
|
|
242
|
+
});
|
|
243
|
+
return ctx.out({ id, ...r }, (r) => console.log(sentText(id, r)));
|
|
244
|
+
}
|
|
245
|
+
case "wait": {
|
|
246
|
+
const me = sessionId(ctx);
|
|
247
|
+
const raw = ctx.flag("--timeout");
|
|
248
|
+
const seconds = raw === undefined ? WAIT_S : Number(raw);
|
|
249
|
+
if (!Number.isFinite(seconds) || seconds < 0)
|
|
250
|
+
ctx.die("--timeout is a number of seconds");
|
|
251
|
+
const until = Date.now() + seconds * 1000;
|
|
252
|
+
const body = rest.length ? { from: rest } : {};
|
|
253
|
+
const replies = [];
|
|
254
|
+
let owing = [];
|
|
255
|
+
for (;;) {
|
|
256
|
+
const r = await ctx.api.post(`/api/sessions/${me}/replies`, body);
|
|
257
|
+
replies.push(...r.replies);
|
|
258
|
+
if (!ctx.json) r.replies.forEach(printReply);
|
|
259
|
+
owing = r.owing;
|
|
260
|
+
if (!owing.length || Date.now() >= until) break;
|
|
261
|
+
await new Promise((res) => setTimeout(res, POLL_MS));
|
|
262
|
+
}
|
|
263
|
+
if (ctx.json)
|
|
264
|
+
console.log(JSON.stringify({ replies, owing }, null, 2));
|
|
265
|
+
else if (!replies.length && !owing.length)
|
|
266
|
+
console.log(
|
|
267
|
+
rest.length
|
|
268
|
+
? `nothing owed by ${rest.join(", ")}: a reply already typed in is in your prompt`
|
|
269
|
+
: "no session owes this one a reply",
|
|
270
|
+
);
|
|
271
|
+
if (owing.length) {
|
|
272
|
+
ctx.warn(
|
|
273
|
+
`still working: ${owing.map((o) => o.label).join(", ")} (wait again, or end your turn: the reply comes as a prompt)`,
|
|
274
|
+
);
|
|
275
|
+
process.exitCode = 124;
|
|
276
|
+
}
|
|
277
|
+
return;
|
|
149
278
|
}
|
|
150
279
|
case "kill": {
|
|
151
280
|
const [id] = rest;
|
package/bin/work.mjs
CHANGED
|
@@ -133,7 +133,9 @@ const cli = await cliCommand(command, positional[0]);
|
|
|
133
133
|
|
|
134
134
|
switch (cli ? "" : command) {
|
|
135
135
|
case "":
|
|
136
|
-
|
|
136
|
+
// `work session --help` is what an agent tries before `work help`.
|
|
137
|
+
if (args.includes("--help") || args.includes("-h")) await helpCmd(command);
|
|
138
|
+
else await cli.cmd.run(cliContext(cli.words));
|
|
137
139
|
break;
|
|
138
140
|
case "help":
|
|
139
141
|
case "--help":
|
|
@@ -285,6 +287,13 @@ async function apiCall(method, path, body, timeoutMs = 30_000) {
|
|
|
285
287
|
signal: AbortSignal.timeout(timeoutMs),
|
|
286
288
|
});
|
|
287
289
|
} catch {
|
|
290
|
+
// Codex runs commands in a sandbox with no network, a local socket
|
|
291
|
+
// included: the server is up, the command has to run outside it,
|
|
292
|
+
// which the agent asks the user for.
|
|
293
|
+
if (process.env.CODEX_SANDBOX_NETWORK_DISABLED)
|
|
294
|
+
die(
|
|
295
|
+
"work cannot reach its server from inside Codex's sandbox (no network there): run this command outside the sandbox, with escalated permissions",
|
|
296
|
+
);
|
|
288
297
|
die(`no work server on port ${port}. Start one with: work start`);
|
|
289
298
|
}
|
|
290
299
|
const text = await res.text();
|
|
@@ -478,6 +478,30 @@ var STEPS = [
|
|
|
478
478
|
up(db) {
|
|
479
479
|
db.exec("DELETE FROM settings WHERE key = 'ui.term-predict'");
|
|
480
480
|
}
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
version: 4,
|
|
484
|
+
name: "session messages",
|
|
485
|
+
up(db) {
|
|
486
|
+
db.exec(`
|
|
487
|
+
ALTER TABLE sessions ADD COLUMN parent_id TEXT REFERENCES sessions(id) ON DELETE SET NULL;
|
|
488
|
+
|
|
489
|
+
CREATE TABLE session_messages (
|
|
490
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
491
|
+
to_session TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
|
|
492
|
+
from_session TEXT,
|
|
493
|
+
from_label TEXT,
|
|
494
|
+
kind TEXT NOT NULL CHECK (kind IN ('message', 'reply', 'closed')),
|
|
495
|
+
body TEXT NOT NULL,
|
|
496
|
+
wants_reply INTEGER NOT NULL DEFAULT 0,
|
|
497
|
+
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
498
|
+
delivered_at TEXT
|
|
499
|
+
);
|
|
500
|
+
|
|
501
|
+
CREATE INDEX session_messages_to ON session_messages(to_session);
|
|
502
|
+
CREATE INDEX session_messages_from ON session_messages(from_session);
|
|
503
|
+
`);
|
|
504
|
+
}
|
|
481
505
|
}
|
|
482
506
|
];
|
|
483
507
|
var LATEST = STEPS.at(-1).version;
|
|
@@ -8215,6 +8239,18 @@ var interruptedAt = /* @__PURE__ */ new Map();
|
|
|
8215
8239
|
* finished: the session is working until a turn ends with none left, and
|
|
8216
8240
|
* that end is the one pushed. */
|
|
8217
8241
|
var background = /* @__PURE__ */ new Map();
|
|
8242
|
+
/** Each session's last finished turn's message, whole: what a session
|
|
8243
|
+
* that messaged it gets back (server/messages). */
|
|
8244
|
+
var lastMessages = /* @__PURE__ */ new Map();
|
|
8245
|
+
/** Sessions a message is still to wake (server/messages keeps the set):
|
|
8246
|
+
* each asked another something not yet answered, or has one waiting to
|
|
8247
|
+
* be typed in. Like background work, that makes the session working, and
|
|
8248
|
+
* a turn of it that ends meanwhile has handed off rather than finished. */
|
|
8249
|
+
var expecting = /* @__PURE__ */ new Set();
|
|
8250
|
+
/** When someone last typed into each session's pane from a page. */
|
|
8251
|
+
var typedAt = /* @__PURE__ */ new Map();
|
|
8252
|
+
/** Told of each turn's end that stayed the end (`onTurnEnd`). */
|
|
8253
|
+
var turnEndListeners = /* @__PURE__ */ new Set();
|
|
8218
8254
|
/** A turn's end is pushed once it has stayed ended this long. Stop fires
|
|
8219
8255
|
* again each time something sends the agent back to work (a stop hook
|
|
8220
8256
|
* that continues it, a goal loop, background subagents reporting in), and
|
|
@@ -8225,7 +8261,7 @@ var listeners = /* @__PURE__ */ new Set();
|
|
|
8225
8261
|
function onPhaseChange(fn) {
|
|
8226
8262
|
listeners.add(fn);
|
|
8227
8263
|
}
|
|
8228
|
-
function setAgentPhase(sessionId, phase, reason, summary) {
|
|
8264
|
+
function setAgentPhase(sessionId, phase, reason, summary, message) {
|
|
8229
8265
|
reportedAt.set(sessionId, Date.now());
|
|
8230
8266
|
cancelDone(sessionId);
|
|
8231
8267
|
if (phase === "idle") {
|
|
@@ -8235,10 +8271,13 @@ function setAgentPhase(sessionId, phase, reason, summary) {
|
|
|
8235
8271
|
if (phase === "waiting" && reason === "done") {
|
|
8236
8272
|
const failed = phases.get(sessionId) === "waiting" && reasons.get(sessionId) === "attention";
|
|
8237
8273
|
if (summary) summaries.set(sessionId, summary);
|
|
8274
|
+
if (message) lastMessages.set(sessionId, message);
|
|
8275
|
+
else lastMessages.delete(sessionId);
|
|
8238
8276
|
if (phases.has(sessionId)) applyChange(sessionId, () => dropHook(sessionId));
|
|
8239
|
-
if (!
|
|
8277
|
+
if (!background.has(sessionId)) pendingDone.set(sessionId, setTimeout(() => {
|
|
8240
8278
|
pendingDone.delete(sessionId);
|
|
8241
|
-
|
|
8279
|
+
const answered = endTurn(sessionId);
|
|
8280
|
+
if (!failed && !answered && !expecting.has(sessionId)) notify(sessionId, "done");
|
|
8242
8281
|
}, DONE_SETTLE_MS));
|
|
8243
8282
|
return;
|
|
8244
8283
|
}
|
|
@@ -8273,6 +8312,39 @@ function noteBackground(sessionId, work) {
|
|
|
8273
8312
|
else background.delete(sessionId);
|
|
8274
8313
|
});
|
|
8275
8314
|
}
|
|
8315
|
+
/** A turn's end once it has stayed the end (`DONE_SETTLE_MS`), with its
|
|
8316
|
+
* last message (undefined: the CLI reports none). A listener returns
|
|
8317
|
+
* whether it passed the end on to another session. */
|
|
8318
|
+
function onTurnEnd(fn) {
|
|
8319
|
+
turnEndListeners.add(fn);
|
|
8320
|
+
}
|
|
8321
|
+
function endTurn(sessionId) {
|
|
8322
|
+
let told = false;
|
|
8323
|
+
for (const fn of turnEndListeners) told = fn(sessionId, lastMessages.get(sessionId)) || told;
|
|
8324
|
+
return told;
|
|
8325
|
+
}
|
|
8326
|
+
/** A turn's end still waiting out `DONE_SETTLE_MS`: it may yet carry on. */
|
|
8327
|
+
function turnSettling(sessionId) {
|
|
8328
|
+
return pendingDone.has(sessionId);
|
|
8329
|
+
}
|
|
8330
|
+
/** The sessions a message is still to wake (server/messages). */
|
|
8331
|
+
function setExpecting(ids) {
|
|
8332
|
+
for (const id of /* @__PURE__ */ new Set([...expecting, ...ids])) {
|
|
8333
|
+
if (expecting.has(id) === ids.has(id)) continue;
|
|
8334
|
+
applyChange(id, () => {
|
|
8335
|
+
if (ids.has(id)) expecting.add(id);
|
|
8336
|
+
else expecting.delete(id);
|
|
8337
|
+
});
|
|
8338
|
+
}
|
|
8339
|
+
}
|
|
8340
|
+
/** Someone typed into the session's pane from a page. */
|
|
8341
|
+
function noteTyped(sessionId) {
|
|
8342
|
+
typedAt.set(sessionId, Date.now());
|
|
8343
|
+
}
|
|
8344
|
+
/** When someone last typed into the session's pane (0: not this run). */
|
|
8345
|
+
function lastTypedAt(sessionId) {
|
|
8346
|
+
return typedAt.get(sessionId) ?? 0;
|
|
8347
|
+
}
|
|
8276
8348
|
function cancelDone(sessionId) {
|
|
8277
8349
|
const timer = pendingDone.get(sessionId);
|
|
8278
8350
|
if (!timer) return;
|
|
@@ -8377,6 +8449,8 @@ async function notify(sessionId, reason) {
|
|
|
8377
8449
|
function clearAgentPhase(sessionId) {
|
|
8378
8450
|
cancelDone(sessionId);
|
|
8379
8451
|
summaries.delete(sessionId);
|
|
8452
|
+
lastMessages.delete(sessionId);
|
|
8453
|
+
typedAt.delete(sessionId);
|
|
8380
8454
|
reportedAt.delete(sessionId);
|
|
8381
8455
|
interruptedAt.delete(sessionId);
|
|
8382
8456
|
if (!phases.has(sessionId) && !scraped.has(sessionId) && !background.has(sessionId)) return;
|
|
@@ -8387,11 +8461,17 @@ function clearAgentPhase(sessionId) {
|
|
|
8387
8461
|
background.delete(sessionId);
|
|
8388
8462
|
});
|
|
8389
8463
|
}
|
|
8390
|
-
/** What a session is doing. The hook wins where there is one:
|
|
8391
|
-
* the turn itself, where tmux only sees the pane still moving
|
|
8392
|
-
|
|
8464
|
+
/** What a session's own turn is doing. The hook wins where there is one:
|
|
8465
|
+
* it reports the turn itself, where tmux only sees the pane still moving
|
|
8466
|
+
* after it. Undefined: at its prompt, where a message can be typed in. */
|
|
8467
|
+
function turnPhase(sessionId) {
|
|
8393
8468
|
return hookPhase(sessionId) ?? scraped.get(sessionId);
|
|
8394
8469
|
}
|
|
8470
|
+
/** What a session is doing: its turn, else working while a message is
|
|
8471
|
+
* still to wake it — a session that handed work to another is not done. */
|
|
8472
|
+
function agentPhase(sessionId) {
|
|
8473
|
+
return turnPhase(sessionId) ?? (expecting.has(sessionId) ? "working" : void 0);
|
|
8474
|
+
}
|
|
8395
8475
|
/** Apply a mutation and broadcast when it moved the session's phase (or,
|
|
8396
8476
|
* `force`, its reason: finished and blocked draw differently). Only a
|
|
8397
8477
|
* hook ever reports "waiting", so a transition into it is a push. */
|
|
@@ -8408,7 +8488,7 @@ function publishChange(sessionId) {
|
|
|
8408
8488
|
const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
|
|
8409
8489
|
if (row?.workspace_id) {
|
|
8410
8490
|
const workspaceId = row.workspace_id;
|
|
8411
|
-
import("./
|
|
8491
|
+
import("./_L2HNAA_8.js").then((m) => m.notifySessionsChanged(workspaceId));
|
|
8412
8492
|
return;
|
|
8413
8493
|
}
|
|
8414
8494
|
publish("sessions.changed");
|
|
@@ -8472,7 +8552,8 @@ function readClaudeStyle(p, reported) {
|
|
|
8472
8552
|
const text = str$1(p.last_assistant_message) || str$1(p["last-assistant-message"]) || str$1(p.lastAssistantMessage);
|
|
8473
8553
|
if (text) return {
|
|
8474
8554
|
reason,
|
|
8475
|
-
summary: cleanSummary(text)
|
|
8555
|
+
summary: cleanSummary(text),
|
|
8556
|
+
message: text
|
|
8476
8557
|
};
|
|
8477
8558
|
if (kind) return {
|
|
8478
8559
|
reason,
|
|
@@ -9503,7 +9584,10 @@ function readHook$4(p, reported, _state) {
|
|
|
9503
9584
|
};
|
|
9504
9585
|
}
|
|
9505
9586
|
const read = readClaudeStyle(p, reported);
|
|
9506
|
-
if (!read.summary && reported === "done")
|
|
9587
|
+
if (!read.summary && reported === "done") {
|
|
9588
|
+
read.message = lastMessageFromTranscript(p);
|
|
9589
|
+
if (read.message) read.summary = cleanSummary(read.message);
|
|
9590
|
+
}
|
|
9507
9591
|
return read;
|
|
9508
9592
|
}
|
|
9509
9593
|
/** The last non-empty `assistant.message` of the turn that just ended in
|
|
@@ -9527,7 +9611,7 @@ function lastMessageFromTranscript(p) {
|
|
|
9527
9611
|
try {
|
|
9528
9612
|
const ev = JSON.parse(lines[i]);
|
|
9529
9613
|
const content = ev.type === "assistant.message" ? ev.data?.content : void 0;
|
|
9530
|
-
if (typeof content === "string" && content.trim()) return
|
|
9614
|
+
if (typeof content === "string" && content.trim()) return content.trim();
|
|
9531
9615
|
} catch {}
|
|
9532
9616
|
}
|
|
9533
9617
|
} finally {
|
|
@@ -10215,7 +10299,8 @@ function readHook$1(p, reported) {
|
|
|
10215
10299
|
const summary = str$1(p.summary);
|
|
10216
10300
|
return {
|
|
10217
10301
|
reason: reported,
|
|
10218
|
-
summary: summary ? cleanSummary(summary) : void 0
|
|
10302
|
+
summary: summary ? cleanSummary(summary) : void 0,
|
|
10303
|
+
message: summary || void 0
|
|
10219
10304
|
};
|
|
10220
10305
|
}
|
|
10221
10306
|
var opencode = {
|
|
@@ -10323,7 +10408,8 @@ function readHook(p, reported) {
|
|
|
10323
10408
|
const summary = str$1(p.summary);
|
|
10324
10409
|
return {
|
|
10325
10410
|
reason: reported,
|
|
10326
|
-
summary: summary ? cleanSummary(summary) : void 0
|
|
10411
|
+
summary: summary ? cleanSummary(summary) : void 0,
|
|
10412
|
+
message: summary || void 0
|
|
10327
10413
|
};
|
|
10328
10414
|
}
|
|
10329
10415
|
//#endregion
|
|
@@ -10410,14 +10496,15 @@ function getSession(id) {
|
|
|
10410
10496
|
* workspace at once (restored tabs, a phone and a desktop) both list no
|
|
10411
10497
|
* sessions before either POST lands. The check and the insert run in one
|
|
10412
10498
|
* synchronous step, so the second gets the first one's session. */
|
|
10413
|
-
function createSession(workspaceId, agent, ifEmpty = false) {
|
|
10499
|
+
function createSession(workspaceId, agent, ifEmpty = false, parent) {
|
|
10414
10500
|
if (!isKnownAgent(agent)) throw new Error(`unknown session kind: ${agent}`);
|
|
10415
10501
|
if (ifEmpty) {
|
|
10416
10502
|
const first = listSessions(workspaceId)[0];
|
|
10417
10503
|
if (first) return first;
|
|
10418
10504
|
}
|
|
10505
|
+
const parentId = parent && getSession(parent)?.workspace_id === workspaceId ? parent : null;
|
|
10419
10506
|
const id = Math.random().toString(36).slice(2, 10);
|
|
10420
|
-
db.prepare("INSERT INTO sessions (id, workspace_id, agent) VALUES (?, ?, ?)").run(id, workspaceId, agent);
|
|
10507
|
+
db.prepare("INSERT INTO sessions (id, workspace_id, agent, parent_id) VALUES (?, ?, ?, ?)").run(id, workspaceId, agent, parentId);
|
|
10421
10508
|
notifySessionsChanged(workspaceId);
|
|
10422
10509
|
return getSession(id);
|
|
10423
10510
|
}
|
|
@@ -10438,7 +10525,14 @@ async function killSession(id) {
|
|
|
10438
10525
|
async function disposeSessions(sessions) {
|
|
10439
10526
|
for (const session of sessions) await disposeSession(session.id);
|
|
10440
10527
|
}
|
|
10528
|
+
/** Told of a session about to go, while its row is still there (its
|
|
10529
|
+
* messages go with it: server/messages answers what it owed first). */
|
|
10530
|
+
var disposeListeners = /* @__PURE__ */ new Set();
|
|
10531
|
+
function onSessionDispose(fn) {
|
|
10532
|
+
disposeListeners.add(fn);
|
|
10533
|
+
}
|
|
10441
10534
|
async function disposeSession(id) {
|
|
10535
|
+
for (const fn of disposeListeners) fn(id);
|
|
10442
10536
|
await tmux([
|
|
10443
10537
|
"kill-session",
|
|
10444
10538
|
"-t",
|
|
@@ -10956,4 +11050,4 @@ function sleep(ms) {
|
|
|
10956
11050
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
10957
11051
|
}
|
|
10958
11052
|
//#endregion
|
|
10959
|
-
export {
|
|
11053
|
+
export { agentBadge as $, FRAME_ANCESTORS as $t, realInsideSync as A, doctor as At, noteTyped as B, enableUntrackedCache as Bt, tmuxName as C, enabledAgents as Ct, reportsWorking as D, setPref as Dt, readHookPayload as E, setDisabledAgents as Et, hookReportedAt as F, stableGh as Ft, sessionWatched as G, PROJECT_TOOLS as Gt, notifyEventOn as H, untrackedCacheAllowed as Ht, interruptedSinceReport as I, tilde as It, setScrapedPhase as J, agentLabel$1 as Jt, setAgentPhase as K, TOOLS as Kt, lastTypedAt as L, which as Lt, agentPhase as M, miseInstalls as Mt, clearAgentPhase as N, miseVersions as Nt, inside as O, setSetting as Ot, hookPhase as P, setupPath as Pt, turnSettling as Q, applyPrefChange as Qt, noteBackground as R, hostReach as Rt, sessionStates as S, disabledAgents as St, AGENTS as T, preferredAgent as Tt, onPhaseChange as U, firewallProbe as Ut, noteUserAnswered as V, unsetCaches as Vt, onTurnEnd as W, DEFAULT_GITHUB_HOST as Wt, settleQuietWorking as X, parseAgentId as Xt, setSessionViewers as Y, catalogPin as Yt, turnPhase as Z, toolById as Zt, notifySessionsChanged as _, tmux as _n, agentChoices as _t, creationOf as a, publishJson as an, getInstance as at, renameSession as b, swr as bn, deleteSetting as bt, forgetPanes as c, all as cn, normalizeAccent as ct, killWorkspaceSessions as d, workspacePath as dn, pushPublicKey as dt, FRAME_HEADERS as en, agentFamily as et, listPanes as f, TMUX_SOCKET as fn, saveSubscription as ft, newSessionArgs as g, run$2 as gn, WORKSPACE_PREFS as gt, markTmuxStarted as h, gitEnv as hn, PREF_MAX as ht, createSession as i, publish as in, ACCENT_RE as it, blankRow as j, ghKnownHosts as jt, realInside as k, discoverAgents as kt, getSession as l, db as ln, setInstance as lt, listSessions as m, git as mn, validSubscription as mt, cleanEnv as n, httpError as nn, agentLabel as nt, disposeSessions as o, subscribe as on, iconSvg as ot, listPanesWithin as p, gh as pn, sendPush as pt, setExpecting as q, agentById as qt, clearTmuxStarted as r, readBody as rn, agentMeta as rt, ensureTmuxServer as s, subscriberCount as sn, manifest as st, beginCreation as t, checked as tn, agentFromCommand as tt, killSession as u, get as un, deleteSubscription as ut, onSessionDispose as v, config as vn, allPrefs as vt, tmuxWasStarted as w, getSetting as wt, sendToSession as x, withLock as xn, deleteWorkspacePrefs as xt, panePids as y, shared as yn, changePref as yt, noteInterrupt as z, unreachableText as zt };
|