@dylanpiercey/work 0.2.60 → 0.2.62
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/session.mjs +200 -14
- package/dist/{_xM2b0RL4.js → _BL9uMFqY.js} +114 -5
- package/dist/_BOUuiLtz.js +2 -0
- package/dist/_C-c452mk.js +2 -0
- package/dist/{_D2Un1mYs.js → _CYtDrBwm.js} +74 -74
- package/dist/{_B5_rwv2K.js → _C_xIwbCY.js} +197 -34
- package/dist/index.mjs +1920 -1704
- package/dist/public/assets/{_CEnGHCTE.js → _-YzJaYxh.js} +1 -1
- package/dist/public/assets/_-YzJaYxh.js.br +0 -0
- package/dist/public/assets/{_BVEoZ0DQ.js → _07VUAXq5.js} +1 -1
- package/dist/public/assets/_07VUAXq5.js.br +0 -0
- package/dist/public/assets/{_CsrDw2HV.js → _12OSqtgN.js} +1 -1
- package/dist/public/assets/_12OSqtgN.js.br +0 -0
- package/dist/public/assets/{_rFLxxyKo.js → _43YtAXPg.js} +1 -1
- package/dist/public/assets/_43YtAXPg.js.br +0 -0
- package/dist/public/assets/_5Td49WSZ.js +1 -0
- package/dist/public/assets/{_CKeIFx0z.js → _6-bjwOW2.js} +1 -1
- package/dist/public/assets/_6-bjwOW2.js.br +0 -0
- package/dist/public/assets/{_DdvVmpgX.js → _6_a3_hm5.js} +1 -1
- package/dist/public/assets/_6_a3_hm5.js.br +0 -0
- package/dist/public/assets/_A5XBSV-m.js +1 -0
- package/dist/public/assets/_AHyuoDDR.js +1 -0
- package/dist/public/assets/{_fJWjSk9f.js → _B15MMLyo.js} +1 -1
- package/dist/public/assets/_B15MMLyo.js.br +0 -0
- package/dist/public/assets/_B2C1SXbD.js +1 -0
- package/dist/public/assets/{_BG-zRRiX.js → _B4YR1uIA.js} +1 -1
- package/dist/public/assets/_B4YR1uIA.js.br +0 -0
- package/dist/public/assets/_B5Nzs35H.js +1 -0
- package/dist/public/assets/{_DYeFvJQu.js → _B6DVKoQR.js} +1 -1
- package/dist/public/assets/_B6DVKoQR.js.br +0 -0
- package/dist/public/assets/{_BFxxHHlG.js → _B727l6KQ.js} +1 -1
- package/dist/public/assets/_B727l6KQ.js.br +0 -0
- package/dist/public/assets/_BAY5zxaz.js +1 -0
- package/dist/public/assets/_BCYSQScu.js +1 -0
- package/dist/public/assets/{_wCgLIMkx.js → _BCsQoQCV.js} +5 -5
- package/dist/public/assets/_BCsQoQCV.js.br +0 -0
- package/dist/public/assets/_BDYtklQ5.js +1 -0
- package/dist/public/assets/_BEMm2uf8.js +1 -0
- package/dist/public/assets/{_CeTSn3Od.js → _BMdJE2yL.js} +1 -1
- package/dist/public/assets/_BMdJE2yL.js.br +0 -0
- package/dist/public/assets/_BMoRqx1-.js +1 -0
- package/dist/public/assets/{_C8RN45Ay.js → _BOZ5PfYS.js} +1 -1
- package/dist/public/assets/_BOZ5PfYS.js.br +0 -0
- package/dist/public/assets/_BOdfUPAd.js +1 -0
- package/dist/public/assets/_BPNfYRaq.js +1 -0
- package/dist/public/assets/{_D66U5RHc.js → _BPf5b-nV.js} +1 -1
- package/dist/public/assets/_BPf5b-nV.js.br +0 -0
- package/dist/public/assets/_BQy5D2fs.js +1 -0
- package/dist/public/assets/{_BPyRGDdd.js → _BRFpO-Qz.js} +1 -1
- package/dist/public/assets/_BS7TeNxL.js +1 -0
- package/dist/public/assets/{_kc4p4uHI.js → _BSZMtXDc.js} +1 -1
- package/dist/public/assets/_BSZMtXDc.js.br +0 -0
- package/dist/public/assets/{_DahJWFLJ.js → _BSZsLUE3.js} +1 -1
- package/dist/public/assets/_BSZsLUE3.js.br +0 -0
- package/dist/public/assets/_BTkTB9cb.js +1 -0
- package/dist/public/assets/_BUUGGnmx.js +1 -0
- package/dist/public/assets/_BVULBXkf.js +1 -0
- package/dist/public/assets/{_CCxaMhJi.js → _BWr5gy8s.js} +1 -1
- package/dist/public/assets/_BWr5gy8s.js.br +0 -0
- package/dist/public/assets/{_dFodER3o.js → _BXqFNiUE.js} +2 -2
- package/dist/public/assets/_BXqFNiUE.js.br +0 -0
- package/dist/public/assets/{_CYWrzltT.js → _BYkhacrS.js} +1 -1
- package/dist/public/assets/_BYkhacrS.js.br +0 -0
- package/dist/public/assets/_BaclUK8P.js +1 -0
- package/dist/public/assets/{_kZt7n5RY.js → _Bd34VcRs.js} +1 -1
- package/dist/public/assets/_Bd34VcRs.js.br +0 -0
- package/dist/public/assets/{_DfkI0VMD.js → _Be4WscwR.js} +1 -1
- package/dist/public/assets/_Be4WscwR.js.br +0 -0
- package/dist/public/assets/{_CedBoWcu.js → _BeUL1ueV.js} +1 -1
- package/dist/public/assets/_BeUL1ueV.js.br +0 -0
- package/dist/public/assets/_Beh1dIGt.js +1 -0
- package/dist/public/assets/_Bei9EmpL.js +1 -0
- package/dist/public/assets/_BfqTyPZX.js +1 -0
- package/dist/public/assets/{_D68dPn0w.js → _Bh2Mhf9A.js} +1 -1
- package/dist/public/assets/_Bh2Mhf9A.js.br +0 -0
- package/dist/public/assets/{_1mxz_fw8.js → _BhJJJ4_c.js} +1 -1
- package/dist/public/assets/_BhJJJ4_c.js.br +0 -0
- package/dist/public/assets/_Bi2jPJLs.js +1 -0
- package/dist/public/assets/{_CmQerv0f.js → _BklLHXPM.js} +1 -1
- package/dist/public/assets/{_DShsNCa4.js → _Bl6mlk7M.js} +1 -1
- package/dist/public/assets/_Bl6mlk7M.js.br +0 -0
- package/dist/public/assets/_Bm5R5vmF.js +1 -0
- package/dist/public/assets/_BmVyenr8.js +1 -0
- package/dist/public/assets/{_CexMUoXX.js → _Bncd_9VQ.js} +1 -1
- package/dist/public/assets/_Bncd_9VQ.js.br +0 -0
- package/dist/public/assets/{_DqG7LJE3.js → _BnsRx7UZ.js} +1 -1
- package/dist/public/assets/_BnsRx7UZ.js.br +0 -0
- package/dist/public/assets/_BoaDjJmE.js +1 -0
- package/dist/public/assets/{_DGQlaxcF.js → _BphKoYEn.js} +1 -1
- package/dist/public/assets/_BphKoYEn.js.br +0 -0
- package/dist/public/assets/_BrOl0iPf.js +1 -0
- package/dist/public/assets/_BvJoHIUZ.js +1 -0
- package/dist/public/assets/_BvcgM6xE.js +1 -0
- package/dist/public/assets/{_B3M5E-Om.js → _Bx0qgId0.js} +1 -1
- package/dist/public/assets/_Bx0qgId0.js.br +0 -0
- package/dist/public/assets/{_6JNHubX8.js → _Bx1DPtDH.js} +1 -1
- package/dist/public/assets/_Bx1DPtDH.js.br +0 -0
- package/dist/public/assets/{_ByBX1AAI.js → _Bx1lPfUj.js} +2 -2
- package/dist/public/assets/_Bx1lPfUj.js.br +0 -0
- package/dist/public/assets/{_Rm81HrZo.js → _BxLVe9Sk.js} +1 -1
- package/dist/public/assets/_BxLVe9Sk.js.br +0 -0
- package/dist/public/assets/{_C_LsIBgT.js → _C2lKewGZ.js} +1 -1
- package/dist/public/assets/_C2lKewGZ.js.br +0 -0
- package/dist/public/assets/_C49WjHYj.js +1 -0
- package/dist/public/assets/_C4_6Hfdk.js +1 -0
- package/dist/public/assets/{_BownQpIP.js → _C67TRn5S.js} +1 -1
- package/dist/public/assets/_C67TRn5S.js.br +0 -0
- package/dist/public/assets/_C8Ro7zfV.js +1 -0
- package/dist/public/assets/{_DZGhFAI6.js → _C8e1AwoF.js} +1 -1
- package/dist/public/assets/_C8e1AwoF.js.br +0 -0
- package/dist/public/assets/{_CtYeoHds.js → _C9WzJIic.js} +1 -1
- package/dist/public/assets/_C9WzJIic.js.br +0 -0
- package/dist/public/assets/_CC00S7vm.js +1 -0
- package/dist/public/assets/_CDRrgA9R.js +1 -0
- package/dist/public/assets/{_OcFuZvAI.js → _CDpiWjAU.js} +1 -1
- package/dist/public/assets/_CDpiWjAU.js.br +0 -0
- package/dist/public/assets/_CE0Hjxcf.js +1 -0
- package/dist/public/assets/{_BUmmoPn7.js → _CGV7yPri.js} +1 -1
- package/dist/public/assets/_CGV7yPri.js.br +0 -0
- package/dist/public/assets/{_XqOjFD-V.js → _CIKoI8Zi.js} +1 -1
- package/dist/public/assets/_CIKoI8Zi.js.br +0 -0
- package/dist/public/assets/_CJ8Uhm8d.js +1 -0
- package/dist/public/assets/_CL7vUYzn.js +1 -0
- package/dist/public/assets/{_DDZv_pCc.js → _CLjwSoO7.js} +1 -1
- package/dist/public/assets/_CLjwSoO7.js.br +0 -0
- package/dist/public/assets/_COiKcDfZ.js +1 -0
- package/dist/public/assets/{_DL18-mb9.js → _COkxwS6p.js} +1 -1
- package/dist/public/assets/_COkxwS6p.js.br +0 -0
- package/dist/public/assets/{_D0MMtje0.js → _CPQ6gAtw.js} +1 -1
- package/dist/public/assets/_CPQ6gAtw.js.br +0 -0
- package/dist/public/assets/{_BT6HfYe8.js → _CQ8ceJmp.js} +1 -1
- package/dist/public/assets/_CQ8ceJmp.js.br +0 -0
- package/dist/public/assets/_CQFK0uON.js +1 -0
- package/dist/public/assets/_CReAlVDW.js +1 -0
- package/dist/public/assets/{_kD85MWJq.js → _CUQYDj3C.js} +1 -1
- package/dist/public/assets/_CUQYDj3C.js.br +0 -0
- package/dist/public/assets/_CYZj2CJW.js +1 -0
- package/dist/public/assets/{_LWgmax5s.js → _CYmjqfgO.js} +1 -1
- package/dist/public/assets/_CYmjqfgO.js.br +0 -0
- package/dist/public/assets/{_KK2KF52X.js → _CZuUBMm_.js} +1 -1
- package/dist/public/assets/_CZuUBMm_.js.br +0 -0
- package/dist/public/assets/{_CNvP7-_g.js → _C_Z1lWEa.js} +1 -1
- package/dist/public/assets/_C_Z1lWEa.js.br +0 -0
- package/dist/public/assets/_CaZHMbFI.js +1 -0
- package/dist/public/assets/_CbAtCyz5.js +1 -0
- package/dist/public/assets/_CbQ70yNG.js +1 -0
- package/dist/public/assets/_CdISvNYF.js +1 -0
- package/dist/public/assets/_CgUyPldR.js +1 -0
- package/dist/public/assets/_Cinp1F_J.js +1 -0
- package/dist/public/assets/{_DKxPCb7m.js → _Co-FZOmo.js} +1 -1
- package/dist/public/assets/_Co-FZOmo.js.br +0 -0
- package/dist/public/assets/_Cou3v3N8.js +1 -0
- package/dist/public/assets/{_CsIiSuNi.js → _CpztZ5nh.js} +1 -1
- package/dist/public/assets/_CpztZ5nh.js.br +0 -0
- package/dist/public/assets/{_CE0EY_Im.js → _Cu886cTD.js} +1 -1
- package/dist/public/assets/_Cu886cTD.js.br +0 -0
- package/dist/public/assets/_CuIe6qhV.js +1 -0
- package/dist/public/assets/_CuIe6qhV.js.br +0 -0
- package/dist/public/assets/_Cut5H_T2.js +1 -0
- package/dist/public/assets/_CxLB48u2.js +1 -0
- package/dist/public/assets/_CzKFpCft.js +1 -0
- package/dist/public/assets/{_HHcjPPQg.js → _D-tttYGb.js} +1 -1
- package/dist/public/assets/_D-tttYGb.js.br +0 -0
- package/dist/public/assets/_D3alKanr.js +1 -0
- package/dist/public/assets/{_CmB1kfhT.js → _D3tvF9mZ.js} +1 -1
- package/dist/public/assets/_D3tvF9mZ.js.br +0 -0
- package/dist/public/assets/{_Dbe9iebB.js → _D5T9iT2v.js} +1 -1
- package/dist/public/assets/_D5T9iT2v.js.br +0 -0
- package/dist/public/assets/_D7YaYSGy.js +1 -0
- package/dist/public/assets/{_DSyaHlgp.js → _D9kqIFAA.js} +1 -1
- package/dist/public/assets/_D9kqIFAA.js.br +0 -0
- package/dist/public/assets/{_Bqi4KjfY.js → _D9xzmdEo.js} +1 -1
- package/dist/public/assets/_D9xzmdEo.js.br +0 -0
- package/dist/public/assets/_DAkTls2A.js +1 -0
- package/dist/public/assets/_DBL7H3bs.js +1 -0
- package/dist/public/assets/_DCLvfsYm.js +1 -0
- package/dist/public/assets/{_BT7IZUlM.js → _DCPqtWkU.js} +1 -1
- package/dist/public/assets/_DCPqtWkU.js.br +0 -0
- package/dist/public/assets/_DCns13oq.js +1 -0
- package/dist/public/assets/_DDHPzwdO.js +1 -0
- package/dist/public/assets/{_CgyDQNWM.js → _DDftx-q7.js} +1 -1
- package/dist/public/assets/_DDftx-q7.js.br +0 -0
- package/dist/public/assets/{_BbWeELba.js → _DImMPhIp.js} +1 -1
- package/dist/public/assets/_DJAVQNPP.js +1 -0
- package/dist/public/assets/_DJe2n9ee.js +1 -0
- package/dist/public/assets/{_sXLFin3G.js → _DNBnLHW2.js} +1 -1
- package/dist/public/assets/_DNTpuf-S.js +1 -0
- package/dist/public/assets/{_B1aMR3_0.js → _DNah0Zs3.js} +1 -1
- package/dist/public/assets/_DNah0Zs3.js.br +0 -0
- package/dist/public/assets/{_ClQ_uypw.js → _DOOWuI-6.js} +1 -1
- package/dist/public/assets/_DOOWuI-6.js.br +0 -0
- package/dist/public/assets/_DPin3_mC.js +1 -0
- package/dist/public/assets/_DQF7_i3E.js +1 -0
- package/dist/public/assets/_DSHVTMGB.js +1 -0
- package/dist/public/assets/{_BNkBAy5A.js → _DUwfcYPF.js} +5 -5
- package/dist/public/assets/_DUwfcYPF.js.br +0 -0
- package/dist/public/assets/_DVee6qvN.js +1 -0
- package/dist/public/assets/_DW5hiPzD.js +1 -0
- package/dist/public/assets/{_D0LoYy3P.js → _DWO5V9Cn.js} +1 -1
- package/dist/public/assets/_DWO5V9Cn.js.br +0 -0
- package/dist/public/assets/{_CYpdFsNd.js → _DX3sBHdB.js} +1 -1
- package/dist/public/assets/_DX3sBHdB.js.br +0 -0
- package/dist/public/assets/{_BzNb_fHh.js → _DYdoMN3z.js} +1 -1
- package/dist/public/assets/_DYdoMN3z.js.br +0 -0
- package/dist/public/assets/_D_NcBwvU.js +1 -0
- package/dist/public/assets/{_DYi5YY3I.js → _DfxAJT7Q.js} +1 -1
- package/dist/public/assets/_DfxAJT7Q.js.br +0 -0
- package/dist/public/assets/_DiktnP19.js +1 -0
- package/dist/public/assets/_Dio2yht1.js +1 -0
- package/dist/public/assets/_DkwriX0y.js +1 -0
- package/dist/public/assets/{_Bs3qB-Cr.js → _DlQSH1Bl.js} +1 -1
- package/dist/public/assets/{_B0Kz6DRP.js → _DmWgjlnv.js} +1 -1
- package/dist/public/assets/_DmWgjlnv.js.br +0 -0
- package/dist/public/assets/_DpQmNXrc.js +1 -0
- package/dist/public/assets/{_BS-RHEk-.js → _DpSvz8kT.js} +1 -1
- package/dist/public/assets/_DpSvz8kT.js.br +0 -0
- package/dist/public/assets/_DqW5Qhvl.js +1 -0
- package/dist/public/assets/{_JbTe9y6j.js → _DrK0EnPt.js} +1 -1
- package/dist/public/assets/_DrK0EnPt.js.br +0 -0
- package/dist/public/assets/{_53BxL5eV.js → _DsorwdLS.js} +1 -1
- package/dist/public/assets/_DsorwdLS.js.br +0 -0
- package/dist/public/assets/{_hMziBcP-.js → _DtM8L0QT.js} +1 -1
- package/dist/public/assets/_DtM8L0QT.js.br +0 -0
- package/dist/public/assets/{_Snm0yKaj.js → _Dwf1KKEk.js} +2 -2
- package/dist/public/assets/_Dwf1KKEk.js.br +0 -0
- package/dist/public/assets/_DxrKpCoO.js +1 -0
- package/dist/public/assets/_EJ-nVvHo.js +1 -0
- package/dist/public/assets/{_CW6i23WO.js → _GqvYBp3d.js} +1 -1
- package/dist/public/assets/_GqvYBp3d.js.br +0 -0
- package/dist/public/assets/{_P2hfcmq2.js → _HGp5NWUA.js} +1 -1
- package/dist/public/assets/_HGp5NWUA.js.br +0 -0
- package/dist/public/assets/{_Bej9uABx.js → _Hgj3pLJn.js} +1 -1
- package/dist/public/assets/_Hgj3pLJn.js.br +0 -0
- package/dist/public/assets/{_CjvUwJV3.js → _KTDZsqNa.js} +1 -1
- package/dist/public/assets/_KTDZsqNa.js.br +0 -0
- package/dist/public/assets/{_DgwgtBl-.js → _Kc5M3dWR.js} +1 -1
- package/dist/public/assets/_Kc5M3dWR.js.br +0 -0
- package/dist/public/assets/{_C5rKz3O1.js → _Kcc3bYFt.js} +1 -1
- package/dist/public/assets/_Kcc3bYFt.js.br +0 -0
- package/dist/public/assets/{_DRlVO8QP.js → _MY96zwtS.js} +1 -1
- package/dist/public/assets/_MY96zwtS.js.br +0 -0
- package/dist/public/assets/{_CA1oqi-5.js → _MnmBUinp.js} +1 -1
- package/dist/public/assets/_MnmBUinp.js.br +0 -0
- package/dist/public/assets/{_BZox64kw.js → _NAiHjAyu.js} +1 -1
- package/dist/public/assets/_NAiHjAyu.js.br +0 -0
- package/dist/public/assets/{_DWjO1Fu_.js → _P281O5Oz.js} +1 -1
- package/dist/public/assets/_P281O5Oz.js.br +0 -0
- package/dist/public/assets/{_AYM7pfPo.js → _QGTVsobU.js} +13 -13
- package/dist/public/assets/_QGTVsobU.js.br +0 -0
- package/dist/public/assets/{_C4YyHuhB.js → _TZYoCPVT.js} +1 -1
- package/dist/public/assets/_TZYoCPVT.js.br +0 -0
- package/dist/public/assets/{_C246C-83.js → _VLBKCbK0.js} +1 -1
- package/dist/public/assets/_VLBKCbK0.js.br +0 -0
- package/dist/public/assets/{_DFydy0W7.js → _WAv74n0H.js} +20 -20
- package/dist/public/assets/_WAv74n0H.js.br +0 -0
- package/dist/public/assets/_Yv1plajR.js +1 -0
- package/dist/public/assets/{_DUAuUft5.js → _Zubvbbz6.js} +1 -1
- package/dist/public/assets/_Zubvbbz6.js.br +0 -0
- package/dist/public/assets/{_D-K2gNHz.js → _b0rCBZPi.js} +1 -1
- package/dist/public/assets/_b0rCBZPi.js.br +0 -0
- package/dist/public/assets/{_DsOKce00.js → _c2FP34rv.js} +1 -1
- package/dist/public/assets/_c2FP34rv.js.br +0 -0
- package/dist/public/assets/_dbmmrc2h.js +1 -0
- package/dist/public/assets/{_MT3fiPYA.js → _dxdf9yfT.js} +1 -1
- package/dist/public/assets/_foce90MO.js +1 -0
- package/dist/public/assets/_hWnhoOUr.js +1 -0
- package/dist/public/assets/{_C2qWHQF6.js → _jFnpIz6C.js} +1 -1
- package/dist/public/assets/_jFnpIz6C.js.br +0 -0
- package/dist/public/assets/{_CRE2rTXU.js → _nP5KHpB6.js} +1 -1
- package/dist/public/assets/_nP5KHpB6.js.br +0 -0
- package/dist/public/assets/_oWKfIZPF.js +1 -0
- package/dist/public/assets/_r24R0aVE.js +1 -0
- package/dist/public/assets/{_I3lY44aU.js → _rVcdKwXL.js} +1 -1
- package/dist/public/assets/_rVcdKwXL.js.br +0 -0
- package/dist/public/assets/_rxgT8_6e.js +1 -0
- package/dist/public/assets/{_DeRYTpbW.js → _su67TQYe.js} +1 -1
- package/dist/public/assets/_su67TQYe.js.br +0 -0
- package/dist/public/assets/{_BA3sDawp.js → _xrLJm_F-.js} +1 -1
- package/dist/public/assets/_xrLJm_F-.js.br +0 -0
- package/dist/public/assets/{_CJlGZ_RW.js → _yX3NeTWy.js} +1 -1
- package/dist/public/assets/_yX3NeTWy.js.br +0 -0
- package/dist/public/assets/{_Or5LYSbi.js → _zuUjFTWL.js} +1 -1
- package/dist/public/assets/_zuUjFTWL.js.br +0 -0
- package/dist/public/assets/files-view-8Tlzf8QZ.js +2 -0
- package/dist/public/assets/manage-workspace-Dkk5xdx3.js +2 -0
- package/dist/public/assets/new-DfBDgjGI.js +1 -0
- package/dist/public/assets/new-workspace-k7BkuWVf.js +2 -0
- package/dist/public/assets/review-view-DzNoAcf2.js +2 -0
- package/dist/public/assets/settings-DfBDgjGI.js +1 -0
- package/dist/public/assets/settings-page-VVX-GtVs.js +2 -0
- package/dist/public/assets/styles-CW5bNT80.css +1 -0
- package/dist/public/assets/styles-CW5bNT80.css.br +0 -0
- package/dist/public/assets/w-DfBDgjGI.js +1 -0
- package/dist/public/assets/w._-1Fq7QHrE.js +1 -0
- package/dist/public/assets/w._-DfBDgjGI.js +1 -0
- package/dist/public/assets/w._-Dk_LDh0R.js +1 -0
- package/package.json +1 -1
- package/dist/_BA6kJ94f.js +0 -2
- package/dist/_T5K2qs5u.js +0 -2
- package/dist/public/assets/_1k8H5Us1.js +0 -1
- package/dist/public/assets/_1mxz_fw8.js.br +0 -0
- package/dist/public/assets/_3vnvc5Ld.js +0 -1
- package/dist/public/assets/_4VEn8isc.js +0 -1
- package/dist/public/assets/_52UKdAZX.js +0 -1
- package/dist/public/assets/_53BxL5eV.js.br +0 -0
- package/dist/public/assets/_6JNHubX8.js.br +0 -0
- package/dist/public/assets/_7vo1ZYPl.js +0 -1
- package/dist/public/assets/_AYM7pfPo.js.br +0 -0
- package/dist/public/assets/_B0Kz6DRP.js.br +0 -0
- package/dist/public/assets/_B1UZEzRw.js +0 -1
- package/dist/public/assets/_B1aMR3_0.js.br +0 -0
- package/dist/public/assets/_B1wtZ2Dg.js +0 -1
- package/dist/public/assets/_B2VhAnZH.js +0 -1
- package/dist/public/assets/_B2cfZpA1.js +0 -1
- package/dist/public/assets/_B3M5E-Om.js.br +0 -0
- package/dist/public/assets/_B4IW83Ps.js +0 -1
- package/dist/public/assets/_BA3sDawp.js.br +0 -0
- package/dist/public/assets/_BEXx4s6i.js +0 -1
- package/dist/public/assets/_BFxxHHlG.js.br +0 -0
- package/dist/public/assets/_BG-zRRiX.js.br +0 -0
- package/dist/public/assets/_BJYjTcOn.js +0 -1
- package/dist/public/assets/_BKX1SZz8.js +0 -1
- package/dist/public/assets/_BNkBAy5A.js.br +0 -0
- package/dist/public/assets/_BPl5t09U.js +0 -1
- package/dist/public/assets/_BPl6OxeP.js +0 -1
- package/dist/public/assets/_BQIvO4j0.js +0 -1
- package/dist/public/assets/_BRJmnd-_.js +0 -1
- package/dist/public/assets/_BS-RHEk-.js.br +0 -0
- package/dist/public/assets/_BT6HfYe8.js.br +0 -0
- package/dist/public/assets/_BT7IZUlM.js.br +0 -0
- package/dist/public/assets/_BUmmoPn7.js.br +0 -0
- package/dist/public/assets/_BVEoZ0DQ.js.br +0 -0
- package/dist/public/assets/_BW8sn7HC.js +0 -1
- package/dist/public/assets/_BZox64kw.js.br +0 -0
- package/dist/public/assets/_Bej9uABx.js.br +0 -0
- package/dist/public/assets/_Bf18_byh.js +0 -1
- package/dist/public/assets/_BiJNEt7p.js +0 -1
- package/dist/public/assets/_BlPDQkFl.js +0 -1
- package/dist/public/assets/_BownQpIP.js.br +0 -0
- package/dist/public/assets/_Bqi4KjfY.js.br +0 -0
- package/dist/public/assets/_BxyRJpZq.js +0 -1
- package/dist/public/assets/_ByBX1AAI.js.br +0 -0
- package/dist/public/assets/_BzNb_fHh.js.br +0 -0
- package/dist/public/assets/_C-31-_h4.js +0 -1
- package/dist/public/assets/_C0gp-Ms1.js +0 -1
- package/dist/public/assets/_C246C-83.js.br +0 -0
- package/dist/public/assets/_C2qWHQF6.js.br +0 -0
- package/dist/public/assets/_C4YyHuhB.js.br +0 -0
- package/dist/public/assets/_C5rKz3O1.js.br +0 -0
- package/dist/public/assets/_C8RN45Ay.js.br +0 -0
- package/dist/public/assets/_CA1oqi-5.js.br +0 -0
- package/dist/public/assets/_CCxaMhJi.js.br +0 -0
- package/dist/public/assets/_CE0EY_Im.js.br +0 -0
- package/dist/public/assets/_CElcQNRx.js +0 -1
- package/dist/public/assets/_CElcQNRx.js.br +0 -0
- package/dist/public/assets/_CEnGHCTE.js.br +0 -0
- package/dist/public/assets/_CErPZpEJ.js +0 -1
- package/dist/public/assets/_CISMrPzZ.js +0 -1
- package/dist/public/assets/_CIp3AlsK.js +0 -1
- package/dist/public/assets/_CJlGZ_RW.js.br +0 -0
- package/dist/public/assets/_CKeIFx0z.js.br +0 -0
- package/dist/public/assets/_CNvP7-_g.js.br +0 -0
- package/dist/public/assets/_COaNVEzh.js +0 -1
- package/dist/public/assets/_CPXELW8A.js +0 -1
- package/dist/public/assets/_CQWSkJch.js +0 -1
- package/dist/public/assets/_CR8ysLim.js +0 -1
- package/dist/public/assets/_CRE2rTXU.js.br +0 -0
- package/dist/public/assets/_CW6i23WO.js.br +0 -0
- package/dist/public/assets/_CYWrzltT.js.br +0 -0
- package/dist/public/assets/_CYpdFsNd.js.br +0 -0
- package/dist/public/assets/_CZ30482G.js +0 -1
- package/dist/public/assets/_CZFNAK1G.js +0 -1
- package/dist/public/assets/_C_LsIBgT.js.br +0 -0
- package/dist/public/assets/_CdgU7fKH.js +0 -1
- package/dist/public/assets/_CeTSn3Od.js.br +0 -0
- package/dist/public/assets/_CedBoWcu.js.br +0 -0
- package/dist/public/assets/_CexMUoXX.js.br +0 -0
- package/dist/public/assets/_CfVGaBxr.js +0 -1
- package/dist/public/assets/_CfmVOY2H.js +0 -1
- package/dist/public/assets/_CgyDQNWM.js.br +0 -0
- package/dist/public/assets/_CjXKquH6.js +0 -1
- package/dist/public/assets/_CjvUwJV3.js.br +0 -0
- package/dist/public/assets/_ClQ_uypw.js.br +0 -0
- package/dist/public/assets/_CmB1kfhT.js.br +0 -0
- package/dist/public/assets/_Cnzpe3wm.js +0 -1
- package/dist/public/assets/_Cp25eGYo.js +0 -1
- package/dist/public/assets/_CqrPm1E1.js +0 -1
- package/dist/public/assets/_CsIiSuNi.js.br +0 -0
- package/dist/public/assets/_Cs_w9qrX.js +0 -1
- package/dist/public/assets/_Csct3qtA.js +0 -1
- package/dist/public/assets/_Csn-AGUO.js +0 -1
- package/dist/public/assets/_CsrDw2HV.js.br +0 -0
- package/dist/public/assets/_Ct49jor3.js +0 -1
- package/dist/public/assets/_CtYeoHds.js.br +0 -0
- package/dist/public/assets/_CtxFZ9vo.js +0 -1
- package/dist/public/assets/_Cz8Dsulr.js +0 -1
- package/dist/public/assets/_CzMLQ8gd.js +0 -1
- package/dist/public/assets/_Czw8PbiN.js +0 -1
- package/dist/public/assets/_D-K2gNHz.js.br +0 -0
- package/dist/public/assets/_D0LoYy3P.js.br +0 -0
- package/dist/public/assets/_D0MMtje0.js.br +0 -0
- package/dist/public/assets/_D1C5H689.js +0 -1
- package/dist/public/assets/_D2Fh5qVI.js +0 -1
- package/dist/public/assets/_D66U5RHc.js.br +0 -0
- package/dist/public/assets/_D68dPn0w.js.br +0 -0
- package/dist/public/assets/_DBQl8ZAL.js +0 -1
- package/dist/public/assets/_DCB8yv60.js +0 -1
- package/dist/public/assets/_DDZv_pCc.js.br +0 -0
- package/dist/public/assets/_DDaSBxJI.js +0 -1
- package/dist/public/assets/_DEHvdTTN.js +0 -1
- package/dist/public/assets/_DFydy0W7.js.br +0 -0
- package/dist/public/assets/_DGQlaxcF.js.br +0 -0
- package/dist/public/assets/_DI6-_YSC.js +0 -1
- package/dist/public/assets/_DKVp-5hj.js +0 -1
- package/dist/public/assets/_DKxPCb7m.js.br +0 -0
- package/dist/public/assets/_DL18-mb9.js.br +0 -0
- package/dist/public/assets/_DLJrYXXF.js +0 -1
- package/dist/public/assets/_DLtbnANA.js +0 -1
- package/dist/public/assets/_DROxwR_p.js +0 -1
- package/dist/public/assets/_DRlVO8QP.js.br +0 -0
- package/dist/public/assets/_DShsNCa4.js.br +0 -0
- package/dist/public/assets/_DSyaHlgp.js.br +0 -0
- package/dist/public/assets/_DUAuUft5.js.br +0 -0
- package/dist/public/assets/_DWEHoZNj.js +0 -1
- package/dist/public/assets/_DWjO1Fu_.js.br +0 -0
- package/dist/public/assets/_DYSjcaPz.js +0 -1
- package/dist/public/assets/_DYeFvJQu.js.br +0 -0
- package/dist/public/assets/_DYi5YY3I.js.br +0 -0
- package/dist/public/assets/_DZGhFAI6.js.br +0 -0
- package/dist/public/assets/_DZXvujeN.js +0 -1
- package/dist/public/assets/_D_sVikfy.js +0 -1
- package/dist/public/assets/_DahJWFLJ.js.br +0 -0
- package/dist/public/assets/_DbSFDbVw.js +0 -1
- package/dist/public/assets/_Dbe9iebB.js.br +0 -0
- package/dist/public/assets/_DdvVmpgX.js.br +0 -0
- package/dist/public/assets/_DeRYTpbW.js.br +0 -0
- package/dist/public/assets/_DfkI0VMD.js.br +0 -0
- package/dist/public/assets/_DgwgtBl-.js.br +0 -0
- package/dist/public/assets/_DjAS2fco.js +0 -1
- package/dist/public/assets/_Dm_qoiyI.js +0 -1
- package/dist/public/assets/_DnKKZmmC.js +0 -1
- package/dist/public/assets/_DoCnLlmF.js +0 -1
- package/dist/public/assets/_DqG7LJE3.js.br +0 -0
- package/dist/public/assets/_DrE6WT-8.js +0 -1
- package/dist/public/assets/_DsOKce00.js.br +0 -0
- package/dist/public/assets/_Dve5bwmV.js +0 -1
- package/dist/public/assets/_EI0KfGqk.js +0 -1
- package/dist/public/assets/_ER2-2r1k.js +0 -1
- package/dist/public/assets/_HHcjPPQg.js.br +0 -0
- package/dist/public/assets/_I3lY44aU.js.br +0 -0
- package/dist/public/assets/_JbTe9y6j.js.br +0 -0
- package/dist/public/assets/_KK2KF52X.js.br +0 -0
- package/dist/public/assets/_LWgmax5s.js.br +0 -0
- package/dist/public/assets/_OcFuZvAI.js.br +0 -0
- package/dist/public/assets/_Or5LYSbi.js.br +0 -0
- package/dist/public/assets/_P2hfcmq2.js.br +0 -0
- package/dist/public/assets/_Rm81HrZo.js.br +0 -0
- package/dist/public/assets/_Snm0yKaj.js.br +0 -0
- package/dist/public/assets/_XqOjFD-V.js.br +0 -0
- package/dist/public/assets/_aAxCIB1-.js +0 -1
- package/dist/public/assets/_cfb9-FKi.js +0 -1
- package/dist/public/assets/_dFodER3o.js.br +0 -0
- package/dist/public/assets/_fJWjSk9f.js.br +0 -0
- package/dist/public/assets/_gzb30I1D.js +0 -1
- package/dist/public/assets/_hMziBcP-.js.br +0 -0
- package/dist/public/assets/_iPM5HFrU.js +0 -1
- package/dist/public/assets/_kD85MWJq.js.br +0 -0
- package/dist/public/assets/_kZt7n5RY.js.br +0 -0
- package/dist/public/assets/_kc4p4uHI.js.br +0 -0
- package/dist/public/assets/_m6TXzIsC.js +0 -1
- package/dist/public/assets/_pSbDHXOq.js +0 -1
- package/dist/public/assets/_rFLxxyKo.js.br +0 -0
- package/dist/public/assets/_v20P7tN_.js +0 -1
- package/dist/public/assets/_wCgLIMkx.js.br +0 -0
- package/dist/public/assets/_y0XHaRBP.js +0 -1
- package/dist/public/assets/files-view-MM5bc8fv.js +0 -2
- package/dist/public/assets/manage-workspace-CyTEJrWl.js +0 -2
- package/dist/public/assets/new-cMqYbBWV.js +0 -1
- package/dist/public/assets/new-workspace-CZniyAMN.js +0 -2
- package/dist/public/assets/review-view-tPZAOTAi.js +0 -2
- package/dist/public/assets/settings-cMqYbBWV.js +0 -1
- package/dist/public/assets/settings-page-C6ALfL-2.js +0 -2
- package/dist/public/assets/styles-B57UQpsl.css +0 -1
- package/dist/public/assets/styles-B57UQpsl.css.br +0 -0
- package/dist/public/assets/w-cMqYbBWV.js +0 -1
- package/dist/public/assets/w._-BXl9mjaf.js +0 -1
- package/dist/public/assets/w._-cMqYbBWV.js +0 -1
- package/dist/public/assets/w._-y5AzhfwG.js +0 -1
package/bin/cli/session.mjs
CHANGED
|
@@ -263,11 +263,36 @@ function printGroup(ctx, g) {
|
|
|
263
263
|
);
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
+
/** What `work session list <id>` knows of a session; dies on none. */
|
|
267
|
+
async function infoOf(ctx, id) {
|
|
268
|
+
const s = await ctx.api.get(
|
|
269
|
+
`/api/sessions/${encodeURIComponent(id)}?missing=null`,
|
|
270
|
+
);
|
|
271
|
+
if (!s) ctx.die(`no session ${id} (see: work session list)`);
|
|
272
|
+
return s;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/** Whether this command runs for an agent, not the user: from an agent's
|
|
276
|
+
* own pane, not a shell's or a terminal outside work. */
|
|
277
|
+
async function callerIsAgent(ctx) {
|
|
278
|
+
const me = process.env.WORK_SESSION_ID;
|
|
279
|
+
if (!me) return false;
|
|
280
|
+
const s = await ctx.api.get(
|
|
281
|
+
`/api/sessions/${encodeURIComponent(me)}?missing=null`,
|
|
282
|
+
);
|
|
283
|
+
return !!s && s.agent !== "shell";
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/** Why an agent wants --yes for a change to the user's own session. */
|
|
287
|
+
function userOwn(id, what, lead) {
|
|
288
|
+
return `${id} is the user's own session (no agent started it)${lead ? `: under ${lead} its turns no longer notify them, its last message is written for ${lead}, it folds into ${lead}'s team in the list, and closing ${lead} closes it` : `, to be ${what}`}. Pass --yes only if the user asked for this`;
|
|
289
|
+
}
|
|
290
|
+
|
|
266
291
|
export const commands = [
|
|
267
292
|
{
|
|
268
293
|
name: "session",
|
|
269
294
|
summary:
|
|
270
|
-
"this session and the workspace's others: new, fanout, send, wait, hold, keep, reopen, log, team, kill",
|
|
295
|
+
"this session and the workspace's others: new, fanout, send, unsend, wait, hold, forget, keep, adopt, release, retire, reopen, log, team, kill",
|
|
271
296
|
help: `work session [--json]
|
|
272
297
|
This session (WORK_SESSION_ID): its id, agent, name, state, and the
|
|
273
298
|
workspace it is in (id, name, path) — what a link names (/w/<id>/…).
|
|
@@ -320,7 +345,8 @@ work session retry <member>
|
|
|
320
345
|
Rerun a closed member in a fresh session: its group waits for it again.
|
|
321
346
|
work session skip <member>
|
|
322
347
|
Stop a member: a queued one never starts, a running one's session
|
|
323
|
-
closes
|
|
348
|
+
closes, ending its turn and whatever its pane runs; either way its group
|
|
349
|
+
no longer waits on it. \`forget\` stops waiting on one that works on.
|
|
324
350
|
work session send <id> "<text>"|- [--no-reply] [--now|--interrupt]
|
|
325
351
|
Message an agent session: typed in, headed with who it is from, once
|
|
326
352
|
it is at its prompt — never into a question it asks or a draft someone
|
|
@@ -353,7 +379,10 @@ work session send <id> "<text>"|- [--no-reply] [--now|--interrupt]
|
|
|
353
379
|
another workspace (\`work session list <workspace>\`) can be messaged
|
|
354
380
|
when the user asks, and only while it runs; everything else here an
|
|
355
381
|
agent does in its own workspace only.
|
|
356
|
-
work session
|
|
382
|
+
work session unsend <id>
|
|
383
|
+
Take back what this session queued for <id> that is not typed in yet:
|
|
384
|
+
a message that went in stays in its turn (send a correction instead).
|
|
385
|
+
work session reopen <id> [--agent <id>] [--now]
|
|
357
386
|
Start a session again on its own conversation, where its CLI can resume
|
|
358
387
|
one (Claude, Codex): one closed — by its lead's close, the user's, or
|
|
359
388
|
for being done — back under the session that started it, or under this
|
|
@@ -361,7 +390,10 @@ work session reopen <id> [--agent <id>]
|
|
|
361
390
|
starts it as another instance of the same CLI (claude2 for claude):
|
|
362
391
|
one stuck because its account hit a limit goes on as another account's,
|
|
363
392
|
where the two share their conversations. What is queued for it and what
|
|
364
|
-
it owes you stay: send it a message to carry it on.
|
|
393
|
+
it owes you stay: send it a message to carry it on. A restart ends the
|
|
394
|
+
turn under way and what its pane runs (a background job, a dev server),
|
|
395
|
+
so a running one mid-turn or with jobs is refused, saying what it is
|
|
396
|
+
on, unless --now.
|
|
365
397
|
work session wait [<id>|<group>...] [--any] [--timeout <seconds>]
|
|
366
398
|
Wait for the replies owed to this session (by those sessions or groups,
|
|
367
399
|
else by any), printing each as it comes; a reply printed here is not
|
|
@@ -376,18 +408,48 @@ work session hold "<what you wait on>"
|
|
|
376
408
|
nothing more until they write to you); you are not closed for being
|
|
377
409
|
done meanwhile; and the last message of the turn the job's end wakes
|
|
378
410
|
you into is the reply (hold again there to wait on more).
|
|
411
|
+
work session forget <id|member>…
|
|
412
|
+
Stop waiting on what a session owes this one, without stopping it: its
|
|
413
|
+
turn's end answers nobody, and what is still queued from you goes in
|
|
414
|
+
wanting no reply (a reply it sent already still comes). A fan-out
|
|
415
|
+
member's group no longer waits on it: a queued one never starts, a
|
|
416
|
+
running one works on, under you. Nothing is told to it.
|
|
379
417
|
work session keep <id>
|
|
380
418
|
Keep a session this one started open for follow-ups, as \`new --keep\`
|
|
381
419
|
would have: it is never closed for being done.
|
|
420
|
+
work session adopt <id>… [--lead <id>] [--from <lead>] [--close-done] [--yes]
|
|
421
|
+
Put a running session under this one (or --lead), as if this one had
|
|
422
|
+
started it, with nothing restarted: the list nests it, \`list <lead>\`,
|
|
423
|
+
\`kill <lead>\` and \`reopen\` treat it as the lead's, its replies are
|
|
424
|
+
its turns' ends, its turns no longer notify the user (the lead's news),
|
|
425
|
+
and its permission mode stays its own. What is queued for it or owed
|
|
426
|
+
keeps how it is answered. Kept open (never closed for being done)
|
|
427
|
+
unless --close-done, which closes it once it has answered from now on.
|
|
428
|
+
One under another lead moves only with --from naming it. A session the
|
|
429
|
+
user started is theirs: an agent passes --yes only when the user asked.
|
|
430
|
+
work session release <id>…
|
|
431
|
+
Stand a session on its own again, as \`kill --keep-children\` leaves the
|
|
432
|
+
ones it started: nothing restarts, and what it owes stays owed.
|
|
433
|
+
work session retire <id>… [--yes]
|
|
434
|
+
Close a session once closing it loses nothing: no turn under way,
|
|
435
|
+
nothing queued for it, owed by or to it, no session it leads still open,
|
|
436
|
+
not on the user's screen, and nothing left running in its pane. Now if
|
|
437
|
+
that is now, else when the last of those ends; typing into it first
|
|
438
|
+
takes this back. Closed so, a message reopens it on its conversation.
|
|
439
|
+
This one retired closes once its turn has ended. A session the user
|
|
440
|
+
started is theirs: an agent passes --yes only when the user asked.
|
|
382
441
|
work session kill <id> [--keep-children] --yes
|
|
383
442
|
Close a session and the process in it, and the sessions it started
|
|
384
|
-
with theirs, unless --keep-children (they then stand on their own)
|
|
385
|
-
|
|
443
|
+
with theirs, unless --keep-children (they then stand on their own): the
|
|
444
|
+
turn under way, what its pane runs and what is queued for it end, and
|
|
445
|
+
whoever waits on a reply from one is told. Each that can resume its
|
|
386
446
|
conversation can be started again for a week: \`work session reopen\`.
|
|
447
|
+
\`retire\` closes one without losing anything.
|
|
387
448
|
work session kill --done
|
|
388
449
|
Close now the sessions this one started that are done with (answered,
|
|
389
|
-
idle, not the user's
|
|
390
|
-
and a message to one reopens it,
|
|
450
|
+
idle, not the user's, nothing left running in its pane): fan-out
|
|
451
|
+
results stay in \`work session team\`, and a message to one reopens it,
|
|
452
|
+
as \`send\` says.`,
|
|
391
453
|
async run(ctx) {
|
|
392
454
|
const [verb, ...rest] = ctx.parse([
|
|
393
455
|
"--agent",
|
|
@@ -401,6 +463,8 @@ work session kill --done
|
|
|
401
463
|
"--count",
|
|
402
464
|
"--parallel",
|
|
403
465
|
"--limit",
|
|
466
|
+
"--lead",
|
|
467
|
+
"--from",
|
|
404
468
|
]);
|
|
405
469
|
switch (verb) {
|
|
406
470
|
case undefined: {
|
|
@@ -712,10 +776,12 @@ work session kill --done
|
|
|
712
776
|
}
|
|
713
777
|
case "reopen": {
|
|
714
778
|
const [id] = rest;
|
|
715
|
-
if (!id)
|
|
779
|
+
if (!id)
|
|
780
|
+
ctx.die("usage: work session reopen <id> [--agent <id>] [--now]");
|
|
716
781
|
const agent = ctx.flag("--agent");
|
|
717
782
|
const r = await ctx.api.post(`/api/sessions/${id}/reopen${by()}`, {
|
|
718
783
|
...(agent ? { agent } : {}),
|
|
784
|
+
...(ctx.has("--now") ? { now: true } : {}),
|
|
719
785
|
});
|
|
720
786
|
return ctx.out(r, (r) => {
|
|
721
787
|
console.log(
|
|
@@ -726,6 +792,122 @@ work session kill --done
|
|
|
726
792
|
);
|
|
727
793
|
});
|
|
728
794
|
}
|
|
795
|
+
case "unsend": {
|
|
796
|
+
const me = sessionId(ctx);
|
|
797
|
+
const [id] = rest;
|
|
798
|
+
if (!id) ctx.die("usage: work session unsend <id>");
|
|
799
|
+
const { withdrawn } = await ctx.api.post(
|
|
800
|
+
`/api/sessions/${encodeURIComponent(id)}/unsend?by=${encodeURIComponent(me)}`,
|
|
801
|
+
);
|
|
802
|
+
return ctx.out({ id, withdrawn }, () =>
|
|
803
|
+
console.log(
|
|
804
|
+
`took back ${withdrawn === 1 ? "your message" : `your ${withdrawn} messages`} queued for ${id}`,
|
|
805
|
+
),
|
|
806
|
+
);
|
|
807
|
+
}
|
|
808
|
+
case "forget": {
|
|
809
|
+
const me = sessionId(ctx);
|
|
810
|
+
if (!rest.length) ctx.die("usage: work session forget <id|member>…");
|
|
811
|
+
const out = [];
|
|
812
|
+
for (const id of rest)
|
|
813
|
+
out.push({
|
|
814
|
+
id,
|
|
815
|
+
...(await ctx.api.post(
|
|
816
|
+
`/api/sessions/${encodeURIComponent(id)}/forget?by=${encodeURIComponent(me)}`,
|
|
817
|
+
)),
|
|
818
|
+
});
|
|
819
|
+
return ctx.out(out, (rows) => {
|
|
820
|
+
for (const r of rows)
|
|
821
|
+
console.log(
|
|
822
|
+
r.member
|
|
823
|
+
? `forgot member ${r.member}: its group no longer waits on it${r.session ? `, and ${r.session} works on, under you` : ""}`
|
|
824
|
+
: `forgot what ${r.id} owes you: it works on, and its turn's end answers nobody`,
|
|
825
|
+
);
|
|
826
|
+
});
|
|
827
|
+
}
|
|
828
|
+
case "adopt": {
|
|
829
|
+
if (!rest.length)
|
|
830
|
+
ctx.die(
|
|
831
|
+
"usage: work session adopt <id>… [--lead <id>] [--from <lead>] [--close-done] [--yes]",
|
|
832
|
+
);
|
|
833
|
+
const lead = ctx.flag("--lead") || process.env.WORK_SESSION_ID;
|
|
834
|
+
if (!lead)
|
|
835
|
+
ctx.die("not in a work session: pass --lead <id> to adopt under");
|
|
836
|
+
const fromAgent = await callerIsAgent(ctx);
|
|
837
|
+
for (const id of rest) {
|
|
838
|
+
const s = await infoOf(ctx, id);
|
|
839
|
+
if (s.closed)
|
|
840
|
+
ctx.die(
|
|
841
|
+
`${id} has closed: \`work session reopen ${id}\` from ${lead} starts it again under it`,
|
|
842
|
+
);
|
|
843
|
+
if (fromAgent && !s.parent && !ctx.yes)
|
|
844
|
+
ctx.die(userOwn(id, `under ${lead}`, lead));
|
|
845
|
+
}
|
|
846
|
+
const out = [];
|
|
847
|
+
for (const id of rest)
|
|
848
|
+
out.push(
|
|
849
|
+
await ctx.api.post(
|
|
850
|
+
`/api/sessions/${encodeURIComponent(id)}/parent${by()}`,
|
|
851
|
+
{
|
|
852
|
+
parent: lead,
|
|
853
|
+
...(ctx.flag("--from") ? { from: ctx.flag("--from") } : {}),
|
|
854
|
+
...(ctx.has("--close-done") ? { closeDone: true } : {}),
|
|
855
|
+
},
|
|
856
|
+
),
|
|
857
|
+
);
|
|
858
|
+
return ctx.out(out, (rows) => {
|
|
859
|
+
for (const r of rows)
|
|
860
|
+
console.log(
|
|
861
|
+
`${r.id} is under ${r.parent} now, ${r.kept ? "kept open (`work session retire` closes it once nothing is lost)" : "closed once it has answered and is done with"}`,
|
|
862
|
+
);
|
|
863
|
+
console.log(
|
|
864
|
+
`Its turns' ends are replies to what ${lead} asks, and notify nobody; \`work session release\` stands it on its own again.`,
|
|
865
|
+
);
|
|
866
|
+
});
|
|
867
|
+
}
|
|
868
|
+
case "release": {
|
|
869
|
+
if (!rest.length) ctx.die("usage: work session release <id>…");
|
|
870
|
+
const out = [];
|
|
871
|
+
for (const id of rest)
|
|
872
|
+
out.push(
|
|
873
|
+
await ctx.api.post(
|
|
874
|
+
`/api/sessions/${encodeURIComponent(id)}/parent${by()}`,
|
|
875
|
+
{ parent: null },
|
|
876
|
+
),
|
|
877
|
+
);
|
|
878
|
+
return ctx.out(out, (rows) => {
|
|
879
|
+
for (const r of rows)
|
|
880
|
+
console.log(
|
|
881
|
+
`${r.id} stands on its own now, in the permission mode it ran in`,
|
|
882
|
+
);
|
|
883
|
+
});
|
|
884
|
+
}
|
|
885
|
+
case "retire": {
|
|
886
|
+
if (!rest.length) ctx.die("usage: work session retire <id>… [--yes]");
|
|
887
|
+
const me = process.env.WORK_SESSION_ID;
|
|
888
|
+
const fromAgent = await callerIsAgent(ctx);
|
|
889
|
+
for (const id of rest) {
|
|
890
|
+
const s = await infoOf(ctx, id);
|
|
891
|
+
if (fromAgent && !s.parent && id !== me && !ctx.yes)
|
|
892
|
+
ctx.die(userOwn(id, "closed once it is idle"));
|
|
893
|
+
}
|
|
894
|
+
const out = [];
|
|
895
|
+
for (const id of rest)
|
|
896
|
+
out.push({
|
|
897
|
+
id,
|
|
898
|
+
...(await ctx.api.post(
|
|
899
|
+
`/api/sessions/${encodeURIComponent(id)}/retire${by()}`,
|
|
900
|
+
)),
|
|
901
|
+
});
|
|
902
|
+
return ctx.out(out, (rows) => {
|
|
903
|
+
for (const r of rows)
|
|
904
|
+
console.log(
|
|
905
|
+
r.closed
|
|
906
|
+
? `closed ${r.id}, which had nothing left to lose: ${r.reopens ? "a message reopens it on its conversation" : "its conversation went with it (its CLI cannot resume one, or work never learned it)"}`
|
|
907
|
+
: `${r.id} closes once nothing is lost by it; for now ${r.waits.join(", and ")}. Typing into it takes this back`,
|
|
908
|
+
);
|
|
909
|
+
});
|
|
910
|
+
}
|
|
729
911
|
case "keep": {
|
|
730
912
|
const [id] = rest;
|
|
731
913
|
if (!id) ctx.die("usage: work session keep <id>");
|
|
@@ -737,16 +919,20 @@ work session kill --done
|
|
|
737
919
|
case "kill": {
|
|
738
920
|
if (ctx.has("--done")) {
|
|
739
921
|
const me = sessionId(ctx);
|
|
740
|
-
const { closed } = await ctx.api.post(
|
|
922
|
+
const { closed, left = [] } = await ctx.api.post(
|
|
741
923
|
`/api/sessions/${me}/close-done${by()}`,
|
|
742
924
|
);
|
|
743
|
-
return ctx.out({ closed }, () =>
|
|
925
|
+
return ctx.out({ closed, left }, () => {
|
|
744
926
|
console.log(
|
|
745
927
|
closed
|
|
746
928
|
? `closed ${closed} finished ${closed === 1 ? "session" : "sessions"}`
|
|
747
|
-
:
|
|
748
|
-
|
|
749
|
-
|
|
929
|
+
: left.length
|
|
930
|
+
? "closed none: closing would lose something of each"
|
|
931
|
+
: "none of the sessions this one started is done with",
|
|
932
|
+
);
|
|
933
|
+
for (const l of left)
|
|
934
|
+
console.log(` left ${l.id} open: ${l.why.join(", and ")}`);
|
|
935
|
+
});
|
|
750
936
|
}
|
|
751
937
|
const [id] = rest;
|
|
752
938
|
if (!id)
|
|
@@ -819,6 +819,16 @@ var STEPS = [
|
|
|
819
819
|
CREATE INDEX message_log_to ON message_log(to_session);
|
|
820
820
|
CREATE INDEX message_log_from ON message_log(from_session);
|
|
821
821
|
CREATE INDEX message_log_workspace ON message_log(workspace_id, created_at);
|
|
822
|
+
`);
|
|
823
|
+
}
|
|
824
|
+
},
|
|
825
|
+
{
|
|
826
|
+
version: 15,
|
|
827
|
+
name: "retiring sessions, typing kept",
|
|
828
|
+
up(db) {
|
|
829
|
+
db.exec(`
|
|
830
|
+
ALTER TABLE sessions ADD COLUMN retire_at TEXT;
|
|
831
|
+
ALTER TABLE sessions ADD COLUMN typed_at INTEGER;
|
|
822
832
|
`);
|
|
823
833
|
}
|
|
824
834
|
}
|
|
@@ -9479,8 +9489,12 @@ function activityOf(sessionId) {
|
|
|
9479
9489
|
}
|
|
9480
9490
|
/** Someone typed into the session's pane from a page. */
|
|
9481
9491
|
function noteTyped(sessionId) {
|
|
9482
|
-
|
|
9492
|
+
const now = Date.now();
|
|
9493
|
+
const last = typedAt.get(sessionId) ?? 0;
|
|
9494
|
+
typedAt.set(sessionId, now);
|
|
9495
|
+
if (now - last >= TYPED_KEEP_MS) db.prepare("UPDATE sessions SET typed_at = ? WHERE id = ?").run(now, sessionId);
|
|
9483
9496
|
}
|
|
9497
|
+
var TYPED_KEEP_MS = 1e3;
|
|
9484
9498
|
/** When someone last typed into the session's pane (0: not this run). */
|
|
9485
9499
|
function lastTypedAt(sessionId) {
|
|
9486
9500
|
return typedAt.get(sessionId) ?? 0;
|
|
@@ -9644,7 +9658,7 @@ function publishChange(sessionId) {
|
|
|
9644
9658
|
const row = get("SELECT workspace_id FROM sessions WHERE id = ?", sessionId);
|
|
9645
9659
|
if (row?.workspace_id) {
|
|
9646
9660
|
const workspaceId = row.workspace_id;
|
|
9647
|
-
import("./
|
|
9661
|
+
import("./_BOUuiLtz.js").then((m) => m.notifySessionsChanged(workspaceId));
|
|
9648
9662
|
return;
|
|
9649
9663
|
}
|
|
9650
9664
|
publish("sessions.changed");
|
|
@@ -17378,6 +17392,61 @@ async function foregroundRun(panePid, command) {
|
|
|
17378
17392
|
if (!argv?.length) return false;
|
|
17379
17393
|
return !!await headlessRun(job, argv[0].split("/").pop() || argv[0], argv.slice(1), table?.get(job)?.tty);
|
|
17380
17394
|
}
|
|
17395
|
+
/** Shells an agent CLI runs its commands in: Claude's Bash tool, Codex's
|
|
17396
|
+
* exec. A CLI's other children (stdio MCP servers, language servers) live
|
|
17397
|
+
* as long as it does and are none of its jobs. */
|
|
17398
|
+
var SHELLS = /* @__PURE__ */ new Set([
|
|
17399
|
+
"bash",
|
|
17400
|
+
"sh",
|
|
17401
|
+
"zsh",
|
|
17402
|
+
"fish",
|
|
17403
|
+
"dash",
|
|
17404
|
+
"ksh"
|
|
17405
|
+
]);
|
|
17406
|
+
var baseName = (arg) => (arg.split("/").pop() || arg).replace(/^-/, "");
|
|
17407
|
+
/** What a CLI at `panePid` still runs in shells of its own — a background
|
|
17408
|
+
* job, a dev server, a test run left going — each named by what its
|
|
17409
|
+
* shell runs (`pnpm test`), else the shell. Closing or restarting the CLI
|
|
17410
|
+
* ends them all with its tmux session, so a close that loses nothing
|
|
17411
|
+
* waits for none (server/team `closeBlockers`). */
|
|
17412
|
+
async function shellJobs(panePid) {
|
|
17413
|
+
if (darwin) {
|
|
17414
|
+
const table = await processArgs();
|
|
17415
|
+
const kids = (pid) => [...table].filter(([, row]) => row.ppid === pid);
|
|
17416
|
+
return kids(panePid).filter(([, row]) => SHELLS.has(baseName(row.argv[0] ?? ""))).map(([pid, row]) => jobName(kids(pid)[0]?.[1].argv ?? row.argv));
|
|
17417
|
+
}
|
|
17418
|
+
const jobs = [];
|
|
17419
|
+
for (const pid of await childPids(panePid)) {
|
|
17420
|
+
const stat = await procStat(pid);
|
|
17421
|
+
if (!stat.length || stat[0] === "Z") continue;
|
|
17422
|
+
const argv = await procArgs(pid);
|
|
17423
|
+
if (!SHELLS.has(baseName(argv[0] ?? ""))) continue;
|
|
17424
|
+
const [first] = await childPids(pid);
|
|
17425
|
+
jobs.push(jobName(first ? await procArgs(first) : argv));
|
|
17426
|
+
}
|
|
17427
|
+
return jobs;
|
|
17428
|
+
}
|
|
17429
|
+
/** A job as a line: its command and arguments, paths by their names. */
|
|
17430
|
+
function jobName(argv) {
|
|
17431
|
+
const line = argv.map((arg) => arg.startsWith("/") ? baseName(arg) : arg).join(" ");
|
|
17432
|
+
return line.length > 60 ? `${line.slice(0, 59)}…` : line;
|
|
17433
|
+
}
|
|
17434
|
+
/** A process's children on Linux, every thread's (a Node CLI forks from
|
|
17435
|
+
* its worker threads too). */
|
|
17436
|
+
async function childPids(pid) {
|
|
17437
|
+
let tasks;
|
|
17438
|
+
try {
|
|
17439
|
+
tasks = await fs$1.readdir(`/proc/${pid}/task`);
|
|
17440
|
+
} catch {
|
|
17441
|
+
return [];
|
|
17442
|
+
}
|
|
17443
|
+
const kids = /* @__PURE__ */ new Set();
|
|
17444
|
+
for (const task of tasks) try {
|
|
17445
|
+
const list = await fs$1.readFile(`/proc/${pid}/task/${task}/children`, "utf8");
|
|
17446
|
+
for (const kid of list.split(" ")) if (kid.trim()) kids.add(Number(kid));
|
|
17447
|
+
} catch {}
|
|
17448
|
+
return [...kids];
|
|
17449
|
+
}
|
|
17381
17450
|
/** Whether a process reads a terminal: its stdin on Linux; on macOS,
|
|
17382
17451
|
* where a look at one pid's descriptors costs a spawn, whether it has a
|
|
17383
17452
|
* controlling terminal at all (`ps`'s `??`). Unknown counts as one. */
|
|
@@ -17789,6 +17858,10 @@ function sessionInfo(id) {
|
|
|
17789
17858
|
workspace: s.workspace_id,
|
|
17790
17859
|
parent: s.parent_id,
|
|
17791
17860
|
summary: s.summary,
|
|
17861
|
+
/** Never closed for being done (`work session keep`). */
|
|
17862
|
+
kept: !!live?.keep,
|
|
17863
|
+
/** Since when it is to close once nothing is lost by it (`retire`). */
|
|
17864
|
+
retiring: live?.retire_at ?? null,
|
|
17792
17865
|
/** How and when it closed; null while open. */
|
|
17793
17866
|
closed: closed ? {
|
|
17794
17867
|
how: closed.how,
|
|
@@ -17805,6 +17878,37 @@ function paneAlive(id, env) {
|
|
|
17805
17878
|
tmuxName(id)
|
|
17806
17879
|
], env).then(() => true, () => false);
|
|
17807
17880
|
}
|
|
17881
|
+
/** What the session's CLI still runs in shells of its own (procs
|
|
17882
|
+
* `shellJobs`): its tmux session's close or a restart ends them. */
|
|
17883
|
+
async function paneJobs(id) {
|
|
17884
|
+
const pane = (await listPanes())?.find((p) => p.id === id);
|
|
17885
|
+
return pane ? shellJobs(pane.pid) : [];
|
|
17886
|
+
}
|
|
17887
|
+
/** Put a running session under `parent` (`work session adopt`), or on its
|
|
17888
|
+
* own with null (`release`), as `new` would have started it: nothing
|
|
17889
|
+
* restarts, and what is queued for it or owed keeps how it is answered
|
|
17890
|
+
* (a row's `by_send`). Adopted, it is kept from closing for being done
|
|
17891
|
+
* unless `closeDone`, which counts only answers to come: it may have
|
|
17892
|
+
* answered someone long ago. Moving one from another lead takes `from`
|
|
17893
|
+
* naming that lead. */
|
|
17894
|
+
function moveSession(id, parent, opts = {}) {
|
|
17895
|
+
const s = getSession(id);
|
|
17896
|
+
if (!s) throw httpError(404, `no session ${id}`);
|
|
17897
|
+
if (parent === null) {
|
|
17898
|
+
if (s.parent_id) db.prepare("UPDATE sessions SET parent_id = NULL WHERE id = ?").run(id);
|
|
17899
|
+
} else {
|
|
17900
|
+
const lead = getSession(parent);
|
|
17901
|
+
if (!lead) throw httpError(404, `no session ${parent}`);
|
|
17902
|
+
if (lead.workspace_id !== s.workspace_id) throw httpError(409, `${parent} is in another workspace than ${id}`);
|
|
17903
|
+
if (lead.agent === "shell") throw httpError(409, `${parent} is a shell: only an agent leads`);
|
|
17904
|
+
if (parent === id) throw httpError(409, `${id} cannot be under itself`);
|
|
17905
|
+
if (descendantsOf(id).includes(parent)) throw httpError(409, `${parent} is under ${id} already: ${id} cannot also be under it (\`work session release ${parent}\` first)`);
|
|
17906
|
+
if (s.parent_id && s.parent_id !== parent && opts.from !== s.parent_id) throw httpError(409, `${id} is under ${s.parent_id}: pass --from ${s.parent_id} to move it`);
|
|
17907
|
+
db.prepare(`UPDATE sessions SET parent_id = ?, keep = ?${opts.closeDone ? ", answered_at = NULL" : ""} WHERE id = ?`).run(parent, opts.closeDone ? 0 : 1, id);
|
|
17908
|
+
}
|
|
17909
|
+
notifySessionsChanged(s.workspace_id);
|
|
17910
|
+
return getSession(id);
|
|
17911
|
+
}
|
|
17808
17912
|
/** Every session `id` started, and theirs, nearest first. */
|
|
17809
17913
|
function descendantsOf(id) {
|
|
17810
17914
|
return all(`WITH RECURSIVE kids(id, depth) AS (
|
|
@@ -17900,7 +18004,7 @@ function notifySessionsChanged(workspaceId) {
|
|
|
17900
18004
|
async function emitSessionsChanged(workspaceId) {
|
|
17901
18005
|
try {
|
|
17902
18006
|
const states = await sessionStates();
|
|
17903
|
-
const { teamsOf } = await import("./
|
|
18007
|
+
const { teamsOf } = await import("./_C-c452mk.js");
|
|
17904
18008
|
publish("sessions.changed", {
|
|
17905
18009
|
workspaceId,
|
|
17906
18010
|
sessions: listSessions(workspaceId).map((s) => ({
|
|
@@ -19627,7 +19731,12 @@ ${repoLines}
|
|
|
19627
19731
|
otherwise (with its lead, by the user), or stuck on its account's limit,
|
|
19628
19732
|
\`work session reopen <id> [--agent <another instance>]\` starts again
|
|
19629
19733
|
on it, and \`work session log [<id>]\` shows what went to and from
|
|
19630
|
-
one and how each message went.
|
|
19734
|
+
one and how each message went. \`kill\` and \`skip\` end the turn under
|
|
19735
|
+
way and what its pane runs; to lose nothing, \`forget <id>\` stops
|
|
19736
|
+
waiting on a reply, \`unsend <id>\` takes back a message not yet typed
|
|
19737
|
+
in, \`retire <id>\` closes one once it is idle, and \`adopt <id>\` /
|
|
19738
|
+
\`release <id>\` move one under you or off (the user's own only when
|
|
19739
|
+
they ask, with \`--yes\`). For a quick
|
|
19631
19740
|
sweep in your own CLI, its own subagents are cheaper. All of this is
|
|
19632
19741
|
this workspace's only; an agent in another can be messaged when the user
|
|
19633
19742
|
asks, and only while it runs (\`work workspaces\` lists them, \`work session list <workspace>\`
|
|
@@ -19645,4 +19754,4 @@ ${repoLines}
|
|
|
19645
19754
|
`;
|
|
19646
19755
|
}
|
|
19647
19756
|
//#endregion
|
|
19648
|
-
export {
|
|
19757
|
+
export { panePids as $, agentBadge as $n, agentById as $r, startSnapSweep as $t, closedSession as A, lastTypedAt as An, WORKSPACE_PREFS as Ar, removeServer as At, killWorkspaceSessions as B, onPhaseChange as Bn, setDisabledAgents as Br, refreshGithub as Bt, workspaceBranches as C, config as Ci, realInside as Cn, ensureGitCredentials as Cr, addCustomServer as Ct, beginCreation as D, hookPhase as Dn, removeHost as Dr, installKey as Dt, agentCaller as E, clearAgentPhase as En, normalizeHost as Er, forgetProbes as Et, ensureTmuxServer as F, noteTurnFailed as Fn, disabledAgents as Fr, authGithub as Ft, markTmuxStarted as G, setExpecting as Gn, ghKnownHosts as Gr, patchIn as Gt, listPanes as H, onTurnFailed as Hn, setSetting as Hr, runStreaming as Ht, forgetPanes as I, noteTyped as In, enabledAgents as Ir, installAgent as It, noteConversation as J, settleQuietWorking as Jn, which as Jr, reviewWaiting as Jt, moveSession as K, setScrapedPhase as Kn, miseInstalls as Kr, readBlobAt as Kt, getSession as L, noteUserAnswered as Ln, getSetting as Lr, installMise as Lt, creationOf as M, noteBackground as Mn, allPrefs as Mr, serverList as Mt, descendantsOf as N, noteInterrupt as Nn, changePref as Nr, sharing as Nt, cleanEnv as O, hookReportedAt as On, unreachableRepos as Or, installServer as Ot, disposeSessions as P, notePermissionMode as Pn, deleteSetting as Pr, whileInstalling as Pt, paneJobs as Q, turnSince as Qn, TOOLS as Qr, setPoints as Qt, interruptSession as R, notifyEventOn as Rn, isKnownAgent as Rr, installTool as Rt, withProgressOp as S, tmux as Si, inside as Sn, configuredHosts as Sr, stopServers as St, hookToken as T, withLock as Ti, agentPhase as Tn, isValidHost as Tr, forgetCustomServer as Tt, listPanesWithin as U, sessionWatched as Un, discoverAgents as Ur, updateTool as Ut, launchDir as V, onTurnEnd as Vn, setPref as Vr, removeTool as Vt, listSessions as W, setAgentPhase as Wn, doctor as Wr, fileChanges as Wt, onSessionDispose as X, turnPhase as Xn, firewallProbe as Xr, workspaceDiff as Xt, notifySessionsChanged as Y, summaryOf as Yn, bornOut as Yr, withinBudget as Yt, ownWorkspaceOnly as Z, turnSettling as Zn, PROJECT_TOOLS as Zr, workspaceSections as Zt, retryMaterialize as _, workspacePath as _i, blankRow as _n, repoBranches as _r, lspQueryOf as _t, ensureUntrackedCache as a, FRAME_ANCESTORS as ai, hotBatchMinMs as an, getInstance as ar, retireSession as at, sweepTrash as b, TMUX_SOCKET as bi, writeCache as bn, DEFAULT_HOST as br, runningServers as bt, insertPendingWorkspace as c, httpError as ci, withoutDismissed as cn, normalizeAccent as cr, sessionStates as ct, progress as d, publishJson as di, AGENTS as dn, pushPublicKey as dr, killWorkspaceProc as dt, agentLabel$1 as ei, diffStamp as en, agentFamily as er, pasteToSession as et, progressSince as f, subscribe as fi, interruptKeys as fn, saveSubscription as fr, portsByWorkspace as ft, resumePendingWorkspaces as g, get as gi, steerKeys as gn, pendingSsoOrgs as gr, lspQuery as gt, removeRepo as h, db as hi, reportsWorking as hn, headOid as hr, lspDiagnostics as ht, deleteWorkspace as i, applyPrefChange as ii, dismissPr as in, ACCENT_RE as ir, restartSession as it, createSession as j, noteActivity$1 as jn, agentChoices as jr, serverById as jt, clearTmuxStarted as k, interruptedSinceReport as kn, PREF_MAX as kr, lspEnabled as kt, listWorkspaces as l, readBody as li, workspacePrs as ln, setInstance as lr, tmuxName as lt, queueMaterialize as m, all as mi, readHookPayload as mn, validSubscription as mr, killServers as mt, barePath as n, parseAgentId as ni, markBranch as nn, agentLabel as nr, reopenSession as nt, gcBares as o, FRAME_HEADERS as oi, notePushActivity as on, iconSvg as or, sendToSession as ot, pruneLaneBranch as p, subscriberCount as pi, quotesPastes as pn, sendPush as pr, workspaceProcs as pt, newSessionArgs as q, setSessionViewers as qn, miseVersions as qr, readFileAt as qt, createWorkspace as r, toolById as ri, sectionFor as rn, agentMeta as rr, reopenable as rt, getWorkspace as s, checked as si, refreshPrsBatch as sn, manifest as sr, sessionInfo as st, addRepo as t, catalogPin as ti, commentFolder as tn, agentFromCommand as tr, renameSession as tt, otherWorkspaceBranches as u, publish as ui, noteActivity as un, deleteSubscription as ur, tmuxWasStarted as ut, revParse as v, ownsBranchOf as vi, credentialStamp as vn, repoCatalog as vr, lspUses as vt, ensureAllPushHooks as w, swr as wi, activityOf as wn, forgetToken as wr, allServers as wt, syncAgentsMd as x, git as xi, cleanSummary as xn, addHost as xr, stopAllServers as xt, setWorkspaceStatus as y, ensureAllCacheConfig as yi, readCache as yn, repoDefaultBranch as yr, lspWarm as yt, killSession as z, onFinished as zn, preferredAgent as zr, logoutGithub as zt };
|