@dylanpiercey/work 0.2.54 → 0.2.55
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 +153 -18
- package/dist/{_BMGWiQox.js → _CKxRXoHK.js} +73 -73
- package/dist/_CVNGN2QO.js +2 -0
- package/dist/{_DVgQzQmj.js → _CZ4mgOdb.js} +203 -44
- package/dist/{_CIYlzn8G.js → _Cb_JPQ7K.js} +235 -55
- package/dist/_hjIYs3Gy.js +2 -0
- package/dist/index.mjs +1358 -1208
- package/dist/public/assets/{_Ds7XpQ2s.js → _0YT2d3LY.js} +1 -1
- package/dist/public/assets/_0YT2d3LY.js.br +0 -0
- package/dist/public/assets/{_BxhzQr-y.js → _0rKvhqMi.js} +1 -1
- package/dist/public/assets/_0rKvhqMi.js.br +0 -0
- package/dist/public/assets/_5PI2fZS8.js +1 -0
- package/dist/public/assets/_72zzTyhJ.js +1 -0
- package/dist/public/assets/_91-k5tQx.js +1 -0
- package/dist/public/assets/{_CxQ8r0TT.js → _AIdFuyL9.js} +1 -1
- package/dist/public/assets/_AIdFuyL9.js.br +0 -0
- package/dist/public/assets/{_BLiKHJwt.js → _AtwdfMkh.js} +1 -1
- package/dist/public/assets/_AtwdfMkh.js.br +0 -0
- package/dist/public/assets/_B1qplI2K.js +1 -0
- package/dist/public/assets/_B29W737t.js +1 -0
- package/dist/public/assets/{_1UBL8Blo.js → _B56DMc1H.js} +1 -1
- package/dist/public/assets/_B56DMc1H.js.br +0 -0
- package/dist/public/assets/_B8Bw484t.js +1 -0
- package/dist/public/assets/{_BfgSGto2.js → _BA2Lowt-.js} +1 -1
- package/dist/public/assets/_BA2Lowt-.js.br +0 -0
- package/dist/public/assets/_BBF2mdRO.js +1 -0
- package/dist/public/assets/{_Do7Tz6Oq.js → _BDCDGYHw.js} +1 -1
- package/dist/public/assets/_BDR1eJ6l.js +1 -0
- package/dist/public/assets/_BDppKLVj.js +1 -0
- package/dist/public/assets/{_CKVcq8YZ.js → _BFAY4fG9.js} +1 -1
- package/dist/public/assets/_BFAY4fG9.js.br +0 -0
- package/dist/public/assets/{_3jsnTS30.js → _BGn8HXYq.js} +1 -1
- package/dist/public/assets/_BGn8HXYq.js.br +0 -0
- package/dist/public/assets/{_DxXKHoN2.js → _BJ3_jYoD.js} +1 -1
- package/dist/public/assets/_BJ3_jYoD.js.br +0 -0
- package/dist/public/assets/_BJqpx-Y1.js +1 -0
- package/dist/public/assets/{_CNsY6BDJ.js → _BOQ3PwKZ.js} +1 -1
- package/dist/public/assets/_BOQ3PwKZ.js.br +0 -0
- package/dist/public/assets/{_DFev6DeB.js → _BOXau4gS.js} +1 -1
- package/dist/public/assets/_BOXau4gS.js.br +0 -0
- package/dist/public/assets/{_DTWK6q1Z.js → _BPbX8cFz.js} +1 -1
- package/dist/public/assets/_BPbX8cFz.js.br +0 -0
- package/dist/public/assets/{_C_bdLAyM.js → _BT2Sj_YW.js} +4 -4
- package/dist/public/assets/_BT2Sj_YW.js.br +0 -0
- package/dist/public/assets/_BUvcY7QT.js +1 -0
- package/dist/public/assets/_BVeS3UXr.js +1 -0
- package/dist/public/assets/{_D4XmHQ2R.js → _BYO4bphw.js} +1 -1
- package/dist/public/assets/_BYO4bphw.js.br +0 -0
- package/dist/public/assets/_BYYFg9LD.js +1 -0
- package/dist/public/assets/{_C796ASSx.js → _BZmB54mR.js} +1 -1
- package/dist/public/assets/_BZmB54mR.js.br +0 -0
- package/dist/public/assets/{_Dsw3Gg6v.js → _B_WzjbZc.js} +1 -1
- package/dist/public/assets/_B_WzjbZc.js.br +0 -0
- package/dist/public/assets/{_D3AOk4P-.js → _B_mZh-m9.js} +1 -1
- package/dist/public/assets/_B_mZh-m9.js.br +0 -0
- package/dist/public/assets/_Bawb2dbh.js +1 -0
- package/dist/public/assets/{_B_OBU5Xy.js → _BcWvsmRe.js} +3 -3
- package/dist/public/assets/_BcWvsmRe.js.br +0 -0
- package/dist/public/assets/{_D7uaThi9.js → _BeA1nKaN.js} +1 -1
- package/dist/public/assets/_BeA1nKaN.js.br +0 -0
- package/dist/public/assets/{_D8GEKPIW.js → _BeZ7pjQV.js} +1 -1
- package/dist/public/assets/_BeZ7pjQV.js.br +0 -0
- package/dist/public/assets/{_DmC7G6x5.js → _BgV7K2cf.js} +1 -1
- package/dist/public/assets/_BgV7K2cf.js.br +0 -0
- package/dist/public/assets/{_4Chw3SUK.js → _BgtzrIGU.js} +1 -1
- package/dist/public/assets/_BgtzrIGU.js.br +0 -0
- package/dist/public/assets/{_DjhlvY8c.js → _BiNobkT0.js} +1 -1
- package/dist/public/assets/_BiNobkT0.js.br +0 -0
- package/dist/public/assets/_BihgYQ-n.js +1 -0
- package/dist/public/assets/{_CWtANOEx.js → _BjTM0FyT.js} +1 -1
- package/dist/public/assets/_BjTM0FyT.js.br +0 -0
- package/dist/public/assets/{_QPf8MR9W.js → _Bjib9M1A.js} +1 -1
- package/dist/public/assets/_Bjib9M1A.js.br +0 -0
- package/dist/public/assets/_BkhLTI27.js +1 -0
- package/dist/public/assets/{_DCeYSMTF.js → _BmaXli3m.js} +1 -1
- package/dist/public/assets/_BmaXli3m.js.br +0 -0
- package/dist/public/assets/{_C4uiVwFM.js → _BmwvMhWC.js} +1 -1
- package/dist/public/assets/_BmwvMhWC.js.br +0 -0
- package/dist/public/assets/{_CWxDkun5.js → _Bo0K9EaI.js} +1 -1
- package/dist/public/assets/_Bo0K9EaI.js.br +0 -0
- package/dist/public/assets/{_njdpMxcd.js → _BqTF3ARG.js} +1 -1
- package/dist/public/assets/_BqTF3ARG.js.br +0 -0
- package/dist/public/assets/_BrMbTp16.js +1 -0
- package/dist/public/assets/{_C6szx-Xv.js → _BsaOdWyz.js} +1 -1
- package/dist/public/assets/_BsaOdWyz.js.br +0 -0
- package/dist/public/assets/_Bt-nevYL.js +1 -0
- package/dist/public/assets/{_D9o016tn.js → _BtCTUxzJ.js} +1 -1
- package/dist/public/assets/_BtCTUxzJ.js.br +0 -0
- package/dist/public/assets/{_0xB6Qfvl.js → _BvtRBlS4.js} +1 -1
- package/dist/public/assets/_BvtRBlS4.js.br +0 -0
- package/dist/public/assets/_C0OkE91l.js +1 -0
- package/dist/public/assets/{_aQM6-16e.js → _C0Qul9-A.js} +5 -5
- package/dist/public/assets/_C0Qul9-A.js.br +0 -0
- package/dist/public/assets/_C0rT0pkF.js +1 -0
- package/dist/public/assets/_C3CmAkGd.js +1 -0
- package/dist/public/assets/{_ZSYtUtmc.js → _C3CvDqAU.js} +1 -1
- package/dist/public/assets/_C3CvDqAU.js.br +0 -0
- package/dist/public/assets/{_O9eylexG.js → _C3JqzX6h.js} +1 -1
- package/dist/public/assets/_C3JqzX6h.js.br +0 -0
- package/dist/public/assets/{_DebL6vHW.js → _C4ANqjUO.js} +1 -1
- package/dist/public/assets/_C4ANqjUO.js.br +0 -0
- package/dist/public/assets/_C5DH9oOf.js +1 -0
- package/dist/public/assets/_C5sFdYe9.js +1 -0
- package/dist/public/assets/{_lQXNw9LH.js → _C74hoXSg.js} +1 -1
- package/dist/public/assets/_C74hoXSg.js.br +0 -0
- package/dist/public/assets/_CCTo-C_5.js +1 -0
- package/dist/public/assets/_CDcdmiKC.js +1 -0
- package/dist/public/assets/_CDqJPzG_.js +1 -0
- package/dist/public/assets/{_o8XCpW2Q.js → _CH4FVzly.js} +1 -1
- package/dist/public/assets/_CH4FVzly.js.br +0 -0
- package/dist/public/assets/_CHRtfQm8.js +1 -0
- package/dist/public/assets/_CHnN1OUE.js +1 -0
- package/dist/public/assets/_CKLCZ7qS.js +1 -0
- package/dist/public/assets/{_zvNnoRaL.js → _CMZsgNPc.js} +1 -1
- package/dist/public/assets/_CMZsgNPc.js.br +0 -0
- package/dist/public/assets/_CNbdL75e.js +1 -0
- package/dist/public/assets/_CQsxBQYp.js +1 -0
- package/dist/public/assets/{_YuiZZukx.js → _CSSUf_cF.js} +1 -1
- package/dist/public/assets/_CSSUf_cF.js.br +0 -0
- package/dist/public/assets/_CV0JELaI.js +1 -0
- package/dist/public/assets/_CVcEXbq2.js +1 -0
- package/dist/public/assets/_CY7yLV4X.js +1 -0
- package/dist/public/assets/{_DKkD3kK6.js → _CYtI3ZUO.js} +1 -1
- package/dist/public/assets/_CYtI3ZUO.js.br +0 -0
- package/dist/public/assets/_CZ0oEQzb.js +1 -0
- package/dist/public/assets/_CZeCHesq.js +1 -0
- package/dist/public/assets/_CZei_-4z.js +1 -0
- package/dist/public/assets/{_DFghbGGx.js → _CcWLzdOn.js} +1 -1
- package/dist/public/assets/_CcWLzdOn.js.br +0 -0
- package/dist/public/assets/{_BOc2yJeY.js → _Ccwh6_69.js} +8 -8
- package/dist/public/assets/_Ccwh6_69.js.br +0 -0
- package/dist/public/assets/{_CbULVNOV.js → _CdmLszaF.js} +1 -1
- package/dist/public/assets/_CdmLszaF.js.br +0 -0
- package/dist/public/assets/_CdvRIoSW.js +1 -0
- package/dist/public/assets/{_D6ED5XaS.js → _CeWEms2G.js} +1 -1
- package/dist/public/assets/{_D1sVJ4UV.js → _CkYsst7o.js} +1 -1
- package/dist/public/assets/_CkYsst7o.js.br +0 -0
- package/dist/public/assets/{_Dw0xtqIq.js → _ClTXG9so.js} +1 -1
- package/dist/public/assets/_ClUpRbMG.js +1 -0
- package/dist/public/assets/{_bI_6NeNS.js → _ClapXxZl.js} +1 -1
- package/dist/public/assets/_ClapXxZl.js.br +0 -0
- package/dist/public/assets/{_Ajmopnqf.js → _CoaJtMCC.js} +1 -1
- package/dist/public/assets/_CoaJtMCC.js.br +0 -0
- package/dist/public/assets/_Coqwh06x.js +1 -0
- package/dist/public/assets/{_xvkcQ3Ao.js → _CqCLnBE3.js} +1 -1
- package/dist/public/assets/_CqCLnBE3.js.br +0 -0
- package/dist/public/assets/{_BMAyDlN4.js → _Crf1JP7F.js} +1 -1
- package/dist/public/assets/_Crf1JP7F.js.br +0 -0
- package/dist/public/assets/{_BhC5jX70.js → _CruGUeWu.js} +1 -1
- package/dist/public/assets/_CruGUeWu.js.br +0 -0
- package/dist/public/assets/_CvBNrX9c.js +1 -0
- package/dist/public/assets/{_YQkOx7r-.js → _CvpfgyZE.js} +1 -1
- package/dist/public/assets/_CvpfgyZE.js.br +0 -0
- package/dist/public/assets/{_bMGBscNR.js → _CxgPcY1B.js} +1 -1
- package/dist/public/assets/_CxgPcY1B.js.br +0 -0
- package/dist/public/assets/{_CtBJmjtk.js → _D-oIq8BZ.js} +1 -1
- package/dist/public/assets/_D-oIq8BZ.js.br +0 -0
- package/dist/public/assets/_D0H5I5m4.js +1 -0
- package/dist/public/assets/{_YCyDgobZ.js → _D0HnI6ug.js} +1 -1
- package/dist/public/assets/_D0HnI6ug.js.br +0 -0
- package/dist/public/assets/_D3TaXLz8.js +1 -0
- package/dist/public/assets/_D3TqQSka.js +1 -0
- package/dist/public/assets/_D4ZY_O8p.js +1 -0
- package/dist/public/assets/{_lqfxMh-e.js → _D4icZZux.js} +1 -1
- package/dist/public/assets/_D4icZZux.js.br +0 -0
- package/dist/public/assets/{_4cBA3aLL.js → _D4tgqiIB.js} +1 -1
- package/dist/public/assets/_D4tgqiIB.js.br +0 -0
- package/dist/public/assets/{_X4pPPdHd.js → _D6OAuof8.js} +1 -1
- package/dist/public/assets/_D7IayTpp.js +1 -0
- package/dist/public/assets/{_DiDr51vc.js → _D7UV9Wir.js} +1 -1
- package/dist/public/assets/_D7UV9Wir.js.br +0 -0
- package/dist/public/assets/{_ZBkRztCR.js → _D7siXaWH.js} +1 -1
- package/dist/public/assets/_D7siXaWH.js.br +0 -0
- package/dist/public/assets/{_DPTpk-3g.js → _D8e-tVLG.js} +1 -1
- package/dist/public/assets/_D8e-tVLG.js.br +0 -0
- package/dist/public/assets/{_C_cTX6K5.js → _D9zKRLBR.js} +1 -1
- package/dist/public/assets/_D9zKRLBR.js.br +0 -0
- package/dist/public/assets/{_lyuJBboR.js → _DBcnZRAl.js} +1 -1
- package/dist/public/assets/_DBcnZRAl.js.br +0 -0
- package/dist/public/assets/{_CZBAPtUq.js → _DBv6A4ZA.js} +1 -1
- package/dist/public/assets/_DBv6A4ZA.js.br +0 -0
- package/dist/public/assets/{_X-h6bvK5.js → _DChdFXSz.js} +1 -1
- package/dist/public/assets/_DChdFXSz.js.br +0 -0
- package/dist/public/assets/{_CRj3MYVS.js → _DEOJwc9o.js} +1 -1
- package/dist/public/assets/_DEOJwc9o.js.br +0 -0
- package/dist/public/assets/_DEUO3A77.js +1 -0
- package/dist/public/assets/_DEto2yAG.js +1 -0
- package/dist/public/assets/_DF4cXNDT.js +1 -0
- package/dist/public/assets/{_Dx9kDs0y.js → _DHhfMQv0.js} +1 -1
- package/dist/public/assets/_DHhfMQv0.js.br +0 -0
- package/dist/public/assets/{_BgFIHM3O.js → _DJWtiudl.js} +1 -1
- package/dist/public/assets/_DJWtiudl.js.br +0 -0
- package/dist/public/assets/{_CD8Nrb8d.js → _DK7tFAuR.js} +1 -1
- package/dist/public/assets/_DK7tFAuR.js.br +0 -0
- package/dist/public/assets/_DLLxBxXt.js +1 -0
- package/dist/public/assets/_DLw2Ql6h.js +1 -0
- package/dist/public/assets/_DMAM82ur.js +1 -0
- package/dist/public/assets/_DMRQxpWh.js +1 -0
- package/dist/public/assets/{_CwE88QoM.js → _DN8cYyMA.js} +1 -1
- package/dist/public/assets/_DN8cYyMA.js.br +0 -0
- package/dist/public/assets/_DPXtZlgx.js +1 -0
- package/dist/public/assets/{_BO0nbCV_.js → _DRe6yj8o.js} +1 -1
- package/dist/public/assets/_DRe6yj8o.js.br +0 -0
- package/dist/public/assets/_DTRwgUDz.js +1 -0
- package/dist/public/assets/_DXKf95xT.js +1 -0
- package/dist/public/assets/{_KtOzSSXc.js → _DXTQvf2X.js} +1 -1
- package/dist/public/assets/_DYLeu8Yn.js +1 -0
- package/dist/public/assets/{_CoSTwSzR.js → _DYcJRv1v.js} +1 -1
- package/dist/public/assets/_DYcJRv1v.js.br +0 -0
- package/dist/public/assets/{_CbjsWXSs.js → _D_0P73tR.js} +1 -1
- package/dist/public/assets/_D_0P73tR.js.br +0 -0
- package/dist/public/assets/{_BdGZA-Tg.js → _Da4ArfnL.js} +1 -1
- package/dist/public/assets/_Da4ArfnL.js.br +0 -0
- package/dist/public/assets/_Da6uZcpe.js +1 -0
- package/dist/public/assets/_Dd0Ly8u1.js +1 -0
- package/dist/public/assets/_DdUtrYLB.js +1 -0
- package/dist/public/assets/_DeEl87FQ.js +1 -0
- package/dist/public/assets/{_DkjgfAMw.js → _DeSxIIXB.js} +1 -1
- package/dist/public/assets/_DeSxIIXB.js.br +0 -0
- package/dist/public/assets/_DewfgUtc.js +1 -0
- package/dist/public/assets/_DexEfCG6.js +1 -0
- package/dist/public/assets/{_6fjReu4B.js → _Df2TxuvS.js} +1 -1
- package/dist/public/assets/_Df2TxuvS.js.br +0 -0
- package/dist/public/assets/{_D5V24AEc.js → _DjOV2LK6.js} +2 -2
- package/dist/public/assets/_DjOV2LK6.js.br +0 -0
- package/dist/public/assets/{_1KW-EquU.js → _DkyXsbiQ.js} +2 -2
- package/dist/public/assets/_DkyXsbiQ.js.br +0 -0
- package/dist/public/assets/_DlOMVv-w.js +1 -0
- package/dist/public/assets/_DmFwT38J.js +1 -0
- package/dist/public/assets/{_CzA4qpHl.js → _DmpEhYLB.js} +1 -1
- package/dist/public/assets/_DmpEhYLB.js.br +0 -0
- package/dist/public/assets/{_CrTzNnuE.js → _Dq3-ZF2Z.js} +1 -1
- package/dist/public/assets/_Dq3-ZF2Z.js.br +0 -0
- package/dist/public/assets/_DqqEHIEx.js +1 -0
- package/dist/public/assets/{_ClfU_RBW.js → _Duitagee.js} +1 -1
- package/dist/public/assets/_Duitagee.js.br +0 -0
- package/dist/public/assets/_DvYVra8w.js +1 -0
- package/dist/public/assets/_DwEFyNc7.js +1 -0
- package/dist/public/assets/{_B55z7yQD.js → _Dwea1Mf0.js} +1 -1
- package/dist/public/assets/_Dwea1Mf0.js.br +0 -0
- package/dist/public/assets/{_n6qGwuUU.js → _F19-LHbi.js} +1 -1
- package/dist/public/assets/_F19-LHbi.js.br +0 -0
- package/dist/public/assets/_Fkix9A0t.js +1 -0
- package/dist/public/assets/{_Ds5Zoi7V.js → _I_2m9jez.js} +1 -1
- package/dist/public/assets/_I_2m9jez.js.br +0 -0
- package/dist/public/assets/{_BPs6R-h2.js → _JPzuLvxx.js} +1 -1
- package/dist/public/assets/_JPzuLvxx.js.br +0 -0
- package/dist/public/assets/_MEOVRTxh.js +1 -0
- package/dist/public/assets/{_BQ5zlTNT.js → _NCyU2X3g.js} +1 -1
- package/dist/public/assets/_NCyU2X3g.js.br +0 -0
- package/dist/public/assets/_OXZnsLN0.js +1 -0
- package/dist/public/assets/_Tjc2w7pG.js +1 -0
- package/dist/public/assets/_Un6ZS8VK.js +1 -0
- package/dist/public/assets/{_DYhReWPU.js → _VlEKRWlm.js} +1 -1
- package/dist/public/assets/_VlEKRWlm.js.br +0 -0
- package/dist/public/assets/{_KsUb02iK.js → _YShYV2y4.js} +1 -1
- package/dist/public/assets/_YShYV2y4.js.br +0 -0
- package/dist/public/assets/_ZKijEvNU.js +1 -0
- package/dist/public/assets/_ZWkymwZ8.js +1 -0
- package/dist/public/assets/_bnPm10fX.js +1 -0
- package/dist/public/assets/{_BTyZY2Im.js → _cH--Ry2T.js} +1 -1
- package/dist/public/assets/_cH--Ry2T.js.br +0 -0
- package/dist/public/assets/_dULwd-83.js +1 -0
- package/dist/public/assets/{_BR4NeSOQ.js → _fb-cSkNg.js} +1 -1
- package/dist/public/assets/_fb-cSkNg.js.br +0 -0
- package/dist/public/assets/{_DELJhV-e.js → _gjXKiPz2.js} +1 -1
- package/dist/public/assets/_gjXKiPz2.js.br +0 -0
- package/dist/public/assets/_hZISiIh0.js +1 -0
- package/dist/public/assets/_j0MbYrcw.js +1 -0
- package/dist/public/assets/{_D0zmE4QK.js → _mg_8sHU7.js} +1 -1
- package/dist/public/assets/_mg_8sHU7.js.br +0 -0
- package/dist/public/assets/{_DKv4MVsp.js → _nif0UYC1.js} +1 -1
- package/dist/public/assets/_nif0UYC1.js.br +0 -0
- package/dist/public/assets/{_BJD98CaA.js → _ocpKhGmH.js} +1 -1
- package/dist/public/assets/_ocpKhGmH.js.br +0 -0
- package/dist/public/assets/{_BwGwCRhb.js → _qthymfEm.js} +1 -1
- package/dist/public/assets/{_DhvdrpwZ.js → _rlSb3jYt.js} +2 -2
- package/dist/public/assets/_rlSb3jYt.js.br +0 -0
- package/dist/public/assets/{_BWgzNbJw.js → _thTd3DoV.js} +1 -1
- package/dist/public/assets/_thTd3DoV.js.br +0 -0
- package/dist/public/assets/_yTQokBA3.js +1 -0
- package/dist/public/assets/{_4b_QDRmX.js → _yvNxTzJ_.js} +1 -1
- package/dist/public/assets/_yvNxTzJ_.js.br +0 -0
- package/dist/public/assets/files-view-CWdlTJZL.js +2 -0
- package/dist/public/assets/manage-workspace-BvB-DIwQ.js +2 -0
- package/dist/public/assets/new-bAfr06Ym.js +1 -0
- package/dist/public/assets/new-workspace-BGNyC8BU.js +2 -0
- package/dist/public/assets/review-view-Cnv9wu31.js +2 -0
- package/dist/public/assets/settings-bAfr06Ym.js +1 -0
- package/dist/public/assets/settings-page-DpFc3exI.js +2 -0
- package/dist/public/assets/{styles-DeJ_EPgo.css → styles-DAX6ERBR.css} +1 -1
- package/dist/public/assets/styles-DAX6ERBR.css.br +0 -0
- package/dist/public/assets/w-bAfr06Ym.js +1 -0
- package/dist/public/assets/w._-B0qk5BkH.js +1 -0
- package/dist/public/assets/w._-B2U79M4Z.js +1 -0
- package/dist/public/assets/w._-bAfr06Ym.js +1 -0
- package/package.json +1 -1
- package/dist/_B4B_SliZ.js +0 -2
- package/dist/_D-u1Rg6e.js +0 -2
- package/dist/public/assets/_0xB6Qfvl.js.br +0 -0
- package/dist/public/assets/_1AWYVlIF.js +0 -1
- package/dist/public/assets/_1KW-EquU.js.br +0 -0
- package/dist/public/assets/_1UBL8Blo.js.br +0 -0
- package/dist/public/assets/_3jsnTS30.js.br +0 -0
- package/dist/public/assets/_4Chw3SUK.js.br +0 -0
- package/dist/public/assets/_4L5fewuf.js +0 -1
- package/dist/public/assets/_4b_QDRmX.js.br +0 -0
- package/dist/public/assets/_4cBA3aLL.js.br +0 -0
- package/dist/public/assets/_6YevTPvT.js +0 -1
- package/dist/public/assets/_6fjReu4B.js.br +0 -0
- package/dist/public/assets/_7Tqrc-x8.js +0 -1
- package/dist/public/assets/_8JGBzRnV.js +0 -1
- package/dist/public/assets/_Ajmopnqf.js.br +0 -0
- package/dist/public/assets/_B15DimJn.js +0 -1
- package/dist/public/assets/_B55z7yQD.js.br +0 -0
- package/dist/public/assets/_B8O3dzdM.js +0 -1
- package/dist/public/assets/_B8bliE6m.js +0 -1
- package/dist/public/assets/_B9t7aOe8.js +0 -1
- package/dist/public/assets/_BAAg38Z9.js +0 -1
- package/dist/public/assets/_BBLvmOFm.js +0 -1
- package/dist/public/assets/_BBXaiBi0.js +0 -1
- package/dist/public/assets/_BBeCeS1U.js +0 -1
- package/dist/public/assets/_BGCRyWaJ.js +0 -1
- package/dist/public/assets/_BJD98CaA.js.br +0 -0
- package/dist/public/assets/_BLiKHJwt.js.br +0 -0
- package/dist/public/assets/_BM1QuzcG.js +0 -1
- package/dist/public/assets/_BMAyDlN4.js.br +0 -0
- package/dist/public/assets/_BNoiBQZ1.js +0 -1
- package/dist/public/assets/_BO0nbCV_.js.br +0 -0
- package/dist/public/assets/_BOc2yJeY.js.br +0 -0
- package/dist/public/assets/_BPs6R-h2.js.br +0 -0
- package/dist/public/assets/_BQ5zlTNT.js.br +0 -0
- package/dist/public/assets/_BR4NeSOQ.js.br +0 -0
- package/dist/public/assets/_BTyZY2Im.js.br +0 -0
- package/dist/public/assets/_BUYU5TdH.js +0 -1
- package/dist/public/assets/_BWgzNbJw.js.br +0 -0
- package/dist/public/assets/_BXvF2be4.js +0 -1
- package/dist/public/assets/_BYGFME6e.js +0 -1
- package/dist/public/assets/_B_OBU5Xy.js.br +0 -0
- package/dist/public/assets/_Bam7zO0D.js +0 -1
- package/dist/public/assets/_BdGZA-Tg.js.br +0 -0
- package/dist/public/assets/_Be4wypU3.js +0 -1
- package/dist/public/assets/_BfgSGto2.js.br +0 -0
- package/dist/public/assets/_BgFIHM3O.js.br +0 -0
- package/dist/public/assets/_BhC5jX70.js.br +0 -0
- package/dist/public/assets/_Bj9PXi5i.js +0 -1
- package/dist/public/assets/_Bk0LSgL5.js +0 -1
- package/dist/public/assets/_BlAodYQI.js +0 -1
- package/dist/public/assets/_BsFs4ABN.js +0 -1
- package/dist/public/assets/_Bt1A_OH1.js +0 -1
- package/dist/public/assets/_BtXzICXK.js +0 -1
- package/dist/public/assets/_Bw_8p3NH.js +0 -1
- package/dist/public/assets/_BxhzQr-y.js.br +0 -0
- package/dist/public/assets/_C4uiVwFM.js.br +0 -0
- package/dist/public/assets/_C634TSjR.js +0 -1
- package/dist/public/assets/_C6szx-Xv.js.br +0 -0
- package/dist/public/assets/_C796ASSx.js.br +0 -0
- package/dist/public/assets/_C7lSMIyl.js +0 -1
- package/dist/public/assets/_CB4R3Lew.js +0 -1
- package/dist/public/assets/_CCAk1Yk7.js +0 -1
- package/dist/public/assets/_CD8Nrb8d.js.br +0 -0
- package/dist/public/assets/_CH2u3847.js +0 -1
- package/dist/public/assets/_CKVcq8YZ.js.br +0 -0
- package/dist/public/assets/_CNNhXpi9.js +0 -1
- package/dist/public/assets/_CNsY6BDJ.js.br +0 -0
- package/dist/public/assets/_CPmiqpUc.js +0 -1
- package/dist/public/assets/_CPyBbxga.js +0 -1
- package/dist/public/assets/_CR69ggQQ.js +0 -1
- package/dist/public/assets/_CRj3MYVS.js.br +0 -0
- package/dist/public/assets/_CRjryxoq.js +0 -1
- package/dist/public/assets/_CTRTMFdY.js +0 -1
- package/dist/public/assets/_CVlQVlcL.js +0 -1
- package/dist/public/assets/_CWtANOEx.js.br +0 -0
- package/dist/public/assets/_CWxDkun5.js.br +0 -0
- package/dist/public/assets/_CYibmyEC.js +0 -1
- package/dist/public/assets/_CZBAPtUq.js.br +0 -0
- package/dist/public/assets/_C_bdLAyM.js.br +0 -0
- package/dist/public/assets/_C_cTX6K5.js.br +0 -0
- package/dist/public/assets/_C_uiLJ_s.js +0 -1
- package/dist/public/assets/_CbULVNOV.js.br +0 -0
- package/dist/public/assets/_CbjsWXSs.js.br +0 -0
- package/dist/public/assets/_ChOBBMhO.js +0 -1
- package/dist/public/assets/_ChoyIZsA.js +0 -1
- package/dist/public/assets/_ClfU_RBW.js.br +0 -0
- package/dist/public/assets/_CljSwcLM.js +0 -1
- package/dist/public/assets/_CoSTwSzR.js.br +0 -0
- package/dist/public/assets/_CobQflXi.js +0 -1
- package/dist/public/assets/_CqT6w2tI.js +0 -1
- package/dist/public/assets/_Cqk8ypbB.js +0 -1
- package/dist/public/assets/_Cr8rdgii.js +0 -1
- package/dist/public/assets/_CrTzNnuE.js.br +0 -0
- package/dist/public/assets/_Cs4d3nAD.js +0 -1
- package/dist/public/assets/_CtBJmjtk.js.br +0 -0
- package/dist/public/assets/_CwE88QoM.js.br +0 -0
- package/dist/public/assets/_CxQ8r0TT.js.br +0 -0
- package/dist/public/assets/_CzA4qpHl.js.br +0 -0
- package/dist/public/assets/_D0aWP-Wd.js +0 -1
- package/dist/public/assets/_D0zmE4QK.js.br +0 -0
- package/dist/public/assets/_D1sVJ4UV.js.br +0 -0
- package/dist/public/assets/_D3AOk4P-.js.br +0 -0
- package/dist/public/assets/_D4XmHQ2R.js.br +0 -0
- package/dist/public/assets/_D5V24AEc.js.br +0 -0
- package/dist/public/assets/_D7uaThi9.js.br +0 -0
- package/dist/public/assets/_D85Ds4wQ.js +0 -1
- package/dist/public/assets/_D8GEKPIW.js.br +0 -0
- package/dist/public/assets/_D9o016tn.js.br +0 -0
- package/dist/public/assets/_DCY180mQ.js +0 -1
- package/dist/public/assets/_DCeYSMTF.js.br +0 -0
- package/dist/public/assets/_DELJhV-e.js.br +0 -0
- package/dist/public/assets/_DFev6DeB.js.br +0 -0
- package/dist/public/assets/_DFghbGGx.js.br +0 -0
- package/dist/public/assets/_DIVL5h9e.js +0 -1
- package/dist/public/assets/_DKkD3kK6.js.br +0 -0
- package/dist/public/assets/_DKv4MVsp.js.br +0 -0
- package/dist/public/assets/_DPTpk-3g.js.br +0 -0
- package/dist/public/assets/_DTWK6q1Z.js.br +0 -0
- package/dist/public/assets/_DWqzDIco.js +0 -1
- package/dist/public/assets/_DXoQPzDh.js +0 -1
- package/dist/public/assets/_DYhReWPU.js.br +0 -0
- package/dist/public/assets/_DebL6vHW.js.br +0 -0
- package/dist/public/assets/_Dek6jh0Q.js +0 -1
- package/dist/public/assets/_Dfjl0U2C.js +0 -1
- package/dist/public/assets/_Dhi-1okl.js +0 -1
- package/dist/public/assets/_DhvdrpwZ.js.br +0 -0
- package/dist/public/assets/_DhwiadTw.js +0 -1
- package/dist/public/assets/_Di61VfrK.js +0 -1
- package/dist/public/assets/_DiDr51vc.js.br +0 -0
- package/dist/public/assets/_DjhlvY8c.js.br +0 -0
- package/dist/public/assets/_DkjgfAMw.js.br +0 -0
- package/dist/public/assets/_DksSXpIC.js +0 -1
- package/dist/public/assets/_Dlp7DQeA.js +0 -1
- package/dist/public/assets/_DmC7G6x5.js.br +0 -0
- package/dist/public/assets/_DpA4edsu.js +0 -1
- package/dist/public/assets/_DqiuYjwJ.js +0 -1
- package/dist/public/assets/_Ds5Zoi7V.js.br +0 -0
- package/dist/public/assets/_Ds7XpQ2s.js.br +0 -0
- package/dist/public/assets/_Dsw3Gg6v.js.br +0 -0
- package/dist/public/assets/_DugZXnwt.js +0 -1
- package/dist/public/assets/_Dv6o5rqA.js +0 -1
- package/dist/public/assets/_Dx9kDs0y.js.br +0 -0
- package/dist/public/assets/_DxXKHoN2.js.br +0 -0
- package/dist/public/assets/_Dyr0tq3O.js +0 -1
- package/dist/public/assets/_KsUb02iK.js.br +0 -0
- package/dist/public/assets/_LC3rHeWo.js +0 -1
- package/dist/public/assets/_O9eylexG.js.br +0 -0
- package/dist/public/assets/_QPf8MR9W.js.br +0 -0
- package/dist/public/assets/_TiQn20cR.js +0 -1
- package/dist/public/assets/_WPa7Ehhz.js +0 -1
- package/dist/public/assets/_WrzU1MoL.js +0 -1
- package/dist/public/assets/_X-h6bvK5.js.br +0 -0
- package/dist/public/assets/_YCyDgobZ.js.br +0 -0
- package/dist/public/assets/_YQkOx7r-.js.br +0 -0
- package/dist/public/assets/_YuiZZukx.js.br +0 -0
- package/dist/public/assets/_ZBkRztCR.js.br +0 -0
- package/dist/public/assets/_ZSYtUtmc.js.br +0 -0
- package/dist/public/assets/__QucVmnz.js +0 -1
- package/dist/public/assets/_aQM6-16e.js.br +0 -0
- package/dist/public/assets/_bI_6NeNS.js.br +0 -0
- package/dist/public/assets/_bMGBscNR.js.br +0 -0
- package/dist/public/assets/_e7mzpty4.js +0 -1
- package/dist/public/assets/_hxS8j1oZ.js +0 -1
- package/dist/public/assets/_kq-erLpG.js +0 -1
- package/dist/public/assets/_lE-DkEAb.js +0 -1
- package/dist/public/assets/_lQXNw9LH.js.br +0 -0
- package/dist/public/assets/_lqfxMh-e.js.br +0 -0
- package/dist/public/assets/_lyuJBboR.js.br +0 -0
- package/dist/public/assets/_n6qGwuUU.js.br +0 -0
- package/dist/public/assets/_njdpMxcd.js.br +0 -0
- package/dist/public/assets/_o8XCpW2Q.js.br +0 -0
- package/dist/public/assets/_pbfHrItI.js +0 -1
- package/dist/public/assets/_pkvXtuuf.js +0 -1
- package/dist/public/assets/_rIFIsLnZ.js +0 -1
- package/dist/public/assets/_xvkcQ3Ao.js.br +0 -0
- package/dist/public/assets/_zvNnoRaL.js.br +0 -0
- package/dist/public/assets/files-view-CXALmd4H.js +0 -2
- package/dist/public/assets/manage-workspace-BLK6hyjQ.js +0 -2
- package/dist/public/assets/new-CI0cfox3.js +0 -1
- package/dist/public/assets/new-workspace-3Eg9OOn0.js +0 -2
- package/dist/public/assets/review-view-Dem0Sq2B.js +0 -2
- package/dist/public/assets/settings-CI0cfox3.js +0 -1
- package/dist/public/assets/settings-page-DJUotETi.js +0 -2
- package/dist/public/assets/styles-DeJ_EPgo.css.br +0 -0
- package/dist/public/assets/w-CI0cfox3.js +0 -1
- package/dist/public/assets/w._-BEne5Efg.js +0 -1
- package/dist/public/assets/w._-CI0cfox3.js +0 -1
- package/dist/public/assets/w._-QsrO2AIU.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as renameSession,
|
|
1
|
+
import { $ as renameSession, A as closedSession, Dr as agentChoices, E as agentCaller, En as lastTypedAt, Fn as onFinished, Gn as summaryOf, In as onPhaseChange, J as notifySessionsChanged, Jn as turnSince, Kn as turnPhase, L as getSession, Ln as onTurnEnd, Nr as getSetting, Pr as isKnownAgent, Qn as agentLabel, R as interruptSession, Rn as onTurnFailed, U as listPanesWithin, Vn as setExpecting, Xn as agentFamily, Y as onSessionDispose, _n as cleanSummary, bn as activityOf, cn as interruptKeys, di as db, et as reopenSession, fi as get, fn as steerKeys, ii as httpError, it as sendToSession, j as createSession, ln as quotesPastes, nt as restartSession, qn as turnSettling, rt as retireSession, tt as reopenable, ui as all, wn as hookReportedAt, xn as agentPhase, z as killSession, zn as sessionWatched } from "./_Cb_JPQ7K.js";
|
|
2
2
|
//#region src/server/messages.ts
|
|
3
3
|
var team = {
|
|
4
4
|
memberGroup: () => null,
|
|
@@ -39,6 +39,8 @@ var EXCERPT = 40;
|
|
|
39
39
|
/** A pane just started for a message can be missing from a pane list
|
|
40
40
|
* taken a moment before, which is not the session exiting. */
|
|
41
41
|
var START_GRACE_MS = 1e4;
|
|
42
|
+
/** A failure told again only past this, unless it says something new. */
|
|
43
|
+
var FAIL_RETELL_MS = 6e5;
|
|
42
44
|
/** Two agents asking each other in a loop meet this; a conversation does
|
|
43
45
|
* not, since every message is a turn of the agent it goes to. */
|
|
44
46
|
var SEND_WINDOW_MS = 6e5;
|
|
@@ -47,6 +49,12 @@ var sends = /* @__PURE__ */ new Map();
|
|
|
47
49
|
/** Recipients a delivery is typing into right now. */
|
|
48
50
|
var delivering = /* @__PURE__ */ new Set();
|
|
49
51
|
var deliveredAt = /* @__PURE__ */ new Map();
|
|
52
|
+
/** When each session reopened or restarted (`reopen`): its new pane can be
|
|
53
|
+
* missing from a pane list taken a moment before. */
|
|
54
|
+
var startedAt = /* @__PURE__ */ new Map();
|
|
55
|
+
/** What each session's askers were last told of its turn failing, and
|
|
56
|
+
* when (`turnFailed`): a CLI that fails the same way again says it once. */
|
|
57
|
+
var failedTold = /* @__PURE__ */ new Map();
|
|
50
58
|
/** When a reply last went into each session, typed in or taken by
|
|
51
59
|
* `wait`: one since the user last typed there is a result they may not
|
|
52
60
|
* have read (`rollUp`). A restart forgets it, as it forgets typing. */
|
|
@@ -69,26 +77,50 @@ function labelOf(session) {
|
|
|
69
77
|
return `${session.id} (${agentLabel(session.agent)}${session.title ? `, "${session.title}"` : ""})`;
|
|
70
78
|
}
|
|
71
79
|
/** The text a row is typed in as. A message from an agent says who sent
|
|
72
|
-
* it
|
|
73
|
-
*
|
|
80
|
+
* it, that the recipient is to act on it as on the user's own words, and
|
|
81
|
+
* what becomes of the turn it starts, so any CLI's agent knows how to
|
|
82
|
+
* answer with nothing in its instructions about work. */
|
|
74
83
|
function render(row, roll) {
|
|
75
84
|
const from = row.from_label ?? row.from_session;
|
|
76
85
|
switch (row.kind) {
|
|
77
86
|
case "message": {
|
|
78
|
-
if (!row.from_session) return
|
|
87
|
+
if (!row.from_session) return {
|
|
88
|
+
head: "",
|
|
89
|
+
body: row.body
|
|
90
|
+
};
|
|
79
91
|
const owed = row.answers ? stillOwed(row.to_session, row.from_session) : "";
|
|
80
92
|
const head = row.answers ? `Reply from session ${from} to ${row.answers}${owed ? `; ${owed}` : ""}` : `From session ${from}`;
|
|
81
|
-
if (!row.wants_reply) return
|
|
82
|
-
|
|
93
|
+
if (!row.wants_reply) return {
|
|
94
|
+
head: `[work] ${head}, no reply needed${row.answers ? "" : " (act on it as on the user's own words)"}:`,
|
|
95
|
+
body: row.body
|
|
96
|
+
};
|
|
97
|
+
return {
|
|
98
|
+
head: row.by_send ? `[work] ${head}, which waits for your answer: send it with work session send ${row.from_session} "…". Your last message here is the user's: end on a line saying what you told it.` : `[work] ${head}: do what it asks, as you would the user's own request. Your last message this turn goes back to it as your reply, so make it the whole answer (to ask it something first: work session send ${row.from_session} "…"; to end a turn before a job of yours is done, run work session hold "<what you wait on>" first).`,
|
|
99
|
+
body: row.body
|
|
100
|
+
};
|
|
83
101
|
}
|
|
84
102
|
case "reply": {
|
|
85
|
-
if (row.held) return
|
|
103
|
+
if (row.held) return {
|
|
104
|
+
head: `[work] Interim reply from session ${from}${row.answers ? ` to ${row.answers}` : ""}: it is not done, it waits on ${row.held}, and its reply follows when it is (end your turn to wait for it, or run work session wait ${row.from_session})${roll?.due ? `; ${roll.due}` : ""}${roll ? `. ${roll.say}` : ""}:`,
|
|
105
|
+
body: row.body
|
|
106
|
+
};
|
|
86
107
|
const owed = [row.from_session ? stillOwed(row.to_session, row.from_session) : "", roll?.due].filter(Boolean).join("; ");
|
|
87
|
-
return
|
|
108
|
+
return {
|
|
109
|
+
head: `[work] ${row.follows ? `Follow-up from session ${from}${row.answers ? ` on ${row.answers}` : ""}: the last message of a turn it started on its own after its reply of ${clock(row.follows)}` : `Reply from session ${from}${row.answers ? ` to ${row.answers}` : ""}`}${owed ? `; ${owed}` : ""}. ${roll ? `${roll.say}. ` : ""}${followUp(row.from_session ?? "<id>", row.to_session)}:`,
|
|
110
|
+
body: row.body
|
|
111
|
+
};
|
|
88
112
|
}
|
|
89
|
-
case "closed":
|
|
113
|
+
case "closed":
|
|
114
|
+
case "notice": return {
|
|
115
|
+
head: roll ? `[work] ${row.body}${roll.due ? ` ${roll.due[0].toUpperCase()}${roll.due.slice(1)}.` : ""} ${roll.say}.` : `[work] ${row.body}`,
|
|
116
|
+
body: ""
|
|
117
|
+
};
|
|
90
118
|
}
|
|
91
119
|
}
|
|
120
|
+
/** Typed rows as one text: each head over what it carries. */
|
|
121
|
+
function joined(items) {
|
|
122
|
+
return items.map((t) => [t.head, t.body].filter(Boolean).join("\n\n")).join("\n\n");
|
|
123
|
+
}
|
|
92
124
|
/** A moment as a reply names it ("14:05"). */
|
|
93
125
|
function clock(at) {
|
|
94
126
|
return new Date(at).toLocaleTimeString("en-GB", {
|
|
@@ -161,7 +193,7 @@ function followUp(id, asker) {
|
|
|
161
193
|
const send = `To follow up: work session send ${id} "…"`;
|
|
162
194
|
const c = team.closing(id, asker);
|
|
163
195
|
if (!c) return send;
|
|
164
|
-
if (c.closed) return c.reopens ? `${send}, which reopens it on its conversation (it has closed since)` : "It has closed since, and its conversation with it: to follow up, start a new session";
|
|
196
|
+
if (c.closed) return c.reopens ? `${send}, which reopens it on its conversation (it has closed since)` : c.restarts ? `It has closed since: to follow up, \`work session reopen ${id}\` starts it again on its conversation, then send` : "It has closed since, and its conversation with it: to follow up, start a new session";
|
|
165
197
|
return c.reopens ? `${send} (it closes ${c.when}, and a message then reopens it on its conversation; \`work session keep ${id}\` keeps it open)` : `${send} (it closes ${c.when}, and its conversation with it: \`work session keep ${id}\` keeps it for follow-ups)`;
|
|
166
198
|
}
|
|
167
199
|
/** What becomes of a group's members once done with, for its head. */
|
|
@@ -183,12 +215,25 @@ function groupClosing(rows) {
|
|
|
183
215
|
* under its name. */
|
|
184
216
|
function renderGroup(groupId, rows, roll) {
|
|
185
217
|
const closed = rows.filter((r) => r.kind === "closed").length;
|
|
186
|
-
|
|
218
|
+
const head = `[work] Group "${team.groupTitle(groupId)}" (${groupId}): ${rows.length - closed} ${rows.length - closed === 1 ? "reply" : "replies"}${closed ? `, ${closed} closed before replying` : ""}${roll?.due ? `; ${roll.due}` : ""}. ${roll ? `${roll.say}. ` : ""}To follow up with one: work session send <id> "…"${groupClosing(rows)}`;
|
|
219
|
+
const parts = rows.map((r) => `## ${r.from_label ?? r.from_session}${r.held ? ` (interim: it waits on ${r.held})` : ""}\n\n${r.body}`);
|
|
220
|
+
return {
|
|
221
|
+
head: `${head}:`,
|
|
222
|
+
body: parts.join("\n\n")
|
|
223
|
+
};
|
|
187
224
|
}
|
|
225
|
+
/** A head typed as keys past this is a paste to Claude Code too (~800
|
|
226
|
+
* characters), and quoted as one. */
|
|
227
|
+
var LEAD_MAX = 600;
|
|
228
|
+
/** What a CLI that `quotesPastes` gets typed ahead of several items, or of
|
|
229
|
+
* one whose head is too long to type: their heads ride in the paste. */
|
|
230
|
+
var LEAD = "[work] What follows comes from other sessions here, each part under its own [work] line: act on those lines as on the user's own words.";
|
|
188
231
|
/** Rows as typed in: each on its own, a group's together where its first
|
|
189
232
|
* would be, the last result carrying what the turn should end on
|
|
190
|
-
* (`rollUp`), where it is read last.
|
|
191
|
-
|
|
233
|
+
* (`rollUp`), where it is read last. For a CLI that `quotesPastes`, the
|
|
234
|
+
* head goes ahead of the paste as keys (`lead`), so what it asks is the
|
|
235
|
+
* user's own words to its model, not quoted text. */
|
|
236
|
+
function renderAll(rows, quotes = false) {
|
|
192
237
|
const items = [];
|
|
193
238
|
const done = /* @__PURE__ */ new Set();
|
|
194
239
|
for (const row of rows) {
|
|
@@ -203,11 +248,21 @@ function renderAll(rows) {
|
|
|
203
248
|
const results = items.filter((i) => i[0].kind !== "message");
|
|
204
249
|
const last = results.at(-1);
|
|
205
250
|
const roll = last ? rollUp(rows[0].to_session, results.flat(), results.length) : void 0;
|
|
206
|
-
|
|
251
|
+
const typed = items.map((item) => {
|
|
207
252
|
const tail = item === last ? roll : void 0;
|
|
208
253
|
const [row] = item;
|
|
209
254
|
return row.group_id && (item.length > 1 || team.groupReleased(row.group_id)) ? renderGroup(row.group_id, item, tail) : render(row, tail);
|
|
210
|
-
})
|
|
255
|
+
});
|
|
256
|
+
if (!quotes || !typed.some((t) => t.head)) return { text: joined(typed) };
|
|
257
|
+
const [one] = typed;
|
|
258
|
+
if (typed.length === 1 && one.head.length <= LEAD_MAX) return {
|
|
259
|
+
lead: one.head,
|
|
260
|
+
text: one.body && `\n\n${one.body}`
|
|
261
|
+
};
|
|
262
|
+
return {
|
|
263
|
+
lead: LEAD,
|
|
264
|
+
text: `\n\n${joined(typed)}`
|
|
265
|
+
};
|
|
211
266
|
}
|
|
212
267
|
function replyBody(session, message) {
|
|
213
268
|
const tab = `/w/${session.workspace_id}?s=${session.id}`;
|
|
@@ -224,13 +279,49 @@ function senderLabel(from, to) {
|
|
|
224
279
|
return `${labelOf(from)} in workspace ${ws?.name ?? from.workspace_id}`;
|
|
225
280
|
}
|
|
226
281
|
function insert(to, from, kind, body, wantsReply = false, groupId = null, answers = null, urgent = false, bySend = false, follows = null, held = null) {
|
|
227
|
-
|
|
282
|
+
const id = Number(db.prepare(`INSERT INTO session_messages (to_session, from_session, from_label, kind, body, wants_reply, group_id, answers, urgent, by_send, follows, held)
|
|
228
283
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(to, from?.id ?? null, from ? senderLabel(from, to) : null, kind, body, wantsReply ? 1 : 0, groupId, answers, urgent ? 1 : 0, bySend ? 1 : 0, follows, held).lastInsertRowid);
|
|
284
|
+
logInsert(id);
|
|
285
|
+
return id;
|
|
229
286
|
}
|
|
230
|
-
|
|
287
|
+
/** Rows leave the queue once typed in or answered, saying how in the log
|
|
288
|
+
* (`outcome`). */
|
|
289
|
+
function deleteIds(ids, outcome) {
|
|
231
290
|
if (!ids.length) return;
|
|
291
|
+
logDone(ids, outcome);
|
|
232
292
|
db.prepare(`DELETE FROM session_messages WHERE id IN (${ids.map(() => "?").join(",")})`).run(...ids);
|
|
233
293
|
}
|
|
294
|
+
/** How long message_log keeps what went between sessions. */
|
|
295
|
+
var LOG_KEEP = "-7 days";
|
|
296
|
+
var PRUNE_EVERY_MS = 36e5;
|
|
297
|
+
var prunedAt = 0;
|
|
298
|
+
/** A row just queued, as the log keeps it (`work session log`). */
|
|
299
|
+
function logInsert(id) {
|
|
300
|
+
const to = get("SELECT to_session FROM session_messages WHERE id = ?", id);
|
|
301
|
+
const target = to ? getSession(to.to_session) : void 0;
|
|
302
|
+
db.prepare(`INSERT OR REPLACE INTO message_log (id, workspace_id, to_session, to_label, from_session, from_label, kind, body, wants_reply, urgent, created_at)
|
|
303
|
+
SELECT id, ?, to_session, ?, from_session, from_label, kind, body, wants_reply, urgent, created_at FROM session_messages WHERE id = ?`).run(target?.workspace_id ?? null, target ? labelOf(target) : null, id);
|
|
304
|
+
if (Date.now() - prunedAt < PRUNE_EVERY_MS) return;
|
|
305
|
+
prunedAt = Date.now();
|
|
306
|
+
db.prepare(`DELETE FROM message_log WHERE created_at < strftime('%Y-%m-%dT%H:%M:%fZ', 'now', '${LOG_KEEP}')`).run();
|
|
307
|
+
}
|
|
308
|
+
var inIds = (ids) => `(${ids.map(() => "?").join(",")})`;
|
|
309
|
+
/** Rows typed in (`at its prompt`, `into its turn`) or taken by `wait`. */
|
|
310
|
+
function logDelivered(ids, how) {
|
|
311
|
+
if (!ids.length) return;
|
|
312
|
+
db.prepare(`UPDATE message_log SET delivered_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now'), delivered = ?
|
|
313
|
+
WHERE delivered_at IS NULL AND id IN ${inIds(ids)}`).run(how, ...ids);
|
|
314
|
+
}
|
|
315
|
+
function logDone(ids, outcome) {
|
|
316
|
+
if (!ids.length) return;
|
|
317
|
+
db.prepare(`UPDATE message_log SET done_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now'), outcome = ?
|
|
318
|
+
WHERE done_at IS NULL AND id IN ${inIds(ids)}`).run(outcome, ...ids);
|
|
319
|
+
}
|
|
320
|
+
/** What went to or from `session`, or in `workspace`, the latest `limit`,
|
|
321
|
+
* oldest first. */
|
|
322
|
+
function messageLog(of, limit = 50) {
|
|
323
|
+
return ("session" in of ? all("SELECT * FROM message_log WHERE to_session = ? OR from_session = ? ORDER BY id DESC LIMIT ?", of.session, of.session, limit) : all("SELECT * FROM message_log WHERE workspace_id = ? ORDER BY id DESC LIMIT ?", of.workspace, limit)).reverse();
|
|
324
|
+
}
|
|
234
325
|
/** Who a message is still to wake, for agent-state: a session owed a
|
|
235
326
|
* reply, one with something waiting to be typed in (held for its group
|
|
236
327
|
* or not), and a lead whose groups have members yet to answer — queued
|
|
@@ -269,7 +360,8 @@ async function deliver(id) {
|
|
|
269
360
|
if (!rows.length) return {};
|
|
270
361
|
delivering.add(id);
|
|
271
362
|
try {
|
|
272
|
-
|
|
363
|
+
const { lead, text } = renderAll(rows, quotesPastes(getSession(id)?.agent));
|
|
364
|
+
await sendToSession(id, text, void 0, keys, lead);
|
|
273
365
|
} catch (err) {
|
|
274
366
|
return { waits: err.message };
|
|
275
367
|
} finally {
|
|
@@ -279,7 +371,8 @@ async function deliver(id) {
|
|
|
279
371
|
deliveredAt.set(id, Date.now());
|
|
280
372
|
if (rows.some((r) => r.kind !== "message")) repliedAt.set(id, Date.now());
|
|
281
373
|
answered.delete(id);
|
|
282
|
-
|
|
374
|
+
logDelivered(rows.map((r) => r.id), keys ? "into its turn" : "at its prompt");
|
|
375
|
+
deleteIds(rows.filter((r) => !r.wants_reply).map((r) => r.id), "delivered");
|
|
283
376
|
const owed = rows.filter((r) => r.wants_reply).map((r) => r.id);
|
|
284
377
|
if (owed.length) db.prepare(`UPDATE session_messages SET delivered_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
285
378
|
WHERE id IN (${owed.map(() => "?").join(",")})`).run(...owed);
|
|
@@ -331,39 +424,42 @@ function kick() {
|
|
|
331
424
|
* the user's own session's send back (`by_send`), which a send from it
|
|
332
425
|
* to an asker it owes is (`answerBySend`).
|
|
333
426
|
* `opts.now` sends it into the turn under way where its CLI takes one
|
|
334
|
-
* there,
|
|
335
|
-
*
|
|
427
|
+
* there, as one from an agent that wants no reply goes, and
|
|
428
|
+
* `opts.interrupt` stops that turn first (never a wait on the user:
|
|
429
|
+
* theirs is the answer it waits for); with no text, it is the sender's
|
|
430
|
+
* messages already queued for `to` that go so.
|
|
336
431
|
* `opts.member` is a fan-out starting a member (server/team): its group's
|
|
337
432
|
* own caps bound it, not the sender's. */
|
|
338
433
|
async function sendMessage(to, text, opts = {}) {
|
|
339
434
|
const known = getSession(to) ?? closedSession(to);
|
|
340
435
|
if (!known) throw httpError(404, `no session ${to}`);
|
|
436
|
+
if ("how" in known && known.how === "closed") throw httpError(409, `${to} was closed, not for being done, so a message does not reopen it: \`work session reopen ${to}\` starts it again on its own conversation, then send`);
|
|
341
437
|
if (known.agent === "shell") throw httpError(409, `${to} is a shell: a message would run as a command there, so messages go to agent sessions`);
|
|
342
438
|
if (opts.from === to) throw httpError(409, "a session cannot message itself");
|
|
439
|
+
const urgent = !!(opts.now || opts.interrupt);
|
|
440
|
+
if (!text && !urgent) throw httpError(400, "a message needs its text");
|
|
343
441
|
if (text.length > MAX_BODY) throw httpError(413, `a message is at most ${MAX_BODY} characters: write the rest to a file and send its path`);
|
|
344
442
|
const sender = opts.from ? getSession(opts.from) : void 0;
|
|
345
443
|
const from = sender && sender.agent !== "shell" ? sender : null;
|
|
346
444
|
if (!!from && from.workspace_id !== known.workspace_id) {
|
|
347
445
|
if (!(await listPanesWithin(2e3))?.some((p) => p.id === to)) throw httpError(409, `${to} is not running: a message to another workspace goes only to an agent running there`);
|
|
348
446
|
}
|
|
349
|
-
|
|
447
|
+
const queued = text ? [] : all("SELECT * FROM session_messages WHERE to_session = ? AND from_session IS ? AND kind = 'message' AND delivered_at IS NULL ORDER BY id", to, from?.id ?? null);
|
|
448
|
+
if (!text && !queued.length) throw httpError(409, `nothing of yours is queued for ${to}: \`--now\` with no text sends what you queued sooner`);
|
|
449
|
+
if (from && !opts.member && text) admit(from.id);
|
|
350
450
|
const live = getSession(to);
|
|
351
451
|
let target = live;
|
|
352
|
-
if (!target) {
|
|
353
|
-
delivering.add(to);
|
|
354
|
-
try {
|
|
355
|
-
target = await reopenSession(to);
|
|
356
|
-
} finally {
|
|
357
|
-
delivering.delete(to);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
452
|
+
if (!target) target = (await reopen(to, { by: from?.id })).session;
|
|
360
453
|
if (!from && target.parent_id) db.prepare("UPDATE sessions SET keep = 1 WHERE id = ?").run(to);
|
|
361
|
-
const wantsReply = !!from && opts.reply !== false;
|
|
454
|
+
const wantsReply = queued.length ? queued.some((r) => r.wants_reply) : !!from && opts.reply !== false;
|
|
362
455
|
const bySend = wantsReply && !target.parent_id;
|
|
363
|
-
const answered = from ? answerBySend(from, to) : [];
|
|
364
|
-
const ahead = get("SELECT COUNT(*) AS n FROM session_messages WHERE to_session = ? AND delivered_at IS NULL", to)?.n ?? 0;
|
|
365
|
-
|
|
366
|
-
|
|
456
|
+
const answered = from && text ? answerBySend(from, to) : [];
|
|
457
|
+
const ahead = (get("SELECT COUNT(*) AS n FROM session_messages WHERE to_session = ? AND delivered_at IS NULL", to)?.n ?? 0) - queued.length;
|
|
458
|
+
let id;
|
|
459
|
+
if (queued.length) {
|
|
460
|
+
id = queued.at(-1).id;
|
|
461
|
+
for (const table of ["session_messages", "message_log"]) db.prepare(`UPDATE ${table} SET urgent = 1 WHERE id IN ${inIds(queued.map((r) => r.id))}`).run(...queued.map((r) => r.id));
|
|
462
|
+
} else id = insert(to, from, "message", text, wantsReply, null, answered.length ? yours(answered) : null, urgent || !!from && !wantsReply, bySend);
|
|
367
463
|
recompute();
|
|
368
464
|
const interrupted = !!opts.interrupt && !!live && turnPhase(to) === "working" && !delivering.has(to) && await interruptSession(to);
|
|
369
465
|
const sent = await deliver(to);
|
|
@@ -397,16 +493,71 @@ async function sendMessage(to, text, opts = {}) {
|
|
|
397
493
|
/** Its messages this answers (`answerBySend`). */
|
|
398
494
|
answered: answered.length ? yours(answered, "its") : null,
|
|
399
495
|
/** It had closed, and is back on its conversation. */
|
|
400
|
-
reopened: !live
|
|
496
|
+
reopened: !live,
|
|
497
|
+
/** With no text: how many of the sender's queued messages went now. */
|
|
498
|
+
promoted: queued.length
|
|
401
499
|
};
|
|
402
500
|
}
|
|
501
|
+
/** Start `id` again on its own conversation (`work session reopen`, a
|
|
502
|
+
* message to one closed for being done): one closed, its row back
|
|
503
|
+
* (`reopenSession`), under `by` when the session that started it is gone;
|
|
504
|
+
* one running, its CLI restarted (`restartSession`). With `agent`, as
|
|
505
|
+
* another instance of its CLI: one whose account hit its limit goes on as
|
|
506
|
+
* another's. What is queued for it and what it owes stay, for the turn a
|
|
507
|
+
* message starts there to answer. Its row is back before its CLI is: a
|
|
508
|
+
* send meanwhile queues behind this rather than starting the CLI afresh. */
|
|
509
|
+
async function reopen(id, opts = {}) {
|
|
510
|
+
if (delivering.has(id)) throw httpError(409, `${id} is being started or typed into: try again`);
|
|
511
|
+
delivering.add(id);
|
|
512
|
+
try {
|
|
513
|
+
const live = getSession(id);
|
|
514
|
+
if (live) {
|
|
515
|
+
dropHold(id);
|
|
516
|
+
steered.delete(id);
|
|
517
|
+
}
|
|
518
|
+
const session = live ? await restartSession(id, opts.agent) : await reopenSession(id, {
|
|
519
|
+
agent: opts.agent,
|
|
520
|
+
adopt: agentCaller(opts.by)?.id
|
|
521
|
+
});
|
|
522
|
+
failedTold.delete(id);
|
|
523
|
+
startedAt.set(id, Date.now());
|
|
524
|
+
return {
|
|
525
|
+
session,
|
|
526
|
+
restarted: !!live
|
|
527
|
+
};
|
|
528
|
+
} finally {
|
|
529
|
+
delivering.delete(id);
|
|
530
|
+
kick();
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
/** `id`'s turn ended failing (rate limited, signed out) while it owes
|
|
534
|
+
* replies: it sits at its prompt until someone carries it on, and whoever
|
|
535
|
+
* waits on it would wait on, unknowing. Each is told why and what it can
|
|
536
|
+
* do; what it owes stays owed, for the turn that carries on to answer. */
|
|
537
|
+
function turnFailed(id, why) {
|
|
538
|
+
const session = getSession(id);
|
|
539
|
+
if (!session) return;
|
|
540
|
+
const last = failedTold.get(id);
|
|
541
|
+
if (last?.why === why && Date.now() - last.at < FAIL_RETELL_MS) return;
|
|
542
|
+
const askers = all("SELECT DISTINCT from_session AS id FROM session_messages WHERE to_session = ? AND wants_reply = 1 AND delivered_at IS NOT NULL AND from_session IS NOT NULL", id).map((r) => getSession(r.id)).filter((s) => !!s && s.id !== id && s.agent !== "shell");
|
|
543
|
+
if (!askers.length) return;
|
|
544
|
+
failedTold.set(id, {
|
|
545
|
+
why,
|
|
546
|
+
at: Date.now()
|
|
547
|
+
});
|
|
548
|
+
const others = agentChoices().filter((a) => a.enabled && a.id !== session.agent && a.family === agentFamily(session.agent)).map((a) => a.id);
|
|
549
|
+
const move = reopenable(session) && others.length ? ` If its account is out, \`work session reopen ${id} --agent ${others[0]}\` starts it again on its conversation as ${others.join(" or ")}, then a message carries it on.` : "";
|
|
550
|
+
for (const asker of askers) insert(asker.id, session, "notice", `Session ${labelOf(session)} stopped: its turn failed (${why}). It still owes your reply, which comes once its turn goes on: a message to it, or the user typing into it, carries it on.${move}`);
|
|
551
|
+
recompute();
|
|
552
|
+
kick();
|
|
553
|
+
}
|
|
403
554
|
/** `from`'s send to `to` is its answer to what `to` asked it by send:
|
|
404
555
|
* those messages are answered (`answerNow`'s bookkeeping), and returned
|
|
405
556
|
* for the send to name. */
|
|
406
557
|
function answerBySend(from, to) {
|
|
407
558
|
const owed = all("SELECT * FROM session_messages WHERE to_session = ? AND from_session = ? AND kind = 'message' AND wants_reply = 1 AND by_send = 1 AND delivered_at IS NOT NULL ORDER BY id", from.id, to);
|
|
408
559
|
if (!owed.length) return owed;
|
|
409
|
-
deleteIds(owed.map((r) => r.id));
|
|
560
|
+
deleteIds(owed.map((r) => r.id), "answered by a send");
|
|
410
561
|
noteAnswered(from.id);
|
|
411
562
|
return owed;
|
|
412
563
|
}
|
|
@@ -420,7 +571,8 @@ function answerBySend(from, to) {
|
|
|
420
571
|
function takeReplies(me, from, any = false) {
|
|
421
572
|
const wanted = (r) => !from?.length || r.from_session !== null && from.includes(r.from_session) || r.group_id !== null && from.includes(r.group_id);
|
|
422
573
|
const rows = delivering.has(me) ? [] : all("SELECT * FROM session_messages WHERE to_session = ? AND (kind != 'message' OR answers IS NOT NULL) AND delivered_at IS NULL ORDER BY id", me).filter(wanted).filter((r) => any || !r.group_id || team.groupReleased(r.group_id));
|
|
423
|
-
|
|
574
|
+
logDelivered(rows.map((r) => r.id), "taken by wait");
|
|
575
|
+
deleteIds(rows.filter((r) => !r.wants_reply).map((r) => r.id), "delivered");
|
|
424
576
|
const asks = rows.filter((r) => r.wants_reply).map((r) => r.id);
|
|
425
577
|
if (asks.length) db.prepare(`UPDATE session_messages SET delivered_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
426
578
|
WHERE id IN (${asks.map(() => "?").join(",")})`).run(...asks);
|
|
@@ -539,7 +691,7 @@ function answerNow(id, message) {
|
|
|
539
691
|
}
|
|
540
692
|
if (held) db.prepare(`UPDATE session_messages SET held = NULL WHERE id IN (${owed.map(() => "?").join(",")})`).run(...owed.map((r) => r.id));
|
|
541
693
|
else {
|
|
542
|
-
deleteIds(owed.map((r) => r.id));
|
|
694
|
+
deleteIds(owed.map((r) => r.id), "answered");
|
|
543
695
|
if (askers.size) {
|
|
544
696
|
answered.set(id, {
|
|
545
697
|
askers,
|
|
@@ -629,6 +781,7 @@ function settle(id, why) {
|
|
|
629
781
|
steered.delete(id);
|
|
630
782
|
answered.delete(id);
|
|
631
783
|
repliedAt.delete(id);
|
|
784
|
+
failedTold.delete(id);
|
|
632
785
|
const session = getSession(id);
|
|
633
786
|
const label = session ? labelOf(session) : id;
|
|
634
787
|
const group = team.memberGroup(id);
|
|
@@ -637,6 +790,9 @@ function settle(id, why) {
|
|
|
637
790
|
const to = getSession(asker);
|
|
638
791
|
if (to && to.id !== id && to.agent !== "shell") insert(to.id, session ?? null, "closed", `Session ${label} ${why}`, false, group);
|
|
639
792
|
}
|
|
793
|
+
const gone = all("SELECT id, wants_reply FROM session_messages WHERE to_session = ?", id);
|
|
794
|
+
logDone(gone.filter((r) => r.wants_reply).map((r) => r.id), why.replace(/\.$/, ""));
|
|
795
|
+
logDone(gone.filter((r) => !r.wants_reply).map((r) => r.id), "dropped: its session went");
|
|
640
796
|
db.prepare("DELETE FROM session_messages WHERE to_session = ?").run(id);
|
|
641
797
|
if (group) team.memberGone(id);
|
|
642
798
|
recompute();
|
|
@@ -645,7 +801,8 @@ function settle(id, why) {
|
|
|
645
801
|
/** The scraper found no pane for the session. */
|
|
646
802
|
function sessionGone(id) {
|
|
647
803
|
if (!mailboxes.has(id) || delivering.has(id)) return;
|
|
648
|
-
|
|
804
|
+
const started = Math.max(deliveredAt.get(id) ?? 0, startedAt.get(id) ?? 0);
|
|
805
|
+
if (Date.now() - started < START_GRACE_MS) return;
|
|
649
806
|
settle(id, "exited before it replied.");
|
|
650
807
|
}
|
|
651
808
|
var started$1 = false;
|
|
@@ -653,10 +810,11 @@ function startMessages() {
|
|
|
653
810
|
if (started$1) return;
|
|
654
811
|
started$1 = true;
|
|
655
812
|
onTurnEnd(answer);
|
|
813
|
+
onTurnFailed(turnFailed);
|
|
656
814
|
onPhaseChange(kick);
|
|
657
815
|
onSessionDispose((id) => {
|
|
658
816
|
settle(id, "was closed before it replied.");
|
|
659
|
-
|
|
817
|
+
deleteIds(all("SELECT id FROM session_messages WHERE from_session = ? AND delivered_at IS NOT NULL AND kind = 'message'", id).map((r) => r.id), "dropped: its sender closed");
|
|
660
818
|
db.prepare("UPDATE session_messages SET wants_reply = 0 WHERE from_session = ?").run(id);
|
|
661
819
|
recompute();
|
|
662
820
|
});
|
|
@@ -1043,7 +1201,7 @@ function keepSession(id) {
|
|
|
1043
1201
|
if (!getSession(id)) {
|
|
1044
1202
|
const closed = closedSession(id);
|
|
1045
1203
|
if (!closed) throw httpError(404, `no session ${id}`);
|
|
1046
|
-
throw httpError(409, reopenable(closed) ? `${id} has closed: a message reopens it on its conversation (\`work session send ${id} "…"\`), and it can be kept then` : `${id} has closed
|
|
1204
|
+
throw httpError(409, !reopenable(closed) ? `${id} has closed, and its conversation with it: start a new session with --keep` : closed.how === "done" ? `${id} has closed: a message reopens it on its conversation (\`work session send ${id} "…"\`), and it can be kept then` : `${id} has closed: \`work session reopen ${id}\` starts it again on its conversation, and it can be kept then`);
|
|
1047
1205
|
}
|
|
1048
1206
|
db.prepare("UPDATE sessions SET keep = 1 WHERE id = ?").run(id);
|
|
1049
1207
|
}
|
|
@@ -1056,7 +1214,8 @@ function closing(id, asker) {
|
|
|
1056
1214
|
const closed = closedSession(id);
|
|
1057
1215
|
return closed && {
|
|
1058
1216
|
closed: true,
|
|
1059
|
-
reopens: reopenable(closed)
|
|
1217
|
+
reopens: closed.how === "done" && reopenable(closed),
|
|
1218
|
+
restarts: reopenable(closed)
|
|
1060
1219
|
};
|
|
1061
1220
|
}
|
|
1062
1221
|
if (!s.parent_id || s.keep) return void 0;
|
|
@@ -1103,4 +1262,4 @@ function startTeam() {
|
|
|
1103
1262
|
kickPool();
|
|
1104
1263
|
}
|
|
1105
1264
|
//#endregion
|
|
1106
|
-
export {
|
|
1265
|
+
export { sendMessage as _, keepSession as a, takeReplies as b, retryMember as c, teamOf as d, teamsOf as f, reopen as g, messageStates as h, createGroup as i, skipMember as l, messageLog as m, closeDone as n, kickPool as o, holdReply as p, closeFinished as r, memberWorkspace as s, clearGroup as t, startTeam as u, sessionGone as v, startMessages as y };
|